<?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>176297</bug_id>
          
          <creation_ts>2017-09-03 00:58:18 -0700</creation_ts>
          <short_desc>Move shared part of the Remote Layer Tree code out of a Mac-specific directory</short_desc>
          <delta_ts>2017-09-27 12:54:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1344938</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-09-03 00:58:18 -0700</bug_when>
    <thetext>Move shared part of the Remote Layer Tree code out of a Mac-specific directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344939</commentid>
    <comment_count>1</comment_count>
      <attachid>319766</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-09-03 00:58:50 -0700</bug_when>
    <thetext>Created attachment 319766
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344941</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-03 01:02:01 -0700</bug_when>
    <thetext>Attachment 319766 did not pass style-queue:


ERROR: Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStoreCollection.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStoreCollection.h:66:  The parameter name &quot;volatilityMarkingFlags&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:489:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit/Shared/RemoteLayerTree/RemoteLayerBackingStore.h:93:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 6 in 13 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>1344979</commentid>
    <comment_count>3</comment_count>
      <attachid>319766</attachid>
    <who name="">mitz</who>
    <bug_when>2017-09-03 09:04:15 -0700</bug_when>
    <thetext>Comment on attachment 319766
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345023</commentid>
    <comment_count>4</comment_count>
      <attachid>319766</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-03 12:08:10 -0700</bug_when>
    <thetext>Comment on attachment 319766
Patch

Clearing flags on attachment: 319766

Committed r221554: &lt;http://trac.webkit.org/changeset/221554&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345024</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-03 12:08:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353727</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:54:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/34694253&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319766</attachid>
            <date>2017-09-03 00:58:50 -0700</date>
            <delta_ts>2017-09-03 12:08:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176297-20170903005849.patch</filename>
            <type>text/plain</type>
            <size>273910</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkwYWU3NmExYjU2ZTdhZjkw
Mjk1Yjc0MDc3OGVkZjgwNzRlOGQ4YzcuLmY0Nzc3MzgxZGQ4NjZhNWJiZTQ4ZDI4YWYwNjM5OTE1
Y2RjOThkNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTctMDktMDMgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBzaGFyZWQgcGFy
dCBvZiB0aGUgUmVtb3RlIExheWVyIFRyZWUgY29kZSBvdXQgb2YgYSBNYWMtc3BlY2lmaWMgZGly
ZWN0b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzYyOTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
SS1zaWRlIGNvbXBvc2l0aW5nIHdvcmtzIG9uIGFsbCBDb2NvYSBwbGF0Zm9ybXMsIHNvIHRoZSBj
b2RlIHNob3VsZAorICAgICAgICBub3QgbGl2ZSBpbnNpZGUgTWFjLy4gQWxzbyBtZXJnZSB0aGUg
U2Nyb2xsaW5nIGRpcmVjdG9yeSBpbiBoZXJlLAorICAgICAgICBzaW5jZSB0aG9zZSBmaWxlcyBh
cmUgdmVyeSByZWxhdGVkLgorCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAg
ICogU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oOiBSZW5h
bWVkIGZyb20gU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oLgorICAgICAgICAq
IFNoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW06IFJlbmFt
ZWQgZnJvbSBTaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tLgorICAgICAgICAq
IFNoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9u
Lmg6IFJlbmFtZWQgZnJvbSBTaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVj
dGlvbi5oLgorICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmVDb2xsZWN0aW9uLm1tOiBSZW5hbWVkIGZyb20gU2hhcmVkL21hYy9SZW1vdGVMYXll
ckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24ubW0uCisgICAgICAgICogU2hhcmVkL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaDogUmVuYW1lZCBmcm9tIFNoYXJl
ZC9tYWMvUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLmguCisgICAgICAgICogU2hhcmVk
L1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW06IFJlbmFt
ZWQgZnJvbSBTaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbS4KKyAg
ICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
Lmg6IFJlbmFtZWQgZnJvbSBTaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgu
CisgICAgICAgICogU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbi5tbTogUmVuYW1lZCBmcm9tIFNoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b24ubW0uCisgICAgICAgICogU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvclRyYW5zYWN0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNoYXJlZC9TY3JvbGxpbmcv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAuCisgICAgICAgICogU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9u
Lmg6IFJlbmFtZWQgZnJvbSBTaGFyZWQvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yVHJhbnNhY3Rpb24uaC4KKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKwogMjAxNy0wOS0wMiAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAg
ICAgICAgW0NBXSBVcHN0cmVhbSBRdWFydHpDb3JlLXJlbGF0ZWQgV2ViS2l0U3lzdGVtSW50ZXJm
YWNlIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFr
ZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggNDRhOTA0MDk2NjQzN2Y2
YWY1NjZmMTM3YTg0MjA3ODgxN2FlZjc0Zi4uMDE3MGM4YzdjNDJjMGU2NTNjMzFlYzljNzFhZDcz
NzI4MGVlNDg2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0xMjEsNyArMTIxLDExIEBA
IGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgU2hhcmVkL1BsdWdpbnMvbWFjL1Bs
dWdpblNhbmRib3hQcm9maWxlLm1tCiAKLSAgICBTaGFyZWQvU2Nyb2xsaW5nL1JlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwCisgICAgU2hhcmVkL1JlbW90ZUxheWVyVHJl
ZS9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQorICAgIFNoYXJlZC9SZW1vdGVMYXllclRyZWUv
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLm1tCisgICAgU2hhcmVkL1JlbW90ZUxh
eWVyVHJlZS9SZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW0KKyAgICBTaGFyZWQvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tCisgICAgU2hhcmVkL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcAog
CiAgICAgU2hhcmVkL2NmL0FyZ3VtZW50Q29kZXJzQ0YuY3BwCiAKQEAgLTE0MywxMCArMTQ3LDYg
QEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgU2hhcmVkL21hYy9QREZLaXRJbXBv
cnRzLm1tCiAgICAgU2hhcmVkL21hYy9QYXN0ZWJvYXJkVHlwZXMubW0KICAgICBTaGFyZWQvbWFj
L1ByaW50SW5mb01hYy5tbQotICAgIFNoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUu
bW0KLSAgICBTaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5tbQot
ICAgIFNoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tCi0gICAgU2hh
cmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQogICAgIFNoYXJlZC9tYWMvU2Fu
ZGJveEV4dGVuc2lvbk1hYy5tbQogICAgIFNoYXJlZC9tYWMvU2FuZGJveEluaXRpYWxpYXRpb25Q
YXJhbWV0ZXJzTWFjLm1tCiAgICAgU2hhcmVkL21hYy9TYW5kYm94VXRpbGl0aWVzLm1tCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllckJhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhYjA5ZGVmMGI3ZjhiZjkwZjlmZjJl
YWJiM2Y0YzFjYzliMTQ0NWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUuaApAQCAtMCwwICsxLDE1
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lPU3VyZmFjZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvTWFjaFNlbmRSaWdodC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+Cisj
aW5jbHVkZSA8Y2hyb25vPgorCitPQkpDX0NMQVNTIENBTGF5ZXI7CisKKy8vIEZJWE1FOiBNYWtl
IFBsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAgT2JqZWN0aXZlLUMgc28gd2UgY2FuIGluY2x1ZGUg
V2ViTGF5ZXIuaCBoZXJlIGFuZCBzaGFyZSB0aGUgdHlwZWRlZi4KK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK3R5cGVkZWYgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdCwgNT4gUmVwYWludFJlY3RMaXN0
OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUGxhdGZvcm1DQUxheWVyUmVtb3Rl
OworCitjbGFzcyBSZW1vdGVMYXllckJhY2tpbmdTdG9yZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlKFBsYXRmb3JtQ0FMYXll
clJlbW90ZSopOworICAgIH5SZW1vdGVMYXllckJhY2tpbmdTdG9yZSgpOworCisgICAgdm9pZCBl
bnN1cmVCYWNraW5nU3RvcmUoV2ViQ29yZTo6RmxvYXRTaXplLCBmbG9hdCBzY2FsZSwgYm9vbCBh
Y2NlbGVyYXRlc0RyYXdpbmcsIGJvb2wgZGVlcENvbG9yLCBib29sIGlzT3BhcXVlKTsKKworICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QpOworICAgIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICBib29sIGRpc3BsYXkoKTsKKworICAgIFdlYkNvcmU6
OkZsb2F0U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgZmxvYXQgc2Nh
bGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9CisgICAgYm9vbCBhY2NlbGVyYXRlc0RyYXdp
bmcoKSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGVzRHJhd2luZzsgfQorICAgIGJvb2wgaXNP
cGFxdWUoKSBjb25zdCB7IHJldHVybiBtX2lzT3BhcXVlOyB9CisgICAgdW5zaWduZWQgYnl0ZXNQ
ZXJQaXhlbCgpIGNvbnN0OworCisgICAgUGxhdGZvcm1DQUxheWVyUmVtb3RlKiBsYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KKworICAgIGVudW0gY2xhc3MgTGF5ZXJDb250ZW50c1R5
cGUgeyBJT1N1cmZhY2UsIENBTWFjaFBvcnQgfTsKKyAgICB2b2lkIGFwcGx5QmFja2luZ1N0b3Jl
VG9MYXllcihDQUxheWVyICosIExheWVyQ29udGVudHNUeXBlKTsKKworICAgIHZvaWQgZW5jb2Rl
KElQQzo6RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkRlY29k
ZXImLCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZSYpOworCisgICAgdm9pZCBlbnVtZXJhdGVSZWN0
c0JlaW5nRHJhd24oQ0dDb250ZXh0UmVmLCB2b2lkICheKShDR1JlY3QpKTsKKworICAgIGJvb2wg
aGFzRnJvbnRCdWZmZXIoKSBjb25zdAorICAgIHsKKyNpZiBVU0UoSU9TVVJGQUNFKQorICAgICAg
ICBpZiAobV9hY2NlbGVyYXRlc0RyYXdpbmcpCisgICAgICAgICAgICByZXR1cm4gISFtX2Zyb250
QnVmZmVyLnN1cmZhY2U7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuICEhbV9mcm9udEJ1ZmZlci5i
aXRtYXA7CisgICAgfQorCisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gdGFrZUZyb250Q29u
dGV4dFBlbmRpbmdGbHVzaCgpOworCisgICAgZW51bSBjbGFzcyBCdWZmZXJUeXBlIHsKKyAgICAg
ICAgRnJvbnQsCisgICAgICAgIEJhY2ssCisgICAgICAgIFNlY29uZGFyeUJhY2sKKyAgICB9Owor
CisgICAgYm9vbCBzZXRCdWZmZXJWb2xhdGlsaXR5KEJ1ZmZlclR5cGUgdHlwZSwgYm9vbCBpc1Zv
bGF0aWxlKTsKKworICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbGFz
dERpc3BsYXlUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RGlzcGxheVRpbWU7IH0KKworcHJp
dmF0ZToKKyAgICB2b2lkIGRyYXdJbkNvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jiwg
Q0dJbWFnZVJlZiBiYWNrSW1hZ2UpOworICAgIHZvaWQgY2xlYXJCYWNraW5nU3RvcmUoKTsKKyAg
ICB2b2lkIHN3YXBUb1ZhbGlkRnJvbnRCdWZmZXIoKTsKKworI2lmIFVTRShJT1NVUkZBQ0UpCisg
ICAgV2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQgc3VyZmFjZUJ1ZmZlckZvcm1hdCgpIGNvbnN0
OworI2VuZGlmCisKKyAgICBXZWJDb3JlOjpJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUoKSBjb25z
dDsKKworICAgIFBsYXRmb3JtQ0FMYXllclJlbW90ZSogbV9sYXllcjsKKworICAgIFdlYkNvcmU6
OkZsb2F0U2l6ZSBtX3NpemU7CisgICAgZmxvYXQgbV9zY2FsZTsKKyAgICBib29sIG1faXNPcGFx
dWU7CisKKyAgICBXZWJDb3JlOjpSZWdpb24gbV9kaXJ0eVJlZ2lvbjsKKworICAgIHN0cnVjdCBC
dWZmZXIgeworICAgICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXA7CisjaWYgVVNF
KElPU1VSRkFDRSkKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4g
c3VyZmFjZTsKKyAgICAgICAgYm9vbCBpc1ZvbGF0aWxlID0gZmFsc2U7CisjZW5kaWYKKworICAg
ICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICAgICAgeworI2lmIFVTRShJ
T1NVUkZBQ0UpCisgICAgICAgICAgICBpZiAoc3VyZmFjZSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKGJpdG1hcCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBkaXNjYXJkKCk7CisgICAgfTsKKworICAgIEJ1ZmZlciBtX2Zyb250QnVm
ZmVyOworICAgIEJ1ZmZlciBtX2JhY2tCdWZmZXI7CisjaWYgVVNFKElPU1VSRkFDRSkKKyAgICBC
dWZmZXIgbV9zZWNvbmRhcnlCYWNrQnVmZmVyOworICAgIFdlYkNvcmU6Ok1hY2hTZW5kUmlnaHQg
bV9mcm9udEJ1ZmZlclNlbmRSaWdodDsKKyNlbmRpZgorCisgICAgUmV0YWluUHRyPENHQ29udGV4
dFJlZj4gbV9mcm9udENvbnRleHRQZW5kaW5nRmx1c2g7CisKKyAgICBib29sIG1fYWNjZWxlcmF0
ZXNEcmF3aW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZGVlcENvbG9yIHsgZmFsc2UgfTsKKwor
ICAgIFdlYkNvcmU6OlJlcGFpbnRSZWN0TGlzdCBtX3BhaW50aW5nUmVjdHM7CisKKyAgICBzdGQ6
OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1fbGFzdERpc3BsYXlUaW1lOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmE1ZDJlY2QxYjk3OTEyM2I1MGM3NmE4NTdkYmVjNjk1YTY1YzVhYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVM
YXllckJhY2tpbmdTdG9yZS5tbQpAQCAtMCwwICsxLDQ5OCBAQAorIC8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IlJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmgiCisKKyNpbXBvcnQgIkFyZ3VtZW50Q29kZXJzLmgi
CisjaW1wb3J0ICJNYWNoUG9ydC5oIgorI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgi
CisjaW1wb3J0ICJSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaCIKKyNpbXBvcnQg
IlJlbW90ZUxheWVyVHJlZUNvbnRleHQuaCIKKyNpbXBvcnQgIlNoYXJlYWJsZUJpdG1hcC5oIgor
I2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1
YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvSU9TdXJmYWNlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtQ0FMYXll
ckNsaWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJMYXllci5oPgorI2ltcG9ydCA8cGFsL3Nw
aS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CisKKyNpZiBVU0UoSU9TVVJGQUNFKQorI2ltcG9ydCA8
bWFjaC9tYWNoX3BvcnQuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1JlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpSZW1vdGVMYXll
ckJhY2tpbmdTdG9yZShQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUqIGxheWVyKQorICAgIDogbV9sYXll
cihsYXllcikKKyAgICAsIG1faXNPcGFxdWUoZmFsc2UpCisgICAgLCBtX2xhc3REaXNwbGF5VGlt
ZShzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50OjptaW4oKSkKK3sKKyAgICBp
ZiAoIW1fbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoUmVtb3RlTGF5ZXJUcmVlQ29u
dGV4dCogY29udGV4dCA9IG1fbGF5ZXItPmNvbnRleHQoKSkKKyAgICAgICAgY29udGV4dC0+YmFj
a2luZ1N0b3JlV2FzQ3JlYXRlZCgqdGhpcyk7Cit9CisKK1JlbW90ZUxheWVyQmFja2luZ1N0b3Jl
Ojp+UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUoKQoreworICAgIGNsZWFyQmFja2luZ1N0b3JlKCk7
CisKKyAgICBpZiAoIW1fbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChSZW1vdGVM
YXllclRyZWVDb250ZXh0KiBjb250ZXh0ID0gbV9sYXllci0+Y29udGV4dCgpKQorICAgICAgICBj
b250ZXh0LT5iYWNraW5nU3RvcmVXaWxsQmVEZXN0cm95ZWQoKnRoaXMpOworfQorCit2b2lkIFJl
bW90ZUxheWVyQmFja2luZ1N0b3JlOjplbnN1cmVCYWNraW5nU3RvcmUoRmxvYXRTaXplIHNpemUs
IGZsb2F0IHNjYWxlLCBib29sIGFjY2VsZXJhdGVzRHJhd2luZywgYm9vbCBkZWVwQ29sb3IsIGJv
b2wgaXNPcGFxdWUpCit7CisgICAgaWYgKG1fc2l6ZSA9PSBzaXplICYmIG1fc2NhbGUgPT0gc2Nh
bGUgJiYgbV9kZWVwQ29sb3IgPT0gZGVlcENvbG9yICYmIG1fYWNjZWxlcmF0ZXNEcmF3aW5nID09
IGFjY2VsZXJhdGVzRHJhd2luZyAmJiBtX2lzT3BhcXVlID09IGlzT3BhcXVlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3NpemUgPSBzaXplOworICAgIG1fc2NhbGUgPSBzY2FsZTsKKyAgICBt
X2FjY2VsZXJhdGVzRHJhd2luZyA9IGFjY2VsZXJhdGVzRHJhd2luZzsKKyAgICBtX2RlZXBDb2xv
ciA9IGRlZXBDb2xvcjsKKyAgICBtX2lzT3BhcXVlID0gaXNPcGFxdWU7CisKKyAgICBpZiAobV9m
cm9udEJ1ZmZlcikgeworICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgdmFsaWQgYmFja2luZyBzdG9y
ZSwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBpdCBnZXRzIGNvbXBsZXRlbHkKKyAgICAgICAgLy8g
cmVwYWludGVkIHRoZSBuZXh0IHRpbWUgZGlzcGxheSgpIGlzIGNhbGxlZC4KKyAgICAgICAgc2V0
TmVlZHNEaXNwbGF5KCk7CisgICAgfQorCisgICAgY2xlYXJCYWNraW5nU3RvcmUoKTsKK30KKwor
dm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6Y2xlYXJCYWNraW5nU3RvcmUoKQoreworICAg
IG1fZnJvbnRCdWZmZXIuZGlzY2FyZCgpOworICAgIG1fYmFja0J1ZmZlci5kaXNjYXJkKCk7Cisj
aWYgVVNFKElPU1VSRkFDRSkKKyAgICBtX3NlY29uZGFyeUJhY2tCdWZmZXIuZGlzY2FyZCgpOwor
I2VuZGlmCit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmVuY29kZShJUEM6OkVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3NpemU7CisgICAgZW5j
b2RlciA8PCBtX3NjYWxlOworICAgIGVuY29kZXIgPDwgbV9hY2NlbGVyYXRlc0RyYXdpbmc7Cisg
ICAgZW5jb2RlciA8PCBtX2lzT3BhcXVlOworCisjaWYgVVNFKElPU1VSRkFDRSkKKyAgICBpZiAo
bV9hY2NlbGVyYXRlc0RyYXdpbmcpIHsKKyAgICAgICAgaWYgKG1fZnJvbnRCdWZmZXIuc3VyZmFj
ZSkKKyAgICAgICAgICAgIGVuY29kZXIgPDwgbV9mcm9udEJ1ZmZlci5zdXJmYWNlLT5jcmVhdGVT
ZW5kUmlnaHQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW5jb2RlciA8PCBXZWJDb3Jl
OjpNYWNoU2VuZFJpZ2h0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAg
IEFTU0VSVCghbV9hY2NlbGVyYXRlc0RyYXdpbmcpOworCisgICAgU2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUgaGFuZGxlOworICAgIG1fZnJvbnRCdWZmZXIuYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFu
ZGxlKTsKKyAgICBlbmNvZGVyIDw8IGhhbmRsZTsKK30KKworYm9vbCBSZW1vdGVMYXllckJhY2tp
bmdTdG9yZTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmUmIHJlc3VsdCkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX3NpemUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5tX3NjYWxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQubV9hY2NlbGVyYXRlc0RyYXdpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX2lzT3BhcXVlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisjaWYgVVNFKElPU1VSRkFDRSkKKyAgICBpZiAocmVzdWx0Lm1fYWNj
ZWxlcmF0ZXNEcmF3aW5nKSB7CisgICAgICAgIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0OworICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNlbmRSaWdodCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJlc3VsdC5tX2Zyb250QnVmZmVyU2VuZFJpZ2h0ID0gV1RGTW92ZShz
ZW5kUmlnaHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKworICAgIEFT
U0VSVCghcmVzdWx0Lm1fYWNjZWxlcmF0ZXNEcmF3aW5nKTsKKworICAgIFNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlIGhhbmRsZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQubV9mcm9udEJ1ZmZlci5iaXRtYXAgPSBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OnNldE5lZWRzRGlzcGxheShjb25zdCBJbnRSZWN0
IHJlY3QpCit7CisgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShyZWN0KTsKK30KKwordm9pZCBSZW1v
dGVMYXllckJhY2tpbmdTdG9yZTo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXROZWVkc0Rp
c3BsYXkoSW50UmVjdChJbnRQb2ludCgpLCBleHBhbmRlZEludFNpemUobV9zaXplKSkpOworfQor
CitJbnRTaXplIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpiYWNraW5nU3RvcmVTaXplKCkgY29u
c3QKK3sKKyAgICBGbG9hdFNpemUgc2NhbGVkU2l6ZSA9IG1fc2l6ZTsKKyAgICBzY2FsZWRTaXpl
LnNjYWxlKG1fc2NhbGUpOworICAgIHJldHVybiByb3VuZGVkSW50U2l6ZShzY2FsZWRTaXplKTsK
K30KKwordW5zaWduZWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmJ5dGVzUGVyUGl4ZWwoKSBj
b25zdAoreworI2lmIFVTRShJT1NVUkZBQ0UpCisgICAgc3dpdGNoIChzdXJmYWNlQnVmZmVyRm9y
bWF0KCkpIHsKKyAgICBjYXNlIFdlYkNvcmU6OklPU3VyZmFjZTo6Rm9ybWF0OjpSR0JBOiByZXR1
cm4gNDsKKyAgICBjYXNlIFdlYkNvcmU6OklPU3VyZmFjZTo6Rm9ybWF0OjpZVVY0MjI6IHJldHVy
biAyOworICAgIGNhc2UgV2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQ6OlJHQjEwOiByZXR1cm4g
NDsKKyAgICBjYXNlIFdlYkNvcmU6OklPU3VyZmFjZTo6Rm9ybWF0OjpSR0IxMEE4OiByZXR1cm4g
NTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gNDsKK30KKwordm9pZCBSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZTo6c3dhcFRvVmFsaWRGcm9udEJ1ZmZlcigpCit7CisgICAgSW50U2l6ZSBleHBh
bmRlZFNjYWxlZFNpemUgPSBiYWNraW5nU3RvcmVTaXplKCk7CisKKyNpZiBVU0UoSU9TVVJGQUNF
KQorICAgIGlmIChtX2FjY2VsZXJhdGVzRHJhd2luZykgeworICAgICAgICBpZiAoIW1fYmFja0J1
ZmZlci5zdXJmYWNlIHx8IG1fYmFja0J1ZmZlci5zdXJmYWNlLT5pc0luVXNlKCkpIHsKKyAgICAg
ICAgICAgIHN0ZDo6c3dhcChtX2JhY2tCdWZmZXIsIG1fc2Vjb25kYXJ5QmFja0J1ZmZlcik7Cisg
ICAgICAgICAgICBpZiAobV9iYWNrQnVmZmVyLnN1cmZhY2UgJiYgbV9iYWNrQnVmZmVyLnN1cmZh
Y2UtPmlzSW5Vc2UoKSkKKyAgICAgICAgICAgICAgICBtX2JhY2tCdWZmZXIuZGlzY2FyZCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RkOjpzd2FwKG1fZnJvbnRCdWZmZXIsIG1fYmFja0J1ZmZl
cik7CisKKyAgICAgICAgaWYgKCFtX2Zyb250QnVmZmVyLnN1cmZhY2UpCisgICAgICAgICAgICBt
X2Zyb250QnVmZmVyLnN1cmZhY2UgPSBXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZShleHBhbmRl
ZFNjYWxlZFNpemUsIHNSR0JDb2xvclNwYWNlUmVmKCksIHN1cmZhY2VCdWZmZXJGb3JtYXQoKSk7
CisKKyAgICAgICAgc2V0QnVmZmVyVm9sYXRpbGl0eShCdWZmZXJUeXBlOjpGcm9udCwgZmFsc2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBBU1NFUlQoIW1fYWNjZWxl
cmF0ZXNEcmF3aW5nKTsKKyAgICBzdGQ6OnN3YXAobV9mcm9udEJ1ZmZlciwgbV9iYWNrQnVmZmVy
KTsKKworICAgIGlmICghbV9mcm9udEJ1ZmZlci5iaXRtYXApIHsKKyAgICAgICAgU2hhcmVhYmxl
Qml0bWFwOjpDb25maWd1cmF0aW9uIGJpdG1hcENvbmZpZ3VyYXRpb247CisgICAgICAgIGJpdG1h
cENvbmZpZ3VyYXRpb24uaXNPcGFxdWUgPSBtX2lzT3BhcXVlOworICAgICAgICBtX2Zyb250QnVm
ZmVyLmJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGV4cGFuZGVkU2Nh
bGVkU2l6ZSwgYml0bWFwQ29uZmlndXJhdGlvbik7CisgICAgfQorfQorCitib29sIFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlOjpkaXNwbGF5KCkKK3sKKyAgICBBU1NFUlQoIW1fZnJvbnRDb250ZXh0
UGVuZGluZ0ZsdXNoKTsKKworICAgIG1fbGFzdERpc3BsYXlUaW1lID0gc3RkOjpjaHJvbm86OnN0
ZWFkeV9jbG9jazo6bm93KCk7CisKKyAgICBib29sIG5lZWRUb0VuY29kZUJhY2tpbmdTdG9yZSA9
IGZhbHNlOworICAgIGlmIChSZW1vdGVMYXllclRyZWVDb250ZXh0KiBjb250ZXh0ID0gbV9sYXll
ci0+Y29udGV4dCgpKQorICAgICAgICBuZWVkVG9FbmNvZGVCYWNraW5nU3RvcmUgPSBjb250ZXh0
LT5iYWNraW5nU3RvcmVXaWxsQmVEaXNwbGF5ZWQoKnRoaXMpOworCisgICAgLy8gTWFrZSB0aGUg
cHJldmlvdXMgZnJvbnQgYnVmZmVyIG5vbi12b2xhdGlsZSBlYXJseSwgc28gdGhhdCB3ZSBjYW4g
ZGlydHkgdGhlIHdob2xlIGxheWVyIGlmIGl0IGNvbWVzIGJhY2sgZW1wdHkuCisgICAgc2V0QnVm
ZmVyVm9sYXRpbGl0eShCdWZmZXJUeXBlOjpGcm9udCwgZmFsc2UpOworCisgICAgSW50U2l6ZSBl
eHBhbmRlZFNjYWxlZFNpemUgPSBiYWNraW5nU3RvcmVTaXplKCk7CisKKyAgICBpZiAobV9kaXJ0
eVJlZ2lvbi5pc0VtcHR5KCkgfHwgZXhwYW5kZWRTY2FsZWRTaXplLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIG5lZWRUb0VuY29kZUJhY2tpbmdTdG9yZTsKKworICAgIEludFJlY3QgbGF5ZXJC
b3VuZHMoSW50UG9pbnQoKSwgZXhwYW5kZWRJbnRTaXplKG1fc2l6ZSkpOworICAgIGlmICghaGFz
RnJvbnRCdWZmZXIoKSkKKyAgICAgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShsYXllckJvdW5kcyk7
CisKKyAgICBpZiAobV9sYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRD
b3VudGVyKG1fbGF5ZXIpKSB7CisgICAgICAgIEludFJlY3QgaW5kaWNhdG9yUmVjdCgwLCAwLCA1
MiwgMjcpOworICAgICAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKGluZGljYXRvclJlY3QpOworICAg
IH0KKworICAgIEludFJlY3QgZXhwYW5kZWRTY2FsZWRMYXllckJvdW5kcyhJbnRQb2ludCgpLCBl
eHBhbmRlZFNjYWxlZFNpemUpOworICAgIGJvb2wgd2lsbFBhaW50RW50aXJlQmFja2luZ1N0b3Jl
ID0gbV9kaXJ0eVJlZ2lvbi5jb250YWlucyhsYXllckJvdW5kcyk7CisKKyAgICBzd2FwVG9WYWxp
ZEZyb250QnVmZmVyKCk7CisKKyNpZiBVU0UoSU9TVVJGQUNFKQorICAgIGlmIChtX2FjY2VsZXJh
dGVzRHJhd2luZykgeworICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gYmFja0ltYWdlOwor
ICAgICAgICBpZiAobV9iYWNrQnVmZmVyLnN1cmZhY2UgJiYgIXdpbGxQYWludEVudGlyZUJhY2tp
bmdTdG9yZSkKKyAgICAgICAgICAgIGJhY2tJbWFnZSA9IG1fYmFja0J1ZmZlci5zdXJmYWNlLT5j
cmVhdGVJbWFnZSgpOworCisgICAgICAgIGlmIChtX2Zyb250QnVmZmVyLnN1cmZhY2UpIHsKKyAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IG1fZnJvbnRCdWZmZXIuc3VyZmFj
ZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICAgICAgICAgIGNvbnRleHQuc2NhbGUo
RmxvYXRTaXplKDEsIC0xKSk7CisgICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAtZXhw
YW5kZWRTY2FsZWRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGRyYXdJbkNvbnRleHQoY29u
dGV4dCwgYmFja0ltYWdlLmdldCgpKTsKKworICAgICAgICAgICAgbV9mcm9udEJ1ZmZlci5zdXJm
YWNlLT5yZWxlYXNlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyNl
bmRpZgorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2FjY2VsZXJhdGVzRHJhd2luZyk7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQgPSBtX2Zyb250QnVm
ZmVyLmJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICAgICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IGJhY2tJbWFnZTsKKyAgICAgICAgaWYgKG1fYmFja0J1ZmZlci5iaXRtYXAg
JiYgIXdpbGxQYWludEVudGlyZUJhY2tpbmdTdG9yZSkKKyAgICAgICAgICAgIGJhY2tJbWFnZSA9
IG1fYmFja0J1ZmZlci5iaXRtYXAtPm1ha2VDR0ltYWdlKCk7CisKKyAgICAgICAgZHJhd0luQ29u
dGV4dCgqY29udGV4dCwgYmFja0ltYWdlLmdldCgpKTsKKyAgICB9CisgICAgCisgICAgbV9sYXll
ci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KG1fbGF5ZXIpOworICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpk
cmF3SW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ0dJbWFnZVJlZiBiYWNrSW1h
Z2UpCit7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUgPSBtX3NpemU7CisgICAgc2NhbGVkU2l6
ZS5zY2FsZShtX3NjYWxlKTsKKyAgICBJbnRSZWN0IHNjYWxlZExheWVyQm91bmRzKEludFBvaW50
KCksIHJvdW5kZWRJbnRTaXplKHNjYWxlZFNpemUpKTsKKworICAgIC8vIElmIHdlIGhhdmUgbGVz
cyB0aGFuIHdlYkxheWVyTWF4UmVjdHNUb1BhaW50IHJlY3RzIHRvIHBhaW50IGFuZCB0aGV5IGNv
dmVyIGxlc3MKKyAgICAvLyB0aGFuIHdlYkxheWVyV2FzdGVkU3BhY2VUaHJlc2hvbGQgb2YgdGhl
IHRvdGFsIGRpcnR5IGFyZWEsIHdlJ2xsIHJlcGFpbnQgZWFjaCByZWN0IHNlcGFyYXRlbHkuCisg
ICAgLy8gT3RoZXJ3aXNlLCByZXBhaW50IHRoZSBlbnRpcmUgYm91bmRpbmcgYm94IG9mIHRoZSBk
aXJ0eSByZWdpb24uCisgICAgSW50UmVjdCBkaXJ0eUJvdW5kcyA9IG1fZGlydHlSZWdpb24uYm91
bmRzKCk7CisKKyAgICBWZWN0b3I8SW50UmVjdD4gZGlydHlSZWN0cyA9IG1fZGlydHlSZWdpb24u
cmVjdHMoKTsKKyAgICBpZiAoZGlydHlSZWN0cy5zaXplKCkgPiBQbGF0Zm9ybUNBTGF5ZXI6Ondl
YkxheWVyTWF4UmVjdHNUb1BhaW50IHx8IG1fZGlydHlSZWdpb24udG90YWxBcmVhKCkgPiBQbGF0
Zm9ybUNBTGF5ZXI6OndlYkxheWVyV2FzdGVkU3BhY2VUaHJlc2hvbGQgKiBkaXJ0eUJvdW5kcy53
aWR0aCgpICogZGlydHlCb3VuZHMuaGVpZ2h0KCkpIHsKKyAgICAgICAgZGlydHlSZWN0cy5jbGVh
cigpOworICAgICAgICBkaXJ0eVJlY3RzLmFwcGVuZChkaXJ0eUJvdW5kcyk7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IGZpbmQgYSBjb25zaXN0ZW50IHdheSB0byBzY2FsZSBhbmQgc25hcCBkaXJ0
eSBhbmQgQ0cgY2xpcCByZWN0cy4KKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiBkaXJ0eVJl
Y3RzKSB7CisgICAgICAgIEZsb2F0UmVjdCBzY2FsZWRSZWN0KHJlY3QpOworICAgICAgICBzY2Fs
ZWRSZWN0LnNjYWxlKG1fc2NhbGUpOworICAgICAgICBzY2FsZWRSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChzY2FsZWRSZWN0KTsKKyAgICAgICAgc2NhbGVkUmVjdC5zY2FsZSgxIC8gbV9zY2FsZSk7
CisgICAgICAgIG1fcGFpbnRpbmdSZWN0cy5hcHBlbmQoc2NhbGVkUmVjdCk7CisgICAgfQorCisg
ICAgQ0dSZWN0IGNnUGFpbnRpbmdSZWN0c1tQbGF0Zm9ybUNBTGF5ZXI6OndlYkxheWVyTWF4UmVj
dHNUb1BhaW50XTsKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgZGlydHlSZWN0Q291bnQgPSBtX3Bh
aW50aW5nUmVjdHMuc2l6ZSgpOyBpIDwgZGlydHlSZWN0Q291bnQ7ICsraSkgeworICAgICAgICBG
bG9hdFJlY3Qgc2NhbGVkUGFpbnRpbmdSZWN0ID0gbV9wYWludGluZ1JlY3RzW2ldOworICAgICAg
ICBzY2FsZWRQYWludGluZ1JlY3Quc2NhbGUobV9zY2FsZSk7CisgICAgICAgIGNnUGFpbnRpbmdS
ZWN0c1tpXSA9IHNjYWxlZFBhaW50aW5nUmVjdDsKKyAgICB9CisKKyAgICBDR0NvbnRleHRSZWYg
Y2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGlmIChiYWNrSW1h
Z2UpIHsKKyAgICAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNnQ29udGV4dCk7
CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjZ0NvbnRleHQsIGtDR0JsZW5kTW9kZUNv
cHkpOworICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY2dDb250ZXh0LCAwLCBzY2FsZWRM
YXllckJvdW5kcy5oZWlnaHQoKSk7CisgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4
dCwgMSwgLTEpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY2dDb250ZXh0LCBzY2FsZWRM
YXllckJvdW5kcywgYmFja0ltYWdlKTsKKyAgICB9CisKKyAgICBDR0NvbnRleHRDbGlwVG9SZWN0
cyhjZ0NvbnRleHQsIGNnUGFpbnRpbmdSZWN0cywgbV9wYWludGluZ1JlY3RzLnNpemUoKSk7CisK
KyAgICBpZiAoIW1faXNPcGFxdWUpCisgICAgICAgIGNvbnRleHQuY2xlYXJSZWN0KHNjYWxlZExh
eWVyQm91bmRzKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAobV9pc09wYXF1ZSkKKyAgICAg
ICAgY29udGV4dC5maWxsUmVjdChzY2FsZWRMYXllckJvdW5kcywgQ29sb3IoMjU1LCAwLCAwKSk7
CisjZW5kaWYKKworICAgIGNvbnRleHQuc2NhbGUobV9zY2FsZSk7CisgICAgCisgICAgYXV0byBm
bGFncyA9IG1fbGF5ZXItPmNvbnRleHQoKSAmJiBtX2xheWVyLT5jb250ZXh0KCktPm5leHRGbHVz
aElzRm9ySW1tZWRpYXRlUGFpbnQoKSA/IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludFNuYXBz
aG90dGluZyA6IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludE5vcm1hbDsKKyAgICAKKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gUGxhdGZvcm1DQUxheWVyUmVtb3RlIGZv
ciBiZXR0ZXIgbGF5ZXJpbmcuCisgICAgc3dpdGNoIChtX2xheWVyLT5sYXllclR5cGUoKSkgewor
ICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVTaW1wbGVMYXllcjoKKyAgICBjYXNl
IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxheWVyOgorICAgICAg
ICBtX2xheWVyLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKG1fbGF5ZXIs
IGNvbnRleHQsIGRpcnR5Qm91bmRzLCBmbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVXZWJMYXllcjoKKyAgICBjYXNlIFBsYXRmb3JtQ0FM
YXllcjo6TGF5ZXJUeXBlQmFja2Ryb3BMYXllcjoKKyAgICAgICAgUGxhdGZvcm1DQUxheWVyOjpk
cmF3TGF5ZXJDb250ZW50cyhjZ0NvbnRleHQsIG1fbGF5ZXIsIG1fcGFpbnRpbmdSZWN0cywgZmxh
Z3MpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
RGFya1N5c3RlbUJhY2tkcm9wTGF5ZXI6CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZUxpZ2h0U3lzdGVtQmFja2Ryb3BMYXllcjoKKyAgICAgICAgLy8gRklYTUU6IFRoZXNlIGhh
dmUgYSBtb3JlIGNvbXBsaWNhdGVkIGxheWVyIGhpZXJhcmNoeS4gV2UgbmVlZCB0byBwYWludCBp
bnRvCisgICAgICAgIC8vIGEgY2hpbGQgbGF5ZXIgaW4gb3JkZXIgdG8gc2VlIHRoZSByZW5kZXJl
ZCByZXN1bHRzLgorICAgICAgICBQbGF0Zm9ybUNBTGF5ZXI6OmRyYXdMYXllckNvbnRlbnRzKGNn
Q29udGV4dCwgbV9sYXllciwgbV9wYWludGluZ1JlY3RzLCBmbGFncyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllcjoKKyAgICBjYXNlIFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXI6CisgICAgY2FzZSBQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZVRpbGVkQmFja2luZ0xheWVyOgorICAgIGNhc2UgUGxhdGZvcm1D
QUxheWVyOjpMYXllclR5cGVQYWdlVGlsZWRCYWNraW5nTGF5ZXI6CisgICAgY2FzZSBQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZVJvb3RMYXllcjoKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6
TGF5ZXJUeXBlQVZQbGF5ZXJMYXllcjoKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlQ29udGVudHNQcm92aWRlZExheWVyOgorICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVTaGFwZUxheWVyOgorICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVTY3Jv
bGxpbmdMYXllcjoKKyAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlQ3VzdG9tOgor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfTsKKwor
ICAgIG1fZGlydHlSZWdpb24gPSBSZWdpb24oKTsKKyAgICBtX3BhaW50aW5nUmVjdHMuY2xlYXIo
KTsKKworICAgIG1fZnJvbnRDb250ZXh0UGVuZGluZ0ZsdXNoID0gY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKTsKK30KKwordm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZW51bWVyYXRlUmVj
dHNCZWluZ0RyYXduKENHQ29udGV4dFJlZiBjb250ZXh0LCB2b2lkICheYmxvY2spKENHUmVjdCkp
Cit7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gaW52ZXJzZVRyYW5zZm9ybSA9IENHQWZmaW5lVHJh
bnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldENUTShjb250ZXh0KSk7CisKKyAgICAvLyBXZSBkb24n
dCB3YW50IHRvIHVuLWFwcGx5IHRoZSBmbGlwcGluZyBvciBjb250ZW50c1NjYWxlLAorICAgIC8v
IGJlY2F1c2UgdGhleSdyZSBub3QgYXBwbGllZCB0byByZXBhaW50IHJlY3RzLgorICAgIGludmVy
c2VUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKGludmVyc2VUcmFuc2Zvcm0sIG1f
c2NhbGUsIC1tX3NjYWxlKTsKKyAgICBpbnZlcnNlVHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zv
cm1UcmFuc2xhdGUoaW52ZXJzZVRyYW5zZm9ybSwgMCwgLW1fc2l6ZS5oZWlnaHQoKSk7CisKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiBtX3BhaW50aW5nUmVjdHMpIHsKKyAgICAgICAgQ0dS
ZWN0IHJlY3RUb0RyYXcgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShyZWN0LCBpbnZlcnNl
VHJhbnNmb3JtKTsKKyAgICAgICAgYmxvY2socmVjdFRvRHJhdyk7CisgICAgfQorfQorCit2b2lk
IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjphcHBseUJhY2tpbmdTdG9yZVRvTGF5ZXIoQ0FMYXll
ciAqbGF5ZXIsIExheWVyQ29udGVudHNUeXBlIGNvbnRlbnRzVHlwZSkKK3sKKyAgICBsYXllci5j
b250ZW50c09wYXF1ZSA9IG1faXNPcGFxdWU7CisKKyNpZiBVU0UoSU9TVVJGQUNFKQorICAgIGlm
IChhY2NlbGVyYXRlc0RyYXdpbmcoKSkgeworICAgICAgICBzd2l0Y2ggKGNvbnRlbnRzVHlwZSkg
eworICAgICAgICBjYXNlIExheWVyQ29udGVudHNUeXBlOjpJT1N1cmZhY2U6CisgICAgICAgICAg
ICBpZiAoIW1fZnJvbnRCdWZmZXIuc3VyZmFjZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCht
X2Zyb250QnVmZmVyU2VuZFJpZ2h0KTsKKyAgICAgICAgICAgICAgICBtX2Zyb250QnVmZmVyLnN1
cmZhY2UgPSBXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZUZyb21TZW5kUmlnaHQoV1RGTW92ZSht
X2Zyb250QnVmZmVyU2VuZFJpZ2h0KSwgc1JHQkNvbG9yU3BhY2VSZWYoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBsYXllci5jb250ZW50cyA9IG1fZnJvbnRCdWZmZXIuc3VyZmFjZSA/
IG1fZnJvbnRCdWZmZXIuc3VyZmFjZS0+YXNMYXllckNvbnRlbnRzKCkgOiBuaWw7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMYXllckNvbnRlbnRzVHlwZTo6Q0FNYWNoUG9ydDoK
KyAgICAgICAgICAgIEFTU0VSVChtX2Zyb250QnVmZmVyU2VuZFJpZ2h0KTsKKyAgICAgICAgICAg
IGxheWVyLmNvbnRlbnRzID0gKGlkKWFkb3B0Q0YoQ0FNYWNoUG9ydENyZWF0ZShtX2Zyb250QnVm
ZmVyU2VuZFJpZ2h0LmxlYWtTZW5kUmlnaHQoKSkpLmdldCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgQVNTRVJU
KCFhY2NlbGVyYXRlc0RyYXdpbmcoKSk7CisgICAgbGF5ZXIuY29udGVudHMgPSAoaWQpbV9mcm9u
dEJ1ZmZlci5iaXRtYXAtPm1ha2VDR0ltYWdlQ29weSgpLmdldCgpOworfQorCitSZXRhaW5QdHI8
Q0dDb250ZXh0UmVmPiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6dGFrZUZyb250Q29udGV4dFBl
bmRpbmdGbHVzaCgpCit7CisgICAgcmV0dXJuIFdURk1vdmUobV9mcm9udENvbnRleHRQZW5kaW5n
Rmx1c2gpOworfQorCisjaWYgVVNFKElPU1VSRkFDRSkKK2Jvb2wgUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmU6OnNldEJ1ZmZlclZvbGF0aWxpdHkoQnVmZmVyVHlwZSB0eXBlLCBib29sIGlzVm9sYXRp
bGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBCdWZmZXJUeXBlOjpGcm9udDoK
KyAgICAgICAgaWYgKG1fZnJvbnRCdWZmZXIuc3VyZmFjZSAmJiBtX2Zyb250QnVmZmVyLmlzVm9s
YXRpbGUgIT0gaXNWb2xhdGlsZSkgeworICAgICAgICAgICAgaWYgKGlzVm9sYXRpbGUpCisgICAg
ICAgICAgICAgICAgbV9mcm9udEJ1ZmZlci5zdXJmYWNlLT5yZWxlYXNlR3JhcGhpY3NDb250ZXh0
KCk7CisgICAgICAgICAgICBpZiAoIWlzVm9sYXRpbGUgfHwgIW1fZnJvbnRCdWZmZXIuc3VyZmFj
ZS0+aXNJblVzZSgpKSB7CisgICAgICAgICAgICAgICAgYXV0byBwcmV2aW91c1N0YXRlID0gbV9m
cm9udEJ1ZmZlci5zdXJmYWNlLT5zZXRJc1ZvbGF0aWxlKGlzVm9sYXRpbGUpOworICAgICAgICAg
ICAgICAgIG1fZnJvbnRCdWZmZXIuaXNWb2xhdGlsZSA9IGlzVm9sYXRpbGU7CisKKyAgICAgICAg
ICAgICAgICAvLyBCZWNvbWluZyBub24tdm9sYXRpbGUgYW5kIHRoZSBmcm9udCBidWZmZXIgd2Fz
IHB1cmdlZCwgc28gd2UgbmVlZCB0byByZXBhaW50LgorICAgICAgICAgICAgICAgIGlmICghaXNW
b2xhdGlsZSAmJiAocHJldmlvdXNTdGF0ZSA9PSBXZWJDb3JlOjpJT1N1cmZhY2U6OlN1cmZhY2VT
dGF0ZTo6RW1wdHkpKQorICAgICAgICAgICAgICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEJ1ZmZlclR5cGU6OkJhY2s6CisgICAgICAgIGlm
IChtX2JhY2tCdWZmZXIuc3VyZmFjZSAmJiBtX2JhY2tCdWZmZXIuaXNWb2xhdGlsZSAhPSBpc1Zv
bGF0aWxlKSB7CisgICAgICAgICAgICBpZiAoaXNWb2xhdGlsZSkKKyAgICAgICAgICAgICAgICBt
X2JhY2tCdWZmZXIuc3VyZmFjZS0+cmVsZWFzZUdyYXBoaWNzQ29udGV4dCgpOworICAgICAgICAg
ICAgaWYgKCFpc1ZvbGF0aWxlIHx8ICFtX2JhY2tCdWZmZXIuc3VyZmFjZS0+aXNJblVzZSgpKSB7
CisgICAgICAgICAgICAgICAgbV9iYWNrQnVmZmVyLnN1cmZhY2UtPnNldElzVm9sYXRpbGUoaXNW
b2xhdGlsZSk7CisgICAgICAgICAgICAgICAgbV9iYWNrQnVmZmVyLmlzVm9sYXRpbGUgPSBpc1Zv
bGF0aWxlOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQnVmZmVyVHlwZTo6U2Vjb25k
YXJ5QmFjazoKKyAgICAgICAgaWYgKG1fc2Vjb25kYXJ5QmFja0J1ZmZlci5zdXJmYWNlICYmIG1f
c2Vjb25kYXJ5QmFja0J1ZmZlci5pc1ZvbGF0aWxlICE9IGlzVm9sYXRpbGUpIHsKKyAgICAgICAg
ICAgIGlmIChpc1ZvbGF0aWxlKQorICAgICAgICAgICAgICAgIG1fc2Vjb25kYXJ5QmFja0J1ZmZl
ci5zdXJmYWNlLT5yZWxlYXNlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgICAgICBpZiAoIWlz
Vm9sYXRpbGUgfHwgIW1fc2Vjb25kYXJ5QmFja0J1ZmZlci5zdXJmYWNlLT5pc0luVXNlKCkpIHsK
KyAgICAgICAgICAgICAgICBtX3NlY29uZGFyeUJhY2tCdWZmZXIuc3VyZmFjZS0+c2V0SXNWb2xh
dGlsZShpc1ZvbGF0aWxlKTsKKyAgICAgICAgICAgICAgICBtX3NlY29uZGFyeUJhY2tCdWZmZXIu
aXNWb2xhdGlsZSA9IGlzVm9sYXRpbGU7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorI2Vsc2UKK2Jvb2wgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OnNl
dEJ1ZmZlclZvbGF0aWxpdHkoQnVmZmVyVHlwZSwgYm9vbCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKyNlbmRpZgorCit2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpCdWZmZXI6OmRpc2Nh
cmQoKQoreworI2lmIFVTRShJT1NVUkZBQ0UpCisgICAgaWYgKHN1cmZhY2UpCisgICAgICAgIFdl
YkNvcmU6OklPU3VyZmFjZTo6bW92ZVRvUG9vbChXVEZNb3ZlKHN1cmZhY2UpKTsKKyAgICBpc1Zv
bGF0aWxlID0gZmFsc2U7CisjZW5kaWYKKyAgICBiaXRtYXAgPSBudWxscHRyOworfQorCisjaWYg
VVNFKElPU1VSRkFDRSkKK1dlYkNvcmU6OklPU3VyZmFjZTo6Rm9ybWF0IFJlbW90ZUxheWVyQmFj
a2luZ1N0b3JlOjpzdXJmYWNlQnVmZmVyRm9ybWF0KCkgY29uc3QKK3sKKyAgICBpZiAobV9kZWVw
Q29sb3IpCisgICAgICAgIHJldHVybiBtX2lzT3BhcXVlID8gV2ViQ29yZTo6SU9TdXJmYWNlOjpG
b3JtYXQ6OlJHQjEwIDogV2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQ6OlJHQjEwQTg7CisKKyAg
ICByZXR1cm4gV2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQ6OlJHQkE7Cit9CisjZW5kaWYgLy8g
VVNFKElPU1VSRkFDRSkKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVD
b2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmU0OTcxZWU3MzkyNDE0
YWJjMTE5NDBhYzc5ZjhmNzkxNGNhNDg2MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rp
b24uaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb25faAor
I2RlZmluZSBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb25faAorCisjaW1wb3J0IDxX
ZWJDb3JlL1RpbWVyLmg+CisjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgorI2ltcG9ydCA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZTsKK2NsYXNzIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ7CitjbGFzcyBSZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbjsKKworY2xhc3MgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xs
ZWN0aW9uIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW1vdGVMYXllckJhY2tpbmdTdG9y
ZUNvbGxlY3Rpb24pOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbigpOworCisgICAgdm9pZCBiYWNraW5n
U3RvcmVXYXNDcmVhdGVkKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlJik7CisgICAgdm9pZCBiYWNr
aW5nU3RvcmVXaWxsQmVEZXN0cm95ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmKTsKKworICAg
IC8vIFJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYmFja2luZyBzdG9yZSBuZWVk
cyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgdHJhbnNhY3Rpb24uCisgICAgYm9vbCBiYWNraW5nU3Rv
cmVXaWxsQmVEaXNwbGF5ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmKTsKKyAgICB2b2lkIGJh
Y2tpbmdTdG9yZUJlY2FtZVVucmVhY2hhYmxlKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlJik7CisK
KyAgICB2b2lkIHdpbGxGbHVzaExheWVycygpOworICAgIHZvaWQgd2lsbENvbW1pdExheWVyVHJl
ZShSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYpOworICAgIHZvaWQgZGlkRmx1c2hMYXllcnMo
KTsKKworICAgIHZvaWQgdm9sYXRpbGl0eVRpbWVyRmlyZWQoKTsKKyAgICBib29sIG1hcmtBbGxC
YWNraW5nU3RvcmVWb2xhdGlsZUltbWVkaWF0ZWx5SWZQb3NzaWJsZSgpOworCisgICAgdm9pZCBz
Y2hlZHVsZVZvbGF0aWxpdHlUaW1lcigpOworCitwcml2YXRlOgorICAgIGVudW0gVm9sYXRpbGl0
eU1hcmtpbmdGbGFnIHsKKyAgICAgICAgTWFya0J1ZmZlcnNJZ25vcmluZ1JlYWNoYWJpbGl0eSA9
IDEgPDwgMAorICAgIH07CisgICAgdHlwZWRlZiB1bnNpZ25lZCBWb2xhdGlsaXR5TWFya2luZ0Zs
YWdzOworICAgIGJvb2wgbWFya0JhY2tpbmdTdG9yZVZvbGF0aWxlSW1tZWRpYXRlbHkoUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmUmLCBWb2xhdGlsaXR5TWFya2luZ0ZsYWdzIHZvbGF0aWxpdHlNYXJr
aW5nRmxhZ3MgPSAwKTsKKyAgICBib29sIG1hcmtCYWNraW5nU3RvcmVWb2xhdGlsZShSZW1vdGVM
YXllckJhY2tpbmdTdG9yZSYsIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQg
bm93KTsKKworICAgIEhhc2hTZXQ8UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqPiBtX2xpdmVCYWNr
aW5nU3RvcmU7CisgICAgSGFzaFNldDxSZW1vdGVMYXllckJhY2tpbmdTdG9yZSo+IG1fdW5wYXJl
bnRlZEJhY2tpbmdTdG9yZTsKKworICAgIC8vIE9ubHkgdXNlZCBkdXJpbmcgYSBzaW5nbGUgZmx1
c2guCisgICAgSGFzaFNldDxSZW1vdGVMYXllckJhY2tpbmdTdG9yZSo+IG1fcmVhY2hhYmxlQmFj
a2luZ1N0b3JlSW5MYXRlc3RGbHVzaDsKKworICAgIFdlYkNvcmU6OlRpbWVyIG1fdm9sYXRpbGl0
eVRpbWVyOworCisgICAgYm9vbCBtX2luTGF5ZXJGbHVzaCB7IGZhbHNlIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29s
bGVjdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42NTQ4MTZmNGIwODQzMDllOTI0NWI0NmJjNWY0ZWVmNmI5ZTI0ZTdjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5tbQpAQCAtMCwwICsxLDE4OCBAQAorIC8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIlJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5oIgorCisj
aW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCIKKyNpbXBvcnQgIlJlbW90ZUxheWVyQmFj
a2luZ1N0b3JlLmgiCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVDb250ZXh0LmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ6OmxpdGVyYWxzOjpjaHJvbm9fbGl0ZXJhbHM7CisKK2NvbnN0IHN0ZDo6
Y2hyb25vOjpzZWNvbmRzIHZvbGF0aWxlQmFja2luZ1N0b3JlQWdlVGhyZXNob2xkID0gMXM7Citj
b25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHZvbGF0aWxlU2Vjb25kYXJ5QmFja2luZ1N0
b3JlQWdlVGhyZXNob2xkID0gMjAwbXM7Citjb25zdCBTZWNvbmRzIHZvbGF0aWxpdHlUaW1lcklu
dGVydmFsID0gMjAwX21zOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmVDb2xsZWN0aW9uOjpSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24oKQor
ICAgIDogbV92b2xhdGlsaXR5VGltZXIoKnRoaXMsICZSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNv
bGxlY3Rpb246OnZvbGF0aWxpdHlUaW1lckZpcmVkKQoreworfQorCit2b2lkIFJlbW90ZUxheWVy
QmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6d2lsbEZsdXNoTGF5ZXJzKCkKK3sKKyAgICBtX2luTGF5
ZXJGbHVzaCA9IHRydWU7CisgICAgbV9yZWFjaGFibGVCYWNraW5nU3RvcmVJbkxhdGVzdEZsdXNo
LmNsZWFyKCk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjp3
aWxsQ29tbWl0TGF5ZXJUcmVlKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
bikKK3sKKyAgICBBU1NFUlQobV9pbkxheWVyRmx1c2gpOworICAgIFZlY3RvcjxXZWJDb3JlOjpH
cmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IG5ld2x5VW5yZWFjaGFibGVMYXllcklEczsK
KyAgICBmb3IgKGF1dG8mIGJhY2tpbmdTdG9yZSA6IG1fbGl2ZUJhY2tpbmdTdG9yZSkgeworICAg
ICAgICBpZiAoIW1fcmVhY2hhYmxlQmFja2luZ1N0b3JlSW5MYXRlc3RGbHVzaC5jb250YWlucyhi
YWNraW5nU3RvcmUpKQorICAgICAgICAgICAgbmV3bHlVbnJlYWNoYWJsZUxheWVySURzLmFwcGVu
ZChiYWNraW5nU3RvcmUtPmxheWVyKCktPmxheWVySUQoKSk7CisgICAgfQorCisgICAgdHJhbnNh
Y3Rpb24uc2V0TGF5ZXJJRHNXaXRoTmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZShuZXdseVVu
cmVhY2hhYmxlTGF5ZXJJRHMpOworfQorCit2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29s
bGVjdGlvbjo6ZGlkRmx1c2hMYXllcnMoKQoreworICAgIG1faW5MYXllckZsdXNoID0gZmFsc2U7
CisKKyAgICBWZWN0b3I8UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqPiBuZXdseVVucmVhY2hhYmxl
QmFja2luZ1N0b3JlOworICAgIGZvciAoYXV0byYgYmFja2luZ1N0b3JlIDogbV9saXZlQmFja2lu
Z1N0b3JlKSB7CisgICAgICAgIGlmICghbV9yZWFjaGFibGVCYWNraW5nU3RvcmVJbkxhdGVzdEZs
dXNoLmNvbnRhaW5zKGJhY2tpbmdTdG9yZSkpCisgICAgICAgICAgICBuZXdseVVucmVhY2hhYmxl
QmFja2luZ1N0b3JlLmFwcGVuZChiYWNraW5nU3RvcmUpOworICAgIH0KKworICAgIGZvciAoYXV0
byYgYmFja2luZ1N0b3JlIDogbmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZSkKKyAgICAgICAg
YmFja2luZ1N0b3JlQmVjYW1lVW5yZWFjaGFibGUoKmJhY2tpbmdTdG9yZSk7CisKKyAgICBpZiAo
IW5ld2x5VW5yZWFjaGFibGVCYWNraW5nU3RvcmUuaXNFbXB0eSgpKQorICAgICAgICBzY2hlZHVs
ZVZvbGF0aWxpdHlUaW1lcigpOworfQorCit2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29s
bGVjdGlvbjo6YmFja2luZ1N0b3JlV2FzQ3JlYXRlZChSZW1vdGVMYXllckJhY2tpbmdTdG9yZSYg
YmFja2luZ1N0b3JlKQoreworICAgIG1fbGl2ZUJhY2tpbmdTdG9yZS5hZGQoJmJhY2tpbmdTdG9y
ZSk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjpiYWNraW5n
U3RvcmVXaWxsQmVEZXN0cm95ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9y
ZSkKK3sKKyAgICBtX2xpdmVCYWNraW5nU3RvcmUucmVtb3ZlKCZiYWNraW5nU3RvcmUpOworICAg
IG1fdW5wYXJlbnRlZEJhY2tpbmdTdG9yZS5yZW1vdmUoJmJhY2tpbmdTdG9yZSk7Cit9CisKK2Jv
b2wgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjpiYWNraW5nU3RvcmVXaWxsQmVE
aXNwbGF5ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKK3sKKyAgICBB
U1NFUlQobV9pbkxheWVyRmx1c2gpOworICAgIG1fcmVhY2hhYmxlQmFja2luZ1N0b3JlSW5MYXRl
c3RGbHVzaC5hZGQoJmJhY2tpbmdTdG9yZSk7CisKKyAgICBhdXRvIGJhY2tpbmdTdG9yZUl0ZXIg
PSBtX3VucGFyZW50ZWRCYWNraW5nU3RvcmUuZmluZCgmYmFja2luZ1N0b3JlKTsKKyAgICBpZiAo
YmFja2luZ1N0b3JlSXRlciA9PSBtX3VucGFyZW50ZWRCYWNraW5nU3RvcmUuZW5kKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fbGl2ZUJhY2tpbmdTdG9yZS5hZGQoJmJhY2tpbmdT
dG9yZSk7CisgICAgbV91bnBhcmVudGVkQmFja2luZ1N0b3JlLnJlbW92ZShiYWNraW5nU3RvcmVJ
dGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW1vdGVMYXllckJhY2tpbmdTdG9y
ZUNvbGxlY3Rpb246Om1hcmtCYWNraW5nU3RvcmVWb2xhdGlsZUltbWVkaWF0ZWx5KFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIFZvbGF0aWxpdHlNYXJraW5nRmxhZ3Mgdm9s
YXRpbGl0eU1hcmtpbmdGbGFncykKK3sKKyAgICBBU1NFUlQoIW1faW5MYXllckZsdXNoKTsKKyAg
ICBib29sIHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSA9IHRydWU7CisKKyAg
ICBpZiAoIWJhY2tpbmdTdG9yZS5zZXRCdWZmZXJWb2xhdGlsaXR5KFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlOjpCdWZmZXJUeXBlOjpTZWNvbmRhcnlCYWNrLCB0cnVlKSkKKyAgICAgICAgc3VjY2Vz
c2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0aWxlID0gZmFsc2U7CisKKyAgICBpZiAoIWJhY2tp
bmdTdG9yZS5zZXRCdWZmZXJWb2xhdGlsaXR5KFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpCdWZm
ZXJUeXBlOjpCYWNrLCB0cnVlKSkKKyAgICAgICAgc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9y
ZVZvbGF0aWxlID0gZmFsc2U7CisKKyAgICBpZiAoIW1fcmVhY2hhYmxlQmFja2luZ1N0b3JlSW5M
YXRlc3RGbHVzaC5jb250YWlucygmYmFja2luZ1N0b3JlKSB8fCAodm9sYXRpbGl0eU1hcmtpbmdG
bGFncyAmIE1hcmtCdWZmZXJzSWdub3JpbmdSZWFjaGFiaWxpdHkpKSB7CisgICAgICAgIGlmICgh
YmFja2luZ1N0b3JlLnNldEJ1ZmZlclZvbGF0aWxpdHkoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6
OkJ1ZmZlclR5cGU6OkZyb250LCB0cnVlKSkKKyAgICAgICAgICAgIHN1Y2Nlc3NmdWxseU1hZGVC
YWNraW5nU3RvcmVWb2xhdGlsZSA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBzdWNjZXNz
ZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGU7Cit9CisKK2Jvb2wgUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmVDb2xsZWN0aW9uOjptYXJrQmFja2luZ1N0b3JlVm9sYXRpbGUoUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGlt
ZV9wb2ludCBub3cpCit7CisgICAgaWYgKG5vdyAtIGJhY2tpbmdTdG9yZS5sYXN0RGlzcGxheVRp
bWUoKSA8IHZvbGF0aWxlQmFja2luZ1N0b3JlQWdlVGhyZXNob2xkKSB7CisgICAgICAgIGlmIChu
b3cgLSBiYWNraW5nU3RvcmUubGFzdERpc3BsYXlUaW1lKCkgPj0gdm9sYXRpbGVTZWNvbmRhcnlC
YWNraW5nU3RvcmVBZ2VUaHJlc2hvbGQpCisgICAgICAgICAgICBiYWNraW5nU3RvcmUuc2V0QnVm
ZmVyVm9sYXRpbGl0eShSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6QnVmZmVyVHlwZTo6U2Vjb25k
YXJ5QmFjaywgdHJ1ZSk7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gbWFya0JhY2tpbmdTdG9yZVZvbGF0aWxlSW1tZWRpYXRlbHkoYmFja2luZ1N0b3Jl
KTsKK30KKwordm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OmJhY2tpbmdT
dG9yZUJlY2FtZVVucmVhY2hhYmxlKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlJiBiYWNraW5nU3Rv
cmUpCit7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZS5sYXllcigpKTsKKworICAgIGF1dG8gYmFj
a2luZ1N0b3JlSXRlciA9IG1fbGl2ZUJhY2tpbmdTdG9yZS5maW5kKCZiYWNraW5nU3RvcmUpOwor
ICAgIGlmIChiYWNraW5nU3RvcmVJdGVyID09IG1fbGl2ZUJhY2tpbmdTdG9yZS5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fdW5wYXJlbnRlZEJhY2tpbmdTdG9yZS5hZGQoJmJhY2tpbmdT
dG9yZSk7CisgICAgbV9saXZlQmFja2luZ1N0b3JlLnJlbW92ZShiYWNraW5nU3RvcmVJdGVyKTsK
KworICAgIC8vIFRoaXMgd2lsbCBub3Qgc3VjY2VlZCBpbiBtYXJraW5nIGFsbCBidWZmZXJzIGFz
IHZvbGF0aWxlLCBiZWNhdXNlIHRoZSBjb21taXQgdW5wYXJlbnRpbmcgdGhlIGxheWVyIGhhc24n
dAorICAgIC8vIG1hZGUgaXQgdG8gdGhlIFVJIHByb2Nlc3MgeWV0LiBUaGUgdm9sYXRpbGl0eSB0
aW1lciB3aWxsIGZpbmlzaCBtYXJraW5nIHRoZSByZW1haW5pbmcgYnVmZmVycyBsYXRlci4KKyAg
ICBtYXJrQmFja2luZ1N0b3JlVm9sYXRpbGVJbW1lZGlhdGVseShiYWNraW5nU3RvcmUpOworfQor
Citib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6bWFya0FsbEJhY2tpbmdT
dG9yZVZvbGF0aWxlSW1tZWRpYXRlbHlJZlBvc3NpYmxlKCkKK3sKKyAgICBib29sIHN1Y2Nlc3Nm
dWxseU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSA9IHRydWU7CisKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGJhY2tpbmdTdG9yZSA6IG1fbGl2ZUJhY2tpbmdTdG9yZSkKKyAgICAgICAgc3VjY2Vzc2Z1
bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0aWxlICY9IG1hcmtCYWNraW5nU3RvcmVWb2xhdGlsZUlt
bWVkaWF0ZWx5KCpiYWNraW5nU3RvcmUsIE1hcmtCdWZmZXJzSWdub3JpbmdSZWFjaGFiaWxpdHkp
OworCisgICAgZm9yIChjb25zdCBhdXRvJiBiYWNraW5nU3RvcmUgOiBtX3VucGFyZW50ZWRCYWNr
aW5nU3RvcmUpCisgICAgICAgIHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSAm
PSBtYXJrQmFja2luZ1N0b3JlVm9sYXRpbGVJbW1lZGlhdGVseSgqYmFja2luZ1N0b3JlLCBNYXJr
QnVmZmVyc0lnbm9yaW5nUmVhY2hhYmlsaXR5KTsKKworICAgIHJldHVybiBzdWNjZXNzZnVsbHlN
YWRlQmFja2luZ1N0b3JlVm9sYXRpbGU7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3Rv
cmVDb2xsZWN0aW9uOjp2b2xhdGlsaXR5VGltZXJGaXJlZCgpCit7CisgICAgYm9vbCBzdWNjZXNz
ZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGUgPSB0cnVlOworCisgICAgYXV0byBub3cgPSBz
dGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGJh
Y2tpbmdTdG9yZSA6IG1fbGl2ZUJhY2tpbmdTdG9yZSkKKyAgICAgICAgc3VjY2Vzc2Z1bGx5TWFk
ZUJhY2tpbmdTdG9yZVZvbGF0aWxlICY9IG1hcmtCYWNraW5nU3RvcmVWb2xhdGlsZSgqYmFja2lu
Z1N0b3JlLCBub3cpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBiYWNraW5nU3RvcmUgOiBtX3Vu
cGFyZW50ZWRCYWNraW5nU3RvcmUpCisgICAgICAgIHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5nU3Rv
cmVWb2xhdGlsZSAmPSBtYXJrQmFja2luZ1N0b3JlVm9sYXRpbGVJbW1lZGlhdGVseSgqYmFja2lu
Z1N0b3JlKTsKKworICAgIGlmIChzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGUp
CisgICAgICAgIG1fdm9sYXRpbGl0eVRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBSZW1vdGVMYXll
ckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OnNjaGVkdWxlVm9sYXRpbGl0eVRpbWVyKCkKK3sKKyAg
ICBpZiAobV92b2xhdGlsaXR5VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV92b2xhdGlsaXR5VGltZXIuc3RhcnRSZXBlYXRpbmcodm9sYXRpbGl0eVRpbWVySW50ZXJ2
YWwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIu
aCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVQ
cm9wZXJ0eUFwcGxpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDFiYTkxMDhmYTVjZjRjOTc4ZTgzM2Y1ZmJh
NWEzMTIwYzIyZThlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5oCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkxheWVyUmVwcmVz
ZW50YXRpb24uaCIKKyNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1v
dGVMYXllclRyZWVIb3N0OworCitjbGFzcyBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIg
eworcHVibGljOgorICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQ
bGF0Zm9ybUxheWVySUQsIExheWVyT3JWaWV3ICo+IFJlbGF0ZWRMYXllck1hcDsKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVByb3BlcnRpZXMoQ0FMYXllciAqLCBSZW1vdGVMYXllclRyZWVIb3N0Kiwg
Y29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyYsIGNvbnN0
IFJlbGF0ZWRMYXllck1hcCYsIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpMYXllckNvbnRlbnRz
VHlwZSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5UHJvcGVydGll
cyhVSVZpZXcgKiwgUmVtb3RlTGF5ZXJUcmVlSG9zdCosIGNvbnN0IFJlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXMmLCBjb25zdCBSZWxhdGVkTGF5ZXJNYXAmLCBSZW1v
dGVMYXllckJhY2tpbmdTdG9yZTo6TGF5ZXJDb250ZW50c1R5cGUpOworI2VuZGlmCit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW0gYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBs
aWVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFiMTE1OWM4ZDY0NTc5NjNjM2Q1OTExNjUzNjE3OWU4MGRmYjQ4
OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tCkBAIC0wLDAgKzEsMzQyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZW1vdGVMYXllclRyZWVQ
cm9wZXJ0eUFwcGxpZXIuaCIKKworI2ltcG9ydCAiUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5o
IgorI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgiCisjaW1wb3J0ICJSZW1vdGVMYXll
clRyZWVIb3N0LmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUGxhdGZvcm1DQUZpbHRlcnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFy
VGhlbWVNYWMuaD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgorI2lt
cG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKworI2lmIFBMQVRGT1JNKElPUykKKyNp
bXBvcnQgPFVJS2l0L1VJVmlldy5oPgorI2ltcG9ydCA8VUlLaXRTUEkuaD4KKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oSU9TKQorQGludGVyZmFjZSBVSVZpZXcgKFdLVUlWaWV3VXRpbGl0aWVzKQor
LSAodm9pZClfd2ViX3NldFN1YnZpZXdzOihOU0FycmF5ICopc3Vidmlld3M7CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBVSVZpZXcgKFdLVUlWaWV3VXRpbGl0aWVzKQorCistICh2b2lkKV93ZWJf
c2V0U3Vidmlld3M6KE5TQXJyYXkgKiluZXdTdWJ2aWV3cworeworICAgIE5TVUludGVnZXIgbnVt
T2xkU3Vidmlld3MgPSBzZWxmLnN1YnZpZXdzLmNvdW50OworICAgIE5TVUludGVnZXIgbnVtTmV3
U3Vidmlld3MgPSBuZXdTdWJ2aWV3cy5jb3VudDsKKworICAgIE5TVUludGVnZXIgY3VyckluZGV4
ID0gMDsKKyAgICBmb3IgKGN1cnJJbmRleCA9IDA7IGN1cnJJbmRleCA8IG51bU5ld1N1YnZpZXdz
OyArK2N1cnJJbmRleCkgeworICAgICAgICBVSVZpZXcgKmN1cnJOZXdTdWJ2aWV3ID0gW25ld1N1
YnZpZXdzIG9iamVjdEF0SW5kZXg6Y3VyckluZGV4XTsKKworICAgICAgICBpZiAoY3VyckluZGV4
IDwgbnVtT2xkU3Vidmlld3MpIHsKKyAgICAgICAgICAgIFVJVmlldyAqZXhpc3RpbmdTdWJ2aWV3
ID0gW3NlbGYuc3Vidmlld3Mgb2JqZWN0QXRJbmRleDpjdXJySW5kZXhdOworICAgICAgICAgICAg
aWYgKGV4aXN0aW5nU3VidmlldyA9PSBjdXJyTmV3U3VidmlldykKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5ldyBvciBtb3ZlZCBzdWJ2aWV3Lgor
ICAgICAgICBbc2VsZiBpbnNlcnRTdWJ2aWV3OmN1cnJOZXdTdWJ2aWV3IGF0SW5kZXg6Y3Vycklu
ZGV4XTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdmlld3MgYXQgdGhlIGVuZC4KKyAgICBOU1VJ
bnRlZ2VyIHJlbWFpbmluZ1N1YnZpZXdzID0gc2VsZi5zdWJ2aWV3cy5jb3VudDsKKyAgICBmb3Ig
KE5TVUludGVnZXIgaSA9IGN1cnJJbmRleDsgaSA8IHJlbWFpbmluZ1N1YnZpZXdzOyArK2kpCisg
ICAgICAgIFtbc2VsZi5zdWJ2aWV3cyBvYmplY3RBdEluZGV4OmN1cnJJbmRleF0gcmVtb3ZlRnJv
bVN1cGVydmlld107CisKKyAgICBBU1NFUlQoW3NlbGYuc3Vidmlld3MgaXNFcXVhbFRvQXJyYXk6
bmV3U3Vidmlld3NdKTsKK30KKworQGVuZAorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIENHQ29sb3JSZWYgY2dDb2xvckZy
b21Db2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICByZXR1cm4gY2FjaGVkQ0dDb2xvcihjb2xvcik7
Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqdG9DQUZpbHRlclR5cGUoUGxhdGZvcm1DQUxheWVyOjpG
aWx0ZXJUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBQbGF0Zm9y
bUNBTGF5ZXI6OkxpbmVhcjoKKyAgICAgICAgcmV0dXJuIGtDQUZpbHRlckxpbmVhcjsKKyAgICBj
YXNlIFBsYXRmb3JtQ0FMYXllcjo6TmVhcmVzdDoKKyAgICAgICAgcmV0dXJuIGtDQUZpbHRlck5l
YXJlc3Q7CisgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OlRyaWxpbmVhcjoKKyAgICAgICAgcmV0
dXJuIGtDQUZpbHRlclRyaWxpbmVhcjsKKyAgICB9OworICAgIAorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVDdXN0b21BcHBl
YXJhbmNlKENBTGF5ZXIgKmxheWVyLCBHcmFwaGljc0xheWVyOjpDdXN0b21BcHBlYXJhbmNlIGN1
c3RvbUFwcGVhcmFuY2UpCit7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIHN3aXRj
aCAoY3VzdG9tQXBwZWFyYW5jZSkgeworICAgIGNhc2UgR3JhcGhpY3NMYXllcjo6Tm9DdXN0b21B
cHBlYXJhbmNlOgorICAgIGNhc2UgR3JhcGhpY3NMYXllcjo6RGFya0JhY2tkcm9wQXBwZWFyYW5j
ZToKKyAgICBjYXNlIEdyYXBoaWNzTGF5ZXI6OkxpZ2h0QmFja2Ryb3BBcHBlYXJhbmNlOgorICAg
ICAgICBTY3JvbGxiYXJUaGVtZU1hYzo6cmVtb3ZlT3ZlcmhhbmdBcmVhQmFja2dyb3VuZChsYXll
cik7CisgICAgICAgIFNjcm9sbGJhclRoZW1lTWFjOjpyZW1vdmVPdmVyaGFuZ0FyZWFTaGFkb3co
bGF5ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzTGF5ZXI6OlNjcm9sbGlu
Z092ZXJoYW5nOgorICAgICAgICBTY3JvbGxiYXJUaGVtZU1hYzo6c2V0VXBPdmVyaGFuZ0FyZWFC
YWNrZ3JvdW5kKGxheWVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0xheWVy
OjpTY3JvbGxpbmdTaGFkb3c6CisgICAgICAgIFNjcm9sbGJhclRoZW1lTWFjOjpzZXRVcE92ZXJo
YW5nQXJlYVNoYWRvdyhsYXllcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKGN1c3RvbUFwcGVhcmFuY2UpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lk
IGFwcGx5UHJvcGVydGllc1RvTGF5ZXIoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhv
c3QqIGxheWVyVHJlZUhvc3QsIGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXll
clByb3BlcnRpZXMmIHByb3BlcnRpZXMsIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpMYXllckNv
bnRlbnRzVHlwZSBsYXllckNvbnRlbnRzVHlwZSkKK3sKKyAgICBpZiAocHJvcGVydGllcy5jaGFu
Z2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpOYW1lQ2hhbmdlZCkK
KyAgICAgICAgbGF5ZXIubmFtZSA9IHByb3BlcnRpZXMubmFtZTsKKworICAgIGlmIChwcm9wZXJ0
aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlBvc2l0
aW9uQ2hhbmdlZCkgeworICAgICAgICBsYXllci5wb3NpdGlvbiA9IENHUG9pbnRNYWtlKHByb3Bl
cnRpZXMucG9zaXRpb24ueCgpLCBwcm9wZXJ0aWVzLnBvc2l0aW9uLnkoKSk7CisgICAgICAgIGxh
eWVyLnpQb3NpdGlvbiA9IHByb3BlcnRpZXMucG9zaXRpb24ueigpOworICAgIH0KKworICAgIGlm
IChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b246OkFuY2hvclBvaW50Q2hhbmdlZCkgeworICAgICAgICBsYXllci5hbmNob3JQb2ludCA9IENH
UG9pbnRNYWtlKHByb3BlcnRpZXMuYW5jaG9yUG9pbnQueCgpLCBwcm9wZXJ0aWVzLmFuY2hvclBv
aW50LnkoKSk7CisgICAgICAgIGxheWVyLmFuY2hvclBvaW50WiA9IHByb3BlcnRpZXMuYW5jaG9y
UG9pbnQueigpOworICAgIH0KKworICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVz
ICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkJvdW5kc0NoYW5nZWQpCisgICAgICAgIGxh
eWVyLmJvdW5kcyA9IHByb3BlcnRpZXMuYm91bmRzOworICAgIAorICAgIGlmIChwcm9wZXJ0aWVz
LmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkJhY2tncm91
bmRDb2xvckNoYW5nZWQpCisgICAgICAgIGxheWVyLmJhY2tncm91bmRDb2xvciA9IGNnQ29sb3JG
cm9tQ29sb3IocHJvcGVydGllcy5iYWNrZ3JvdW5kQ29sb3IpOworCisgICAgaWYgKHByb3BlcnRp
ZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Qm9yZGVy
Q29sb3JDaGFuZ2VkKQorICAgICAgICBsYXllci5ib3JkZXJDb2xvciA9IGNnQ29sb3JGcm9tQ29s
b3IocHJvcGVydGllcy5ib3JkZXJDb2xvcik7CisKKyAgICBpZiAocHJvcGVydGllcy5jaGFuZ2Vk
UHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpCb3JkZXJXaWR0aENoYW5n
ZWQpCisgICAgICAgIGxheWVyLmJvcmRlcldpZHRoID0gcHJvcGVydGllcy5ib3JkZXJXaWR0aDsK
KworICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb246Ok9wYWNpdHlDaGFuZ2VkKQorICAgICAgICBsYXllci5vcGFjaXR5ID0gcHJv
cGVydGllcy5vcGFjaXR5OworCisgICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMg
JiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6VHJhbnNmb3JtQ2hhbmdlZCkKKyAgICAgICAg
bGF5ZXIudHJhbnNmb3JtID0gcHJvcGVydGllcy50cmFuc2Zvcm0gPyAoQ0FUcmFuc2Zvcm0zRCkq
cHJvcGVydGllcy50cmFuc2Zvcm0uZ2V0KCkgOiBDQVRyYW5zZm9ybTNESWRlbnRpdHk7CisKKyAg
ICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uOjpTdWJsYXllclRyYW5zZm9ybUNoYW5nZWQpCisgICAgICAgIGxheWVyLnN1YmxheWVy
VHJhbnNmb3JtID0gcHJvcGVydGllcy5zdWJsYXllclRyYW5zZm9ybSA/IChDQVRyYW5zZm9ybTNE
KSpwcm9wZXJ0aWVzLnN1YmxheWVyVHJhbnNmb3JtLmdldCgpIDogQ0FUcmFuc2Zvcm0zRElkZW50
aXR5OworCisgICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXll
clRyZWVUcmFuc2FjdGlvbjo6SGlkZGVuQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXIuaGlkZGVuID0g
cHJvcGVydGllcy5oaWRkZW47CisKKyAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGll
cyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpHZW9tZXRyeUZsaXBwZWRDaGFuZ2VkKQor
ICAgICAgICBsYXllci5nZW9tZXRyeUZsaXBwZWQgPSBwcm9wZXJ0aWVzLmdlb21ldHJ5RmxpcHBl
ZDsKKworICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb246OkRvdWJsZVNpZGVkQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXIuZG91Ymxl
U2lkZWQgPSBwcm9wZXJ0aWVzLmRvdWJsZVNpZGVkOworCisgICAgaWYgKHByb3BlcnRpZXMuY2hh
bmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TWFza3NUb0JvdW5k
c0NoYW5nZWQpCisgICAgICAgIGxheWVyLm1hc2tzVG9Cb3VuZHMgPSBwcm9wZXJ0aWVzLm1hc2tz
VG9Cb3VuZHM7CisKKyAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpPcGFxdWVDaGFuZ2VkKQorICAgICAgICBsYXllci5vcGFx
dWUgPSBwcm9wZXJ0aWVzLm9wYXF1ZTsKKworICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9w
ZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNvbnRlbnRzUmVjdENoYW5nZWQp
CisgICAgICAgIGxheWVyLmNvbnRlbnRzUmVjdCA9IHByb3BlcnRpZXMuY29udGVudHNSZWN0Owor
CisgICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6Q29udGVudHNTY2FsZUNoYW5nZWQpIHsKKyAgICAgICAgbGF5ZXIuY29udGVu
dHNTY2FsZSA9IHByb3BlcnRpZXMuY29udGVudHNTY2FsZTsKKyAgICAgICAgbGF5ZXIucmFzdGVy
aXphdGlvblNjYWxlID0gcHJvcGVydGllcy5jb250ZW50c1NjYWxlOworICAgIH0KKworICAgIGlm
IChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b246OkNvcm5lclJhZGl1c0NoYW5nZWQpCisgICAgICAgIGxheWVyLmNvcm5lclJhZGl1cyA9IHBy
b3BlcnRpZXMuY29ybmVyUmFkaXVzOworCisgICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3Bl
cnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6U2hhcGVSb3VuZGVkUmVjdENoYW5n
ZWQpIHsKKyAgICAgICAgUGF0aCBwYXRoOworICAgICAgICBpZiAocHJvcGVydGllcy5zaGFwZVJv
dW5kZWRSZWN0KQorICAgICAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdCgqcHJvcGVydGllcy5z
aGFwZVJvdW5kZWRSZWN0KTsKKyAgICAgICAgQVNTRVJUKFtsYXllciBpc0tpbmRPZkNsYXNzOltD
QVNoYXBlTGF5ZXIgY2xhc3NdXSk7CisgICAgICAgIFsoQ0FTaGFwZUxheWVyICopbGF5ZXIgc2V0
UGF0aDpwYXRoLnBsYXRmb3JtUGF0aCgpXTsKKyAgICB9CisKKyAgICBpZiAocHJvcGVydGllcy5j
aGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpTaGFwZVBhdGhD
aGFuZ2VkKSB7CisgICAgICAgIEFTU0VSVChbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FTaGFwZUxh
eWVyIGNsYXNzXV0pOworICAgICAgICBbKENBU2hhcGVMYXllciAqKWxheWVyIHNldFBhdGg6cHJv
cGVydGllcy5zaGFwZVBhdGgucGxhdGZvcm1QYXRoKCldOworICAgIH0KKworICAgIGlmIChwcm9w
ZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246Ok1p
bmlmaWNhdGlvbkZpbHRlckNoYW5nZWQpCisgICAgICAgIGxheWVyLm1pbmlmaWNhdGlvbkZpbHRl
ciA9IHRvQ0FGaWx0ZXJUeXBlKHByb3BlcnRpZXMubWluaWZpY2F0aW9uRmlsdGVyKTsKKworICAg
IGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb246Ok1hZ25pZmljYXRpb25GaWx0ZXJDaGFuZ2VkKQorICAgICAgICBsYXllci5tYWduaWZp
Y2F0aW9uRmlsdGVyID0gdG9DQUZpbHRlclR5cGUocHJvcGVydGllcy5tYWduaWZpY2F0aW9uRmls
dGVyKTsKKworICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb246OkJsZW5kTW9kZUNoYW5nZWQpCisgICAgICAgIFBsYXRmb3JtQ0FG
aWx0ZXJzOjpzZXRCbGVuZGluZ0ZpbHRlcnNPbkxheWVyKGxheWVyLCBwcm9wZXJ0aWVzLmJsZW5k
TW9kZSk7CisKKyAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjpXaW5kUnVsZUNoYW5nZWQpIHsKKyAgICAgICAgQVNTRVJUKFts
YXllciBpc0tpbmRPZkNsYXNzOltDQVNoYXBlTGF5ZXIgY2xhc3NdXSk7CisgICAgICAgIENBU2hh
cGVMYXllciAqc2hhcGVMYXllciA9IChDQVNoYXBlTGF5ZXIgKilsYXllcjsKKyAgICAgICAgc3dp
dGNoIChwcm9wZXJ0aWVzLndpbmRSdWxlKSB7CisgICAgICAgIGNhc2UgUlVMRV9OT05aRVJPOgor
ICAgICAgICAgICAgc2hhcGVMYXllci5maWxsUnVsZSA9IEAibm9uLXplcm8iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlVMRV9FVkVOT0REOgorICAgICAgICAgICAgc2hhcGVM
YXllci5maWxsUnVsZSA9IEAiZXZlbi1vZGQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpTcGVlZENoYW5nZWQpCisgICAgICAgIGxheWVyLnNwZWVk
ID0gcHJvcGVydGllcy5zcGVlZDsKKworICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0
aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlRpbWVPZmZzZXRDaGFuZ2VkKQorICAg
ICAgICBsYXllci50aW1lT2Zmc2V0ID0gcHJvcGVydGllcy50aW1lT2Zmc2V0OworCisgICAgaWYg
KHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlv
bjo6QmFja2luZ1N0b3JlQ2hhbmdlZAorICAgICAgICB8fCBwcm9wZXJ0aWVzLmNoYW5nZWRQcm9w
ZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkJhY2tpbmdTdG9yZUF0dGFjaG1l
bnRDaGFuZ2VkKQorICAgIHsKKyAgICAgICAgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqIGJhY2tp
bmdTdG9yZSA9IHByb3BlcnRpZXMuYmFja2luZ1N0b3JlLmdldCgpOworICAgICAgICBpZiAoYmFj
a2luZ1N0b3JlICYmIHByb3BlcnRpZXMuYmFja2luZ1N0b3JlQXR0YWNoZWQpCisgICAgICAgICAg
ICBiYWNraW5nU3RvcmUtPmFwcGx5QmFja2luZ1N0b3JlVG9MYXllcihsYXllciwgbGF5ZXJDb250
ZW50c1R5cGUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxheWVyLmNvbnRlbnRzID0g
bmlsOworICAgICAgICAgICAgbGF5ZXIuY29udGVudHNPcGFxdWUgPSBOTzsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb246OkZpbHRlcnNDaGFuZ2VkKQorICAgICAgICBQbGF0Zm9ybUNBRmls
dGVyczo6c2V0RmlsdGVyc09uTGF5ZXIobGF5ZXIsIHByb3BlcnRpZXMuZmlsdGVycyA/ICpwcm9w
ZXJ0aWVzLmZpbHRlcnMgOiBGaWx0ZXJPcGVyYXRpb25zKCkpOworCisgICAgaWYgKHByb3BlcnRp
ZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6QW5pbWF0
aW9uc0NoYW5nZWQpCisgICAgICAgIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OnVwZGF0ZUxh
eWVyQW5pbWF0aW9ucyhsYXllciwgbGF5ZXJUcmVlSG9zdCwgcHJvcGVydGllcy5hZGRlZEFuaW1h
dGlvbnMsIHByb3BlcnRpZXMua2V5UGF0aHNPZkFuaW1hdGlvbnNUb1JlbW92ZSk7CisKKyAgICBp
ZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uOjpFZGdlQW50aWFsaWFzaW5nTWFza0NoYW5nZWQpCisgICAgICAgIGxheWVyLmVkZ2VBbnRp
YWxpYXNpbmdNYXNrID0gcHJvcGVydGllcy5lZGdlQW50aWFsaWFzaW5nTWFzazsKKworICAgIGlm
IChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b246OkN1c3RvbUFwcGVhcmFuY2VDaGFuZ2VkKQorICAgICAgICB1cGRhdGVDdXN0b21BcHBlYXJh
bmNlKGxheWVyLCBwcm9wZXJ0aWVzLmN1c3RvbUFwcGVhcmFuY2UpOworfQorCit2b2lkIFJlbW90
ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllcjo6YXBwbHlQcm9wZXJ0aWVzKENBTGF5ZXIgKmxheWVy
LCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0LCBjb25zdCBSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBjb25zdCBSZWxhdGVk
TGF5ZXJNYXAmIHJlbGF0ZWRMYXllcnMsIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpMYXllckNv
bnRlbnRzVHlwZSBsYXllckNvbnRlbnRzVHlwZSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CisgICAgYXBwbHlQcm9wZXJ0aWVzVG9MYXllcihsYXllciwgbGF5ZXJUcmVlSG9z
dCwgcHJvcGVydGllcywgbGF5ZXJDb250ZW50c1R5cGUpOworCisgICAgaWYgKHByb3BlcnRpZXMu
Y2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q2hpbGRyZW5D
aGFuZ2VkKSB7CisgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gY2hpbGRyZW4gPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cHJvcGVydGll
cy5jaGlsZHJlbi5zaXplKCldKTsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IHByb3BlcnRp
ZXMuY2hpbGRyZW4pIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWxhdGVkTGF5ZXJzLmdldChjaGls
ZCkpOworICAgICAgICAgICAgW2NoaWxkcmVuIGFkZE9iamVjdDpyZWxhdGVkTGF5ZXJzLmdldChj
aGlsZCldOworICAgICAgICB9CisKKyAgICAgICAgbGF5ZXIuc3VibGF5ZXJzID0gY2hpbGRyZW4u
Z2V0KCk7CisgICAgfQorCisgICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TWFza0xheWVyQ2hhbmdlZCkgeworICAgICAgICBp
ZiAoIXByb3BlcnRpZXMubWFza0xheWVySUQpCisgICAgICAgICAgICBsYXllci5tYXNrID0gbnVs
bHB0cjsKKyAgICAgICAgZWxzZSB7CisjaWYgUExBVEZPUk0oSU9TKQorICAgICAgICAgICAgVUlW
aWV3ICptYXNrVmlldyA9IHJlbGF0ZWRMYXllcnMuZ2V0KHByb3BlcnRpZXMubWFza0xheWVySUQp
OworICAgICAgICAgICAgLy8gRklYTUU6IG5lZWQgdG8gY2hlY2sgdGhhdCB0aGUgbWFzayB2aWV3
IGlzIGtlcHQgYWxpdmUuCisgICAgICAgICAgICBBU1NFUlQoIW1hc2tWaWV3LmxheWVyLnN1cGVy
bGF5ZXIpOworICAgICAgICAgICAgaWYgKCFtYXNrVmlldy5sYXllci5zdXBlcmxheWVyKQorICAg
ICAgICAgICAgICAgIGxheWVyLm1hc2sgPSBtYXNrVmlldy5sYXllcjsKKyNlbHNlCisgICAgICAg
ICAgICBDQUxheWVyICptYXNrTGF5ZXIgPSByZWxhdGVkTGF5ZXJzLmdldChwcm9wZXJ0aWVzLm1h
c2tMYXllcklEKTsKKyAgICAgICAgICAgIEFTU0VSVCghbWFza0xheWVyLnN1cGVybGF5ZXIpOwor
ICAgICAgICAgICAgaWYgKCFtYXNrTGF5ZXIuc3VwZXJsYXllcikKKyAgICAgICAgICAgICAgICBs
YXllci5tYXNrID0gbWFza0xheWVyOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgUmVt
b3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyOjphcHBseVByb3BlcnRpZXMoVUlWaWV3ICp2aWV3
LCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0LCBjb25zdCBSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBjb25zdCBSZWxhdGVk
TGF5ZXJNYXAmIHJlbGF0ZWRMYXllcnMsIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpMYXllckNv
bnRlbnRzVHlwZSBsYXllckNvbnRlbnRzVHlwZSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CisgICAgYXBwbHlQcm9wZXJ0aWVzVG9MYXllcih2aWV3LmxheWVyLCBsYXllclRy
ZWVIb3N0LCBwcm9wZXJ0aWVzLCBsYXllckNvbnRlbnRzVHlwZSk7CisKKyAgICBpZiAocHJvcGVy
dGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpDaGls
ZHJlbkNoYW5nZWQpIHsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBjaGlsZHJl
biA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpwcm9w
ZXJ0aWVzLmNoaWxkcmVuLnNpemUoKV0pOworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogcHJv
cGVydGllcy5jaGlsZHJlbikgeworICAgICAgICAgICAgQVNTRVJUKHJlbGF0ZWRMYXllcnMuZ2V0
KGNoaWxkKSk7CisgICAgICAgICAgICBbY2hpbGRyZW4gYWRkT2JqZWN0OnJlbGF0ZWRMYXllcnMu
Z2V0KGNoaWxkKV07CisgICAgICAgIH0KKworICAgICAgICBpZiAocHJvcGVydGllcy5jdXN0b21B
cHBlYXJhbmNlID09IEdyYXBoaWNzTGF5ZXI6OkxpZ2h0QmFja2Ryb3BBcHBlYXJhbmNlIHx8IHBy
b3BlcnRpZXMuY3VzdG9tQXBwZWFyYW5jZSA9PSBHcmFwaGljc0xheWVyOjpEYXJrQmFja2Ryb3BB
cHBlYXJhbmNlKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgVUlCYWNrZHJvcFZpZXcsIHdo
aWNoIHNob3VsZCBoYXZlIGNoaWxkcmVuIGF0dGFjaGVkIHRvCisgICAgICAgICAgICAvLyBpdHMg
Y29udGVudCB2aWV3LCBub3QgZGlyZWN0bHkgb24gaXRzIGxheWVycy4KKyAgICAgICAgICAgIFtb
KF9VSUJhY2tkcm9wVmlldyopdmlldyBjb250ZW50Vmlld10gX3dlYl9zZXRTdWJ2aWV3czpjaGls
ZHJlbi5nZXQoKV07CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgW3ZpZXcgX3dlYl9zZXRT
dWJ2aWV3czpjaGlsZHJlbi5nZXQoKV07CisgICAgfQorCisgICAgaWYgKHByb3BlcnRpZXMuY2hh
bmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TWFza0xheWVyQ2hh
bmdlZCkgeworICAgICAgICBDQUxheWVyICptYXNrT3duZXJMYXllciA9IHZpZXcubGF5ZXI7CisK
KyAgICAgICAgaWYgKHByb3BlcnRpZXMuY3VzdG9tQXBwZWFyYW5jZSA9PSBHcmFwaGljc0xheWVy
OjpMaWdodEJhY2tkcm9wQXBwZWFyYW5jZSB8fCBwcm9wZXJ0aWVzLmN1c3RvbUFwcGVhcmFuY2Ug
PT0gR3JhcGhpY3NMYXllcjo6RGFya0JhY2tkcm9wQXBwZWFyYW5jZSkgeworICAgICAgICAgICAg
Ly8gVGhpcyBpcyBhIFVJQmFja2Ryb3BWaWV3LCB3aGljaCBtZWFucyBhbnkgbWFzayBtdXN0IGJl
IGFwcGxpZWQgdG8gdGhlIENBQmFja2Ryb3BMYXllciByYXRoZXIKKyAgICAgICAgICAgIC8vIHRo
YXQgdGhlIHZpZXcncyBsYXllci4gVGhlIGJhY2tkcm9wIGlzIHRoZSBmaXJzdCBsYXllciBjaGls
ZC4KKyAgICAgICAgICAgIGlmICh2aWV3LmxheWVyLnN1YmxheWVycy5jb3VudCAmJiBbdmlldy5s
YXllci5zdWJsYXllcnNbMF0gaXNLaW5kT2ZDbGFzczpbQ0FCYWNrZHJvcExheWVyIGNsYXNzXV0p
CisgICAgICAgICAgICAgICAgbWFza093bmVyTGF5ZXIgPSB2aWV3LmxheWVyLnN1YmxheWVyc1sw
XTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghcHJvcGVydGllcy5tYXNrTGF5ZXJJRCkKKyAg
ICAgICAgICAgIG1hc2tPd25lckxheWVyLm1hc2sgPSBudWxscHRyOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFVJVmlldyAqbWFza1ZpZXcgPSByZWxhdGVkTGF5ZXJzLmdldChwcm9wZXJ0
aWVzLm1hc2tMYXllcklEKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBuZWVkIHRvIGNoZWNrIHRo
YXQgdGhlIG1hc2sgdmlldyBpcyBrZXB0IGFsaXZlLgorICAgICAgICAgICAgQVNTRVJUKCFtYXNr
Vmlldy5sYXllci5zdXBlcmxheWVyKTsKKyAgICAgICAgICAgIGlmICghbWFza1ZpZXcubGF5ZXIu
c3VwZXJsYXllcikKKyAgICAgICAgICAgICAgICBtYXNrT3duZXJMYXllci5tYXNrID0gbWFza1Zp
ZXcubGF5ZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocHJvcGVydGllcy5jaGFuZ2Vk
UHJvcGVydGllcyAmIChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q29udGVudHNIaWRkZW5D
aGFuZ2VkIHwgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlVzZXJJbnRlcmFjdGlvbkVuYWJs
ZWRDaGFuZ2VkKSkKKyAgICAgICAgdmlldy51c2VySW50ZXJhY3Rpb25FbmFibGVkID0gIXByb3Bl
cnRpZXMuY29udGVudHNIaWRkZW4gJiYgcHJvcGVydGllcy51c2VySW50ZXJhY3Rpb25FbmFibGVk
OworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxh
eWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOWJmMmYwODhjODI3MGFkYWNlM2IyNDI3MGFhNmU0NDM4MDA3ZmI0YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbi5oCkBAIC0wLDAgKzEsMzE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbl9oCisjZGVmaW5lIFJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uX2gKKworI2luY2x1ZGUgIkVkaXRvclN0YXRlLmgiCisjaW5jbHVkZSAiR2VuZXJpY0Nh
bGxiYWNrLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oIgorI2luY2x1
ZGUgIlJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsdGVyT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRmxvYXRQb2ludDNELmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFNpemUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0xheW91dE1pbGVzdG9uZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRm
b3JtQ0FMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIERlY29kZXI7CitjbGFzcyBFbmNvZGVyOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUGxhdGZvcm1DQUxheWVyUmVtb3RlOwor
CitjbGFzcyBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBM
YXllckNoYW5nZXMgeworICAgICAgICBOb0NoYW5nZSAgICAgICAgICAgICAgICAgICAgICAgID0g
MCwKKyAgICAgICAgTmFtZUNoYW5nZWQgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgPDwgMSwK
KyAgICAgICAgQ2hpbGRyZW5DaGFuZ2VkICAgICAgICAgICAgICAgICA9IDFMTFUgPDwgMiwKKyAg
ICAgICAgUG9zaXRpb25DaGFuZ2VkICAgICAgICAgICAgICAgICA9IDFMTFUgPDwgMywKKyAgICAg
ICAgQm91bmRzQ2hhbmdlZCAgICAgICAgICAgICAgICAgICA9IDFMTFUgPDwgNCwKKyAgICAgICAg
QmFja2dyb3VuZENvbG9yQ2hhbmdlZCAgICAgICAgICA9IDFMTFUgPDwgNSwKKyAgICAgICAgQW5j
aG9yUG9pbnRDaGFuZ2VkICAgICAgICAgICAgICA9IDFMTFUgPDwgNiwKKyAgICAgICAgQm9yZGVy
V2lkdGhDaGFuZ2VkICAgICAgICAgICAgICA9IDFMTFUgPDwgNywKKyAgICAgICAgQm9yZGVyQ29s
b3JDaGFuZ2VkICAgICAgICAgICAgICA9IDFMTFUgPDwgOCwKKyAgICAgICAgT3BhY2l0eUNoYW5n
ZWQgICAgICAgICAgICAgICAgICA9IDFMTFUgPDwgOSwKKyAgICAgICAgVHJhbnNmb3JtQ2hhbmdl
ZCAgICAgICAgICAgICAgICA9IDFMTFUgPDwgMTAsCisgICAgICAgIFN1YmxheWVyVHJhbnNmb3Jt
Q2hhbmdlZCAgICAgICAgPSAxTExVIDw8IDExLAorICAgICAgICBIaWRkZW5DaGFuZ2VkICAgICAg
ICAgICAgICAgICAgID0gMUxMVSA8PCAxMiwKKyAgICAgICAgR2VvbWV0cnlGbGlwcGVkQ2hhbmdl
ZCAgICAgICAgICA9IDFMTFUgPDwgMTMsCisgICAgICAgIERvdWJsZVNpZGVkQ2hhbmdlZCAgICAg
ICAgICAgICAgPSAxTExVIDw8IDE0LAorICAgICAgICBNYXNrc1RvQm91bmRzQ2hhbmdlZCAgICAg
ICAgICAgID0gMUxMVSA8PCAxNSwKKyAgICAgICAgT3BhcXVlQ2hhbmdlZCAgICAgICAgICAgICAg
ICAgICA9IDFMTFUgPDwgMTYsCisgICAgICAgIENvbnRlbnRzSGlkZGVuQ2hhbmdlZCAgICAgICAg
ICAgPSAxTExVIDw8IDE3LAorICAgICAgICBNYXNrTGF5ZXJDaGFuZ2VkICAgICAgICAgICAgICAg
ID0gMUxMVSA8PCAxOCwKKyAgICAgICAgQ2xvbmVkQ29udGVudHNDaGFuZ2VkICAgICAgICAgICA9
IDFMTFUgPDwgMTksCisgICAgICAgIENvbnRlbnRzUmVjdENoYW5nZWQgICAgICAgICAgICAgPSAx
TExVIDw8IDIwLAorICAgICAgICBDb250ZW50c1NjYWxlQ2hhbmdlZCAgICAgICAgICAgID0gMUxM
VSA8PCAyMSwKKyAgICAgICAgQ29ybmVyUmFkaXVzQ2hhbmdlZCAgICAgICAgICAgICA9IDFMTFUg
PDwgMjIsCisgICAgICAgIFNoYXBlUm91bmRlZFJlY3RDaGFuZ2VkICAgICAgICAgPSAxTExVIDw8
IDIzLAorICAgICAgICBTaGFwZVBhdGhDaGFuZ2VkICAgICAgICAgICAgICAgID0gMUxMVSA8PCAy
NCwKKyAgICAgICAgTWluaWZpY2F0aW9uRmlsdGVyQ2hhbmdlZCAgICAgICA9IDFMTFUgPDwgMjUs
CisgICAgICAgIE1hZ25pZmljYXRpb25GaWx0ZXJDaGFuZ2VkICAgICAgPSAxTExVIDw8IDI2LAor
ICAgICAgICBCbGVuZE1vZGVDaGFuZ2VkICAgICAgICAgICAgICAgID0gMUxMVSA8PCAyNywKKyAg
ICAgICAgV2luZFJ1bGVDaGFuZ2VkICAgICAgICAgICAgICAgICA9IDFMTFUgPDwgMjgsCisgICAg
ICAgIFNwZWVkQ2hhbmdlZCAgICAgICAgICAgICAgICAgICAgPSAxTExVIDw8IDI5LAorICAgICAg
ICBUaW1lT2Zmc2V0Q2hhbmdlZCAgICAgICAgICAgICAgID0gMUxMVSA8PCAzMCwKKyAgICAgICAg
QmFja2luZ1N0b3JlQ2hhbmdlZCAgICAgICAgICAgICA9IDFMTFUgPDwgMzEsCisgICAgICAgIEJh
Y2tpbmdTdG9yZUF0dGFjaG1lbnRDaGFuZ2VkICAgPSAxTExVIDw8IDMyLAorICAgICAgICBGaWx0
ZXJzQ2hhbmdlZCAgICAgICAgICAgICAgICAgID0gMUxMVSA8PCAzMywKKyAgICAgICAgQW5pbWF0
aW9uc0NoYW5nZWQgICAgICAgICAgICAgICA9IDFMTFUgPDwgMzQsCisgICAgICAgIEVkZ2VBbnRp
YWxpYXNpbmdNYXNrQ2hhbmdlZCAgICAgPSAxTExVIDw8IDM1LAorICAgICAgICBDdXN0b21BcHBl
YXJhbmNlQ2hhbmdlZCAgICAgICAgID0gMUxMVSA8PCAzNiwKKyAgICAgICAgVXNlckludGVyYWN0
aW9uRW5hYmxlZENoYW5nZWQgICA9IDFMTFUgPDwgMzcsCisgICAgfTsKKyAgICB0eXBlZGVmIHVp
bnQ2NF90IExheWVyQ2hhbmdlOworCisgICAgc3RydWN0IExheWVyQ3JlYXRpb25Qcm9wZXJ0aWVz
IHsKKyAgICAgICAgTGF5ZXJDcmVhdGlvblByb3BlcnRpZXMoKTsKKworICAgICAgICB2b2lkIGVu
Y29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKKyAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQ
Qzo6RGVjb2RlciYsIExheWVyQ3JlYXRpb25Qcm9wZXJ0aWVzJik7CisKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQ7CisgICAgICAgIFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIHR5cGU7CisKKyAgICAgICAgdWludDMyX3Qg
aG9zdGluZ0NvbnRleHRJRDsKKyAgICAgICAgZmxvYXQgaG9zdGluZ0RldmljZVNjYWxlRmFjdG9y
OworICAgIH07CisKKyAgICBzdHJ1Y3QgTGF5ZXJQcm9wZXJ0aWVzIHsKKyAgICAgICAgTGF5ZXJQ
cm9wZXJ0aWVzKCk7CisgICAgICAgIExheWVyUHJvcGVydGllcyhjb25zdCBMYXllclByb3BlcnRp
ZXMmIG90aGVyKTsKKworICAgICAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsK
KyAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6RGVjb2RlciYsIExheWVyUHJvcGVydGll
cyYpOworCisgICAgICAgIHZvaWQgbm90ZVByb3BlcnRpZXNDaGFuZ2VkKExheWVyQ2hhbmdlIGNo
YW5nZUZsYWdzKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFuZ2VkUHJvcGVydGllcyB8PSBj
aGFuZ2VGbGFnczsKKyAgICAgICAgICAgIGV2ZXJDaGFuZ2VkUHJvcGVydGllcyB8PSBjaGFuZ2VG
bGFnczsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcmVzZXRDaGFuZ2VkUHJvcGVydGllcygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzID0gUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb246Ok5vQ2hhbmdlOworICAgICAgICB9CisKKyAgICAgICAgTGF5ZXJDaGFu
Z2UgY2hhbmdlZFByb3BlcnRpZXM7CisgICAgICAgIExheWVyQ2hhbmdlIGV2ZXJDaGFuZ2VkUHJv
cGVydGllczsKKworICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4PiB0cmFuc2Zvcm07CisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gc3VibGF5ZXJUcmFuc2Zv
cm07CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0PiBz
aGFwZVJvdW5kZWRSZWN0OworCisgICAgICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
OjpQbGF0Zm9ybUxheWVySUQ+IGNoaWxkcmVuOworCisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8
U3RyaW5nLCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzPj4gYWRkZWRBbmlt
YXRpb25zOworICAgICAgICBIYXNoU2V0PFN0cmluZz4ga2V5UGF0aHNPZkFuaW1hdGlvbnNUb1Jl
bW92ZTsKKworICAgICAgICBXZWJDb3JlOjpGbG9hdFBvaW50M0QgcG9zaXRpb247CisgICAgICAg
IFdlYkNvcmU6OkZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKKyAgICAgICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IGJvdW5kczsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsK
KyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUxheWVyQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmU7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25z
PiBmaWx0ZXJzOworICAgICAgICBXZWJDb3JlOjpQYXRoIHNoYXBlUGF0aDsKKyAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIG1hc2tMYXllcklEOworICAgICAg
ICBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgY2xvbmVkTGF5ZXJJRDsK
KyAgICAgICAgZG91YmxlIHRpbWVPZmZzZXQ7CisgICAgICAgIGZsb2F0IHNwZWVkOworICAgICAg
ICBmbG9hdCBjb250ZW50c1NjYWxlOworICAgICAgICBmbG9hdCBjb3JuZXJSYWRpdXM7CisgICAg
ICAgIGZsb2F0IGJvcmRlcldpZHRoOworICAgICAgICBmbG9hdCBvcGFjaXR5OworICAgICAgICBX
ZWJDb3JlOjpDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CisgICAgICAgIFdlYkNvcmU6OkNvbG9yIGJv
cmRlckNvbG9yOworICAgICAgICB1bnNpZ25lZCBlZGdlQW50aWFsaWFzaW5nTWFzazsKKyAgICAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q3VzdG9tQXBwZWFyYW5jZSBjdXN0b21BcHBlYXJh
bmNlOworICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OkZpbHRlclR5cGUgbWluaWZp
Y2F0aW9uRmlsdGVyOworICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OkZpbHRlclR5
cGUgbWFnbmlmaWNhdGlvbkZpbHRlcjsKKyAgICAgICAgV2ViQ29yZTo6QmxlbmRNb2RlIGJsZW5k
TW9kZTsKKyAgICAgICAgV2ViQ29yZTo6V2luZFJ1bGUgd2luZFJ1bGU7CisgICAgICAgIGJvb2wg
aGlkZGVuOworICAgICAgICBib29sIGJhY2tpbmdTdG9yZUF0dGFjaGVkOworICAgICAgICBib29s
IGdlb21ldHJ5RmxpcHBlZDsKKyAgICAgICAgYm9vbCBkb3VibGVTaWRlZDsKKyAgICAgICAgYm9v
bCBtYXNrc1RvQm91bmRzOworICAgICAgICBib29sIG9wYXF1ZTsKKyAgICAgICAgYm9vbCBjb250
ZW50c0hpZGRlbjsKKyAgICAgICAgYm9vbCB1c2VySW50ZXJhY3Rpb25FbmFibGVkOworICAgIH07
CisKKyAgICBleHBsaWNpdCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbigpOworICAgIH5SZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbigpOworCisgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVy
JikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6RGVjb2RlciYsIFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uJik7CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0
Zm9ybUxheWVySUQgcm9vdExheWVySUQoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllcklEOyB9
CisgICAgdm9pZCBzZXRSb290TGF5ZXJJRChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9y
bUxheWVySUQpOworICAgIHZvaWQgbGF5ZXJQcm9wZXJ0aWVzQ2hhbmdlZChQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGUmKTsKKyAgICB2b2lkIHNldENyZWF0ZWRMYXllcnMoVmVjdG9yPExheWVyQ3JlYXRp
b25Qcm9wZXJ0aWVzPik7CisgICAgdm9pZCBzZXREZXN0cm95ZWRMYXllcklEcyhWZWN0b3I8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPik7CisgICAgdm9pZCBzZXRMYXll
cklEc1dpdGhOZXdseVVucmVhY2hhYmxlQmFja2luZ1N0b3JlKFZlY3RvcjxXZWJDb3JlOjpHcmFw
aGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+KTsKKworI2lmICFkZWZpbmVkKE5ERUJVRykgfHwg
IUxPR19ESVNBQkxFRAorICAgIFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworICAg
IHZvaWQgZHVtcCgpIGNvbnN0OworI2VuZGlmCisKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklELCBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJQ
cm9wZXJ0aWVzPj4gTGF5ZXJQcm9wZXJ0aWVzTWFwOworCisgICAgVmVjdG9yPExheWVyQ3JlYXRp
b25Qcm9wZXJ0aWVzPiBjcmVhdGVkTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jcmVhdGVkTGF5
ZXJzOyB9CisgICAgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJ
RD4gZGVzdHJveWVkTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0cm95ZWRMYXllcklEczsg
fQorICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IGxh
eWVySURzV2l0aE5ld2x5VW5yZWFjaGFibGVCYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBt
X2xheWVySURzV2l0aE5ld2x5VW5yZWFjaGFibGVCYWNraW5nU3RvcmU7IH0KKworICAgIFZlY3Rv
cjxSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPj4mIGNoYW5nZWRMYXllcnMoKSB7IHJldHVy
biBtX2NoYW5nZWRMYXllcnM7IH0KKworICAgIGNvbnN0IExheWVyUHJvcGVydGllc01hcCYgY2hh
bmdlZExheWVyUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlZExheWVyUHJvcGVy
dGllczsgfQorICAgIExheWVyUHJvcGVydGllc01hcCYgY2hhbmdlZExheWVyUHJvcGVydGllcygp
IHsgcmV0dXJuIG1fY2hhbmdlZExheWVyUHJvcGVydGllczsgfQorCisgICAgV2ViQ29yZTo6SW50
U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2l6ZTsgfQorICAg
IHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIHsgbV9j
b250ZW50c1NpemUgPSBzaXplOyB9OworCisgICAgV2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsT3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxPcmlnaW47IH0KKyAgICB2b2lkIHNldFNjcm9s
bE9yaWdpbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgb3JpZ2luKSB7IG1fc2Nyb2xsT3JpZ2lu
ID0gb3JpZ2luOyB9OworCisgICAgV2ViQ29yZTo6TGF5b3V0U2l6ZSBiYXNlTGF5b3V0Vmlld3Bv
cnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlTGF5b3V0Vmlld3BvcnRTaXplOyB9CisgICAg
dm9pZCBzZXRCYXNlTGF5b3V0Vmlld3BvcnRTaXplKGNvbnN0IFdlYkNvcmU6OkxheW91dFNpemUm
IHNpemUpIHsgbV9iYXNlTGF5b3V0Vmlld3BvcnRTaXplID0gc2l6ZTsgfTsKKyAgICAKKyAgICBX
ZWJDb3JlOjpMYXlvdXRQb2ludCBtaW5TdGFibGVMYXlvdXRWaWV3cG9ydE9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWluU3RhYmxlTGF5b3V0Vmlld3BvcnRPcmlnaW47IH0KKyAgICB2b2lkIHNl
dE1pblN0YWJsZUxheW91dFZpZXdwb3J0T3JpZ2luKGNvbnN0IFdlYkNvcmU6OkxheW91dFBvaW50
JiBwb2ludCkgeyBtX21pblN0YWJsZUxheW91dFZpZXdwb3J0T3JpZ2luID0gcG9pbnQ7IH07Cisg
ICAgCisgICAgV2ViQ29yZTo6TGF5b3V0UG9pbnQgbWF4U3RhYmxlTGF5b3V0Vmlld3BvcnRPcmln
aW4oKSBjb25zdCB7IHJldHVybiBtX21heFN0YWJsZUxheW91dFZpZXdwb3J0T3JpZ2luOyB9Cisg
ICAgdm9pZCBzZXRNYXhTdGFibGVMYXlvdXRWaWV3cG9ydE9yaWdpbihjb25zdCBXZWJDb3JlOjpM
YXlvdXRQb2ludCYgcG9pbnQpIHsgbV9tYXhTdGFibGVMYXlvdXRWaWV3cG9ydE9yaWdpbiA9IHBv
aW50OyB9OworICAgIAorICAgIFdlYkNvcmU6OkNvbG9yIHBhZ2VFeHRlbmRlZEJhY2tncm91bmRD
b2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yOyB9Cisg
ICAgdm9pZCBzZXRQYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29yZTo6Q29sb3IgY29s
b3IpIHsgbV9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsgfQorCisjaWYgUExB
VEZPUk0oTUFDKQorICAgIFdlYkNvcmU6OkludFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24o
V2ViQ29yZTo6SW50UG9pbnQgcCkgeyBtX3Njcm9sbFBvc2l0aW9uID0gcDsgfQorI2VuZGlmCisK
KyAgICBkb3VibGUgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2NhbGVG
YWN0b3I7IH0KKyAgICB2b2lkIHNldFBhZ2VTY2FsZUZhY3Rvcihkb3VibGUgcGFnZVNjYWxlRmFj
dG9yKSB7IG1fcGFnZVNjYWxlRmFjdG9yID0gcGFnZVNjYWxlRmFjdG9yOyB9CisKKyAgICBib29s
IHNjYWxlV2FzU2V0QnlVSVByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlV2FzU2V0QnlV
SVByb2Nlc3M7IH0KKyAgICB2b2lkIHNldFNjYWxlV2FzU2V0QnlVSVByb2Nlc3MoYm9vbCBzY2Fs
ZVdhc1NldEJ5VUlQcm9jZXNzKSB7IG1fc2NhbGVXYXNTZXRCeVVJUHJvY2VzcyA9IHNjYWxlV2Fz
U2V0QnlVSVByb2Nlc3M7IH0KKyAgICAKKyAgICB1aW50NjRfdCByZW5kZXJUcmVlU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVuZGVyVHJlZVNpemU7IH0KKyAgICB2b2lkIHNldFJlbmRlclRyZWVT
aXplKHVpbnQ2NF90IHJlbmRlclRyZWVTaXplKSB7IG1fcmVuZGVyVHJlZVNpemUgPSByZW5kZXJU
cmVlU2l6ZTsgfQorCisgICAgZG91YmxlIG1pbmltdW1TY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0
dXJuIG1fbWluaW11bVNjYWxlRmFjdG9yOyB9CisgICAgdm9pZCBzZXRNaW5pbXVtU2NhbGVGYWN0
b3IoZG91YmxlIHNjYWxlKSB7IG1fbWluaW11bVNjYWxlRmFjdG9yID0gc2NhbGU7IH0KKworICAg
IGRvdWJsZSBtYXhpbXVtU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX21heGltdW1TY2Fs
ZUZhY3RvcjsgfQorICAgIHZvaWQgc2V0TWF4aW11bVNjYWxlRmFjdG9yKGRvdWJsZSBzY2FsZSkg
eyBtX21heGltdW1TY2FsZUZhY3RvciA9IHNjYWxlOyB9CisKKyAgICBkb3VibGUgaW5pdGlhbFNj
YWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsU2NhbGVGYWN0b3I7IH0KKyAgICB2
b2lkIHNldEluaXRpYWxTY2FsZUZhY3Rvcihkb3VibGUgc2NhbGUpIHsgbV9pbml0aWFsU2NhbGVG
YWN0b3IgPSBzY2FsZTsgfQorCisgICAgZG91YmxlIHZpZXdwb3J0TWV0YVRhZ1dpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV92aWV3cG9ydE1ldGFUYWdXaWR0aDsgfQorICAgIHZvaWQgc2V0Vmlld3Bv
cnRNZXRhVGFnV2lkdGgoZG91YmxlIHdpZHRoKSB7IG1fdmlld3BvcnRNZXRhVGFnV2lkdGggPSB3
aWR0aDsgfQorCisgICAgYm9vbCB2aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0KCkgY29u
c3QgeyByZXR1cm4gbV92aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0OyB9CisgICAgdm9p
ZCBzZXRWaWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0KGJvb2wgd2lkdGhXYXNFeHBsaWNp
dCkgeyBtX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoV2FzRXhwbGljaXQgPSB3aWR0aFdhc0V4cGxpY2l0
OyB9CisKKyAgICBib29sIHZpZXdwb3J0TWV0YVRhZ0NhbWVGcm9tSW1hZ2VEb2N1bWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlld3BvcnRNZXRhVGFnQ2FtZUZyb21JbWFnZURvY3VtZW50OyB9Cisg
ICAgdm9pZCBzZXRWaWV3cG9ydE1ldGFUYWdDYW1lRnJvbUltYWdlRG9jdW1lbnQoYm9vbCBjYW1l
RnJvbUltYWdlRG9jdW1lbnQpIHsgbV92aWV3cG9ydE1ldGFUYWdDYW1lRnJvbUltYWdlRG9jdW1l
bnQgPSBjYW1lRnJvbUltYWdlRG9jdW1lbnQ7IH0KKworICAgIGJvb2wgaXNJblN0YWJsZVN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9pc0luU3RhYmxlU3RhdGU7IH0KKyAgICB2b2lkIHNldElzSW5T
dGFibGVTdGF0ZShib29sIGlzSW5TdGFibGVTdGF0ZSkgeyBtX2lzSW5TdGFibGVTdGF0ZSA9IGlz
SW5TdGFibGVTdGF0ZTsgfQorCisgICAgYm9vbCBhbGxvd3NVc2VyU2NhbGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fYWxsb3dzVXNlclNjYWxpbmc7IH0KKyAgICB2b2lkIHNldEFsbG93c1VzZXJTY2Fs
aW5nKGJvb2wgYWxsb3dzVXNlclNjYWxpbmcpIHsgbV9hbGxvd3NVc2VyU2NhbGluZyA9IGFsbG93
c1VzZXJTY2FsaW5nOyB9CisKKyAgICBib29sIGF2b2lkc1Vuc2FmZUFyZWEoKSBjb25zdCB7IHJl
dHVybiBtX2F2b2lkc1Vuc2FmZUFyZWE7IH0KKyAgICB2b2lkIHNldEF2b2lkc1Vuc2FmZUFyZWEo
Ym9vbCBhdm9pZHNVbnNhZmVBcmVhKSB7IG1fYXZvaWRzVW5zYWZlQXJlYSA9IGF2b2lkc1Vuc2Fm
ZUFyZWE7IH0KKworICAgIHVpbnQ2NF90IHRyYW5zYWN0aW9uSUQoKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zYWN0aW9uSUQ7IH0KKyAgICB2b2lkIHNldFRyYW5zYWN0aW9uSUQodWludDY0X3QgdHJh
bnNhY3Rpb25JRCkgeyBtX3RyYW5zYWN0aW9uSUQgPSB0cmFuc2FjdGlvbklEOyB9CisKKyAgICB0
eXBlZGVmIENhbGxiYWNrSUQgVHJhbnNhY3Rpb25DYWxsYmFja0lEOworICAgIGNvbnN0IFZlY3Rv
cjxUcmFuc2FjdGlvbkNhbGxiYWNrSUQ+JiBjYWxsYmFja0lEcygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGJhY2tJRHM7IH0KKyAgICB2b2lkIHNldENhbGxiYWNrSURzKFZlY3RvcjxUcmFuc2FjdGlv
bkNhbGxiYWNrSUQ+JiYgY2FsbGJhY2tJRHMpIHsgbV9jYWxsYmFja0lEcyA9IFdURk1vdmUoY2Fs
bGJhY2tJRHMpOyB9CisKKyAgICBXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmVzIG5ld2x5UmVhY2hl
ZExheW91dE1pbGVzdG9uZXMoKSBjb25zdCB7IHJldHVybiBtX25ld2x5UmVhY2hlZExheW91dE1p
bGVzdG9uZXM7IH0KKyAgICB2b2lkIHNldE5ld2x5UmVhY2hlZExheW91dE1pbGVzdG9uZXMoV2Vi
Q29yZTo6TGF5b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVzKSB7IG1fbmV3bHlSZWFjaGVkTGF5b3V0
TWlsZXN0b25lcyA9IG1pbGVzdG9uZXM7IH0KKworICAgIGJvb2wgaGFzRWRpdG9yU3RhdGUoKSBj
b25zdCB7IHJldHVybiAhIW1fZWRpdG9yU3RhdGU7IH0KKyAgICBjb25zdCBFZGl0b3JTdGF0ZSYg
ZWRpdG9yU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2VkaXRvclN0YXRlLnZhbHVlKCk7IH0KKyAg
ICB2b2lkIHNldEVkaXRvclN0YXRlKGNvbnN0IEVkaXRvclN0YXRlJiBlZGl0b3JTdGF0ZSkgeyBt
X2VkaXRvclN0YXRlID0gZWRpdG9yU3RhdGU7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIG1fcm9vdExheWVySUQ7CisgICAgVmVj
dG9yPFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+PiBtX2NoYW5nZWRMYXllcnM7IC8vIE9u
bHkgdXNlZCBpbiB0aGUgV2ViIHByb2Nlc3MuCisgICAgTGF5ZXJQcm9wZXJ0aWVzTWFwIG1fY2hh
bmdlZExheWVyUHJvcGVydGllczsgLy8gT25seSB1c2VkIGluIHRoZSBVSSBwcm9jZXNzLgorCisg
ICAgVmVjdG9yPExheWVyQ3JlYXRpb25Qcm9wZXJ0aWVzPiBtX2NyZWF0ZWRMYXllcnM7CisgICAg
VmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gbV9kZXN0cm95
ZWRMYXllcklEczsKKyAgICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1M
YXllcklEPiBtX3ZpZGVvTGF5ZXJJRHNQZW5kaW5nRnVsbHNjcmVlbjsKKyAgICBWZWN0b3I8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBtX2xheWVySURzV2l0aE5ld2x5
VW5yZWFjaGFibGVCYWNraW5nU3RvcmU7CisKKyAgICBWZWN0b3I8VHJhbnNhY3Rpb25DYWxsYmFj
a0lEPiBtX2NhbGxiYWNrSURzOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2NvbnRlbnRzU2l6
ZTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3Njcm9sbE9yaWdpbjsKKyAgICBXZWJDb3JlOjpM
YXlvdXRTaXplIG1fYmFzZUxheW91dFZpZXdwb3J0U2l6ZTsKKyAgICBXZWJDb3JlOjpMYXlvdXRQ
b2ludCBtX21pblN0YWJsZUxheW91dFZpZXdwb3J0T3JpZ2luOworICAgIFdlYkNvcmU6OkxheW91
dFBvaW50IG1fbWF4U3RhYmxlTGF5b3V0Vmlld3BvcnRPcmlnaW47CisjaWYgUExBVEZPUk0oTUFD
KQorICAgIFdlYkNvcmU6OkludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CisjZW5kaWYKKyAgICBX
ZWJDb3JlOjpDb2xvciBtX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcjsKKyAgICBkb3VibGUg
bV9wYWdlU2NhbGVGYWN0b3IgeyAxIH07CisgICAgZG91YmxlIG1fbWluaW11bVNjYWxlRmFjdG9y
IHsgMSB9OworICAgIGRvdWJsZSBtX21heGltdW1TY2FsZUZhY3RvciB7IDEgfTsKKyAgICBkb3Vi
bGUgbV9pbml0aWFsU2NhbGVGYWN0b3IgeyAxIH07CisgICAgZG91YmxlIG1fdmlld3BvcnRNZXRh
VGFnV2lkdGggeyAtMSB9OworICAgIHVpbnQ2NF90IG1fcmVuZGVyVHJlZVNpemUgeyAwIH07Cisg
ICAgdWludDY0X3QgbV90cmFuc2FjdGlvbklEIHsgMCB9OworICAgIFdlYkNvcmU6OkxheW91dE1p
bGVzdG9uZXMgbV9uZXdseVJlYWNoZWRMYXlvdXRNaWxlc3RvbmVzIHsgMCB9OworICAgIGJvb2wg
bV9zY2FsZVdhc1NldEJ5VUlQcm9jZXNzIHsgZmFsc2UgfTsKKyAgICBib29sIG1fYWxsb3dzVXNl
clNjYWxpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9hdm9pZHNVbnNhZmVBcmVhIHsgdHJ1ZSB9
OworICAgIGJvb2wgbV92aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0IHsgZmFsc2UgfTsK
KyAgICBib29sIG1fdmlld3BvcnRNZXRhVGFnQ2FtZUZyb21JbWFnZURvY3VtZW50IHsgZmFsc2Ug
fTsKKyAgICBib29sIG1faXNJblN0YWJsZVN0YXRlIHsgZmFsc2UgfTsKKworICAgIHN0ZDo6b3B0
aW9uYWw8RWRpdG9yU3RhdGU+IG1fZWRpdG9yU3RhdGUgeyBzdGQ6Om51bGxvcHQgfTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVl
L1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5
NGY0ZTliNTQwM2ZmN2I2NDRkZmJmYWMyZWZkMjg3Njc0ZWFhMDQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb24ubW0KQEAgLTAsMCArMSw5NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgiCisKKyNpbXBvcnQg
IkFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLmgi
CisjaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCIKKyNpbXBvcnQgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0xlbmd0aEZ1bmN0aW9ucy5oPgorI2ltcG9ydCA8V2ViQ29yZS9UaW1pbmdGdW5j
dGlvbi5oPgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2ltcG9ydCA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllckNyZWF0aW9uUHJvcGVy
dGllczo6TGF5ZXJDcmVhdGlvblByb3BlcnRpZXMoKQorICAgIDogbGF5ZXJJRCgwKQorICAgICwg
dHlwZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyKQorICAgICwgaG9zdGluZ0NvbnRl
eHRJRCgwKQorICAgICwgaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yKDEpCit7Cit9CisKK3ZvaWQg
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyQ3JlYXRpb25Qcm9wZXJ0aWVzOjplbmNv
ZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbGF5ZXJJ
RDsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0odHlwZSk7CisgICAgZW5jb2RlciA8PCBob3N0aW5n
Q29udGV4dElEOworICAgIGVuY29kZXIgPDwgaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yOworfQor
Citib29sIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllckNyZWF0aW9uUHJvcGVydGll
czo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTGF5ZXJDcmVhdGlvblByb3BlcnRpZXMm
IHJlc3VsdCkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5sYXllcklEKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocmVzdWx0
LnR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5ob3N0aW5nQ29udGV4dElEKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaG9zdGluZ0RldmljZVNjYWxlRmFjdG9yKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXM6OkxheWVyUHJvcGVydGllcygpCisgICAg
OiBjaGFuZ2VkUHJvcGVydGllcyhOb0NoYW5nZSkKKyAgICAsIGV2ZXJDaGFuZ2VkUHJvcGVydGll
cyhOb0NoYW5nZSkKKyAgICAsIGFuY2hvclBvaW50KDAuNSwgMC41LCAwKQorICAgICwgY29udGVu
dHNSZWN0KEZsb2F0UG9pbnQoKSwgRmxvYXRTaXplKDEsIDEpKQorICAgICwgbWFza0xheWVySUQo
MCkKKyAgICAsIGNsb25lZExheWVySUQoMCkKKyAgICAsIHRpbWVPZmZzZXQoMCkKKyAgICAsIHNw
ZWVkKDEpCisgICAgLCBjb250ZW50c1NjYWxlKDEpCisgICAgLCBjb3JuZXJSYWRpdXMoMCkKKyAg
ICAsIGJvcmRlcldpZHRoKDApCisgICAgLCBvcGFjaXR5KDEpCisgICAgLCBiYWNrZ3JvdW5kQ29s
b3IoQ29sb3I6OnRyYW5zcGFyZW50KQorICAgICwgYm9yZGVyQ29sb3IoQ29sb3I6OmJsYWNrKQor
ICAgICwgZWRnZUFudGlhbGlhc2luZ01hc2soa0NBTGF5ZXJMZWZ0RWRnZSB8IGtDQUxheWVyUmln
aHRFZGdlIHwga0NBTGF5ZXJCb3R0b21FZGdlIHwga0NBTGF5ZXJUb3BFZGdlKQorICAgICwgY3Vz
dG9tQXBwZWFyYW5jZShHcmFwaGljc0xheWVyOjpOb0N1c3RvbUFwcGVhcmFuY2UpCisgICAgLCBt
aW5pZmljYXRpb25GaWx0ZXIoUGxhdGZvcm1DQUxheWVyOjpGaWx0ZXJUeXBlOjpMaW5lYXIpCisg
ICAgLCBtYWduaWZpY2F0aW9uRmlsdGVyKFBsYXRmb3JtQ0FMYXllcjo6RmlsdGVyVHlwZTo6TGlu
ZWFyKQorICAgICwgYmxlbmRNb2RlKEJsZW5kTW9kZU5vcm1hbCkKKyAgICAsIHdpbmRSdWxlKFJV
TEVfTk9OWkVSTykKKyAgICAsIGhpZGRlbihmYWxzZSkKKyAgICAsIGJhY2tpbmdTdG9yZUF0dGFj
aGVkKHRydWUpCisgICAgLCBnZW9tZXRyeUZsaXBwZWQoZmFsc2UpCisgICAgLCBkb3VibGVTaWRl
ZCh0cnVlKQorICAgICwgbWFza3NUb0JvdW5kcyhmYWxzZSkKKyAgICAsIG9wYXF1ZShmYWxzZSkK
KyAgICAsIGNvbnRlbnRzSGlkZGVuKGZhbHNlKQorICAgICwgdXNlckludGVyYWN0aW9uRW5hYmxl
ZCh0cnVlKQoreworfQorCitSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0
aWVzOjpMYXllclByb3BlcnRpZXMoY29uc3QgTGF5ZXJQcm9wZXJ0aWVzJiBvdGhlcikKKyAgICA6
IGNoYW5nZWRQcm9wZXJ0aWVzKG90aGVyLmNoYW5nZWRQcm9wZXJ0aWVzKQorICAgICwgZXZlckNo
YW5nZWRQcm9wZXJ0aWVzKG90aGVyLmV2ZXJDaGFuZ2VkUHJvcGVydGllcykKKyAgICAsIG5hbWUo
b3RoZXIubmFtZSkKKyAgICAsIGNoaWxkcmVuKG90aGVyLmNoaWxkcmVuKQorICAgICwgYWRkZWRB
bmltYXRpb25zKG90aGVyLmFkZGVkQW5pbWF0aW9ucykKKyAgICAsIGtleVBhdGhzT2ZBbmltYXRp
b25zVG9SZW1vdmUob3RoZXIua2V5UGF0aHNPZkFuaW1hdGlvbnNUb1JlbW92ZSkKKyAgICAsIHBv
c2l0aW9uKG90aGVyLnBvc2l0aW9uKQorICAgICwgYW5jaG9yUG9pbnQob3RoZXIuYW5jaG9yUG9p
bnQpCisgICAgLCBib3VuZHMob3RoZXIuYm91bmRzKQorICAgICwgY29udGVudHNSZWN0KG90aGVy
LmNvbnRlbnRzUmVjdCkKKyAgICAsIHNoYXBlUGF0aChvdGhlci5zaGFwZVBhdGgpCisgICAgLCBt
YXNrTGF5ZXJJRChvdGhlci5tYXNrTGF5ZXJJRCkKKyAgICAsIGNsb25lZExheWVySUQob3RoZXIu
Y2xvbmVkTGF5ZXJJRCkKKyAgICAsIHRpbWVPZmZzZXQob3RoZXIudGltZU9mZnNldCkKKyAgICAs
IHNwZWVkKG90aGVyLnNwZWVkKQorICAgICwgY29udGVudHNTY2FsZShvdGhlci5jb250ZW50c1Nj
YWxlKQorICAgICwgY29ybmVyUmFkaXVzKG90aGVyLmNvcm5lclJhZGl1cykKKyAgICAsIGJvcmRl
cldpZHRoKG90aGVyLmJvcmRlcldpZHRoKQorICAgICwgb3BhY2l0eShvdGhlci5vcGFjaXR5KQor
ICAgICwgYmFja2dyb3VuZENvbG9yKG90aGVyLmJhY2tncm91bmRDb2xvcikKKyAgICAsIGJvcmRl
ckNvbG9yKG90aGVyLmJvcmRlckNvbG9yKQorICAgICwgZWRnZUFudGlhbGlhc2luZ01hc2sob3Ro
ZXIuZWRnZUFudGlhbGlhc2luZ01hc2spCisgICAgLCBjdXN0b21BcHBlYXJhbmNlKG90aGVyLmN1
c3RvbUFwcGVhcmFuY2UpCisgICAgLCBtaW5pZmljYXRpb25GaWx0ZXIob3RoZXIubWluaWZpY2F0
aW9uRmlsdGVyKQorICAgICwgbWFnbmlmaWNhdGlvbkZpbHRlcihvdGhlci5tYWduaWZpY2F0aW9u
RmlsdGVyKQorICAgICwgYmxlbmRNb2RlKG90aGVyLmJsZW5kTW9kZSkKKyAgICAsIHdpbmRSdWxl
KG90aGVyLndpbmRSdWxlKQorICAgICwgaGlkZGVuKG90aGVyLmhpZGRlbikKKyAgICAsIGJhY2tp
bmdTdG9yZUF0dGFjaGVkKG90aGVyLmJhY2tpbmdTdG9yZUF0dGFjaGVkKQorICAgICwgZ2VvbWV0
cnlGbGlwcGVkKG90aGVyLmdlb21ldHJ5RmxpcHBlZCkKKyAgICAsIGRvdWJsZVNpZGVkKG90aGVy
LmRvdWJsZVNpZGVkKQorICAgICwgbWFza3NUb0JvdW5kcyhvdGhlci5tYXNrc1RvQm91bmRzKQor
ICAgICwgb3BhcXVlKG90aGVyLm9wYXF1ZSkKKyAgICAsIGNvbnRlbnRzSGlkZGVuKG90aGVyLmNv
bnRlbnRzSGlkZGVuKQorICAgICwgdXNlckludGVyYWN0aW9uRW5hYmxlZChvdGhlci51c2VySW50
ZXJhY3Rpb25FbmFibGVkKQoreworICAgIC8vIEZJWE1FOiBMYXllclByb3BlcnRpZXMgc2hvdWxk
IHJlZmVyZW5jZSBiYWNraW5nIHN0b3JlIGJ5IElELCBzbyB0aGF0IHR3byBsYXllcnMgY2FuIGhh
dmUgdGhlIHNhbWUgYmFja2luZyBzdG9yZSAoZm9yIGNsb25lcykuCisgICAgLy8gRklYTUU6IExh
eWVyUHJvcGVydGllcyBzaG91bGRuJ3QgYmUgY29weWFibGU7IFBsYXRmb3JtQ0FMYXllclJlbW90
ZTo6Y2xvbmUgc2hvdWxkIGNvcHkgdGhlIHJlbGV2YW50IHByb3BlcnRpZXMuCisKKyAgICBpZiAo
b3RoZXIudHJhbnNmb3JtKQorICAgICAgICB0cmFuc2Zvcm0gPSBzdGQ6Om1ha2VfdW5pcXVlPFRy
YW5zZm9ybWF0aW9uTWF0cml4Pigqb3RoZXIudHJhbnNmb3JtKTsKKworICAgIGlmIChvdGhlci5z
dWJsYXllclRyYW5zZm9ybSkKKyAgICAgICAgc3VibGF5ZXJUcmFuc2Zvcm0gPSBzdGQ6Om1ha2Vf
dW5pcXVlPFRyYW5zZm9ybWF0aW9uTWF0cml4Pigqb3RoZXIuc3VibGF5ZXJUcmFuc2Zvcm0pOwor
CisgICAgaWYgKG90aGVyLmZpbHRlcnMpCisgICAgICAgIGZpbHRlcnMgPSBzdGQ6Om1ha2VfdW5p
cXVlPEZpbHRlck9wZXJhdGlvbnM+KCpvdGhlci5maWx0ZXJzKTsKK30KKwordm9pZCBSZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzOjplbmNvZGUoSVBDOjpFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIuZW5jb2RlRW51bShjaGFuZ2VkUHJvcGVy
dGllcyk7CisKKyAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBOYW1lQ2hhbmdlZCkKKyAgICAg
ICAgZW5jb2RlciA8PCBuYW1lOworCisgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgQ2hpbGRy
ZW5DaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IGNoaWxkcmVuOworCisgICAgaWYgKGNoYW5n
ZWRQcm9wZXJ0aWVzICYgQW5pbWF0aW9uc0NoYW5nZWQpIHsKKyAgICAgICAgZW5jb2RlciA8PCBh
ZGRlZEFuaW1hdGlvbnM7CisgICAgICAgIGVuY29kZXIgPDwga2V5UGF0aHNPZkFuaW1hdGlvbnNU
b1JlbW92ZTsKKyAgICB9CisKKyAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBQb3NpdGlvbkNo
YW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgcG9zaXRpb247CisKKyAgICBpZiAoY2hhbmdlZFBy
b3BlcnRpZXMgJiBCb3VuZHNDaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IGJvdW5kczsKKwor
ICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcyAmIEJhY2tncm91bmRDb2xvckNoYW5nZWQpCisgICAg
ICAgIGVuY29kZXIgPDwgYmFja2dyb3VuZENvbG9yOworCisgICAgaWYgKGNoYW5nZWRQcm9wZXJ0
aWVzICYgQW5jaG9yUG9pbnRDaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IGFuY2hvclBvaW50
OworCisgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgQm9yZGVyV2lkdGhDaGFuZ2VkKQorICAg
ICAgICBlbmNvZGVyIDw8IGJvcmRlcldpZHRoOworCisgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVz
ICYgQm9yZGVyQ29sb3JDaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IGJvcmRlckNvbG9yOwor
CisgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgT3BhY2l0eUNoYW5nZWQpCisgICAgICAgIGVu
Y29kZXIgPDwgb3BhY2l0eTsKKworICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcyAmIFRyYW5zZm9y
bUNoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgKnRyYW5zZm9ybTsKKworICAgIGlmIChjaGFu
Z2VkUHJvcGVydGllcyAmIFN1YmxheWVyVHJhbnNmb3JtQ2hhbmdlZCkKKyAgICAgICAgZW5jb2Rl
ciA8PCAqc3VibGF5ZXJUcmFuc2Zvcm07CisKKyAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBI
aWRkZW5DaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IGhpZGRlbjsKKworICAgIGlmIChjaGFu
Z2VkUHJvcGVydGllcyAmIEdlb21ldHJ5RmxpcHBlZENoYW5nZWQpCisgICAgICAgIGVuY29kZXIg
PDwgZ2VvbWV0cnlGbGlwcGVkOworCisgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgRG91Ymxl
U2lkZWRDaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IGRvdWJsZVNpZGVkOworCisgICAgaWYg
KGNoYW5nZWRQcm9wZXJ0aWVzICYgTWFza3NUb0JvdW5kc0NoYW5nZWQpCisgICAgICAgIGVuY29k
ZXIgPDwgbWFza3NUb0JvdW5kczsKKworICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcyAmIE9wYXF1
ZUNoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgb3BhcXVlOworCisgICAgaWYgKGNoYW5nZWRQ
cm9wZXJ0aWVzICYgQ29udGVudHNIaWRkZW5DaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IGNv
bnRlbnRzSGlkZGVuOworCisgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgTWFza0xheWVyQ2hh
bmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBtYXNrTGF5ZXJJRDsKKworICAgIGlmIChjaGFuZ2Vk
UHJvcGVydGllcyAmIENsb25lZENvbnRlbnRzQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBj
bG9uZWRMYXllcklEOworCisgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgQ29udGVudHNSZWN0
Q2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBjb250ZW50c1JlY3Q7CisKKyAgICBpZiAoY2hh
bmdlZFByb3BlcnRpZXMgJiBDb250ZW50c1NjYWxlQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8
PCBjb250ZW50c1NjYWxlOworCisgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgQ29ybmVyUmFk
aXVzQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBjb3JuZXJSYWRpdXM7CisKKyAgICBpZiAo
Y2hhbmdlZFByb3BlcnRpZXMgJiBTaGFwZVJvdW5kZWRSZWN0Q2hhbmdlZCkKKyAgICAgICAgZW5j
b2RlciA8PCAqc2hhcGVSb3VuZGVkUmVjdDsKKworICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcyAm
IFNoYXBlUGF0aENoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgc2hhcGVQYXRoOworCisgICAg
aWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgTWluaWZpY2F0aW9uRmlsdGVyQ2hhbmdlZCkKKyAgICAg
ICAgZW5jb2Rlci5lbmNvZGVFbnVtKG1pbmlmaWNhdGlvbkZpbHRlcik7CisKKyAgICBpZiAoY2hh
bmdlZFByb3BlcnRpZXMgJiBNYWduaWZpY2F0aW9uRmlsdGVyQ2hhbmdlZCkKKyAgICAgICAgZW5j
b2Rlci5lbmNvZGVFbnVtKG1hZ25pZmljYXRpb25GaWx0ZXIpOworCisgICAgaWYgKGNoYW5nZWRQ
cm9wZXJ0aWVzICYgQmxlbmRNb2RlQ2hhbmdlZCkKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVt
KGJsZW5kTW9kZSk7CisKKyAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBXaW5kUnVsZUNoYW5n
ZWQpCisgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bSh3aW5kUnVsZSk7CisKKyAgICBpZiAoY2hh
bmdlZFByb3BlcnRpZXMgJiBTcGVlZENoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgc3BlZWQ7
CisKKyAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBUaW1lT2Zmc2V0Q2hhbmdlZCkKKyAgICAg
ICAgZW5jb2RlciA8PCB0aW1lT2Zmc2V0OworCisgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYg
QmFja2luZ1N0b3JlQ2hhbmdlZCkgeworICAgICAgICBib29sIGhhc0Zyb250QnVmZmVyID0gYmFj
a2luZ1N0b3JlICYmIGJhY2tpbmdTdG9yZS0+aGFzRnJvbnRCdWZmZXIoKTsKKyAgICAgICAgZW5j
b2RlciA8PCBoYXNGcm9udEJ1ZmZlcjsKKyAgICAgICAgaWYgKGhhc0Zyb250QnVmZmVyKQorICAg
ICAgICAgICAgZW5jb2RlciA8PCAqYmFja2luZ1N0b3JlOworICAgIH0KKworICAgIGlmIChjaGFu
Z2VkUHJvcGVydGllcyAmIEJhY2tpbmdTdG9yZUF0dGFjaG1lbnRDaGFuZ2VkKQorICAgICAgICBl
bmNvZGVyIDw8IGJhY2tpbmdTdG9yZUF0dGFjaGVkOworCisgICAgaWYgKGNoYW5nZWRQcm9wZXJ0
aWVzICYgRmlsdGVyc0NoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgKmZpbHRlcnM7CisKKyAg
ICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBFZGdlQW50aWFsaWFzaW5nTWFza0NoYW5nZWQpCisg
ICAgICAgIGVuY29kZXIgPDwgZWRnZUFudGlhbGlhc2luZ01hc2s7CisKKyAgICBpZiAoY2hhbmdl
ZFByb3BlcnRpZXMgJiBDdXN0b21BcHBlYXJhbmNlQ2hhbmdlZCkKKyAgICAgICAgZW5jb2Rlci5l
bmNvZGVFbnVtKGN1c3RvbUFwcGVhcmFuY2UpOworCisgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVz
ICYgVXNlckludGVyYWN0aW9uRW5hYmxlZENoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgdXNl
ckludGVyYWN0aW9uRW5hYmxlZDsKK30KKworYm9vbCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlv
bjo6TGF5ZXJQcm9wZXJ0aWVzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBMYXllclBy
b3BlcnRpZXMmIHJlc3VsdCkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQu
Y2hhbmdlZFByb3BlcnRpZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocmVz
dWx0LmNoYW5nZWRQcm9wZXJ0aWVzICYgTmFtZUNoYW5nZWQpIHsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQubmFtZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIENoaWxkcmVuQ2hhbmdlZCkg
eworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jaGlsZHJlbikpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChhdXRvJiBsYXllcklEIDogcmVzdWx0
LmNoaWxkcmVuKSB7CisgICAgICAgICAgICBpZiAoIWxheWVySUQpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlc3VsdC5jaGFuZ2Vk
UHJvcGVydGllcyAmIEFuaW1hdGlvbnNDaGFuZ2VkKSB7CisgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LmFkZGVkQW5pbWF0aW9ucykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQua2V5UGF0aHNPZkFuaW1hdGlv
bnNUb1JlbW92ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIFBvc2l0aW9uQ2hhbmdlZCkgeworICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5wb3NpdGlvbikpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIEJvdW5k
c0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYm91bmRzKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0LmNoYW5n
ZWRQcm9wZXJ0aWVzICYgQmFja2dyb3VuZENvbG9yQ2hhbmdlZCkgeworICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5iYWNrZ3JvdW5kQ29sb3IpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBBbmNo
b3JQb2ludENoYW5nZWQpIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYW5j
aG9yUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChy
ZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBCb3JkZXJXaWR0aENoYW5nZWQpIHsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYm9yZGVyV2lkdGgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBC
b3JkZXJDb2xvckNoYW5nZWQpIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
Ym9yZGVyQ29sb3IpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
IChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBPcGFjaXR5Q2hhbmdlZCkgeworICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5vcGFjaXR5KSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0aWVzICYgVHJhbnNm
b3JtQ2hhbmdlZCkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodHJhbnNmb3JtKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdC50cmFuc2Zvcm0gPSBzdGQ6Om1ha2Vf
dW5pcXVlPFRyYW5zZm9ybWF0aW9uTWF0cml4Pih0cmFuc2Zvcm0pOworICAgIH0KKworICAgIGlm
IChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBTdWJsYXllclRyYW5zZm9ybUNoYW5nZWQpIHsK
KyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHRyYW5zZm9ybSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgcmVzdWx0LnN1YmxheWVyVHJhbnNmb3JtID0gc3RkOjptYWtlX3VuaXF1ZTxUcmFuc2Zv
cm1hdGlvbk1hdHJpeD4odHJhbnNmb3JtKTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0LmNoYW5n
ZWRQcm9wZXJ0aWVzICYgSGlkZGVuQ2hhbmdlZCkgeworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5oaWRkZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBHZW9tZXRyeUZsaXBwZWRDaGFuZ2Vk
KSB7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmdlb21ldHJ5RmxpcHBlZCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHJlc3VsdC5jaGFu
Z2VkUHJvcGVydGllcyAmIERvdWJsZVNpZGVkQ2hhbmdlZCkgeworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5kb3VibGVTaWRlZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIE1hc2tzVG9Cb3Vu
ZHNDaGFuZ2VkKSB7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hc2tzVG9C
b3VuZHMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChyZXN1
bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBPcGFxdWVDaGFuZ2VkKSB7CisgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0Lm9wYXF1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIENvbnRlbnRzSGlkZGVu
Q2hhbmdlZCkgeworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50c0hp
ZGRlbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHJlc3Vs
dC5jaGFuZ2VkUHJvcGVydGllcyAmIE1hc2tMYXllckNoYW5nZWQpIHsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQubWFza0xheWVySUQpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBDbG9uZWRD
b250ZW50c0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2xv
bmVkTGF5ZXJJRCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIENvbnRlbnRzUmVjdENoYW5nZWQpIHsKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29udGVudHNSZWN0KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0aWVz
ICYgQ29udGVudHNTY2FsZUNoYW5nZWQpIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuY29udGVudHNTY2FsZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIENvcm5lclJhZGl1c0NoYW5nZWQp
IHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29ybmVyUmFkaXVzKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0LmNoYW5nZWRQ
cm9wZXJ0aWVzICYgU2hhcGVSb3VuZGVkUmVjdENoYW5nZWQpIHsKKyAgICAgICAgRmxvYXRSb3Vu
ZGVkUmVjdCByb3VuZGVkUmVjdDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyb3VuZGVk
UmVjdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXN1
bHQuc2hhcGVSb3VuZGVkUmVjdCA9IHN0ZDo6bWFrZV91bmlxdWU8RmxvYXRSb3VuZGVkUmVjdD4o
cm91bmRlZFJlY3QpOworICAgIH0KKworICAgIGlmIChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMg
JiBTaGFwZVBhdGhDaGFuZ2VkKSB7CisgICAgICAgIFBhdGggcGF0aDsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShwYXRoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIHJlc3VsdC5zaGFwZVBhdGggPSBXVEZNb3ZlKHBhdGgpOworICAgIH0KKworICAg
IGlmIChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBNaW5pZmljYXRpb25GaWx0ZXJDaGFuZ2Vk
KSB7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHJlc3VsdC5taW5pZmljYXRpb25G
aWx0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChyZXN1
bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBNYWduaWZpY2F0aW9uRmlsdGVyQ2hhbmdlZCkgeworICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQubWFnbmlmaWNhdGlvbkZpbHRlcikp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHJlc3VsdC5jaGFu
Z2VkUHJvcGVydGllcyAmIEJsZW5kTW9kZUNoYW5nZWQpIHsKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUVudW0ocmVzdWx0LmJsZW5kTW9kZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIFdpbmRSdWxlQ2hh
bmdlZCkgeworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQud2luZFJ1bGUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChyZXN1bHQuY2hh
bmdlZFByb3BlcnRpZXMgJiBTcGVlZENoYW5nZWQpIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQuc3BlZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBUaW1lT2Zmc2V0Q2hhbmdlZCkgewor
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC50aW1lT2Zmc2V0KSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0
aWVzICYgQmFja2luZ1N0b3JlQ2hhbmdlZCkgeworICAgICAgICBib29sIGhhc0Zyb250QnVmZmVy
ID0gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzRnJvbnRCdWZmZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoaGFzRnJvbnRCdWZmZXIpIHsK
KyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVMYXllckJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxSZW1vdGVMYXllckJhY2tpbmdTdG9yZT4obnVs
bHB0cik7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKCpiYWNraW5nU3RvcmUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
cmVzdWx0LmJhY2tpbmdTdG9yZSA9IFdURk1vdmUoYmFja2luZ1N0b3JlKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICByZXN1bHQuYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0aWVzICYgQmFja2luZ1N0b3JlQXR0YWNobWVu
dENoYW5nZWQpIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYmFja2luZ1N0
b3JlQXR0YWNoZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
IChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBGaWx0ZXJzQ2hhbmdlZCkgeworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RmlsdGVyT3BlcmF0aW9ucz4gZmlsdGVycyA9IHN0ZDo6bWFrZV91bmlx
dWU8RmlsdGVyT3BlcmF0aW9ucz4oKTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSgqZmls
dGVycykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdC5maWx0ZXJz
ID0gV1RGTW92ZShmaWx0ZXJzKTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9w
ZXJ0aWVzICYgRWRnZUFudGlhbGlhc2luZ01hc2tDaGFuZ2VkKSB7CisgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LmVkZ2VBbnRpYWxpYXNpbmdNYXNrKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0aWVzICYg
Q3VzdG9tQXBwZWFyYW5jZUNoYW5nZWQpIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVu
dW0ocmVzdWx0LmN1c3RvbUFwcGVhcmFuY2UpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBVc2VySW50ZXJhY3Rp
b25FbmFibGVkQ2hhbmdlZCkgeworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC51
c2VySW50ZXJhY3Rpb25FbmFibGVkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uKCkKK3sKK30KKworUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb246On5SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbigpCit7Cit9CisKK3ZvaWQgUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb246OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0
Cit7CisgICAgZW5jb2RlciA8PCBtX3Jvb3RMYXllcklEOworICAgIGVuY29kZXIgPDwgbV9jcmVh
dGVkTGF5ZXJzOworCisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9jaGFu
Z2VkTGF5ZXJzLnNpemUoKSk7CisKKyAgICBmb3IgKFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGU+IGxheWVyIDogbV9jaGFuZ2VkTGF5ZXJzKSB7CisgICAgICAgIGVuY29kZXIgPDwgbGF5ZXIt
PmxheWVySUQoKTsKKyAgICAgICAgZW5jb2RlciA8PCBsYXllci0+cHJvcGVydGllcygpOworICAg
IH0KKyAgICAKKyAgICBlbmNvZGVyIDw8IG1fZGVzdHJveWVkTGF5ZXJJRHM7CisgICAgZW5jb2Rl
ciA8PCBtX3ZpZGVvTGF5ZXJJRHNQZW5kaW5nRnVsbHNjcmVlbjsKKyAgICBlbmNvZGVyIDw8IG1f
bGF5ZXJJRHNXaXRoTmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZTsKKworICAgIGVuY29kZXIg
PDwgbV9jb250ZW50c1NpemU7CisgICAgZW5jb2RlciA8PCBtX3Njcm9sbE9yaWdpbjsKKworICAg
IGVuY29kZXIgPDwgbV9iYXNlTGF5b3V0Vmlld3BvcnRTaXplOworICAgIGVuY29kZXIgPDwgbV9t
aW5TdGFibGVMYXlvdXRWaWV3cG9ydE9yaWdpbjsKKyAgICBlbmNvZGVyIDw8IG1fbWF4U3RhYmxl
TGF5b3V0Vmlld3BvcnRPcmlnaW47CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgZW5jb2RlciA8
PCBtX3Njcm9sbFBvc2l0aW9uOworI2VuZGlmCisgICAgZW5jb2RlciA8PCBtX3BhZ2VFeHRlbmRl
ZEJhY2tncm91bmRDb2xvcjsKKyAgICBlbmNvZGVyIDw8IG1fcGFnZVNjYWxlRmFjdG9yOworICAg
IGVuY29kZXIgPDwgbV9taW5pbXVtU2NhbGVGYWN0b3I7CisgICAgZW5jb2RlciA8PCBtX21heGlt
dW1TY2FsZUZhY3RvcjsKKyAgICBlbmNvZGVyIDw8IG1faW5pdGlhbFNjYWxlRmFjdG9yOworICAg
IGVuY29kZXIgPDwgbV92aWV3cG9ydE1ldGFUYWdXaWR0aDsKKworICAgIGVuY29kZXIgPDwgbV9y
ZW5kZXJUcmVlU2l6ZTsKKyAgICBlbmNvZGVyIDw8IG1fdHJhbnNhY3Rpb25JRDsKKworICAgIGVu
Y29kZXIgPDwgbV9uZXdseVJlYWNoZWRMYXlvdXRNaWxlc3RvbmVzOworCisgICAgZW5jb2RlciA8
PCBtX3NjYWxlV2FzU2V0QnlVSVByb2Nlc3M7CisgICAgZW5jb2RlciA8PCBtX2FsbG93c1VzZXJT
Y2FsaW5nOworCisgICAgZW5jb2RlciA8PCBtX2F2b2lkc1Vuc2FmZUFyZWE7CisKKyAgICBlbmNv
ZGVyIDw8IG1fdmlld3BvcnRNZXRhVGFnV2lkdGhXYXNFeHBsaWNpdDsKKyAgICBlbmNvZGVyIDw8
IG1fdmlld3BvcnRNZXRhVGFnQ2FtZUZyb21JbWFnZURvY3VtZW50OworCisgICAgZW5jb2RlciA8
PCBtX2lzSW5TdGFibGVTdGF0ZTsKKworICAgIGVuY29kZXIgPDwgbV9jYWxsYmFja0lEczsKKwor
ICAgIGVuY29kZXIgPDwgaGFzRWRpdG9yU3RhdGUoKTsKKyAgICBpZiAobV9lZGl0b3JTdGF0ZSkK
KyAgICAgICAgZW5jb2RlciA8PCAqbV9lZGl0b3JTdGF0ZTsKK30KKworYm9vbCBSZW1vdGVMYXll
clRyZWVUcmFuc2FjdGlvbjo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgUmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb24mIHJlc3VsdCkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5tX3Jvb3RMYXllcklEKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcmVz
dWx0Lm1fcm9vdExheWVySUQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0Lm1fY3JlYXRlZExheWVycykpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHVpbnQ2NF90IG51bUNoYW5nZWRMYXllclByb3BlcnRpZXM7CisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShudW1DaGFuZ2VkTGF5ZXJQcm9wZXJ0aWVzKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IG51bUNoYW5nZWRMYXllclBy
b3BlcnRpZXM7ICsraSkgeworICAgICAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQg
bGF5ZXJJRDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklEKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5ZXJQcm9wZXJ0
aWVzPiBsYXllclByb3BlcnRpZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPExheWVyUHJvcGVydGllcz4o
KTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSgqbGF5ZXJQcm9wZXJ0aWVzKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXN1bHQuY2hhbmdlZExheWVyUHJvcGVy
dGllcygpLnNldChsYXllcklELCBXVEZNb3ZlKGxheWVyUHJvcGVydGllcykpOworICAgIH0KKwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fZGVzdHJveWVkTGF5ZXJJRHMpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8mIGxheWVySUQgOiByZXN1bHQubV9k
ZXN0cm95ZWRMYXllcklEcykgeworICAgICAgICBpZiAoIWxheWVySUQpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV92
aWRlb0xheWVySURzUGVuZGluZ0Z1bGxzY3JlZW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX2xheWVySURzV2l0aE5ld2x5VW5yZWFj
aGFibGVCYWNraW5nU3RvcmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKGF1
dG8mIGxheWVySUQgOiByZXN1bHQubV9sYXllcklEc1dpdGhOZXdseVVucmVhY2hhYmxlQmFja2lu
Z1N0b3JlKSB7CisgICAgICAgIGlmICghbGF5ZXJJRCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX2NvbnRlbnRzU2l6
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0Lm1fc2Nyb2xsT3JpZ2luKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXN1bHQubV9iYXNlTGF5b3V0Vmlld3BvcnRTaXplKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9taW5TdGFi
bGVMYXlvdXRWaWV3cG9ydE9yaWdpbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fbWF4U3RhYmxlTGF5b3V0Vmlld3BvcnRPcmlnaW4p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fc2Nyb2xsUG9zaXRpb24pKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKKyAgICAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5t
X3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fcGFnZVNjYWxlRmFjdG9yKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9taW5p
bXVtU2NhbGVGYWN0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5tX21heGltdW1TY2FsZUZhY3RvcikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1faW5pdGlhbFNjYWxlRmFj
dG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQubV92aWV3cG9ydE1ldGFUYWdXaWR0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fcmVuZGVyVHJlZVNpemUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX3RyYW5z
YWN0aW9uSUQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5tX25ld2x5UmVhY2hlZExheW91dE1pbGVzdG9uZXMpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX3NjYWxlV2FzU2V0
QnlVSVByb2Nlc3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC5tX2FsbG93c1VzZXJTY2FsaW5nKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9hdm9pZHNVbnNhZmVBcmVhKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
bV92aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV92aWV3cG9ydE1ldGFUYWdDYW1l
RnJvbUltYWdlRG9jdW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5tX2lzSW5TdGFibGVTdGF0ZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fY2FsbGJhY2tJRHMpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGhhc0VkaXRvclN0YXRlOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaGFzRWRpdG9yU3RhdGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoaGFzRWRpdG9yU3RhdGUpIHsKKyAgICAgICAgRWRpdG9yU3RhdGUgZWRpdG9y
U3RhdGU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZWRpdG9yU3RhdGUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQuc2V0RWRpdG9yU3RhdGUoZWRpdG9y
U3RhdGUpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uOjpzZXRSb290TGF5ZXJJRChHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQgcm9vdExheWVySUQpCit7CisgICAgQVNTRVJUX0FSRyhyb290TGF5ZXJJRCwgcm9vdExh
eWVySUQpOworCisgICAgbV9yb290TGF5ZXJJRCA9IHJvb3RMYXllcklEOworfQorCit2b2lkIFJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpsYXllclByb3BlcnRpZXNDaGFuZ2VkKFBsYXRmb3Jt
Q0FMYXllclJlbW90ZSYgcmVtb3RlTGF5ZXIpCit7CisgICAgbV9jaGFuZ2VkTGF5ZXJzLmFwcGVu
ZCgmcmVtb3RlTGF5ZXIpOworfQorCit2b2lkIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpz
ZXRDcmVhdGVkTGF5ZXJzKFZlY3RvcjxMYXllckNyZWF0aW9uUHJvcGVydGllcz4gY3JlYXRlZExh
eWVycykKK3sKKyAgICBtX2NyZWF0ZWRMYXllcnMgPSBXVEZNb3ZlKGNyZWF0ZWRMYXllcnMpOwor
fQorCit2b2lkIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpzZXREZXN0cm95ZWRMYXllcklE
cyhWZWN0b3I8R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBkZXN0cm95ZWRMYXllcklE
cykKK3sKKyAgICBtX2Rlc3Ryb3llZExheWVySURzID0gV1RGTW92ZShkZXN0cm95ZWRMYXllcklE
cyk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OnNldExheWVySURzV2l0
aE5ld2x5VW5yZWFjaGFibGVCYWNraW5nU3RvcmUoVmVjdG9yPEdyYXBoaWNzTGF5ZXI6OlBsYXRm
b3JtTGF5ZXJJRD4gbGF5ZXJJRHNXaXRoTmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZSkKK3sK
KyAgICBtX2xheWVySURzV2l0aE5ld2x5VW5yZWFjaGFibGVCYWNraW5nU3RvcmUgPSBXVEZNb3Zl
KGxheWVySURzV2l0aE5ld2x5VW5yZWFjaGFibGVCYWNraW5nU3RvcmUpOworfQorCisjaWYgIWRl
ZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZSYgYmFj
a2luZ1N0b3JlKQoreworICAgIHRzIDw8IGJhY2tpbmdTdG9yZS5zaXplKCk7CisgICAgdHMgPDwg
IiBzY2FsZT0iIDw8IGJhY2tpbmdTdG9yZS5zY2FsZSgpOworICAgIGlmIChiYWNraW5nU3RvcmUu
aXNPcGFxdWUoKSkKKyAgICAgICAgdHMgPDwgIiBvcGFxdWUiOworICAgIGlmIChiYWNraW5nU3Rv
cmUuYWNjZWxlcmF0ZXNEcmF3aW5nKCkpCisgICAgICAgIHRzIDw8ICIgYWNjZWxlcmF0ZWQiOwor
ICAgIHJldHVybiB0czsKK30KKworc3RhdGljIHZvaWQgZHVtcENoYW5nZWRMYXllcnMoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRp
ZXNNYXAmIGNoYW5nZWRMYXllclByb3BlcnRpZXMpCit7CisgICAgaWYgKGNoYW5nZWRMYXllclBy
b3BlcnRpZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBUZXh0U3RyZWFtOjpH
cm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICB0cyA8PCAiY2hhbmdlZC1sYXllcnMiOworCisgICAg
Ly8gRHVtcCB0aGUgbGF5ZXIgcHJvcGVydGllcyBzb3J0ZWQgYnkgbGF5ZXIgSUQuCisgICAgVmVj
dG9yPEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gbGF5ZXJJRHM7CisgICAgY29weUtl
eXNUb1ZlY3RvcihjaGFuZ2VkTGF5ZXJQcm9wZXJ0aWVzLCBsYXllcklEcyk7CisgICAgc3RkOjpz
b3J0KGxheWVySURzLmJlZ2luKCksIGxheWVySURzLmVuZCgpKTsKKworICAgIGZvciAoYXV0byYg
bGF5ZXJJRCA6IGxheWVySURzKSB7CisgICAgICAgIGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uOjpMYXllclByb3BlcnRpZXMmIGxheWVyUHJvcGVydGllcyA9ICpjaGFuZ2VkTGF5ZXJQ
cm9wZXJ0aWVzLmdldChsYXllcklEKTsKKworICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3Bl
IGdyb3VwKHRzKTsKKyAgICAgICAgdHMgPDwgImxheWVyICIgPDwgbGF5ZXJJRDsKKworICAgICAg
ICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb246Ok5hbWVDaGFuZ2VkKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJu
YW1lIiwgbGF5ZXJQcm9wZXJ0aWVzLm5hbWUpOworCisgICAgICAgIGlmIChsYXllclByb3BlcnRp
ZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q2hpbGRy
ZW5DaGFuZ2VkKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5PFZlY3RvcjxHcmFwaGljc0xh
eWVyOjpQbGF0Zm9ybUxheWVySUQ+PigiY2hpbGRyZW4iLCBsYXllclByb3BlcnRpZXMuY2hpbGRy
ZW4pOworCisgICAgICAgIGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6UG9zaXRpb25DaGFuZ2VkKQorICAgICAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJwb3NpdGlvbiIsIGxheWVyUHJvcGVydGllcy5wb3NpdGlvbik7CisK
KyAgICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjpCb3VuZHNDaGFuZ2VkKQorICAgICAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJib3VuZHMiLCBsYXllclByb3BlcnRpZXMuYm91bmRzKTsKKworICAgICAgICBpZiAo
bGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb246OkFuY2hvclBvaW50Q2hhbmdlZCkKKyAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
YW5jaG9yUG9pbnQiLCBsYXllclByb3BlcnRpZXMuYW5jaG9yUG9pbnQpOworCisgICAgICAgIGlm
IChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbjo6QmFja2dyb3VuZENvbG9yQ2hhbmdlZCkKKyAgICAgICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiYmFja2dyb3VuZENvbG9yIiwgbGF5ZXJQcm9wZXJ0aWVzLmJhY2tncm91bmRDb2xvcik7
CisKKyAgICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpCb3JkZXJDb2xvckNoYW5nZWQpCisgICAgICAgICAgICB0
cy5kdW1wUHJvcGVydHkoImJvcmRlckNvbG9yIiwgbGF5ZXJQcm9wZXJ0aWVzLmJvcmRlckNvbG9y
KTsKKworICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVt
b3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkJvcmRlcldpZHRoQ2hhbmdlZCkKKyAgICAgICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgiYm9yZGVyV2lkdGgiLCBsYXllclByb3BlcnRpZXMuYm9yZGVyV2lk
dGgpOworCisgICAgICAgIGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6T3BhY2l0eUNoYW5nZWQpCisgICAgICAgICAgICB0
cy5kdW1wUHJvcGVydHkoIm9wYWNpdHkiLCBsYXllclByb3BlcnRpZXMub3BhY2l0eSk7CisKKyAg
ICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uOjpUcmFuc2Zvcm1DaGFuZ2VkKQorICAgICAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJ0cmFuc2Zvcm0iLCBsYXllclByb3BlcnRpZXMudHJhbnNmb3JtID8gKmxheWVyUHJv
cGVydGllcy50cmFuc2Zvcm0gOiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKKworICAgICAgICBp
ZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb246OlN1YmxheWVyVHJhbnNmb3JtQ2hhbmdlZCkKKyAgICAgICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgic3VibGF5ZXJUcmFuc2Zvcm0iLCBsYXllclByb3BlcnRpZXMuc3VibGF5ZXJUcmFu
c2Zvcm0gPyAqbGF5ZXJQcm9wZXJ0aWVzLnN1YmxheWVyVHJhbnNmb3JtIDogVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSk7CisKKyAgICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVy
dGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpIaWRkZW5DaGFuZ2VkKQorICAgICAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJoaWRkZW4iLCBsYXllclByb3BlcnRpZXMuaGlkZGVuKTsK
KworICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb246Okdlb21ldHJ5RmxpcHBlZENoYW5nZWQpCisgICAgICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoImdlb21ldHJ5RmxpcHBlZCIsIGxheWVyUHJvcGVydGllcy5nZW9t
ZXRyeUZsaXBwZWQpOworCisgICAgICAgIGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3Bl
cnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6RG91YmxlU2lkZWRDaGFuZ2VkKQor
ICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJkb3VibGVTaWRlZCIsIGxheWVyUHJvcGVydGll
cy5kb3VibGVTaWRlZCk7CisKKyAgICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJv
cGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpNYXNrc1RvQm91bmRzQ2hhbmdl
ZCkKKyAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgibWFza3NUb0JvdW5kcyIsIGxheWVyUHJv
cGVydGllcy5tYXNrc1RvQm91bmRzKTsKKworICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNo
YW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246Ok9wYXF1ZUNoYW5n
ZWQpCisgICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm9wYXF1ZSIsIGxheWVyUHJvcGVydGll
cy5vcGFxdWUpOworCisgICAgICAgIGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRp
ZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q29udGVudHNIaWRkZW5DaGFuZ2VkKQor
ICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJjb250ZW50c0hpZGRlbiIsIGxheWVyUHJvcGVy
dGllcy5jb250ZW50c0hpZGRlbik7CisKKyAgICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5jaGFu
Z2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpNYXNrTGF5ZXJDaGFu
Z2VkKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJtYXNrTGF5ZXIiLCBsYXllclByb3Bl
cnRpZXMubWFza0xheWVySUQpOworCisgICAgICAgIGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdl
ZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q2xvbmVkQ29udGVudHND
aGFuZ2VkKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJjbG9uZWRMYXllciIsIGxheWVy
UHJvcGVydGllcy5jbG9uZWRMYXllcklEKTsKKworICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVz
LmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNvbnRlbnRz
UmVjdENoYW5nZWQpCisgICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbnRlbnRzUmVjdCIs
IGxheWVyUHJvcGVydGllcy5jb250ZW50c1JlY3QpOworCisgICAgICAgIGlmIChsYXllclByb3Bl
cnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q29u
dGVudHNTY2FsZUNoYW5nZWQpCisgICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbnRlbnRz
U2NhbGUiLCBsYXllclByb3BlcnRpZXMuY29udGVudHNTY2FsZSk7CisKKyAgICAgICAgaWYgKGxh
eWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uOjpDb3JuZXJSYWRpdXNDaGFuZ2VkKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJj
b3JuZXJSYWRpdXMiLCBsYXllclByb3BlcnRpZXMuY29ybmVyUmFkaXVzKTsKKworICAgICAgICBp
ZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb246OlNoYXBlUm91bmRlZFJlY3RDaGFuZ2VkKQorICAgICAgICAgICAgdHMuZHVtcFBy
b3BlcnR5KCJzaGFwZVJlY3QiLCBsYXllclByb3BlcnRpZXMuc2hhcGVSb3VuZGVkUmVjdCA/ICps
YXllclByb3BlcnRpZXMuc2hhcGVSb3VuZGVkUmVjdCA6IEZsb2F0Um91bmRlZFJlY3QoKSk7CisK
KyAgICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjpNaW5pZmljYXRpb25GaWx0ZXJDaGFuZ2VkKQorICAgICAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJtaW5pZmljYXRpb25GaWx0ZXIiLCBsYXllclByb3BlcnRpZXMu
bWluaWZpY2F0aW9uRmlsdGVyKTsKKworICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5n
ZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246Ok1hZ25pZmljYXRpb25G
aWx0ZXJDaGFuZ2VkKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJtYWduaWZpY2F0aW9u
RmlsdGVyIiwgbGF5ZXJQcm9wZXJ0aWVzLm1hZ25pZmljYXRpb25GaWx0ZXIpOworCisgICAgICAg
IGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6QmxlbmRNb2RlQ2hhbmdlZCkKKyAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgiYmxlbmRNb2RlIiwgbGF5ZXJQcm9wZXJ0aWVzLmJsZW5kTW9kZSk7CisKKyAgICAgICAgaWYg
KGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uOjpTcGVlZENoYW5nZWQpCisgICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNwZWVk
IiwgbGF5ZXJQcm9wZXJ0aWVzLnNwZWVkKTsKKworICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVz
LmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlRpbWVPZmZz
ZXRDaGFuZ2VkKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJ0aW1lT2Zmc2V0IiwgbGF5
ZXJQcm9wZXJ0aWVzLnRpbWVPZmZzZXQpOworCisgICAgICAgIGlmIChsYXllclByb3BlcnRpZXMu
Y2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6QmFja2luZ1N0
b3JlQ2hhbmdlZCkgeworICAgICAgICAgICAgaWYgKGNvbnN0IFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlKiBiYWNraW5nU3RvcmUgPSBsYXllclByb3BlcnRpZXMuYmFja2luZ1N0b3JlLmdldCgpKQor
ICAgICAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eTxjb25zdCBSZW1vdGVMYXllckJhY2tpbmdT
dG9yZSY+KCJiYWNraW5nU3RvcmUiLCAqYmFja2luZ1N0b3JlKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJhY2tpbmdTdG9yZSIsICJyZW1vdmVk
Iik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9w
ZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkJhY2tpbmdTdG9yZUF0dGFjaG1l
bnRDaGFuZ2VkKQorICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJiYWNraW5nU3RvcmVBdHRh
Y2hlZCIsIGxheWVyUHJvcGVydGllcy5iYWNraW5nU3RvcmVBdHRhY2hlZCk7CisKKyAgICAgICAg
aWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uOjpGaWx0ZXJzQ2hhbmdlZCkKKyAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
ZmlsdGVycyIsIGxheWVyUHJvcGVydGllcy5maWx0ZXJzID8gKmxheWVyUHJvcGVydGllcy5maWx0
ZXJzIDogRmlsdGVyT3BlcmF0aW9ucygpKTsKKworICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVz
LmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkFuaW1hdGlv
bnNDaGFuZ2VkKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleUFuaW1hdGlvblBh
aXIgOiBsYXllclByb3BlcnRpZXMuYWRkZWRBbmltYXRpb25zKQorICAgICAgICAgICAgICAgIHRz
LmR1bXBQcm9wZXJ0eSgiYW5pbWF0aW9uICIgKyAga2V5QW5pbWF0aW9uUGFpci5maXJzdCwga2V5
QW5pbWF0aW9uUGFpci5zZWNvbmQpOworCisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG5h
bWUgOiBsYXllclByb3BlcnRpZXMua2V5UGF0aHNPZkFuaW1hdGlvbnNUb1JlbW92ZSkKKyAgICAg
ICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoInJlbW92ZWQgYW5pbWF0aW9uIiwgbmFtZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVz
ICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkVkZ2VBbnRpYWxpYXNpbmdNYXNrQ2hhbmdl
ZCkKKyAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZWRnZUFudGlhbGlhc2luZ01hc2siLCBs
YXllclByb3BlcnRpZXMuZWRnZUFudGlhbGlhc2luZ01hc2spOworCisgICAgICAgIGlmIChsYXll
clByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlv
bjo6Q3VzdG9tQXBwZWFyYW5jZUNoYW5nZWQpCisgICAgICAgICAgICB0cy5kdW1wUHJvcGVydHko
ImN1c3RvbUFwcGVhcmFuY2UiLCBsYXllclByb3BlcnRpZXMuY3VzdG9tQXBwZWFyYW5jZSk7CisK
KyAgICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uOjpVc2VySW50ZXJhY3Rpb25FbmFibGVkQ2hhbmdlZCkKKyAgICAg
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgidXNlckludGVyYWN0aW9uRW5hYmxlZCIsIGxheWVyUHJv
cGVydGllcy51c2VySW50ZXJhY3Rpb25FbmFibGVkKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb246OmR1bXAoKSBjb25zdAoreworICAgIGZwcmludGYoc3RkZXJy
LCAiJXMiLCBkZXNjcmlwdGlvbigpLmRhdGEoKSk7Cit9CisKK0NTdHJpbmcgUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb246OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtIHRz
OworCisgICAgdHMuc3RhcnRHcm91cCgpOworICAgIHRzIDw8ICJsYXllciB0cmVlIjsKKworICAg
IHRzLmR1bXBQcm9wZXJ0eSgidHJhbnNhY3Rpb25JRCIsIG1fdHJhbnNhY3Rpb25JRCk7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJjb250ZW50c1NpemUiLCBtX2NvbnRlbnRzU2l6ZSk7CisgICAgaWYg
KG1fc2Nyb2xsT3JpZ2luICE9IEludFBvaW50Ojp6ZXJvKCkpCisgICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgic2Nyb2xsT3JpZ2luIiwgbV9zY3JvbGxPcmlnaW4pOworCisgICAgdHMuZHVtcFByb3Bl
cnR5KCJiYXNlTGF5b3V0Vmlld3BvcnRTaXplIiwgRmxvYXRTaXplKG1fYmFzZUxheW91dFZpZXdw
b3J0U2l6ZSkpOworCisgICAgaWYgKG1fbWluU3RhYmxlTGF5b3V0Vmlld3BvcnRPcmlnaW4gIT0g
TGF5b3V0UG9pbnQ6Onplcm8oKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJtaW5TdGFibGVM
YXlvdXRWaWV3cG9ydE9yaWdpbiIsIEZsb2F0UG9pbnQobV9taW5TdGFibGVMYXlvdXRWaWV3cG9y
dE9yaWdpbikpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgibWF4U3RhYmxlTGF5b3V0Vmlld3BvcnRP
cmlnaW4iLCBGbG9hdFBvaW50KG1fbWF4U3RhYmxlTGF5b3V0Vmlld3BvcnRPcmlnaW4pKTsKKwor
ICAgIGlmIChtX3BhZ2VTY2FsZUZhY3RvciAhPSAxKQorICAgICAgICB0cy5kdW1wUHJvcGVydHko
InBhZ2VTY2FsZUZhY3RvciIsIG1fcGFnZVNjYWxlRmFjdG9yKTsKKworICAgIHRzLmR1bXBQcm9w
ZXJ0eSgibWluaW11bVNjYWxlRmFjdG9yIiwgbV9taW5pbXVtU2NhbGVGYWN0b3IpOworICAgIHRz
LmR1bXBQcm9wZXJ0eSgibWF4aW11bVNjYWxlRmFjdG9yIiwgbV9tYXhpbXVtU2NhbGVGYWN0b3Ip
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW5pdGlhbFNjYWxlRmFjdG9yIiwgbV9pbml0aWFsU2Nh
bGVGYWN0b3IpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgidmlld3BvcnRNZXRhVGFnV2lkdGgiLCBt
X3ZpZXdwb3J0TWV0YVRhZ1dpZHRoKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInZpZXdwb3J0TWV0
YVRhZ1dpZHRoV2FzRXhwbGljaXQiLCBtX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoV2FzRXhwbGljaXQp
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgidmlld3BvcnRNZXRhVGFnQ2FtZUZyb21JbWFnZURvY3Vt
ZW50IiwgbV92aWV3cG9ydE1ldGFUYWdDYW1lRnJvbUltYWdlRG9jdW1lbnQpOworICAgIHRzLmR1
bXBQcm9wZXJ0eSgiYWxsb3dzVXNlclNjYWxpbmciLCBtX2FsbG93c1VzZXJTY2FsaW5nKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoImF2b2lkc1Vuc2FmZUFyZWEiLCBtX2F2b2lkc1Vuc2FmZUFyZWEp
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgiaXNJblN0YWJsZVN0YXRlIiwgbV9pc0luU3RhYmxlU3Rh
dGUpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVuZGVyVHJlZVNpemUiLCBtX3JlbmRlclRyZWVT
aXplKTsKKworICAgIHRzIDw8ICJyb290LWxheWVyICIgPDwgbV9yb290TGF5ZXJJRCA8PCAiKSI7
CisKKyAgICBpZiAoIW1fY3JlYXRlZExheWVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgVGV4dFN0
cmVhbTo6R3JvdXBTY29wZSBncm91cCh0cyk7CisgICAgICAgIHRzIDw8ICJjcmVhdGVkLWxheWVy
cyI7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgY3JlYXRlZExheWVyIDogbV9jcmVhdGVkTGF5
ZXJzKSB7CisgICAgICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAg
ICAgICAgICAgIHRzIDw8IGNyZWF0ZWRMYXllci50eXBlIDw8IiAiIDw8IGNyZWF0ZWRMYXllci5s
YXllcklEOworICAgICAgICAgICAgc3dpdGNoIChjcmVhdGVkTGF5ZXIudHlwZSkgeworICAgICAg
ICAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUFWUGxheWVyTGF5ZXI6CisgICAg
ICAgICAgICAgICAgdHMgPDwgIiAoY29udGV4dC1pZCAiIDw8IGNyZWF0ZWRMYXllci5ob3N0aW5n
Q29udGV4dElEIDw8ICIpIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVDb250ZW50c1Byb3ZpZGVkTGF5ZXI6CisgICAg
ICAgICAgICAgICAgdHMgPDwgIiAoY29udGV4dC1pZCAiIDw8IGNyZWF0ZWRMYXllci5ob3N0aW5n
Q29udGV4dElEIDw8ICIpIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVDdXN0b206CisgICAgICAgICAgICAgICAgdHMg
PDwgIiAoY29udGV4dC1pZCAiIDw8IGNyZWF0ZWRMYXllci5ob3N0aW5nQ29udGV4dElEIDw8ICIp
IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBk
dW1wQ2hhbmdlZExheWVycyh0cywgbV9jaGFuZ2VkTGF5ZXJQcm9wZXJ0aWVzKTsKKworICAgIGlm
ICghbV9kZXN0cm95ZWRMYXllcklEcy5pc0VtcHR5KCkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0
eTxWZWN0b3I8R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPj4oImRlc3Ryb3llZC1sYXll
cnMiLCBtX2Rlc3Ryb3llZExheWVySURzKTsKKworICAgIHRzLmVuZEdyb3VwKCk7CisKKyAgICBy
ZXR1cm4gdHMucmVsZWFzZSgpLnV0ZjgoKTsKK30KKworI2VuZGlmIC8vICFkZWZpbmVkKE5ERUJV
RykgfHwgIUxPR19ESVNBQkxFRAorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hMjFiMjAxMzA2NjE2ZDRhYjlkODQ3N2IyNjg4ZDk4ZWQ3NjQ3MGNlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwCkBAIC0wLDAgKzEsNjUyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JUcmFuc2FjdGlvbi5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlRml4ZWROb2RlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVUcmVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworI2lmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpCisKK25hbWVzcGFjZSBJUEMgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPFNjcm9sbGluZ1N0YXRlTm9kZT4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiwgY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImLCBTY3JvbGxpbmdTdGF0ZU5vZGUmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiB7CisgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUm
KTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSYpOworfTsKKyAgICAKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8U2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYsIGNvbnN0IFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlJik7CisgICAg
c3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5n
Tm9kZSYpOworfTsKKyAgICAKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8U2Nyb2xs
aW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGU+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYsIGNvbnN0IFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlJik7Cisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Ny
b2xsaW5nTm9kZSYpOworfTsKKyAgICAKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8
U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYsIGNvbnN0IFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlJik7CisgICAgc3RhdGljIGJvb2wgZGVj
b2RlKERlY29kZXImLCBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSYpOworfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGU+IHsKKyAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9k
ZSYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU2Nyb2xsaW5nU3RhdGVTdGlj
a3lOb2RlJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJUEMKKwordXNpbmcgbmFtZXNwYWNlIElQ
QzsKKwordm9pZCBBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlTm9kZT46OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIG5vZGUpCit7CisgICAgZW5j
b2Rlci5lbmNvZGVFbnVtKG5vZGUubm9kZVR5cGUoKSk7CisgICAgZW5jb2RlciA8PCBub2RlLnNj
cm9sbGluZ05vZGVJRCgpOworICAgIGVuY29kZXIgPDwgbm9kZS5wYXJlbnROb2RlSUQoKTsKKyAg
ICBlbmNvZGVyIDw8IG5vZGUuY2hhbmdlZFByb3BlcnRpZXMoKTsKKyAgICAKKyAgICBpZiAobm9k
ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpCisg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEPihub2RlLmxheWVyKCkpOworfQorCitib29sIEFyZ3VtZW50Q29kZXI8U2Nyb2xsaW5nU3Rh
dGVOb2RlPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNjcm9sbGluZ1N0YXRlTm9kZSYgbm9k
ZSkKK3sKKyAgICAvLyBub2RlVHlwZSwgc2Nyb2xsaW5nTm9kZUlEIGFuZCBwYXJlbnROb2RlSUQg
aGF2ZSBhbHJlYWR5IGJlZW4gZGVjb2RlZCBieSB0aGUgY2FsbGVyIGluIG9yZGVyIHRvIGNyZWF0
ZSB0aGUgbm9kZS4KKyAgICBTY3JvbGxpbmdTdGF0ZU5vZGU6OkNoYW5nZWRQcm9wZXJ0aWVzIGNo
YW5nZWRQcm9wZXJ0aWVzOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2hhbmdlZFByb3BlcnRp
ZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBub2RlLnNldENoYW5nZWRQcm9wZXJ0
aWVzKGNoYW5nZWRQcm9wZXJ0aWVzKTsKKyAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHko
U2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpIHsKKyAgICAgICAgR3JhcGhpY3NMYXll
cjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
bGF5ZXJJRCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG5vZGUuc2V0TGF5
ZXIobGF5ZXJJRCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNkZWZpbmUgU0NS
T0xMSU5HX05PREVfRU5DT0RFKHByb3BlcnR5LCBnZXR0ZXIpIFwKKyAgICBpZiAobm9kZS5oYXND
aGFuZ2VkUHJvcGVydHkocHJvcGVydHkpKSBcCisgICAgICAgIGVuY29kZXIgPDwgbm9kZS5nZXR0
ZXIoKTsKKworI2RlZmluZSBTQ1JPTExJTkdfTk9ERV9FTkNPREVfRU5VTShwcm9wZXJ0eSwgZ2V0
dGVyKSBcCisgICAgaWYgKG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KHByb3BlcnR5KSkgXAorICAg
ICAgICBlbmNvZGVyLmVuY29kZUVudW0obm9kZS5nZXR0ZXIoKSk7CisKK3ZvaWQgQXJndW1lbnRD
b2RlcjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBub2RlKQoreworICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJj4obm9kZSk7CisgICAg
CisgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
U2Nyb2xsYWJsZUFyZWFTaXplLCBzY3JvbGxhYmxlQXJlYVNpemUpCisgICAgU0NST0xMSU5HX05P
REVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VG90YWxDb250ZW50c1NpemUs
IHRvdGFsQ29udGVudHNTaXplKQorICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSwgcmVhY2hhYmxlQ29udGVu
dHNTaXplKQorICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OlNjcm9sbFBvc2l0aW9uLCBzY3JvbGxQb3NpdGlvbikKKyAgICBTQ1JPTExJTkdfTk9E
RV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxPcmlnaW4sIHNjcm9s
bE9yaWdpbikKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIFNDUk9MTElOR19OT0RF
X0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFwT2Zmc2V0
cywgaG9yaXpvbnRhbFNuYXBPZmZzZXRzKQorICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldHMsIHZlcnRpY2FsU25h
cE9mZnNldHMpCisgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMsIGhvcml6b250YWxTbmFwT2Zmc2V0
UmFuZ2VzKQorICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OlZlcnRpY2FsU25hcE9mZnNldFJhbmdlcywgdmVydGljYWxTbmFwT2Zmc2V0UmFuZ2Vz
KQorICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OkN1cnJlbnRIb3Jpem9udGFsU25hcE9mZnNldEluZGV4LCBjdXJyZW50SG9yaXpvbnRhbFNuYXBQ
b2ludEluZGV4KQorICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGU6OkN1cnJlbnRWZXJ0aWNhbFNuYXBPZmZzZXRJbmRleCwgY3VycmVudFZlcnRpY2Fs
U25hcFBvaW50SW5kZXgpCisjZW5kaWYKKyAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxhYmxlQXJlYVBhcmFtcywgc2Nyb2xsYWJsZUFy
ZWFQYXJhbWV0ZXJzKQorICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uLCByZXF1ZXN0ZWRTY3JvbGxQb3Np
dGlvbikKKyAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbiwgcmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25SZXBy
ZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKQorCisgICAgaWYgKG5vZGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsZWRDb250ZW50c0xheWVyKSkK
KyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQ+KG5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCkpOworfQorCit2b2lkIEFyZ3VtZW50
Q29kZXI8U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU+OjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUmIG5vZGUpCit7
CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUmPihub2RlKTsKKyAgICAKKyAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5n
U3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkZyYW1lU2NhbGVGYWN0b3IsIGZyYW1lU2NhbGVGYWN0
b3IpCisgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxp
bmdOb2RlOjpFdmVudFRyYWNraW5nUmVnaW9uLCBldmVudFRyYWNraW5nUmVnaW9ucykKKyAgICBT
Q1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OlJl
YXNvbnNGb3JTeW5jaHJvbm91c1Njcm9sbGluZywgc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25z
KQorICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERV9FTlVNKFNjcm9sbGluZ1N0YXRlRnJhbWVTY3Jv
bGxpbmdOb2RlOjpCZWhhdmlvckZvckZpeGVkRWxlbWVudHMsIHNjcm9sbEJlaGF2aW9yRm9yRml4
ZWRFbGVtZW50cykKKyAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVGcmFt
ZVNjcm9sbGluZ05vZGU6OkhlYWRlckhlaWdodCwgaGVhZGVySGVpZ2h0KQorICAgIFNDUk9MTElO
R19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Rm9vdGVySGVp
Z2h0LCBmb290ZXJIZWlnaHQpCisgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0
YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpUb3BDb250ZW50SW5zZXQsIHRvcENvbnRlbnRJbnNldCkK
KyAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05v
ZGU6OkZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUsIGZpeGVkRWxlbWVudHNMYXlv
dXRSZWxhdGl2ZVRvRnJhbWUpCisgICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0
YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpWaXN1YWxWaWV3cG9ydEVuYWJsZWQsIHZpc3VhbFZpZXdw
b3J0RW5hYmxlZCkKKyAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVGcmFt
ZVNjcm9sbGluZ05vZGU6OkxheW91dFZpZXdwb3J0LCBsYXlvdXRWaWV3cG9ydCkKKyAgICBTQ1JP
TExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6Ok1pbkxh
eW91dFZpZXdwb3J0T3JpZ2luLCBtaW5MYXlvdXRWaWV3cG9ydE9yaWdpbikKKyAgICBTQ1JPTExJ
TkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6Ok1heExheW91
dFZpZXdwb3J0T3JpZ2luLCBtYXhMYXlvdXRWaWV3cG9ydE9yaWdpbikKKworICAgIGlmIChub2Rl
Lmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Q291
bnRlclNjcm9sbGluZ0xheWVyKSkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxHcmFw
aGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+KG5vZGUuY291bnRlclNjcm9sbGluZ0xheWVyKCkp
OworCisgICAgaWYgKG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVT
Y3JvbGxpbmdOb2RlOjpJbnNldENsaXBMYXllcikpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPihub2RlLmluc2V0Q2xpcExheWVy
KCkpOworCisgICAgaWYgKG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJh
bWVTY3JvbGxpbmdOb2RlOjpDb250ZW50U2hhZG93TGF5ZXIpKQorICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4obm9kZS5jb250ZW50
U2hhZG93TGF5ZXIoKSk7Cit9CisKK3ZvaWQgQXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0ZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTY3Jv
bGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZSYgbm9kZSkKK3sKKyAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGNvbnN0IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSY+KG5vZGUpOwor
fQorCisjZGVmaW5lIFNDUk9MTElOR19OT0RFX0RFQ09ERShwcm9wZXJ0eSwgdHlwZSwgc2V0dGVy
KSBcCisgICAgaWYgKG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KHByb3BlcnR5KSkgeyBcCisgICAg
ICAgIHR5cGUgZGVjb2RlZFZhbHVlOyBcCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZGVj
b2RlZFZhbHVlKSkgXAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisgICAgICAgIG5vZGUu
c2V0dGVyKGRlY29kZWRWYWx1ZSk7IFwKKyAgICB9CisKKyNkZWZpbmUgU0NST0xMSU5HX05PREVf
REVDT0RFX0VOVU0ocHJvcGVydHksIHR5cGUsIHNldHRlcikgXAorICAgIGlmIChub2RlLmhhc0No
YW5nZWRQcm9wZXJ0eShwcm9wZXJ0eSkpIHsgXAorICAgICAgICB0eXBlIGRlY29kZWRWYWx1ZTsg
XAorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShkZWNvZGVkVmFsdWUpKSBcCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IFwKKyAgICAgICAgbm9kZS5zZXR0ZXIoZGVjb2RlZFZhbHVl
KTsgXAorICAgIH0KKworYm9vbCBBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUmIG5vZGUpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0aWNfY2FzdDxTY3JvbGxp
bmdTdGF0ZU5vZGUmPihub2RlKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNDUk9M
TElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGFibGVB
cmVhU2l6ZSwgRmxvYXRTaXplLCBzZXRTY3JvbGxhYmxlQXJlYVNpemUpOworICAgIFNDUk9MTElO
R19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlRvdGFsQ29udGVudHNT
aXplLCBGbG9hdFNpemUsIHNldFRvdGFsQ29udGVudHNTaXplKTsKKyAgICBTQ1JPTExJTkdfTk9E
RV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1Np
emUsIEZsb2F0U2l6ZSwgc2V0UmVhY2hhYmxlQ29udGVudHNTaXplKTsKKyAgICBTQ1JPTExJTkdf
Tk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxQb3NpdGlvbiwg
RmxvYXRQb2ludCwgc2V0U2Nyb2xsUG9zaXRpb24pOworICAgIFNDUk9MTElOR19OT0RFX0RFQ09E
RShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbiwgSW50UG9pbnQsIHNl
dFNjcm9sbE9yaWdpbik7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBTQ1JPTExJ
TkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jpem9udGFsU25h
cE9mZnNldHMsIFZlY3RvcjxmbG9hdD4sIHNldEhvcml6b250YWxTbmFwT2Zmc2V0cyk7CisgICAg
U0NST0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGlj
YWxTbmFwT2Zmc2V0cywgVmVjdG9yPGZsb2F0Piwgc2V0VmVydGljYWxTbmFwT2Zmc2V0cyk7Cisg
ICAgU0NST0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9y
aXpvbnRhbFNuYXBPZmZzZXRSYW5nZXMsIFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+
LCBzZXRIb3Jpem9udGFsU25hcE9mZnNldFJhbmdlcykKKyAgICBTQ1JPTExJTkdfTk9ERV9ERUNP
REUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMs
IFZlY3RvcjxTY3JvbGxPZmZzZXRSYW5nZTxmbG9hdD4+LCBzZXRWZXJ0aWNhbFNuYXBPZmZzZXRS
YW5nZXMpCisgICAgU0NST0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6Q3VycmVudEhvcml6b250YWxTbmFwT2Zmc2V0SW5kZXgsIHVuc2lnbmVkLCBzZXRDdXJy
ZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KTsKKyAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUo
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpDdXJyZW50VmVydGljYWxTbmFwT2Zmc2V0SW5k
ZXgsIHVuc2lnbmVkLCBzZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCk7CisjZW5kaWYK
KyAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpT
Y3JvbGxhYmxlQXJlYVBhcmFtcywgU2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzLCBzZXRTY3JvbGxh
YmxlQXJlYVBhcmFtZXRlcnMpOworICAgIAorICAgIGlmIChub2RlLmhhc0NoYW5nZWRQcm9wZXJ0
eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKSkg
eworICAgICAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uOworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHNjcm9sbFBvc2l0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBib29sIHJlcHJlc2VudHNQcm9ncmFtbWF0aWNTY3JvbGw7CisgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbm9kZS5zZXRSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlv
bihzY3JvbGxQb3NpdGlvbiwgcmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbCk7CisgICAgfQor
CisgICAgaWYgKG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6U2Nyb2xsZWRDb250ZW50c0xheWVyKSkgeworICAgICAgICBHcmFwaGljc0xheWVyOjpQ
bGF0Zm9ybUxheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXll
cklEKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbm9kZS5zZXRTY3JvbGxl
ZENvbnRlbnRzTGF5ZXIobGF5ZXJJRCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgQXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZT46OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZSYg
bm9kZSkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpY19jYXN0PFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZSY+KG5vZGUpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
U0NST0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpG
cmFtZVNjYWxlRmFjdG9yLCBmbG9hdCwgc2V0RnJhbWVTY2FsZUZhY3Rvcik7CisgICAgU0NST0xM
SU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpFdmVudFRy
YWNraW5nUmVnaW9uLCBFdmVudFRyYWNraW5nUmVnaW9ucywgc2V0RXZlbnRUcmFja2luZ1JlZ2lv
bnMpOworICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xs
aW5nTm9kZTo6UmVhc29uc0ZvclN5bmNocm9ub3VzU2Nyb2xsaW5nLCBTeW5jaHJvbm91c1Njcm9s
bGluZ1JlYXNvbnMsIHNldFN5bmNocm9ub3VzU2Nyb2xsaW5nUmVhc29ucyk7CisgICAgU0NST0xM
SU5HX05PREVfREVDT0RFX0VOVU0oU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkJl
aGF2aW9yRm9yRml4ZWRFbGVtZW50cywgU2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzLCBz
ZXRTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMpOworCisgICAgU0NST0xMSU5HX05PREVf
REVDT0RFKFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpIZWFkZXJIZWlnaHQsIGlu
dCwgc2V0SGVhZGVySGVpZ2h0KTsKKyAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5n
U3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkZvb3RlckhlaWdodCwgaW50LCBzZXRGb290ZXJIZWln
aHQpOworICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xs
aW5nTm9kZTo6VG9wQ29udGVudEluc2V0LCBmbG9hdCwgc2V0VG9wQ29udGVudEluc2V0KTsKKyAg
ICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6
OkZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUsIGJvb2wsIHNldEZpeGVkRWxlbWVu
dHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUpOworICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3Jv
bGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6VmlzdWFsVmlld3BvcnRFbmFibGVkLCBib29s
LCBzZXRWaXN1YWxWaWV3cG9ydEVuYWJsZWQpCisgICAgU0NST0xMSU5HX05PREVfREVDT0RFKFNj
cm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpMYXlvdXRWaWV3cG9ydCwgRmxvYXRSZWN0
LCBzZXRMYXlvdXRWaWV3cG9ydCkKKyAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5n
U3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6Ok1pbkxheW91dFZpZXdwb3J0T3JpZ2luLCBGbG9hdFBv
aW50LCBzZXRNaW5MYXlvdXRWaWV3cG9ydE9yaWdpbikKKyAgICBTQ1JPTExJTkdfTk9ERV9ERUNP
REUoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6Ok1heExheW91dFZpZXdwb3J0T3Jp
Z2luLCBGbG9hdFBvaW50LCBzZXRNYXhMYXlvdXRWaWV3cG9ydE9yaWdpbikKKworICAgIGlmIChu
b2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6
Q291bnRlclNjcm9sbGluZ0xheWVyKSkgeworICAgICAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9y
bUxheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklEKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbm9kZS5zZXRDb3VudGVyU2Nyb2xs
aW5nTGF5ZXIobGF5ZXJJRCk7CisgICAgfQorCisgICAgaWYgKG5vZGUuaGFzQ2hhbmdlZFByb3Bl
cnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpJbnNldENsaXBMYXllcikpIHsK
KyAgICAgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQ7CisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIG5vZGUuc2V0SW5zZXRDbGlwTGF5ZXIobGF5ZXJJRCk7CisgICAgfQorCisgICAg
aWYgKG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdO
b2RlOjpDb250ZW50U2hhZG93TGF5ZXIpKSB7CisgICAgICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRm
b3JtTGF5ZXJJRCBsYXllcklEOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVySUQp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBub2RlLnNldENvbnRlbnRTaGFk
b3dMYXllcihsYXllcklEKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBB
cmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlJiBu
b2RlKQoreworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlJj4obm9kZSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlRml4ZWRO
b2RlPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNjcm9sbGluZ1N0YXRlRml4ZWRO
b2RlJiBub2RlKQoreworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgU2Nyb2xsaW5n
U3RhdGVOb2RlJj4obm9kZSk7CisgICAgCisgICAgaWYgKG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlOjpWaWV3cG9ydENvbnN0cmFpbnRzKSkKKyAgICAgICAg
ZW5jb2RlciA8PCBub2RlLnZpZXdwb3J0Q29uc3RyYWludHMoKTsKK30KKworYm9vbCBBcmd1bWVu
dENvZGVyPFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlJiBub2RlKQoreworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nU3RhdGVOb2RlJj4obm9kZSkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3Rh
dGVGaXhlZE5vZGU6OlZpZXdwb3J0Q29uc3RyYWludHMpKSB7CisgICAgICAgIEZpeGVkUG9zaXRp
b25WaWV3cG9ydENvbnN0cmFpbnRzIGRlY29kZWRWYWx1ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShkZWNvZGVkVmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBub2RlLnVwZGF0ZUNvbnN0cmFpbnRzKGRlY29kZWRWYWx1ZSk7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgQXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0ZVN0aWNreU5v
ZGU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU2Nyb2xsaW5nU3RhdGVTdGlja3lO
b2RlJiBub2RlKQoreworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgU2Nyb2xsaW5n
U3RhdGVOb2RlJj4obm9kZSk7CisgICAgCisgICAgaWYgKG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZTo6Vmlld3BvcnRDb25zdHJhaW50cykpCisgICAgICAg
IGVuY29kZXIgPDwgbm9kZS52aWV3cG9ydENvbnN0cmFpbnRzKCk7Cit9CisKK2Jvb2wgQXJndW1l
bnRDb2RlcjxTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGU+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgU2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlJiBub2RlKQoreworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nU3RhdGVOb2RlJj4obm9kZSkpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTdGlja3lOb2RlOjpWaWV3cG9ydENvbnN0cmFpbnRzKSkgeworICAgICAgICBTdGlja3lQ
b3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMgZGVjb2RlZFZhbHVlOworICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGRlY29kZWRWYWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIG5vZGUudXBkYXRlQ29uc3RyYWludHMoZGVjb2RlZFZhbHVlKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lkIGVu
Y29kZU5vZGVBbmREZXNjZW5kYW50cyhJUEM6OkVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNjcm9s
bGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlLCBpbnQmIGVuY29kZWROb2RlQ291bnQpCit7CisgICAg
KytlbmNvZGVkTm9kZUNvdW50OworCisgICAgc3dpdGNoIChzdGF0ZU5vZGUubm9kZVR5cGUoKSkg
eworICAgIGNhc2UgRnJhbWVTY3JvbGxpbmdOb2RlOgorICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIE92ZXJmbG93U2Nyb2xsaW5nTm9kZToKKyAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZT4oc3RhdGVO
b2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaXhlZE5vZGU6CisgICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU+KHN0YXRlTm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgU3RpY2t5Tm9kZToKKyAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGU+KHN0YXRlTm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGlmICghc3RhdGVOb2RlLmNoaWxkcmVuKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiAqc3RhdGVOb2RlLmNoaWxkcmVuKCkp
CisgICAgICAgIGVuY29kZU5vZGVBbmREZXNjZW5kYW50cyhlbmNvZGVyLCAqY2hpbGQuZ2V0KCks
IGVuY29kZWROb2RlQ291bnQpOworfQorCit2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
VHJhbnNhY3Rpb246OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAg
aW50IG51bU5vZGVzID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUgPyBtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+bm9kZUNvdW50KCkgOiAwOworICAgIGVuY29kZXIgPDwgbnVtTm9kZXM7CisgICAgCisgICAg
Ym9vbCBoYXNOZXdSb290Tm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlID8gbV9zY3JvbGxpbmdT
dGF0ZVRyZWUtPmhhc05ld1Jvb3RTdGF0ZU5vZGUoKSA6IGZhbHNlOworICAgIGVuY29kZXIgPDwg
aGFzTmV3Um9vdE5vZGU7CisKKyAgICBpZiAobV9zY3JvbGxpbmdTdGF0ZVRyZWUpIHsKKyAgICAg
ICAgZW5jb2RlciA8PCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+aGFzQ2hhbmdlZFByb3BlcnRpZXMo
KTsKKworICAgICAgICBpbnQgbnVtTm9kZXNFbmNvZGVkID0gMDsKKyAgICAgICAgaWYgKGNvbnN0
IFNjcm9sbGluZ1N0YXRlTm9kZSogcm9vdE5vZGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9v
dFN0YXRlTm9kZSgpKQorICAgICAgICAgICAgZW5jb2RlTm9kZUFuZERlc2NlbmRhbnRzKGVuY29k
ZXIsICpyb290Tm9kZSwgbnVtTm9kZXNFbmNvZGVkKTsKKworICAgICAgICBBU1NFUlRfVU5VU0VE
KG51bU5vZGVzRW5jb2RlZCwgbnVtTm9kZXNFbmNvZGVkID09IG51bU5vZGVzKTsKKyAgICAgICAg
ZW5jb2RlciA8PCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cmVtb3ZlZE5vZGVzKCk7CisgICAgfSBl
bHNlCisgICAgICAgIGVuY29kZXIgPDwgVmVjdG9yPFNjcm9sbGluZ05vZGVJRD4oKTsKK30KKwor
Ym9vbCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uOjpkZWNvZGUoSVBDOjpE
ZWNvZGVyJiBkZWNvZGVyLCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbikKK3sKKyAgICByZXR1cm4gdHJhbnNhY3Rpb24uZGVjb2RlKGRlY29kZXIpOwor
fQorCitib29sIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb246OmRlY29kZShJ
UEM6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAgaW50IG51bU5vZGVzOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUobnVtTm9kZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29s
IGhhc05ld1Jvb3ROb2RlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzTmV3Um9vdE5vZGUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUg
PSBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbGluZ1N0YXRlVHJlZT4oKTsKKworICAgIGJvb2wgaGFz
Q2hhbmdlZFByb3BlcnRpZXM7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNDaGFuZ2VkUHJv
cGVydGllcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fc2Nyb2xsaW5nU3RhdGVU
cmVlLT5zZXRIYXNDaGFuZ2VkUHJvcGVydGllcyhoYXNDaGFuZ2VkUHJvcGVydGllcyk7CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bU5vZGVzOyArK2kpIHsKKyAgICAgICAgU2Nyb2xsaW5n
Tm9kZVR5cGUgbm9kZVR5cGU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKG5vZGVU
eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBTY3JvbGxpbmdOb2Rl
SUQgbm9kZUlEOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5vZGVJRCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU2Nyb2xsaW5nTm9kZUlEIHBhcmVudE5vZGVJ
RDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJlbnROb2RlSUQpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5hdHRhY2hO
b2RlKG5vZGVUeXBlLCBub2RlSUQsIHBhcmVudE5vZGVJRCk7CisgICAgICAgIFNjcm9sbGluZ1N0
YXRlTm9kZSogbmV3Tm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zdGF0ZU5vZGVGb3JJRChu
b2RlSUQpOworICAgICAgICBBU1NFUlQobmV3Tm9kZSk7CisgICAgICAgIEFTU0VSVCghcGFyZW50
Tm9kZUlEIHx8IG5ld05vZGUtPnBhcmVudCgpKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
bm9kZVR5cGUpIHsKKyAgICAgICAgY2FzZSBGcmFtZVNjcm9sbGluZ05vZGU6CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxp
bmdOb2RlPigqbmV3Tm9kZSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE92ZXJmbG93U2Nyb2xsaW5nTm9kZToKKyAgICAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVPdmVyZmxv
d1Njcm9sbGluZ05vZGU+KCpuZXdOb2RlKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRml4ZWROb2RlOgorICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZT4o
Km5ld05vZGUpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTdGlja3lOb2RlOgorICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGU+KCpuZXdOb2RlKSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0SGFzTmV3Um9vdFN0YXRl
Tm9kZShoYXNOZXdSb290Tm9kZSk7CisKKyAgICAvLyBSZW1vdmVkIG5vZGVzCisgICAgSGFzaFNl
dDxTY3JvbGxpbmdOb2RlSUQ+IHJlbW92ZWROb2RlczsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlbW92ZWROb2RlcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocmVt
b3ZlZE5vZGVzLnNpemUoKSkKKyAgICAgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldFJlbW92
ZWROb2RlcyhyZW1vdmVkTm9kZXMpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiAhZGVm
aW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKKworc3RhdGljIHZvaWQgZHVtcChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJiBub2RlLCBib29sIGNo
YW5nZWRQcm9wZXJ0aWVzT25seSkKK3sKKyAgICBpZiAoIWNoYW5nZWRQcm9wZXJ0aWVzT25seSB8
fCBub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNj
cm9sbGFibGVBcmVhU2l6ZSkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2Nyb2xsYWJsZS1h
cmVhLXNpemUiLCBub2RlLnNjcm9sbGFibGVBcmVhU2l6ZSgpKTsKKworICAgIGlmICghY2hhbmdl
ZFByb3BlcnRpZXNPbmx5IHx8IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6VG90YWxDb250ZW50c1NpemUpKQorICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoInRvdGFsLWNvbnRlbnRzLXNpemUiLCBub2RlLnRvdGFsQ29udGVudHNTaXplKCkpOworCisg
ICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllc09ubHkgfHwgbm9kZS5oYXNDaGFuZ2VkUHJvcGVydHko
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZWFjaGFibGVDb250ZW50c1NpemUpKQorICAg
ICAgICB0cy5kdW1wUHJvcGVydHkoInJlYWNoYWJsZS1jb250ZW50cy1zaXplIiwgbm9kZS5yZWFj
aGFibGVDb250ZW50c1NpemUoKSk7CisKKyAgICBpZiAoIWNoYW5nZWRQcm9wZXJ0aWVzT25seSB8
fCBub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNj
cm9sbFBvc2l0aW9uKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzY3JvbGwtcG9zaXRpb24i
LCBub2RlLnNjcm9sbFBvc2l0aW9uKCkpOworCisgICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllc09u
bHkgfHwgbm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
OjpTY3JvbGxPcmlnaW4pKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNjcm9sbC1vcmlnaW4i
LCBub2RlLnNjcm9sbE9yaWdpbigpKTsKKworICAgIGlmICghY2hhbmdlZFByb3BlcnRpZXNPbmx5
IHx8IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24pKSB7CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVx
dWVzdGVkLXNjcm9sbC1wb3NpdGlvbiIsIG5vZGUucmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKSk7
CisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVxdWVzdGVkLXNjcm9sbC1wb3NpdGlvbi1pcy1w
cm9ncmFtYXRpYyIsIG5vZGUucmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3Jh
bW1hdGljU2Nyb2xsKCkpOworICAgIH0KKworICAgIGlmICghY2hhbmdlZFByb3BlcnRpZXNPbmx5
IHx8IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
U2Nyb2xsZWRDb250ZW50c0xheWVyKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzY3JvbGxl
ZC1jb250ZW50cy1sYXllciIsIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5
ZXJJRD4obm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSkpOworfQorICAgIAorc3RhdGljIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGlu
Z05vZGUmIG5vZGUsIGJvb2wgY2hhbmdlZFByb3BlcnRpZXNPbmx5KQoreworICAgIGR1bXAodHMs
IHN0YXRpY19jYXN0PGNvbnN0IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSY+KG5vZGUpLCBj
aGFuZ2VkUHJvcGVydGllc09ubHkpOworICAgIAorICAgIGlmICghY2hhbmdlZFByb3BlcnRpZXNP
bmx5IHx8IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxp
bmdOb2RlOjpGcmFtZVNjYWxlRmFjdG9yKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmcmFt
ZS1zY2FsZS1mYWN0b3IiLCBub2RlLmZyYW1lU2NhbGVGYWN0b3IoKSk7CisKKyAgICBpZiAoIWNo
YW5nZWRQcm9wZXJ0aWVzT25seSB8fCBub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdT
dGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6RXZlbnRUcmFja2luZ1JlZ2lvbikpIHsKKyAgICAgICAg
eworICAgICAgICAgICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBncm91cCh0cyk7CisgICAgICAg
ICAgICB0cyA8PCAiYXN5bmNocm9ub3VzLWV2ZW50LXRyYWNraW5nLXJlZ2lvbiI7CisgICAgICAg
ICAgICBmb3IgKGF1dG8gcmVjdCA6IG5vZGUuZXZlbnRUcmFja2luZ1JlZ2lvbnMoKS5hc3luY2hy
b25vdXNEaXNwYXRjaFJlZ2lvbi5yZWN0cygpKSB7CisgICAgICAgICAgICAgICAgdHMgPDwgIlxu
IjsKKyAgICAgICAgICAgICAgICB0cy53cml0ZUluZGVudCgpOworICAgICAgICAgICAgICAgIHRz
IDw8IHJlY3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBzeW5jaHJvbm91c0V2ZW50UmVnaW9uIDogbm9kZS5ldmVudFRyYWNraW5nUmVnaW9ucygp
LmV2ZW50U3BlY2lmaWNTeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9ucykgeworICAgICAgICAgICAg
VGV4dFN0cmVhbTo6R3JvdXBTY29wZSBncm91cCh0cyk7CisgICAgICAgICAgICB0cyA8PCAic3lu
Y2hyb25vdXMtZXZlbnQtdHJhY2tpbmctcmVnaW9uIGZvciBldmVudCAiIDw8IHN5bmNocm9ub3Vz
RXZlbnRSZWdpb24ua2V5OworCisgICAgICAgICAgICBmb3IgKGF1dG8gcmVjdCA6IHN5bmNocm9u
b3VzRXZlbnRSZWdpb24udmFsdWUucmVjdHMoKSkgeworICAgICAgICAgICAgICAgIHRzIDw8ICJc
biI7CisgICAgICAgICAgICAgICAgdHMud3JpdGVJbmRlbnQoKTsKKyAgICAgICAgICAgICAgICB0
cyA8PCByZWN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gRklY
TUU6IGR1bXAgc3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zCisgICAgLy8gRklYTUU6IGR1bXAg
c2Nyb2xsYWJsZUFyZWFQYXJhbWV0ZXJzCisgICAgLy8gRklYTUU6IGR1bXAgc2Nyb2xsQmVoYXZp
b3JGb3JGaXhlZEVsZW1lbnRzCisKKyAgICBpZiAoIWNoYW5nZWRQcm9wZXJ0aWVzT25seSB8fCBu
b2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6
SGVhZGVySGVpZ2h0KSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJoZWFkZXItaGVpZ2h0Iiwg
bm9kZS5oZWFkZXJIZWlnaHQoKSk7CisKKyAgICBpZiAoIWNoYW5nZWRQcm9wZXJ0aWVzT25seSB8
fCBub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9k
ZTo6Rm9vdGVySGVpZ2h0KSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmb290ZXItaGVpZ2h0
Iiwgbm9kZS5mb290ZXJIZWlnaHQoKSk7CisKKyAgICBpZiAoIWNoYW5nZWRQcm9wZXJ0aWVzT25s
eSB8fCBub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5n
Tm9kZTo6VG9wQ29udGVudEluc2V0KSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJ0b3AtY29u
dGVudC1pbnNldCIsIG5vZGUudG9wQ29udGVudEluc2V0KCkpOworCisgICAgaWYgKCFjaGFuZ2Vk
UHJvcGVydGllc09ubHkgfHwgbm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVG
cmFtZVNjcm9sbGluZ05vZGU6OkZyYW1lU2NhbGVGYWN0b3IpKQorICAgICAgICB0cy5kdW1wUHJv
cGVydHkoImZyYW1lLXNjYWxlLWZhY3RvciIsIG5vZGUuZnJhbWVTY2FsZUZhY3RvcigpKTsKKwor
ICAgIGlmICghY2hhbmdlZFByb3BlcnRpZXNPbmx5IHx8IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpJbnNldENsaXBMYXllcikpCisgICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2xpcC1pbnNldC1sYXllciIsIHN0YXRpY19jYXN0PEdyYXBo
aWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4obm9kZS5pbnNldENsaXBMYXllcigpKSk7CisKKyAg
ICBpZiAoIWNoYW5nZWRQcm9wZXJ0aWVzT25seSB8fCBub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShT
Y3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Q29udGVudFNoYWRvd0xheWVyKSkKKyAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJjb250ZW50LXNoYWRvdy1sYXllciIsIHN0YXRpY19jYXN0
PEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4obm9kZS5jb250ZW50U2hhZG93TGF5ZXIo
KSkpOworCisgICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllc09ubHkgfHwgbm9kZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkhlYWRlckxheWVyKSkK
KyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJoZWFkZXItbGF5ZXIiLCBzdGF0aWNfY2FzdDxHcmFw
aGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+KG5vZGUuaGVhZGVyTGF5ZXIoKSkpOworCisgICAg
aWYgKCFjaGFuZ2VkUHJvcGVydGllc09ubHkgfHwgbm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkZvb3RlckxheWVyKSkKKyAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJmb290ZXItbGF5ZXIiLCBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyOjpQ
bGF0Zm9ybUxheWVySUQ+KG5vZGUuZm9vdGVyTGF5ZXIoKSkpOworfQorICAgIAorc3RhdGljIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9s
bGluZ05vZGUmIG5vZGUsIGJvb2wgY2hhbmdlZFByb3BlcnRpZXNPbmx5KQoreworICAgIGR1bXAo
dHMsIHN0YXRpY19jYXN0PGNvbnN0IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSY+KG5vZGUp
LCBjaGFuZ2VkUHJvcGVydGllc09ubHkpOworfQorCitzdGF0aWMgdm9pZCBkdW1wKFRleHRTdHJl
YW0mIHRzLCBjb25zdCBTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZSYgbm9kZSwgYm9vbCBjaGFuZ2Vk
UHJvcGVydGllc09ubHkpCit7CisgICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllc09ubHkgfHwgbm9k
ZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6OlZpZXdwb3J0Q29u
c3RyYWludHMpKQorICAgICAgICB0cyA8PCBub2RlLnZpZXdwb3J0Q29uc3RyYWludHMoKTsKK30K
Kworc3RhdGljIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsaW5nU3RhdGVT
dGlja3lOb2RlJiBub2RlLCBib29sIGNoYW5nZWRQcm9wZXJ0aWVzT25seSkKK3sKKyAgICBpZiAo
IWNoYW5nZWRQcm9wZXJ0aWVzT25seSB8fCBub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxp
bmdTdGF0ZUZpeGVkTm9kZTo6Vmlld3BvcnRDb25zdHJhaW50cykpCisgICAgICAgIHRzIDw8IG5v
ZGUudmlld3BvcnRDb25zdHJhaW50cygpOworfQorCitzdGF0aWMgdm9pZCBkdW1wKFRleHRTdHJl
YW0mIHRzLCBjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIG5vZGUsIGJvb2wgY2hhbmdlZFByb3Bl
cnRpZXNPbmx5KQoreworICAgIHRzLmR1bXBQcm9wZXJ0eSgidHlwZSIsIG5vZGUubm9kZVR5cGUo
KSk7CisKKyAgICBpZiAoIWNoYW5nZWRQcm9wZXJ0aWVzT25seSB8fCBub2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkKKyAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJsYXllciIsIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5
ZXJJRD4obm9kZS5sYXllcigpKSk7CisgICAgCisgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKCkp
IHsKKyAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nTm9kZToKKyAgICAgICAgZHVtcCh0cywgZG93bmNh
c3Q8U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU+KG5vZGUpLCBjaGFuZ2VkUHJvcGVy
dGllc09ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE92ZXJmbG93U2Nyb2xsaW5nTm9k
ZToKKyAgICAgICAgZHVtcCh0cywgZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9s
bGluZ05vZGU+KG5vZGUpLCBjaGFuZ2VkUHJvcGVydGllc09ubHkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZpeGVkTm9kZToKKyAgICAgICAgZHVtcCh0cywgZG93bmNhc3Q8U2Nyb2xsaW5n
U3RhdGVGaXhlZE5vZGU+KG5vZGUpLCBjaGFuZ2VkUHJvcGVydGllc09ubHkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFN0aWNreU5vZGU6CisgICAgICAgIGR1bXAodHMsIGRvd25jYXN0PFNj
cm9sbGluZ1N0YXRlU3RpY2t5Tm9kZT4obm9kZSksIGNoYW5nZWRQcm9wZXJ0aWVzT25seSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgcmVjdXJzaXZlRHVtcE5vZGVz
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIG5vZGUsIGJvb2wgY2hh
bmdlZFByb3BlcnRpZXNPbmx5KQoreworICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAo
dHMpOworICAgIHRzIDw8ICJub2RlICIgPDwgbm9kZS5zY3JvbGxpbmdOb2RlSUQoKTsKKyAgICBk
dW1wKHRzLCBub2RlLCBjaGFuZ2VkUHJvcGVydGllc09ubHkpOworCisgICAgaWYgKG5vZGUuY2hp
bGRyZW4oKSkgeworICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAg
ICAgICAgdHMgPDwgImNoaWxkcmVuIjsKKworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkTm9kZSA6
ICpub2RlLmNoaWxkcmVuKCkpCisgICAgICAgICAgICByZWN1cnNpdmVEdW1wTm9kZXModHMsICpj
aGlsZE5vZGUsIGNoYW5nZWRQcm9wZXJ0aWVzT25seSk7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxpbmdTdGF0ZVRyZWUmIHN0YXRlVHJl
ZSwgYm9vbCBjaGFuZ2VkUHJvcGVydGllc09ubHkpCit7CisgICAgdHMuZHVtcFByb3BlcnR5KCJo
YXMgY2hhbmdlZCBwcm9wZXJ0aWVzIiwgc3RhdGVUcmVlLmhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkp
OworICAgIHRzLmR1bXBQcm9wZXJ0eSgiaGFzIG5ldyByb290IG5vZGUiLCBzdGF0ZVRyZWUuaGFz
TmV3Um9vdFN0YXRlTm9kZSgpKTsKKworICAgIGlmIChzdGF0ZVRyZWUucm9vdFN0YXRlTm9kZSgp
KQorICAgICAgICByZWN1cnNpdmVEdW1wTm9kZXModHMsICpzdGF0ZVRyZWUucm9vdFN0YXRlTm9k
ZSgpLCBjaGFuZ2VkUHJvcGVydGllc09ubHkpOworCisgICAgaWYgKCFzdGF0ZVRyZWUucmVtb3Zl
ZE5vZGVzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIFZlY3RvcjxTY3JvbGxpbmdOb2RlSUQ+IHJl
bW92ZWROb2RlczsKKyAgICAgICAgY29weVRvVmVjdG9yKHN0YXRlVHJlZS5yZW1vdmVkTm9kZXMo
KSwgcmVtb3ZlZE5vZGVzKTsKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5PFZlY3RvcjxTY3JvbGxp
bmdOb2RlSUQ+PigicmVtb3ZlZC1ub2RlcyIsIHJlbW92ZWROb2Rlcyk7CisgICAgfQorfQorCitX
VEY6OkNTdHJpbmcgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbjo6ZGVzY3Jp
cHRpb24oKSBjb25zdAoreworICAgIFRleHRTdHJlYW0gdHM7CisKKyAgICB0cy5zdGFydEdyb3Vw
KCk7CisgICAgdHMgPDwgInNjcm9sbGluZyBzdGF0ZSB0cmVlIjsKKworICAgIGlmIChtX3Njcm9s
bGluZ1N0YXRlVHJlZSkgeworICAgICAgICBpZiAoIW1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXND
aGFuZ2VkUHJvcGVydGllcygpKQorICAgICAgICAgICAgdHMgPDwgIiAtIG5vIGNoYW5nZXMiOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBXZWJLaXQ6OmR1bXAodHMsICptX3Njcm9sbGluZ1N0
YXRlVHJlZS5nZXQoKSwgdHJ1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIHRzIDw8ICIgLSBub25l
IjsKKworICAgIHRzLmVuZEdyb3VwKCk7CisKKyAgICByZXR1cm4gdHMucmVsZWFzZSgpLnV0Zjgo
KTsKK30KKwordm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uOjpkdW1w
KCkgY29uc3QKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgZGVzY3JpcHRpb24oKS5kYXRh
KCkpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZWxzZSAvLyAhRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbjo6ZW5jb2RlKElQQzo6RW5jb2RlciYpIGNv
bnN0Cit7Cit9CisKK2Jvb2wgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbjo6
ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1v
dGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhiOWIwYmY4NzQ3MTFkNTQzNzJiYjUxMmVhMjc4NmQ2Nzg0NmI0M2QKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb25faAorI2Rl
ZmluZSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uX2gKKworI2luY2x1ZGUg
PFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVUcmVlLmg+CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3Mg
RGVjb2RlcjsKK2NsYXNzIEVuY29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uIHsKK3B1YmxpYzoKKyNpZiBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAgIHZvaWQgc2V0U3RhdGVUcmVlVG9FbmNvZGUoc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZT4gc3RhdGVUcmVlKSB7IG1f
c2Nyb2xsaW5nU3RhdGVUcmVlID0gV1RGTW92ZShzdGF0ZVRyZWUpOyB9CisgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZT4mIHNjcm9sbGluZ1N0YXRlVHJlZSgp
IHsgcmV0dXJuIG1fc2Nyb2xsaW5nU3RhdGVUcmVlOyB9CisjZW5kaWYgLy8gRU5BQkxFKEFTWU5D
X1NDUk9MTElORykKKworICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OworICAg
IHN0YXRpYyBib29sIGRlY29kZShJUEM6OkRlY29kZXImLCBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvclRyYW5zYWN0aW9uJik7CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJM
RUQKKyAgICBXVEY6OkNTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKKyAgICB2b2lkIGR1bXAo
KSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcp
CisgICAgYm9vbCBkZWNvZGUoSVBDOjpEZWNvZGVyJik7CisgICAgCisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZT4gbV9zY3JvbGxpbmdTdGF0ZVRyZWU7Cisj
ZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TY3Jv
bGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMWIyMDEzMDY2MTZkNGFiOWQ4NDc3YjI2ODhkOThlZDc2
NDcwY2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9TaGFyZWQvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJh
bnNhY3Rpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjUyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclRyYW5zYWN0aW9uLmgiCi0KLSNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgotI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZVRyZWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi0jaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKLQotbmFtZXNwYWNlIElQQyB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8U2Nyb2xsaW5nU3RhdGVOb2RlPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29k
ZXImLCBjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUo
RGVjb2RlciYsIFNjcm9sbGluZ1N0YXRlTm9kZSYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+IHsKLSAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSYp
OwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlJik7Ci19OwotICAgIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxTY3Jv
bGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiwgY29uc3QgU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGUmKTsKLSAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdO
b2RlJik7Ci19OwotICAgIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxTY3JvbGxp
bmdTdGF0ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiwgY29uc3QgU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUmKTsKLSAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlJik7Ci19OwotICAgIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxT
Y3JvbGxpbmdTdGF0ZUZpeGVkTm9kZT4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiwgY29uc3QgU2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoRGVjb2RlciYsIFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlJik7Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZT4gewotICAgIHN0
YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgU2Nyb2xsaW5nU3RhdGVTdGlja3lOb2Rl
Jik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBTY3JvbGxpbmdTdGF0ZVN0aWNr
eU5vZGUmKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElQQwotCi11c2luZyBuYW1lc3BhY2UgSVBD
OwotCi12b2lkIEFyZ3VtZW50Q29kZXI8U2Nyb2xsaW5nU3RhdGVOb2RlPjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgbm9kZSkKLXsKLSAgICBlbmNv
ZGVyLmVuY29kZUVudW0obm9kZS5ub2RlVHlwZSgpKTsKLSAgICBlbmNvZGVyIDw8IG5vZGUuc2Ny
b2xsaW5nTm9kZUlEKCk7Ci0gICAgZW5jb2RlciA8PCBub2RlLnBhcmVudE5vZGVJRCgpOwotICAg
IGVuY29kZXIgPDwgbm9kZS5jaGFuZ2VkUHJvcGVydGllcygpOwotICAgIAotICAgIGlmIChub2Rl
Lmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkKLSAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVy
SUQ+KG5vZGUubGF5ZXIoKSk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxTY3JvbGxpbmdTdGF0
ZU5vZGU+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU2Nyb2xsaW5nU3RhdGVOb2RlJiBub2Rl
KQotewotICAgIC8vIG5vZGVUeXBlLCBzY3JvbGxpbmdOb2RlSUQgYW5kIHBhcmVudE5vZGVJRCBo
YXZlIGFscmVhZHkgYmVlbiBkZWNvZGVkIGJ5IHRoZSBjYWxsZXIgaW4gb3JkZXIgdG8gY3JlYXRl
IHRoZSBub2RlLgotICAgIFNjcm9sbGluZ1N0YXRlTm9kZTo6Q2hhbmdlZFByb3BlcnRpZXMgY2hh
bmdlZFByb3BlcnRpZXM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShjaGFuZ2VkUHJvcGVydGll
cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG5vZGUuc2V0Q2hhbmdlZFByb3BlcnRp
ZXMoY2hhbmdlZFByb3BlcnRpZXMpOwotICAgIGlmIChub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShT
Y3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkgewotICAgICAgICBHcmFwaGljc0xheWVy
OjpQbGF0Zm9ybUxheWVySUQgbGF5ZXJJRDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShs
YXllcklEKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbm9kZS5zZXRMYXll
cihsYXllcklEKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotI2RlZmluZSBTQ1JP
TExJTkdfTk9ERV9FTkNPREUocHJvcGVydHksIGdldHRlcikgXAotICAgIGlmIChub2RlLmhhc0No
YW5nZWRQcm9wZXJ0eShwcm9wZXJ0eSkpIFwKLSAgICAgICAgZW5jb2RlciA8PCBub2RlLmdldHRl
cigpOwotCi0jZGVmaW5lIFNDUk9MTElOR19OT0RFX0VOQ09ERV9FTlVNKHByb3BlcnR5LCBnZXR0
ZXIpIFwKLSAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkocHJvcGVydHkpKSBcCi0gICAg
ICAgIGVuY29kZXIuZW5jb2RlRW51bShub2RlLmdldHRlcigpKTsKLQotdm9pZCBBcmd1bWVudENv
ZGVyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmIG5vZGUpCi17Ci0gICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDxjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmPihub2RlKTsKLSAgICAK
LSAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpT
Y3JvbGxhYmxlQXJlYVNpemUsIHNjcm9sbGFibGVBcmVhU2l6ZSkKLSAgICBTQ1JPTExJTkdfTk9E
RV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6ZSwg
dG90YWxDb250ZW50c1NpemUpCi0gICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6UmVhY2hhYmxlQ29udGVudHNTaXplLCByZWFjaGFibGVDb250ZW50
c1NpemUpCi0gICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6U2Nyb2xsUG9zaXRpb24sIHNjcm9sbFBvc2l0aW9uKQotICAgIFNDUk9MTElOR19OT0RF
X0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbE9yaWdpbiwgc2Nyb2xs
T3JpZ2luKQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgU0NST0xMSU5HX05PREVf
RU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNuYXBPZmZzZXRz
LCBob3Jpem9udGFsU25hcE9mZnNldHMpCi0gICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTbmFwT2Zmc2V0cywgdmVydGljYWxTbmFw
T2Zmc2V0cykKLSAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlOjpIb3Jpem9udGFsU25hcE9mZnNldFJhbmdlcywgaG9yaXpvbnRhbFNuYXBPZmZzZXRS
YW5nZXMpCi0gICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6VmVydGljYWxTbmFwT2Zmc2V0UmFuZ2VzLCB2ZXJ0aWNhbFNuYXBPZmZzZXRSYW5nZXMp
Ci0gICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
Q3VycmVudEhvcml6b250YWxTbmFwT2Zmc2V0SW5kZXgsIGN1cnJlbnRIb3Jpem9udGFsU25hcFBv
aW50SW5kZXgpCi0gICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6Q3VycmVudFZlcnRpY2FsU25hcE9mZnNldEluZGV4LCBjdXJyZW50VmVydGljYWxT
bmFwUG9pbnRJbmRleCkKLSNlbmRpZgotICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGFibGVBcmVhUGFyYW1zLCBzY3JvbGxhYmxlQXJl
YVBhcmFtZXRlcnMpCi0gICAgU0NST0xMSU5HX05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24sIHJlcXVlc3RlZFNjcm9sbFBvc2l0
aW9uKQotICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uLCByZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvblJlcHJl
c2VudHNQcm9ncmFtbWF0aWNTY3JvbGwpCi0KLSAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKQot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5
ZXJJRD4obm9kZS5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSk7Ci19Ci0KLXZvaWQgQXJndW1lbnRD
b2RlcjxTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZT46OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZSYgbm9kZSkKLXsK
LSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSY+KG5vZGUpOwotICAgIAotICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdT
dGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6RnJhbWVTY2FsZUZhY3RvciwgZnJhbWVTY2FsZUZhY3Rv
cikKLSAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGlu
Z05vZGU6OkV2ZW50VHJhY2tpbmdSZWdpb24sIGV2ZW50VHJhY2tpbmdSZWdpb25zKQotICAgIFND
Uk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6UmVh
c29uc0ZvclN5bmNocm9ub3VzU2Nyb2xsaW5nLCBzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMp
Ci0gICAgU0NST0xMSU5HX05PREVfRU5DT0RFX0VOVU0oU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9s
bGluZ05vZGU6OkJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cywgc2Nyb2xsQmVoYXZpb3JGb3JGaXhl
ZEVsZW1lbnRzKQotICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1l
U2Nyb2xsaW5nTm9kZTo6SGVhZGVySGVpZ2h0LCBoZWFkZXJIZWlnaHQpCi0gICAgU0NST0xMSU5H
X05PREVfRU5DT0RFKFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpGb290ZXJIZWln
aHQsIGZvb3RlckhlaWdodCkKLSAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3Rh
dGVGcmFtZVNjcm9sbGluZ05vZGU6OlRvcENvbnRlbnRJbnNldCwgdG9wQ29udGVudEluc2V0KQot
ICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9k
ZTo6Rml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSwgZml4ZWRFbGVtZW50c0xheW91
dFJlbGF0aXZlVG9GcmFtZSkKLSAgICBTQ1JPTExJTkdfTk9ERV9FTkNPREUoU2Nyb2xsaW5nU3Rh
dGVGcmFtZVNjcm9sbGluZ05vZGU6OlZpc3VhbFZpZXdwb3J0RW5hYmxlZCwgdmlzdWFsVmlld3Bv
cnRFbmFibGVkKQotICAgIFNDUk9MTElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1l
U2Nyb2xsaW5nTm9kZTo6TGF5b3V0Vmlld3BvcnQsIGxheW91dFZpZXdwb3J0KQotICAgIFNDUk9M
TElOR19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6TWluTGF5
b3V0Vmlld3BvcnRPcmlnaW4sIG1pbkxheW91dFZpZXdwb3J0T3JpZ2luKQotICAgIFNDUk9MTElO
R19OT0RFX0VOQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6TWF4TGF5b3V0
Vmlld3BvcnRPcmlnaW4sIG1heExheW91dFZpZXdwb3J0T3JpZ2luKQotCi0gICAgaWYgKG5vZGUu
aGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpDb3Vu
dGVyU2Nyb2xsaW5nTGF5ZXIpKQotICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PEdyYXBo
aWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4obm9kZS5jb3VudGVyU2Nyb2xsaW5nTGF5ZXIoKSk7
Ci0KLSAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNj
cm9sbGluZ05vZGU6Okluc2V0Q2xpcExheWVyKSkKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDxHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+KG5vZGUuaW5zZXRDbGlwTGF5ZXIo
KSk7Ci0KLSAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFt
ZVNjcm9sbGluZ05vZGU6OkNvbnRlbnRTaGFkb3dMYXllcikpCi0gICAgICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPihub2RlLmNvbnRlbnRT
aGFkb3dMYXllcigpKTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlT3Zl
cmZsb3dTY3JvbGxpbmdOb2RlPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFNjcm9s
bGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlJiBub2RlKQotewotICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJj4obm9kZSk7Ci19
Ci0KLSNkZWZpbmUgU0NST0xMSU5HX05PREVfREVDT0RFKHByb3BlcnR5LCB0eXBlLCBzZXR0ZXIp
IFwKLSAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkocHJvcGVydHkpKSB7IFwKLSAgICAg
ICAgdHlwZSBkZWNvZGVkVmFsdWU7IFwKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkZWNv
ZGVkVmFsdWUpKSBcCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKLSAgICAgICAgbm9kZS5z
ZXR0ZXIoZGVjb2RlZFZhbHVlKTsgXAotICAgIH0KLQotI2RlZmluZSBTQ1JPTExJTkdfTk9ERV9E
RUNPREVfRU5VTShwcm9wZXJ0eSwgdHlwZSwgc2V0dGVyKSBcCi0gICAgaWYgKG5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KHByb3BlcnR5KSkgeyBcCi0gICAgICAgIHR5cGUgZGVjb2RlZFZhbHVlOyBc
Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKGRlY29kZWRWYWx1ZSkpIFwKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgXAotICAgICAgICBub2RlLnNldHRlcihkZWNvZGVkVmFsdWUp
OyBcCi0gICAgfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZSYgbm9kZSkKLXsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpY19jYXN0PFNjcm9sbGlu
Z1N0YXRlTm9kZSY+KG5vZGUpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU0NST0xM
SU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsYWJsZUFy
ZWFTaXplLCBGbG9hdFNpemUsIHNldFNjcm9sbGFibGVBcmVhU2l6ZSk7Ci0gICAgU0NST0xMSU5H
X05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VG90YWxDb250ZW50c1Np
emUsIEZsb2F0U2l6ZSwgc2V0VG90YWxDb250ZW50c1NpemUpOwotICAgIFNDUk9MTElOR19OT0RF
X0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6
ZSwgRmxvYXRTaXplLCBzZXRSZWFjaGFibGVDb250ZW50c1NpemUpOwotICAgIFNDUk9MTElOR19O
T0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbFBvc2l0aW9uLCBG
bG9hdFBvaW50LCBzZXRTY3JvbGxQb3NpdGlvbik7Ci0gICAgU0NST0xMSU5HX05PREVfREVDT0RF
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2luLCBJbnRQb2ludCwgc2V0
U2Nyb2xsT3JpZ2luKTsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIFNDUk9MTElO
R19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTbmFw
T2Zmc2V0cywgVmVjdG9yPGZsb2F0Piwgc2V0SG9yaXpvbnRhbFNuYXBPZmZzZXRzKTsKLSAgICBT
Q1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWZXJ0aWNh
bFNuYXBPZmZzZXRzLCBWZWN0b3I8ZmxvYXQ+LCBzZXRWZXJ0aWNhbFNuYXBPZmZzZXRzKTsKLSAg
ICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpIb3Jp
em9udGFsU25hcE9mZnNldFJhbmdlcywgVmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPGZsb2F0Pj4s
IHNldEhvcml6b250YWxTbmFwT2Zmc2V0UmFuZ2VzKQotICAgIFNDUk9MTElOR19OT0RFX0RFQ09E
RShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU25hcE9mZnNldFJhbmdlcywg
VmVjdG9yPFNjcm9sbE9mZnNldFJhbmdlPGZsb2F0Pj4sIHNldFZlcnRpY2FsU25hcE9mZnNldFJh
bmdlcykKLSAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpDdXJyZW50SG9yaXpvbnRhbFNuYXBPZmZzZXRJbmRleCwgdW5zaWduZWQsIHNldEN1cnJl
bnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgpOwotICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OkN1cnJlbnRWZXJ0aWNhbFNuYXBPZmZzZXRJbmRl
eCwgdW5zaWduZWQsIHNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KTsKLSNlbmRpZgot
ICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNj
cm9sbGFibGVBcmVhUGFyYW1zLCBTY3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMsIHNldFNjcm9sbGFi
bGVBcmVhUGFyYW1ldGVycyk7Ci0gICAgCi0gICAgaWYgKG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24pKSB7
Ci0gICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb247Ci0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoc2Nyb2xsUG9zaXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIGJvb2wgcmVwcmVzZW50c1Byb2dyYW1tYXRpY1Njcm9sbDsKLSAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShyZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBub2RlLnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uLCByZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKTsKLSAgICB9Ci0K
LSAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXI6OlBs
YXRmb3JtTGF5ZXJJRCBsYXllcklEOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVy
SUQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBub2RlLnNldFNjcm9sbGVk
Q29udGVudHNMYXllcihsYXllcklEKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlJiBu
b2RlKQotewotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlJj4obm9kZSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBT
Q1JPTExJTkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkZy
YW1lU2NhbGVGYWN0b3IsIGZsb2F0LCBzZXRGcmFtZVNjYWxlRmFjdG9yKTsKLSAgICBTQ1JPTExJ
TkdfTk9ERV9ERUNPREUoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkV2ZW50VHJh
Y2tpbmdSZWdpb24sIEV2ZW50VHJhY2tpbmdSZWdpb25zLCBzZXRFdmVudFRyYWNraW5nUmVnaW9u
cyk7Ci0gICAgU0NST0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxp
bmdOb2RlOjpSZWFzb25zRm9yU3luY2hyb25vdXNTY3JvbGxpbmcsIFN5bmNocm9ub3VzU2Nyb2xs
aW5nUmVhc29ucywgc2V0U3luY2hyb25vdXNTY3JvbGxpbmdSZWFzb25zKTsKLSAgICBTQ1JPTExJ
TkdfTk9ERV9ERUNPREVfRU5VTShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6QmVo
YXZpb3JGb3JGaXhlZEVsZW1lbnRzLCBTY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVudHMsIHNl
dFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cyk7Ci0KLSAgICBTQ1JPTExJTkdfTk9ERV9E
RUNPREUoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkhlYWRlckhlaWdodCwgaW50
LCBzZXRIZWFkZXJIZWlnaHQpOwotICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdT
dGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Rm9vdGVySGVpZ2h0LCBpbnQsIHNldEZvb3RlckhlaWdo
dCk7Ci0gICAgU0NST0xMSU5HX05PREVfREVDT0RFKFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxp
bmdOb2RlOjpUb3BDb250ZW50SW5zZXQsIGZsb2F0LCBzZXRUb3BDb250ZW50SW5zZXQpOwotICAg
IFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6
Rml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSwgYm9vbCwgc2V0Rml4ZWRFbGVtZW50
c0xheW91dFJlbGF0aXZlVG9GcmFtZSk7Ci0gICAgU0NST0xMSU5HX05PREVfREVDT0RFKFNjcm9s
bGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpWaXN1YWxWaWV3cG9ydEVuYWJsZWQsIGJvb2ws
IHNldFZpc3VhbFZpZXdwb3J0RW5hYmxlZCkKLSAgICBTQ1JPTExJTkdfTk9ERV9ERUNPREUoU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkxheW91dFZpZXdwb3J0LCBGbG9hdFJlY3Qs
IHNldExheW91dFZpZXdwb3J0KQotICAgIFNDUk9MTElOR19OT0RFX0RFQ09ERShTY3JvbGxpbmdT
dGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6TWluTGF5b3V0Vmlld3BvcnRPcmlnaW4sIEZsb2F0UG9p
bnQsIHNldE1pbkxheW91dFZpZXdwb3J0T3JpZ2luKQotICAgIFNDUk9MTElOR19OT0RFX0RFQ09E
RShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6TWF4TGF5b3V0Vmlld3BvcnRPcmln
aW4sIEZsb2F0UG9pbnQsIHNldE1heExheW91dFZpZXdwb3J0T3JpZ2luKQotCi0gICAgaWYgKG5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpD
b3VudGVyU2Nyb2xsaW5nTGF5ZXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3Jt
TGF5ZXJJRCBsYXllcklEOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVySUQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBub2RlLnNldENvdW50ZXJTY3JvbGxp
bmdMYXllcihsYXllcklEKTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVy
dHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6Okluc2V0Q2xpcExheWVyKSkgewot
ICAgICAgICBHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbGF5ZXJJRDsKLSAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklEKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgbm9kZS5zZXRJbnNldENsaXBMYXllcihsYXllcklEKTsKLSAgICB9Ci0KLSAgICBp
ZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05v
ZGU6OkNvbnRlbnRTaGFkb3dMYXllcikpIHsKLSAgICAgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZv
cm1MYXllcklEIGxheWVySUQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGF5ZXJJRCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG5vZGUuc2V0Q29udGVudFNoYWRv
d0xheWVyKGxheWVySUQpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFy
Z3VtZW50Q29kZXI8U2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGU+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbGluZ05vZGUmIG5v
ZGUpCi17Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0aWNfY2FzdDxTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUmPihub2RlKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8U2Nyb2xsaW5nU3RhdGVGaXhlZE5v
ZGU+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU2Nyb2xsaW5nU3RhdGVGaXhlZE5v
ZGUmIG5vZGUpCi17Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBTY3JvbGxpbmdT
dGF0ZU5vZGUmPihub2RlKTsKLSAgICAKLSAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHko
U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU6OlZpZXdwb3J0Q29uc3RyYWludHMpKQotICAgICAgICBl
bmNvZGVyIDw8IG5vZGUudmlld3BvcnRDb25zdHJhaW50cygpOwotfQotCi1ib29sIEFyZ3VtZW50
Q29kZXI8U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGU+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
U2Nyb2xsaW5nU3RhdGVGaXhlZE5vZGUmIG5vZGUpCi17Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdGF0aWNfY2FzdDxTY3JvbGxpbmdTdGF0ZU5vZGUmPihub2RlKSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmIChub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZUZpeGVkTm9kZTo6Vmlld3BvcnRDb25zdHJhaW50cykpIHsKLSAgICAgICAgRml4ZWRQb3NpdGlv
blZpZXdwb3J0Q29uc3RyYWludHMgZGVjb2RlZFZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGRlY29kZWRWYWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IG5vZGUudXBkYXRlQ29uc3RyYWludHMoZGVjb2RlZFZhbHVlKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9k
ZT46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTY3JvbGxpbmdTdGF0ZVN0aWNreU5v
ZGUmIG5vZGUpCi17Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBTY3JvbGxpbmdT
dGF0ZU5vZGUmPihub2RlKTsKLSAgICAKLSAgICBpZiAobm9kZS5oYXNDaGFuZ2VkUHJvcGVydHko
U2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlOjpWaWV3cG9ydENvbnN0cmFpbnRzKSkKLSAgICAgICAg
ZW5jb2RlciA8PCBub2RlLnZpZXdwb3J0Q29uc3RyYWludHMoKTsKLX0KLQotYm9vbCBBcmd1bWVu
dENvZGVyPFNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
LCBTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGUmIG5vZGUpCi17Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShzdGF0aWNfY2FzdDxTY3JvbGxpbmdTdGF0ZU5vZGUmPihub2RlKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdT
dGF0ZVN0aWNreU5vZGU6OlZpZXdwb3J0Q29uc3RyYWludHMpKSB7Ci0gICAgICAgIFN0aWNreVBv
c2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyBkZWNvZGVkVmFsdWU7Ci0gICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoZGVjb2RlZFZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgbm9kZS51cGRhdGVDb25zdHJhaW50cyhkZWNvZGVkVmFsdWUpOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIHZvaWQgZW5j
b2RlTm9kZUFuZERlc2NlbmRhbnRzKElQQzo6RW5jb2RlciYgZW5jb2RlciwgY29uc3QgU2Nyb2xs
aW5nU3RhdGVOb2RlJiBzdGF0ZU5vZGUsIGludCYgZW5jb2RlZE5vZGVDb3VudCkKLXsKLSAgICAr
K2VuY29kZWROb2RlQ291bnQ7Ci0KLSAgICBzd2l0Y2ggKHN0YXRlTm9kZS5ub2RlVHlwZSgpKSB7
Ci0gICAgY2FzZSBGcmFtZVNjcm9sbGluZ05vZGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU+KHN0YXRlTm9kZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgT3ZlcmZsb3dTY3JvbGxpbmdOb2RlOgotICAgICAgICBlbmNvZGVy
IDw8IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPihzdGF0ZU5v
ZGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpeGVkTm9kZToKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZT4oc3RhdGVOb2RlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBTdGlja3lOb2RlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PFNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZT4oc3RhdGVOb2RlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgaWYgKCFzdGF0ZU5vZGUuY2hpbGRyZW4oKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6ICpzdGF0ZU5vZGUuY2hpbGRyZW4oKSkK
LSAgICAgICAgZW5jb2RlTm9kZUFuZERlc2NlbmRhbnRzKGVuY29kZXIsICpjaGlsZC5nZXQoKSwg
ZW5jb2RlZE5vZGVDb3VudCk7Ci19Ci0KLXZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JU
cmFuc2FjdGlvbjo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBp
bnQgbnVtTm9kZXMgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZSA/IG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5ub2RlQ291bnQoKSA6IDA7Ci0gICAgZW5jb2RlciA8PCBudW1Ob2RlczsKLSAgICAKLSAgICBi
b29sIGhhc05ld1Jvb3ROb2RlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUgPyBtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+aGFzTmV3Um9vdFN0YXRlTm9kZSgpIDogZmFsc2U7Ci0gICAgZW5jb2RlciA8PCBo
YXNOZXdSb290Tm9kZTsKLQotICAgIGlmIChtX3Njcm9sbGluZ1N0YXRlVHJlZSkgewotICAgICAg
ICBlbmNvZGVyIDw8IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5oYXNDaGFuZ2VkUHJvcGVydGllcygp
OwotCi0gICAgICAgIGludCBudW1Ob2Rlc0VuY29kZWQgPSAwOwotICAgICAgICBpZiAoY29uc3Qg
U2Nyb2xsaW5nU3RhdGVOb2RlKiByb290Tm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290
U3RhdGVOb2RlKCkpCi0gICAgICAgICAgICBlbmNvZGVOb2RlQW5kRGVzY2VuZGFudHMoZW5jb2Rl
ciwgKnJvb3ROb2RlLCBudW1Ob2Rlc0VuY29kZWQpOwotCi0gICAgICAgIEFTU0VSVF9VTlVTRUQo
bnVtTm9kZXNFbmNvZGVkLCBudW1Ob2Rlc0VuY29kZWQgPT0gbnVtTm9kZXMpOwotICAgICAgICBl
bmNvZGVyIDw8IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVkTm9kZXMoKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgZW5jb2RlciA8PCBWZWN0b3I8U2Nyb2xsaW5nTm9kZUlEPigpOwotfQotCi1i
b29sIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb246OmRlY29kZShJUEM6OkRl
Y29kZXImIGRlY29kZXIsIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uKQotewotICAgIHJldHVybiB0cmFuc2FjdGlvbi5kZWNvZGUoZGVjb2Rlcik7Ci19
Ci0KLWJvb2wgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbjo6ZGVjb2RlKElQ
Qzo6RGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBpbnQgbnVtTm9kZXM7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShudW1Ob2RlcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wg
aGFzTmV3Um9vdE5vZGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNOZXdSb290Tm9kZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZSA9
IHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsaW5nU3RhdGVUcmVlPigpOwotCi0gICAgYm9vbCBoYXND
aGFuZ2VkUHJvcGVydGllczsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0NoYW5nZWRQcm9w
ZXJ0aWVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKGhhc0NoYW5nZWRQcm9wZXJ0aWVzKTsKLQotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtTm9kZXM7ICsraSkgewotICAgICAgICBTY3JvbGxpbmdO
b2RlVHlwZSBub2RlVHlwZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0obm9kZVR5
cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFNjcm9sbGluZ05vZGVJ
RCBub2RlSUQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobm9kZUlEKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBTY3JvbGxpbmdOb2RlSUQgcGFyZW50Tm9kZUlE
OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmVudE5vZGVJRCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmF0dGFjaE5v
ZGUobm9kZVR5cGUsIG5vZGVJRCwgcGFyZW50Tm9kZUlEKTsKLSAgICAgICAgU2Nyb2xsaW5nU3Rh
dGVOb2RlKiBuZXdOb2RlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnN0YXRlTm9kZUZvcklEKG5v
ZGVJRCk7Ci0gICAgICAgIEFTU0VSVChuZXdOb2RlKTsKLSAgICAgICAgQVNTRVJUKCFwYXJlbnRO
b2RlSUQgfHwgbmV3Tm9kZS0+cGFyZW50KCkpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChu
b2RlVHlwZSkgewotICAgICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nTm9kZToKLSAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGlu
Z05vZGU+KCpuZXdOb2RlKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3ZlcmZsb3dTY3JvbGxpbmdOb2RlOgotICAgICAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZU92ZXJmbG93
U2Nyb2xsaW5nTm9kZT4oKm5ld05vZGUpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaXhlZE5vZGU6Ci0gICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlPigq
bmV3Tm9kZSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFN0aWNreU5vZGU6Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZT4oKm5ld05vZGUpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRIYXNOZXdSb290U3RhdGVO
b2RlKGhhc05ld1Jvb3ROb2RlKTsKLQotICAgIC8vIFJlbW92ZWQgbm9kZXMKLSAgICBIYXNoU2V0
PFNjcm9sbGluZ05vZGVJRD4gcmVtb3ZlZE5vZGVzOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVtb3ZlZE5vZGVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChyZW1v
dmVkTm9kZXMuc2l6ZSgpKQotICAgICAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0UmVtb3Zl
ZE5vZGVzKHJlbW92ZWROb2Rlcyk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotI2lmICFkZWZp
bmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAotCi1zdGF0aWMgdm9pZCBkdW1wKFRleHRTdHJl
YW0mIHRzLCBjb25zdCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUmIG5vZGUsIGJvb2wgY2hh
bmdlZFByb3BlcnRpZXNPbmx5KQotewotICAgIGlmICghY2hhbmdlZFByb3BlcnRpZXNPbmx5IHx8
IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Ny
b2xsYWJsZUFyZWFTaXplKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzY3JvbGxhYmxlLWFy
ZWEtc2l6ZSIsIG5vZGUuc2Nyb2xsYWJsZUFyZWFTaXplKCkpOwotCi0gICAgaWYgKCFjaGFuZ2Vk
UHJvcGVydGllc09ubHkgfHwgbm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlOjpUb3RhbENvbnRlbnRzU2l6ZSkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgidG90YWwtY29udGVudHMtc2l6ZSIsIG5vZGUudG90YWxDb250ZW50c1NpemUoKSk7Ci0KLSAg
ICBpZiAoIWNoYW5nZWRQcm9wZXJ0aWVzT25seSB8fCBub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlYWNoYWJsZUNvbnRlbnRzU2l6ZSkpCi0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVhY2hhYmxlLWNvbnRlbnRzLXNpemUiLCBub2RlLnJlYWNo
YWJsZUNvbnRlbnRzU2l6ZSgpKTsKLQotICAgIGlmICghY2hhbmdlZFByb3BlcnRpZXNPbmx5IHx8
IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Ny
b2xsUG9zaXRpb24pKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNjcm9sbC1wb3NpdGlvbiIs
IG5vZGUuc2Nyb2xsUG9zaXRpb24oKSk7Ci0KLSAgICBpZiAoIWNoYW5nZWRQcm9wZXJ0aWVzT25s
eSB8fCBub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlNjcm9sbE9yaWdpbikpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2Nyb2xsLW9yaWdpbiIs
IG5vZGUuc2Nyb2xsT3JpZ2luKCkpOwotCi0gICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllc09ubHkg
fHwgbm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpS
ZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikpIHsKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJyZXF1
ZXN0ZWQtc2Nyb2xsLXBvc2l0aW9uIiwgbm9kZS5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbigpKTsK
LSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJyZXF1ZXN0ZWQtc2Nyb2xsLXBvc2l0aW9uLWlzLXBy
b2dyYW1hdGljIiwgbm9kZS5yZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvblJlcHJlc2VudHNQcm9ncmFt
bWF0aWNTY3JvbGwoKSk7Ci0gICAgfQotCi0gICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllc09ubHkg
fHwgbm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpT
Y3JvbGxlZENvbnRlbnRzTGF5ZXIpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNjcm9sbGVk
LWNvbnRlbnRzLWxheWVyIiwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEPihub2RlLnNjcm9sbGVkQ29udGVudHNMYXllcigpKSk7Ci19Ci0gICAgCi1zdGF0aWMgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5n
Tm9kZSYgbm9kZSwgYm9vbCBjaGFuZ2VkUHJvcGVydGllc09ubHkpCi17Ci0gICAgZHVtcCh0cywg
c3RhdGljX2Nhc3Q8Y29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJj4obm9kZSksIGNo
YW5nZWRQcm9wZXJ0aWVzT25seSk7Ci0gICAgCi0gICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllc09u
bHkgfHwgbm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGlu
Z05vZGU6OkZyYW1lU2NhbGVGYWN0b3IpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZyYW1l
LXNjYWxlLWZhY3RvciIsIG5vZGUuZnJhbWVTY2FsZUZhY3RvcigpKTsKLQotICAgIGlmICghY2hh
bmdlZFByb3BlcnRpZXNPbmx5IHx8IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpFdmVudFRyYWNraW5nUmVnaW9uKSkgewotICAgICAgICB7
Ci0gICAgICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKLSAgICAgICAg
ICAgIHRzIDw8ICJhc3luY2hyb25vdXMtZXZlbnQtdHJhY2tpbmctcmVnaW9uIjsKLSAgICAgICAg
ICAgIGZvciAoYXV0byByZWN0IDogbm9kZS5ldmVudFRyYWNraW5nUmVnaW9ucygpLmFzeW5jaHJv
bm91c0Rpc3BhdGNoUmVnaW9uLnJlY3RzKCkpIHsKLSAgICAgICAgICAgICAgICB0cyA8PCAiXG4i
OwotICAgICAgICAgICAgICAgIHRzLndyaXRlSW5kZW50KCk7Ci0gICAgICAgICAgICAgICAgdHMg
PDwgcmVjdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIHN5bmNocm9ub3VzRXZlbnRSZWdpb24gOiBub2RlLmV2ZW50VHJhY2tpbmdSZWdpb25zKCku
ZXZlbnRTcGVjaWZpY1N5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb25zKSB7Ci0gICAgICAgICAgICBU
ZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKLSAgICAgICAgICAgIHRzIDw8ICJzeW5j
aHJvbm91cy1ldmVudC10cmFja2luZy1yZWdpb24gZm9yIGV2ZW50ICIgPDwgc3luY2hyb25vdXNF
dmVudFJlZ2lvbi5rZXk7Ci0KLSAgICAgICAgICAgIGZvciAoYXV0byByZWN0IDogc3luY2hyb25v
dXNFdmVudFJlZ2lvbi52YWx1ZS5yZWN0cygpKSB7Ci0gICAgICAgICAgICAgICAgdHMgPDwgIlxu
IjsKLSAgICAgICAgICAgICAgICB0cy53cml0ZUluZGVudCgpOwotICAgICAgICAgICAgICAgIHRz
IDw8IHJlY3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGSVhN
RTogZHVtcCBzeW5jaHJvbm91c1Njcm9sbGluZ1JlYXNvbnMKLSAgICAvLyBGSVhNRTogZHVtcCBz
Y3JvbGxhYmxlQXJlYVBhcmFtZXRlcnMKLSAgICAvLyBGSVhNRTogZHVtcCBzY3JvbGxCZWhhdmlv
ckZvckZpeGVkRWxlbWVudHMKLQotICAgIGlmICghY2hhbmdlZFByb3BlcnRpZXNPbmx5IHx8IG5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpI
ZWFkZXJIZWlnaHQpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImhlYWRlci1oZWlnaHQiLCBu
b2RlLmhlYWRlckhlaWdodCgpKTsKLQotICAgIGlmICghY2hhbmdlZFByb3BlcnRpZXNPbmx5IHx8
IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2Rl
OjpGb290ZXJIZWlnaHQpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImZvb3Rlci1oZWlnaHQi
LCBub2RlLmZvb3RlckhlaWdodCgpKTsKLQotICAgIGlmICghY2hhbmdlZFByb3BlcnRpZXNPbmx5
IHx8IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdO
b2RlOjpUb3BDb250ZW50SW5zZXQpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRvcC1jb250
ZW50LWluc2V0Iiwgbm9kZS50b3BDb250ZW50SW5zZXQoKSk7Ci0KLSAgICBpZiAoIWNoYW5nZWRQ
cm9wZXJ0aWVzT25seSB8fCBub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZy
YW1lU2Nyb2xsaW5nTm9kZTo6RnJhbWVTY2FsZUZhY3RvcikpCi0gICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiZnJhbWUtc2NhbGUtZmFjdG9yIiwgbm9kZS5mcmFtZVNjYWxlRmFjdG9yKCkpOwotCi0g
ICAgaWYgKCFjaGFuZ2VkUHJvcGVydGllc09ubHkgfHwgbm9kZS5oYXNDaGFuZ2VkUHJvcGVydHko
U2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6Okluc2V0Q2xpcExheWVyKSkKLSAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJjbGlwLWluc2V0LWxheWVyIiwgc3RhdGljX2Nhc3Q8R3JhcGhp
Y3NMYXllcjo6UGxhdGZvcm1MYXllcklEPihub2RlLmluc2V0Q2xpcExheWVyKCkpKTsKLQotICAg
IGlmICghY2hhbmdlZFByb3BlcnRpZXNPbmx5IHx8IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNj
cm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpDb250ZW50U2hhZG93TGF5ZXIpKQotICAg
ICAgICB0cy5kdW1wUHJvcGVydHkoImNvbnRlbnQtc2hhZG93LWxheWVyIiwgc3RhdGljX2Nhc3Q8
R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPihub2RlLmNvbnRlbnRTaGFkb3dMYXllcigp
KSk7Ci0KLSAgICBpZiAoIWNoYW5nZWRQcm9wZXJ0aWVzT25seSB8fCBub2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6SGVhZGVyTGF5ZXIpKQot
ICAgICAgICB0cy5kdW1wUHJvcGVydHkoImhlYWRlci1sYXllciIsIHN0YXRpY19jYXN0PEdyYXBo
aWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4obm9kZS5oZWFkZXJMYXllcigpKSk7Ci0KLSAgICBp
ZiAoIWNoYW5nZWRQcm9wZXJ0aWVzT25seSB8fCBub2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3Jv
bGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Rm9vdGVyTGF5ZXIpKQotICAgICAgICB0cy5k
dW1wUHJvcGVydHkoImZvb3Rlci1sYXllciIsIHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXI6OlBs
YXRmb3JtTGF5ZXJJRD4obm9kZS5mb290ZXJMYXllcigpKSk7Ci19Ci0gICAgCi1zdGF0aWMgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZSYgbm9kZSwgYm9vbCBjaGFuZ2VkUHJvcGVydGllc09ubHkpCi17Ci0gICAgZHVtcCh0
cywgc3RhdGljX2Nhc3Q8Y29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlJj4obm9kZSks
IGNoYW5nZWRQcm9wZXJ0aWVzT25seSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFNjcm9sbGluZ1N0YXRlRml4ZWROb2RlJiBub2RlLCBib29sIGNoYW5nZWRQ
cm9wZXJ0aWVzT25seSkKLXsKLSAgICBpZiAoIWNoYW5nZWRQcm9wZXJ0aWVzT25seSB8fCBub2Rl
Lmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZpeGVkTm9kZTo6Vmlld3BvcnRDb25z
dHJhaW50cykpCi0gICAgICAgIHRzIDw8IG5vZGUudmlld3BvcnRDb25zdHJhaW50cygpOwotfQot
Ci1zdGF0aWMgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxpbmdTdGF0ZVN0
aWNreU5vZGUmIG5vZGUsIGJvb2wgY2hhbmdlZFByb3BlcnRpZXNPbmx5KQotewotICAgIGlmICgh
Y2hhbmdlZFByb3BlcnRpZXNPbmx5IHx8IG5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGlu
Z1N0YXRlRml4ZWROb2RlOjpWaWV3cG9ydENvbnN0cmFpbnRzKSkKLSAgICAgICAgdHMgPDwgbm9k
ZS52aWV3cG9ydENvbnN0cmFpbnRzKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgbm9kZSwgYm9vbCBjaGFuZ2VkUHJvcGVy
dGllc09ubHkpCi17Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ0eXBlIiwgbm9kZS5ub2RlVHlwZSgp
KTsKLQotICAgIGlmICghY2hhbmdlZFByb3BlcnRpZXNPbmx5IHx8IG5vZGUuaGFzQ2hhbmdlZFBy
b3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsTGF5ZXIpKQotICAgICAgICB0cy5kdW1w
UHJvcGVydHkoImxheWVyIiwgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEPihub2RlLmxheWVyKCkpKTsKLSAgICAKLSAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUoKSkg
ewotICAgIGNhc2UgRnJhbWVTY3JvbGxpbmdOb2RlOgotICAgICAgICBkdW1wKHRzLCBkb3duY2Fz
dDxTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZT4obm9kZSksIGNoYW5nZWRQcm9wZXJ0
aWVzT25seSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
OgotICAgICAgICBkdW1wKHRzLCBkb3duY2FzdDxTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Nyb2xs
aW5nTm9kZT4obm9kZSksIGNoYW5nZWRQcm9wZXJ0aWVzT25seSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRml4ZWROb2RlOgotICAgICAgICBkdW1wKHRzLCBkb3duY2FzdDxTY3JvbGxpbmdT
dGF0ZUZpeGVkTm9kZT4obm9kZSksIGNoYW5nZWRQcm9wZXJ0aWVzT25seSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU3RpY2t5Tm9kZToKLSAgICAgICAgZHVtcCh0cywgZG93bmNhc3Q8U2Ny
b2xsaW5nU3RhdGVTdGlja3lOb2RlPihub2RlKSwgY2hhbmdlZFByb3BlcnRpZXNPbmx5KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCByZWN1cnNpdmVEdW1wTm9kZXMo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgbm9kZSwgYm9vbCBjaGFu
Z2VkUHJvcGVydGllc09ubHkpCi17Ci0gICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBncm91cCh0
cyk7Ci0gICAgdHMgPDwgIm5vZGUgIiA8PCBub2RlLnNjcm9sbGluZ05vZGVJRCgpOwotICAgIGR1
bXAodHMsIG5vZGUsIGNoYW5nZWRQcm9wZXJ0aWVzT25seSk7Ci0KLSAgICBpZiAobm9kZS5jaGls
ZHJlbigpKSB7Ci0gICAgICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOwotICAg
ICAgICB0cyA8PCAiY2hpbGRyZW4iOwotCi0gICAgICAgIGZvciAoYXV0byYgY2hpbGROb2RlIDog
Km5vZGUuY2hpbGRyZW4oKSkKLSAgICAgICAgICAgIHJlY3Vyc2l2ZUR1bXBOb2Rlcyh0cywgKmNo
aWxkTm9kZSwgY2hhbmdlZFByb3BlcnRpZXNPbmx5KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjcm9sbGluZ1N0YXRlVHJlZSYgc3RhdGVUcmVl
LCBib29sIGNoYW5nZWRQcm9wZXJ0aWVzT25seSkKLXsKLSAgICB0cy5kdW1wUHJvcGVydHkoImhh
cyBjaGFuZ2VkIHByb3BlcnRpZXMiLCBzdGF0ZVRyZWUuaGFzQ2hhbmdlZFByb3BlcnRpZXMoKSk7
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJoYXMgbmV3IHJvb3Qgbm9kZSIsIHN0YXRlVHJlZS5oYXNO
ZXdSb290U3RhdGVOb2RlKCkpOwotCi0gICAgaWYgKHN0YXRlVHJlZS5yb290U3RhdGVOb2RlKCkp
Ci0gICAgICAgIHJlY3Vyc2l2ZUR1bXBOb2Rlcyh0cywgKnN0YXRlVHJlZS5yb290U3RhdGVOb2Rl
KCksIGNoYW5nZWRQcm9wZXJ0aWVzT25seSk7Ci0KLSAgICBpZiAoIXN0YXRlVHJlZS5yZW1vdmVk
Tm9kZXMoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgVmVjdG9yPFNjcm9sbGluZ05vZGVJRD4gcmVt
b3ZlZE5vZGVzOwotICAgICAgICBjb3B5VG9WZWN0b3Ioc3RhdGVUcmVlLnJlbW92ZWROb2Rlcygp
LCByZW1vdmVkTm9kZXMpOwotICAgICAgICB0cy5kdW1wUHJvcGVydHk8VmVjdG9yPFNjcm9sbGlu
Z05vZGVJRD4+KCJyZW1vdmVkLW5vZGVzIiwgcmVtb3ZlZE5vZGVzKTsKLSAgICB9Ci19Ci0KLVdU
Rjo6Q1N0cmluZyBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uOjpkZXNjcmlw
dGlvbigpIGNvbnN0Ci17Ci0gICAgVGV4dFN0cmVhbSB0czsKLQotICAgIHRzLnN0YXJ0R3JvdXAo
KTsKLSAgICB0cyA8PCAic2Nyb2xsaW5nIHN0YXRlIHRyZWUiOwotCi0gICAgaWYgKG1fc2Nyb2xs
aW5nU3RhdGVUcmVlKSB7Ci0gICAgICAgIGlmICghbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPmhhc0No
YW5nZWRQcm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICB0cyA8PCAiIC0gbm8gY2hhbmdlcyI7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIFdlYktpdDo6ZHVtcCh0cywgKm1fc2Nyb2xsaW5nU3Rh
dGVUcmVlLmdldCgpLCB0cnVlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdHMgPDwgIiAtIG5vbmUi
OwotCi0gICAgdHMuZW5kR3JvdXAoKTsKLQotICAgIHJldHVybiB0cy5yZWxlYXNlKCkudXRmOCgp
OwotfQotCi12b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb246OmR1bXAo
KSBjb25zdAotewotICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBkZXNjcmlwdGlvbigpLmRhdGEo
KSk7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbHNlIC8vICFFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBSZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uOjplbmNvZGUoSVBDOjpFbmNvZGVyJikgY29u
c3QKLXsKLX0KLQotYm9vbCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uOjpk
ZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Njcm9sbGluZy9S
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDhiOWIwYmY4NzQ3MTFkNTQzNzJiYjUxMmVhMjc4NmQ2Nzg0NmI0M2QuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24u
aAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFJl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb25faAotI2RlZmluZSBSZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uX2gKLQotI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xs
aW5nU3RhdGVUcmVlLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgRGVjb2RlcjsKLWNsYXNz
IEVuY29kZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvclRyYW5zYWN0aW9uIHsKLXB1YmxpYzoKLSNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQotICAgIHZvaWQgc2V0U3RhdGVUcmVlVG9FbmNvZGUoc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZT4gc3RhdGVUcmVlKSB7IG1fc2Nyb2xsaW5nU3RhdGVU
cmVlID0gV1RGTW92ZShzdGF0ZVRyZWUpOyB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlNjcm9sbGluZ1N0YXRlVHJlZT4mIHNjcm9sbGluZ1N0YXRlVHJlZSgpIHsgcmV0dXJuIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlOyB9Ci0jZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLQot
ICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwotICAgIHN0YXRpYyBib29sIGRl
Y29kZShJUEM6OkRlY29kZXImLCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9u
Jik7Ci0KLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKLSAgICBXVEY6OkNT
dHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKLSAgICB2b2lkIGR1bXAoKSBjb25zdDsKLSNlbmRp
ZgotCi1wcml2YXRlOgotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgYm9vbCBkZWNv
ZGUoSVBDOjpEZWNvZGVyJik7Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNj
cm9sbGluZ1N0YXRlVHJlZT4gbV9zY3JvbGxpbmdTdGF0ZVRyZWU7Ci0jZW5kaWYgLy8gRU5BQkxF
KEFTWU5DX1NDUk9MTElORykKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUuaCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlYWIwOWRlZjBiN2Y4YmY5MGY5ZmYyZWFiYjNmNGMxY2M5YjE0
NDViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JT1N1cmZh
Y2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01hY2hTZW5kUmlnaHQuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1JlZ2lvbi5oPgotI2luY2x1ZGUgPGNocm9ubz4KLQotT0JKQ19DTEFTUyBDQUxheWVyOwot
Ci0vLyBGSVhNRTogTWFrZSBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwIE9iamVjdGl2ZS1DIHNv
IHdlIGNhbiBpbmNsdWRlIFdlYkxheWVyLmggaGVyZSBhbmQgc2hhcmUgdGhlIHR5cGVkZWYuCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci10eXBlZGVmIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3QsIDU+
IFJlcGFpbnRSZWN0TGlzdDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBsYXRm
b3JtQ0FMYXllclJlbW90ZTsKLQotY2xhc3MgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlKTsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBSZW1vdGVMYXllckJhY2tpbmdTdG9y
ZShQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUqKTsKLSAgICB+UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUo
KTsKLQotICAgIHZvaWQgZW5zdXJlQmFja2luZ1N0b3JlKFdlYkNvcmU6OkZsb2F0U2l6ZSwgZmxv
YXQgc2NhbGUsIGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nLCBib29sIGRlZXBDb2xvciwgYm9vbCBp
c09wYXF1ZSk7Ci0KLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0KTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwotCi0gICAgYm9vbCBkaXNwbGF5KCk7
Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQotICAgIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQotICAgIGJvb2wg
YWNjZWxlcmF0ZXNEcmF3aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRlc0RyYXdpbmc7
IH0KLSAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9pc09wYXF1ZTsgfQotICAg
IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwoKSBjb25zdDsKLQotICAgIFBsYXRmb3JtQ0FMYXllclJl
bW90ZSogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyOyB9Ci0KLSAgICBlbnVtIGNsYXNz
IExheWVyQ29udGVudHNUeXBlIHsgSU9TdXJmYWNlLCBDQU1hY2hQb3J0IH07Ci0gICAgdm9pZCBh
cHBseUJhY2tpbmdTdG9yZVRvTGF5ZXIoQ0FMYXllciAqLCBMYXllckNvbnRlbnRzVHlwZSk7Ci0K
LSAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKLSAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoSVBDOjpEZWNvZGVyJiwgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmKTsKLQotICAgIHZv
aWQgZW51bWVyYXRlUmVjdHNCZWluZ0RyYXduKENHQ29udGV4dFJlZiwgdm9pZCAoXikoQ0dSZWN0
KSk7Ci0KLSAgICBib29sIGhhc0Zyb250QnVmZmVyKCkgY29uc3QKLSAgICB7Ci0jaWYgVVNFKElP
U1VSRkFDRSkKLSAgICAgICAgaWYgKG1fYWNjZWxlcmF0ZXNEcmF3aW5nKQotICAgICAgICAgICAg
cmV0dXJuICEhbV9mcm9udEJ1ZmZlci5zdXJmYWNlOwotI2VuZGlmCi0gICAgICAgIHJldHVybiAh
IW1fZnJvbnRCdWZmZXIuYml0bWFwOwotICAgIH0KLQotICAgIFJldGFpblB0cjxDR0NvbnRleHRS
ZWY+IHRha2VGcm9udENvbnRleHRQZW5kaW5nRmx1c2goKTsKLQotICAgIGVudW0gY2xhc3MgQnVm
ZmVyVHlwZSB7Ci0gICAgICAgIEZyb250LAotICAgICAgICBCYWNrLAotICAgICAgICBTZWNvbmRh
cnlCYWNrCi0gICAgfTsKLQotICAgIGJvb2wgc2V0QnVmZmVyVm9sYXRpbGl0eShCdWZmZXJUeXBl
IHR5cGUsIGJvb2wgaXNWb2xhdGlsZSk7Ci0KLSAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2Nr
Ojp0aW1lX3BvaW50IGxhc3REaXNwbGF5VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdERpc3Bs
YXlUaW1lOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBkcmF3SW5Db250ZXh0KFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYsIENHSW1hZ2VSZWYgYmFja0ltYWdlKTsKLSAgICB2b2lkIGNsZWFyQmFj
a2luZ1N0b3JlKCk7Ci0gICAgdm9pZCBzd2FwVG9WYWxpZEZyb250QnVmZmVyKCk7Ci0KLSNpZiBV
U0UoSU9TVVJGQUNFKQotICAgIFdlYkNvcmU6OklPU3VyZmFjZTo6Rm9ybWF0IHN1cmZhY2VCdWZm
ZXJGb3JtYXQoKSBjb25zdDsKLSNlbmRpZgotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBiYWNraW5n
U3RvcmVTaXplKCkgY29uc3Q7Ci0KLSAgICBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUqIG1fbGF5ZXI7
Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9zaXplOwotICAgIGZsb2F0IG1fc2NhbGU7Ci0g
ICAgYm9vbCBtX2lzT3BhcXVlOwotCi0gICAgV2ViQ29yZTo6UmVnaW9uIG1fZGlydHlSZWdpb247
Ci0KLSAgICBzdHJ1Y3QgQnVmZmVyIHsKLSAgICAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
Yml0bWFwOwotI2lmIFVTRShJT1NVUkZBQ0UpCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpJT1N1cmZhY2U+IHN1cmZhY2U7Ci0gICAgICAgIGJvb2wgaXNWb2xhdGlsZSA9IGZhbHNl
OwotI2VuZGlmCi0KLSAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0Ci0gICAg
ICAgIHsKLSNpZiBVU0UoSU9TVVJGQUNFKQotICAgICAgICAgICAgaWYgKHN1cmZhY2UpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChiaXRtYXAp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZGlzY2FyZCgpOwotICAgIH07Ci0KLSAgICBC
dWZmZXIgbV9mcm9udEJ1ZmZlcjsKLSAgICBCdWZmZXIgbV9iYWNrQnVmZmVyOwotI2lmIFVTRShJ
T1NVUkZBQ0UpCi0gICAgQnVmZmVyIG1fc2Vjb25kYXJ5QmFja0J1ZmZlcjsKLSAgICBXZWJDb3Jl
OjpNYWNoU2VuZFJpZ2h0IG1fZnJvbnRCdWZmZXJTZW5kUmlnaHQ7Ci0jZW5kaWYKLQotICAgIFJl
dGFpblB0cjxDR0NvbnRleHRSZWY+IG1fZnJvbnRDb250ZXh0UGVuZGluZ0ZsdXNoOwotCi0gICAg
Ym9vbCBtX2FjY2VsZXJhdGVzRHJhd2luZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2RlZXBDb2xv
ciB7IGZhbHNlIH07Ci0KLSAgICBXZWJDb3JlOjpSZXBhaW50UmVjdExpc3QgbV9wYWludGluZ1Jl
Y3RzOwotCi0gICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBtX2xhc3RE
aXNwbGF5VGltZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyYTVkMmVjZDFiOTc5MTIzYjUwYzc2YTg1N2RiZWM2OTVhNjVj
NWFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQorKysgL2Rldi9u
dWxsCkBAIC0xLDQ5OCArMCwwIEBACi0gLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmUuaCIKLQotI2ltcG9ydCAiQXJndW1lbnRDb2RlcnMuaCIKLSNpbXBvcnQgIk1hY2hQ
b3J0LmgiCi0jaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCIKLSNpbXBvcnQgIlJlbW90
ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVl
Q29udGV4dC5oIgotI2ltcG9ydCAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW1wb3J0ICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotI2lt
cG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgotI2ltcG9ydCA8V2ViQ29yZS9JT1N1
cmZhY2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyQ2xpZW50Lmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL1dlYkxheWVyLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNv
cmVTUEkuaD4KLQotI2lmIFVTRShJT1NVUkZBQ0UpCi0jaW1wb3J0IDxtYWNoL21hY2hfcG9ydC5o
PgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OlJlbW90ZUxheWVyQmFja2luZ1N0b3JlKFBs
YXRmb3JtQ0FMYXllclJlbW90ZSogbGF5ZXIpCi0gICAgOiBtX2xheWVyKGxheWVyKQotICAgICwg
bV9pc09wYXF1ZShmYWxzZSkKLSAgICAsIG1fbGFzdERpc3BsYXlUaW1lKHN0ZDo6Y2hyb25vOjpz
dGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQ6Om1pbigpKQotewotICAgIGlmICghbV9sYXllcikKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmIChSZW1vdGVMYXllclRyZWVDb250ZXh0KiBjb250ZXh0ID0g
bV9sYXllci0+Y29udGV4dCgpKQotICAgICAgICBjb250ZXh0LT5iYWNraW5nU3RvcmVXYXNDcmVh
dGVkKCp0aGlzKTsKLX0KLQotUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6On5SZW1vdGVMYXllckJh
Y2tpbmdTdG9yZSgpCi17Ci0gICAgY2xlYXJCYWNraW5nU3RvcmUoKTsKLQotICAgIGlmICghbV9s
YXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFJlbW90ZUxheWVyVHJlZUNvbnRleHQq
IGNvbnRleHQgPSBtX2xheWVyLT5jb250ZXh0KCkpCi0gICAgICAgIGNvbnRleHQtPmJhY2tpbmdT
dG9yZVdpbGxCZURlc3Ryb3llZCgqdGhpcyk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmU6OmVuc3VyZUJhY2tpbmdTdG9yZShGbG9hdFNpemUgc2l6ZSwgZmxvYXQgc2NhbGUsIGJv
b2wgYWNjZWxlcmF0ZXNEcmF3aW5nLCBib29sIGRlZXBDb2xvciwgYm9vbCBpc09wYXF1ZSkKLXsK
LSAgICBpZiAobV9zaXplID09IHNpemUgJiYgbV9zY2FsZSA9PSBzY2FsZSAmJiBtX2RlZXBDb2xv
ciA9PSBkZWVwQ29sb3IgJiYgbV9hY2NlbGVyYXRlc0RyYXdpbmcgPT0gYWNjZWxlcmF0ZXNEcmF3
aW5nICYmIG1faXNPcGFxdWUgPT0gaXNPcGFxdWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
c2l6ZSA9IHNpemU7Ci0gICAgbV9zY2FsZSA9IHNjYWxlOwotICAgIG1fYWNjZWxlcmF0ZXNEcmF3
aW5nID0gYWNjZWxlcmF0ZXNEcmF3aW5nOwotICAgIG1fZGVlcENvbG9yID0gZGVlcENvbG9yOwot
ICAgIG1faXNPcGFxdWUgPSBpc09wYXF1ZTsKLQotICAgIGlmIChtX2Zyb250QnVmZmVyKSB7Ci0g
ICAgICAgIC8vIElmIHdlIGhhdmUgYSB2YWxpZCBiYWNraW5nIHN0b3JlLCB3ZSBuZWVkIHRvIGVu
c3VyZSB0aGF0IGl0IGdldHMgY29tcGxldGVseQotICAgICAgICAvLyByZXBhaW50ZWQgdGhlIG5l
eHQgdGltZSBkaXNwbGF5KCkgaXMgY2FsbGVkLgotICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsK
LSAgICB9Ci0KLSAgICBjbGVhckJhY2tpbmdTdG9yZSgpOwotfQotCi12b2lkIFJlbW90ZUxheWVy
QmFja2luZ1N0b3JlOjpjbGVhckJhY2tpbmdTdG9yZSgpCi17Ci0gICAgbV9mcm9udEJ1ZmZlci5k
aXNjYXJkKCk7Ci0gICAgbV9iYWNrQnVmZmVyLmRpc2NhcmQoKTsKLSNpZiBVU0UoSU9TVVJGQUNF
KQotICAgIG1fc2Vjb25kYXJ5QmFja0J1ZmZlci5kaXNjYXJkKCk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fc2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1fc2NhbGU7
Ci0gICAgZW5jb2RlciA8PCBtX2FjY2VsZXJhdGVzRHJhd2luZzsKLSAgICBlbmNvZGVyIDw8IG1f
aXNPcGFxdWU7Ci0KLSNpZiBVU0UoSU9TVVJGQUNFKQotICAgIGlmIChtX2FjY2VsZXJhdGVzRHJh
d2luZykgewotICAgICAgICBpZiAobV9mcm9udEJ1ZmZlci5zdXJmYWNlKQotICAgICAgICAgICAg
ZW5jb2RlciA8PCBtX2Zyb250QnVmZmVyLnN1cmZhY2UtPmNyZWF0ZVNlbmRSaWdodCgpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBlbmNvZGVyIDw8IFdlYkNvcmU6Ok1hY2hTZW5kUmlnaHQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgQVNTRVJUKCFtX2FjY2Vs
ZXJhdGVzRHJhd2luZyk7Ci0KLSAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Ci0g
ICAgbV9mcm9udEJ1ZmZlci5iaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOwotICAgIGVuY29k
ZXIgPDwgaGFuZGxlOwotfQotCi1ib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpkZWNvZGUo
SVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZSYgcmVzdWx0KQot
ewotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fc2l6ZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fc2NhbGUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX2Fj
Y2VsZXJhdGVzRHJhd2luZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0Lm1faXNPcGFxdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSNpZiBVU0UoSU9TVVJGQUNFKQotICAgIGlmIChyZXN1bHQubV9hY2NlbGVyYXRlc0RyYXdpbmcp
IHsKLSAgICAgICAgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQ7Ci0gICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoc2VuZFJpZ2h0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmVzdWx0Lm1fZnJvbnRCdWZmZXJTZW5kUmlnaHQgPSBXVEZNb3ZlKHNlbmRSaWdodCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbmRpZgotCi0gICAgQVNTRVJUKCFyZXN1bHQubV9h
Y2NlbGVyYXRlc0RyYXdpbmcpOwotCi0gICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxl
OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJlc3VsdC5tX2Zyb250QnVmZmVyLmJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlKGhhbmRsZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IEludFJlY3QgcmVjdCkKLXsKLSAgICBt
X2RpcnR5UmVnaW9uLnVuaXRlKHJlY3QpOwotfQotCi12b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlOjpzZXROZWVkc0Rpc3BsYXkoKQotewotICAgIHNldE5lZWRzRGlzcGxheShJbnRSZWN0KElu
dFBvaW50KCksIGV4cGFuZGVkSW50U2l6ZShtX3NpemUpKSk7Ci19Ci0KLUludFNpemUgUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmU6OmJhY2tpbmdTdG9yZVNpemUoKSBjb25zdAotewotICAgIEZsb2F0
U2l6ZSBzY2FsZWRTaXplID0gbV9zaXplOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9zY2FsZSk7
Ci0gICAgcmV0dXJuIHJvdW5kZWRJbnRTaXplKHNjYWxlZFNpemUpOwotfQotCi11bnNpZ25lZCBS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6Ynl0ZXNQZXJQaXhlbCgpIGNvbnN0Ci17Ci0jaWYgVVNF
KElPU1VSRkFDRSkKLSAgICBzd2l0Y2ggKHN1cmZhY2VCdWZmZXJGb3JtYXQoKSkgewotICAgIGNh
c2UgV2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQ6OlJHQkE6IHJldHVybiA0OwotICAgIGNhc2Ug
V2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQ6OllVVjQyMjogcmV0dXJuIDI7Ci0gICAgY2FzZSBX
ZWJDb3JlOjpJT1N1cmZhY2U6OkZvcm1hdDo6UkdCMTA6IHJldHVybiA0OwotICAgIGNhc2UgV2Vi
Q29yZTo6SU9TdXJmYWNlOjpGb3JtYXQ6OlJHQjEwQTg6IHJldHVybiA1OwotICAgIH0KLSNlbmRp
ZgotICAgIHJldHVybiA0OwotfQotCi12b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpzd2Fw
VG9WYWxpZEZyb250QnVmZmVyKCkKLXsKLSAgICBJbnRTaXplIGV4cGFuZGVkU2NhbGVkU2l6ZSA9
IGJhY2tpbmdTdG9yZVNpemUoKTsKLQotI2lmIFVTRShJT1NVUkZBQ0UpCi0gICAgaWYgKG1fYWNj
ZWxlcmF0ZXNEcmF3aW5nKSB7Ci0gICAgICAgIGlmICghbV9iYWNrQnVmZmVyLnN1cmZhY2UgfHwg
bV9iYWNrQnVmZmVyLnN1cmZhY2UtPmlzSW5Vc2UoKSkgewotICAgICAgICAgICAgc3RkOjpzd2Fw
KG1fYmFja0J1ZmZlciwgbV9zZWNvbmRhcnlCYWNrQnVmZmVyKTsKLSAgICAgICAgICAgIGlmICht
X2JhY2tCdWZmZXIuc3VyZmFjZSAmJiBtX2JhY2tCdWZmZXIuc3VyZmFjZS0+aXNJblVzZSgpKQot
ICAgICAgICAgICAgICAgIG1fYmFja0J1ZmZlci5kaXNjYXJkKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBzdGQ6OnN3YXAobV9mcm9udEJ1ZmZlciwgbV9iYWNrQnVmZmVyKTsKLQotICAgICAgICBp
ZiAoIW1fZnJvbnRCdWZmZXIuc3VyZmFjZSkKLSAgICAgICAgICAgIG1fZnJvbnRCdWZmZXIuc3Vy
ZmFjZSA9IFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlKGV4cGFuZGVkU2NhbGVkU2l6ZSwgc1JH
QkNvbG9yU3BhY2VSZWYoKSwgc3VyZmFjZUJ1ZmZlckZvcm1hdCgpKTsKLQotICAgICAgICBzZXRC
dWZmZXJWb2xhdGlsaXR5KEJ1ZmZlclR5cGU6OkZyb250LCBmYWxzZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEFTU0VSVCghbV9hY2NlbGVyYXRlc0RyYXdpbmcpOwot
ICAgIHN0ZDo6c3dhcChtX2Zyb250QnVmZmVyLCBtX2JhY2tCdWZmZXIpOwotCi0gICAgaWYgKCFt
X2Zyb250QnVmZmVyLmJpdG1hcCkgewotICAgICAgICBTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3Vy
YXRpb24gYml0bWFwQ29uZmlndXJhdGlvbjsKLSAgICAgICAgYml0bWFwQ29uZmlndXJhdGlvbi5p
c09wYXF1ZSA9IG1faXNPcGFxdWU7Ci0gICAgICAgIG1fZnJvbnRCdWZmZXIuYml0bWFwID0gU2hh
cmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoZXhwYW5kZWRTY2FsZWRTaXplLCBiaXRtYXBD
b25maWd1cmF0aW9uKTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6
OmRpc3BsYXkoKQotewotICAgIEFTU0VSVCghbV9mcm9udENvbnRleHRQZW5kaW5nRmx1c2gpOwot
Ci0gICAgbV9sYXN0RGlzcGxheVRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3co
KTsKLQotICAgIGJvb2wgbmVlZFRvRW5jb2RlQmFja2luZ1N0b3JlID0gZmFsc2U7Ci0gICAgaWYg
KFJlbW90ZUxheWVyVHJlZUNvbnRleHQqIGNvbnRleHQgPSBtX2xheWVyLT5jb250ZXh0KCkpCi0g
ICAgICAgIG5lZWRUb0VuY29kZUJhY2tpbmdTdG9yZSA9IGNvbnRleHQtPmJhY2tpbmdTdG9yZVdp
bGxCZURpc3BsYXllZCgqdGhpcyk7Ci0KLSAgICAvLyBNYWtlIHRoZSBwcmV2aW91cyBmcm9udCBi
dWZmZXIgbm9uLXZvbGF0aWxlIGVhcmx5LCBzbyB0aGF0IHdlIGNhbiBkaXJ0eSB0aGUgd2hvbGUg
bGF5ZXIgaWYgaXQgY29tZXMgYmFjayBlbXB0eS4KLSAgICBzZXRCdWZmZXJWb2xhdGlsaXR5KEJ1
ZmZlclR5cGU6OkZyb250LCBmYWxzZSk7Ci0KLSAgICBJbnRTaXplIGV4cGFuZGVkU2NhbGVkU2l6
ZSA9IGJhY2tpbmdTdG9yZVNpemUoKTsKLQotICAgIGlmIChtX2RpcnR5UmVnaW9uLmlzRW1wdHko
KSB8fCBleHBhbmRlZFNjYWxlZFNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbmVlZFRv
RW5jb2RlQmFja2luZ1N0b3JlOwotCi0gICAgSW50UmVjdCBsYXllckJvdW5kcyhJbnRQb2ludCgp
LCBleHBhbmRlZEludFNpemUobV9zaXplKSk7Ci0gICAgaWYgKCFoYXNGcm9udEJ1ZmZlcigpKQot
ICAgICAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKGxheWVyQm91bmRzKTsKLQotICAgIGlmIChtX2xh
eWVyLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIobV9sYXllcikp
IHsKLSAgICAgICAgSW50UmVjdCBpbmRpY2F0b3JSZWN0KDAsIDAsIDUyLCAyNyk7Ci0gICAgICAg
IG1fZGlydHlSZWdpb24udW5pdGUoaW5kaWNhdG9yUmVjdCk7Ci0gICAgfQotCi0gICAgSW50UmVj
dCBleHBhbmRlZFNjYWxlZExheWVyQm91bmRzKEludFBvaW50KCksIGV4cGFuZGVkU2NhbGVkU2l6
ZSk7Ci0gICAgYm9vbCB3aWxsUGFpbnRFbnRpcmVCYWNraW5nU3RvcmUgPSBtX2RpcnR5UmVnaW9u
LmNvbnRhaW5zKGxheWVyQm91bmRzKTsKLQotICAgIHN3YXBUb1ZhbGlkRnJvbnRCdWZmZXIoKTsK
LQotI2lmIFVTRShJT1NVUkZBQ0UpCi0gICAgaWYgKG1fYWNjZWxlcmF0ZXNEcmF3aW5nKSB7Ci0g
ICAgICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBiYWNrSW1hZ2U7Ci0gICAgICAgIGlmIChtX2Jh
Y2tCdWZmZXIuc3VyZmFjZSAmJiAhd2lsbFBhaW50RW50aXJlQmFja2luZ1N0b3JlKQotICAgICAg
ICAgICAgYmFja0ltYWdlID0gbV9iYWNrQnVmZmVyLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0K
LSAgICAgICAgaWYgKG1fZnJvbnRCdWZmZXIuc3VyZmFjZSkgewotICAgICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0ID0gbV9mcm9udEJ1ZmZlci5zdXJmYWNlLT5lbnN1cmVHcmFwaGlj
c0NvbnRleHQoKTsKLQotICAgICAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEp
KTsKLSAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIC1leHBhbmRlZFNjYWxlZFNpemUu
aGVpZ2h0KCkpOwotICAgICAgICAgICAgZHJhd0luQ29udGV4dChjb250ZXh0LCBiYWNrSW1hZ2Uu
Z2V0KCkpOwotCi0gICAgICAgICAgICBtX2Zyb250QnVmZmVyLnN1cmZhY2UtPnJlbGVhc2VHcmFw
aGljc0NvbnRleHQoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotI2VuZGlmCi0gICAgewotICAg
ICAgICBBU1NFUlQoIW1fYWNjZWxlcmF0ZXNEcmF3aW5nKTsKLSAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dCA9IG1fZnJvbnRCdWZmZXIuYml0bWFwLT5jcmVh
dGVHcmFwaGljc0NvbnRleHQoKTsKLQotICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gYmFj
a0ltYWdlOwotICAgICAgICBpZiAobV9iYWNrQnVmZmVyLmJpdG1hcCAmJiAhd2lsbFBhaW50RW50
aXJlQmFja2luZ1N0b3JlKQotICAgICAgICAgICAgYmFja0ltYWdlID0gbV9iYWNrQnVmZmVyLmJp
dG1hcC0+bWFrZUNHSW1hZ2UoKTsKLQotICAgICAgICBkcmF3SW5Db250ZXh0KCpjb250ZXh0LCBi
YWNrSW1hZ2UuZ2V0KCkpOwotICAgIH0KLSAgICAKLSAgICBtX2xheWVyLT5vd25lcigpLT5wbGF0
Zm9ybUNBTGF5ZXJMYXllckRpZERpc3BsYXkobV9sYXllcik7Ci0gICAgCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRyYXdJbkNvbnRleHQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBDR0ltYWdlUmVmIGJhY2tJbWFnZSkKLXsKLSAgICBGbG9h
dFNpemUgc2NhbGVkU2l6ZSA9IG1fc2l6ZTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1fc2NhbGUp
OwotICAgIEludFJlY3Qgc2NhbGVkTGF5ZXJCb3VuZHMoSW50UG9pbnQoKSwgcm91bmRlZEludFNp
emUoc2NhbGVkU2l6ZSkpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBsZXNzIHRoYW4gd2ViTGF5ZXJN
YXhSZWN0c1RvUGFpbnQgcmVjdHMgdG8gcGFpbnQgYW5kIHRoZXkgY292ZXIgbGVzcwotICAgIC8v
IHRoYW4gd2ViTGF5ZXJXYXN0ZWRTcGFjZVRocmVzaG9sZCBvZiB0aGUgdG90YWwgZGlydHkgYXJl
YSwgd2UnbGwgcmVwYWludCBlYWNoIHJlY3Qgc2VwYXJhdGVseS4KLSAgICAvLyBPdGhlcndpc2Us
IHJlcGFpbnQgdGhlIGVudGlyZSBib3VuZGluZyBib3ggb2YgdGhlIGRpcnR5IHJlZ2lvbi4KLSAg
ICBJbnRSZWN0IGRpcnR5Qm91bmRzID0gbV9kaXJ0eVJlZ2lvbi5ib3VuZHMoKTsKLQotICAgIFZl
Y3RvcjxJbnRSZWN0PiBkaXJ0eVJlY3RzID0gbV9kaXJ0eVJlZ2lvbi5yZWN0cygpOwotICAgIGlm
IChkaXJ0eVJlY3RzLnNpemUoKSA+IFBsYXRmb3JtQ0FMYXllcjo6d2ViTGF5ZXJNYXhSZWN0c1Rv
UGFpbnQgfHwgbV9kaXJ0eVJlZ2lvbi50b3RhbEFyZWEoKSA+IFBsYXRmb3JtQ0FMYXllcjo6d2Vi
TGF5ZXJXYXN0ZWRTcGFjZVRocmVzaG9sZCAqIGRpcnR5Qm91bmRzLndpZHRoKCkgKiBkaXJ0eUJv
dW5kcy5oZWlnaHQoKSkgewotICAgICAgICBkaXJ0eVJlY3RzLmNsZWFyKCk7Ci0gICAgICAgIGRp
cnR5UmVjdHMuYXBwZW5kKGRpcnR5Qm91bmRzKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogZmlu
ZCBhIGNvbnNpc3RlbnQgd2F5IHRvIHNjYWxlIGFuZCBzbmFwIGRpcnR5IGFuZCBDRyBjbGlwIHJl
Y3RzLgotICAgIGZvciAoY29uc3QgYXV0byYgcmVjdCA6IGRpcnR5UmVjdHMpIHsKLSAgICAgICAg
RmxvYXRSZWN0IHNjYWxlZFJlY3QocmVjdCk7Ci0gICAgICAgIHNjYWxlZFJlY3Quc2NhbGUobV9z
Y2FsZSk7Ci0gICAgICAgIHNjYWxlZFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNjYWxlZFJlY3Qp
OwotICAgICAgICBzY2FsZWRSZWN0LnNjYWxlKDEgLyBtX3NjYWxlKTsKLSAgICAgICAgbV9wYWlu
dGluZ1JlY3RzLmFwcGVuZChzY2FsZWRSZWN0KTsKLSAgICB9Ci0KLSAgICBDR1JlY3QgY2dQYWlu
dGluZ1JlY3RzW1BsYXRmb3JtQ0FMYXllcjo6d2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnRdOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBkaXJ0eVJlY3RDb3VudCA9IG1fcGFpbnRpbmdSZWN0cy5zaXpl
KCk7IGkgPCBkaXJ0eVJlY3RDb3VudDsgKytpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzY2FsZWRQ
YWludGluZ1JlY3QgPSBtX3BhaW50aW5nUmVjdHNbaV07Ci0gICAgICAgIHNjYWxlZFBhaW50aW5n
UmVjdC5zY2FsZShtX3NjYWxlKTsKLSAgICAgICAgY2dQYWludGluZ1JlY3RzW2ldID0gc2NhbGVk
UGFpbnRpbmdSZWN0OwotICAgIH0KLQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgaWYgKGJhY2tJbWFnZSkgewotICAgICAgICBD
R0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY2dDb250ZXh0KTsKLSAgICAgICAgQ0dDb250
ZXh0U2V0QmxlbmRNb2RlKGNnQ29udGV4dCwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENH
Q29udGV4dFRyYW5zbGF0ZUNUTShjZ0NvbnRleHQsIDAsIHNjYWxlZExheWVyQm91bmRzLmhlaWdo
dCgpKTsKLSAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLCAtMSk7Ci0gICAg
ICAgIENHQ29udGV4dERyYXdJbWFnZShjZ0NvbnRleHQsIHNjYWxlZExheWVyQm91bmRzLCBiYWNr
SW1hZ2UpOwotICAgIH0KLQotICAgIENHQ29udGV4dENsaXBUb1JlY3RzKGNnQ29udGV4dCwgY2dQ
YWludGluZ1JlY3RzLCBtX3BhaW50aW5nUmVjdHMuc2l6ZSgpKTsKLQotICAgIGlmICghbV9pc09w
YXF1ZSkKLSAgICAgICAgY29udGV4dC5jbGVhclJlY3Qoc2NhbGVkTGF5ZXJCb3VuZHMpOwotCi0j
aWZuZGVmIE5ERUJVRwotICAgIGlmIChtX2lzT3BhcXVlKQotICAgICAgICBjb250ZXh0LmZpbGxS
ZWN0KHNjYWxlZExheWVyQm91bmRzLCBDb2xvcigyNTUsIDAsIDApKTsKLSNlbmRpZgotCi0gICAg
Y29udGV4dC5zY2FsZShtX3NjYWxlKTsKLSAgICAKLSAgICBhdXRvIGZsYWdzID0gbV9sYXllci0+
Y29udGV4dCgpICYmIG1fbGF5ZXItPmNvbnRleHQoKS0+bmV4dEZsdXNoSXNGb3JJbW1lZGlhdGVQ
YWludCgpID8gV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50U25hcHNob3R0aW5nIDogV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclBhaW50Tm9ybWFsOwotICAgIAotICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBiZSBtb3ZlZCB0byBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUgZm9yIGJldHRlciBsYXllcmlu
Zy4KLSAgICBzd2l0Y2ggKG1fbGF5ZXItPmxheWVyVHlwZSgpKSB7Ci0gICAgY2FzZSBQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZVNpbXBsZUxheWVyOgotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVy
OjpMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXI6Ci0gICAgICAgIG1fbGF5ZXItPm93bmVy
KCktPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMobV9sYXllciwgY29udGV4dCwgZGlydHlC
b3VuZHMsIGZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZVdlYkxheWVyOgotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVC
YWNrZHJvcExheWVyOgotICAgICAgICBQbGF0Zm9ybUNBTGF5ZXI6OmRyYXdMYXllckNvbnRlbnRz
KGNnQ29udGV4dCwgbV9sYXllciwgbV9wYWludGluZ1JlY3RzLCBmbGFncyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVEYXJrU3lzdGVtQmFja2Ry
b3BMYXllcjoKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGlnaHRTeXN0ZW1C
YWNrZHJvcExheWVyOgotICAgICAgICAvLyBGSVhNRTogVGhlc2UgaGF2ZSBhIG1vcmUgY29tcGxp
Y2F0ZWQgbGF5ZXIgaGllcmFyY2h5LiBXZSBuZWVkIHRvIHBhaW50IGludG8KLSAgICAgICAgLy8g
YSBjaGlsZCBsYXllciBpbiBvcmRlciB0byBzZWUgdGhlIHJlbmRlcmVkIHJlc3VsdHMuCi0gICAg
ICAgIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd0xheWVyQ29udGVudHMoY2dDb250ZXh0LCBtX2xheWVy
LCBtX3BhaW50aW5nUmVjdHMsIGZsYWdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQbGF0
Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyOgotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpM
YXllclR5cGVUcmFuc2Zvcm1MYXllcjoKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlVGlsZWRCYWNraW5nTGF5ZXI6Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZVBhZ2VUaWxlZEJhY2tpbmdMYXllcjoKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlUm9vdExheWVyOgotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVBVlBsYXll
ckxheWVyOgotICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVDb250ZW50c1Byb3Zp
ZGVkTGF5ZXI6Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVNoYXBlTGF5ZXI6
Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVNjcm9sbGluZ0xheWVyOgotICAg
IGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVDdXN0b206Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9OwotCi0gICAgbV9kaXJ0eVJlZ2lv
biA9IFJlZ2lvbigpOwotICAgIG1fcGFpbnRpbmdSZWN0cy5jbGVhcigpOwotCi0gICAgbV9mcm9u
dENvbnRleHRQZW5kaW5nRmx1c2ggPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotfQotCi12
b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjplbnVtZXJhdGVSZWN0c0JlaW5nRHJhd24oQ0dD
b250ZXh0UmVmIGNvbnRleHQsIHZvaWQgKF5ibG9jaykoQ0dSZWN0KSkKLXsKLSAgICBDR0FmZmlu
ZVRyYW5zZm9ybSBpbnZlcnNlVHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dD
b250ZXh0R2V0Q1RNKGNvbnRleHQpKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gdW4tYXBw
bHkgdGhlIGZsaXBwaW5nIG9yIGNvbnRlbnRzU2NhbGUsCi0gICAgLy8gYmVjYXVzZSB0aGV5J3Jl
IG5vdCBhcHBsaWVkIHRvIHJlcGFpbnQgcmVjdHMuCi0gICAgaW52ZXJzZVRyYW5zZm9ybSA9IENH
QWZmaW5lVHJhbnNmb3JtU2NhbGUoaW52ZXJzZVRyYW5zZm9ybSwgbV9zY2FsZSwgLW1fc2NhbGUp
OwotICAgIGludmVyc2VUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybVRyYW5zbGF0ZShpbnZl
cnNlVHJhbnNmb3JtLCAwLCAtbV9zaXplLmhlaWdodCgpKTsKLQotICAgIGZvciAoY29uc3QgYXV0
byYgcmVjdCA6IG1fcGFpbnRpbmdSZWN0cykgewotICAgICAgICBDR1JlY3QgcmVjdFRvRHJhdyA9
IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKHJlY3QsIGludmVyc2VUcmFuc2Zvcm0pOwotICAg
ICAgICBibG9jayhyZWN0VG9EcmF3KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmU6OmFwcGx5QmFja2luZ1N0b3JlVG9MYXllcihDQUxheWVyICpsYXllciwgTGF5ZXJD
b250ZW50c1R5cGUgY29udGVudHNUeXBlKQotewotICAgIGxheWVyLmNvbnRlbnRzT3BhcXVlID0g
bV9pc09wYXF1ZTsKLQotI2lmIFVTRShJT1NVUkZBQ0UpCi0gICAgaWYgKGFjY2VsZXJhdGVzRHJh
d2luZygpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29udGVudHNUeXBlKSB7Ci0gICAgICAgIGNhc2Ug
TGF5ZXJDb250ZW50c1R5cGU6OklPU3VyZmFjZToKLSAgICAgICAgICAgIGlmICghbV9mcm9udEJ1
ZmZlci5zdXJmYWNlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fZnJvbnRCdWZmZXJTZW5k
UmlnaHQpOwotICAgICAgICAgICAgICAgIG1fZnJvbnRCdWZmZXIuc3VyZmFjZSA9IFdlYkNvcmU6
OklPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3ZlKG1fZnJvbnRCdWZmZXJTZW5k
UmlnaHQpLCBzUkdCQ29sb3JTcGFjZVJlZigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGxheWVyLmNvbnRlbnRzID0gbV9mcm9udEJ1ZmZlci5zdXJmYWNlID8gbV9mcm9udEJ1ZmZlci5z
dXJmYWNlLT5hc0xheWVyQ29udGVudHMoKSA6IG5pbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIExheWVyQ29udGVudHNUeXBlOjpDQU1hY2hQb3J0OgotICAgICAgICAgICAgQVNT
RVJUKG1fZnJvbnRCdWZmZXJTZW5kUmlnaHQpOwotICAgICAgICAgICAgbGF5ZXIuY29udGVudHMg
PSAoaWQpYWRvcHRDRihDQU1hY2hQb3J0Q3JlYXRlKG1fZnJvbnRCdWZmZXJTZW5kUmlnaHQubGVh
a1NlbmRSaWdodCgpKSkuZ2V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBBU1NFUlQoIWFjY2VsZXJhdGVzRHJh
d2luZygpKTsKLSAgICBsYXllci5jb250ZW50cyA9IChpZCltX2Zyb250QnVmZmVyLmJpdG1hcC0+
bWFrZUNHSW1hZ2VDb3B5KCkuZ2V0KCk7Ci19Ci0KLVJldGFpblB0cjxDR0NvbnRleHRSZWY+IFJl
bW90ZUxheWVyQmFja2luZ1N0b3JlOjp0YWtlRnJvbnRDb250ZXh0UGVuZGluZ0ZsdXNoKCkKLXsK
LSAgICByZXR1cm4gV1RGTW92ZShtX2Zyb250Q29udGV4dFBlbmRpbmdGbHVzaCk7Ci19Ci0KLSNp
ZiBVU0UoSU9TVVJGQUNFKQotYm9vbCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6c2V0QnVmZmVy
Vm9sYXRpbGl0eShCdWZmZXJUeXBlIHR5cGUsIGJvb2wgaXNWb2xhdGlsZSkKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEJ1ZmZlclR5cGU6OkZyb250OgotICAgICAgICBpZiAobV9m
cm9udEJ1ZmZlci5zdXJmYWNlICYmIG1fZnJvbnRCdWZmZXIuaXNWb2xhdGlsZSAhPSBpc1ZvbGF0
aWxlKSB7Ci0gICAgICAgICAgICBpZiAoaXNWb2xhdGlsZSkKLSAgICAgICAgICAgICAgICBtX2Zy
b250QnVmZmVyLnN1cmZhY2UtPnJlbGVhc2VHcmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAgICAg
IGlmICghaXNWb2xhdGlsZSB8fCAhbV9mcm9udEJ1ZmZlci5zdXJmYWNlLT5pc0luVXNlKCkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIHByZXZpb3VzU3RhdGUgPSBtX2Zyb250QnVmZmVyLnN1cmZh
Y2UtPnNldElzVm9sYXRpbGUoaXNWb2xhdGlsZSk7Ci0gICAgICAgICAgICAgICAgbV9mcm9udEJ1
ZmZlci5pc1ZvbGF0aWxlID0gaXNWb2xhdGlsZTsKLQotICAgICAgICAgICAgICAgIC8vIEJlY29t
aW5nIG5vbi12b2xhdGlsZSBhbmQgdGhlIGZyb250IGJ1ZmZlciB3YXMgcHVyZ2VkLCBzbyB3ZSBu
ZWVkIHRvIHJlcGFpbnQuCi0gICAgICAgICAgICAgICAgaWYgKCFpc1ZvbGF0aWxlICYmIChwcmV2
aW91c1N0YXRlID09IFdlYkNvcmU6OklPU3VyZmFjZTo6U3VyZmFjZVN0YXRlOjpFbXB0eSkpCi0g
ICAgICAgICAgICAgICAgICAgIHNldE5lZWRzRGlzcGxheSgpOwotICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQnVmZmVyVHlwZTo6QmFjazoKLSAgICAgICAgaWYgKG1fYmFja0J1ZmZlci5z
dXJmYWNlICYmIG1fYmFja0J1ZmZlci5pc1ZvbGF0aWxlICE9IGlzVm9sYXRpbGUpIHsKLSAgICAg
ICAgICAgIGlmIChpc1ZvbGF0aWxlKQotICAgICAgICAgICAgICAgIG1fYmFja0J1ZmZlci5zdXJm
YWNlLT5yZWxlYXNlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgICAgICBpZiAoIWlzVm9sYXRp
bGUgfHwgIW1fYmFja0J1ZmZlci5zdXJmYWNlLT5pc0luVXNlKCkpIHsKLSAgICAgICAgICAgICAg
ICBtX2JhY2tCdWZmZXIuc3VyZmFjZS0+c2V0SXNWb2xhdGlsZShpc1ZvbGF0aWxlKTsKLSAgICAg
ICAgICAgICAgICBtX2JhY2tCdWZmZXIuaXNWb2xhdGlsZSA9IGlzVm9sYXRpbGU7Ci0gICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCdWZmZXJUeXBlOjpTZWNvbmRhcnlCYWNrOgotICAgICAg
ICBpZiAobV9zZWNvbmRhcnlCYWNrQnVmZmVyLnN1cmZhY2UgJiYgbV9zZWNvbmRhcnlCYWNrQnVm
ZmVyLmlzVm9sYXRpbGUgIT0gaXNWb2xhdGlsZSkgewotICAgICAgICAgICAgaWYgKGlzVm9sYXRp
bGUpCi0gICAgICAgICAgICAgICAgbV9zZWNvbmRhcnlCYWNrQnVmZmVyLnN1cmZhY2UtPnJlbGVh
c2VHcmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAgICAgIGlmICghaXNWb2xhdGlsZSB8fCAhbV9z
ZWNvbmRhcnlCYWNrQnVmZmVyLnN1cmZhY2UtPmlzSW5Vc2UoKSkgewotICAgICAgICAgICAgICAg
IG1fc2Vjb25kYXJ5QmFja0J1ZmZlci5zdXJmYWNlLT5zZXRJc1ZvbGF0aWxlKGlzVm9sYXRpbGUp
OwotICAgICAgICAgICAgICAgIG1fc2Vjb25kYXJ5QmFja0J1ZmZlci5pc1ZvbGF0aWxlID0gaXNW
b2xhdGlsZTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0jZWxzZQotYm9vbCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6c2V0QnVmZmVyVm9sYXRpbGl0
eShCdWZmZXJUeXBlLCBib29sKQotewotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KLXZv
aWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OkJ1ZmZlcjo6ZGlzY2FyZCgpCi17Ci0jaWYgVVNF
KElPU1VSRkFDRSkKLSAgICBpZiAoc3VyZmFjZSkKLSAgICAgICAgV2ViQ29yZTo6SU9TdXJmYWNl
Ojptb3ZlVG9Qb29sKFdURk1vdmUoc3VyZmFjZSkpOwotICAgIGlzVm9sYXRpbGUgPSBmYWxzZTsK
LSNlbmRpZgotICAgIGJpdG1hcCA9IG51bGxwdHI7Ci19Ci0KLSNpZiBVU0UoSU9TVVJGQUNFKQot
V2ViQ29yZTo6SU9TdXJmYWNlOjpGb3JtYXQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OnN1cmZh
Y2VCdWZmZXJGb3JtYXQoKSBjb25zdAotewotICAgIGlmIChtX2RlZXBDb2xvcikKLSAgICAgICAg
cmV0dXJuIG1faXNPcGFxdWUgPyBXZWJDb3JlOjpJT1N1cmZhY2U6OkZvcm1hdDo6UkdCMTAgOiBX
ZWJDb3JlOjpJT1N1cmZhY2U6OkZvcm1hdDo6UkdCMTBBODsKLQotICAgIHJldHVybiBXZWJDb3Jl
OjpJT1N1cmZhY2U6OkZvcm1hdDo6UkdCQTsKLX0KLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFKQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZmU0OTcxZWU3MzkyNDE0YWJjMTE5NDBhYzc5ZjhmNzkxNGNh
NDg2Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxl
Y3Rpb25faAotI2RlZmluZSBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb25faAotCi0j
aW1wb3J0IDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW1wb3J0IDx3dGYvSGFzaFNldC5oPgotI2ltcG9y
dCA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBSZW1v
dGVMYXllckJhY2tpbmdTdG9yZTsKLWNsYXNzIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ7Ci1jbGFz
cyBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjsKLQotY2xhc3MgUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmVDb2xsZWN0aW9uIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZUNvbGxlY3Rpb24pOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbigpOwotCi0gICAgdm9p
ZCBiYWNraW5nU3RvcmVXYXNDcmVhdGVkKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlJik7Ci0gICAg
dm9pZCBiYWNraW5nU3RvcmVXaWxsQmVEZXN0cm95ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUm
KTsKLQotICAgIC8vIFJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYmFja2luZyBz
dG9yZSBuZWVkcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgdHJhbnNhY3Rpb24uCi0gICAgYm9vbCBi
YWNraW5nU3RvcmVXaWxsQmVEaXNwbGF5ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmKTsKLSAg
ICB2b2lkIGJhY2tpbmdTdG9yZUJlY2FtZVVucmVhY2hhYmxlKFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlJik7Ci0KLSAgICB2b2lkIHdpbGxGbHVzaExheWVycygpOwotICAgIHZvaWQgd2lsbENvbW1p
dExheWVyVHJlZShSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYpOwotICAgIHZvaWQgZGlkRmx1
c2hMYXllcnMoKTsKLQotICAgIHZvaWQgdm9sYXRpbGl0eVRpbWVyRmlyZWQoKTsKLSAgICBib29s
IG1hcmtBbGxCYWNraW5nU3RvcmVWb2xhdGlsZUltbWVkaWF0ZWx5SWZQb3NzaWJsZSgpOwotCi0g
ICAgdm9pZCBzY2hlZHVsZVZvbGF0aWxpdHlUaW1lcigpOwotCi1wcml2YXRlOgotICAgIGVudW0g
Vm9sYXRpbGl0eU1hcmtpbmdGbGFnIHsKLSAgICAgICAgTWFya0J1ZmZlcnNJZ25vcmluZ1JlYWNo
YWJpbGl0eSA9IDEgPDwgMAotICAgIH07Ci0gICAgdHlwZWRlZiB1bnNpZ25lZCBWb2xhdGlsaXR5
TWFya2luZ0ZsYWdzOwotICAgIGJvb2wgbWFya0JhY2tpbmdTdG9yZVZvbGF0aWxlSW1tZWRpYXRl
bHkoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmLCBWb2xhdGlsaXR5TWFya2luZ0ZsYWdzIHZvbGF0
aWxpdHlNYXJraW5nRmxhZ3MgPSAwKTsKLSAgICBib29sIG1hcmtCYWNraW5nU3RvcmVWb2xhdGls
ZShSZW1vdGVMYXllckJhY2tpbmdTdG9yZSYsIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRp
bWVfcG9pbnQgbm93KTsKLQotICAgIEhhc2hTZXQ8UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqPiBt
X2xpdmVCYWNraW5nU3RvcmU7Ci0gICAgSGFzaFNldDxSZW1vdGVMYXllckJhY2tpbmdTdG9yZSo+
IG1fdW5wYXJlbnRlZEJhY2tpbmdTdG9yZTsKLQotICAgIC8vIE9ubHkgdXNlZCBkdXJpbmcgYSBz
aW5nbGUgZmx1c2guCi0gICAgSGFzaFNldDxSZW1vdGVMYXllckJhY2tpbmdTdG9yZSo+IG1fcmVh
Y2hhYmxlQmFja2luZ1N0b3JlSW5MYXRlc3RGbHVzaDsKLQotICAgIFdlYkNvcmU6OlRpbWVyIG1f
dm9sYXRpbGl0eVRpbWVyOwotCi0gICAgYm9vbCBtX2luTGF5ZXJGbHVzaCB7IGZhbHNlIH07Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlQ29sbGVjdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMv
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbi5tbQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNjU0ODE2ZjRiMDg0MzA5ZTkyNDViNDZiYzVmNGVlZjZiOWUyNGU3
Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uLm1tCisr
KyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLSAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJSZW1vdGVM
YXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaCIKLQotI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVy
UmVtb3RlLmgiCi0jaW1wb3J0ICJSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oIgotI2ltcG9ydCAi
UmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOjpsaXRlcmFs
czo6Y2hyb25vX2xpdGVyYWxzOwotCi1jb25zdCBzdGQ6OmNocm9ubzo6c2Vjb25kcyB2b2xhdGls
ZUJhY2tpbmdTdG9yZUFnZVRocmVzaG9sZCA9IDFzOwotY29uc3Qgc3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kcyB2b2xhdGlsZVNlY29uZGFyeUJhY2tpbmdTdG9yZUFnZVRocmVzaG9sZCA9IDIwMG1z
OwotY29uc3QgU2Vjb25kcyB2b2xhdGlsaXR5VGltZXJJbnRlcnZhbCA9IDIwMF9tczsKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLVJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6UmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uKCkKLSAgICA6IG1fdm9sYXRpbGl0eVRpbWVy
KCp0aGlzLCAmUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjp2b2xhdGlsaXR5VGlt
ZXJGaXJlZCkKLXsKLX0KLQotdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246
OndpbGxGbHVzaExheWVycygpCi17Ci0gICAgbV9pbkxheWVyRmx1c2ggPSB0cnVlOwotICAgIG1f
cmVhY2hhYmxlQmFja2luZ1N0b3JlSW5MYXRlc3RGbHVzaC5jbGVhcigpOwotfQotCi12b2lkIFJl
bW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6d2lsbENvbW1pdExheWVyVHJlZShSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1faW5M
YXllckZsdXNoKTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1M
YXllcklEPiBuZXdseVVucmVhY2hhYmxlTGF5ZXJJRHM7Ci0gICAgZm9yIChhdXRvJiBiYWNraW5n
U3RvcmUgOiBtX2xpdmVCYWNraW5nU3RvcmUpIHsKLSAgICAgICAgaWYgKCFtX3JlYWNoYWJsZUJh
Y2tpbmdTdG9yZUluTGF0ZXN0Rmx1c2guY29udGFpbnMoYmFja2luZ1N0b3JlKSkKLSAgICAgICAg
ICAgIG5ld2x5VW5yZWFjaGFibGVMYXllcklEcy5hcHBlbmQoYmFja2luZ1N0b3JlLT5sYXllcigp
LT5sYXllcklEKCkpOwotICAgIH0KLQotICAgIHRyYW5zYWN0aW9uLnNldExheWVySURzV2l0aE5l
d2x5VW5yZWFjaGFibGVCYWNraW5nU3RvcmUobmV3bHlVbnJlYWNoYWJsZUxheWVySURzKTsKLX0K
LQotdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OmRpZEZsdXNoTGF5ZXJz
KCkKLXsKLSAgICBtX2luTGF5ZXJGbHVzaCA9IGZhbHNlOwotCi0gICAgVmVjdG9yPFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlKj4gbmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZTsKLSAgICBmb3Ig
KGF1dG8mIGJhY2tpbmdTdG9yZSA6IG1fbGl2ZUJhY2tpbmdTdG9yZSkgewotICAgICAgICBpZiAo
IW1fcmVhY2hhYmxlQmFja2luZ1N0b3JlSW5MYXRlc3RGbHVzaC5jb250YWlucyhiYWNraW5nU3Rv
cmUpKQotICAgICAgICAgICAgbmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZS5hcHBlbmQoYmFj
a2luZ1N0b3JlKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIGJhY2tpbmdTdG9yZSA6IG5ld2x5
VW5yZWFjaGFibGVCYWNraW5nU3RvcmUpCi0gICAgICAgIGJhY2tpbmdTdG9yZUJlY2FtZVVucmVh
Y2hhYmxlKCpiYWNraW5nU3RvcmUpOwotCi0gICAgaWYgKCFuZXdseVVucmVhY2hhYmxlQmFja2lu
Z1N0b3JlLmlzRW1wdHkoKSkKLSAgICAgICAgc2NoZWR1bGVWb2xhdGlsaXR5VGltZXIoKTsKLX0K
LQotdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb246OmJhY2tpbmdTdG9yZVdh
c0NyZWF0ZWQoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKLXsKLSAgICBt
X2xpdmVCYWNraW5nU3RvcmUuYWRkKCZiYWNraW5nU3RvcmUpOwotfQotCi12b2lkIFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6YmFja2luZ1N0b3JlV2lsbEJlRGVzdHJveWVkKFJl
bW90ZUxheWVyQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUpCi17Ci0gICAgbV9saXZlQmFja2lu
Z1N0b3JlLnJlbW92ZSgmYmFja2luZ1N0b3JlKTsKLSAgICBtX3VucGFyZW50ZWRCYWNraW5nU3Rv
cmUucmVtb3ZlKCZiYWNraW5nU3RvcmUpOwotfQotCi1ib29sIFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlQ29sbGVjdGlvbjo6YmFja2luZ1N0b3JlV2lsbEJlRGlzcGxheWVkKFJlbW90ZUxheWVyQmFj
a2luZ1N0b3JlJiBiYWNraW5nU3RvcmUpCi17Ci0gICAgQVNTRVJUKG1faW5MYXllckZsdXNoKTsK
LSAgICBtX3JlYWNoYWJsZUJhY2tpbmdTdG9yZUluTGF0ZXN0Rmx1c2guYWRkKCZiYWNraW5nU3Rv
cmUpOwotCi0gICAgYXV0byBiYWNraW5nU3RvcmVJdGVyID0gbV91bnBhcmVudGVkQmFja2luZ1N0
b3JlLmZpbmQoJmJhY2tpbmdTdG9yZSk7Ci0gICAgaWYgKGJhY2tpbmdTdG9yZUl0ZXIgPT0gbV91
bnBhcmVudGVkQmFja2luZ1N0b3JlLmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBtX2xpdmVCYWNraW5nU3RvcmUuYWRkKCZiYWNraW5nU3RvcmUpOwotICAgIG1fdW5wYXJlbnRl
ZEJhY2tpbmdTdG9yZS5yZW1vdmUoYmFja2luZ1N0b3JlSXRlcik7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjptYXJrQmFja2lu
Z1N0b3JlVm9sYXRpbGVJbW1lZGlhdGVseShSZW1vdGVMYXllckJhY2tpbmdTdG9yZSYgYmFja2lu
Z1N0b3JlLCBWb2xhdGlsaXR5TWFya2luZ0ZsYWdzIHZvbGF0aWxpdHlNYXJraW5nRmxhZ3MpCi17
Ci0gICAgQVNTRVJUKCFtX2luTGF5ZXJGbHVzaCk7Ci0gICAgYm9vbCBzdWNjZXNzZnVsbHlNYWRl
QmFja2luZ1N0b3JlVm9sYXRpbGUgPSB0cnVlOwotCi0gICAgaWYgKCFiYWNraW5nU3RvcmUuc2V0
QnVmZmVyVm9sYXRpbGl0eShSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6QnVmZmVyVHlwZTo6U2Vj
b25kYXJ5QmFjaywgdHJ1ZSkpCi0gICAgICAgIHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5nU3RvcmVW
b2xhdGlsZSA9IGZhbHNlOwotCi0gICAgaWYgKCFiYWNraW5nU3RvcmUuc2V0QnVmZmVyVm9sYXRp
bGl0eShSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6QnVmZmVyVHlwZTo6QmFjaywgdHJ1ZSkpCi0g
ICAgICAgIHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSA9IGZhbHNlOwotCi0g
ICAgaWYgKCFtX3JlYWNoYWJsZUJhY2tpbmdTdG9yZUluTGF0ZXN0Rmx1c2guY29udGFpbnMoJmJh
Y2tpbmdTdG9yZSkgfHwgKHZvbGF0aWxpdHlNYXJraW5nRmxhZ3MgJiBNYXJrQnVmZmVyc0lnbm9y
aW5nUmVhY2hhYmlsaXR5KSkgewotICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZS5zZXRCdWZmZXJW
b2xhdGlsaXR5KFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpCdWZmZXJUeXBlOjpGcm9udCwgdHJ1
ZSkpCi0gICAgICAgICAgICBzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGUgPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZv
bGF0aWxlOwotfQotCi1ib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6bWFy
a0JhY2tpbmdTdG9yZVZvbGF0aWxlKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlJiBiYWNraW5nU3Rv
cmUsIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbm93KQotewotICAgIGlm
IChub3cgLSBiYWNraW5nU3RvcmUubGFzdERpc3BsYXlUaW1lKCkgPCB2b2xhdGlsZUJhY2tpbmdT
dG9yZUFnZVRocmVzaG9sZCkgewotICAgICAgICBpZiAobm93IC0gYmFja2luZ1N0b3JlLmxhc3RE
aXNwbGF5VGltZSgpID49IHZvbGF0aWxlU2Vjb25kYXJ5QmFja2luZ1N0b3JlQWdlVGhyZXNob2xk
KQotICAgICAgICAgICAgYmFja2luZ1N0b3JlLnNldEJ1ZmZlclZvbGF0aWxpdHkoUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmU6OkJ1ZmZlclR5cGU6OlNlY29uZGFyeUJhY2ssIHRydWUpOwotCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG1hcmtCYWNraW5nU3Rv
cmVWb2xhdGlsZUltbWVkaWF0ZWx5KGJhY2tpbmdTdG9yZSk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9uOjpiYWNraW5nU3RvcmVCZWNhbWVVbnJlYWNoYWJsZShS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlKQotewotICAgIEFTU0VSVChiYWNr
aW5nU3RvcmUubGF5ZXIoKSk7Ci0KLSAgICBhdXRvIGJhY2tpbmdTdG9yZUl0ZXIgPSBtX2xpdmVC
YWNraW5nU3RvcmUuZmluZCgmYmFja2luZ1N0b3JlKTsKLSAgICBpZiAoYmFja2luZ1N0b3JlSXRl
ciA9PSBtX2xpdmVCYWNraW5nU3RvcmUuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Vu
cGFyZW50ZWRCYWNraW5nU3RvcmUuYWRkKCZiYWNraW5nU3RvcmUpOwotICAgIG1fbGl2ZUJhY2tp
bmdTdG9yZS5yZW1vdmUoYmFja2luZ1N0b3JlSXRlcik7Ci0KLSAgICAvLyBUaGlzIHdpbGwgbm90
IHN1Y2NlZWQgaW4gbWFya2luZyBhbGwgYnVmZmVycyBhcyB2b2xhdGlsZSwgYmVjYXVzZSB0aGUg
Y29tbWl0IHVucGFyZW50aW5nIHRoZSBsYXllciBoYXNuJ3QKLSAgICAvLyBtYWRlIGl0IHRvIHRo
ZSBVSSBwcm9jZXNzIHlldC4gVGhlIHZvbGF0aWxpdHkgdGltZXIgd2lsbCBmaW5pc2ggbWFya2lu
ZyB0aGUgcmVtYWluaW5nIGJ1ZmZlcnMgbGF0ZXIuCi0gICAgbWFya0JhY2tpbmdTdG9yZVZvbGF0
aWxlSW1tZWRpYXRlbHkoYmFja2luZ1N0b3JlKTsKLX0KLQotYm9vbCBSZW1vdGVMYXllckJhY2tp
bmdTdG9yZUNvbGxlY3Rpb246Om1hcmtBbGxCYWNraW5nU3RvcmVWb2xhdGlsZUltbWVkaWF0ZWx5
SWZQb3NzaWJsZSgpCi17Ci0gICAgYm9vbCBzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9s
YXRpbGUgPSB0cnVlOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBiYWNraW5nU3RvcmUgOiBtX2xp
dmVCYWNraW5nU3RvcmUpCi0gICAgICAgIHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5nU3RvcmVWb2xh
dGlsZSAmPSBtYXJrQmFja2luZ1N0b3JlVm9sYXRpbGVJbW1lZGlhdGVseSgqYmFja2luZ1N0b3Jl
LCBNYXJrQnVmZmVyc0lnbm9yaW5nUmVhY2hhYmlsaXR5KTsKLQotICAgIGZvciAoY29uc3QgYXV0
byYgYmFja2luZ1N0b3JlIDogbV91bnBhcmVudGVkQmFja2luZ1N0b3JlKQotICAgICAgICBzdWNj
ZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGUgJj0gbWFya0JhY2tpbmdTdG9yZVZvbGF0
aWxlSW1tZWRpYXRlbHkoKmJhY2tpbmdTdG9yZSwgTWFya0J1ZmZlcnNJZ25vcmluZ1JlYWNoYWJp
bGl0eSk7Ci0KLSAgICByZXR1cm4gc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0aWxl
OwotfQotCi12b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlQ29sbGVjdGlvbjo6dm9sYXRpbGl0
eVRpbWVyRmlyZWQoKQotewotICAgIGJvb2wgc3VjY2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZv
bGF0aWxlID0gdHJ1ZTsKLQotICAgIGF1dG8gbm93ID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9j
azo6bm93KCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBiYWNraW5nU3RvcmUgOiBtX2xpdmVCYWNr
aW5nU3RvcmUpCi0gICAgICAgIHN1Y2Nlc3NmdWxseU1hZGVCYWNraW5nU3RvcmVWb2xhdGlsZSAm
PSBtYXJrQmFja2luZ1N0b3JlVm9sYXRpbGUoKmJhY2tpbmdTdG9yZSwgbm93KTsKLQotICAgIGZv
ciAoY29uc3QgYXV0byYgYmFja2luZ1N0b3JlIDogbV91bnBhcmVudGVkQmFja2luZ1N0b3JlKQot
ICAgICAgICBzdWNjZXNzZnVsbHlNYWRlQmFja2luZ1N0b3JlVm9sYXRpbGUgJj0gbWFya0JhY2tp
bmdTdG9yZVZvbGF0aWxlSW1tZWRpYXRlbHkoKmJhY2tpbmdTdG9yZSk7Ci0KLSAgICBpZiAoc3Vj
Y2Vzc2Z1bGx5TWFkZUJhY2tpbmdTdG9yZVZvbGF0aWxlKQotICAgICAgICBtX3ZvbGF0aWxpdHlU
aW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9u
OjpzY2hlZHVsZVZvbGF0aWxpdHlUaW1lcigpCi17Ci0gICAgaWYgKG1fdm9sYXRpbGl0eVRpbWVy
LmlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdm9sYXRpbGl0eVRpbWVyLnN0
YXJ0UmVwZWF0aW5nKHZvbGF0aWxpdHlUaW1lckludGVydmFsKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvUmVtb3RlTGF5
ZXJUcmVlUHJvcGVydHlBcHBsaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvUmVtb3Rl
TGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDMwMWJhOTEwOGZhNWNmNGM5NzhlODMzZjVmYmE1YTMxMjBjMjJlOGUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L1JlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiTGF5ZXJSZXBy
ZXNlbnRhdGlvbi5oIgotI2luY2x1ZGUgIlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgiCi0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFJl
bW90ZUxheWVyVHJlZUhvc3Q7Ci0KLWNsYXNzIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGll
ciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6
OlBsYXRmb3JtTGF5ZXJJRCwgTGF5ZXJPclZpZXcgKj4gUmVsYXRlZExheWVyTWFwOwotICAgIHN0
YXRpYyB2b2lkIGFwcGx5UHJvcGVydGllcyhDQUxheWVyICosIFJlbW90ZUxheWVyVHJlZUhvc3Qq
LCBjb25zdCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzJiwgY29u
c3QgUmVsYXRlZExheWVyTWFwJiwgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OkxheWVyQ29udGVu
dHNUeXBlKTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgc3RhdGljIHZvaWQgYXBwbHlQcm9wZXJ0
aWVzKFVJVmlldyAqLCBSZW1vdGVMYXllclRyZWVIb3N0KiwgY29uc3QgUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyYsIGNvbnN0IFJlbGF0ZWRMYXllck1hcCYsIFJl
bW90ZUxheWVyQmFja2luZ1N0b3JlOjpMYXllckNvbnRlbnRzVHlwZSk7Ci0jZW5kaWYKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL1JlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbSBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL21hYy9SZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW0KZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGFiMTE1OWM4ZDY0NTc5NjNjM2Q1OTExNjUzNjE3OWU4MGRmYjQ4OGEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbQorKysgL2Rl
di9udWxsCkBAIC0xLDM0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaCIKLQotI2ltcG9ydCAi
UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oIgotI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyUmVt
b3RlLmgiCi0jaW1wb3J0ICJSZW1vdGVMYXllclRyZWVIb3N0LmgiCi0jaW1wb3J0IDxRdWFydHpD
b3JlL1F1YXJ0ekNvcmUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1DQUZpbHRlcnMuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWVNYWMuaD4KLSNpbXBvcnQgPHBhbC9zcGkv
Y29jb2EvUXVhcnR6Q29yZVNQSS5oPgotI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMu
aD4KLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgotI2ltcG9y
dCA8VUlLaXRTUEkuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9TKQotQGludGVyZmFjZSBV
SVZpZXcgKFdLVUlWaWV3VXRpbGl0aWVzKQotLSAodm9pZClfd2ViX3NldFN1YnZpZXdzOihOU0Fy
cmF5ICopc3Vidmlld3M7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBVSVZpZXcgKFdLVUlWaWV3
VXRpbGl0aWVzKQotCi0tICh2b2lkKV93ZWJfc2V0U3Vidmlld3M6KE5TQXJyYXkgKiluZXdTdWJ2
aWV3cwotewotICAgIE5TVUludGVnZXIgbnVtT2xkU3Vidmlld3MgPSBzZWxmLnN1YnZpZXdzLmNv
dW50OwotICAgIE5TVUludGVnZXIgbnVtTmV3U3Vidmlld3MgPSBuZXdTdWJ2aWV3cy5jb3VudDsK
LQotICAgIE5TVUludGVnZXIgY3VyckluZGV4ID0gMDsKLSAgICBmb3IgKGN1cnJJbmRleCA9IDA7
IGN1cnJJbmRleCA8IG51bU5ld1N1YnZpZXdzOyArK2N1cnJJbmRleCkgewotICAgICAgICBVSVZp
ZXcgKmN1cnJOZXdTdWJ2aWV3ID0gW25ld1N1YnZpZXdzIG9iamVjdEF0SW5kZXg6Y3VyckluZGV4
XTsKLQotICAgICAgICBpZiAoY3VyckluZGV4IDwgbnVtT2xkU3Vidmlld3MpIHsKLSAgICAgICAg
ICAgIFVJVmlldyAqZXhpc3RpbmdTdWJ2aWV3ID0gW3NlbGYuc3Vidmlld3Mgb2JqZWN0QXRJbmRl
eDpjdXJySW5kZXhdOwotICAgICAgICAgICAgaWYgKGV4aXN0aW5nU3VidmlldyA9PSBjdXJyTmV3
U3VidmlldykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIE5ldyBvciBtb3ZlZCBzdWJ2aWV3LgotICAgICAgICBbc2VsZiBpbnNlcnRTdWJ2aWV3OmN1
cnJOZXdTdWJ2aWV3IGF0SW5kZXg6Y3VyckluZGV4XTsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUg
dmlld3MgYXQgdGhlIGVuZC4KLSAgICBOU1VJbnRlZ2VyIHJlbWFpbmluZ1N1YnZpZXdzID0gc2Vs
Zi5zdWJ2aWV3cy5jb3VudDsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IGN1cnJJbmRleDsgaSA8
IHJlbWFpbmluZ1N1YnZpZXdzOyArK2kpCi0gICAgICAgIFtbc2VsZi5zdWJ2aWV3cyBvYmplY3RB
dEluZGV4OmN1cnJJbmRleF0gcmVtb3ZlRnJvbVN1cGVydmlld107Ci0KLSAgICBBU1NFUlQoW3Nl
bGYuc3Vidmlld3MgaXNFcXVhbFRvQXJyYXk6bmV3U3Vidmlld3NdKTsKLX0KLQotQGVuZAotI2Vu
ZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
c3RhdGljIENHQ29sb3JSZWYgY2dDb2xvckZyb21Db2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17
Ci0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBy
ZXR1cm4gY2FjaGVkQ0dDb2xvcihjb2xvcik7Ci19Ci0KLXN0YXRpYyBOU1N0cmluZyAqdG9DQUZp
bHRlclR5cGUoUGxhdGZvcm1DQUxheWVyOjpGaWx0ZXJUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxpbmVhcjoKLSAgICAgICAgcmV0
dXJuIGtDQUZpbHRlckxpbmVhcjsKLSAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TmVhcmVzdDoK
LSAgICAgICAgcmV0dXJuIGtDQUZpbHRlck5lYXJlc3Q7Ci0gICAgY2FzZSBQbGF0Zm9ybUNBTGF5
ZXI6OlRyaWxpbmVhcjoKLSAgICAgICAgcmV0dXJuIGtDQUZpbHRlclRyaWxpbmVhcjsKLSAgICB9
OwotICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1z
dGF0aWMgdm9pZCB1cGRhdGVDdXN0b21BcHBlYXJhbmNlKENBTGF5ZXIgKmxheWVyLCBHcmFwaGlj
c0xheWVyOjpDdXN0b21BcHBlYXJhbmNlIGN1c3RvbUFwcGVhcmFuY2UpCi17Ci0jaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQotICAgIHN3aXRjaCAoY3VzdG9tQXBwZWFyYW5jZSkgewotICAgIGNh
c2UgR3JhcGhpY3NMYXllcjo6Tm9DdXN0b21BcHBlYXJhbmNlOgotICAgIGNhc2UgR3JhcGhpY3NM
YXllcjo6RGFya0JhY2tkcm9wQXBwZWFyYW5jZToKLSAgICBjYXNlIEdyYXBoaWNzTGF5ZXI6Okxp
Z2h0QmFja2Ryb3BBcHBlYXJhbmNlOgotICAgICAgICBTY3JvbGxiYXJUaGVtZU1hYzo6cmVtb3Zl
T3ZlcmhhbmdBcmVhQmFja2dyb3VuZChsYXllcik7Ci0gICAgICAgIFNjcm9sbGJhclRoZW1lTWFj
OjpyZW1vdmVPdmVyaGFuZ0FyZWFTaGFkb3cobGF5ZXIpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzTGF5ZXI6OlNjcm9sbGluZ092ZXJoYW5nOgotICAgICAgICBTY3JvbGxiYXJU
aGVtZU1hYzo6c2V0VXBPdmVyaGFuZ0FyZWFCYWNrZ3JvdW5kKGxheWVyKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0xheWVyOjpTY3JvbGxpbmdTaGFkb3c6Ci0gICAgICAgIFNj
cm9sbGJhclRoZW1lTWFjOjpzZXRVcE92ZXJoYW5nQXJlYVNoYWRvdyhsYXllcik7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGN1c3RvbUFwcGVhcmFuY2Up
OwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGFwcGx5UHJvcGVydGllc1RvTGF5ZXIoQ0FMYXll
ciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIGNvbnN0IFJlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXMmIHByb3BlcnRpZXMsIFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlOjpMYXllckNvbnRlbnRzVHlwZSBsYXllckNvbnRlbnRzVHlwZSkK
LXsKLSAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uOjpOYW1lQ2hhbmdlZCkKLSAgICAgICAgbGF5ZXIubmFtZSA9IHByb3BlcnRp
ZXMubmFtZTsKLQotICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb246OlBvc2l0aW9uQ2hhbmdlZCkgewotICAgICAgICBsYXllci5w
b3NpdGlvbiA9IENHUG9pbnRNYWtlKHByb3BlcnRpZXMucG9zaXRpb24ueCgpLCBwcm9wZXJ0aWVz
LnBvc2l0aW9uLnkoKSk7Ci0gICAgICAgIGxheWVyLnpQb3NpdGlvbiA9IHByb3BlcnRpZXMucG9z
aXRpb24ueigpOwotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVz
ICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkFuY2hvclBvaW50Q2hhbmdlZCkgewotICAg
ICAgICBsYXllci5hbmNob3JQb2ludCA9IENHUG9pbnRNYWtlKHByb3BlcnRpZXMuYW5jaG9yUG9p
bnQueCgpLCBwcm9wZXJ0aWVzLmFuY2hvclBvaW50LnkoKSk7Ci0gICAgICAgIGxheWVyLmFuY2hv
clBvaW50WiA9IHByb3BlcnRpZXMuYW5jaG9yUG9pbnQueigpOwotICAgIH0KLQotICAgIGlmIChw
cm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
OkJvdW5kc0NoYW5nZWQpCi0gICAgICAgIGxheWVyLmJvdW5kcyA9IHByb3BlcnRpZXMuYm91bmRz
OwotICAgIAotICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb246OkJhY2tncm91bmRDb2xvckNoYW5nZWQpCi0gICAgICAgIGxheWVy
LmJhY2tncm91bmRDb2xvciA9IGNnQ29sb3JGcm9tQ29sb3IocHJvcGVydGllcy5iYWNrZ3JvdW5k
Q29sb3IpOwotCi0gICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbjo6Qm9yZGVyQ29sb3JDaGFuZ2VkKQotICAgICAgICBsYXllci5i
b3JkZXJDb2xvciA9IGNnQ29sb3JGcm9tQ29sb3IocHJvcGVydGllcy5ib3JkZXJDb2xvcik7Ci0K
LSAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uOjpCb3JkZXJXaWR0aENoYW5nZWQpCi0gICAgICAgIGxheWVyLmJvcmRlcldpZHRo
ID0gcHJvcGVydGllcy5ib3JkZXJXaWR0aDsKLQotICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQ
cm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246Ok9wYWNpdHlDaGFuZ2VkKQot
ICAgICAgICBsYXllci5vcGFjaXR5ID0gcHJvcGVydGllcy5vcGFjaXR5OwotCi0gICAgaWYgKHBy
b3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6
VHJhbnNmb3JtQ2hhbmdlZCkKLSAgICAgICAgbGF5ZXIudHJhbnNmb3JtID0gcHJvcGVydGllcy50
cmFuc2Zvcm0gPyAoQ0FUcmFuc2Zvcm0zRCkqcHJvcGVydGllcy50cmFuc2Zvcm0uZ2V0KCkgOiBD
QVRyYW5zZm9ybTNESWRlbnRpdHk7Ci0KLSAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVy
dGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpTdWJsYXllclRyYW5zZm9ybUNoYW5n
ZWQpCi0gICAgICAgIGxheWVyLnN1YmxheWVyVHJhbnNmb3JtID0gcHJvcGVydGllcy5zdWJsYXll
clRyYW5zZm9ybSA/IChDQVRyYW5zZm9ybTNEKSpwcm9wZXJ0aWVzLnN1YmxheWVyVHJhbnNmb3Jt
LmdldCgpIDogQ0FUcmFuc2Zvcm0zRElkZW50aXR5OwotCi0gICAgaWYgKHByb3BlcnRpZXMuY2hh
bmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6SGlkZGVuQ2hhbmdl
ZCkKLSAgICAgICAgbGF5ZXIuaGlkZGVuID0gcHJvcGVydGllcy5oaWRkZW47Ci0KLSAgICBpZiAo
cHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
OjpHZW9tZXRyeUZsaXBwZWRDaGFuZ2VkKQotICAgICAgICBsYXllci5nZW9tZXRyeUZsaXBwZWQg
PSBwcm9wZXJ0aWVzLmdlb21ldHJ5RmxpcHBlZDsKLQotICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5n
ZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkRvdWJsZVNpZGVkQ2hh
bmdlZCkKLSAgICAgICAgbGF5ZXIuZG91YmxlU2lkZWQgPSBwcm9wZXJ0aWVzLmRvdWJsZVNpZGVk
OwotCi0gICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbjo6TWFza3NUb0JvdW5kc0NoYW5nZWQpCi0gICAgICAgIGxheWVyLm1hc2tz
VG9Cb3VuZHMgPSBwcm9wZXJ0aWVzLm1hc2tzVG9Cb3VuZHM7Ci0KLSAgICBpZiAocHJvcGVydGll
cy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpPcGFxdWVD
aGFuZ2VkKQotICAgICAgICBsYXllci5vcGFxdWUgPSBwcm9wZXJ0aWVzLm9wYXF1ZTsKLQotICAg
IGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb246OkNvbnRlbnRzUmVjdENoYW5nZWQpCi0gICAgICAgIGxheWVyLmNvbnRlbnRzUmVjdCA9
IHByb3BlcnRpZXMuY29udGVudHNSZWN0OwotCi0gICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFBy
b3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q29udGVudHNTY2FsZUNoYW5n
ZWQpIHsKLSAgICAgICAgbGF5ZXIuY29udGVudHNTY2FsZSA9IHByb3BlcnRpZXMuY29udGVudHNT
Y2FsZTsKLSAgICAgICAgbGF5ZXIucmFzdGVyaXphdGlvblNjYWxlID0gcHJvcGVydGllcy5jb250
ZW50c1NjYWxlOwotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVz
ICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNvcm5lclJhZGl1c0NoYW5nZWQpCi0gICAg
ICAgIGxheWVyLmNvcm5lclJhZGl1cyA9IHByb3BlcnRpZXMuY29ybmVyUmFkaXVzOwotCi0gICAg
aWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbjo6U2hhcGVSb3VuZGVkUmVjdENoYW5nZWQpIHsKLSAgICAgICAgUGF0aCBwYXRoOwotICAg
ICAgICBpZiAocHJvcGVydGllcy5zaGFwZVJvdW5kZWRSZWN0KQotICAgICAgICAgICAgcGF0aC5h
ZGRSb3VuZGVkUmVjdCgqcHJvcGVydGllcy5zaGFwZVJvdW5kZWRSZWN0KTsKLSAgICAgICAgQVNT
RVJUKFtsYXllciBpc0tpbmRPZkNsYXNzOltDQVNoYXBlTGF5ZXIgY2xhc3NdXSk7Ci0gICAgICAg
IFsoQ0FTaGFwZUxheWVyICopbGF5ZXIgc2V0UGF0aDpwYXRoLnBsYXRmb3JtUGF0aCgpXTsKLSAg
ICB9Ci0KLSAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uOjpTaGFwZVBhdGhDaGFuZ2VkKSB7Ci0gICAgICAgIEFTU0VSVChbbGF5
ZXIgaXNLaW5kT2ZDbGFzczpbQ0FTaGFwZUxheWVyIGNsYXNzXV0pOwotICAgICAgICBbKENBU2hh
cGVMYXllciAqKWxheWVyIHNldFBhdGg6cHJvcGVydGllcy5zaGFwZVBhdGgucGxhdGZvcm1QYXRo
KCldOwotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVt
b3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246Ok1pbmlmaWNhdGlvbkZpbHRlckNoYW5nZWQpCi0gICAg
ICAgIGxheWVyLm1pbmlmaWNhdGlvbkZpbHRlciA9IHRvQ0FGaWx0ZXJUeXBlKHByb3BlcnRpZXMu
bWluaWZpY2F0aW9uRmlsdGVyKTsKLQotICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0
aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246Ok1hZ25pZmljYXRpb25GaWx0ZXJDaGFu
Z2VkKQotICAgICAgICBsYXllci5tYWduaWZpY2F0aW9uRmlsdGVyID0gdG9DQUZpbHRlclR5cGUo
cHJvcGVydGllcy5tYWduaWZpY2F0aW9uRmlsdGVyKTsKLQotICAgIGlmIChwcm9wZXJ0aWVzLmNo
YW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkJsZW5kTW9kZUNo
YW5nZWQpCi0gICAgICAgIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRCbGVuZGluZ0ZpbHRlcnNPbkxh
eWVyKGxheWVyLCBwcm9wZXJ0aWVzLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAocHJvcGVydGllcy5j
aGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpXaW5kUnVsZUNo
YW5nZWQpIHsKLSAgICAgICAgQVNTRVJUKFtsYXllciBpc0tpbmRPZkNsYXNzOltDQVNoYXBlTGF5
ZXIgY2xhc3NdXSk7Ci0gICAgICAgIENBU2hhcGVMYXllciAqc2hhcGVMYXllciA9IChDQVNoYXBl
TGF5ZXIgKilsYXllcjsKLSAgICAgICAgc3dpdGNoIChwcm9wZXJ0aWVzLndpbmRSdWxlKSB7Ci0g
ICAgICAgIGNhc2UgUlVMRV9OT05aRVJPOgotICAgICAgICAgICAgc2hhcGVMYXllci5maWxsUnVs
ZSA9IEAibm9uLXplcm8iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUlVMRV9F
VkVOT0REOgotICAgICAgICAgICAgc2hhcGVMYXllci5maWxsUnVsZSA9IEAiZXZlbi1vZGQiOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJvcGVydGll
cy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpTcGVlZENo
YW5nZWQpCi0gICAgICAgIGxheWVyLnNwZWVkID0gcHJvcGVydGllcy5zcGVlZDsKLQotICAgIGlm
IChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b246OlRpbWVPZmZzZXRDaGFuZ2VkKQotICAgICAgICBsYXllci50aW1lT2Zmc2V0ID0gcHJvcGVy
dGllcy50aW1lT2Zmc2V0OwotCi0gICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMg
JiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6QmFja2luZ1N0b3JlQ2hhbmdlZAotICAgICAg
ICB8fCBwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb246OkJhY2tpbmdTdG9yZUF0dGFjaG1lbnRDaGFuZ2VkKQotICAgIHsKLSAgICAgICAgUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSA9IHByb3BlcnRpZXMuYmFja2luZ1N0
b3JlLmdldCgpOwotICAgICAgICBpZiAoYmFja2luZ1N0b3JlICYmIHByb3BlcnRpZXMuYmFja2lu
Z1N0b3JlQXR0YWNoZWQpCi0gICAgICAgICAgICBiYWNraW5nU3RvcmUtPmFwcGx5QmFja2luZ1N0
b3JlVG9MYXllcihsYXllciwgbGF5ZXJDb250ZW50c1R5cGUpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGxheWVyLmNvbnRlbnRzID0gbmlsOwotICAgICAgICAgICAgbGF5ZXIuY29udGVu
dHNPcGFxdWUgPSBOTzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0aWVzLmNo
YW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkZpbHRlcnNDaGFu
Z2VkKQotICAgICAgICBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIobGF5ZXIs
IHByb3BlcnRpZXMuZmlsdGVycyA/ICpwcm9wZXJ0aWVzLmZpbHRlcnMgOiBGaWx0ZXJPcGVyYXRp
b25zKCkpOwotCi0gICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbjo6QW5pbWF0aW9uc0NoYW5nZWQpCi0gICAgICAgIFBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGU6OnVwZGF0ZUxheWVyQW5pbWF0aW9ucyhsYXllciwgbGF5ZXJUcmVl
SG9zdCwgcHJvcGVydGllcy5hZGRlZEFuaW1hdGlvbnMsIHByb3BlcnRpZXMua2V5UGF0aHNPZkFu
aW1hdGlvbnNUb1JlbW92ZSk7Ci0KLSAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGll
cyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpFZGdlQW50aWFsaWFzaW5nTWFza0NoYW5n
ZWQpCi0gICAgICAgIGxheWVyLmVkZ2VBbnRpYWxpYXNpbmdNYXNrID0gcHJvcGVydGllcy5lZGdl
QW50aWFsaWFzaW5nTWFzazsKLQotICAgIGlmIChwcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVz
ICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkN1c3RvbUFwcGVhcmFuY2VDaGFuZ2VkKQot
ICAgICAgICB1cGRhdGVDdXN0b21BcHBlYXJhbmNlKGxheWVyLCBwcm9wZXJ0aWVzLmN1c3RvbUFw
cGVhcmFuY2UpOwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllcjo6YXBw
bHlQcm9wZXJ0aWVzKENBTGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRy
ZWVIb3N0LCBjb25zdCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVz
JiBwcm9wZXJ0aWVzLCBjb25zdCBSZWxhdGVkTGF5ZXJNYXAmIHJlbGF0ZWRMYXllcnMsIFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlOjpMYXllckNvbnRlbnRzVHlwZSBsYXllckNvbnRlbnRzVHlwZSkK
LXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgYXBwbHlQcm9wZXJ0aWVz
VG9MYXllcihsYXllciwgbGF5ZXJUcmVlSG9zdCwgcHJvcGVydGllcywgbGF5ZXJDb250ZW50c1R5
cGUpOwotCi0gICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXll
clRyZWVUcmFuc2FjdGlvbjo6Q2hpbGRyZW5DaGFuZ2VkKSB7Ci0gICAgICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gY2hpbGRyZW4gPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6cHJvcGVydGllcy5jaGlsZHJlbi5zaXplKCldKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBjaGlsZCA6IHByb3BlcnRpZXMuY2hpbGRyZW4pIHsKLSAgICAgICAgICAgIEFT
U0VSVChyZWxhdGVkTGF5ZXJzLmdldChjaGlsZCkpOwotICAgICAgICAgICAgW2NoaWxkcmVuIGFk
ZE9iamVjdDpyZWxhdGVkTGF5ZXJzLmdldChjaGlsZCldOwotICAgICAgICB9Ci0KLSAgICAgICAg
bGF5ZXIuc3VibGF5ZXJzID0gY2hpbGRyZW4uZ2V0KCk7Ci0gICAgfQotCi0gICAgaWYgKHByb3Bl
cnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TWFz
a0xheWVyQ2hhbmdlZCkgewotICAgICAgICBpZiAoIXByb3BlcnRpZXMubWFza0xheWVySUQpCi0g
ICAgICAgICAgICBsYXllci5tYXNrID0gbnVsbHB0cjsKLSAgICAgICAgZWxzZSB7Ci0jaWYgUExB
VEZPUk0oSU9TKQotICAgICAgICAgICAgVUlWaWV3ICptYXNrVmlldyA9IHJlbGF0ZWRMYXllcnMu
Z2V0KHByb3BlcnRpZXMubWFza0xheWVySUQpOwotICAgICAgICAgICAgLy8gRklYTUU6IG5lZWQg
dG8gY2hlY2sgdGhhdCB0aGUgbWFzayB2aWV3IGlzIGtlcHQgYWxpdmUuCi0gICAgICAgICAgICBB
U1NFUlQoIW1hc2tWaWV3LmxheWVyLnN1cGVybGF5ZXIpOwotICAgICAgICAgICAgaWYgKCFtYXNr
Vmlldy5sYXllci5zdXBlcmxheWVyKQotICAgICAgICAgICAgICAgIGxheWVyLm1hc2sgPSBtYXNr
Vmlldy5sYXllcjsKLSNlbHNlCi0gICAgICAgICAgICBDQUxheWVyICptYXNrTGF5ZXIgPSByZWxh
dGVkTGF5ZXJzLmdldChwcm9wZXJ0aWVzLm1hc2tMYXllcklEKTsKLSAgICAgICAgICAgIEFTU0VS
VCghbWFza0xheWVyLnN1cGVybGF5ZXIpOwotICAgICAgICAgICAgaWYgKCFtYXNrTGF5ZXIuc3Vw
ZXJsYXllcikKLSAgICAgICAgICAgICAgICBsYXllci5tYXNrID0gbWFza0xheWVyOwotI2VuZGlm
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQot
I2lmIFBMQVRGT1JNKElPUykKLXZvaWQgUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyOjph
cHBseVByb3BlcnRpZXMoVUlWaWV3ICp2aWV3LCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRy
ZWVIb3N0LCBjb25zdCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVz
JiBwcm9wZXJ0aWVzLCBjb25zdCBSZWxhdGVkTGF5ZXJNYXAmIHJlbGF0ZWRMYXllcnMsIFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlOjpMYXllckNvbnRlbnRzVHlwZSBsYXllckNvbnRlbnRzVHlwZSkK
LXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgYXBwbHlQcm9wZXJ0aWVz
VG9MYXllcih2aWV3LmxheWVyLCBsYXllclRyZWVIb3N0LCBwcm9wZXJ0aWVzLCBsYXllckNvbnRl
bnRzVHlwZSk7Ci0KLSAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpDaGlsZHJlbkNoYW5nZWQpIHsKLSAgICAgICAgUmV0YWlu
UHRyPE5TTXV0YWJsZUFycmF5PiBjaGlsZHJlbiA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhDYXBhY2l0eTpwcm9wZXJ0aWVzLmNoaWxkcmVuLnNpemUoKV0pOwotICAg
ICAgICBmb3IgKGF1dG8mIGNoaWxkIDogcHJvcGVydGllcy5jaGlsZHJlbikgewotICAgICAgICAg
ICAgQVNTRVJUKHJlbGF0ZWRMYXllcnMuZ2V0KGNoaWxkKSk7Ci0gICAgICAgICAgICBbY2hpbGRy
ZW4gYWRkT2JqZWN0OnJlbGF0ZWRMYXllcnMuZ2V0KGNoaWxkKV07Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAocHJvcGVydGllcy5jdXN0b21BcHBlYXJhbmNlID09IEdyYXBoaWNzTGF5ZXI6Okxp
Z2h0QmFja2Ryb3BBcHBlYXJhbmNlIHx8IHByb3BlcnRpZXMuY3VzdG9tQXBwZWFyYW5jZSA9PSBH
cmFwaGljc0xheWVyOjpEYXJrQmFja2Ryb3BBcHBlYXJhbmNlKSB7Ci0gICAgICAgICAgICAvLyBU
aGlzIGlzIGEgVUlCYWNrZHJvcFZpZXcsIHdoaWNoIHNob3VsZCBoYXZlIGNoaWxkcmVuIGF0dGFj
aGVkIHRvCi0gICAgICAgICAgICAvLyBpdHMgY29udGVudCB2aWV3LCBub3QgZGlyZWN0bHkgb24g
aXRzIGxheWVycy4KLSAgICAgICAgICAgIFtbKF9VSUJhY2tkcm9wVmlldyopdmlldyBjb250ZW50
Vmlld10gX3dlYl9zZXRTdWJ2aWV3czpjaGlsZHJlbi5nZXQoKV07Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgW3ZpZXcgX3dlYl9zZXRTdWJ2aWV3czpjaGlsZHJlbi5nZXQoKV07Ci0gICAg
fQotCi0gICAgaWYgKHByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbjo6TWFza0xheWVyQ2hhbmdlZCkgewotICAgICAgICBDQUxheWVyICptYXNr
T3duZXJMYXllciA9IHZpZXcubGF5ZXI7Ci0KLSAgICAgICAgaWYgKHByb3BlcnRpZXMuY3VzdG9t
QXBwZWFyYW5jZSA9PSBHcmFwaGljc0xheWVyOjpMaWdodEJhY2tkcm9wQXBwZWFyYW5jZSB8fCBw
cm9wZXJ0aWVzLmN1c3RvbUFwcGVhcmFuY2UgPT0gR3JhcGhpY3NMYXllcjo6RGFya0JhY2tkcm9w
QXBwZWFyYW5jZSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFVJQmFja2Ryb3BWaWV3LCB3
aGljaCBtZWFucyBhbnkgbWFzayBtdXN0IGJlIGFwcGxpZWQgdG8gdGhlIENBQmFja2Ryb3BMYXll
ciByYXRoZXIKLSAgICAgICAgICAgIC8vIHRoYXQgdGhlIHZpZXcncyBsYXllci4gVGhlIGJhY2tk
cm9wIGlzIHRoZSBmaXJzdCBsYXllciBjaGlsZC4KLSAgICAgICAgICAgIGlmICh2aWV3LmxheWVy
LnN1YmxheWVycy5jb3VudCAmJiBbdmlldy5sYXllci5zdWJsYXllcnNbMF0gaXNLaW5kT2ZDbGFz
czpbQ0FCYWNrZHJvcExheWVyIGNsYXNzXV0pCi0gICAgICAgICAgICAgICAgbWFza093bmVyTGF5
ZXIgPSB2aWV3LmxheWVyLnN1YmxheWVyc1swXTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
cHJvcGVydGllcy5tYXNrTGF5ZXJJRCkKLSAgICAgICAgICAgIG1hc2tPd25lckxheWVyLm1hc2sg
PSBudWxscHRyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFVJVmlldyAqbWFza1ZpZXcg
PSByZWxhdGVkTGF5ZXJzLmdldChwcm9wZXJ0aWVzLm1hc2tMYXllcklEKTsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIG1hc2sgdmlldyBpcyBrZXB0IGFsaXZl
LgotICAgICAgICAgICAgQVNTRVJUKCFtYXNrVmlldy5sYXllci5zdXBlcmxheWVyKTsKLSAgICAg
ICAgICAgIGlmICghbWFza1ZpZXcubGF5ZXIuc3VwZXJsYXllcikKLSAgICAgICAgICAgICAgICBt
YXNrT3duZXJMYXllci5tYXNrID0gbWFza1ZpZXcubGF5ZXI7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAocHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIChSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6Q29udGVudHNIaWRkZW5DaGFuZ2VkIHwgUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb246OlVzZXJJbnRlcmFjdGlvbkVuYWJsZWRDaGFuZ2VkKSkKLSAgICAgICAgdmlldy51c2Vy
SW50ZXJhY3Rpb25FbmFibGVkID0gIXByb3BlcnRpZXMuY29udGVudHNIaWRkZW4gJiYgcHJvcGVy
dGllcy51c2VySW50ZXJhY3Rpb25FbmFibGVkOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliZjJmMDg4YzgyNzBhZGFjZTNiMjQyNzBhYTZlNDQz
ODAwN2ZiNGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwzMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb25faAotI2RlZmluZSBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlv
bl9oCi0KLSNpbmNsdWRlICJFZGl0b3JTdGF0ZS5oIgotI2luY2x1ZGUgIkdlbmVyaWNDYWxsYmFj
ay5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUuaCIKLSNpbmNsdWRlICJS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0ZpbHRlck9wZXJhdGlvbnMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0UG9pbnQzRC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9MYXlvdXRNaWxlc3RvbmVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNB
TGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIElQQyB7Ci1jbGFzcyBEZWNvZGVyOwotY2xhc3MgRW5jb2RlcjsKLX0KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBsYXRmb3JtQ0FMYXllclJlbW90ZTsKLQotY2xh
c3MgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24gewotcHVibGljOgotICAgIGVudW0gTGF5ZXJD
aGFuZ2VzIHsKLSAgICAgICAgTm9DaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCi0g
ICAgICAgIE5hbWVDaGFuZ2VkICAgICAgICAgICAgICAgICAgICAgPSAxTExVIDw8IDEsCi0gICAg
ICAgIENoaWxkcmVuQ2hhbmdlZCAgICAgICAgICAgICAgICAgPSAxTExVIDw8IDIsCi0gICAgICAg
IFBvc2l0aW9uQ2hhbmdlZCAgICAgICAgICAgICAgICAgPSAxTExVIDw8IDMsCi0gICAgICAgIEJv
dW5kc0NoYW5nZWQgICAgICAgICAgICAgICAgICAgPSAxTExVIDw8IDQsCi0gICAgICAgIEJhY2tn
cm91bmRDb2xvckNoYW5nZWQgICAgICAgICAgPSAxTExVIDw8IDUsCi0gICAgICAgIEFuY2hvclBv
aW50Q2hhbmdlZCAgICAgICAgICAgICAgPSAxTExVIDw8IDYsCi0gICAgICAgIEJvcmRlcldpZHRo
Q2hhbmdlZCAgICAgICAgICAgICAgPSAxTExVIDw8IDcsCi0gICAgICAgIEJvcmRlckNvbG9yQ2hh
bmdlZCAgICAgICAgICAgICAgPSAxTExVIDw8IDgsCi0gICAgICAgIE9wYWNpdHlDaGFuZ2VkICAg
ICAgICAgICAgICAgICAgPSAxTExVIDw8IDksCi0gICAgICAgIFRyYW5zZm9ybUNoYW5nZWQgICAg
ICAgICAgICAgICAgPSAxTExVIDw8IDEwLAotICAgICAgICBTdWJsYXllclRyYW5zZm9ybUNoYW5n
ZWQgICAgICAgID0gMUxMVSA8PCAxMSwKLSAgICAgICAgSGlkZGVuQ2hhbmdlZCAgICAgICAgICAg
ICAgICAgICA9IDFMTFUgPDwgMTIsCi0gICAgICAgIEdlb21ldHJ5RmxpcHBlZENoYW5nZWQgICAg
ICAgICAgPSAxTExVIDw8IDEzLAotICAgICAgICBEb3VibGVTaWRlZENoYW5nZWQgICAgICAgICAg
ICAgID0gMUxMVSA8PCAxNCwKLSAgICAgICAgTWFza3NUb0JvdW5kc0NoYW5nZWQgICAgICAgICAg
ICA9IDFMTFUgPDwgMTUsCi0gICAgICAgIE9wYXF1ZUNoYW5nZWQgICAgICAgICAgICAgICAgICAg
PSAxTExVIDw8IDE2LAotICAgICAgICBDb250ZW50c0hpZGRlbkNoYW5nZWQgICAgICAgICAgID0g
MUxMVSA8PCAxNywKLSAgICAgICAgTWFza0xheWVyQ2hhbmdlZCAgICAgICAgICAgICAgICA9IDFM
TFUgPDwgMTgsCi0gICAgICAgIENsb25lZENvbnRlbnRzQ2hhbmdlZCAgICAgICAgICAgPSAxTExV
IDw8IDE5LAotICAgICAgICBDb250ZW50c1JlY3RDaGFuZ2VkICAgICAgICAgICAgID0gMUxMVSA8
PCAyMCwKLSAgICAgICAgQ29udGVudHNTY2FsZUNoYW5nZWQgICAgICAgICAgICA9IDFMTFUgPDwg
MjEsCi0gICAgICAgIENvcm5lclJhZGl1c0NoYW5nZWQgICAgICAgICAgICAgPSAxTExVIDw8IDIy
LAotICAgICAgICBTaGFwZVJvdW5kZWRSZWN0Q2hhbmdlZCAgICAgICAgID0gMUxMVSA8PCAyMywK
LSAgICAgICAgU2hhcGVQYXRoQ2hhbmdlZCAgICAgICAgICAgICAgICA9IDFMTFUgPDwgMjQsCi0g
ICAgICAgIE1pbmlmaWNhdGlvbkZpbHRlckNoYW5nZWQgICAgICAgPSAxTExVIDw8IDI1LAotICAg
ICAgICBNYWduaWZpY2F0aW9uRmlsdGVyQ2hhbmdlZCAgICAgID0gMUxMVSA8PCAyNiwKLSAgICAg
ICAgQmxlbmRNb2RlQ2hhbmdlZCAgICAgICAgICAgICAgICA9IDFMTFUgPDwgMjcsCi0gICAgICAg
IFdpbmRSdWxlQ2hhbmdlZCAgICAgICAgICAgICAgICAgPSAxTExVIDw8IDI4LAotICAgICAgICBT
cGVlZENoYW5nZWQgICAgICAgICAgICAgICAgICAgID0gMUxMVSA8PCAyOSwKLSAgICAgICAgVGlt
ZU9mZnNldENoYW5nZWQgICAgICAgICAgICAgICA9IDFMTFUgPDwgMzAsCi0gICAgICAgIEJhY2tp
bmdTdG9yZUNoYW5nZWQgICAgICAgICAgICAgPSAxTExVIDw8IDMxLAotICAgICAgICBCYWNraW5n
U3RvcmVBdHRhY2htZW50Q2hhbmdlZCAgID0gMUxMVSA8PCAzMiwKLSAgICAgICAgRmlsdGVyc0No
YW5nZWQgICAgICAgICAgICAgICAgICA9IDFMTFUgPDwgMzMsCi0gICAgICAgIEFuaW1hdGlvbnND
aGFuZ2VkICAgICAgICAgICAgICAgPSAxTExVIDw8IDM0LAotICAgICAgICBFZGdlQW50aWFsaWFz
aW5nTWFza0NoYW5nZWQgICAgID0gMUxMVSA8PCAzNSwKLSAgICAgICAgQ3VzdG9tQXBwZWFyYW5j
ZUNoYW5nZWQgICAgICAgICA9IDFMTFUgPDwgMzYsCi0gICAgICAgIFVzZXJJbnRlcmFjdGlvbkVu
YWJsZWRDaGFuZ2VkICAgPSAxTExVIDw8IDM3LAotICAgIH07Ci0gICAgdHlwZWRlZiB1aW50NjRf
dCBMYXllckNoYW5nZTsKLQotICAgIHN0cnVjdCBMYXllckNyZWF0aW9uUHJvcGVydGllcyB7Ci0g
ICAgICAgIExheWVyQ3JlYXRpb25Qcm9wZXJ0aWVzKCk7Ci0KLSAgICAgICAgdm9pZCBlbmNvZGUo
SVBDOjpFbmNvZGVyJikgY29uc3Q7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkRl
Y29kZXImLCBMYXllckNyZWF0aW9uUHJvcGVydGllcyYpOwotCi0gICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklEOwotICAgICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlOwotCi0gICAgICAgIHVpbnQzMl90IGhvc3Rp
bmdDb250ZXh0SUQ7Ci0gICAgICAgIGZsb2F0IGhvc3RpbmdEZXZpY2VTY2FsZUZhY3RvcjsKLSAg
ICB9OwotCi0gICAgc3RydWN0IExheWVyUHJvcGVydGllcyB7Ci0gICAgICAgIExheWVyUHJvcGVy
dGllcygpOwotICAgICAgICBMYXllclByb3BlcnRpZXMoY29uc3QgTGF5ZXJQcm9wZXJ0aWVzJiBv
dGhlcik7Ci0KLSAgICAgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7Ci0gICAg
ICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkRlY29kZXImLCBMYXllclByb3BlcnRpZXMmKTsK
LQotICAgICAgICB2b2lkIG5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChMYXllckNoYW5nZSBjaGFuZ2VG
bGFncykKLSAgICAgICAgewotICAgICAgICAgICAgY2hhbmdlZFByb3BlcnRpZXMgfD0gY2hhbmdl
RmxhZ3M7Ci0gICAgICAgICAgICBldmVyQ2hhbmdlZFByb3BlcnRpZXMgfD0gY2hhbmdlRmxhZ3M7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlc2V0Q2hhbmdlZFByb3BlcnRpZXMoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjaGFuZ2VkUHJvcGVydGllcyA9IFJlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uOjpOb0NoYW5nZTsKLSAgICAgICAgfQotCi0gICAgICAgIExheWVyQ2hhbmdlIGNo
YW5nZWRQcm9wZXJ0aWVzOwotICAgICAgICBMYXllckNoYW5nZSBldmVyQ2hhbmdlZFByb3BlcnRp
ZXM7Ci0KLSAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gdHJhbnNmb3JtOwotICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg+IHN1YmxheWVyVHJhbnNmb3JtOwot
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdD4gc2hhcGVS
b3VuZGVkUmVjdDsKLQotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxh
dGZvcm1MYXllcklEPiBjaGlsZHJlbjsKLQotICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmlu
ZywgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6UHJvcGVydGllcz4+IGFkZGVkQW5pbWF0aW9u
czsKLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IGtleVBhdGhzT2ZBbmltYXRpb25zVG9SZW1vdmU7
Ci0KLSAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludDNEIHBvc2l0aW9uOwotICAgICAgICBXZWJD
b3JlOjpGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7Ci0gICAgICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCBib3VuZHM7Ci0gICAgICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjb250ZW50c1JlY3Q7Ci0gICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVMYXllckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
OwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucz4gZmls
dGVyczsKLSAgICAgICAgV2ViQ29yZTo6UGF0aCBzaGFwZVBhdGg7Ci0gICAgICAgIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBtYXNrTGF5ZXJJRDsKLSAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGNsb25lZExheWVySUQ7Ci0gICAg
ICAgIGRvdWJsZSB0aW1lT2Zmc2V0OwotICAgICAgICBmbG9hdCBzcGVlZDsKLSAgICAgICAgZmxv
YXQgY29udGVudHNTY2FsZTsKLSAgICAgICAgZmxvYXQgY29ybmVyUmFkaXVzOwotICAgICAgICBm
bG9hdCBib3JkZXJXaWR0aDsKLSAgICAgICAgZmxvYXQgb3BhY2l0eTsKLSAgICAgICAgV2ViQ29y
ZTo6Q29sb3IgYmFja2dyb3VuZENvbG9yOwotICAgICAgICBXZWJDb3JlOjpDb2xvciBib3JkZXJD
b2xvcjsKLSAgICAgICAgdW5zaWduZWQgZWRnZUFudGlhbGlhc2luZ01hc2s7Ci0gICAgICAgIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkN1c3RvbUFwcGVhcmFuY2UgY3VzdG9tQXBwZWFyYW5jZTsK
LSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpGaWx0ZXJUeXBlIG1pbmlmaWNhdGlv
bkZpbHRlcjsKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpGaWx0ZXJUeXBlIG1h
Z25pZmljYXRpb25GaWx0ZXI7Ci0gICAgICAgIFdlYkNvcmU6OkJsZW5kTW9kZSBibGVuZE1vZGU7
Ci0gICAgICAgIFdlYkNvcmU6OldpbmRSdWxlIHdpbmRSdWxlOwotICAgICAgICBib29sIGhpZGRl
bjsKLSAgICAgICAgYm9vbCBiYWNraW5nU3RvcmVBdHRhY2hlZDsKLSAgICAgICAgYm9vbCBnZW9t
ZXRyeUZsaXBwZWQ7Ci0gICAgICAgIGJvb2wgZG91YmxlU2lkZWQ7Ci0gICAgICAgIGJvb2wgbWFz
a3NUb0JvdW5kczsKLSAgICAgICAgYm9vbCBvcGFxdWU7Ci0gICAgICAgIGJvb2wgY29udGVudHNI
aWRkZW47Ci0gICAgICAgIGJvb2wgdXNlckludGVyYWN0aW9uRW5hYmxlZDsKLSAgICB9OwotCi0g
ICAgZXhwbGljaXQgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24oKTsKLSAgICB+UmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb24oKTsKLQotICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNv
bnN0OwotICAgIHN0YXRpYyBib29sIGRlY29kZShJUEM6OkRlY29kZXImLCBSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbiYpOwotCi0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1M
YXllcklEIHJvb3RMYXllcklEKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXJJRDsgfQotICAg
IHZvaWQgc2V0Um9vdExheWVySUQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXll
cklEKTsKLSAgICB2b2lkIGxheWVyUHJvcGVydGllc0NoYW5nZWQoUGxhdGZvcm1DQUxheWVyUmVt
b3RlJik7Ci0gICAgdm9pZCBzZXRDcmVhdGVkTGF5ZXJzKFZlY3RvcjxMYXllckNyZWF0aW9uUHJv
cGVydGllcz4pOwotICAgIHZvaWQgc2V0RGVzdHJveWVkTGF5ZXJJRHMoVmVjdG9yPFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4pOwotICAgIHZvaWQgc2V0TGF5ZXJJRHNX
aXRoTmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZShWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NM
YXllcjo6UGxhdGZvcm1MYXllcklEPik7Ci0KLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0df
RElTQUJMRUQKLSAgICBXVEY6OkNTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKLSAgICB2b2lk
IGR1bXAoKSBjb25zdDsKLSNlbmRpZgotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgc3RkOjp1bmlxdWVfcHRyPExheWVyUHJvcGVy
dGllcz4+IExheWVyUHJvcGVydGllc01hcDsKLQotICAgIFZlY3RvcjxMYXllckNyZWF0aW9uUHJv
cGVydGllcz4gY3JlYXRlZExheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fY3JlYXRlZExheWVyczsg
fQotICAgIFZlY3RvcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IGRl
c3Ryb3llZExheWVycygpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdHJveWVkTGF5ZXJJRHM7IH0KLSAg
ICBWZWN0b3I8V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBsYXllcklE
c1dpdGhOZXdseVVucmVhY2hhYmxlQmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9sYXll
cklEc1dpdGhOZXdseVVucmVhY2hhYmxlQmFja2luZ1N0b3JlOyB9Ci0KLSAgICBWZWN0b3I8UmVm
UHRyPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4+JiBjaGFuZ2VkTGF5ZXJzKCkgeyByZXR1cm4gbV9j
aGFuZ2VkTGF5ZXJzOyB9Ci0KLSAgICBjb25zdCBMYXllclByb3BlcnRpZXNNYXAmIGNoYW5nZWRM
YXllclByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZWRMYXllclByb3BlcnRpZXM7
IH0KLSAgICBMYXllclByb3BlcnRpZXNNYXAmIGNoYW5nZWRMYXllclByb3BlcnRpZXMoKSB7IHJl
dHVybiBtX2NoYW5nZWRMYXllclByb3BlcnRpZXM7IH0KLQotICAgIFdlYkNvcmU6OkludFNpemUg
Y29udGVudHNTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1NpemU7IH0KLSAgICB2b2lk
IHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKSB7IG1fY29udGVu
dHNTaXplID0gc2l6ZTsgfTsKLQotICAgIFdlYkNvcmU6OkludFBvaW50IHNjcm9sbE9yaWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT3JpZ2luOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxPcmln
aW4oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG9yaWdpbikgeyBtX3Njcm9sbE9yaWdpbiA9IG9y
aWdpbjsgfTsKLQotICAgIFdlYkNvcmU6OkxheW91dFNpemUgYmFzZUxheW91dFZpZXdwb3J0U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUxheW91dFZpZXdwb3J0U2l6ZTsgfQotICAgIHZvaWQg
c2V0QmFzZUxheW91dFZpZXdwb3J0U2l6ZShjb25zdCBXZWJDb3JlOjpMYXlvdXRTaXplJiBzaXpl
KSB7IG1fYmFzZUxheW91dFZpZXdwb3J0U2l6ZSA9IHNpemU7IH07Ci0gICAgCi0gICAgV2ViQ29y
ZTo6TGF5b3V0UG9pbnQgbWluU3RhYmxlTGF5b3V0Vmlld3BvcnRPcmlnaW4oKSBjb25zdCB7IHJl
dHVybiBtX21pblN0YWJsZUxheW91dFZpZXdwb3J0T3JpZ2luOyB9Ci0gICAgdm9pZCBzZXRNaW5T
dGFibGVMYXlvdXRWaWV3cG9ydE9yaWdpbihjb25zdCBXZWJDb3JlOjpMYXlvdXRQb2ludCYgcG9p
bnQpIHsgbV9taW5TdGFibGVMYXlvdXRWaWV3cG9ydE9yaWdpbiA9IHBvaW50OyB9OwotICAgIAot
ICAgIFdlYkNvcmU6OkxheW91dFBvaW50IG1heFN0YWJsZUxheW91dFZpZXdwb3J0T3JpZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhTdGFibGVMYXlvdXRWaWV3cG9ydE9yaWdpbjsgfQotICAgIHZv
aWQgc2V0TWF4U3RhYmxlTGF5b3V0Vmlld3BvcnRPcmlnaW4oY29uc3QgV2ViQ29yZTo6TGF5b3V0
UG9pbnQmIHBvaW50KSB7IG1fbWF4U3RhYmxlTGF5b3V0Vmlld3BvcnRPcmlnaW4gPSBwb2ludDsg
fTsKLSAgICAKLSAgICBXZWJDb3JlOjpDb2xvciBwYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdCB7IHJldHVybiBtX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcjsgfQotICAgIHZv
aWQgc2V0UGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OkNvbG9yIGNvbG9yKSB7
IG1fcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yID0gY29sb3I7IH0KLQotI2lmIFBMQVRGT1JN
KE1BQykKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KLSAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKFdlYkNv
cmU6OkludFBvaW50IHApIHsgbV9zY3JvbGxQb3NpdGlvbiA9IHA7IH0KLSNlbmRpZgotCi0gICAg
ZG91YmxlIHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVNjYWxlRmFjdG9y
OyB9Ci0gICAgdm9pZCBzZXRQYWdlU2NhbGVGYWN0b3IoZG91YmxlIHBhZ2VTY2FsZUZhY3Rvcikg
eyBtX3BhZ2VTY2FsZUZhY3RvciA9IHBhZ2VTY2FsZUZhY3RvcjsgfQotCi0gICAgYm9vbCBzY2Fs
ZVdhc1NldEJ5VUlQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZVdhc1NldEJ5VUlQcm9j
ZXNzOyB9Ci0gICAgdm9pZCBzZXRTY2FsZVdhc1NldEJ5VUlQcm9jZXNzKGJvb2wgc2NhbGVXYXNT
ZXRCeVVJUHJvY2VzcykgeyBtX3NjYWxlV2FzU2V0QnlVSVByb2Nlc3MgPSBzY2FsZVdhc1NldEJ5
VUlQcm9jZXNzOyB9Ci0gICAgCi0gICAgdWludDY0X3QgcmVuZGVyVHJlZVNpemUoKSBjb25zdCB7
IHJldHVybiBtX3JlbmRlclRyZWVTaXplOyB9Ci0gICAgdm9pZCBzZXRSZW5kZXJUcmVlU2l6ZSh1
aW50NjRfdCByZW5kZXJUcmVlU2l6ZSkgeyBtX3JlbmRlclRyZWVTaXplID0gcmVuZGVyVHJlZVNp
emU7IH0KLQotICAgIGRvdWJsZSBtaW5pbXVtU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X21pbmltdW1TY2FsZUZhY3RvcjsgfQotICAgIHZvaWQgc2V0TWluaW11bVNjYWxlRmFjdG9yKGRv
dWJsZSBzY2FsZSkgeyBtX21pbmltdW1TY2FsZUZhY3RvciA9IHNjYWxlOyB9Ci0KLSAgICBkb3Vi
bGUgbWF4aW11bVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtU2NhbGVGYWN0
b3I7IH0KLSAgICB2b2lkIHNldE1heGltdW1TY2FsZUZhY3Rvcihkb3VibGUgc2NhbGUpIHsgbV9t
YXhpbXVtU2NhbGVGYWN0b3IgPSBzY2FsZTsgfQotCi0gICAgZG91YmxlIGluaXRpYWxTY2FsZUZh
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbFNjYWxlRmFjdG9yOyB9Ci0gICAgdm9pZCBz
ZXRJbml0aWFsU2NhbGVGYWN0b3IoZG91YmxlIHNjYWxlKSB7IG1faW5pdGlhbFNjYWxlRmFjdG9y
ID0gc2NhbGU7IH0KLQotICAgIGRvdWJsZSB2aWV3cG9ydE1ldGFUYWdXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmlld3BvcnRNZXRhVGFnV2lkdGg7IH0KLSAgICB2b2lkIHNldFZpZXdwb3J0TWV0
YVRhZ1dpZHRoKGRvdWJsZSB3aWR0aCkgeyBtX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoID0gd2lkdGg7
IH0KLQotICAgIGJvb2wgdmlld3BvcnRNZXRhVGFnV2lkdGhXYXNFeHBsaWNpdCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmlld3BvcnRNZXRhVGFnV2lkdGhXYXNFeHBsaWNpdDsgfQotICAgIHZvaWQgc2V0
Vmlld3BvcnRNZXRhVGFnV2lkdGhXYXNFeHBsaWNpdChib29sIHdpZHRoV2FzRXhwbGljaXQpIHsg
bV92aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxpY2l0ID0gd2lkdGhXYXNFeHBsaWNpdDsgfQot
Ci0gICAgYm9vbCB2aWV3cG9ydE1ldGFUYWdDYW1lRnJvbUltYWdlRG9jdW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX3ZpZXdwb3J0TWV0YVRhZ0NhbWVGcm9tSW1hZ2VEb2N1bWVudDsgfQotICAgIHZv
aWQgc2V0Vmlld3BvcnRNZXRhVGFnQ2FtZUZyb21JbWFnZURvY3VtZW50KGJvb2wgY2FtZUZyb21J
bWFnZURvY3VtZW50KSB7IG1fdmlld3BvcnRNZXRhVGFnQ2FtZUZyb21JbWFnZURvY3VtZW50ID0g
Y2FtZUZyb21JbWFnZURvY3VtZW50OyB9Ci0KLSAgICBib29sIGlzSW5TdGFibGVTdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNJblN0YWJsZVN0YXRlOyB9Ci0gICAgdm9pZCBzZXRJc0luU3RhYmxl
U3RhdGUoYm9vbCBpc0luU3RhYmxlU3RhdGUpIHsgbV9pc0luU3RhYmxlU3RhdGUgPSBpc0luU3Rh
YmxlU3RhdGU7IH0KLQotICAgIGJvb2wgYWxsb3dzVXNlclNjYWxpbmcoKSBjb25zdCB7IHJldHVy
biBtX2FsbG93c1VzZXJTY2FsaW5nOyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NVc2VyU2NhbGluZyhi
b29sIGFsbG93c1VzZXJTY2FsaW5nKSB7IG1fYWxsb3dzVXNlclNjYWxpbmcgPSBhbGxvd3NVc2Vy
U2NhbGluZzsgfQotCi0gICAgYm9vbCBhdm9pZHNVbnNhZmVBcmVhKCkgY29uc3QgeyByZXR1cm4g
bV9hdm9pZHNVbnNhZmVBcmVhOyB9Ci0gICAgdm9pZCBzZXRBdm9pZHNVbnNhZmVBcmVhKGJvb2wg
YXZvaWRzVW5zYWZlQXJlYSkgeyBtX2F2b2lkc1Vuc2FmZUFyZWEgPSBhdm9pZHNVbnNhZmVBcmVh
OyB9Ci0KLSAgICB1aW50NjRfdCB0cmFuc2FjdGlvbklEKCkgY29uc3QgeyByZXR1cm4gbV90cmFu
c2FjdGlvbklEOyB9Ci0gICAgdm9pZCBzZXRUcmFuc2FjdGlvbklEKHVpbnQ2NF90IHRyYW5zYWN0
aW9uSUQpIHsgbV90cmFuc2FjdGlvbklEID0gdHJhbnNhY3Rpb25JRDsgfQotCi0gICAgdHlwZWRl
ZiBDYWxsYmFja0lEIFRyYW5zYWN0aW9uQ2FsbGJhY2tJRDsKLSAgICBjb25zdCBWZWN0b3I8VHJh
bnNhY3Rpb25DYWxsYmFja0lEPiYgY2FsbGJhY2tJRHMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxi
YWNrSURzOyB9Ci0gICAgdm9pZCBzZXRDYWxsYmFja0lEcyhWZWN0b3I8VHJhbnNhY3Rpb25DYWxs
YmFja0lEPiYmIGNhbGxiYWNrSURzKSB7IG1fY2FsbGJhY2tJRHMgPSBXVEZNb3ZlKGNhbGxiYWNr
SURzKTsgfQotCi0gICAgV2ViQ29yZTo6TGF5b3V0TWlsZXN0b25lcyBuZXdseVJlYWNoZWRMYXlv
dXRNaWxlc3RvbmVzKCkgY29uc3QgeyByZXR1cm4gbV9uZXdseVJlYWNoZWRMYXlvdXRNaWxlc3Rv
bmVzOyB9Ci0gICAgdm9pZCBzZXROZXdseVJlYWNoZWRMYXlvdXRNaWxlc3RvbmVzKFdlYkNvcmU6
OkxheW91dE1pbGVzdG9uZXMgbWlsZXN0b25lcykgeyBtX25ld2x5UmVhY2hlZExheW91dE1pbGVz
dG9uZXMgPSBtaWxlc3RvbmVzOyB9Ci0KLSAgICBib29sIGhhc0VkaXRvclN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gISFtX2VkaXRvclN0YXRlOyB9Ci0gICAgY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRv
clN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3JTdGF0ZS52YWx1ZSgpOyB9Ci0gICAgdm9p
ZCBzZXRFZGl0b3JTdGF0ZShjb25zdCBFZGl0b3JTdGF0ZSYgZWRpdG9yU3RhdGUpIHsgbV9lZGl0
b3JTdGF0ZSA9IGVkaXRvclN0YXRlOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBtX3Jvb3RMYXllcklEOwotICAgIFZlY3RvcjxS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPj4gbV9jaGFuZ2VkTGF5ZXJzOyAvLyBPbmx5IHVz
ZWQgaW4gdGhlIFdlYiBwcm9jZXNzLgotICAgIExheWVyUHJvcGVydGllc01hcCBtX2NoYW5nZWRM
YXllclByb3BlcnRpZXM7IC8vIE9ubHkgdXNlZCBpbiB0aGUgVUkgcHJvY2Vzcy4KLQotICAgIFZl
Y3RvcjxMYXllckNyZWF0aW9uUHJvcGVydGllcz4gbV9jcmVhdGVkTGF5ZXJzOwotICAgIFZlY3Rv
cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQ+IG1fZGVzdHJveWVkTGF5
ZXJJRHM7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJ
RD4gbV92aWRlb0xheWVySURzUGVuZGluZ0Z1bGxzY3JlZW47Ci0gICAgVmVjdG9yPFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4gbV9sYXllcklEc1dpdGhOZXdseVVucmVh
Y2hhYmxlQmFja2luZ1N0b3JlOwotCi0gICAgVmVjdG9yPFRyYW5zYWN0aW9uQ2FsbGJhY2tJRD4g
bV9jYWxsYmFja0lEczsKLQotICAgIFdlYkNvcmU6OkludFNpemUgbV9jb250ZW50c1NpemU7Ci0g
ICAgV2ViQ29yZTo6SW50UG9pbnQgbV9zY3JvbGxPcmlnaW47Ci0gICAgV2ViQ29yZTo6TGF5b3V0
U2l6ZSBtX2Jhc2VMYXlvdXRWaWV3cG9ydFNpemU7Ci0gICAgV2ViQ29yZTo6TGF5b3V0UG9pbnQg
bV9taW5TdGFibGVMYXlvdXRWaWV3cG9ydE9yaWdpbjsKLSAgICBXZWJDb3JlOjpMYXlvdXRQb2lu
dCBtX21heFN0YWJsZUxheW91dFZpZXdwb3J0T3JpZ2luOwotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICBXZWJDb3JlOjpJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwotI2VuZGlmCi0gICAgV2ViQ29y
ZTo6Q29sb3IgbV9wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3I7Ci0gICAgZG91YmxlIG1fcGFn
ZVNjYWxlRmFjdG9yIHsgMSB9OwotICAgIGRvdWJsZSBtX21pbmltdW1TY2FsZUZhY3RvciB7IDEg
fTsKLSAgICBkb3VibGUgbV9tYXhpbXVtU2NhbGVGYWN0b3IgeyAxIH07Ci0gICAgZG91YmxlIG1f
aW5pdGlhbFNjYWxlRmFjdG9yIHsgMSB9OwotICAgIGRvdWJsZSBtX3ZpZXdwb3J0TWV0YVRhZ1dp
ZHRoIHsgLTEgfTsKLSAgICB1aW50NjRfdCBtX3JlbmRlclRyZWVTaXplIHsgMCB9OwotICAgIHVp
bnQ2NF90IG1fdHJhbnNhY3Rpb25JRCB7IDAgfTsKLSAgICBXZWJDb3JlOjpMYXlvdXRNaWxlc3Rv
bmVzIG1fbmV3bHlSZWFjaGVkTGF5b3V0TWlsZXN0b25lcyB7IDAgfTsKLSAgICBib29sIG1fc2Nh
bGVXYXNTZXRCeVVJUHJvY2VzcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2FsbG93c1VzZXJTY2Fs
aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYXZvaWRzVW5zYWZlQXJlYSB7IHRydWUgfTsKLSAg
ICBib29sIG1fdmlld3BvcnRNZXRhVGFnV2lkdGhXYXNFeHBsaWNpdCB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBtX3ZpZXdwb3J0TWV0YVRhZ0NhbWVGcm9tSW1hZ2VEb2N1bWVudCB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2lzSW5TdGFibGVTdGF0ZSB7IGZhbHNlIH07Ci0KLSAgICBzdGQ6Om9wdGlvbmFs
PEVkaXRvclN0YXRlPiBtX2VkaXRvclN0YXRlIHsgc3RkOjpudWxsb3B0IH07Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbi5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk0ZjRlOWI1NDAz
ZmY3YjY0NGRmYmZhYzJlZmQyODc2NzRlYWEwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24ubW0KKysrIC9kZXYvbnVsbApAQCAtMSw5NDIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb24uaCIKLQotI2ltcG9ydCAiQXJndW1lbnRDb2RlcnMuaCIKLSNpbXBvcnQgIlBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGUuaCIKLSNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllclJlbW90ZS5oIgot
I2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW1wb3J0IDxRdWFydHpDb3JlL1F1
YXJ0ekNvcmUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTGVuZ3RoRnVuY3Rpb25zLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1RpbWluZ0Z1bmN0aW9uLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0jaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
OkxheWVyQ3JlYXRpb25Qcm9wZXJ0aWVzOjpMYXllckNyZWF0aW9uUHJvcGVydGllcygpCi0gICAg
OiBsYXllcklEKDApCi0gICAgLCB0eXBlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIp
Ci0gICAgLCBob3N0aW5nQ29udGV4dElEKDApCi0gICAgLCBob3N0aW5nRGV2aWNlU2NhbGVGYWN0
b3IoMSkKLXsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJDcmVh
dGlvblByb3BlcnRpZXM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0g
ICAgZW5jb2RlciA8PCBsYXllcklEOwotICAgIGVuY29kZXIuZW5jb2RlRW51bSh0eXBlKTsKLSAg
ICBlbmNvZGVyIDw8IGhvc3RpbmdDb250ZXh0SUQ7Ci0gICAgZW5jb2RlciA8PCBob3N0aW5nRGV2
aWNlU2NhbGVGYWN0b3I7Ci19Ci0KLWJvb2wgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246Okxh
eWVyQ3JlYXRpb25Qcm9wZXJ0aWVzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBMYXll
ckNyZWF0aW9uUHJvcGVydGllcyYgcmVzdWx0KQotewotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LmxheWVySUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRW51bShyZXN1bHQudHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmhvc3RpbmdDb250ZXh0SUQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ob3N0aW5nRGV2
aWNlU2NhbGVGYWN0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllczo6TGF5
ZXJQcm9wZXJ0aWVzKCkKLSAgICA6IGNoYW5nZWRQcm9wZXJ0aWVzKE5vQ2hhbmdlKQotICAgICwg
ZXZlckNoYW5nZWRQcm9wZXJ0aWVzKE5vQ2hhbmdlKQotICAgICwgYW5jaG9yUG9pbnQoMC41LCAw
LjUsIDApCi0gICAgLCBjb250ZW50c1JlY3QoRmxvYXRQb2ludCgpLCBGbG9hdFNpemUoMSwgMSkp
Ci0gICAgLCBtYXNrTGF5ZXJJRCgwKQotICAgICwgY2xvbmVkTGF5ZXJJRCgwKQotICAgICwgdGlt
ZU9mZnNldCgwKQotICAgICwgc3BlZWQoMSkKLSAgICAsIGNvbnRlbnRzU2NhbGUoMSkKLSAgICAs
IGNvcm5lclJhZGl1cygwKQotICAgICwgYm9yZGVyV2lkdGgoMCkKLSAgICAsIG9wYWNpdHkoMSkK
LSAgICAsIGJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpCi0gICAgLCBib3JkZXJD
b2xvcihDb2xvcjo6YmxhY2spCi0gICAgLCBlZGdlQW50aWFsaWFzaW5nTWFzayhrQ0FMYXllckxl
ZnRFZGdlIHwga0NBTGF5ZXJSaWdodEVkZ2UgfCBrQ0FMYXllckJvdHRvbUVkZ2UgfCBrQ0FMYXll
clRvcEVkZ2UpCi0gICAgLCBjdXN0b21BcHBlYXJhbmNlKEdyYXBoaWNzTGF5ZXI6Ok5vQ3VzdG9t
QXBwZWFyYW5jZSkKLSAgICAsIG1pbmlmaWNhdGlvbkZpbHRlcihQbGF0Zm9ybUNBTGF5ZXI6OkZp
bHRlclR5cGU6OkxpbmVhcikKLSAgICAsIG1hZ25pZmljYXRpb25GaWx0ZXIoUGxhdGZvcm1DQUxh
eWVyOjpGaWx0ZXJUeXBlOjpMaW5lYXIpCi0gICAgLCBibGVuZE1vZGUoQmxlbmRNb2RlTm9ybWFs
KQotICAgICwgd2luZFJ1bGUoUlVMRV9OT05aRVJPKQotICAgICwgaGlkZGVuKGZhbHNlKQotICAg
ICwgYmFja2luZ1N0b3JlQXR0YWNoZWQodHJ1ZSkKLSAgICAsIGdlb21ldHJ5RmxpcHBlZChmYWxz
ZSkKLSAgICAsIGRvdWJsZVNpZGVkKHRydWUpCi0gICAgLCBtYXNrc1RvQm91bmRzKGZhbHNlKQot
ICAgICwgb3BhcXVlKGZhbHNlKQotICAgICwgY29udGVudHNIaWRkZW4oZmFsc2UpCi0gICAgLCB1
c2VySW50ZXJhY3Rpb25FbmFibGVkKHRydWUpCi17Ci19Ci0KLVJlbW90ZUxheWVyVHJlZVRyYW5z
YWN0aW9uOjpMYXllclByb3BlcnRpZXM6OkxheWVyUHJvcGVydGllcyhjb25zdCBMYXllclByb3Bl
cnRpZXMmIG90aGVyKQotICAgIDogY2hhbmdlZFByb3BlcnRpZXMob3RoZXIuY2hhbmdlZFByb3Bl
cnRpZXMpCi0gICAgLCBldmVyQ2hhbmdlZFByb3BlcnRpZXMob3RoZXIuZXZlckNoYW5nZWRQcm9w
ZXJ0aWVzKQotICAgICwgbmFtZShvdGhlci5uYW1lKQotICAgICwgY2hpbGRyZW4ob3RoZXIuY2hp
bGRyZW4pCi0gICAgLCBhZGRlZEFuaW1hdGlvbnMob3RoZXIuYWRkZWRBbmltYXRpb25zKQotICAg
ICwga2V5UGF0aHNPZkFuaW1hdGlvbnNUb1JlbW92ZShvdGhlci5rZXlQYXRoc09mQW5pbWF0aW9u
c1RvUmVtb3ZlKQotICAgICwgcG9zaXRpb24ob3RoZXIucG9zaXRpb24pCi0gICAgLCBhbmNob3JQ
b2ludChvdGhlci5hbmNob3JQb2ludCkKLSAgICAsIGJvdW5kcyhvdGhlci5ib3VuZHMpCi0gICAg
LCBjb250ZW50c1JlY3Qob3RoZXIuY29udGVudHNSZWN0KQotICAgICwgc2hhcGVQYXRoKG90aGVy
LnNoYXBlUGF0aCkKLSAgICAsIG1hc2tMYXllcklEKG90aGVyLm1hc2tMYXllcklEKQotICAgICwg
Y2xvbmVkTGF5ZXJJRChvdGhlci5jbG9uZWRMYXllcklEKQotICAgICwgdGltZU9mZnNldChvdGhl
ci50aW1lT2Zmc2V0KQotICAgICwgc3BlZWQob3RoZXIuc3BlZWQpCi0gICAgLCBjb250ZW50c1Nj
YWxlKG90aGVyLmNvbnRlbnRzU2NhbGUpCi0gICAgLCBjb3JuZXJSYWRpdXMob3RoZXIuY29ybmVy
UmFkaXVzKQotICAgICwgYm9yZGVyV2lkdGgob3RoZXIuYm9yZGVyV2lkdGgpCi0gICAgLCBvcGFj
aXR5KG90aGVyLm9wYWNpdHkpCi0gICAgLCBiYWNrZ3JvdW5kQ29sb3Iob3RoZXIuYmFja2dyb3Vu
ZENvbG9yKQotICAgICwgYm9yZGVyQ29sb3Iob3RoZXIuYm9yZGVyQ29sb3IpCi0gICAgLCBlZGdl
QW50aWFsaWFzaW5nTWFzayhvdGhlci5lZGdlQW50aWFsaWFzaW5nTWFzaykKLSAgICAsIGN1c3Rv
bUFwcGVhcmFuY2Uob3RoZXIuY3VzdG9tQXBwZWFyYW5jZSkKLSAgICAsIG1pbmlmaWNhdGlvbkZp
bHRlcihvdGhlci5taW5pZmljYXRpb25GaWx0ZXIpCi0gICAgLCBtYWduaWZpY2F0aW9uRmlsdGVy
KG90aGVyLm1hZ25pZmljYXRpb25GaWx0ZXIpCi0gICAgLCBibGVuZE1vZGUob3RoZXIuYmxlbmRN
b2RlKQotICAgICwgd2luZFJ1bGUob3RoZXIud2luZFJ1bGUpCi0gICAgLCBoaWRkZW4ob3RoZXIu
aGlkZGVuKQotICAgICwgYmFja2luZ1N0b3JlQXR0YWNoZWQob3RoZXIuYmFja2luZ1N0b3JlQXR0
YWNoZWQpCi0gICAgLCBnZW9tZXRyeUZsaXBwZWQob3RoZXIuZ2VvbWV0cnlGbGlwcGVkKQotICAg
ICwgZG91YmxlU2lkZWQob3RoZXIuZG91YmxlU2lkZWQpCi0gICAgLCBtYXNrc1RvQm91bmRzKG90
aGVyLm1hc2tzVG9Cb3VuZHMpCi0gICAgLCBvcGFxdWUob3RoZXIub3BhcXVlKQotICAgICwgY29u
dGVudHNIaWRkZW4ob3RoZXIuY29udGVudHNIaWRkZW4pCi0gICAgLCB1c2VySW50ZXJhY3Rpb25F
bmFibGVkKG90aGVyLnVzZXJJbnRlcmFjdGlvbkVuYWJsZWQpCi17Ci0gICAgLy8gRklYTUU6IExh
eWVyUHJvcGVydGllcyBzaG91bGQgcmVmZXJlbmNlIGJhY2tpbmcgc3RvcmUgYnkgSUQsIHNvIHRo
YXQgdHdvIGxheWVycyBjYW4gaGF2ZSB0aGUgc2FtZSBiYWNraW5nIHN0b3JlIChmb3IgY2xvbmVz
KS4KLSAgICAvLyBGSVhNRTogTGF5ZXJQcm9wZXJ0aWVzIHNob3VsZG4ndCBiZSBjb3B5YWJsZTsg
UGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjbG9uZSBzaG91bGQgY29weSB0aGUgcmVsZXZhbnQgcHJv
cGVydGllcy4KLQotICAgIGlmIChvdGhlci50cmFuc2Zvcm0pCi0gICAgICAgIHRyYW5zZm9ybSA9
IHN0ZDo6bWFrZV91bmlxdWU8VHJhbnNmb3JtYXRpb25NYXRyaXg+KCpvdGhlci50cmFuc2Zvcm0p
OwotCi0gICAgaWYgKG90aGVyLnN1YmxheWVyVHJhbnNmb3JtKQotICAgICAgICBzdWJsYXllclRy
YW5zZm9ybSA9IHN0ZDo6bWFrZV91bmlxdWU8VHJhbnNmb3JtYXRpb25NYXRyaXg+KCpvdGhlci5z
dWJsYXllclRyYW5zZm9ybSk7Ci0KLSAgICBpZiAob3RoZXIuZmlsdGVycykKLSAgICAgICAgZmls
dGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8RmlsdGVyT3BlcmF0aW9ucz4oKm90aGVyLmZpbHRlcnMp
OwotfQotCi12b2lkIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXM6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2Rlci5lbmNv
ZGVFbnVtKGNoYW5nZWRQcm9wZXJ0aWVzKTsKLQotICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcyAm
IE5hbWVDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IG5hbWU7Ci0KLSAgICBpZiAoY2hhbmdl
ZFByb3BlcnRpZXMgJiBDaGlsZHJlbkNoYW5nZWQpCi0gICAgICAgIGVuY29kZXIgPDwgY2hpbGRy
ZW47Ci0KLSAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBBbmltYXRpb25zQ2hhbmdlZCkgewot
ICAgICAgICBlbmNvZGVyIDw8IGFkZGVkQW5pbWF0aW9uczsKLSAgICAgICAgZW5jb2RlciA8PCBr
ZXlQYXRoc09mQW5pbWF0aW9uc1RvUmVtb3ZlOwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VkUHJv
cGVydGllcyAmIFBvc2l0aW9uQ2hhbmdlZCkKLSAgICAgICAgZW5jb2RlciA8PCBwb3NpdGlvbjsK
LQotICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcyAmIEJvdW5kc0NoYW5nZWQpCi0gICAgICAgIGVu
Y29kZXIgPDwgYm91bmRzOwotCi0gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgQmFja2dyb3Vu
ZENvbG9yQ2hhbmdlZCkKLSAgICAgICAgZW5jb2RlciA8PCBiYWNrZ3JvdW5kQ29sb3I7Ci0KLSAg
ICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBBbmNob3JQb2ludENoYW5nZWQpCi0gICAgICAgIGVu
Y29kZXIgPDwgYW5jaG9yUG9pbnQ7Ci0KLSAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBCb3Jk
ZXJXaWR0aENoYW5nZWQpCi0gICAgICAgIGVuY29kZXIgPDwgYm9yZGVyV2lkdGg7Ci0KLSAgICBp
ZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBCb3JkZXJDb2xvckNoYW5nZWQpCi0gICAgICAgIGVuY29k
ZXIgPDwgYm9yZGVyQ29sb3I7Ci0KLSAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBPcGFjaXR5
Q2hhbmdlZCkKLSAgICAgICAgZW5jb2RlciA8PCBvcGFjaXR5OwotCi0gICAgaWYgKGNoYW5nZWRQ
cm9wZXJ0aWVzICYgVHJhbnNmb3JtQ2hhbmdlZCkKLSAgICAgICAgZW5jb2RlciA8PCAqdHJhbnNm
b3JtOwotCi0gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgU3VibGF5ZXJUcmFuc2Zvcm1DaGFu
Z2VkKQotICAgICAgICBlbmNvZGVyIDw8ICpzdWJsYXllclRyYW5zZm9ybTsKLQotICAgIGlmIChj
aGFuZ2VkUHJvcGVydGllcyAmIEhpZGRlbkNoYW5nZWQpCi0gICAgICAgIGVuY29kZXIgPDwgaGlk
ZGVuOwotCi0gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgR2VvbWV0cnlGbGlwcGVkQ2hhbmdl
ZCkKLSAgICAgICAgZW5jb2RlciA8PCBnZW9tZXRyeUZsaXBwZWQ7Ci0KLSAgICBpZiAoY2hhbmdl
ZFByb3BlcnRpZXMgJiBEb3VibGVTaWRlZENoYW5nZWQpCi0gICAgICAgIGVuY29kZXIgPDwgZG91
YmxlU2lkZWQ7Ci0KLSAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBNYXNrc1RvQm91bmRzQ2hh
bmdlZCkKLSAgICAgICAgZW5jb2RlciA8PCBtYXNrc1RvQm91bmRzOwotCi0gICAgaWYgKGNoYW5n
ZWRQcm9wZXJ0aWVzICYgT3BhcXVlQ2hhbmdlZCkKLSAgICAgICAgZW5jb2RlciA8PCBvcGFxdWU7
Ci0KLSAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBDb250ZW50c0hpZGRlbkNoYW5nZWQpCi0g
ICAgICAgIGVuY29kZXIgPDwgY29udGVudHNIaWRkZW47Ci0KLSAgICBpZiAoY2hhbmdlZFByb3Bl
cnRpZXMgJiBNYXNrTGF5ZXJDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IG1hc2tMYXllcklE
OwotCi0gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgQ2xvbmVkQ29udGVudHNDaGFuZ2VkKQot
ICAgICAgICBlbmNvZGVyIDw8IGNsb25lZExheWVySUQ7Ci0KLSAgICBpZiAoY2hhbmdlZFByb3Bl
cnRpZXMgJiBDb250ZW50c1JlY3RDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IGNvbnRlbnRz
UmVjdDsKLQotICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcyAmIENvbnRlbnRzU2NhbGVDaGFuZ2Vk
KQotICAgICAgICBlbmNvZGVyIDw8IGNvbnRlbnRzU2NhbGU7Ci0KLSAgICBpZiAoY2hhbmdlZFBy
b3BlcnRpZXMgJiBDb3JuZXJSYWRpdXNDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IGNvcm5l
clJhZGl1czsKLQotICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcyAmIFNoYXBlUm91bmRlZFJlY3RD
aGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8ICpzaGFwZVJvdW5kZWRSZWN0OwotCi0gICAgaWYg
KGNoYW5nZWRQcm9wZXJ0aWVzICYgU2hhcGVQYXRoQ2hhbmdlZCkKLSAgICAgICAgZW5jb2RlciA8
PCBzaGFwZVBhdGg7Ci0KLSAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBNaW5pZmljYXRpb25G
aWx0ZXJDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0obWluaWZpY2F0aW9uRmls
dGVyKTsKLQotICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcyAmIE1hZ25pZmljYXRpb25GaWx0ZXJD
aGFuZ2VkKQotICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0obWFnbmlmaWNhdGlvbkZpbHRlcik7
Ci0KLSAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBCbGVuZE1vZGVDaGFuZ2VkKQotICAgICAg
ICBlbmNvZGVyLmVuY29kZUVudW0oYmxlbmRNb2RlKTsKLQotICAgIGlmIChjaGFuZ2VkUHJvcGVy
dGllcyAmIFdpbmRSdWxlQ2hhbmdlZCkKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHdpbmRS
dWxlKTsKLQotICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcyAmIFNwZWVkQ2hhbmdlZCkKLSAgICAg
ICAgZW5jb2RlciA8PCBzcGVlZDsKLQotICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcyAmIFRpbWVP
ZmZzZXRDaGFuZ2VkKQotICAgICAgICBlbmNvZGVyIDw8IHRpbWVPZmZzZXQ7Ci0KLSAgICBpZiAo
Y2hhbmdlZFByb3BlcnRpZXMgJiBCYWNraW5nU3RvcmVDaGFuZ2VkKSB7Ci0gICAgICAgIGJvb2wg
aGFzRnJvbnRCdWZmZXIgPSBiYWNraW5nU3RvcmUgJiYgYmFja2luZ1N0b3JlLT5oYXNGcm9udEJ1
ZmZlcigpOwotICAgICAgICBlbmNvZGVyIDw8IGhhc0Zyb250QnVmZmVyOwotICAgICAgICBpZiAo
aGFzRnJvbnRCdWZmZXIpCi0gICAgICAgICAgICBlbmNvZGVyIDw8ICpiYWNraW5nU3RvcmU7Ci0g
ICAgfQotCi0gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzICYgQmFja2luZ1N0b3JlQXR0YWNobWVu
dENoYW5nZWQpCi0gICAgICAgIGVuY29kZXIgPDwgYmFja2luZ1N0b3JlQXR0YWNoZWQ7Ci0KLSAg
ICBpZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBGaWx0ZXJzQ2hhbmdlZCkKLSAgICAgICAgZW5jb2Rl
ciA8PCAqZmlsdGVyczsKLQotICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcyAmIEVkZ2VBbnRpYWxp
YXNpbmdNYXNrQ2hhbmdlZCkKLSAgICAgICAgZW5jb2RlciA8PCBlZGdlQW50aWFsaWFzaW5nTWFz
azsKLQotICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcyAmIEN1c3RvbUFwcGVhcmFuY2VDaGFuZ2Vk
KQotICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0oY3VzdG9tQXBwZWFyYW5jZSk7Ci0KLSAgICBp
ZiAoY2hhbmdlZFByb3BlcnRpZXMgJiBVc2VySW50ZXJhY3Rpb25FbmFibGVkQ2hhbmdlZCkKLSAg
ICAgICAgZW5jb2RlciA8PCB1c2VySW50ZXJhY3Rpb25FbmFibGVkOwotfQotCi1ib29sIFJlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRpZXM6OmRlY29kZShJUEM6OkRlY29k
ZXImIGRlY29kZXIsIExheWVyUHJvcGVydGllcyYgcmVzdWx0KQotewotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVFbnVtKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBOYW1lQ2hhbmdlZCkg
ewotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5uYW1lKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0aWVz
ICYgQ2hpbGRyZW5DaGFuZ2VkKSB7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0
LmNoaWxkcmVuKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBmb3IgKGF1
dG8mIGxheWVySUQgOiByZXN1bHQuY2hpbGRyZW4pIHsKLSAgICAgICAgICAgIGlmICghbGF5ZXJJ
RCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0aWVzICYgQW5pbWF0aW9uc0NoYW5nZWQpIHsKLSAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuYWRkZWRBbmltYXRpb25zKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5rZXlQYXRoc09mQW5pbWF0aW9uc1RvUmVtb3ZlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0aWVzICYgUG9zaXRpb25D
aGFuZ2VkKSB7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnBvc2l0aW9uKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0LmNoYW5n
ZWRQcm9wZXJ0aWVzICYgQm91bmRzQ2hhbmdlZCkgewotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5ib3VuZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBCYWNrZ3JvdW5kQ29sb3JDaGFuZ2Vk
KSB7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmJhY2tncm91bmRDb2xvcikp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdC5jaGFu
Z2VkUHJvcGVydGllcyAmIEFuY2hvclBvaW50Q2hhbmdlZCkgewotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5hbmNob3JQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIEJvcmRlcldpZHRo
Q2hhbmdlZCkgewotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5ib3JkZXJXaWR0
aCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdC5j
aGFuZ2VkUHJvcGVydGllcyAmIEJvcmRlckNvbG9yQ2hhbmdlZCkgewotICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5ib3JkZXJDb2xvcikpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIE9wYWNpdHlD
aGFuZ2VkKSB7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm9wYWNpdHkpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQuY2hhbmdl
ZFByb3BlcnRpZXMgJiBUcmFuc2Zvcm1DaGFuZ2VkKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRyYW5zZm9ybTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0cmFuc2Zvcm0p
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0LnRy
YW5zZm9ybSA9IHN0ZDo6bWFrZV91bmlxdWU8VHJhbnNmb3JtYXRpb25NYXRyaXg+KHRyYW5zZm9y
bSk7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIFN1YmxheWVy
VHJhbnNmb3JtQ2hhbmdlZCkgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm07Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodHJhbnNmb3JtKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXN1bHQuc3VibGF5ZXJUcmFuc2Zvcm0gPSBzdGQ6
Om1ha2VfdW5pcXVlPFRyYW5zZm9ybWF0aW9uTWF0cml4Pih0cmFuc2Zvcm0pOwotICAgIH0KLQot
ICAgIGlmIChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBIaWRkZW5DaGFuZ2VkKSB7Ci0gICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmhpZGRlbikpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIEdl
b21ldHJ5RmxpcHBlZENoYW5nZWQpIHsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuZ2VvbWV0cnlGbGlwcGVkKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0aWVzICYgRG91YmxlU2lkZWRDaGFuZ2VkKSB7
Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRvdWJsZVNpZGVkKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9w
ZXJ0aWVzICYgTWFza3NUb0JvdW5kc0NoYW5nZWQpIHsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQubWFza3NUb0JvdW5kcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIE9wYXF1ZUNoYW5nZWQp
IHsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQub3BhcXVlKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0
aWVzICYgQ29udGVudHNIaWRkZW5DaGFuZ2VkKSB7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LmNvbnRlbnRzSGlkZGVuKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0aWVzICYgTWFza0xheWVyQ2hhbmdl
ZCkgewotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tYXNrTGF5ZXJJRCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdC5jaGFuZ2Vk
UHJvcGVydGllcyAmIENsb25lZENvbnRlbnRzQ2hhbmdlZCkgewotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5jbG9uZWRMYXllcklEKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0aWVzICYgQ29udGVudHNS
ZWN0Q2hhbmdlZCkgewotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50
c1JlY3QpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChyZXN1
bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBDb250ZW50c1NjYWxlQ2hhbmdlZCkgewotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50c1NjYWxlKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0aWVzICYg
Q29ybmVyUmFkaXVzQ2hhbmdlZCkgewotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3Vs
dC5jb3JuZXJSYWRpdXMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBTaGFwZVJvdW5kZWRSZWN0Q2hhbmdlZCkg
ewotICAgICAgICBGbG9hdFJvdW5kZWRSZWN0IHJvdW5kZWRSZWN0OwotICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJvdW5kZWRSZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgCi0gICAgICAgIHJlc3VsdC5zaGFwZVJvdW5kZWRSZWN0ID0gc3RkOjptYWtlX3VuaXF1
ZTxGbG9hdFJvdW5kZWRSZWN0Pihyb3VuZGVkUmVjdCk7Ci0gICAgfQotCi0gICAgaWYgKHJlc3Vs
dC5jaGFuZ2VkUHJvcGVydGllcyAmIFNoYXBlUGF0aENoYW5nZWQpIHsKLSAgICAgICAgUGF0aCBw
YXRoOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhdGgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0LnNoYXBlUGF0aCA9IFdURk1vdmUo
cGF0aCk7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIE1pbmlm
aWNhdGlvbkZpbHRlckNoYW5nZWQpIHsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0o
cmVzdWx0Lm1pbmlmaWNhdGlvbkZpbHRlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIE1hZ25pZmljYXRpb25G
aWx0ZXJDaGFuZ2VkKSB7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHJlc3VsdC5t
YWduaWZpY2F0aW9uRmlsdGVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9wZXJ0aWVzICYgQmxlbmRNb2RlQ2hhbmdlZCkgewot
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQuYmxlbmRNb2RlKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0LmNoYW5nZWRQcm9w
ZXJ0aWVzICYgV2luZFJ1bGVDaGFuZ2VkKSB7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVF
bnVtKHJlc3VsdC53aW5kUnVsZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIFNwZWVkQ2hhbmdlZCkgewotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zcGVlZCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIFRp
bWVPZmZzZXRDaGFuZ2VkKSB7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRp
bWVPZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChy
ZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBCYWNraW5nU3RvcmVDaGFuZ2VkKSB7Ci0gICAgICAg
IGJvb2wgaGFzRnJvbnRCdWZmZXIgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShoYXNGcm9udEJ1ZmZlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
IChoYXNGcm9udEJ1ZmZlcikgewotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlPihudWxscHRyKTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoKmJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICByZXN1bHQuYmFja2luZ1N0b3JlID0gV1RGTW92ZShiYWNraW5n
U3RvcmUpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdC5iYWNraW5nU3RvcmUg
PSBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBC
YWNraW5nU3RvcmVBdHRhY2htZW50Q2hhbmdlZCkgewotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5iYWNraW5nU3RvcmVBdHRhY2hlZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVydGllcyAmIEZpbHRlcnND
aGFuZ2VkKSB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJPcGVyYXRpb25zPiBmaWx0
ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxGaWx0ZXJPcGVyYXRpb25zPigpOwotICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKCpmaWx0ZXJzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgcmVzdWx0LmZpbHRlcnMgPSBXVEZNb3ZlKGZpbHRlcnMpOwotICAgIH0KLQotICAgIGlm
IChyZXN1bHQuY2hhbmdlZFByb3BlcnRpZXMgJiBFZGdlQW50aWFsaWFzaW5nTWFza0NoYW5nZWQp
IHsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZWRnZUFudGlhbGlhc2luZ01h
c2spKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQu
Y2hhbmdlZFByb3BlcnRpZXMgJiBDdXN0b21BcHBlYXJhbmNlQ2hhbmdlZCkgewotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRW51bShyZXN1bHQuY3VzdG9tQXBwZWFyYW5jZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdC5jaGFuZ2VkUHJvcGVy
dGllcyAmIFVzZXJJbnRlcmFjdGlvbkVuYWJsZWRDaGFuZ2VkKSB7Ci0gICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LnVzZXJJbnRlcmFjdGlvbkVuYWJsZWQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1SZW1vdGVMYXll
clRyZWVUcmFuc2FjdGlvbjo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24oKQotewotfQotCi1S
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6flJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uKCkK
LXsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6ZW5jb2RlKElQQzo6RW5j
b2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcm9vdExheWVySUQ7Ci0g
ICAgZW5jb2RlciA8PCBtX2NyZWF0ZWRMYXllcnM7Ci0KLSAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihtX2NoYW5nZWRMYXllcnMuc2l6ZSgpKTsKLQotICAgIGZvciAoUmVmUHRy
PFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gbGF5ZXIgOiBtX2NoYW5nZWRMYXllcnMpIHsKLSAgICAg
ICAgZW5jb2RlciA8PCBsYXllci0+bGF5ZXJJRCgpOwotICAgICAgICBlbmNvZGVyIDw8IGxheWVy
LT5wcm9wZXJ0aWVzKCk7Ci0gICAgfQotICAgIAotICAgIGVuY29kZXIgPDwgbV9kZXN0cm95ZWRM
YXllcklEczsKLSAgICBlbmNvZGVyIDw8IG1fdmlkZW9MYXllcklEc1BlbmRpbmdGdWxsc2NyZWVu
OwotICAgIGVuY29kZXIgPDwgbV9sYXllcklEc1dpdGhOZXdseVVucmVhY2hhYmxlQmFja2luZ1N0
b3JlOwotCi0gICAgZW5jb2RlciA8PCBtX2NvbnRlbnRzU2l6ZTsKLSAgICBlbmNvZGVyIDw8IG1f
c2Nyb2xsT3JpZ2luOwotCi0gICAgZW5jb2RlciA8PCBtX2Jhc2VMYXlvdXRWaWV3cG9ydFNpemU7
Ci0gICAgZW5jb2RlciA8PCBtX21pblN0YWJsZUxheW91dFZpZXdwb3J0T3JpZ2luOwotICAgIGVu
Y29kZXIgPDwgbV9tYXhTdGFibGVMYXlvdXRWaWV3cG9ydE9yaWdpbjsKLQotI2lmIFBMQVRGT1JN
KE1BQykKLSAgICBlbmNvZGVyIDw8IG1fc2Nyb2xsUG9zaXRpb247Ci0jZW5kaWYKLSAgICBlbmNv
ZGVyIDw8IG1fcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yOwotICAgIGVuY29kZXIgPDwgbV9w
YWdlU2NhbGVGYWN0b3I7Ci0gICAgZW5jb2RlciA8PCBtX21pbmltdW1TY2FsZUZhY3RvcjsKLSAg
ICBlbmNvZGVyIDw8IG1fbWF4aW11bVNjYWxlRmFjdG9yOwotICAgIGVuY29kZXIgPDwgbV9pbml0
aWFsU2NhbGVGYWN0b3I7Ci0gICAgZW5jb2RlciA8PCBtX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoOwot
Ci0gICAgZW5jb2RlciA8PCBtX3JlbmRlclRyZWVTaXplOwotICAgIGVuY29kZXIgPDwgbV90cmFu
c2FjdGlvbklEOwotCi0gICAgZW5jb2RlciA8PCBtX25ld2x5UmVhY2hlZExheW91dE1pbGVzdG9u
ZXM7Ci0KLSAgICBlbmNvZGVyIDw8IG1fc2NhbGVXYXNTZXRCeVVJUHJvY2VzczsKLSAgICBlbmNv
ZGVyIDw8IG1fYWxsb3dzVXNlclNjYWxpbmc7Ci0KLSAgICBlbmNvZGVyIDw8IG1fYXZvaWRzVW5z
YWZlQXJlYTsKLQotICAgIGVuY29kZXIgPDwgbV92aWV3cG9ydE1ldGFUYWdXaWR0aFdhc0V4cGxp
Y2l0OwotICAgIGVuY29kZXIgPDwgbV92aWV3cG9ydE1ldGFUYWdDYW1lRnJvbUltYWdlRG9jdW1l
bnQ7Ci0KLSAgICBlbmNvZGVyIDw8IG1faXNJblN0YWJsZVN0YXRlOwotCi0gICAgZW5jb2RlciA8
PCBtX2NhbGxiYWNrSURzOwotCi0gICAgZW5jb2RlciA8PCBoYXNFZGl0b3JTdGF0ZSgpOwotICAg
IGlmIChtX2VkaXRvclN0YXRlKQotICAgICAgICBlbmNvZGVyIDw8ICptX2VkaXRvclN0YXRlOwot
fQotCi1ib29sIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpkZWNvZGUoSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYgcmVzdWx0KQotewotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fcm9vdExheWVySUQpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFyZXN1bHQubV9yb290TGF5ZXJJRCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9jcmVhdGVkTGF5ZXJzKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdWludDY0X3QgbnVtQ2hhbmdlZExheWVyUHJv
cGVydGllczsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG51bUNoYW5nZWRMYXllclByb3BlcnRp
ZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBp
IDwgbnVtQ2hhbmdlZExheWVyUHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgIEdyYXBoaWNzTGF5
ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklEOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGxheWVySUQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxMYXllclByb3BlcnRpZXM+IGxheWVyUHJvcGVydGllcyA9IHN0ZDo6bWFrZV91bmlx
dWU8TGF5ZXJQcm9wZXJ0aWVzPigpOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKCpsYXll
clByb3BlcnRpZXMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJlc3Vs
dC5jaGFuZ2VkTGF5ZXJQcm9wZXJ0aWVzKCkuc2V0KGxheWVySUQsIFdURk1vdmUobGF5ZXJQcm9w
ZXJ0aWVzKSk7Ci0gICAgfQotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9kZXN0
cm95ZWRMYXllcklEcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoYXV0byYg
bGF5ZXJJRCA6IHJlc3VsdC5tX2Rlc3Ryb3llZExheWVySURzKSB7Ci0gICAgICAgIGlmICghbGF5
ZXJJRCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5tX3ZpZGVvTGF5ZXJJRHNQZW5kaW5nRnVsbHNjcmVlbikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fbGF5
ZXJJRHNXaXRoTmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGZvciAoYXV0byYgbGF5ZXJJRCA6IHJlc3VsdC5tX2xheWVySURzV2l0aE5l
d2x5VW5yZWFjaGFibGVCYWNraW5nU3RvcmUpIHsKLSAgICAgICAgaWYgKCFsYXllcklEKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0Lm1fY29udGVudHNTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9zY3JvbGxPcmlnaW4pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX2Jhc2VMYXlvdXRWaWV3
cG9ydFNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHJlc3VsdC5tX21pblN0YWJsZUxheW91dFZpZXdwb3J0T3JpZ2luKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9tYXhTdGFibGVM
YXlvdXRWaWV3cG9ydE9yaWdpbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9zY3JvbGxQb3Np
dGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotICAgIAotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0Lm1fcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9wYWdl
U2NhbGVGYWN0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC5tX21pbmltdW1TY2FsZUZhY3RvcikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fbWF4aW11bVNjYWxlRmFjdG9y
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQubV9pbml0aWFsU2NhbGVGYWN0b3IpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9yZW5k
ZXJUcmVlU2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0Lm1fdHJhbnNhY3Rpb25JRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fbmV3bHlSZWFjaGVkTGF5b3V0TWlsZXN0
b25lcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0Lm1fc2NhbGVXYXNTZXRCeVVJUHJvY2VzcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fYWxsb3dzVXNlclNjYWxpbmcpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5t
X2F2b2lkc1Vuc2FmZUFyZWEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5tX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoV2FzRXhwbGljaXQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5t
X3ZpZXdwb3J0TWV0YVRhZ0NhbWVGcm9tSW1hZ2VEb2N1bWVudCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1faXNJblN0YWJsZVN0YXRl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQubV9jYWxsYmFja0lEcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaGFz
RWRpdG9yU3RhdGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNFZGl0b3JTdGF0ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChoYXNFZGl0b3JTdGF0ZSkgewotICAgICAg
ICBFZGl0b3JTdGF0ZSBlZGl0b3JTdGF0ZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShl
ZGl0b3JTdGF0ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdC5z
ZXRFZGl0b3JTdGF0ZShlZGl0b3JTdGF0ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OnNldFJvb3RMYXllcklEKEdyYXBo
aWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCByb290TGF5ZXJJRCkKLXsKLSAgICBBU1NFUlRfQVJH
KHJvb3RMYXllcklELCByb290TGF5ZXJJRCk7Ci0KLSAgICBtX3Jvb3RMYXllcklEID0gcm9vdExh
eWVySUQ7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OmxheWVyUHJvcGVy
dGllc0NoYW5nZWQoUGxhdGZvcm1DQUxheWVyUmVtb3RlJiByZW1vdGVMYXllcikKLXsKLSAgICBt
X2NoYW5nZWRMYXllcnMuYXBwZW5kKCZyZW1vdGVMYXllcik7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5
ZXJUcmVlVHJhbnNhY3Rpb246OnNldENyZWF0ZWRMYXllcnMoVmVjdG9yPExheWVyQ3JlYXRpb25Q
cm9wZXJ0aWVzPiBjcmVhdGVkTGF5ZXJzKQotewotICAgIG1fY3JlYXRlZExheWVycyA9IFdURk1v
dmUoY3JlYXRlZExheWVycyk7Ci19Ci0KLXZvaWQgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
OnNldERlc3Ryb3llZExheWVySURzKFZlY3RvcjxHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVy
SUQ+IGRlc3Ryb3llZExheWVySURzKQotewotICAgIG1fZGVzdHJveWVkTGF5ZXJJRHMgPSBXVEZN
b3ZlKGRlc3Ryb3llZExheWVySURzKTsKLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbjo6c2V0TGF5ZXJJRHNXaXRoTmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdTdG9yZShWZWN0b3I8
R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBsYXllcklEc1dpdGhOZXdseVVucmVhY2hh
YmxlQmFja2luZ1N0b3JlKQotewotICAgIG1fbGF5ZXJJRHNXaXRoTmV3bHlVbnJlYWNoYWJsZUJh
Y2tpbmdTdG9yZSA9IFdURk1vdmUobGF5ZXJJRHNXaXRoTmV3bHlVbnJlYWNoYWJsZUJhY2tpbmdT
dG9yZSk7Ci19Ci0KLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKLQotc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUpCi17Ci0gICAgdHMgPDwgYmFja2luZ1N0b3Jl
LnNpemUoKTsKLSAgICB0cyA8PCAiIHNjYWxlPSIgPDwgYmFja2luZ1N0b3JlLnNjYWxlKCk7Ci0g
ICAgaWYgKGJhY2tpbmdTdG9yZS5pc09wYXF1ZSgpKQotICAgICAgICB0cyA8PCAiIG9wYXF1ZSI7
Ci0gICAgaWYgKGJhY2tpbmdTdG9yZS5hY2NlbGVyYXRlc0RyYXdpbmcoKSkKLSAgICAgICAgdHMg
PDwgIiBhY2NlbGVyYXRlZCI7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1zdGF0aWMgdm9pZCBkdW1w
Q2hhbmdlZExheWVycyhUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb246OkxheWVyUHJvcGVydGllc01hcCYgY2hhbmdlZExheWVyUHJvcGVydGllcykKLXsKLSAg
ICBpZiAoY2hhbmdlZExheWVyUHJvcGVydGllcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOwotICAgIHRzIDw8ICJjaGFu
Z2VkLWxheWVycyI7Ci0KLSAgICAvLyBEdW1wIHRoZSBsYXllciBwcm9wZXJ0aWVzIHNvcnRlZCBi
eSBsYXllciBJRC4KLSAgICBWZWN0b3I8R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEPiBs
YXllcklEczsKLSAgICBjb3B5S2V5c1RvVmVjdG9yKGNoYW5nZWRMYXllclByb3BlcnRpZXMsIGxh
eWVySURzKTsKLSAgICBzdGQ6OnNvcnQobGF5ZXJJRHMuYmVnaW4oKSwgbGF5ZXJJRHMuZW5kKCkp
OwotCi0gICAgZm9yIChhdXRvJiBsYXllcklEIDogbGF5ZXJJRHMpIHsKLSAgICAgICAgY29uc3Qg
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyYgbGF5ZXJQcm9wZXJ0
aWVzID0gKmNoYW5nZWRMYXllclByb3BlcnRpZXMuZ2V0KGxheWVySUQpOwotCi0gICAgICAgIFRl
eHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOwotICAgICAgICB0cyA8PCAibGF5ZXIgIiA8
PCBsYXllcklEOwotCi0gICAgICAgIGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRp
ZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TmFtZUNoYW5nZWQpCi0gICAgICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoIm5hbWUiLCBsYXllclByb3BlcnRpZXMubmFtZSk7Ci0KLSAgICAg
ICAgaWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uOjpDaGlsZHJlbkNoYW5nZWQpCi0gICAgICAgICAgICB0cy5kdW1wUHJvcGVy
dHk8VmVjdG9yPEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRD4+KCJjaGlsZHJlbiIsIGxh
eWVyUHJvcGVydGllcy5jaGlsZHJlbik7Ci0KLSAgICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5j
aGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpQb3NpdGlvbkNo
YW5nZWQpCi0gICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoInBvc2l0aW9uIiwgbGF5ZXJQcm9w
ZXJ0aWVzLnBvc2l0aW9uKTsKLQotICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQ
cm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkJvdW5kc0NoYW5nZWQpCi0g
ICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJvdW5kcyIsIGxheWVyUHJvcGVydGllcy5ib3Vu
ZHMpOwotCi0gICAgICAgIGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6QW5jaG9yUG9pbnRDaGFuZ2VkKQotICAgICAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJhbmNob3JQb2ludCIsIGxheWVyUHJvcGVydGllcy5hbmNob3JQ
b2ludCk7Ci0KLSAgICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAm
IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpCYWNrZ3JvdW5kQ29sb3JDaGFuZ2VkKQotICAg
ICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJiYWNrZ3JvdW5kQ29sb3IiLCBsYXllclByb3BlcnRp
ZXMuYmFja2dyb3VuZENvbG9yKTsKLQotICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5n
ZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkJvcmRlckNvbG9yQ2hh
bmdlZCkKLSAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYm9yZGVyQ29sb3IiLCBsYXllclBy
b3BlcnRpZXMuYm9yZGVyQ29sb3IpOwotCi0gICAgICAgIGlmIChsYXllclByb3BlcnRpZXMuY2hh
bmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Qm9yZGVyV2lkdGhD
aGFuZ2VkKQotICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJib3JkZXJXaWR0aCIsIGxheWVy
UHJvcGVydGllcy5ib3JkZXJXaWR0aCk7Ci0KLSAgICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5j
aGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpPcGFjaXR5Q2hh
bmdlZCkKLSAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3BhY2l0eSIsIGxheWVyUHJvcGVy
dGllcy5vcGFjaXR5KTsKLQotICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9w
ZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlRyYW5zZm9ybUNoYW5nZWQpCi0g
ICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRyYW5zZm9ybSIsIGxheWVyUHJvcGVydGllcy50
cmFuc2Zvcm0gPyAqbGF5ZXJQcm9wZXJ0aWVzLnRyYW5zZm9ybSA6IFRyYW5zZm9ybWF0aW9uTWF0
cml4KCkpOwotCi0gICAgICAgIGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMg
JiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6U3VibGF5ZXJUcmFuc2Zvcm1DaGFuZ2VkKQot
ICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzdWJsYXllclRyYW5zZm9ybSIsIGxheWVyUHJv
cGVydGllcy5zdWJsYXllclRyYW5zZm9ybSA/ICpsYXllclByb3BlcnRpZXMuc3VibGF5ZXJUcmFu
c2Zvcm0gOiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKLQotICAgICAgICBpZiAobGF5ZXJQcm9w
ZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246Okhp
ZGRlbkNoYW5nZWQpCi0gICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoImhpZGRlbiIsIGxheWVy
UHJvcGVydGllcy5oaWRkZW4pOwotCi0gICAgICAgIGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdl
ZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6R2VvbWV0cnlGbGlwcGVk
Q2hhbmdlZCkKLSAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiZ2VvbWV0cnlGbGlwcGVkIiwg
bGF5ZXJQcm9wZXJ0aWVzLmdlb21ldHJ5RmxpcHBlZCk7Ci0KLSAgICAgICAgaWYgKGxheWVyUHJv
cGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpE
b3VibGVTaWRlZENoYW5nZWQpCi0gICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoImRvdWJsZVNp
ZGVkIiwgbGF5ZXJQcm9wZXJ0aWVzLmRvdWJsZVNpZGVkKTsKLQotICAgICAgICBpZiAobGF5ZXJQ
cm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
Ok1hc2tzVG9Cb3VuZHNDaGFuZ2VkKQotICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJtYXNr
c1RvQm91bmRzIiwgbGF5ZXJQcm9wZXJ0aWVzLm1hc2tzVG9Cb3VuZHMpOwotCi0gICAgICAgIGlm
IChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbjo6T3BhcXVlQ2hhbmdlZCkKLSAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgib3Bh
cXVlIiwgbGF5ZXJQcm9wZXJ0aWVzLm9wYXF1ZSk7Ci0KLSAgICAgICAgaWYgKGxheWVyUHJvcGVy
dGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpDb250
ZW50c0hpZGRlbkNoYW5nZWQpCi0gICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbnRlbnRz
SGlkZGVuIiwgbGF5ZXJQcm9wZXJ0aWVzLmNvbnRlbnRzSGlkZGVuKTsKLQotICAgICAgICBpZiAo
bGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb246Ok1hc2tMYXllckNoYW5nZWQpCi0gICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm1h
c2tMYXllciIsIGxheWVyUHJvcGVydGllcy5tYXNrTGF5ZXJJRCk7Ci0KLSAgICAgICAgaWYgKGxh
eWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uOjpDbG9uZWRDb250ZW50c0NoYW5nZWQpCi0gICAgICAgICAgICB0cy5kdW1wUHJvcGVydHko
ImNsb25lZExheWVyIiwgbGF5ZXJQcm9wZXJ0aWVzLmNsb25lZExheWVySUQpOwotCi0gICAgICAg
IGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6Q29udGVudHNSZWN0Q2hhbmdlZCkKLSAgICAgICAgICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiY29udGVudHNSZWN0IiwgbGF5ZXJQcm9wZXJ0aWVzLmNvbnRlbnRzUmVjdCk7Ci0KLSAg
ICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uOjpDb250ZW50c1NjYWxlQ2hhbmdlZCkKLSAgICAgICAgICAgIHRzLmR1
bXBQcm9wZXJ0eSgiY29udGVudHNTY2FsZSIsIGxheWVyUHJvcGVydGllcy5jb250ZW50c1NjYWxl
KTsKLQotICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYgUmVt
b3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkNvcm5lclJhZGl1c0NoYW5nZWQpCi0gICAgICAgICAg
ICB0cy5kdW1wUHJvcGVydHkoImNvcm5lclJhZGl1cyIsIGxheWVyUHJvcGVydGllcy5jb3JuZXJS
YWRpdXMpOwotCi0gICAgICAgIGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMg
JiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6U2hhcGVSb3VuZGVkUmVjdENoYW5nZWQpCi0g
ICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYXBlUmVjdCIsIGxheWVyUHJvcGVydGllcy5z
aGFwZVJvdW5kZWRSZWN0ID8gKmxheWVyUHJvcGVydGllcy5zaGFwZVJvdW5kZWRSZWN0IDogRmxv
YXRSb3VuZGVkUmVjdCgpKTsKLQotICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQ
cm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246Ok1pbmlmaWNhdGlvbkZpbHRl
ckNoYW5nZWQpCi0gICAgICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm1pbmlmaWNhdGlvbkZpbHRl
ciIsIGxheWVyUHJvcGVydGllcy5taW5pZmljYXRpb25GaWx0ZXIpOwotCi0gICAgICAgIGlmIChs
YXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbjo6TWFnbmlmaWNhdGlvbkZpbHRlckNoYW5nZWQpCi0gICAgICAgICAgICB0cy5kdW1wUHJv
cGVydHkoIm1hZ25pZmljYXRpb25GaWx0ZXIiLCBsYXllclByb3BlcnRpZXMubWFnbmlmaWNhdGlv
bkZpbHRlcik7Ci0KLSAgICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGll
cyAmIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpCbGVuZE1vZGVDaGFuZ2VkKQotICAgICAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZE1vZGUiLCBsYXllclByb3BlcnRpZXMuYmxlbmRN
b2RlKTsKLQotICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVzICYg
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlNwZWVkQ2hhbmdlZCkKLSAgICAgICAgICAgIHRz
LmR1bXBQcm9wZXJ0eSgic3BlZWQiLCBsYXllclByb3BlcnRpZXMuc3BlZWQpOwotCi0gICAgICAg
IGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6VGltZU9mZnNldENoYW5nZWQpCi0gICAgICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoInRpbWVPZmZzZXQiLCBsYXllclByb3BlcnRpZXMudGltZU9mZnNldCk7Ci0KLSAgICAgICAg
aWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uOjpCYWNraW5nU3RvcmVDaGFuZ2VkKSB7Ci0gICAgICAgICAgICBpZiAoY29uc3Qg
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSA9IGxheWVyUHJvcGVydGllcy5i
YWNraW5nU3RvcmUuZ2V0KCkpCi0gICAgICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5PGNvbnN0
IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlJj4oImJhY2tpbmdTdG9yZSIsICpiYWNraW5nU3RvcmUp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmFj
a2luZ1N0b3JlIiwgInJlbW92ZWQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsYXllclBy
b3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6
QmFja2luZ1N0b3JlQXR0YWNobWVudENoYW5nZWQpCi0gICAgICAgICAgICB0cy5kdW1wUHJvcGVy
dHkoImJhY2tpbmdTdG9yZUF0dGFjaGVkIiwgbGF5ZXJQcm9wZXJ0aWVzLmJhY2tpbmdTdG9yZUF0
dGFjaGVkKTsKLQotICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQcm9wZXJ0aWVz
ICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkZpbHRlcnNDaGFuZ2VkKQotICAgICAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJmaWx0ZXJzIiwgbGF5ZXJQcm9wZXJ0aWVzLmZpbHRlcnMgPyAq
bGF5ZXJQcm9wZXJ0aWVzLmZpbHRlcnMgOiBGaWx0ZXJPcGVyYXRpb25zKCkpOwotCi0gICAgICAg
IGlmIChsYXllclByb3BlcnRpZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6QW5pbWF0aW9uc0NoYW5nZWQpIHsKLSAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYga2V5QW5pbWF0aW9uUGFpciA6IGxheWVyUHJvcGVydGllcy5hZGRlZEFuaW1hdGlvbnMp
Ci0gICAgICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJhbmltYXRpb24gIiArICBrZXlBbmlt
YXRpb25QYWlyLmZpcnN0LCBrZXlBbmltYXRpb25QYWlyLnNlY29uZCk7Ci0KLSAgICAgICAgICAg
IGZvciAoY29uc3QgYXV0byYgbmFtZSA6IGxheWVyUHJvcGVydGllcy5rZXlQYXRoc09mQW5pbWF0
aW9uc1RvUmVtb3ZlKQotICAgICAgICAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVtb3ZlZCBh
bmltYXRpb24iLCBuYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsYXllclByb3BlcnRp
ZXMuY2hhbmdlZFByb3BlcnRpZXMgJiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6RWRnZUFu
dGlhbGlhc2luZ01hc2tDaGFuZ2VkKQotICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJlZGdl
QW50aWFsaWFzaW5nTWFzayIsIGxheWVyUHJvcGVydGllcy5lZGdlQW50aWFsaWFzaW5nTWFzayk7
Ci0KLSAgICAgICAgaWYgKGxheWVyUHJvcGVydGllcy5jaGFuZ2VkUHJvcGVydGllcyAmIFJlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpDdXN0b21BcHBlYXJhbmNlQ2hhbmdlZCkKLSAgICAgICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiY3VzdG9tQXBwZWFyYW5jZSIsIGxheWVyUHJvcGVydGllcy5j
dXN0b21BcHBlYXJhbmNlKTsKLQotICAgICAgICBpZiAobGF5ZXJQcm9wZXJ0aWVzLmNoYW5nZWRQ
cm9wZXJ0aWVzICYgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlVzZXJJbnRlcmFjdGlvbkVu
YWJsZWRDaGFuZ2VkKQotICAgICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJ1c2VySW50ZXJhY3Rp
b25FbmFibGVkIiwgbGF5ZXJQcm9wZXJ0aWVzLnVzZXJJbnRlcmFjdGlvbkVuYWJsZWQpOwotICAg
IH0KLX0KLQotdm9pZCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6ZHVtcCgpIGNvbnN0Ci17
Ci0gICAgZnByaW50ZihzdGRlcnIsICIlcyIsIGRlc2NyaXB0aW9uKCkuZGF0YSgpKTsKLX0KLQot
Q1N0cmluZyBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6ZGVzY3JpcHRpb24oKSBjb25zdAot
ewotICAgIFRleHRTdHJlYW0gdHM7Ci0KLSAgICB0cy5zdGFydEdyb3VwKCk7Ci0gICAgdHMgPDwg
ImxheWVyIHRyZWUiOwotCi0gICAgdHMuZHVtcFByb3BlcnR5KCJ0cmFuc2FjdGlvbklEIiwgbV90
cmFuc2FjdGlvbklEKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImNvbnRlbnRzU2l6ZSIsIG1fY29u
dGVudHNTaXplKTsKLSAgICBpZiAobV9zY3JvbGxPcmlnaW4gIT0gSW50UG9pbnQ6Onplcm8oKSkK
LSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzY3JvbGxPcmlnaW4iLCBtX3Njcm9sbE9yaWdpbik7
Ci0KLSAgICB0cy5kdW1wUHJvcGVydHkoImJhc2VMYXlvdXRWaWV3cG9ydFNpemUiLCBGbG9hdFNp
emUobV9iYXNlTGF5b3V0Vmlld3BvcnRTaXplKSk7Ci0KLSAgICBpZiAobV9taW5TdGFibGVMYXlv
dXRWaWV3cG9ydE9yaWdpbiAhPSBMYXlvdXRQb2ludDo6emVybygpKQotICAgICAgICB0cy5kdW1w
UHJvcGVydHkoIm1pblN0YWJsZUxheW91dFZpZXdwb3J0T3JpZ2luIiwgRmxvYXRQb2ludChtX21p
blN0YWJsZUxheW91dFZpZXdwb3J0T3JpZ2luKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJtYXhT
dGFibGVMYXlvdXRWaWV3cG9ydE9yaWdpbiIsIEZsb2F0UG9pbnQobV9tYXhTdGFibGVMYXlvdXRW
aWV3cG9ydE9yaWdpbikpOwotCi0gICAgaWYgKG1fcGFnZVNjYWxlRmFjdG9yICE9IDEpCi0gICAg
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicGFnZVNjYWxlRmFjdG9yIiwgbV9wYWdlU2NhbGVGYWN0b3Ip
OwotCi0gICAgdHMuZHVtcFByb3BlcnR5KCJtaW5pbXVtU2NhbGVGYWN0b3IiLCBtX21pbmltdW1T
Y2FsZUZhY3Rvcik7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJtYXhpbXVtU2NhbGVGYWN0b3IiLCBt
X21heGltdW1TY2FsZUZhY3Rvcik7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJpbml0aWFsU2NhbGVG
YWN0b3IiLCBtX2luaXRpYWxTY2FsZUZhY3Rvcik7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ2aWV3
cG9ydE1ldGFUYWdXaWR0aCIsIG1fdmlld3BvcnRNZXRhVGFnV2lkdGgpOwotICAgIHRzLmR1bXBQ
cm9wZXJ0eSgidmlld3BvcnRNZXRhVGFnV2lkdGhXYXNFeHBsaWNpdCIsIG1fdmlld3BvcnRNZXRh
VGFnV2lkdGhXYXNFeHBsaWNpdCk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJ2aWV3cG9ydE1ldGFU
YWdDYW1lRnJvbUltYWdlRG9jdW1lbnQiLCBtX3ZpZXdwb3J0TWV0YVRhZ0NhbWVGcm9tSW1hZ2VE
b2N1bWVudCk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJhbGxvd3NVc2VyU2NhbGluZyIsIG1fYWxs
b3dzVXNlclNjYWxpbmcpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiYXZvaWRzVW5zYWZlQXJlYSIs
IG1fYXZvaWRzVW5zYWZlQXJlYSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJpc0luU3RhYmxlU3Rh
dGUiLCBtX2lzSW5TdGFibGVTdGF0ZSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJyZW5kZXJUcmVl
U2l6ZSIsIG1fcmVuZGVyVHJlZVNpemUpOwotCi0gICAgdHMgPDwgInJvb3QtbGF5ZXIgIiA8PCBt
X3Jvb3RMYXllcklEIDw8ICIpIjsKLQotICAgIGlmICghbV9jcmVhdGVkTGF5ZXJzLmlzRW1wdHko
KSkgewotICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKLSAgICAgICAg
dHMgPDwgImNyZWF0ZWQtbGF5ZXJzIjsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjcmVhdGVk
TGF5ZXIgOiBtX2NyZWF0ZWRMYXllcnMpIHsKLSAgICAgICAgICAgIFRleHRTdHJlYW06Okdyb3Vw
U2NvcGUgZ3JvdXAodHMpOwotICAgICAgICAgICAgdHMgPDwgY3JlYXRlZExheWVyLnR5cGUgPDwi
ICIgPDwgY3JlYXRlZExheWVyLmxheWVySUQ7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNyZWF0ZWRM
YXllci50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
QVZQbGF5ZXJMYXllcjoKLSAgICAgICAgICAgICAgICB0cyA8PCAiIChjb250ZXh0LWlkICIgPDwg
Y3JlYXRlZExheWVyLmhvc3RpbmdDb250ZXh0SUQgPDwgIikiOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUNvbnRlbnRz
UHJvdmlkZWRMYXllcjoKLSAgICAgICAgICAgICAgICB0cyA8PCAiIChjb250ZXh0LWlkICIgPDwg
Y3JlYXRlZExheWVyLmhvc3RpbmdDb250ZXh0SUQgPDwgIikiOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUN1c3RvbToK
LSAgICAgICAgICAgICAgICB0cyA8PCAiIChjb250ZXh0LWlkICIgPDwgY3JlYXRlZExheWVyLmhv
c3RpbmdDb250ZXh0SUQgPDwgIikiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGR1bXBDaGFuZ2VkTGF5ZXJzKHRzLCBtX2NoYW5nZWRMYXllclBy
b3BlcnRpZXMpOwotCi0gICAgaWYgKCFtX2Rlc3Ryb3llZExheWVySURzLmlzRW1wdHkoKSkKLSAg
ICAgICAgdHMuZHVtcFByb3BlcnR5PFZlY3RvcjxHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVy
SUQ+PigiZGVzdHJveWVkLWxheWVycyIsIG1fZGVzdHJveWVkTGF5ZXJJRHMpOwotCi0gICAgdHMu
ZW5kR3JvdXAoKTsKLQotICAgIHJldHVybiB0cy5yZWxlYXNlKCkudXRmOCgpOwotfQotCi0jZW5k
aWYgLy8gIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECi0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggMjY3MDMwOTEwNDg1YWFjNTRmZGIyNjk4YjE3YmNjYzMyOWVhN2ZlYS4uYzE4MGRh
MmZlMTNiN2MyMTU1OGE2ODJjZmZkZTdmN2YyZmJmMDVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjg0LDggKzIyODQsOCBAQAog
CQkwRjU5NDc5NTE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQ
cm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTk0Nzk2
MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdUcmVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVNjcm9sbGluZ1RyZWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU5NDc5NzE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3Rl
U2Nyb2xsaW5nVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVT
Y3JvbGxpbmdUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTk0N0ExMTg3
QjNCN0QwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwOyBwYXRoID0gU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjU5NDdBMjE4N0IzQjdEMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JU
cmFuc2FjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmg7IHBhdGggPSBTY3JvbGxpbmcvUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjU5NDdBMTE4N0IzQjdEMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY1OTQ3QTIxODdCM0I3RDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjU5NDdBNTE4N0I1MTc2MDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU5NDdBNjE4N0I1MTc2MDA0Mzc4
NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUUyMDAxMThFNzcwNTEwMDNFQzNFNSAv
KiBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ2MzEsMTUgKzQ2MzEsNiBAQAogCQkJdGFiV2lkdGggPSA4Owog
CQkJdXNlc1RhYnMgPSAwOwogCQl9OwotCQkwRjU5NDdBMDE4N0IzQjcxMDA0Mzc4NTcgLyogU2Ny
b2xsaW5nICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkw
RjU5NDdBMTE4N0IzQjdEMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFu
c2FjdGlvbi5jcHAgKi8sCi0JCQkJMEY1OTQ3QTIxODdCM0I3RDAwNDM3ODU3IC8qIFJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uaCAqLywKLQkJCSk7Ci0JCQluYW1lID0gU2Ny
b2xsaW5nOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMTA1OEM3QjBGRUE1
NTg1RTExQ0EyQ0JCIC8qIExpbmtlZCBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTQ5NTIsNyArNDk0Myw3IEBACiAJCQkJMkRBOTQ0OTYx
ODg0RTREQTAwRUQ4NkRCIC8qIGlvcyAqLywKIAkJCQlCQzExMUI1QTExMkY2MjgyMDAzMzdCQUIg
LyogbWFjICovLAogCQkJCTFBQUUwNThDMTI3OURDRDQwMDg1MjQxOCAvKiBQbHVnaW5zICovLAot
CQkJCTBGNTk0N0EwMTg3QjNCNzEwMDQzNzg1NyAvKiBTY3JvbGxpbmcgKi8sCisJCQkJMkQyRTA0
NzYxRjVCRUM0RjAwQkIyNUVEIC8qIFJlbW90ZUxheWVyVHJlZSAqLywKIAkJCQk1MTE4RTk5RDFG
Mjk1MzFGMDAzRUY5RjUgLyogU3RvcmFnZSAqLywKIAkJCQkxQUJGNDM3ODFBMzY4MDM1MDAzRkIw
RTYgLyogV2Vic2l0ZURhdGEgKi8sCiAJCQkJQTdENzkyRDUxNzY3Q0I2RTAwODgxQ0JFIC8qIEFj
dGl2aXR5QXNzZXJ0aW9uLmNwcCAqLywKQEAgLTU0NzYsNiArNTQ2NywyMyBAQAogCQkJcGF0aCA9
IENvY29hOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMkQyRTA0NzYxRjVC
RUM0RjAwQkIyNUVEIC8qIFJlbW90ZUxheWVyVHJlZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3Vw
OworCQkJY2hpbGRyZW4gPSAoCisJCQkJMkQ0N0I1NkIxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlLmggKi8sCisJCQkJMkQ0N0I1NkExODEwNzE0RTAwM0EzQUVFIC8q
IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tICovLAorCQkJCTJEREY3MzEzMThFOTUwNjAwMDRG
NUE2NiAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaCAqLywKKwkJCQkyRERG
NzMxNDE4RTk1MDYwMDA0RjVBNjYgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0aW9u
Lm1tICovLAorCQkJCTJEREUwQUY4MTgyOThDQzkwMEY5N0VBQSAvKiBSZW1vdGVMYXllclRyZWVQ
cm9wZXJ0eUFwcGxpZXIuaCAqLywKKwkJCQkyRERFMEFGOTE4Mjk4Q0M5MDBGOTdFQUEgLyogUmVt
b3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tICovLAorCQkJCTFBRjFBQzZBMTY1MTc1OUUw
MEMxN0Q3RiAvKiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oICovLAorCQkJCTFBRjFBQzY5
MTY1MTc1OUUwMEMxN0Q3RiAvKiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbSAqLywKKwkJ
CQkwRjU5NDdBMTE4N0IzQjdEMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JU
cmFuc2FjdGlvbi5jcHAgKi8sCisJCQkJMEY1OTQ3QTIxODdCM0I3RDAwNDM3ODU3IC8qIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uaCAqLywKKwkJCSk7CisJCQlwYXRoID0g
UmVtb3RlTGF5ZXJUcmVlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMkRB
OTQ0OTYxODg0RTREQTAwRUQ4NkRCIC8qIGlvcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCkBAIC03MzEzLDE0ICs3MzIxLDYgQEAKIAkJCQlFMTk1ODJEMjE1M0NC
RkQ3MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5oICovLAogCQkJCUUxOTU4MkQ0MTUzQ0MwNTMw
MEI2MDg3NSAvKiBQREZLaXRJbXBvcnRzLm1tICovLAogCQkJCUUxQ0MxQjhGMTJEN0VBREYwMDYy
NTgzOCAvKiBQcmludEluZm9NYWMubW0gKi8sCi0JCQkJMkQ0N0I1NkIxODEwNzE0RTAwM0EzQUVF
IC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmggKi8sCi0JCQkJMkQ0N0I1NkExODEwNzE0RTAw
M0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tICovLAotCQkJCTJEREY3MzEzMThF
OTUwNjAwMDRGNUE2NiAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uaCAqLywK
LQkJCQkyRERGNzMxNDE4RTk1MDYwMDA0RjVBNjYgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVD
b2xsZWN0aW9uLm1tICovLAotCQkJCTJEREUwQUY4MTgyOThDQzkwMEY5N0VBQSAvKiBSZW1vdGVM
YXllclRyZWVQcm9wZXJ0eUFwcGxpZXIuaCAqLywKLQkJCQkyRERFMEFGOTE4Mjk4Q0M5MDBGOTdF
QUEgLyogUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tICovLAotCQkJCTFBRjFBQzZB
MTY1MTc1OUUwMEMxN0Q3RiAvKiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5oICovLAotCQkJ
CTFBRjFBQzY5MTY1MTc1OUUwMEMxN0Q3RiAvKiBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5t
bSAqLywKIAkJCQkxQUFCNEFBOTEyOTZGMTU0MDAyMzk1MkYgLyogU2FuZGJveEV4dGVuc2lvbk1h
Yy5tbSAqLywKIAkJCQlFMUU1NTJDMjE2QUUwNjVFMDA0RUQ2NTMgLyogU2FuZGJveEluaXRpYWxp
YXRpb25QYXJhbWV0ZXJzTWFjLm1tICovLAogCQkJCUUxOUJEQTg4MTkzNjg2QTQwMEI5N0Y1NyAv
KiBTYW5kYm94VXRpbGl0aWVzLmggKi8sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>