<?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>130049</bug_id>
          
          <creation_ts>2014-03-10 16:01:55 -0700</creation_ts>
          <short_desc>[Win] Remove QTSDK</short_desc>
          <delta_ts>2014-03-12 10:04:41 -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>Media</component>
          <version>528+ (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="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>989094</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-10 16:01:55 -0700</bug_when>
    <thetext>Remove QuickTime SDK code, as we no longer need this support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989095</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-10 16:02:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/14265204&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989480</commentid>
    <comment_count>2</comment_count>
      <attachid>226457</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-11 18:05:44 -0700</bug_when>
    <thetext>Created attachment 226457
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989684</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-03-12 10:04:41 -0700</bug_when>
    <thetext>Committed r165476: &lt;http://trac.webkit.org/changeset/165476&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226457</attachid>
            <date>2014-03-11 18:05:44 -0700</date>
            <delta_ts>2014-03-11 20:17:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-130049-20140311180521.patch</filename>
            <type>text/plain</type>
            <size>177521</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDE0LTAzLTExICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIFJlbW92ZSB1c2Ug
b2YgUVRTREsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMDA0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1lZGlhIHRlc3RpbmcgYWxyZWFkeSBjb3ZlcnMgdGhpcyBmdW5jdGlvbmFsaXR5LgorCisgICAg
ICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajogUmVtb3ZlIFF1aWNrVGltZSBm
aWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6
IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6IFJlbW92
ZSBRdWlja1RpbWUgYW5kIENocm9taXVtCisgICAgICAgIG1lZGlhIHJlZmVyZW5jZXMuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZp
c3VhbENvbnRleHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Lmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUQ0ZEaWN0aW9uYXJ5LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRDRkRpY3Rpb25hcnkuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9uU2Vz
c2lvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FURGVj
b21wcmVzc2lvblNlc3Npb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUVRNb3ZpZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1FUTW92aWUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
UVRNb3ZpZUdXb3JsZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1FUTW92aWVHV29ybGQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUVRNb3ZpZVRhc2suY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9RVE1vdmllVGFzay5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0Lmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW5UaW1lci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW5UaW1lci5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFRyYWNrLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRUcmFjay5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsdWdpbnMvd2luL1BsdWdpbkRhdGFiYXNlV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpkZWZhdWx0UGx1Z2luRGlyZWN0b3JpZXMpOiBE
b24ndCBsb29rCisgICAgICAgIGZvciB0aGUgUXVpY2tUaW1lIHBsdWdpbiBhbnltb3JlLgorCiAy
MDE0LTAzLTExICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAg
IEdldCB0aGUgaW5jb21wbGV0ZSBXZWJWVFQgUmVnaW9ucyBjb2RlIHRvIGJ1aWxkIGFnYWluLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
CShyZXZpc2lvbiAxNjU0NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NzgyLDE3ICs3NzgyLDYgQEAKICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxJbnRSZWN0V2luLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxJ
bnRTaXplV2luLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXHdpblxNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxNZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcCI+Ci0gICAgICA8RXhjbHVkZWRGcm9t
QnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19X
aW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVk
ZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS
ZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8
RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnU3VmZml4fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5c
TWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50eXBlXE9wZW5UeXBlVXRpbGl0aWVzLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50eXBl
XE9wZW5UeXBlVmVydGljYWxEYXRhLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXHdpblxTaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcCI+CkBAIC0x
OTEyNCw4ICsxOTExMyw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1x3aW5cRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxMb2NhbFdpbmRvd3NDb250ZXh0
LmgiIC8+CiAgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGlj
c1x3aW5cTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oIiAvPgotICAgIDxDdXN0
b21CdWlsZFN0ZXAgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXE1lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxNZWRpYVBsYXllclByaXZhdGVUYXNrVGltZXIu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXG9wZW50
eXBlXE9wZW5UeXBlVHlwZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXG9wZW50eXBlXE9wZW5UeXBlVXRpbGl0aWVzLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVudHlwZVxPcGVuVHlwZVZlcnRp
Y2FsRGF0YS5oIiAvPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTY1NDUyKQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDczLDEyICsxNDczLDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2lu
ZG93LmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXHdpbjwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3Ncd2luXE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwIj4K
LSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3Ncd2luPC9GaWx0ZXI+Ci0gICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5c
TWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBsYXRmb3Jt
XGdyYXBoaWNzXHdpbjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncb3BlbnR5cGVcT3BlblR5cGVVdGlsaXRpZXMu
Y3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3Ncd2luPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+CkBAIC04MzY0LDkgKzgzNTgsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXExvY2FsV2luZG93c0NvbnRleHQuaCI+CiAgICAg
ICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXHdpbjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXE1lZGlh
UGxheWVyUHJpdmF0ZVRhc2tUaW1lci5oIj4KLSAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhp
Y3Ncd2luPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xvcGVudHlwZVxPcGVuVHlwZVR5cGVzLmgiPgogICAgICAg
PEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1x3aW48L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
QEAgLTE0ODg5LDkgKzE0ODgwLDYgQEAKICAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXHdpblxNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93
LmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1x3aW48L0ZpbHRlcj4KICAgICA8
L0N1c3RvbUJ1aWxkU3RlcD4KLSAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXHdpblxNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0
LmgiPgotICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljc1x3aW48L0ZpbHRlcj4KLSAgICA8
L0N1c3RvbUJ1aWxkU3RlcD4KICAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXHdpblxXS0NBSW1hZ2VRdWV1ZS5oIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZv
cm1cZ3JhcGhpY3Ncd2luPC9GaWx0ZXI+CiAgICAgPC9DdXN0b21CdWlsZFN0ZXA+CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJldmlz
aW9uIDE2NTQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDExICs2MSw4IEBACiAKIE9CSkNfQ0xBU1MgQVZB
c3NldDsKIE9CSkNfQ0xBU1MgQVZQbGF5ZXI7Ci1PQkpDX0NMQVNTIFFUTW92aWU7CiAKIGNsYXNz
IEFWQ0ZQbGF5ZXI7Ci1jbGFzcyBRVE1vdmllR1dvcmxkOwotY2xhc3MgUVRNb3ZpZVZpc3VhbENv
bnRleHQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODUsMjIgKzgyLDEyIEBAIGNsYXNz
IFRleHRUcmFja1JlcHJlc2VudGF0aW9uOwogc3RydWN0IFBsYXRmb3JtTWVkaWEgewogICAgIGVu
dW0gewogICAgICAgICBOb25lLAotICAgICAgICBRVE1vdmllVHlwZSwKLSAgICAgICAgUVRNb3Zp
ZUdXb3JsZFR5cGUsCi0gICAgICAgIFFUTW92aWVWaXN1YWxDb250ZXh0VHlwZSwKLSAgICAgICAg
Q2hyb21pdW1NZWRpYVBsYXllclR5cGUsCi0gICAgICAgIFF0TWVkaWFQbGF5ZXJUeXBlLAogICAg
ICAgICBBVkZvdW5kYXRpb25NZWRpYVBsYXllclR5cGUsCiAgICAgICAgIEFWRm91bmRhdGlvbkNG
TWVkaWFQbGF5ZXJUeXBlLAogICAgICAgICBBVkZvdW5kYXRpb25Bc3NldFR5cGUsCiAgICAgfSB0
eXBlOwogCiAgICAgdW5pb24gewotICAgICAgICBRVE1vdmllKiBxdE1vdmllOwotICAgICAgICBR
VE1vdmllR1dvcmxkKiBxdE1vdmllR1dvcmxkOwotICAgICAgICBRVE1vdmllVmlzdWFsQ29udGV4
dCogcXRNb3ZpZVZpc3VhbENvbnRleHQ7Ci0gICAgICAgIE1lZGlhUGxheWVyUHJpdmF0ZUludGVy
ZmFjZSogY2hyb21pdW1NZWRpYVBsYXllcjsKLSAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlSW50
ZXJmYWNlKiBxdE1lZGlhUGxheWVyOwogICAgICAgICBBVlBsYXllciogYXZmTWVkaWFQbGF5ZXI7
CiAgICAgICAgIEFWQ0ZQbGF5ZXIqIGF2Y2ZNZWRpYVBsYXllcjsKICAgICAgICAgQVZBc3NldCog
YXZmQXNzZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCShyZXZpc2lvbiAxNjU0NTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIyNiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBF
TkFCTEUoVklERU8pCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dC5oIgotCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyLmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlVGFza1RpbWVyLmgiCi0j
aW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllcldpbi5oIgotI2luY2x1
ZGUgIlFUQ0ZEaWN0aW9uYXJ5LmgiCi0jaW5jbHVkZSAiUVREZWNvbXByZXNzaW9uU2Vzc2lvbi5o
IgotI2luY2x1ZGUgIlFUTW92aWUuaCIKLSNpbmNsdWRlICJRVE1vdmllVGFzay5oIgotI2luY2x1
ZGUgIlFUTW92aWVWaXN1YWxDb250ZXh0LmgiCi0jaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgotI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKLSNpbmNsdWRlICJU
aW1lUmFuZ2VzLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNs
dWRlICJXS0NBSW1hZ2VRdWV1ZS5oIgotI2luY2x1ZGUgPEFzc2VydE1hY3Jvcy5oPgotI2luY2x1
ZGUgPENvcmVHcmFwaGljcy9DR0FmZmluZVRyYW5zZm9ybS5oPgotI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9DR0NvbnRleHQuaD4KLSNpbmNsdWRlIDxRdWFydHpDb3JlL0NBVHJhbnNmb3JtM0QuaD4K
LSNpbmNsdWRlIDxXaW5pbmV0Lmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIENHSW1hZ2VSZWYgQ3JlYXRlQ0dJbWFnZUZyb21QaXhlbEJ1ZmZlcihRVFBpeGVs
QnVmZmVyIGJ1ZmZlcik7Ci1zdGF0aWMgYm9vbCByZXF1aXJlZERsbHNBdmFpbGFibGUoKTsKLQot
U09GVF9MSU5LX0xJQlJBUlkoV2luaW5ldCkKLVNPRlRfTElOSyhXaW5pbmV0LCBJbnRlcm5ldFNl
dENvb2tpZUV4VywgRFdPUkQsIFdJTkFQSSwgKExQQ1dTVFIgbHBzelVybCwgTFBDV1NUUiBscHN6
Q29va2llTmFtZSwgTFBDV1NUUiBscHN6Q29va2llRGF0YSwgRFdPUkQgZHdGbGFncywgRFdPUkRf
UFRSIGR3UmVzZXJ2ZWQpLCAobHBzelVybCwgbHBzekNvb2tpZU5hbWUsIGxwc3pDb29raWVEYXRh
LCBkd0ZsYWdzLCBkd1Jlc2VydmVkKSkKLQotLy8gSW50ZXJmYWNlIGRlY2xhcmF0aW9uIGZvciBN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0J3MgUVRNb3ZpZUNsaWVudCBh
Z2dyZWdhdGUKLWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
Ok1vdmllQ2xpZW50IDogcHVibGljIFFUTW92aWVDbGllbnQgewotcHVibGljOgotICAgIE1vdmll
Q2xpZW50KE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQqIHBhcmVudCkg
OiBtX3BhcmVudChwYXJlbnQpIHt9Ci0gICAgdmlydHVhbCB+TW92aWVDbGllbnQoKSB7IG1fcGFy
ZW50ID0gMDsgfQotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWUqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgbW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWUqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgbW92aWVUaW1lQ2hhbmdlZChRVE1vdmllKik7Ci1wcml2YXRlOgotICAgIE1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQqIG1fcGFyZW50OwotfTsKLQotY2xhc3Mg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TGF5ZXJDbGllbnQgOiBw
dWJsaWMgUGxhdGZvcm1DQUxheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBMYXllckNsaWVudChN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KiBwYXJlbnQpIDogbV9wYXJl
bnQocGFyZW50KSB7fQotICAgIHZpcnR1YWwgfkxheWVyQ2xpZW50KCkgeyBtX3BhcmVudCA9IDA7
IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyTGF5b3V0U3Vi
bGF5ZXJzT2ZMYXllcihQbGF0Zm9ybUNBTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGxhdGZv
cm1DQUxheWVyUmVzcG9uZHNUb0xheW91dENoYW5nZXMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChDRlRp
bWVJbnRlcnZhbCBiZWdpblRpbWUpIHsgfQotICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllcjo6Q29t
cG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3Jp
ZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3Jk
aW5hdGVzQm90dG9tVXA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRD
b250ZW50cyhQbGF0Zm9ybUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmIGluQ2xpcCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dEZWJ1
Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBwbGF0
Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRS
ZXBhaW50Q291bnQoUGxhdGZvcm1DQUxheWVyKikgeyByZXR1cm4gMDsgfQotCi0gICAgdmlydHVh
bCBib29sIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyTGF5
ZXJEaWREaXNwbGF5KFBsYXRmb3JtTGF5ZXIqKSB7IH0KLSAgICB2aXJ0dWFsIGZsb2F0IHBsYXRm
b3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gMTsgfQotCi0gICAg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCogbV9wYXJlbnQ7Ci19Owot
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OkxheWVyQ2xp
ZW50OjpwbGF0Zm9ybUNBTGF5ZXJMYXlvdXRTdWJsYXllcnNPZkxheWVyKFBsYXRmb3JtQ0FMYXll
ciogbGF5ZXIpCi17Ci0gICAgQVNTRVJUKG1fcGFyZW50KTsKLSAgICBBU1NFUlQobV9wYXJlbnQt
Pm1fdHJhbnNmb3JtTGF5ZXIgPT0gbGF5ZXIpOwotCi0gICAgRmxvYXRTaXplIHBhcmVudFNpemUg
PSBsYXllci0+Ym91bmRzKCkuc2l6ZSgpOwotICAgIEZsb2F0U2l6ZSBuYXR1cmFsU2l6ZSA9IG1f
cGFyZW50LT5uYXR1cmFsU2l6ZSgpOwotCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSByYXRpbyBvZiB0
aGVzZSB0d28gc2l6ZXMgYW5kIHVzZSB0aGF0IHJhdGlvIHRvIHNjYWxlIHRoZSBxdFZpZGVvTGF5
ZXI6Ci0gICAgRmxvYXRTaXplIHJhdGlvKHBhcmVudFNpemUud2lkdGgoKSAvIG5hdHVyYWxTaXpl
LndpZHRoKCksIHBhcmVudFNpemUuaGVpZ2h0KCkgLyBuYXR1cmFsU2l6ZS5oZWlnaHQoKSk7Ci0K
LSAgICBpbnQgdmlkZW9XaWR0aCA9IDA7Ci0gICAgaW50IHZpZGVvSGVpZ2h0ID0gMDsKLSAgICBt
X3BhcmVudC0+bV9tb3ZpZS0+Z2V0TmF0dXJhbFNpemUodmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQp
OwotICAgIEZsb2F0UmVjdCB2aWRlb0JvdW5kcygwLCAwLCB2aWRlb1dpZHRoICogcmF0aW8ud2lk
dGgoKSwgdmlkZW9IZWlnaHQgKiByYXRpby5oZWlnaHQoKSk7Ci0gICAgRmxvYXRQb2ludDNEIHZp
ZGVvQW5jaG9yID0gbV9wYXJlbnQtPm1fcXRWaWRlb0xheWVyLT5hbmNob3JQb2ludCgpOwotCi0g
ICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXcgcG9zaXRpb24gYmFzZWQgb24gdGhlIHBhcmVudCdzIHNp
emU6Ci0gICAgRmxvYXRQb2ludCBwb3NpdGlvbihwYXJlbnRTaXplLndpZHRoKCkgKiAwLjUgLSB2
aWRlb0JvdW5kcy53aWR0aCgpICogKDAuNSAtIHZpZGVvQW5jaG9yLngoKSksCi0gICAgICAgIHBh
cmVudFNpemUuaGVpZ2h0KCkgKiAwLjUgLSB2aWRlb0JvdW5kcy5oZWlnaHQoKSAqICgwLjUgLSB2
aWRlb0FuY2hvci55KCkpKTsgCi0KLSAgICBtX3BhcmVudC0+bV9xdFZpZGVvTGF5ZXItPnNldEJv
dW5kcyh2aWRlb0JvdW5kcyk7Ci0gICAgbV9wYXJlbnQtPm1fcXRWaWRlb0xheWVyLT5zZXRQb3Np
dGlvbihwb3NpdGlvbik7Ci19Ci0KLWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZp
c3VhbENvbnRleHQ6OlZpc3VhbENvbnRleHRDbGllbnQgOiBwdWJsaWMgUVRNb3ZpZVZpc3VhbENv
bnRleHRDbGllbnQgewotcHVibGljOgotICAgIFZpc3VhbENvbnRleHRDbGllbnQoTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCogcGFyZW50KSA6IG1fcGFyZW50KHBhcmVu
dCkge30KLSAgICB2aXJ0dWFsIH5WaXN1YWxDb250ZXh0Q2xpZW50KCkgeyBtX3BhcmVudCA9IDA7
IH0KLSAgICB2b2lkIGltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKik7
Ci0gICAgc3RhdGljIHZvaWQgcmV0cmlldmVDdXJyZW50SW1hZ2VQcm9jKHZvaWQqKTsKLXByaXZh
dGU6Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCogbV9wYXJl
bnQ7Ci19OwotCi1QYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6Y3JlYXRlKE1lZGlhUGxheWVyKiBw
bGF5ZXIpCi17IAotICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dChwbGF5ZXIpKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5l
UmVnaXN0cmFyIHJlZ2lzdHJhcikKLXsKLSAgICBpZiAoaXNBdmFpbGFibGUoKSkKLSAgICAgICAg
cmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwgMCwg
MCwgMCk7Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6Ok1l
ZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQoTWVkaWFQbGF5ZXIqIHBsYXll
cikKLSAgICA6IG1fcGxheWVyKHBsYXllcikKLSAgICAsIG1fc2Vla1RvKC0xKQotICAgICwgbV9z
ZWVrVGltZXIodGhpcywgJk1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
OnNlZWtUaW1lckZpcmVkKQotICAgICwgbV92aXN1YWxDb250ZXh0VGltZXIodGhpcywgJk1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnZpc3VhbENvbnRleHRUaW1lckZp
cmVkKQotICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQotICAgICwgbV9y
ZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKLSAgICAsIG1fZW5hYmxlZFRyYWNr
Q291bnQoMCkKLSAgICAsIG1fdG90YWxUcmFja0NvdW50KDApCi0gICAgLCBtX2hhc1Vuc3VwcG9y
dGVkVHJhY2tzKGZhbHNlKQotICAgICwgbV9zdGFydGVkUGxheWluZyhmYWxzZSkKLSAgICAsIG1f
aXNTdHJlYW1pbmcoZmFsc2UpCi0gICAgLCBtX3Zpc2libGUoZmFsc2UpCi0gICAgLCBtX25ld0Zy
YW1lQXZhaWxhYmxlKGZhbHNlKQotICAgICwgbV9tb3ZpZUNsaWVudChhZG9wdFB0cihuZXcgTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TW92aWVDbGllbnQodGhpcykp
KQotICAgICwgbV9sYXllckNsaWVudChhZG9wdFB0cihuZXcgTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dDo6TGF5ZXJDbGllbnQodGhpcykpKQotICAgICwgbV9tb3ZpZVRy
YW5zZm9ybShDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5KQotICAgICwgbV92aXN1YWxDb250ZXh0
Q2xpZW50KGFkb3B0UHRyKG5ldyBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250
ZXh0OjpWaXN1YWxDb250ZXh0Q2xpZW50KHRoaXMpKSkKLSAgICAsIG1fZGVsYXlpbmdMb2FkKGZh
bHNlKQotICAgICwgbV9wcml2YXRlQnJvd3NpbmcoZmFsc2UpCi0gICAgLCBtX3ByZWxvYWQoTWVk
aWFQbGF5ZXI6OkF1dG8pCi0gICAgLCBtX21heFRpbWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJv
Z3Jlc3MoMCkKLXsKLX0KLQotTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4
dDo6fk1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQoKQotewotICAgIHRl
YXJEb3duVmlkZW9SZW5kZXJpbmcoKTsKLSAgICBjYW5jZWxDYWxsT25NYWluVGhyZWFkKCZWaXN1
YWxDb250ZXh0Q2xpZW50OjpyZXRyaWV2ZUN1cnJlbnRJbWFnZVByb2MsIHRoaXMpOwotfQotCi1i
b29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnN1cHBvcnRzRnVs
bHNjcmVlbigpIGNvbnN0Ci17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9wbGF5ZXItPm1l
ZGlhUGxheWVyQ2xpZW50KCktPm1lZGlhUGxheWVyT3duaW5nRG9jdW1lbnQoKTsgCi0gICAgaWYg
KGRvY3VtZW50KQotICAgICAgICByZXR1cm4gZG9jdW1lbnQtPnNldHRpbmdzKCktPmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVBsYXRm
b3JtTWVkaWEgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cGxhdGZv
cm1NZWRpYSgpIGNvbnN0Ci17Ci0gICAgUGxhdGZvcm1NZWRpYSBwOwotICAgIHAudHlwZSA9IFBs
YXRmb3JtTWVkaWE6OlFUTW92aWVWaXN1YWxDb250ZXh0VHlwZTsKLSAgICBwLm1lZGlhLnF0TW92
aWVWaXN1YWxDb250ZXh0ID0gbV92aXN1YWxDb250ZXh0LmdldCgpOwotICAgIHJldHVybiBwOwot
fQotCi1QbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250
ZXh0OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90cmFuc2Zvcm1MYXll
ciA/IG1fdHJhbnNmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IDA7Ci19Ci0KLVN0cmluZyBN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpyZmMyNjE2RGF0ZVN0cmlu
Z0Zyb21UaW1lKENGQWJzb2x1dGVUaW1lIHRpbWUpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGRheVN0cmluZ3NbXSA9IHsgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmki
LCAiU2F0IiwgIlN1biIgfTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbW9udGhTdHJp
bmdzW10gPSB7ICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwi
LCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIgfTsKLSAgICBzdGF0aWMgY29uc3Qg
Q0ZTdHJpbmdSZWYgZGF0ZUZvcm1hdFN0cmluZyA9IENGU1RSKCIlcywgJTAyZCAlcyAlMDRkICUw
MmQ6JTAyZDolMDJkIEdNVCIpOwotICAgIHN0YXRpYyBDRlRpbWVab25lUmVmIGdtdFRpbWVab25l
OwotICAgIGlmICghZ210VGltZVpvbmUpCi0gICAgICAgIGdtdFRpbWVab25lID0gQ0ZUaW1lWm9u
ZUNvcHlEZWZhdWx0KCk7Ci0KLSAgICBDRkdyZWdvcmlhbkRhdGUgZGF0ZVZhbHVlID0gQ0ZBYnNv
bHV0ZVRpbWVHZXRHcmVnb3JpYW5EYXRlKHRpbWUsIGdtdFRpbWVab25lKTsgCi0gICAgaWYgKCFD
RkdyZWdvcmlhbkRhdGVJc1ZhbGlkKGRhdGVWYWx1ZSwga0NGR3JlZ29yaWFuQWxsVW5pdHMpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICB0aW1lID0gQ0ZHcmVnb3JpYW5EYXRlR2V0
QWJzb2x1dGVUaW1lKGRhdGVWYWx1ZSwgZ210VGltZVpvbmUpOwotICAgIFNJbnQzMiBkYXkgPSBD
RkFic29sdXRlVGltZUdldERheU9mV2Vlayh0aW1lLCAwKTsKLQotICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gZGF0ZUNGU3RyaW5nID0gYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhGb3JtYXQo
MCwgMCwgZGF0ZUZvcm1hdFN0cmluZywgZGF5U3RyaW5nc1tkYXkgLSAxXSwgZGF0ZVZhbHVlLmRh
eSwgCi0gICAgICAgIG1vbnRoU3RyaW5nc1tkYXRlVmFsdWUubW9udGggLSAxXSwgZGF0ZVZhbHVl
LnllYXIsIGRhdGVWYWx1ZS5ob3VyLCBkYXRlVmFsdWUubWludXRlLCAoaW50KWRhdGVWYWx1ZS5z
ZWNvbmQpKTsKLSAgICByZXR1cm4gZGF0ZUNGU3RyaW5nLmdldCgpOwotfQotCi1zdGF0aWMgdm9p
ZCBhZGRDb29raWVQYXJhbShTdHJpbmdCdWlsZGVyJiBjb29raWVCdWlsZGVyLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKG5hbWUuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGlzIGlzbid0IHRoZSBmaXJzdCBwYXJh
bWV0ZXIgYWRkZWQsIHRlcm1pbmF0ZSB0aGUgcHJldmlvdXMgb25lLgotICAgIGlmIChjb29raWVC
dWlsZGVyLmxlbmd0aCgpKQotICAgICAgICBjb29raWVCdWlsZGVyLmFwcGVuZCgiOyAiKTsKLQot
ICAgIC8vIEFkZCBwYXJhbWV0ZXIgbmFtZSwgYW5kIHZhbHVlIGlmIHRoZXJlIGlzIG9uZS4KLSAg
ICBjb29raWVCdWlsZGVyLmFwcGVuZChuYW1lKTsKLSAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkg
ewotICAgICAgICBjb29raWVCdWlsZGVyLmFwcGVuZCgnPScpOwotICAgICAgICBjb29raWVCdWls
ZGVyLmFwcGVuZCh2YWx1ZSk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZShjb25zdCBTdHJp
bmcmIHVybCkKLXsKLSAgICAvLyBXZWJDb3JlIGxvYWRlZCB0aGUgcGFnZSB3aXRoIHRoZSBtb3Zp
ZSBVUkwgd2l0aCBDRk5ldHdvcmsgYnV0IFF1aWNrVGltZSB3aWxsIAotICAgIC8vIHVzZSBXaW5J
TmV0IHRvIGRvd25sb2FkIHRoZSBtb3ZpZSwgc28gd2UgbmVlZCB0byBjb3B5IGFueSBjb29raWVz
IG5lZWRlZCB0bwotICAgIC8vIGRvd25sb2FkIHRoZSBtb3ZpZSBpbnRvIFdpbkluZXQgYmVmb3Jl
IGFza2luZyBRdWlja1RpbWUgdG8gb3BlbiBpdC4KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBt
X3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJPd25pbmdEb2N1bWVudCgp
OwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50ID8gZG9jdW1lbnQtPmZyYW1lKCkgOiAwOwot
ICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkgfHwgIWZyYW1lLT5wYWdlKCktPnNldHRp
bmdzKCkuY29va2llRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBVUkwgbW92aWVV
UkwgPSBVUkwoVVJMKCksIHVybCk7Ci0gICAgVmVjdG9yPENvb2tpZT4gZG9jdW1lbnRDb29raWVz
OwotICAgIGlmICghZ2V0UmF3Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgbW92aWVVUkwsIGRv
Y3VtZW50Q29va2llcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoc2l6ZV90IG5keCA9
IDA7IG5keCA8IGRvY3VtZW50Q29va2llcy5zaXplKCk7IG5keCsrKSB7Ci0gICAgICAgIGNvbnN0
IENvb2tpZSYgY29va2llID0gZG9jdW1lbnRDb29raWVzW25keF07Ci0KLSAgICAgICAgaWYgKGNv
b2tpZS5uYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8v
IEJ1aWxkIHVwIHRoZSBjb29raWUgc3RyaW5nIHdpdGggYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyB3
ZSBjYW4gZ2V0IHNvIFdpbklOZXQKLSAgICAgICAgLy8ga25vd3Mgd2hhdCB0byBkbyB3aXRoIGl0
LgotICAgICAgICBTdHJpbmdCdWlsZGVyIGNvb2tpZUJ1aWxkZXI7Ci0gICAgICAgIGFkZENvb2tp
ZVBhcmFtKGNvb2tpZUJ1aWxkZXIsIGNvb2tpZS5uYW1lLCBjb29raWUudmFsdWUpOwotICAgICAg
ICBhZGRDb29raWVQYXJhbShjb29raWVCdWlsZGVyLCAicGF0aCIsIGNvb2tpZS5wYXRoKTsKLSAg
ICAgICAgaWYgKGNvb2tpZS5leHBpcmVzKSAKLSAgICAgICAgICAgIGFkZENvb2tpZVBhcmFtKGNv
b2tpZUJ1aWxkZXIsICJleHBpcmVzIiwgcmZjMjYxNkRhdGVTdHJpbmdGcm9tVGltZShjb29raWUu
ZXhwaXJlcykpOwotICAgICAgICBpZiAoY29va2llLmh0dHBPbmx5KSAKLSAgICAgICAgICAgIGFk
ZENvb2tpZVBhcmFtKGNvb2tpZUJ1aWxkZXIsICJodHRwT25seSIsIFN0cmluZygpKTsKLSAgICAg
ICAgY29va2llQnVpbGRlci5hcHBlbmQoJzsnKTsKLQotICAgICAgICBTdHJpbmcgY29va2llVVJM
OwotICAgICAgICBpZiAoIWNvb2tpZS5kb21haW4uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBT
dHJpbmdCdWlsZGVyIHVybEJ1aWxkZXI7Ci0KLSAgICAgICAgICAgIHVybEJ1aWxkZXIuYXBwZW5k
KG1vdmllVVJMLnByb3RvY29sKCkpOwotICAgICAgICAgICAgdXJsQnVpbGRlci5hcHBlbmQoIjov
LyIpOwotICAgICAgICAgICAgaWYgKGNvb2tpZS5kb21haW5bMF0gPT0gJy4nKQotICAgICAgICAg
ICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kKGNvb2tpZS5kb21haW4uc3Vic3RyaW5nKDEpKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZChjb29raWUu
ZG9tYWluKTsKLSAgICAgICAgICAgIGlmIChjb29raWUucGF0aC5sZW5ndGgoKSA+IDEpCi0gICAg
ICAgICAgICAgICAgdXJsQnVpbGRlci5hcHBlbmQoY29va2llLnBhdGgpOwotCi0gICAgICAgICAg
ICBjb29raWVVUkwgPSB1cmxCdWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgY29va2llVVJMID0gbW92aWVVUkw7Ci0KLSAgICAgICAgU3RyaW5nIHN0cmluZyA9
IGNvb2tpZUJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgICAgICAgSW50ZXJuZXRTZXRDb29raWVFeFco
Y29va2llVVJMLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCAwLCBzdHJp
bmcuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIDAsIDApOwotICAgIH0K
LX0KLQotc3RhdGljIHZvaWQgZGlzYWJsZUNvbXBvbmVudHNPbmNlKCkKLXsKLSAgICBzdGF0aWMg
Ym9vbCBzQ29tcG9uZW50c0Rpc2FibGVkID0gZmFsc2U7Ci0gICAgaWYgKHNDb21wb25lbnRzRGlz
YWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBzQ29tcG9uZW50c0Rpc2FibGVkID0gdHJ1ZTsK
LQotICAgIHVpbnQzMl90IGNvbXBvbmVudHNUb0Rpc2FibGVbXVs1XSA9IHsKLSAgICAgICAgeydl
YXQgJywgJ1RFWFQnLCAndGV4dCcsIDAsIDB9LAotICAgICAgICB7J2VhdCAnLCAnVFhUICcsICd0
ZXh0JywgMCwgMH0sICAgIAotICAgICAgICB7J2VhdCAnLCAndXR4dCcsICd0ZXh0JywgMCwgMH0s
ICAKLSAgICAgICAgeydlYXQgJywgJ1RFWFQnLCAndHgzZycsIDAsIDB9LCAgCi0gICAgfTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChjb21wb25lbnRzVG9E
aXNhYmxlKTsgKytpKSAKLSAgICAgICAgUVRNb3ZpZTo6ZGlzYWJsZUNvbXBvbmVudChjb21wb25l
bnRzVG9EaXNhYmxlW2ldKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDb250ZXh0OjpyZXN1bWVMb2FkKCkKLXsKLSAgICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNl
OwotCi0gICAgaWYgKCFtX21vdmllVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgbG9hZEludGVybmFs
KG1fbW92aWVVUkwpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3Vh
bENvbnRleHQ6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgbV9tb3ZpZVVSTCA9IHVy
bDsKLQotICAgIGlmIChtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6Ok5vbmUpIHsKLSAgICAgICAg
bV9kZWxheWluZ0xvYWQgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9h
ZEludGVybmFsKHVybCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dDo6bG9hZEludGVybmFsKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIGlmICgh
UVRNb3ZpZTo6aW5pdGlhbGl6ZVF1aWNrVGltZSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBpcyB0
aGlzIHRoZSByaWdodCBlcnJvciB0byByZXR1cm4/Ci0gICAgICAgIG1fbmV0d29ya1N0YXRlID0g
TWVkaWFQbGF5ZXI6OkRlY29kZUVycm9yOyAKLSAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0
ZUNoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRpc2FibGVDb21wb25l
bnRzT25jZSgpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGFzayB0aW1lci4KLSAgICBNZWRp
YVBsYXllclByaXZhdGVUYXNrVGltZXI6OmluaXRpYWxpemUoKTsKLQotICAgIGlmIChtX25ldHdv
cmtTdGF0ZSAhPSBNZWRpYVBsYXllcjo6TG9hZGluZykgewotICAgICAgICBtX25ldHdvcmtTdGF0
ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwotICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRl
Q2hhbmdlZCgpOwotICAgIH0KLSAgICBpZiAobV9yZWFkeVN0YXRlICE9IE1lZGlhUGxheWVyOjpI
YXZlTm90aGluZykgewotICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5v
dGhpbmc7Ci0gICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwotICAgIH0KLSAg
ICBjYW5jZWxTZWVrKCk7Ci0KLSAgICBzZXRVcENvb2tpZXNGb3JRdWlja1RpbWUodXJsKTsKLQot
ICAgIG1fbW92aWUgPSBhZG9wdFJlZihuZXcgUVRNb3ZpZShtX21vdmllQ2xpZW50LmdldCgpKSk7
Ci0KLSAgICBtX21vdmllLT5sb2FkKHVybC5jaGFyYWN0ZXJzMTYoKSwgdXJsLmxlbmd0aCgpLCBt
X3BsYXllci0+cHJlc2VydmVzUGl0Y2goKSk7Ci0gICAgbV9tb3ZpZS0+c2V0Vm9sdW1lKG1fcGxh
eWVyLT52b2x1bWUoKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlz
dWFsQ29udGV4dDo6cHJlcGFyZVRvUGxheSgpCi17Ci0gICAgaWYgKCFtX21vdmllIHx8IG1fZGVs
YXlpbmdMb2FkKQotICAgICAgICByZXN1bWVMb2FkKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cGxheSgpCi17Ci0gICAgaWYgKCFtX21vdmll
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9zdGFydGVkUGxheWluZyA9IHRydWU7Ci0KLSAgICBt
X21vdmllLT5wbGF5KCk7Ci0gICAgbV92aXN1YWxDb250ZXh0VGltZXIuc3RhcnRSZXBlYXRpbmco
MS4wIC8gMzApOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENv
bnRleHQ6OnBhdXNlKCkKLXsKLSAgICBpZiAoIW1fbW92aWUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX3N0YXJ0ZWRQbGF5aW5nID0gZmFsc2U7Ci0KLSAgICBtX21vdmllLT5wYXVzZSgpOwotICAg
IG1fdmlzdWFsQ29udGV4dFRpbWVyLnN0b3AoKTsKLX0KLQotZmxvYXQgTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIGlmICgh
bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fbW92aWUtPmR1cmF0aW9u
KCk7Ci19Ci0KLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6
OmN1cnJlbnRUaW1lKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbW92aWUpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBtX21vdmllLT5jdXJyZW50VGltZSgpOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNlZWsoZmxvYXQgdGltZSkKLXsK
LSAgICBjYW5jZWxTZWVrKCk7Ci0gICAgCi0gICAgaWYgKCFtX21vdmllKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgaWYgKHRpbWUgPiBkdXJhdGlvbigpKQotICAgICAgICB0aW1lID0gZHVy
YXRpb24oKTsKLSAgICAKLSAgICBtX3NlZWtUbyA9IHRpbWU7Ci0gICAgaWYgKG1heFRpbWVMb2Fk
ZWQoKSA+PSBtX3NlZWtUbykKLSAgICAgICAgZG9TZWVrKCk7Ci0gICAgZWxzZSAKLSAgICAgICAg
bV9zZWVrVGltZXIuc3RhcnQoMCwgMC41Zik7Ci19Ci0gICAgCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmRvU2VlaygpIAotewotICAgIGZsb2F0IG9sZFJh
dGUgPSBtX21vdmllLT5yYXRlKCk7Ci0gICAgaWYgKG9sZFJhdGUpCi0gICAgICAgIG1fbW92aWUt
PnNldFJhdGUoMCk7Ci0gICAgbV9tb3ZpZS0+c2V0Q3VycmVudFRpbWUobV9zZWVrVG8pOwotICAg
IGZsb2F0IHRpbWVBZnRlclNlZWsgPSBjdXJyZW50VGltZSgpOwotICAgIC8vIHJlc3RvcmUgcGxh
eWJhY2sgb25seSBpZiBub3QgYXQgZW5kLCBvdGhld2lzZSBRVE1vdmllIHdpbGwgbG9vcAotICAg
IGlmIChvbGRSYXRlICYmIHRpbWVBZnRlclNlZWsgPCBkdXJhdGlvbigpKQotICAgICAgICBtX21v
dmllLT5zZXRSYXRlKG9sZFJhdGUpOwotICAgIGNhbmNlbFNlZWsoKTsKLX0KLQotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpjYW5jZWxTZWVrKCkKLXsKLSAg
ICBtX3NlZWtUbyA9IC0xOwotICAgIG1fc2Vla1RpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZWVrVGltZXJGaXJlZChUaW1l
cjxNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiopCi17ICAgICAgICAK
LSAgICBpZiAoIW1fbW92aWUgfHwgIXNlZWtpbmcoKSB8fCBjdXJyZW50VGltZSgpID09IG1fc2Vl
a1RvKSB7Ci0gICAgICAgIGNhbmNlbFNlZWsoKTsKLSAgICAgICAgdXBkYXRlU3RhdGVzKCk7Ci0g
ICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOyAKLSAgICAgICAgcmV0dXJuOwotICAgIH0g
Ci0gICAgCi0gICAgaWYgKG1heFRpbWVMb2FkZWQoKSA+PSBtX3NlZWtUbykKLSAgICAgICAgZG9T
ZWVrKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgc3Rh
dGUgPSBuZXR3b3JrU3RhdGUoKTsKLSAgICAgICAgaWYgKHN0YXRlID09IE1lZGlhUGxheWVyOjpF
bXB0eSB8fCBzdGF0ZSA9PSBNZWRpYVBsYXllcjo6TG9hZGVkKSB7Ci0gICAgICAgICAgICBjYW5j
ZWxTZWVrKCk7Ci0gICAgICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKLSAgICAgICAgICAgIG1fcGxh
eWVyLT50aW1lQ2hhbmdlZCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnBhdXNlZCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX21vdmllKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gKCFtX21vdmll
LT5yYXRlKCkpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENv
bnRleHQ6OnNlZWtpbmcoKSBjb25zdAotewotICAgIGlmICghbV9tb3ZpZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBtX3NlZWtUbyA+PSAwOwotfQotCi1JbnRTaXplIE1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6Om5hdHVyYWxTaXplKCkgY29uc3QK
LXsKLSAgICBpZiAoIW1fbW92aWUpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0gICAgaW50
IHdpZHRoOwotICAgIGludCBoZWlnaHQ7Ci0gICAgbV9tb3ZpZS0+Z2V0TmF0dXJhbFNpemUod2lk
dGgsIGhlaWdodCk7Ci0gICAgQ0dTaXplIG9yaWdpbmFsU2l6ZSA9IHt3aWR0aCwgaGVpZ2h0fTsK
LSAgICBDR1NpemUgdHJhbnNmb3JtZWRTaXplID0gQ0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0o
b3JpZ2luYWxTaXplLCBtX21vdmllVHJhbnNmb3JtKTsKLSAgICByZXR1cm4gSW50U2l6ZShhYnMo
dHJhbnNmb3JtZWRTaXplLndpZHRoKSwgYWJzKHRyYW5zZm9ybWVkU2l6ZS5oZWlnaHQpKTsKLX0K
LQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpoYXNWaWRl
bygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX21vdmllKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIG1fbW92aWUtPmhhc1ZpZGVvKCk7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6aGFzQXVkaW8oKSBjb25zdAotewotICAgIGlmICgh
bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21vdmllLT5oYXNB
dWRpbygpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCi17Ci0gICAgaWYgKCFtX21vdmllKQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9tb3ZpZS0+c2V0Vm9sdW1lKHZvbHVtZSk7Ci19Ci0KLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2V0UmF0ZShmbG9hdCByYXRl
KQotewotICAgIGlmICghbV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG8gbm90
IGNhbGwgc2V0UmF0ZSguLi4pIHVubGVzcyB3ZSBoYXZlIHN0YXJ0ZWQgcGxheWluZzsgb3RoZXJ3
aXNlCi0gICAgLy8gUXVpY2tUaW1lJ3MgVmlzdWFsQ29udGV4dCBjYW4gZ2V0IHdlZGdlZCB3YWl0
aW5nIGZvciBhIHJhdGUgY2hhbmdlCi0gICAgLy8gY2FsbCB3aGljaCB3aWxsIG5ldmVyIGNvbWUu
Ci0gICAgaWYgKG1fc3RhcnRlZFBsYXlpbmcpCi0gICAgICAgIG1fbW92aWUtPnNldFJhdGUocmF0
ZSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6
c2V0UHJlc2VydmVzUGl0Y2goYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKLXsKLSAgICBpZiAoIW1fbW92
aWUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX21vdmllLT5zZXRQcmVzZXJ2ZXNQaXRjaChwcmVz
ZXJ2ZXNQaXRjaCk7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dDo6aGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdAotewotICAgIGlmICghbV9tb3ZpZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21vdmllLT5oYXNDbG9zZWRDYXB0
aW9ucygpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sIHZpc2libGUpCi17Ci0gICAgaWYgKCFt
X21vdmllKQotICAgICAgICByZXR1cm47Ci0gICAgbV9tb3ZpZS0+c2V0Q2xvc2VkQ2FwdGlvbnNW
aXNpYmxlKHZpc2libGUpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2Vz
PiBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpidWZmZXJlZCgpIGNv
bnN0Ci17Ci0gICAgYXV0byB0aW1lUmFuZ2VzID0gUGxhdGZvcm1UaW1lUmFuZ2VzOjpjcmVhdGUo
KTsKLQotICAgIGZsb2F0IGxvYWRlZCA9IG1heFRpbWVMb2FkZWQoKTsKLSAgICAvLyBydHNwIHN0
cmVhbXMgYXJlIG5vdCBidWZmZXJlZAotICAgIGlmICghbV9pc1N0cmVhbWluZyAmJiBsb2FkZWQg
PiAwKQotICAgICAgICB0aW1lUmFuZ2VzLT5hZGQoMCwgbG9hZGVkKTsKLSAgICByZXR1cm4gdGlt
ZVJhbmdlczsKLX0KLQotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dDo6bWF4VGltZVNlZWthYmxlKCkgY29uc3QKLXsKLSAgICAvLyBpbmZpbml0ZSBkdXJhdGlv
biBtZWFucyBsaXZlIHN0cmVhbQotICAgIHJldHVybiAhc3RkOjppc2Zpbml0ZShkdXJhdGlvbigp
KSA/IDAgOiBtYXhUaW1lTG9hZGVkKCk7Ci19Ci0KLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvbnRleHQ6Om1heFRpbWVMb2FkZWQoKSBjb25zdAotewotICAgIGlmICgh
bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fbW92aWUtPm1heFRpbWVM
b2FkZWQoKTsgCi19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dDo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbW92aWUgfHwg
IWR1cmF0aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmbG9hdCBjdXJyZW50TWF4
VGltZUxvYWRlZCA9IG1heFRpbWVMb2FkZWQoKTsKLSAgICBib29sIGRpZExvYWRpbmdQcm9ncmVz
cyA9IGN1cnJlbnRNYXhUaW1lTG9hZGVkICE9IG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExvYWRp
bmdQcm9ncmVzczsKLSAgICBtX21heFRpbWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3Mg
PSBjdXJyZW50TWF4VGltZUxvYWRlZDsKLSAgICByZXR1cm4gZGlkTG9hZGluZ1Byb2dyZXNzOwot
fQotCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0Ojp0
b3RhbEJ5dGVzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbW92aWUpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBtX21vdmllLT5kYXRhU2l6ZSgpOwotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmNhbmNlbExvYWQoKQotewotICAgIGlmICht
X25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxheWVyOjpMb2FkaW5nIHx8IG1fbmV0d29ya1N0YXRlID09
IE1lZGlhUGxheWVyOjpMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB0ZWFyRG93
blZpZGVvUmVuZGVyaW5nKCk7Ci0KLSAgICAvLyBDYW5jZWwgdGhlIGxvYWQgYnkgZGVzdHJveWlu
ZyB0aGUgbW92aWUuCi0gICAgbV9tb3ZpZS5jbGVhcigpOwotCi0gICAgdXBkYXRlU3RhdGVzKCk7
Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6dXBk
YXRlU3RhdGVzKCkKLXsKLSAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtT
dGF0ZSA9IG1fbmV0d29ya1N0YXRlOwotICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJl
YWR5U3RhdGUgPSBtX3JlYWR5U3RhdGU7Ci0gIAotICAgIGxvbmcgbG9hZFN0YXRlID0gbV9tb3Zp
ZSA/IG1fbW92aWUtPmxvYWRTdGF0ZSgpIDogUVRNb3ZpZUxvYWRTdGF0ZUVycm9yOwotCi0gICAg
aWYgKGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRlTG9hZGVkICYmIG1fcmVhZHlTdGF0ZSA8
IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEpIHsKLSAgICAgICAgbV9tb3ZpZS0+ZGlzYWJsZVVu
c3VwcG9ydGVkVHJhY2tzKG1fZW5hYmxlZFRyYWNrQ291bnQsIG1fdG90YWxUcmFja0NvdW50KTsK
LSAgICAgICAgaWYgKG1fcGxheWVyLT5pbk1lZGlhRG9jdW1lbnQoKSkgewotICAgICAgICAgICAg
aWYgKCFtX2VuYWJsZWRUcmFja0NvdW50IHx8IG1fZW5hYmxlZFRyYWNrQ291bnQgIT0gbV90b3Rh
bFRyYWNrQ291bnQpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdHlwZSBvZiBtZWRp
YSB0aGF0IHdlIGRvIG5vdCBoYW5kbGUgZGlyZWN0bHkgd2l0aCBhIDx2aWRlbz4gCi0gICAgICAg
ICAgICAgICAgLy8gZWxlbWVudCwgZWcuIFF1aWNrVGltZSBWUiwgYSBtb3ZpZSB3aXRoIGEgc3By
aXRlIHRyYWNrLCBldGMuIFRlbGwgdGhlIAotICAgICAgICAgICAgICAgIC8vIE1lZGlhUGxheWVy
Q2xpZW50IHRoYXQgd2Ugd29uJ3Qgc3VwcG9ydCBpdC4KLSAgICAgICAgICAgICAgICBzYXdVbnN1
cHBvcnRlZFRyYWNrcygpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIGlmICghbV9lbmFibGVkVHJhY2tDb3VudCkKLSAgICAgICAgICAgIGxv
YWRTdGF0ZSA9IFFUTW92aWVMb2FkU3RhdGVFcnJvcjsKLSAgICB9Ci0KLSAgICAvLyAiTG9hZGVk
IiBpcyByZXNlcnZlZCBmb3IgZnVsbHkgYnVmZmVyZWQgbW92aWVzLCBuZXZlciB0aGUgY2FzZSB3
aGVuIHN0cmVhbWluZwotICAgIGlmIChsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUNvbXBs
ZXRlICYmICFtX2lzU3RyZWFtaW5nKSB7Ci0gICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQ
bGF5ZXI6OkxvYWRlZDsKLSAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVF
bm91Z2hEYXRhOwotICAgIH0gZWxzZSBpZiAobG9hZFN0YXRlID49IFFUTW92aWVMb2FkU3RhdGVQ
bGF5dGhyb3VnaE9LKSB7Ci0gICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZl
RW5vdWdoRGF0YTsKLSAgICB9IGVsc2UgaWYgKGxvYWRTdGF0ZSA+PSBRVE1vdmllTG9hZFN0YXRl
UGxheWFibGUpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgbWlnaHQgbm90IHdvcmsgY29ycmVj
dGx5IGluIHN0cmVhbWluZyBjYXNlLCA8cmRhcjovL3Byb2JsZW0vNTY5Mzk2Nz4KLSAgICAgICAg
bV9yZWFkeVN0YXRlID0gY3VycmVudFRpbWUoKSA8IG1heFRpbWVMb2FkZWQoKSA/IE1lZGlhUGxh
eWVyOjpIYXZlRnV0dXJlRGF0YSA6IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE7Ci0gICAg
fSBlbHNlIGlmIChsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkgewotICAgICAg
ICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOwotICAgIH0gZWxzZSBp
ZiAobG9hZFN0YXRlID4gUVRNb3ZpZUxvYWRTdGF0ZUVycm9yKSB7Ci0gICAgICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Ci0gICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlTm90aGluZzsgICAgICAgIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
IChtX3BsYXllci0+aW5NZWRpYURvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIC8vIFNvbWV0aGlu
ZyB3ZW50IHdyb25nIGluIHRoZSBsb2FkaW5nIG9mIG1lZGlhIHdpdGhpbiBhIHN0YW5kYWxvbmUg
ZmlsZS4gCi0gICAgICAgICAgICAvLyBUaGlzIGNhbiBvY2N1ciB3aXRoIGNoYWluZWQgcmVmIG1v
dmllcyB0aGF0IGV2ZW50dWFsbHkgcmVzb2x2ZSB0byBhCi0gICAgICAgICAgICAvLyBmaWxlIHdl
IGRvbid0IHN1cHBvcnQuCi0gICAgICAgICAgICBzYXdVbnN1cHBvcnRlZFRyYWNrcygpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmxvYXQgbG9hZGVkID0gbWF4
VGltZUxvYWRlZCgpOwotICAgICAgICBpZiAoIWxvYWRlZCkKLSAgICAgICAgICAgIG1fcmVhZHlT
dGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKLQotICAgICAgICBpZiAoIW1fZW5hYmxl
ZFRyYWNrQ291bnQpCi0gICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpG
b3JtYXRFcnJvcjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBsb2FkL25ldHdvcmsgZXJyb3JzIGFuZCBkZWNvZGUg
ZXJyb3JzIDxyZGFyOi8vcHJvYmxlbS81NjA1NjkyPgotICAgICAgICAgICAgaWYgKGxvYWRlZCA+
IDApCi0gICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RGVjb2Rl
RXJyb3I7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0g
TWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGlz
UmVhZHlGb3JSZW5kZXJpbmcoKSAmJiAhaGFzU2V0VXBWaWRlb1JlbmRlcmluZygpKQotICAgICAg
ICBzZXRVcFZpZGVvUmVuZGVyaW5nKCk7Ci0KLSAgICBpZiAoc2Vla2luZygpKQotICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7Ci0gICAgCi0gICAgaWYgKG1f
bmV0d29ya1N0YXRlICE9IG9sZE5ldHdvcmtTdGF0ZSkKLSAgICAgICAgbV9wbGF5ZXItPm5ldHdv
cmtTdGF0ZUNoYW5nZWQoKTsKLSAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9sZFJlYWR5U3RhdGUp
Ci0gICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwotfQotCi1ib29sIE1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmlzUmVhZHlGb3JSZW5kZXJpbmco
KSBjb25zdAotewotICAgIHJldHVybiBtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6OkhhdmVN
ZXRhZGF0YSAmJiBtX3BsYXllci0+dmlzaWJsZSgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNhd1Vuc3VwcG9ydGVkVHJhY2tzKCkKLXsKLSAg
ICBtX21vdmllLT5zZXREaXNhYmxlZCh0cnVlKTsKLSAgICBtX2hhc1Vuc3VwcG9ydGVkVHJhY2tz
ID0gdHJ1ZTsKLSAgICBtX3BsYXllci0+bWVkaWFQbGF5ZXJDbGllbnQoKS0+bWVkaWFQbGF5ZXJT
YXdVbnN1cHBvcnRlZFRyYWNrcyhtX3BsYXllcik7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6ZGlkRW5kKCkKLXsKLSAgICBpZiAobV9oYXNVbnN1
cHBvcnRlZFRyYWNrcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGFydGVkUGxheWluZyA9
IGZhbHNlOwotCi0gICAgdXBkYXRlU3RhdGVzKCk7Ci0gICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2Vk
KCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6
c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSAKLXsgCi0gICAgaWYgKG1faGFzVW5zdXBwb3J0
ZWRUcmFja3MgfHwgIW1fbW92aWUgfHwgbV9zaXplID09IHNpemUpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX3NpemUgPSBzaXplOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvbnRleHQ6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQotewotICAgIGlmIChtX2hh
c1Vuc3VwcG9ydGVkVHJhY2tzIHx8ICFtX21vdmllIHx8IG1fdmlzaWJsZSA9PSB2aXNpYmxlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Zpc2libGUgPSB2aXNpYmxlOwotICAgIGlmIChtX3Zp
c2libGUpIHsKLSAgICAgICAgaWYgKGlzUmVhZHlGb3JSZW5kZXJpbmcoKSkKLSAgICAgICAgICAg
IHNldFVwVmlkZW9SZW5kZXJpbmcoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdGVhckRvd25WaWRl
b1JlbmRlcmluZygpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3Vh
bENvbnRleHQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgSW50UmVjdCYgcikKLXsK
LSAgICBNZWRpYVJlbmRlcmluZ01vZGUgY3VycmVudE1vZGUgPSBjdXJyZW50UmVuZGVyaW5nTW9k
ZSgpOwotIAotICAgIGlmIChjdXJyZW50TW9kZSA9PSBNZWRpYVJlbmRlcmluZ05vbmUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChjdXJyZW50TW9kZSA9PSBNZWRpYVJlbmRlcmluZ1NvZnR3
YXJlUmVuZGVyZXIgJiYgIW1fdmlzdWFsQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UVRQaXhlbEJ1ZmZlciBidWZmZXIgPSBtX3Zpc3VhbENvbnRleHQtPmltYWdlRm9yVGltZSgwKTsK
LSAgICBpZiAoYnVmZmVyLnBpeGVsQnVmZmVyUmVmKCkpIHsKLSAgICAgICAgaWYgKG1fcXRWaWRl
b0xheWVyKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgcHJvYmFibHkgYmVpbmcgYXNrZWQgdG8g
cmVuZGVyIHRoZSB2aWRlbyBpbnRvIGEgY2FudmFzLCBidXQgCi0gICAgICAgICAgICAvLyB0aGVy
ZSdzIGEgZ29vZCBjaGFuY2UgdGhlIFFUUGl4ZWxCdWZmZXIgaXMgbm90IEFSR0IgYW5kIHRodXMg
Y2FuJ3QgYmUKLSAgICAgICAgICAgIC8vIGRyYXduIHVzaW5nIENHLiAgSWYgc28sIGZpcmUgdXAg
YW4gSUNNRGVjb21wcmVzc2lvblNlc3Npb24gYW5kIGNvbnZlcnQgCi0gICAgICAgICAgICAvLyB0
aGUgY3VycmVudCBmcmFtZSBpbnRvIHNvbWV0aGluZyB3aGljaCBjYW4gYmUgcmVuZGVyZWQgYnkg
Q0cuCi0gICAgICAgICAgICBpZiAoIWJ1ZmZlci5waXhlbEZvcm1hdElzMzJBUkdCKCkgJiYgIWJ1
ZmZlci5waXhlbEZvcm1hdElzMzJCR1JBKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgZGVj
b21wcmVzc2lvbiBzZXNzaW9uIHdpbGwgb25seSBkZWNvbXByZXNzIGEgc3BlY2lmaWMgcGl4ZWxG
b3JtYXQgCi0gICAgICAgICAgICAgICAgLy8gYXQgYSBzcGVjaWZpYyB3aWR0aCBhbmQgaGVpZ2h0
OyBpZiB0aGVzZSBkaWZmZXIsIHRoZSBzZXNzaW9uIG11c3QgYmUKLSAgICAgICAgICAgICAgICAv
LyByZWNyZWF0ZWQgd2l0aCB0aGUgbmV3IHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAgICAgaWYg
KCFtX2RlY29tcHJlc3Npb25TZXNzaW9uIHx8ICFtX2RlY29tcHJlc3Npb25TZXNzaW9uLT5jYW5E
ZWNvbXByZXNzKGJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgICAgIG1fZGVjb21wcmVzc2lvblNl
c3Npb24gPSBRVERlY29tcHJlc3Npb25TZXNzaW9uOjpjcmVhdGUoYnVmZmVyLnBpeGVsRm9ybWF0
VHlwZSgpLCBidWZmZXIud2lkdGgoKSwgYnVmZmVyLmhlaWdodCgpKTsKLSAgICAgICAgICAgICAg
ICBidWZmZXIgPSBtX2RlY29tcHJlc3Npb25TZXNzaW9uLT5kZWNvbXByZXNzKGJ1ZmZlcik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBDR0ltYWdlUmVmIGltYWdlID0gQ3Jl
YXRlQ0dJbWFnZUZyb21QaXhlbEJ1ZmZlcihidWZmZXIpOwotICAgICAgICAKLSAgICAgICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBwLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgQ0dDb250
ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNv
bnRleHQsIHIueCgpLCByLnkoKSk7Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250
ZXh0LCAwLCByLmhlaWdodCgpKTsKLSAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwg
MSwgLTEpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0TWFrZSgw
LCAwLCByLndpZHRoKCksIHIuaGVpZ2h0KCkpLCBpbWFnZSk7Ci0gICAgICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUoY29udGV4dCk7Ci0KLSAgICAgICAgQ0dJbWFnZVJlbGVhc2UoaW1hZ2UpOwot
ICAgIH0KLSAgICBwYWludENvbXBsZXRlZCgqcCwgcik7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cGFpbnRDb21wbGV0ZWQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIG1fbmV3RnJhbWVBdmFp
bGFibGUgPSBmYWxzZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0OjpWaXN1YWxDb250ZXh0Q2xpZW50OjpyZXRyaWV2ZUN1cnJlbnRJbWFnZVByb2Mo
dm9pZCogcmVmY29uKQotewotICAgIHN0YXRpY19jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVZpc3VhbENvbnRleHQqPihyZWZjb24pLT5yZXRyaWV2ZUN1cnJlbnRJbWFnZSgpOwotfQot
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OlZpc3VhbENv
bnRleHRDbGllbnQ6OmltYWdlQXZhaWxhYmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKiB0
aW1lU3RhbXApCi17Ci0gICAgLy8gVGhpcyBjYWxsIG1heSBjb21lIGluIG9uIGFub3RoZXIgdGhy
ZWFkLCBzbyBtYXJzaGFsbCB0byB0aGUgbWFpbiB0aHJlYWQgZmlyc3Q6Ci0gICAgY2FsbE9uTWFp
blRocmVhZCgmcmV0cmlldmVDdXJyZW50SW1hZ2VQcm9jLCBtX3BhcmVudCk7Ci0KLSAgICAvLyBj
YWxsT25NYWluVGhyZWFkIG11c3QgYmUgcGFpcmVkIHdpdGggY2FuY2VsQ2FsbE9uTWFpblRocmVh
ZCBpbiB0aGUgZGVzdHJ1Y3RvciwKLSAgICAvLyBpbiBjYXNlIHRoaXMgb2JqZWN0IGlzIGRlbGV0
ZWQgYmVmb3JlIHRoZSBtYWluIHRocmVhZCByZXF1ZXN0IGlzIGhhbmRsZWQuCi19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6dmlzdWFsQ29udGV4dFRp
bWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dD4q
KQotewotICAgIGlmIChtX3Zpc3VhbENvbnRleHQgJiYgbV92aXN1YWxDb250ZXh0LT5pc0ltYWdl
QXZhaWxhYmxlRm9yVGltZSgwKSkKLSAgICAgICAgcmV0cmlldmVDdXJyZW50SW1hZ2UoKTsKLX0K
LQotc3RhdGljIENGRGljdGlvbmFyeVJlZiBRVENGRGljdGlvbmFyeUNyZWF0ZVdpdGhEYXRhQ2Fs
bGJhY2soQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBjb25zdCBVSW50OCogYnl0ZXMsIENGSW5k
ZXggbGVuZ3RoKQotewotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEgPSBhZG9wdENGKENG
RGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weShhbGxvY2F0b3IsIGJ5dGVzLCBsZW5ndGgsIGtDRkFs
bG9jYXRvck51bGwpKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRlByb3BlcnR5TGlzdENy
ZWF0ZUZyb21YTUxEYXRhKGFsbG9jYXRvciwgZGF0YS5nZXQoKSwga0NGUHJvcGVydHlMaXN0SW1t
dXRhYmxlLCAwKSk7Ci19Ci0KLXN0YXRpYyBDR0ltYWdlUmVmIENyZWF0ZUNHSW1hZ2VGcm9tUGl4
ZWxCdWZmZXIoUVRQaXhlbEJ1ZmZlciBidWZmZXIpCi17Ci0gICAgQ0dEYXRhUHJvdmlkZXJSZWYg
cHJvdmlkZXIgPSAwOwotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gMDsKLSAgICBD
R0ltYWdlUmVmIGltYWdlID0gMDsKLQotICAgIHNpemVfdCBiaXRzUGVyQ29tcG9uZW50ID0gMDsK
LSAgICBzaXplX3QgYml0c1BlclBpeGVsID0gMDsKLSAgICBDR0ltYWdlQWxwaGFJbmZvIGFscGhh
SW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lOwotICAgICAgICAKLSAgICBpZiAoYnVmZmVyLnBpeGVs
Rm9ybWF0SXMzMkJHUkEoKSkgewotICAgICAgICBiaXRzUGVyQ29tcG9uZW50ID0gODsKLSAgICAg
ICAgYml0c1BlclBpeGVsID0gMzI7Ci0gICAgICAgIGFscGhhSW5mbyA9IChDR0ltYWdlQWxwaGFJ
bmZvKShrQ0dJbWFnZUFscGhhTm9uZVNraXBGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0
dGxlKTsKLSAgICB9IGVsc2UgaWYgKGJ1ZmZlci5waXhlbEZvcm1hdElzMzJBUkdCKCkpIHsKLSAg
ICAgICAgYml0c1BlckNvbXBvbmVudCA9IDg7Ci0gICAgICAgIGJpdHNQZXJQaXhlbCA9IDMyOwot
ICAgICAgICBhbHBoYUluZm8gPSAoQ0dJbWFnZUFscGhhSW5mbykoa0NHSW1hZ2VBbHBoYU5vbmVT
a2lwTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBBbGwgb3RoZXIgcGl4ZWwgZm9ybWF0cyBhcmUgY3VycmVudGx5IHVuc3VwcG9ydGVkOgot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBDR0RhdGFQcm92aWRl
ckRpcmVjdEFjY2Vzc0NhbGxiYWNrcyBjYWxsYmFja3MgPSB7Ci0gICAgICAgICZRVFBpeGVsQnVm
ZmVyOjpkYXRhUHJvdmlkZXJHZXRCeXRlUG9pbnRlckNhbGxiYWNrLAotICAgICAgICAmUVRQaXhl
bEJ1ZmZlcjo6ZGF0YVByb3ZpZGVyUmVsZWFzZUJ5dGVQb2ludGVyQ2FsbGJhY2ssCi0gICAgICAg
ICZRVFBpeGVsQnVmZmVyOjpkYXRhUHJvdmlkZXJHZXRCeXRlc0F0UG9zaXRpb25DYWxsYmFjaywK
LSAgICAgICAgJlFUUGl4ZWxCdWZmZXI6OmRhdGFQcm92aWRlclJlbGVhc2VJbmZvQ2FsbGJhY2ss
Ci0gICAgfTsKLSAgICAKLSAgICAvLyBDb2xvcnNwYWNlIHNob3VsZCBiZSBkZXZpY2UsIHNvIHRo
YXQgUXVhcnR6IGRvZXMgbm90IGhhdmUgdG8gZG8gYW4gZXh0cmEgcmVuZGVyLgotICAgIGNvbG9y
U3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAgICByZXF1aXJlKGNvbG9y
U3BhY2UsIEJhaWwpOwotICAgICAgICAgICAgCi0gICAgcHJvdmlkZXIgPSBDR0RhdGFQcm92aWRl
ckNyZWF0ZURpcmVjdEFjY2VzcyhidWZmZXIucGl4ZWxCdWZmZXJSZWYoKSwgYnVmZmVyLmRhdGFT
aXplKCksICZjYWxsYmFja3MpOwotICAgIHJlcXVpcmUocHJvdmlkZXIsIEJhaWwpOwotCi0gICAg
Ly8gQ0dEYXRhUHJvdmlkZXIgZG9lcyBub3QgcmV0YWluIHRoZSBidWZmZXIsIGJ1dCBpdCB3aWxs
IHJlbGVhc2UgaXQgbGF0ZXIsIHNvIGRvIGFuIGV4dHJhIHJldGFpbiBoZXJlOgotICAgIFFUUGl4
ZWxCdWZmZXI6OnJldGFpbkNhbGxiYWNrKGJ1ZmZlci5waXhlbEJ1ZmZlclJlZigpKTsKLSAgICAg
ICAgCi0gICAgaW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKGJ1ZmZlci53aWR0aCgpLCBidWZmZXIuaGVp
Z2h0KCksIGJpdHNQZXJDb21wb25lbnQsIGJpdHNQZXJQaXhlbCwgYnVmZmVyLmJ5dGVzUGVyUm93
KCksIGNvbG9yU3BhY2UsIGFscGhhSW5mbywgcHJvdmlkZXIsIDAsIGZhbHNlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KTsKLSAKLUJhaWw6Ci0gICAgLy8gT25jZSB0aGUgaW1hZ2UgaXMgY3Jl
YXRlZCB3ZSBjYW4gcmVsZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoZSBwcm92aWRlciBhbmQgdGhl
IGNvbG9yc3BhY2UsIHRoZXkgYXJlIHJldGFpbmVkIGJ5IHRoZSBpbWFnZQotICAgIGlmIChwcm92
aWRlcikKLSAgICAgICAgQ0dEYXRhUHJvdmlkZXJSZWxlYXNlKHByb3ZpZGVyKTsKLSAgICBpZiAo
Y29sb3JTcGFjZSkKLSAgICAgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKLSAK
LSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVWaXN1YWxDb250ZXh0OjpyZXRyaWV2ZUN1cnJlbnRJbWFnZSgpCi17Ci0gICAgaWYgKCFtX3Zp
c3VhbENvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3F0VmlkZW9MYXllcikg
ewotCi0gICAgICAgIFFUUGl4ZWxCdWZmZXIgYnVmZmVyID0gbV92aXN1YWxDb250ZXh0LT5pbWFn
ZUZvclRpbWUoMCk7Ci0gICAgICAgIGlmICghYnVmZmVyLnBpeGVsQnVmZmVyUmVmKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUGxhdGZvcm1DQUxheWVyKiBsYXllciA9IG1fcXRW
aWRlb0xheWVyLmdldCgpOwotCi0gICAgICAgIGlmICghYnVmZmVyLmxvY2tCYXNlQWRkcmVzcygp
KSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZWREbGxzQXZhaWxhYmxlKCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIW1faW1hZ2VRdWV1ZSkgewotICAgICAgICAgICAgICAgICAgICBtX2ltYWdl
UXVldWUgPSBhZG9wdFB0cihuZXcgV0tDQUltYWdlUXVldWUoYnVmZmVyLndpZHRoKCksIGJ1ZmZl
ci5oZWlnaHQoKSwgMzApKTsKLSAgICAgICAgICAgICAgICAgICAgbV9pbWFnZVF1ZXVlLT5zZXRG
bGFncyhXS0NBSW1hZ2VRdWV1ZTo6RmlsbCwgV0tDQUltYWdlUXVldWU6OkZpbGwpOwotICAgICAg
ICAgICAgICAgICAgICBsYXllci0+c2V0Q29udGVudHMobV9pbWFnZVF1ZXVlLT5nZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRGVidWcgUXVpY2tUaW1lIGxp
bmtzIGFnYWluc3QgYSBub24tRGVidWcgdmVyc2lvbiBvZiBDb3JlRm91bmRhdGlvbiwgc28gdGhl
Ci0gICAgICAgICAgICAgICAgLy8gQ0ZEaWN0aW9uYXJ5IGF0dGFjaGVkIHRvIHRoZSBDVlBpeGVs
QnVmZmVyIGNhbm5vdCBiZSBkaXJlY3RseSBwYXNzZWQgb24gaW50byB0aGUKLSAgICAgICAgICAg
ICAgICAvLyBDQUltYWdlUXVldWUgd2l0aG91dCBiZWluZyBjb252ZXJ0ZWQgdG8gYSBub24tRGVi
dWcgQ0ZEaWN0aW9uYXJ5LiAgQWRkaXRpb25hbGx5LAotICAgICAgICAgICAgICAgIC8vIG9sZCB2
ZXJzaW9ucyBvZiBRdWlja1RpbWUgdXNlZCBhIG5vbi1BQVMgQ29yZUZvdW5kYXRpb24sIHNvIHRo
ZSB0eXBlcyBhcmUgbm90IAotICAgICAgICAgICAgICAgIC8vIGludGVyY2hhbmdhYmxlIGV2ZW4g
aW4gdGhlIHJlbGVhc2UgY2FzZS4KLSAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiBhdHRhY2htZW50cyA9IGFkb3B0Q0YoUVRDRkRpY3Rpb25hcnlDcmVhdGVDb3B5V2l0
aERhdGFDYWxsYmFjayhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBidWZmZXIuYXR0YWNobWVudHMoKSwg
JlFUQ0ZEaWN0aW9uYXJ5Q3JlYXRlV2l0aERhdGFDYWxsYmFjaykpOwotICAgICAgICAgICAgICAg
IENGVGltZUludGVydmFsIGltYWdlVGltZSA9IFFUTW92aWVWaXN1YWxDb250ZXh0OjpjdXJyZW50
SG9zdFRpbWUoKTsKLQotICAgICAgICAgICAgICAgIG1faW1hZ2VRdWV1ZS0+Y29sbGVjdCgpOwot
Ci0gICAgICAgICAgICAgICAgdWludDY0X3QgaW1hZ2VJZCA9IG1faW1hZ2VRdWV1ZS0+cmVnaXN0
ZXJQaXhlbEJ1ZmZlcihidWZmZXIuYmFzZUFkZHJlc3MoKSwgYnVmZmVyLmRhdGFTaXplKCksIGJ1
ZmZlci5ieXRlc1BlclJvdygpLCBidWZmZXIud2lkdGgoKSwgYnVmZmVyLmhlaWdodCgpLCBidWZm
ZXIucGl4ZWxGb3JtYXRUeXBlKCksIGF0dGFjaG1lbnRzLmdldCgpLCAwKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChtX2ltYWdlUXVldWUtPmluc2VydEltYWdlKGltYWdlVGltZSwgV0tDQUltYWdl
UXVldWU6OkJ1ZmZlciwgaW1hZ2VJZCwgV0tDQUltYWdlUXVldWU6Ok9wYXF1ZSB8IFdLQ0FJbWFn
ZVF1ZXVlOjpGbHVzaCwgJlFUUGl4ZWxCdWZmZXI6OmltYWdlUXVldWVSZWxlYXNlQ2FsbGJhY2ss
IGJ1ZmZlci5waXhlbEJ1ZmZlclJlZigpKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBSZXRh
aW4gdGhlIGJ1ZmZlciBvbmUgZXh0cmEgdGltZSBzbyBpdCBkb2Vzbid0IGRpc3NhcHBlYXIgYmVm
b3JlIENBSW1hZ2VRdWV1ZSBkZWNpZGVzIHRvIHJlbGVhc2UgaXQ6Ci0gICAgICAgICAgICAgICAg
ICAgIFFUUGl4ZWxCdWZmZXI6OnJldGFpbkNhbGxiYWNrKGJ1ZmZlci5waXhlbEJ1ZmZlclJlZigp
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IENyZWF0ZUNHSW1hZ2VGcm9tUGl4ZWxCdWZmZXIoYnVm
ZmVyKTsKLSAgICAgICAgICAgICAgICBsYXllci0+c2V0Q29udGVudHMoaW1hZ2UpOwotICAgICAg
ICAgICAgICAgIENHSW1hZ2VSZWxlYXNlKGltYWdlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgYnVmZmVyLnVubG9ja0Jhc2VBZGRyZXNzKCk7Ci0gICAgICAgICAgICBsYXllci0+c2V0
TmVlZHNDb21taXQoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBtX3BsYXllci0+
cmVwYWludCgpOwotCi0gICAgbV92aXN1YWxDb250ZXh0LT50YXNrKCk7Ci19Ci0KLXN0YXRpYyBI
YXNoU2V0PFN0cmluZz4gbWltZVR5cGVDYWNoZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChIYXNoU2V0PFN0cmluZz4sIHR5cGVDYWNoZSwgKCkpOwotICAgIHN0YXRpYyBib29sIHR5cGVM
aXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIGlmICghdHlwZUxpc3RJbml0aWFsaXplZCkg
ewotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IFFUTW92aWU6OmNvdW50U3VwcG9ydGVkVHlwZXMo
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKLSAgICAg
ICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXI7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsZW47
Ci0gICAgICAgICAgICBRVE1vdmllOjpnZXRTdXBwb3J0ZWRUeXBlKG4sIGNoYXJhY3RlciwgbGVu
KTsKLSAgICAgICAgICAgIGlmIChsZW4pCi0gICAgICAgICAgICAgICAgdHlwZUNhY2hlLmFkZChT
dHJpbmcoY2hhcmFjdGVyLCBsZW4pKTsKLSAgICAgICAgfQotCi0gICAgICAgIHR5cGVMaXN0SW5p
dGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHlwZUNhY2hlOwotfQot
Ci1zdGF0aWMgQ0ZTdHJpbmdSZWYgY3JlYXRlVmVyc2lvblN0cmluZ0Zyb21Nb2R1bGVOYW1lKExQ
Q1dTVFIgbW9kdWxlTmFtZSkKLXsKLSAgICBITU9EVUxFIG1vZHVsZSA9IEdldE1vZHVsZUhhbmRs
ZVcobW9kdWxlTmFtZSk7Ci0gICAgaWYgKCFtb2R1bGUpIAotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHdjaGFyX3QgZmlsZVBhdGhbTUFYX1BBVEhdID0gezB9OwotICAgIGlmICghR2V0TW9kdWxl
RmlsZU5hbWVXKG1vZHVsZSwgZmlsZVBhdGgsIE1BWF9QQVRIKSkgCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgRFdPUkQgdmVyc2lvbkluZm9TaXplID0gR2V0RmlsZVZlcnNpb25JbmZvU2l6ZVco
ZmlsZVBhdGgsIDApOwotICAgIGlmICghdmVyc2lvbkluZm9TaXplKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIENGU3RyaW5nUmVmIHZlcnNpb25TdHJpbmcgPSAwOwotICAgIHZvaWQqIHZlcnNp
b25JbmZvID0gY2FsbG9jKHZlcnNpb25JbmZvU2l6ZSwgc2l6ZW9mKGNoYXIpKTsKLSAgICBpZiAo
R2V0RmlsZVZlcnNpb25JbmZvKGZpbGVQYXRoLCAwLCB2ZXJzaW9uSW5mb1NpemUsIHZlcnNpb25J
bmZvKSkgewotICAgICAgICBWU19GSVhFREZJTEVJTkZPKiBmaWxlSW5mbyA9IDA7Ci0gICAgICAg
IFVJTlQgZmlsZUluZm9MZW5ndGggPSAwOwotCi0gICAgICAgIGlmIChWZXJRdWVyeVZhbHVlVyh2
ZXJzaW9uSW5mbywgTCJcXCIsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBWT0lEKj4oJmZpbGVJbmZvKSwg
JmZpbGVJbmZvTGVuZ3RoKSkgewotICAgICAgICAgICAgdmVyc2lvblN0cmluZyA9IENGU3RyaW5n
Q3JlYXRlV2l0aEZvcm1hdChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBDRlNUUigiJWQuJWQuJWQu
JWQiKSwgCi0gICAgICAgICAgICAgICAgSElXT1JEKGZpbGVJbmZvLT5kd0ZpbGVWZXJzaW9uTVMp
LCBMT1dPUkQoZmlsZUluZm8tPmR3RmlsZVZlcnNpb25NUyksIAotICAgICAgICAgICAgICAgIEhJ
V09SRChmaWxlSW5mby0+ZHdGaWxlVmVyc2lvbkxTKSwgTE9XT1JEKGZpbGVJbmZvLT5kd0ZpbGVW
ZXJzaW9uTFMpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBmcmVlKHZlcnNpb25JbmZvKTsKLQot
ICAgIHJldHVybiB2ZXJzaW9uU3RyaW5nOwotfQotCi1zdGF0aWMgYm9vbCByZXF1aXJlZERsbHNB
dmFpbGFibGUoKSAKLXsKLSAgICBzdGF0aWMgYm9vbCBzX3ByZXJlcXVpc2l0ZXNDaGVja2VkID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGJvb2wgc19wcmVyZXF1aXNpdGVzU2F0aXNmaWVkOwotICAgIHN0
YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrTWluUXVhcnR6Q29yZVZlcnNpb24gPSBDRlNUUigiMS4w
LjQyLjAiKTsKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga01pbkNvcmVWaWRlb1ZlcnNp
b24gPSBDRlNUUigiMS4wLjEuMCIpOwotCi0gICAgaWYgKHNfcHJlcmVxdWlzaXRlc0NoZWNrZWQp
Ci0gICAgICAgIHJldHVybiBzX3ByZXJlcXVpc2l0ZXNTYXRpc2ZpZWQ7Ci0gICAgc19wcmVyZXF1
aXNpdGVzQ2hlY2tlZCA9IHRydWU7Ci0gICAgc19wcmVyZXF1aXNpdGVzU2F0aXNmaWVkID0gZmFs
c2U7Ci0KLSAgICBDRlN0cmluZ1JlZiBxdWFydHpDb3JlU3RyaW5nID0gY3JlYXRlVmVyc2lvblN0
cmluZ0Zyb21Nb2R1bGVOYW1lKEwiUXVhcnR6Q29yZSIpOwotICAgIGlmICghcXVhcnR6Q29yZVN0
cmluZykKLSAgICAgICAgcXVhcnR6Q29yZVN0cmluZyA9IGNyZWF0ZVZlcnNpb25TdHJpbmdGcm9t
TW9kdWxlTmFtZShMIlF1YXJ0ekNvcmVfZGVidWciKTsKLQotICAgIENGU3RyaW5nUmVmIGNvcmVW
aWRlb1N0cmluZyA9IGNyZWF0ZVZlcnNpb25TdHJpbmdGcm9tTW9kdWxlTmFtZShMIkNvcmVWaWRl
byIpOwotICAgIGlmICghY29yZVZpZGVvU3RyaW5nKQotICAgICAgICBjb3JlVmlkZW9TdHJpbmcg
PSBjcmVhdGVWZXJzaW9uU3RyaW5nRnJvbU1vZHVsZU5hbWUoTCJDb3JlVmlkZW9fZGVidWciKTsK
LQotICAgIHNfcHJlcmVxdWlzaXRlc1NhdGlzZmllZCA9IChxdWFydHpDb3JlU3RyaW5nICYmIGNv
cmVWaWRlb1N0cmluZwotICAgICAgICAmJiBDRlN0cmluZ0NvbXBhcmUocXVhcnR6Q29yZVN0cmlu
Zywga01pblF1YXJ0ekNvcmVWZXJzaW9uLCBrQ0ZDb21wYXJlTnVtZXJpY2FsbHkpICE9IGtDRkNv
bXBhcmVMZXNzVGhhbiAKLSAgICAgICAgJiYgQ0ZTdHJpbmdDb21wYXJlKGNvcmVWaWRlb1N0cmlu
Zywga01pbkNvcmVWaWRlb1ZlcnNpb24sIGtDRkNvbXBhcmVOdW1lcmljYWxseSkgIT0ga0NGQ29t
cGFyZUxlc3NUaGFuKTsKLQotICAgIGlmIChxdWFydHpDb3JlU3RyaW5nKQotICAgICAgICBDRlJl
bGVhc2UocXVhcnR6Q29yZVN0cmluZyk7Ci0gICAgaWYgKGNvcmVWaWRlb1N0cmluZykKLSAgICAg
ICAgQ0ZSZWxlYXNlKGNvcmVWaWRlb1N0cmluZyk7Ci0KLSAgICByZXR1cm4gc19wcmVyZXF1aXNp
dGVzU2F0aXNmaWVkOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3Vh
bENvbnRleHQ6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMpCi17Ci0g
ICAgdHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Ci19IAotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmlzQXZhaWxhYmxlKCkKLXsKLSNpZmRlZiBERUJVR19B
TEwKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAgIHJldHVybiBRVE1vdmllOjppbml0aWFs
aXplUXVpY2tUaW1lKCk7Ci0jZW5kaWYKLX0KLQotTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBN
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzdXBwb3J0c1R5cGUoY29u
c3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsKLSAgICAvLyBv
bmx5IHJldHVybiAiSXNTdXBwb3J0ZWQiIGlmIHRoZXJlIGlzIG5vIGNvZGVjcyBwYXJhbWV0ZXIg
Zm9yIG5vdyBhcyB0aGVyZSBpcyBubyB3YXkgdG8gYXNrIFFUIGlmIGl0IHN1cHBvcnRzIGFuCi0g
ICAgLy8gIGV4dGVuZGVkIE1JTUUgdHlwZQotICAgIHJldHVybiBtaW1lVHlwZUNhY2hlKCkuY29u
dGFpbnMocGFyYW1ldGVycy50eXBlKSA/IChwYXJhbWV0ZXJzLmNvZGVjcy5pc0VtcHR5KCkgPyBN
ZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQpIDog
TWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6Ok1vdmllQ2xpZW50Ojptb3ZpZUVuZGVkKFFUTW92aWUq
IG1vdmllKQotewotICAgIGlmIChtX3BhcmVudC0+bV9oYXNVbnN1cHBvcnRlZFRyYWNrcykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9wYXJlbnQtPm1fdmlzdWFsQ29udGV4dFRpbWVyLnN0b3Ao
KTsKLQotICAgIEFTU0VSVChtX3BhcmVudC0+bV9tb3ZpZS5nZXQoKSA9PSBtb3ZpZSk7Ci0gICAg
bV9wYXJlbnQtPmRpZEVuZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVZpc3VhbENvbnRleHQ6Ok1vdmllQ2xpZW50Ojptb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3Zp
ZSogbW92aWUpCi17Ci0gICAgaWYgKG1fcGFyZW50LT5tX2hhc1Vuc3VwcG9ydGVkVHJhY2tzKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9wYXJlbnQtPm1fbW92aWUuZ2V0KCkgPT0g
bW92aWUpOwotICAgIG1fcGFyZW50LT51cGRhdGVTdGF0ZXMoKTsKLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpNb3ZpZUNsaWVudDo6bW92aWVUaW1l
Q2hhbmdlZChRVE1vdmllKiBtb3ZpZSkKLXsKLSAgICBpZiAobV9wYXJlbnQtPm1faGFzVW5zdXBw
b3J0ZWRUcmFja3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3BhcmVudC0+bV9t
b3ZpZS5nZXQoKSA9PSBtb3ZpZSk7Ci0gICAgbV9wYXJlbnQtPnVwZGF0ZVN0YXRlcygpOwotICAg
IG1fcGFyZW50LT5tX3BsYXllci0+dGltZUNoYW5nZWQoKTsKLX0KLQotYm9vbCBNZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigp
IGNvbnN0Ci17Ci0gICAgLy8gV2UgdGVsbCBxdWlja3RpbWUgdG8gZGlzYWxsb3cgcmVzb3VyY2Vz
IHRoYXQgY29tZSBmcm9tIGRpZmZlcmVudCBvcmlnaW5zCi0gICAgLy8gc28gd2UgYWxsIG1lZGlh
IGlzIHNpbmdsZSBvcmlnaW4uCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2V0UHJlbG9hZChNZWRpYVBsYXllcjo6
UHJlbG9hZCBwcmVsb2FkKQotewotICAgIG1fcHJlbG9hZCA9IHByZWxvYWQ7Ci0gICAgaWYgKG1f
ZGVsYXlpbmdMb2FkICYmIG1fcHJlbG9hZCAhPSBNZWRpYVBsYXllcjo6Tm9uZSkKLSAgICAgICAg
cmVzdW1lTG9hZCgpOwotfQotCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0OjptZWRpYVRpbWVGb3JUaW1lVmFsdWUoZmxvYXQgdGltZVZhbHVlKSBjb25zdAot
ewotICAgIGxvbmcgdGltZVNjYWxlOwotICAgIGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXll
cjo6SGF2ZU1ldGFkYXRhIHx8ICEodGltZVNjYWxlID0gbV9tb3ZpZS0+dGltZVNjYWxlKCkpKQot
ICAgICAgICByZXR1cm4gdGltZVZhbHVlOwotCi0gICAgbG9uZyBtZWRpYVRpbWVWYWx1ZSA9IGxy
b3VuZGYodGltZVZhbHVlICogdGltZVNjYWxlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG1lZGlhVGltZVZhbHVlKSAvIHRpbWVTY2FsZTsKLX0KLQotTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6TWVkaWFSZW5kZXJpbmdNb2RlIE1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OmN1cnJlbnRSZW5kZXJpbmdNb2RlKCkgY29uc3QK
LXsKLSAgICBpZiAoIW1fbW92aWUpCi0gICAgICAgIHJldHVybiBNZWRpYVJlbmRlcmluZ05vbmU7
Ci0KLSAgICBpZiAobV9xdFZpZGVvTGF5ZXIpCi0gICAgICAgIHJldHVybiBNZWRpYVJlbmRlcmlu
Z01vdmllTGF5ZXI7Ci0KLSAgICByZXR1cm4gbV92aXN1YWxDb250ZXh0ID8gTWVkaWFSZW5kZXJp
bmdTb2Z0d2FyZVJlbmRlcmVyIDogTWVkaWFSZW5kZXJpbmdOb25lOwotfQotCi1NZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpNZWRpYVJlbmRlcmluZ01vZGUgTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cHJlZmVycmVkUmVuZGVyaW5nTW9k
ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BsYXllci0+ZnJhbWVWaWV3KCkgfHwgIW1fbW92aWUp
Ci0gICAgICAgIHJldHVybiBNZWRpYVJlbmRlcmluZ05vbmU7Ci0KLSAgICBpZiAoc3VwcG9ydHNB
Y2NlbGVyYXRlZFJlbmRlcmluZygpICYmIG1fcGxheWVyLT5tZWRpYVBsYXllckNsaWVudCgpLT5t
ZWRpYVBsYXllclJlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQobV9wbGF5ZXIpKQotICAgICAgICBy
ZXR1cm4gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyOwotCi0gICAgcmV0dXJuIE1lZGlhUmVuZGVy
aW5nU29mdHdhcmVSZW5kZXJlcjsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVWaXN1YWxDb250ZXh0OjpzZXRVcFZpZGVvUmVuZGVyaW5nKCkKLXsKLSAgICBNZWRpYVJlbmRl
cmluZ01vZGUgY3VycmVudE1vZGUgPSBjdXJyZW50UmVuZGVyaW5nTW9kZSgpOwotICAgIE1lZGlh
UmVuZGVyaW5nTW9kZSBwcmVmZXJyZWRNb2RlID0gcHJlZmVycmVkUmVuZGVyaW5nTW9kZSgpOwot
Ci0gICAgaWYgKGN1cnJlbnRNb2RlID09IHByZWZlcnJlZE1vZGUgJiYgY3VycmVudE1vZGUgIT0g
TWVkaWFSZW5kZXJpbmdOb25lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY3VycmVudE1v
ZGUgIT0gTWVkaWFSZW5kZXJpbmdOb25lKSAgCi0gICAgICAgIHRlYXJEb3duVmlkZW9SZW5kZXJp
bmcoKTsKLQotICAgIGlmIChwcmVmZXJyZWRNb2RlID09IE1lZGlhUmVuZGVyaW5nTW92aWVMYXll
cikKLSAgICAgICAgY3JlYXRlTGF5ZXJGb3JNb3ZpZSgpOwotCi0gICAgaWYgKGN1cnJlbnRNb2Rl
ID09IE1lZGlhUmVuZGVyaW5nTW92aWVMYXllciB8fCBwcmVmZXJyZWRNb2RlID09IE1lZGlhUmVu
ZGVyaW5nTW92aWVMYXllcikKLSAgICAgICAgbV9wbGF5ZXItPm1lZGlhUGxheWVyQ2xpZW50KCkt
Pm1lZGlhUGxheWVyUmVuZGVyaW5nTW9kZUNoYW5nZWQobV9wbGF5ZXIpOwotCi0gICAgUVRQaXhl
bEJ1ZmZlcjo6VHlwZSBjb250ZXh0VHlwZSA9IHJlcXVpcmVkRGxsc0F2YWlsYWJsZSgpICYmIHBy
ZWZlcnJlZE1vZGUgPT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyID8gUVRQaXhlbEJ1ZmZlcjo6
Q29uZmlndXJlRm9yQ0FJbWFnZVF1ZXVlIDogUVRQaXhlbEJ1ZmZlcjo6Q29uZmlndXJlRm9yQ0dJ
bWFnZTsKLSAgICBtX3Zpc3VhbENvbnRleHQgPSBRVE1vdmllVmlzdWFsQ29udGV4dDo6Y3JlYXRl
KG1fdmlzdWFsQ29udGV4dENsaWVudC5nZXQoKSwgY29udGV4dFR5cGUpOwotICAgIG1fdmlzdWFs
Q29udGV4dC0+c2V0TW92aWUobV9tb3ZpZS5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6dGVhckRvd25WaWRlb1JlbmRlcmluZygpCi17
Ci0gICAgaWYgKG1fcXRWaWRlb0xheWVyKQotICAgICAgICBkZXN0cm95TGF5ZXJGb3JNb3ZpZSgp
OwotCi0gICAgbV92aXN1YWxDb250ZXh0ID0gMDsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpoYXNTZXRVcFZpZGVvUmVuZGVyaW5nKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9xdFZpZGVvTGF5ZXIgfHwgKGN1cnJlbnRSZW5kZXJpbmdNb2RlKCkg
IT0gTWVkaWFSZW5kZXJpbmdNb3ZpZUxheWVyICYmIG1fdmlzdWFsQ29udGV4dCk7Ci19Ci0KLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6cmV0cmlldmVBbmRS
ZXNldE1vdmllVHJhbnNmb3JtKCkKLXsKLSAgICAvLyBGaXJzdCB0aGluZ3MgZmlyc3QsIHJlc2V0
IHRoZSB0b3RhbCBtb3ZpZSB0cmFuc2Zvcm0gc28gdGhhdAotICAgIC8vIHdlIGNhbiBiYWlsIG91
dCBlYXJseToKLSAgICBtX21vdmllVHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0
eTsKLQotICAgIGlmICghbV9tb3ZpZSB8fCAhbV9tb3ZpZS0+aGFzVmlkZW8oKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gVGhpcyB0cmljayB3aWxsIG9ubHkgd29yayBvbiBtb3ZpZXMgd2l0
aCBhIHNpbmdsZSB2aWRlbyB0cmFjaywKLSAgICAvLyBzbyBiYWlsIG91dCBlYXJseSBpZiB0aGUg
dmlkZW8gY29udGFpbnMgbW9yZSB0aGFuIG9uZSAob3IgemVybykKLSAgICAvLyB2aWRlbyB0cmFj
a3MuCi0gICAgUVRUcmFja0FycmF5IHZpZGVvVHJhY2tzID0gbV9tb3ZpZS0+dmlkZW9UcmFja3Mo
KTsKLSAgICBpZiAodmlkZW9UcmFja3Muc2l6ZSgpICE9IDEpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFFUVHJhY2sqIHRyYWNrID0gdmlkZW9UcmFja3NbMF0uZ2V0KCk7Ci0gICAgQVNTRVJUKHRy
YWNrKTsKLQotICAgIENHQWZmaW5lVHJhbnNmb3JtIG1vdmllVHJhbnNmb3JtID0gbV9tb3ZpZS0+
Z2V0VHJhbnNmb3JtKCk7Ci0gICAgaWYgKCFDR0FmZmluZVRyYW5zZm9ybUVxdWFsVG9UcmFuc2Zv
cm0obW92aWVUcmFuc2Zvcm0sIENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHkpKQotICAgICAgICBt
X21vdmllLT5yZXNldFRyYW5zZm9ybSgpOwotCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhY2tU
cmFuc2Zvcm0gPSB0cmFjay0+Z2V0VHJhbnNmb3JtKCk7Ci0gICAgaWYgKCFDR0FmZmluZVRyYW5z
Zm9ybUVxdWFsVG9UcmFuc2Zvcm0odHJhY2tUcmFuc2Zvcm0sIENHQWZmaW5lVHJhbnNmb3JtSWRl
bnRpdHkpKQotICAgICAgICB0cmFjay0+cmVzZXRUcmFuc2Zvcm0oKTsKLQotICAgIC8vIE11bHRp
cGx5IHRoZSB0d28gdHJhbnNmb3JtcyB0b2dldGhlciwgdGFraW5nIGNhcmUgdG8gCi0gICAgLy8g
ZG8gc28gaW4gdGhlIGNvcnJlY3Qgb3JkZXIsIHRyYWNrICogbW92aWUgPSBmaW5hbDoKLSAgICBt
X21vdmllVHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQodHJhY2tUcmFuc2Zvcm0s
IG1vdmllVHJhbnNmb3JtKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDb250ZXh0OjpjcmVhdGVMYXllckZvck1vdmllKCkKLXsKLSAgICBBU1NFUlQoc3VwcG9y
dHNBY2NlbGVyYXRlZFJlbmRlcmluZygpKTsKLQotICAgIGlmICghbV9tb3ZpZSB8fCBtX3F0Vmlk
ZW9MYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ3JlYXRlIGEgUGxhdGZvcm1DQUxh
eWVyIHdoaWNoIHdpbGwgdHJhbnNmb3JtIHRoZSBjb250ZW50cyBvZiB0aGUgdmlkZW8gbGF5ZXIK
LSAgICAvLyB3aGljaCBpcyBpbiBtX3F0VmlkZW9MYXllci4KLSAgICBtX3RyYW5zZm9ybUxheWVy
ID0gUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVM
YXllciwgbV9sYXllckNsaWVudC5nZXQoKSk7Ci0gICAgaWYgKCFtX3RyYW5zZm9ybUxheWVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIHRoZSBsYXllciBhcyBhbmNob3JlZCBpbiB0
aGUgdG9wIGxlZnQuCi0gICAgbV90cmFuc2Zvcm1MYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludDNEKCkpOwotCi0gICAgbV9xdFZpZGVvTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNy
ZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCAwKTsKLSAgICBpZiAoIW1fcXRW
aWRlb0xheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoQ0dBZmZpbmVUcmFuc2Zvcm1F
cXVhbFRvVHJhbnNmb3JtKG1fbW92aWVUcmFuc2Zvcm0sIENHQWZmaW5lVHJhbnNmb3JtSWRlbnRp
dHkpKQotICAgICAgICByZXRyaWV2ZUFuZFJlc2V0TW92aWVUcmFuc2Zvcm0oKTsKLSAgICBDR0Fm
ZmluZVRyYW5zZm9ybSB0ID0gbV9tb3ZpZVRyYW5zZm9ybTsKLQotICAgIC8vIFJlbW92ZSB0aGUg
dHJhbnNsYXRpb24gcG9ydGlvbiBvZiB0aGUgdHJhbnNmb3JtLCBzaW5jZSB3ZSB3aWxsIGFsd2F5
cyByb3RhdGUgYWJvdXQKLSAgICAvLyB0aGUgbGF5ZXIncyBjZW50ZXIgcG9pbnQuICBJbiBvdXIg
bGltaXRlZCB1c2UtY2FzZSAoYSBzaW5nbGUgdmlkZW8gdHJhY2spLCB0aGlzIGlzCi0gICAgLy8g
c2FmZToKLSAgICB0LnR4ID0gdC50eSA9IDA7Ci0gICAgbV9xdFZpZGVvTGF5ZXItPnNldFRyYW5z
Zm9ybShDQVRyYW5zZm9ybTNETWFrZUFmZmluZVRyYW5zZm9ybSh0KSk7Ci0KLSNpZm5kZWYgTkRF
QlVHCi0gICAgbV9xdFZpZGVvTGF5ZXItPnNldE5hbWUoIlZpZGVvIGxheWVyIik7Ci0jZW5kaWYK
LSAgICBtX3RyYW5zZm9ybUxheWVyLT5hcHBlbmRTdWJsYXllcihtX3F0VmlkZW9MYXllci5nZXQo
KSk7Ci0gICAgbV90cmFuc2Zvcm1MYXllci0+c2V0TmVlZHNMYXlvdXQoKTsKLSAgICAvLyBUaGUg
bGF5ZXIgd2lsbCBnZXQgaG9va2VkIHVwIHZpYSBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdy
YXBoaWNzTGF5ZXJDb25maWd1cmF0aW9uKCkuCi0KLSAgICAvLyBGaWxsIHRoZSBuZXdseSBjcmVh
dGVkIGxheWVyIHdpdGggaW1hZ2UgZGF0YSwgc28gd2UncmUgbm90IGxvb2tpbmcgYXQgCi0gICAg
Ly8gYW4gZW1wdHkgbGF5ZXIgdW50aWwgdGhlIG5leHQgdGltZSBhIG5ldyBpbWFnZSBpcyBhdmFp
bGFibGUsIHdoaWNoIGNvdWxkCi0gICAgLy8gYmUgYSBsb25nIHRpbWUgaWYgd2UncmUgcGF1c2Vk
LgotICAgIGlmIChtX3Zpc3VhbENvbnRleHQpCi0gICAgICAgIHJldHJpZXZlQ3VycmVudEltYWdl
KCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6
ZGVzdHJveUxheWVyRm9yTW92aWUoKQotewotICAgIGlmIChtX3F0VmlkZW9MYXllcikgewotICAg
ICAgICBtX3F0VmlkZW9MYXllci0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKLSAgICAgICAgbV9x
dFZpZGVvTGF5ZXIgPSAwOwotICAgIH0KLQotICAgIGlmIChtX3RyYW5zZm9ybUxheWVyKQotICAg
ICAgICBtX3RyYW5zZm9ybUxheWVyID0gMDsKLQotICAgIGlmIChtX2ltYWdlUXVldWUpCi0gICAg
ICAgIG1faW1hZ2VRdWV1ZSA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGlzUmVhZHlGb3JSZW5kZXJpbmcoKTsKLX0KLQotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjphY2NlbGVyYXRlZFJlbmRlcmlu
Z1N0YXRlQ2hhbmdlZCgpCi17Ci0gICAgLy8gU2V0IHVwIG9yIGNoYW5nZSB0aGUgcmVuZGVyaW5n
IHBhdGggaWYgbmVjZXNzYXJ5LgotICAgIHNldFVwVmlkZW9SZW5kZXJpbmcoKTsKLX0KLQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0OjpzZXRQcml2YXRlQnJv
d3NpbmdNb2RlKGJvb2wgcHJpdmF0ZUJyb3dzaW5nKQotewotICAgIG1fcHJpdmF0ZUJyb3dzaW5n
ID0gcHJpdmF0ZUJyb3dzaW5nOwotICAgIGlmIChtX21vdmllKQotICAgICAgICBtX21vdmllLT5z
ZXRQcml2YXRlQnJvd3NpbmdNb2RlKG1fcHJpdmF0ZUJyb3dzaW5nKTsKLX0KLQotfQotCi0jZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZp
c3VhbENvbnRleHQuaAkocmV2aXNpb24gMTY1NDUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29u
dGV4dF9oCi0jZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHRf
aAotCi0jaWYgRU5BQkxFKFZJREVPKQotCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgi
Ci0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dBZmZpbmVUcmFu
c2Zvcm0uaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZm5kZWYgRFJBV19GUkFNRV9SQVRF
Ci0jZGVmaW5lIERSQVdfRlJBTUVfUkFURSAwCi0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgQ0dJ
bWFnZSAqQ0dJbWFnZVJlZjsKLWNsYXNzIFFUTW92aWU7Ci1jbGFzcyBRVE1vdmllVmlzdWFsQ29u
dGV4dDsKLWNsYXNzIFFURGVjb21wcmVzc2lvblNlc3Npb247Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIEludFJl
Y3Q7Ci1jbGFzcyBQbGF0Zm9ybUNBTGF5ZXI7Ci1jbGFzcyBXS0NBSW1hZ2VRdWV1ZTsKLQotY2xh
c3MgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dCA6IHB1YmxpYyBNZWRp
YVBsYXllclByaXZhdGVJbnRlcmZhY2UgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHJlZ2lz
dGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwotCi0gICAgfk1lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQoKTsKLQotcHJpdmF0ZToKLSAgICBNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0KE1lZGlhUGxheWVyKik7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQbGF0
Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKLQotICAgIEludFNpemUgbmF0dXJhbFNpemUoKSBj
b25zdDsKLSAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNBdWRpbygpIGNv
bnN0OwotCi0gICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2b2lkIGNhbmNl
bExvYWQoKTsKLSAgICB2b2lkIGxvYWRJbnRlcm5hbChjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAg
dm9pZCByZXN1bWVMb2FkKCk7Ci0gICAgCi0gICAgdm9pZCBwbGF5KCk7Ci0gICAgdm9pZCBwYXVz
ZSgpOyAgICAKLSAgICB2b2lkIHByZXBhcmVUb1BsYXkoKTsKLSAgICAKLSAgICBib29sIHBhdXNl
ZCgpIGNvbnN0OwotICAgIGJvb2wgc2Vla2luZygpIGNvbnN0OwotICAgIAotICAgIGZsb2F0IGR1
cmF0aW9uKCkgY29uc3Q7Ci0gICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdDsKLSAgICB2b2lk
IHNlZWsoZmxvYXQgdGltZSk7Ci0gICAgCi0gICAgdm9pZCBzZXRSYXRlKGZsb2F0KTsKLSAgICB2
b2lkIHNldFZvbHVtZShmbG9hdCk7Ci0gICAgdm9pZCBzZXRQcmVzZXJ2ZXNQaXRjaChib29sKTsK
LSAgICAKLSAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmV0d29ya1N0YXRlOyB9Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUg
cmVhZHlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQotICAgIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3Q7Ci0gICAg
ZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3Q7Ci0gICAgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jl
c3MoKSBjb25zdDsKLSAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzKCkgY29uc3Q7Ci0gICAgCi0gICAg
dm9pZCBzZXRWaXNpYmxlKGJvb2wpOwotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJik7
Ci0gICAgCi0gICAgdm9pZCBsb2FkU3RhdGVDaGFuZ2VkKCk7Ci0gICAgdm9pZCBkaWRFbmQoKTsK
LSAgICAKLSAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsK
LSAgICB2b2lkIHBhaW50Q29tcGxldGVkKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3Qm
KTsKLQotICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKLQotICAgIGJv
b2wgaGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdDsKLSAgICB2b2lkIHNldENsb3NlZENhcHRpb25z
VmlzaWJsZShib29sKTsKLQotICAgIHZvaWQgc2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9h
ZCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVN0YXRlcygpOwotICAgIHZvaWQgZG9TZWVrKCk7Ci0gICAg
dm9pZCBjYW5jZWxTZWVrKCk7Ci0gICAgdm9pZCBzZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiopOwotICAgIGZsb2F0IG1heFRpbWVM
b2FkZWQoKSBjb25zdDsKLSAgICB2b2lkIHNhd1Vuc3VwcG9ydGVkVHJhY2tzKCk7Ci0KLSAgICAv
LyBlbmdpbmUgc3VwcG9ydAotICAgIHN0YXRpYyBQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0
ZUludGVyZmFjZT4gY3JlYXRlKE1lZGlhUGxheWVyKik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0U3Vw
cG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiB0eXBlcyk7Ci0gICAgc3RhdGljIE1lZGlhUGxh
eWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBh
cmFtZXRlcnMmKTsKLSAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwotCi0gICAgdmlydHVh
bCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTsKLQotICAgIGVudW0gTWVk
aWFSZW5kZXJpbmdNb2RlIHsgTWVkaWFSZW5kZXJpbmdOb25lLCBNZWRpYVJlbmRlcmluZ1NvZnR3
YXJlUmVuZGVyZXIsIE1lZGlhUmVuZGVyaW5nTW92aWVMYXllciB9OwotICAgIE1lZGlhUmVuZGVy
aW5nTW9kZSBjdXJyZW50UmVuZGVyaW5nTW9kZSgpIGNvbnN0OwotICAgIE1lZGlhUmVuZGVyaW5n
TW9kZSBwcmVmZXJyZWRSZW5kZXJpbmdNb2RlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1JlYWR5Rm9y
UmVuZGVyaW5nKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFVwVmlkZW9SZW5kZXJpbmcoKTsKLSAg
ICB2b2lkIHRlYXJEb3duVmlkZW9SZW5kZXJpbmcoKTsKLSAgICBib29sIGhhc1NldFVwVmlkZW9S
ZW5kZXJpbmcoKSBjb25zdDsKLQotICAgIHZvaWQgY3JlYXRlTGF5ZXJGb3JNb3ZpZSgpOwotICAg
IHZvaWQgZGVzdHJveUxheWVyRm9yTW92aWUoKTsKLQotICAgIHZvaWQgc2V0VXBDb29raWVzRm9y
UXVpY2tUaW1lKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICBTdHJpbmcgcmZjMjYxNkRhdGVTdHJp
bmdGcm9tVGltZShDRkFic29sdXRlVGltZSk7Ci0KLSAgICB2b2lkIHZpc3VhbENvbnRleHRUaW1l
ckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ+Kik7
Ci0gICAgdm9pZCByZXRyaWV2ZUN1cnJlbnRJbWFnZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNl
dFByaXZhdGVCcm93c2luZ01vZGUoYm9vbCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBlbmdpbmVE
ZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuICJRdWlja1RpbWUiOyB9Ci0KLSAgICBjbGFzcyBN
b3ZpZUNsaWVudDsKLSAgICBmcmllbmQgY2xhc3MgTW92aWVDbGllbnQ7Ci0gICAgT3duUHRyPE1v
dmllQ2xpZW50PiBtX21vdmllQ2xpZW50OwotCi0gICAgY2xhc3MgTGF5ZXJDbGllbnQ7Ci0gICAg
ZnJpZW5kIGNsYXNzIExheWVyQ2xpZW50OwotICAgIE93blB0cjxMYXllckNsaWVudD4gbV9sYXll
ckNsaWVudDsKLQotICAgIGNsYXNzIFZpc3VhbENvbnRleHRDbGllbnQ7Ci0gICAgZnJpZW5kIGNs
YXNzIFZpc3VhbENvbnRleHRDbGllbnQ7Ci0gICAgT3duUHRyPFZpc3VhbENvbnRleHRDbGllbnQ+
IG1fdmlzdWFsQ29udGV4dENsaWVudDsKLQotICAgIHZvaWQgcmV0cmlldmVBbmRSZXNldE1vdmll
VHJhbnNmb3JtKCk7Ci0KLSAgICB2aXJ0dWFsIGZsb2F0IG1lZGlhVGltZUZvclRpbWVWYWx1ZShm
bG9hdCkgY29uc3Q7Ci0KLSAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7Ci0gICAgUmVmUHRyPFFU
TW92aWU+IG1fbW92aWU7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbV9xdFZpZGVvTGF5
ZXI7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbV90cmFuc2Zvcm1MYXllcjsKLSAgICBP
d25QdHI8V0tDQUltYWdlUXVldWU+IG1faW1hZ2VRdWV1ZTsKLSAgICBPd25QdHI8UVREZWNvbXBy
ZXNzaW9uU2Vzc2lvbj4gbV9kZWNvbXByZXNzaW9uU2Vzc2lvbjsKLSAgICBDR0FmZmluZVRyYW5z
Zm9ybSBtX21vdmllVHJhbnNmb3JtOyAKLSAgICBSZWZQdHI8UVRNb3ZpZVZpc3VhbENvbnRleHQ+
IG1fdmlzdWFsQ29udGV4dDsKLSAgICBmbG9hdCBtX3NlZWtUbzsKLSAgICBUaW1lcjxNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiBtX3NlZWtUaW1lcjsKLSAgICBUaW1l
cjxNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0PiBtX3Zpc3VhbENvbnRl
eHRUaW1lcjsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlIG1fbmV0d29ya1N0YXRlOwotICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlT
dGF0ZTsKLSAgICB1bnNpZ25lZCBtX2VuYWJsZWRUcmFja0NvdW50OwotICAgIHVuc2lnbmVkIG1f
dG90YWxUcmFja0NvdW50OwotICAgIGJvb2wgbV9oYXNVbnN1cHBvcnRlZFRyYWNrczsKLSAgICBi
b29sIG1fc3RhcnRlZFBsYXlpbmc7Ci0gICAgYm9vbCBtX2lzU3RyZWFtaW5nOwotICAgIGJvb2wg
bV92aXNpYmxlOwotICAgIGJvb2wgbV9uZXdGcmFtZUF2YWlsYWJsZTsKLSAgICBib29sIG1fZGVs
YXlpbmdMb2FkOwotICAgIFN0cmluZyBtX21vdmllVVJMOwotICAgIGJvb2wgbV9wcml2YXRlQnJv
d3Npbmc7Ci0gICAgTWVkaWFQbGF5ZXI6OlByZWxvYWQgbV9wcmVsb2FkOwotICAgIG11dGFibGUg
ZmxvYXQgbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzOwotI2lmIERSQVdf
RlJBTUVfUkFURQotICAgIGRvdWJsZSBtX2ZyYW1lQ291bnRXaGlsZVBsYXlpbmc7Ci0gICAgZG91
YmxlIG1fdGltZVN0YXJ0ZWRQbGF5aW5nOwotICAgIGRvdWJsZSBtX3RpbWVTdG9wcGVkUGxheWlu
ZzsKLSNlbmRpZgotCi19OwotCi19Ci0KLSNlbmRpZgotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRDRkRpY3Rpb25hcnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVENGRGljdGlvbmFyeS5j
cHAJKHJldmlzaW9uIDE2NTQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9RVENGRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5j
bHVkZSAiUVRDRkRpY3Rpb25hcnkuaCIKLQotI2luY2x1ZGUgPENGRGF0YS5oPgotI2luY2x1ZGUg
PHdpbmRvd3MuaD4KLQotQ0ZEYXRhUmVmIFFUQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxEYXRhKENG
QWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ0ZQcm9wZXJ0eUxpc3RSZWYgcHJvcGVydHlMaXN0KQot
ewotCi0gICAgdHlwZWRlZiBDRkRhdGFSZWYgKCogcGZuQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVYTUxE
YXRhKShDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENGUHJvcGVydHlMaXN0UmVmIHByb3BlcnR5
TGlzdCk7Ci0gICAgc3RhdGljIHBmbkNGUHJvcGVydHlMaXN0Q3JlYXRlWE1MRGF0YSBwQ0ZQcm9w
ZXJ0eUxpc3RDcmVhdGVYTUxEYXRhID0gMDsKLSAgICBpZiAoIXBDRlByb3BlcnR5TGlzdENyZWF0
ZVhNTERhdGEpIHsKLSAgICAgICAgSE1PRFVMRSBxdGNmRExMID0gTG9hZExpYnJhcnlXKEwiUVRD
Ri5kbGwiKTsKLSAgICAgICAgaWYgKHF0Y2ZETEwpCi0gICAgICAgICAgICBwQ0ZQcm9wZXJ0eUxp
c3RDcmVhdGVYTUxEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxwZm5DRlByb3BlcnR5TGlzdENyZWF0
ZVhNTERhdGE+KEdldFByb2NBZGRyZXNzKHF0Y2ZETEwsICJRVENGX0NGUHJvcGVydHlMaXN0Q3Jl
YXRlWE1MRGF0YSIpKTsKLSAgICB9Ci0KLSAgICBpZiAocENGUHJvcGVydHlMaXN0Q3JlYXRlWE1M
RGF0YSkKLSAgICAgICAgcmV0dXJuIHBDRlByb3BlcnR5TGlzdENyZWF0ZVhNTERhdGEoYWxsb2Nh
dG9yLCBwcm9wZXJ0eUxpc3QpOwotICAgIHJldHVybiAwOwotfQotCi1DRkRpY3Rpb25hcnlSZWYg
UVRDRkRpY3Rpb25hcnlDcmVhdGVDb3B5V2l0aERhdGFDYWxsYmFjayhDRkFsbG9jYXRvclJlZiBh
bGxvY2F0b3IsIENGRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBRVENGRGljdG9uYXJ5Q3JlYXRl
RnJvbURhdGFDYWxsYmFjayBjYWxsYmFjaykgCi17Ci0gICAgQVNTRVJUKGRpY3Rpb25hcnkpOwot
ICAgIEFTU0VSVChjYWxsYmFjayk7Ci0KLSAgICBDRkRhdGFSZWYgZGF0YSA9IFFUQ0ZQcm9wZXJ0
eUxpc3RDcmVhdGVYTUxEYXRhKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRpY3Rpb25hcnkpOwotICAg
IGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQ0ZEaWN0aW9uYXJ5UmVmIG91dHB1
dERpY3Rpb25hcnkgPSBjYWxsYmFjayhhbGxvY2F0b3IsIENGRGF0YUdldEJ5dGVQdHIoZGF0YSks
IENGRGF0YUdldExlbmd0aChkYXRhKSk7Ci0gICAgQ0ZSZWxlYXNlKGRhdGEpOwotCi0gICAgcmV0
dXJuIG91dHB1dERpY3Rpb25hcnk7Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vUVRDRkRpY3Rpb25hcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRDRkRpY3Rpb25hcnkuaAkocmV2aXNpb24gMTY1NDUy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUQ0ZEaWN0aW9uYXJ5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBRVENGRGljdGlvbmFyeV9oCi0jZGVmaW5lIFFUQ0ZEaWN0aW9uYXJ5
X2gKLQotI2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUwotI2RlZmluZSBRVE1PVklFV0lOX0FQSSBf
X2RlY2xzcGVjKGRsbGV4cG9ydCkKLSNlbHNlCi0jZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVj
bHNwZWMoZGxsaW1wb3J0KQotI2VuZGlmCi0KLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkJh
c2UuaD4KLQotdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRpY3Rpb25hcnkgKiBDRkRpY3Rpb25h
cnlSZWY7Ci10eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGQWxsb2NhdG9yICogQ0ZBbGxvY2F0b3JS
ZWY7Ci0KLXR5cGVkZWYgQ0ZEaWN0aW9uYXJ5UmVmICgqIFFUQ0ZEaWN0b25hcnlDcmVhdGVGcm9t
RGF0YUNhbGxiYWNrKShDRkFsbG9jYXRvclJlZiwgY29uc3QgVUludDgqLCBDRkluZGV4KTsKLQot
UVRNT1ZJRVdJTl9BUEkgQ0ZEaWN0aW9uYXJ5UmVmIFFUQ0ZEaWN0aW9uYXJ5Q3JlYXRlQ29weVdp
dGhEYXRhQ2FsbGJhY2soQ0ZBbGxvY2F0b3JSZWYsIENGRGljdGlvbmFyeVJlZiwgUVRDRkRpY3Rv
bmFyeUNyZWF0ZUZyb21EYXRhQ2FsbGJhY2spOwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVERlY29tcHJlc3Npb25TZXNzaW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVREZWNvbXBy
ZXNzaW9uU2Vzc2lvbi5jcHAJKHJldmlzaW9uIDE2NTQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9RVERlY29tcHJlc3Npb25TZXNzaW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2luY2x1ZGUgIlFURGVjb21wcmVzc2lvblNlc3Npb24uaCIKLQotI2luY2x1ZGUgPEltYWdlQ29t
cHJlc3Npb24uaD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLWNsYXNzIFFURGVjb21wcmVzc2lv
blNlc3Npb25DbGllbnQgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHRyYWNraW5nQ2FsbGJh
Y2sodm9pZCAqZGVjb21wcmVzc2lvblRyYWNraW5nUmVmQ29uLCBPU1N0YXR1cywgCi0gICAgICAg
IElDTURlY29tcHJlc3Npb25UcmFja2luZ0ZsYWdzIGRlY29tcHJlc3Npb25UcmFja2luZ0ZsYWdz
LCBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyLCAKLSAgICAgICAgVGltZVZhbHVlNjQsIFRp
bWVWYWx1ZTY0LCBJQ01WYWxpZFRpbWVGbGFncywgdm9pZCAqLCB2b2lkICopCi0gICAgewotICAg
ICAgICBRVERlY29tcHJlc3Npb25TZXNzaW9uKiBzZXNzaW9uID0gc3RhdGljX2Nhc3Q8UVREZWNv
bXByZXNzaW9uU2Vzc2lvbio+KGRlY29tcHJlc3Npb25UcmFja2luZ1JlZkNvbik7Ci0gICAgICAg
IEFTU0VSVChzZXNzaW9uKTsKLQotICAgICAgICBpZiAoZGVjb21wcmVzc2lvblRyYWNraW5nRmxh
Z3MgJiBrSUNNRGVjb21wcmVzc2lvblRyYWNraW5nX0ZyYW1lRGVjb2RlZCkKLSAgICAgICAgICAg
IHNlc3Npb24tPm1fbGF0ZXN0RnJhbWUgPSBRVFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyKTsKLSAg
ICB9Ci19OwotCi1QYXNzT3duUHRyPFFURGVjb21wcmVzc2lvblNlc3Npb24+IFFURGVjb21wcmVz
c2lvblNlc3Npb246OmNyZWF0ZSh1bnNpZ25lZCBsb25nIHBpeGVsRm9ybWF0LCBzaXplX3Qgd2lk
dGgsIHNpemVfdCBoZWlnaHQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBRVERlY29tcHJl
c3Npb25TZXNzaW9uKHBpeGVsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KSk7Ci19Ci0KLVFURGVjb21w
cmVzc2lvblNlc3Npb246OlFURGVjb21wcmVzc2lvblNlc3Npb24odW5zaWduZWQgbG9uZyBwaXhl
bEZvcm1hdCwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0KQotICAgIDogbV9zZXNzaW9uKDAp
Ci0gICAgLCBtX3BpeGVsRm9ybWF0KHBpeGVsRm9ybWF0KQotICAgICwgbV93aWR0aCh3aWR0aCkK
LSAgICAsIG1faGVpZ2h0KGhlaWdodCkKLXsKLSAgICBpbml0aWFsaXplU2Vzc2lvbigpOwotfQot
Ci1RVERlY29tcHJlc3Npb25TZXNzaW9uOjp+UVREZWNvbXByZXNzaW9uU2Vzc2lvbigpCi17Ci0g
ICAgaWYgKG1fc2Vzc2lvbikKLSAgICAgICAgSUNNRGVjb21wcmVzc2lvblNlc3Npb25SZWxlYXNl
KG1fc2Vzc2lvbik7Ci19Ci0KLXZvaWQgUVREZWNvbXByZXNzaW9uU2Vzc2lvbjo6aW5pdGlhbGl6
ZVNlc3Npb24oKQotewotICAgIGlmIChtX3Nlc3Npb24pCi0gICAgICAgIHJldHVybjsKLQotICAg
IElDTVBpeGVsRm9ybWF0SW5mbyBwaXhlbEZvcm1hdEluZm8gPSB7c2l6ZW9mKElDTVBpeGVsRm9y
bWF0SW5mbyksIDB9OwotICAgIGlmIChJQ01HZXRQaXhlbEZvcm1hdEluZm8obV9waXhlbEZvcm1h
dCwgJnBpeGVsRm9ybWF0SW5mbykgIT0gbm9FcnIpIHsKLSAgICAgICAgLy8gVGhlIElDTSBkb2Vz
IG5vdCBrbm93IGFueXRoaW5nIGFib3V0IHRoZSBwaXhlbEZvcm1hdCBjb250YWluZWQgaW4KLSAg
ICAgICAgLy8gdGhlIHBpeGVsIGJ1ZmZlciwgc28gaXQgd29uJ3QgYmUgYWJsZSB0byBjb252ZXJ0
IGl0IHRvIFJHQkEuICAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRoZSBkZXB0
aCBhbmQgY1R5cGUgZmllbGRzIG9mIHRoZSBJbWFnZURlc2NyaXB0aW9uSGFuZGxlIGFyZSBmaWxs
ZWQgCi0gICAgLy8gb3V0IGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zIGluIFRlY2huaWNh
bCBRJkEgUUExMTgzOiAKLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5
L21hYy8jcWEvcWEyMDAxL3FhMTE4My5odG1sCi0gICAgYm9vbCBpc0luZGV4ZWQgPSBwaXhlbEZv
cm1hdEluZm8uZm9ybWF0RmxhZ3MgJiBrSUNNUGl4ZWxGb3JtYXRJc0luZGV4ZWQ7Ci0gICAgYm9v
bCBpc1FEID0gcGl4ZWxGb3JtYXRJbmZvLmZvcm1hdEZsYWdzICYga0lDTVBpeGVsRm9ybWF0SXNT
dXBwb3J0ZWRCeVFEOwotICAgIGJvb2wgaXNNb25vY2hyb21lID0gcGl4ZWxGb3JtYXRJbmZvLmZv
cm1hdEZsYWdzICYga0lDTVBpeGVsRm9ybWF0SXNNb25vY2hyb21lOwotICAgIGJvb2wgaGFzQWxw
aGEgPSBwaXhlbEZvcm1hdEluZm8uZm9ybWF0RmxhZ3MgJiBrSUNNUGl4ZWxGb3JtYXRIYXNBbHBo
YUNoYW5uZWw7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZGVwdGggPSAyNDsgLy8gVGhlIGRlZmF1bHQg
ZGVwdGggaXMgMjQuCi0gICAgaWYgKGhhc0FscGhhKQotICAgICAgICBkZXB0aCA9IDMyOyAvLyBB
bnkgcGl4ZWwgZm9ybWF0IHdpdGggYWxwaGEgZ2V0cyBhIGRlcHRoIG9mIDMyLgotICAgIGVsc2Ug
aWYgKGlzTW9ub2Nocm9tZSkgewotICAgICAgICAvLyBHcmF5c2NhbGUgcGl4ZWwgZm9ybWF0cyBn
ZXQgZGVwdGhzIDMzIHRocm91Z2ggNDAsIGRlcGVuZGluZwotICAgICAgICAvLyBvbiB0aGVpciBi
aXRzIHBlciBwaXhlbC4gWWVzLCB0aGlzIG1lYW5zIHRoYXQgMTYtYml0IGdyYXlzY2FsZQotICAg
ICAgICAvLyBhbmQgOC1iaXQgZ3JheXNjYWxlIGhhdmUgdGhlIHNhbWUgcGl4ZWwgZGVwdGguCi0g
ICAgICAgIGRlcHRoID0gMzIgKyBzdGQ6Om1pbjx1bnNpZ25lZCBpbnQ+KDgsIHBpeGVsRm9ybWF0
SW5mby5iaXRzUGVyUGl4ZWxbMF0pOwotICAgIH0gZWxzZSBpZiAoaXNJbmRleGVkKSB7Ci0gICAg
ICAgIC8vIEluZGV4ZWQgcGl4ZWwgZm9ybWF0cyBnZXQgYSBkZXB0aCBvZiAxIHRocm91Z2ggOCwg
ZGVwZW5kaW5nIG9uCi0gICAgICAgIC8vIHRoZSB0aGVpciBiaXRzIHBlciBwaXhlbC4KLSAgICAg
ICAgZGVwdGggPSBwaXhlbEZvcm1hdEluZm8uYml0c1BlclBpeGVsWzBdOyAKLSAgICB9Ci0KLSAg
ICAvLyBJZiBRdWlja0RyYXcgc3VwcG9ydHMgdGhlIGdpdmVuIHBpeGVsIGZvcm1hdCwgdGhlIGNU
eXBlIHNob3VsZCBiZSBrUmF3Q29kZWNUeXBlLgotICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBw
aXhlbCBmb3JtYXQgY29kZSBmb3IgdGhlIGNUeXBlLiAgV2UgYXJlIGFzc3VtaW5nIHRoZSBwaXhl
bCAKLSAgICAvLyBidWZmZXIgaXMgdW5jb21wcmVzc2VkLgotICAgIHVuc2lnbmVkIGxvbmcgY1R5
cGUgPSBpc1FEID8ga1Jhd0NvZGVjVHlwZSA6IG1fcGl4ZWxGb3JtYXQ7Ci0KLSAgICBJbWFnZURl
c2NyaXB0aW9uSGFuZGxlIGRlc2NyaXB0aW9uID0gKEltYWdlRGVzY3JpcHRpb25IYW5kbGUpTmV3
SGFuZGxlQ2xlYXIoc2l6ZW9mKEltYWdlRGVzY3JpcHRpb24pKTsKLSAgICAoKipkZXNjcmlwdGlv
bikuaWRTaXplID0gc2l6ZW9mKEltYWdlRGVzY3JpcHRpb24pOwotICAgICgqKmRlc2NyaXB0aW9u
KS5jVHlwZSA9IGNUeXBlOwotICAgICgqKmRlc2NyaXB0aW9uKS52ZXJzaW9uID0gMjsKLSAgICAo
KipkZXNjcmlwdGlvbikuc3BhdGlhbFF1YWxpdHkgPSBjb2RlY0xvc3NsZXNzUXVhbGl0eTsKLSAg
ICAoKipkZXNjcmlwdGlvbikud2lkdGggPSBtX3dpZHRoOwotICAgICgqKmRlc2NyaXB0aW9uKS5o
ZWlnaHQgPSBtX2hlaWdodDsKLSAgICAoKipkZXNjcmlwdGlvbikuaFJlcyA9IDcyIDw8IDE2OyAv
LyA3MiBEUEkgYXMgYSBmaXhlZC1wb2ludCBudW1iZXIKLSAgICAoKipkZXNjcmlwdGlvbikudlJl
cyA9IDcyIDw8IDE2OyAvLyA3MiBEUEkgYXMgYSBmaXhlZC1wb2ludCBudW1iZXIKLSAgICAoKipk
ZXNjcmlwdGlvbikuZnJhbWVDb3VudCA9IDE7Ci0gICAgKCoqZGVzY3JpcHRpb24pLmRlcHRoID0g
IGRlcHRoOwotICAgICgqKmRlc2NyaXB0aW9uKS5jbHV0SUQgPSAtMTsKLQotICAgIC8vIENyZWF0
ZSB0aGUgbWFuZGF0b3J5IElDTURlY29tcHJlc3Npb25TZXNzaW9uT3B0aW9ucywgYnV0IGxlYXZl
Ci0gICAgLy8gYWxsIHRoZSBkZWZhdWx0IHZhbHVlcy4KLSAgICBJQ01EZWNvbXByZXNzaW9uU2Vz
c2lvbk9wdGlvbnNSZWYgb3B0aW9ucyA9IDA7Ci0gICAgSUNNRGVjb21wcmVzc2lvblNlc3Npb25P
cHRpb25zQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsICZvcHRpb25zKTsKLQotICAgIENGRGlj
dGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMgPSBRVFBpeGVsQnVmZmVyOjpjcmVhdGVQ
aXhlbEJ1ZmZlckF0dHJpYnV0ZXNEaWN0aW9uYXJ5KFFUUGl4ZWxCdWZmZXI6OkNvbmZpZ3VyZUZv
ckNHSW1hZ2UpOwotCi0gICAgSUNNRGVjb21wcmVzc2lvblRyYWNraW5nQ2FsbGJhY2tSZWNvcmQg
Y2FsbGJhY2sgPSB7Ci0gICAgICAgIFFURGVjb21wcmVzc2lvblNlc3Npb25DbGllbnQ6OnRyYWNr
aW5nQ2FsbGJhY2ssCi0gICAgICAgIHRoaXMsCi0gICAgfTsKLQotICAgIElDTURlY29tcHJlc3Np
b25TZXNzaW9uQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsCi0gICAgICAgIGRlc2NyaXB0aW9u
LAotICAgICAgICBvcHRpb25zLAotICAgICAgICBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsCi0gICAg
ICAgICZjYWxsYmFjaywKLSAgICAgICAgJm1fc2Vzc2lvbik7Ci0KLSAgICBpZiAocGl4ZWxCdWZm
ZXJBdHRyaWJ1dGVzKQotICAgICAgICBDRlJlbGVhc2UocGl4ZWxCdWZmZXJBdHRyaWJ1dGVzKTsK
LQotICAgIElDTURlY29tcHJlc3Npb25TZXNzaW9uT3B0aW9uc1JlbGVhc2Uob3B0aW9ucyk7Ci0g
ICAgRGlzcG9zZUhhbmRsZSgoSGFuZGxlKWRlc2NyaXB0aW9uKTsKLX0KLQotYm9vbCBRVERlY29t
cHJlc3Npb25TZXNzaW9uOjpjYW5EZWNvbXByZXNzKFFUUGl4ZWxCdWZmZXIgaW5CdWZmZXIpCi17
Ci0gICAgcmV0dXJuIG1fc2Vzc2lvbiAKLSAgICAgICAgJiYgaW5CdWZmZXIucGl4ZWxGb3JtYXRU
eXBlKCkgPT0gbV9waXhlbEZvcm1hdCAKLSAgICAgICAgJiYgaW5CdWZmZXIud2lkdGgoKSA9PSBt
X3dpZHRoCi0gICAgICAgICYmIGluQnVmZmVyLmhlaWdodCgpID09IG1faGVpZ2h0OwotfQotCi1R
VFBpeGVsQnVmZmVyIFFURGVjb21wcmVzc2lvblNlc3Npb246OmRlY29tcHJlc3MoUVRQaXhlbEJ1
ZmZlciBpbkJ1ZmZlcikKLXsKLSAgICBpZiAoIWNhbkRlY29tcHJlc3MoaW5CdWZmZXIpKQotICAg
ICAgICByZXR1cm4gUVRQaXhlbEJ1ZmZlcigpOwotICAgIAotICAgIGluQnVmZmVyLmxvY2tCYXNl
QWRkcmVzcygpOwotICAgIElDTURlY29tcHJlc3Npb25TZXNzaW9uRGVjb2RlRnJhbWUobV9zZXNz
aW9uLAotICAgICAgICBzdGF0aWNfY2FzdDxVSW50OCo+KGluQnVmZmVyLmJhc2VBZGRyZXNzKCkp
LAotICAgICAgICBpbkJ1ZmZlci5kYXRhU2l6ZSgpLAotICAgICAgICAwLCAvLyBmcmFtZU9wdGlv
bnMKLSAgICAgICAgMCwgLy8gZnJhbWVUaW1lCi0gICAgICAgIDApOyAvLyBzb3VyY2VGcmFtZVJl
ZkNvbgotCi0gICAgLy8gQmVjYXVzZSB3ZSBwYXNzZWQgaW4gMCBmb3IgZnJhbWVUaW1lLCB0aGUg
YWJvdmUgZnVuY3Rpb24KLSAgICAvLyBpcyBzeW5jaHJvbm91cywgYW5kIHRoZSBjbGllbnQgY2Fs
bGJhY2sgd2lsbCBoYXZlIGJlZW4KLSAgICAvLyBjYWxsZWQgYmVmb3JlIHRoZSBmdW5jdGlvbiBy
ZXR1cm5zLCBhbmQgbV9sYXRlc3RGcmFtZQotICAgIC8vIHdpbGwgY29udGFpbiB0aGUgbmV3bHkg
ZGVjb21wcmVzc2VkIGZyYW1lLgotICAgIHJldHVybiBtX2xhdGVzdEZyYW1lOwotfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FURGVjb21wcmVzc2lvblNlc3Np
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UVREZWNvbXByZXNzaW9uU2Vzc2lvbi5oCShyZXZpc2lvbiAxNjU0NTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVREZWNvbXByZXNzaW9uU2Vzc2lvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUVREZWNvbXBy
ZXNzaW9uU2Vzc2lvbl9oCi0jZGVmaW5lIFFURGVjb21wcmVzc2lvblNlc3Npb25faAotCi0jaWZk
ZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCi0jZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMo
ZGxsZXhwb3J0KQotI2Vsc2UKLSNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxp
bXBvcnQpCi0jZW5kaWYKLQotI2luY2x1ZGUgIlFUUGl4ZWxCdWZmZXIuaCIKLQotI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+Ci0KLWNsYXNzIFFURGVjb21wcmVzc2lvblNlc3Npb25DbGllbnQ7
Ci10eXBlZGVmIHN0cnVjdCBPcGFxdWVJQ01EZWNvbXByZXNzaW9uU2Vzc2lvbiogIElDTURlY29t
cHJlc3Npb25TZXNzaW9uUmVmOwotCi1jbGFzcyBRVE1PVklFV0lOX0FQSSBRVERlY29tcHJlc3Np
b25TZXNzaW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxRVERlY29tcHJlc3Np
b25TZXNzaW9uPiBjcmVhdGUodW5zaWduZWQgbG9uZyBwaXhlbEZvcm1hdCwgc2l6ZV90IHdpZHRo
LCBzaXplX3QgaGVpZ2h0KTsKLSAgICB+UVREZWNvbXByZXNzaW9uU2Vzc2lvbigpOwotCi0gICAg
Ym9vbCBjYW5EZWNvbXByZXNzKFFUUGl4ZWxCdWZmZXIpOwotCi0gICAgLy8gVGhlIHJlc3VsdGlu
ZyBRVFBpeGVsQnVmZmVyIHdpbGwgYmUgYSBDRyBjb21wYXRhYmxlIEFSR0IgcGl4ZWwgYnVmZmVy
LgotICAgIFFUUGl4ZWxCdWZmZXIgZGVjb21wcmVzcyhRVFBpeGVsQnVmZmVyKTsKLQotcHJpdmF0
ZToKLSAgICBmcmllbmQgY2xhc3MgUVREZWNvbXByZXNzaW9uU2Vzc2lvbkNsaWVudDsKLSAgICBR
VERlY29tcHJlc3Npb25TZXNzaW9uKHVuc2lnbmVkIGxvbmcgcGl4ZWxGb3JtYXQsIHNpemVfdCB3
aWR0aCwgc2l6ZV90IGhlaWdodCk7Ci0gICAgdm9pZCBpbml0aWFsaXplU2Vzc2lvbigpOwotCi0g
ICAgdW5zaWduZWQgbG9uZyBtX3BpeGVsRm9ybWF0OwotICAgIHNpemVfdCBtX3dpZHRoOwotICAg
IHNpemVfdCBtX2hlaWdodDsKLSAgICBRVFBpeGVsQnVmZmVyIG1fbGF0ZXN0RnJhbWU7Ci0gICAg
SUNNRGVjb21wcmVzc2lvblNlc3Npb25SZWYgbV9zZXNzaW9uOwotfTsKLQotI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWUuY3Bw
CShyZXZpc2lvbiAxNjU0NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUVRNb3ZpZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTI0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRl
ICJRVE1vdmllLmgiCi0KLSNpbmNsdWRlICJRVE1vdmllVGFzay5oIgotI2luY2x1ZGUgIlFUTW92
aWVXaW5UaW1lci5oIgotI2luY2x1ZGUgPEZpeE1hdGguaD4KLSNpbmNsdWRlIDxHWE1hdGguaD4K
LSNpbmNsdWRlIDxNb3ZpZXMuaD4KLSNpbmNsdWRlIDxRVE1MLmg+Ci0jaW5jbHVkZSA8UXVpY2tU
aW1lQ29tcG9uZW50cy5oPgotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRT
eXN0ZW1JbnRlcmZhY2UuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1zdGF0aWMgY29uc3Qg
bG9uZyBtaW5pbXVtUXVpY2tUaW1lVmVyc2lvbiA9IDB4MDczMDAwMDA7IC8vIDcuMwotCi1zdGF0
aWMgY29uc3QgbG9uZyBjbG9zZWRDYXB0aW9uVHJhY2tUeXBlID0gJ2NsY3AnOwotc3RhdGljIGNv
bnN0IGxvbmcgc3ViVGl0bGVUcmFja1R5cGUgPSAnc2J0bCc7Ci1zdGF0aWMgY29uc3QgbG9uZyBt
cGVnNE9iamVjdERlc2NyaXB0aW9uVHJhY2tUeXBlID0gJ29kc20nOwotc3RhdGljIGNvbnN0IGxv
bmcgbXBlZzRTY2VuZURlc2NyaXB0aW9uVHJhY2tUeXBlID0gJ3Nkc20nOwotc3RhdGljIGNvbnN0
IGxvbmcgY2xvc2VkQ2FwdGlvbkRpc3BsYXlQcm9wZXJ0eUlEID0gJ2Rpc3AnOwotCi0vLyBSZXNp
emluZyBHV29ybGRzIGlzIHNsb3csIGdpdmUgdGhlbSBhIG1pbmltdW0gc2l6ZSBzbyBzaXplIG9m
IHNtYWxsIAotLy8gdmlkZW9zIGNhbiBiZSBhbmltYXRlZCBzbW9vdGhseQotc3RhdGljIGNvbnN0
IGludCBjR1dvcmxkTWluV2lkdGggPSA2NDA7Ci1zdGF0aWMgY29uc3QgaW50IGNHV29ybGRNaW5I
ZWlnaHQgPSAzNjA7Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBjTm9uQ29udGludW91c1RpbWVDaGFu
Z2UgPSAwLjJmOwotCi11bmlvbiBVcHBQYXJhbSB7Ci0gICAgbG9uZyBsb25nVmFsdWU7Ci0gICAg
dm9pZCogcHRyOwotfTsKLQotc3RhdGljIENGTXV0YWJsZUFycmF5UmVmIGdTdXBwb3J0ZWRUeXBl
cyA9IDA7Ci1zdGF0aWMgU0ludDMyIHF1aWNrVGltZVZlcnNpb24gPSAwOwotCi1jbGFzcyBRVE1v
dmllUHJpdmF0ZSA6IHB1YmxpYyBRVE1vdmllVGFza0NsaWVudCB7Ci0gICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUVRNb3ZpZVByaXZhdGUpOwotcHVibGljOgotICAgIFFUTW92aWVQcml2YXRlKCk7
Ci0gICAgflFUTW92aWVQcml2YXRlKCk7Ci0gICAgdm9pZCB0YXNrKCk7Ci0gICAgdm9pZCBzdGFy
dFRhc2soKTsKLSAgICB2b2lkIGVuZFRhc2soKTsKLQotICAgIHZvaWQgY3JlYXRlTW92aWVDb250
cm9sbGVyKCk7Ci0gICAgdm9pZCBjYWNoZU1vdmllU2NhbGUoKTsKLQotICAgIFFUTW92aWUqIG1f
bW92aWVXaW47Ci0gICAgTW92aWUgbV9tb3ZpZTsKLSAgICBNb3ZpZUNvbnRyb2xsZXIgbV9tb3Zp
ZUNvbnRyb2xsZXI7Ci0gICAgYm9vbCBtX3Rhc2tpbmc7Ci0gICAgYm9vbCBtX2Rpc2FibGVkOwot
ICAgIFZlY3RvcjxRVE1vdmllQ2xpZW50Kj4gbV9jbGllbnRzOwotICAgIGxvbmcgbV9sb2FkU3Rh
dGU7Ci0gICAgYm9vbCBtX2VuZGVkOwotICAgIGJvb2wgbV9zZWVraW5nOwotICAgIGZsb2F0IG1f
bGFzdE1lZGlhVGltZTsKLSAgICBkb3VibGUgbV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lOwotICAg
IGludCBtX3dpZHRoOwotICAgIGludCBtX2hlaWdodDsKLSAgICBib29sIG1fdmlzaWJsZTsKLSAg
ICBsb25nIG1fbG9hZEVycm9yOwotICAgIGZsb2F0IG1fd2lkdGhTY2FsZUZhY3RvcjsKLSAgICBm
bG9hdCBtX2hlaWdodFNjYWxlRmFjdG9yOwotICAgIENGVVJMUmVmIG1fY3VycmVudFVSTDsKLSAg
ICBmbG9hdCBtX3RpbWVUb1Jlc3RvcmU7Ci0gICAgZmxvYXQgbV9yYXRlVG9SZXN0b3JlOwotICAg
IGJvb2wgbV9wcml2YXRlQnJvd3Npbmc7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGJvb2wg
bV9zY2FsZUNhY2hlZDsKLSNlbmRpZgotfTsKLQotUVRNb3ZpZVByaXZhdGU6OlFUTW92aWVQcml2
YXRlKCkKLSAgICA6IG1fbW92aWVXaW4oMCkKLSAgICAsIG1fbW92aWUoMCkKLSAgICAsIG1fbW92
aWVDb250cm9sbGVyKDApCi0gICAgLCBtX3Rhc2tpbmcoZmFsc2UpCi0gICAgLCBtX2xvYWRTdGF0
ZSgwKQotICAgICwgbV9lbmRlZChmYWxzZSkKLSAgICAsIG1fc2Vla2luZyhmYWxzZSkKLSAgICAs
IG1fbGFzdE1lZGlhVGltZSgwKQotICAgICwgbV9sYXN0TG9hZFN0YXRlQ2hlY2tUaW1lKDApCi0g
ICAgLCBtX3dpZHRoKDApCi0gICAgLCBtX2hlaWdodCgwKQotICAgICwgbV92aXNpYmxlKGZhbHNl
KQotICAgICwgbV9sb2FkRXJyb3IoMCkKLSAgICAsIG1fd2lkdGhTY2FsZUZhY3RvcigxKQotICAg
ICwgbV9oZWlnaHRTY2FsZUZhY3RvcigxKQotICAgICwgbV9jdXJyZW50VVJMKDApCi0gICAgLCBt
X3RpbWVUb1Jlc3RvcmUoLTEuMGYpCi0gICAgLCBtX3JhdGVUb1Jlc3RvcmUoLTEuMGYpCi0gICAg
LCBtX2Rpc2FibGVkKGZhbHNlKQotICAgICwgbV9wcml2YXRlQnJvd3NpbmcoZmFsc2UpCi0jaWYg
IUFTU0VSVF9ESVNBQkxFRAotICAgICwgbV9zY2FsZUNhY2hlZChmYWxzZSkKLSNlbmRpZgotewot
fQotCi1RVE1vdmllUHJpdmF0ZTo6flFUTW92aWVQcml2YXRlKCkKLXsKLSAgICBlbmRUYXNrKCk7
Ci0gICAgaWYgKG1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBEaXNwb3NlTW92aWVDb250cm9s
bGVyKG1fbW92aWVDb250cm9sbGVyKTsKLSAgICBpZiAobV9tb3ZpZSkKLSAgICAgICAgRGlzcG9z
ZU1vdmllKG1fbW92aWUpOwotICAgIGlmIChtX2N1cnJlbnRVUkwpCi0gICAgICAgIENGUmVsZWFz
ZShtX2N1cnJlbnRVUkwpOwotfQotCi12b2lkIFFUTW92aWVQcml2YXRlOjpzdGFydFRhc2soKSAK
LXsKLSAgICBpZiAoIW1fdGFza2luZykgewotICAgICAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFz
aygpLT5hZGRUYXNrQ2xpZW50KHRoaXMpOwotICAgICAgICBtX3Rhc2tpbmcgPSB0cnVlOwotICAg
IH0KLSAgICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGltZXIoKTsKLX0K
LQotdm9pZCBRVE1vdmllUHJpdmF0ZTo6ZW5kVGFzaygpIAotewotICAgIGlmIChtX3Rhc2tpbmcp
IHsKLSAgICAgICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+cmVtb3ZlVGFza0NsaWVudCh0
aGlzKTsKLSAgICAgICAgbV90YXNraW5nID0gZmFsc2U7Ci0gICAgfQotICAgIFFUTW92aWVUYXNr
OjpzaGFyZWRUYXNrKCktPnVwZGF0ZVRhc2tUaW1lcigpOwotfQotCi12b2lkIFFUTW92aWVQcml2
YXRlOjp0YXNrKCkgCi17Ci0gICAgQVNTRVJUKG1fdGFza2luZyk7Ci0KLSAgICBpZiAoIW1fbG9h
ZEVycm9yKSB7Ci0gICAgICAgIGlmIChtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgICAgIE1D
SWRsZShtX21vdmllQ29udHJvbGxlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIE1vdmll
c1Rhc2sobV9tb3ZpZSwgMCk7Ci0gICAgfQotCi0gICAgLy8gR2V0TW92aWVMb2FkU3RhdGUgZG9j
dW1lbnRhdGlvbiBzYXlzIHRoYXQgeW91IHNob3VsZCBub3QgY2FsbCBpdCBtb3JlIG9mdGVuIHRo
YW4gZXZlcnkgcXVhcnRlciBvZiBhIHNlY29uZC4KLSAgICBpZiAoc3lzdGVtVGltZSgpID49IG1f
bGFzdExvYWRTdGF0ZUNoZWNrVGltZSArIDAuMjUgfHwgbV9sb2FkRXJyb3IpIHsgCi0gICAgICAg
IC8vIElmIGxvYWQgZmFpbHMgUVQncyBsb2FkIHN0YXRlIGlzIFFUTW92aWVMb2FkU3RhdGVDb21w
bGV0ZS4KLSAgICAgICAgLy8gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBRVEtpdCBBUEkgYW5kIHNl
ZW1zIHN0cmFuZ2UuCi0gICAgICAgIGxvbmcgbG9hZFN0YXRlID0gbV9sb2FkRXJyb3IgPyBRVE1v
dmllTG9hZFN0YXRlRXJyb3IgOiBHZXRNb3ZpZUxvYWRTdGF0ZShtX21vdmllKTsKLSAgICAgICAg
aWYgKGxvYWRTdGF0ZSAhPSBtX2xvYWRTdGF0ZSkgewotICAgICAgICAgICAgLy8gd2Ugb25seSBu
ZWVkIHRvIGVyYXNlIHRoZSBtb3ZpZSBnd29ybGQgd2hlbiB0aGUgbG9hZCBzdGF0ZSBjaGFuZ2Vz
IHRvIGxvYWRlZCB3aGlsZSBpdAotICAgICAgICAgICAgLy8gIGlzIHZpc2libGUgYXMgdGhlIGd3
b3JsZCBpcyBkZXN0cm95ZWQvY3JlYXRlZCB3aGVuIHZpc2liaWxpdHkgY2hhbmdlcwotICAgICAg
ICAgICAgYm9vbCBzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9IGZhbHNlOwotICAgICAgICAg
ICAgYm9vbCBtb3ZpZU5ld2x5UGxheWFibGUgPSBsb2FkU3RhdGUgPj0gUVRNb3ZpZUxvYWRTdGF0
ZUxvYWRlZCAmJiBtX2xvYWRTdGF0ZSA8IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQ7Ci0gICAgICAg
ICAgICBtX2xvYWRTdGF0ZSA9IGxvYWRTdGF0ZTsKLSAgICAgICAgICAgIGlmIChtb3ZpZU5ld2x5
UGxheWFibGUpIHsKLSAgICAgICAgICAgICAgICBjYWNoZU1vdmllU2NhbGUoKTsKLSAgICAgICAg
ICAgICAgICBzaG91bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICghbV9tb3ZpZUNvbnRyb2xsZXIgJiYgbV9sb2FkU3RhdGUgPj0g
UVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKLSAgICAgICAgICAgICAgICBjcmVhdGVNb3ZpZUNvbnRy
b2xsZXIoKTsKLQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NsaWVudHMu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbV9jbGllbnRzW2ldLT5tb3ZpZUxvYWRTdGF0
ZUNoYW5nZWQobV9tb3ZpZVdpbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzaG91
bGRSZXN0b3JlUGxheWJhY2tTdGF0ZSAmJiBtX3RpbWVUb1Jlc3RvcmUgIT0gLTEuMGYpIHsKLSAg
ICAgICAgICAgICAgICBtX21vdmllV2luLT5zZXRDdXJyZW50VGltZShtX3RpbWVUb1Jlc3RvcmUp
OwotICAgICAgICAgICAgICAgIG1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOwotICAgICAgICAgICAg
ICAgIG1fbW92aWVXaW4tPnNldFJhdGUobV9yYXRlVG9SZXN0b3JlKTsKLSAgICAgICAgICAgICAg
ICBtX3JhdGVUb1Jlc3RvcmUgPSAtMS4wZjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKG1fZGlzYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBlbmRUYXNrKCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fbGFzdExv
YWRTdGF0ZUNoZWNrVGltZSA9IHN5c3RlbVRpbWUoKTsKLSAgICB9Ci0KLSAgICBib29sIGVuZGVk
ID0gISFJc01vdmllRG9uZShtX21vdmllKTsKLSAgICBpZiAoZW5kZWQgIT0gbV9lbmRlZCkgewot
ICAgICAgICBtX2VuZGVkID0gZW5kZWQ7Ci0gICAgICAgIGlmIChlbmRlZCkgewotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NsaWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICAgICBtX2NsaWVudHNbaV0tPm1vdmllRW5kZWQobV9tb3ZpZVdpbik7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBmbG9hdCB0aW1lID0gbV9tb3ZpZVdpbi0+Y3VycmVudFRpbWUoKTsKLSAg
ICBpZiAodGltZSA8IG1fbGFzdE1lZGlhVGltZSB8fCB0aW1lID49IG1fbGFzdE1lZGlhVGltZSAr
IGNOb25Db250aW51b3VzVGltZUNoYW5nZSB8fCBtX3NlZWtpbmcpIHsKLSAgICAgICAgbV9zZWVr
aW5nID0gZmFsc2U7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jbGllbnRzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgbV9jbGllbnRzW2ldLT5tb3ZpZVRpbWVDaGFuZ2VkKG1f
bW92aWVXaW4pOwotICAgIH0KLSAgICBtX2xhc3RNZWRpYVRpbWUgPSB0aW1lOwotCi0gICAgaWYg
KG1fbG9hZEVycm9yKQotICAgICAgICBlbmRUYXNrKCk7Ci0gICAgZWxzZQotICAgICAgICBRVE1v
dmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGltZXIoKTsKLX0KLQotdm9pZCBRVE1v
dmllUHJpdmF0ZTo6Y3JlYXRlTW92aWVDb250cm9sbGVyKCkKLXsKLSAgICBSZWN0IGJvdW5kczsK
LSAgICBsb25nIGZsYWdzOwotCi0gICAgaWYgKCFtX21vdmllKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9tb3ZpZUNvbnRyb2xsZXIpCi0gICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xs
ZXIobV9tb3ZpZUNvbnRyb2xsZXIpOwotCi0gICAgR2V0TW92aWVCb3gobV9tb3ZpZSwgJmJvdW5k
cyk7Ci0gICAgZmxhZ3MgPSBtY1RvcExlZnRNb3ZpZSB8IG1jTm90VmlzaWJsZTsKLSAgICBtX21v
dmllQ29udHJvbGxlciA9IE5ld01vdmllQ29udHJvbGxlcihtX21vdmllLCAmYm91bmRzLCBmbGFn
cyk7Ci0gICAgaWYgKCFtX21vdmllQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRGlzYWJsZSBhdXRvbWF0aWMgbG9vcGluZy4KLSAgICBNQ0RvQWN0aW9uKG1fbW92aWVDb250
cm9sbGVyLCBtY0FjdGlvblNldExvb3BpbmcsIDApOwotfQotCi12b2lkIFFUTW92aWVQcml2YXRl
OjpjYWNoZU1vdmllU2NhbGUoKQotewotICAgIFJlY3QgbmF0dXJhbFJlY3Q7Ci0gICAgUmVjdCBp
bml0aWFsUmVjdDsKLQotICAgIEdldE1vdmllTmF0dXJhbEJvdW5kc1JlY3QobV9tb3ZpZSwgJm5h
dHVyYWxSZWN0KTsKLSAgICBHZXRNb3ZpZUJveChtX21vdmllLCAmaW5pdGlhbFJlY3QpOwotCi0g
ICAgZmxvYXQgbmF0dXJhbFdpZHRoID0gbmF0dXJhbFJlY3QucmlnaHQgLSBuYXR1cmFsUmVjdC5s
ZWZ0OwotICAgIGZsb2F0IG5hdHVyYWxIZWlnaHQgPSBuYXR1cmFsUmVjdC5ib3R0b20gLSBuYXR1
cmFsUmVjdC50b3A7Ci0KLSAgICBpZiAobmF0dXJhbFdpZHRoKQotICAgICAgICBtX3dpZHRoU2Nh
bGVGYWN0b3IgPSAoaW5pdGlhbFJlY3QucmlnaHQgLSBpbml0aWFsUmVjdC5sZWZ0KSAvIG5hdHVy
YWxXaWR0aDsKLSAgICBpZiAobmF0dXJhbEhlaWdodCkKLSAgICAgICAgbV9oZWlnaHRTY2FsZUZh
Y3RvciA9IChpbml0aWFsUmVjdC5ib3R0b20gLSBpbml0aWFsUmVjdC50b3ApIC8gbmF0dXJhbEhl
aWdodDsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgbV9zY2FsZUNhY2hlZCA9IHRydWU7Ci0j
ZW5kaWYKLX0KLQotUVRNb3ZpZTo6UVRNb3ZpZShRVE1vdmllQ2xpZW50KiBjbGllbnQpCi0gICAg
OiBtX3ByaXZhdGUobmV3IFFUTW92aWVQcml2YXRlKCkpCi17Ci0gICAgbV9wcml2YXRlLT5tX21v
dmllV2luID0gdGhpczsKLSAgICBpZiAoY2xpZW50KQotICAgICAgICBtX3ByaXZhdGUtPm1fY2xp
ZW50cy5hcHBlbmQoY2xpZW50KTsKLSAgICBpbml0aWFsaXplUXVpY2tUaW1lKCk7Ci19Ci0KLVFU
TW92aWU6On5RVE1vdmllKCkKLXsKLSAgICBkZWxldGUgbV9wcml2YXRlOwotfQotCi12b2lkIFFU
TW92aWU6OmRpc2FibGVDb21wb25lbnQodWludDMyX3QgY2RbNV0pCi17Ci0gICAgQ29tcG9uZW50
RGVzY3JpcHRpb24gbnVsbERlc2MgPSB7J251bGwnLCAnYmFzZScsIGtBcHBsZU1hbnVmYWN0dXJl
ciwgMCwgMH07Ci0gICAgQ29tcG9uZW50IG51bGxDb21wID0gRmluZE5leHRDb21wb25lbnQoMCwg
Jm51bGxEZXNjKTsKLSAgICBDb21wb25lbnQgZGlzYWJsZWRDb21wID0gMDsKLQotICAgIHdoaWxl
IChkaXNhYmxlZENvbXAgPSBGaW5kTmV4dENvbXBvbmVudChkaXNhYmxlZENvbXAsIChDb21wb25l
bnREZXNjcmlwdGlvbiopJmNkWzBdKSkKLSAgICAgICAgQ2FwdHVyZUNvbXBvbmVudChkaXNhYmxl
ZENvbXAsIG51bGxDb21wKTsKLX0KLQotdm9pZCBRVE1vdmllOjphZGRDbGllbnQoUVRNb3ZpZUNs
aWVudCogY2xpZW50KQotewotICAgIGlmIChjbGllbnQpCi0gICAgICAgIG1fcHJpdmF0ZS0+bV9j
bGllbnRzLmFwcGVuZChjbGllbnQpOwotfQotCi12b2lkIFFUTW92aWU6OnJlbW92ZUNsaWVudChR
VE1vdmllQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgc2l6ZV90IGluZGV4T2ZDbGllbnQgPSBtX3By
aXZhdGUtPm1fY2xpZW50cy5maW5kKGNsaWVudCk7Ci0gICAgaWYgKGluZGV4T2ZDbGllbnQgIT0g
bm90Rm91bmQpCi0gICAgICAgIG1fcHJpdmF0ZS0+bV9jbGllbnRzLnJlbW92ZShpbmRleE9mQ2xp
ZW50KTsKLX0KLQotdm9pZCBRVE1vdmllOjpwbGF5KCkKLXsKLSAgICBtX3ByaXZhdGUtPm1fdGlt
ZVRvUmVzdG9yZSA9IC0xLjBmOwotCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xs
ZXIpCi0gICAgICAgIE1DRG9BY3Rpb24obV9wcml2YXRlLT5tX21vdmllQ29udHJvbGxlciwgbWNB
Y3Rpb25QcmVyb2xsQW5kUGxheSwgKHZvaWQgKilHZXRNb3ZpZVByZWZlcnJlZFJhdGUobV9wcml2
YXRlLT5tX21vdmllKSk7Ci0gICAgZWxzZQotICAgICAgICBTdGFydE1vdmllKG1fcHJpdmF0ZS0+
bV9tb3ZpZSk7Ci0gICAgbV9wcml2YXRlLT5zdGFydFRhc2soKTsKLX0KLQotdm9pZCBRVE1vdmll
OjpwYXVzZSgpCi17Ci0gICAgbV9wcml2YXRlLT5tX3RpbWVUb1Jlc3RvcmUgPSAtMS4wZjsKLQot
ICAgIGlmIChtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ0RvQWN0aW9u
KG1fcHJpdmF0ZS0+bV9tb3ZpZUNvbnRyb2xsZXIsIG1jQWN0aW9uUGxheSwgMCk7Ci0gICAgZWxz
ZQotICAgICAgICBTdG9wTW92aWUobV9wcml2YXRlLT5tX21vdmllKTsKLSAgICBRVE1vdmllVGFz
azo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGltZXIoKTsKLX0KLQotZmxvYXQgUVRNb3ZpZTo6
cmF0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBGaXhlZFRvRmxvYXQoR2V0TW92aWVSYXRlKG1fcHJpdmF0ZS0+
bV9tb3ZpZSkpOwotfQotCi12b2lkIFFUTW92aWU6OnNldFJhdGUoZmxvYXQgcmF0ZSkKLXsKLSAg
ICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuOyAgICAKLSAgICBtX3By
aXZhdGUtPm1fdGltZVRvUmVzdG9yZSA9IC0xLjBmOwotICAgIAotICAgIGlmIChtX3ByaXZhdGUt
Pm1fbW92aWVDb250cm9sbGVyKQotICAgICAgICBNQ0RvQWN0aW9uKG1fcHJpdmF0ZS0+bV9tb3Zp
ZUNvbnRyb2xsZXIsIG1jQWN0aW9uUHJlcm9sbEFuZFBsYXksICh2b2lkICopRmxvYXRUb0ZpeGVk
KHJhdGUpKTsKLSAgICBlbHNlCi0gICAgICAgIFNldE1vdmllUmF0ZShtX3ByaXZhdGUtPm1fbW92
aWUsIEZsb2F0VG9GaXhlZChyYXRlKSk7Ci0gICAgUVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+
dXBkYXRlVGFza1RpbWVyKCk7Ci19Ci0KLWZsb2F0IFFUTW92aWU6OmR1cmF0aW9uKCkgY29uc3QK
LXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
VGltZVZhbHVlIHZhbCA9IEdldE1vdmllRHVyYXRpb24obV9wcml2YXRlLT5tX21vdmllKTsKLSAg
ICBUaW1lU2NhbGUgc2NhbGUgPSBHZXRNb3ZpZVRpbWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsKSAvIHNjYWxlOwotfQotCi1mbG9h
dCBRVE1vdmllOjpjdXJyZW50VGltZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1f
bW92aWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIFRpbWVWYWx1ZSB2YWwgPSBHZXRNb3ZpZVRp
bWUobV9wcml2YXRlLT5tX21vdmllLCAwKTsKLSAgICBUaW1lU2NhbGUgc2NhbGUgPSBHZXRNb3Zp
ZVRpbWVTY2FsZShtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4odmFsKSAvIHNjYWxlOwotfQotCi12b2lkIFFUTW92aWU6OnNldEN1cnJlbnRUaW1lKGZs
b2F0IHRpbWUpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0b3JlID0gLTEuMGY7Ci0gICAg
Ci0gICAgbV9wcml2YXRlLT5tX3NlZWtpbmcgPSB0cnVlOwotICAgIFRpbWVTY2FsZSBzY2FsZSA9
IEdldE1vdmllVGltZVNjYWxlKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgaWYgKG1fcHJpdmF0
ZS0+bV9tb3ZpZUNvbnRyb2xsZXIpIHsKLSAgICAgICAgUVRSZXN0YXJ0QXRUaW1lUmVjb3JkIHJl
c3RhcnQgPSB7IGxyb3VuZGYodGltZSAqIHNjYWxlKSAsIDAgfTsKLSAgICAgICAgTUNEb0FjdGlv
bihtX3ByaXZhdGUtPm1fbW92aWVDb250cm9sbGVyLCBtY0FjdGlvblJlc3RhcnRBdFRpbWUsICh2
b2lkICopJnJlc3RhcnQpOwotICAgIH0gZWxzZQotICAgICAgICBTZXRNb3ZpZVRpbWVWYWx1ZSht
X3ByaXZhdGUtPm1fbW92aWUsIFRpbWVWYWx1ZShscm91bmRmKHRpbWUgKiBzY2FsZSkpKTsKLSAg
ICBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpLT51cGRhdGVUYXNrVGltZXIoKTsKLX0KLQotdm9p
ZCBRVE1vdmllOjpzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQotewotICAgIGlmICghbV9wcml2YXRl
LT5tX21vdmllKQotICAgICAgICByZXR1cm47Ci0gICAgU2V0TW92aWVWb2x1bWUobV9wcml2YXRl
LT5tX21vdmllLCBzdGF0aWNfY2FzdDxzaG9ydD4odm9sdW1lICogMjU2KSk7Ci19Ci0KLXZvaWQg
UVRNb3ZpZTo6c2V0UHJlc2VydmVzUGl0Y2goYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKLXsKLSAgICBp
ZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSB8fCAhbV9wcml2YXRlLT5tX2N1cnJlbnRVUkwpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIE9TRXJyIGVycm9yOwotICAgIGJvb2wgcHJvcCA9IGZhbHNlOwot
Ci0gICAgZXJyb3IgPSBRVEdldE1vdmllUHJvcGVydHkobV9wcml2YXRlLT5tX21vdmllLCBrUVRQ
cm9wZXJ0eUNsYXNzX0F1ZGlvLCBrUVRBdWRpb1Byb3BlcnR5SURfUmF0ZUNoYW5nZXNQcmVzZXJ2
ZVBpdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrUVRBdWRpb1By
b3BlcnR5SURfUmF0ZUNoYW5nZXNQcmVzZXJ2ZVBpdGNoKSwgc3RhdGljX2Nhc3Q8UVRQcm9wZXJ0
eVZhbHVlUHRyPigmcHJvcCksIDApOwotCi0gICAgaWYgKGVycm9yIHx8IHByb3AgPT0gcHJlc2Vy
dmVzUGl0Y2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJpdmF0ZS0+bV90aW1lVG9SZXN0
b3JlID0gY3VycmVudFRpbWUoKTsKLSAgICBtX3ByaXZhdGUtPm1fcmF0ZVRvUmVzdG9yZSA9IHJh
dGUoKTsKLSAgICBsb2FkKG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMLCBwcmVzZXJ2ZXNQaXRjaCk7
Ci19Ci0KLXVuc2lnbmVkIFFUTW92aWU6OmRhdGFTaXplKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
cHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEdldE1vdmll
RGF0YVNpemUobV9wcml2YXRlLT5tX21vdmllLCAwLCBHZXRNb3ZpZUR1cmF0aW9uKG1fcHJpdmF0
ZS0+bV9tb3ZpZSkpOwotfQotCi1mbG9hdCBRVE1vdmllOjptYXhUaW1lTG9hZGVkKCkgY29uc3QK
LXsKLSAgICBpZiAoIW1fcHJpdmF0ZS0+bV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
VGltZVZhbHVlIHZhbDsKLSAgICBHZXRNYXhMb2FkZWRUaW1lSW5Nb3ZpZShtX3ByaXZhdGUtPm1f
bW92aWUsICZ2YWwpOwotICAgIFRpbWVTY2FsZSBzY2FsZSA9IEdldE1vdmllVGltZVNjYWxlKG1f
cHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWwpIC8g
c2NhbGU7Ci19Ci0KLWxvbmcgUVRNb3ZpZTo6bG9hZFN0YXRlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9wcml2YXRlLT5tX2xvYWRTdGF0ZTsKLX0KLQotdm9pZCBRVE1vdmllOjpnZXROYXR1cmFs
U2l6ZShpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCkKLXsKLSAgICBSZWN0IHJlY3QgPSB7IDAsIH07
Ci0KLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllKQotICAgICAgICBHZXRNb3ZpZU5hdHVyYWxC
b3VuZHNSZWN0KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgJnJlY3QpOwotICAgIHdpZHRoID0gKHJlY3Qu
cmlnaHQgLSByZWN0LmxlZnQpICogbV9wcml2YXRlLT5tX3dpZHRoU2NhbGVGYWN0b3I7Ci0gICAg
aGVpZ2h0ID0gKHJlY3QuYm90dG9tIC0gcmVjdC50b3ApICogbV9wcml2YXRlLT5tX2hlaWdodFNj
YWxlRmFjdG9yOwotfQotCi12b2lkIFFUTW92aWU6OmxvYWRQYXRoKGNvbnN0IFVDaGFyKiB1cmws
IGludCBsZW4sIGJvb2wgcHJlc2VydmVzUGl0Y2gpCi17Ci0gICAgQ0ZTdHJpbmdSZWYgdXJsU3Ry
aW5nUmVmID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPih1cmwpLCBsZW4pOwotICAgIENGVVJM
UmVmIGNmVVJMID0gQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgdXJsU3RyaW5nUmVmLCBrQ0ZVUkxXaW5kb3dzUGF0aFN0eWxlLCBmYWxzZSk7Ci0KLSAg
ICBsb2FkKGNmVVJMLCBwcmVzZXJ2ZXNQaXRjaCk7Ci0KLSAgICBpZiAoY2ZVUkwpCi0gICAgICAg
IENGUmVsZWFzZShjZlVSTCk7Ci0gICAgaWYgKHVybFN0cmluZ1JlZikKLSAgICAgICAgQ0ZSZWxl
YXNlKHVybFN0cmluZ1JlZik7Ci19Ci0KLXZvaWQgUVRNb3ZpZTo6bG9hZChjb25zdCBVQ2hhciog
dXJsLCBpbnQgbGVuLCBib29sIHByZXNlcnZlc1BpdGNoKQotewotICAgIENGU3RyaW5nUmVmIHVy
bFN0cmluZ1JlZiA9IENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4odXJsKSwgbGVuKTsKLSAgICBD
RlVSTFJlZiBjZlVSTCA9IENGVVJMQ3JlYXRlV2l0aFN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCB1cmxTdHJpbmdSZWYsIDApOwotCi0gICAgbG9hZChjZlVSTCwgcHJlc2VydmVzUGl0Y2gpOwot
Ci0gICAgaWYgKGNmVVJMKQotICAgICAgICBDRlJlbGVhc2UoY2ZVUkwpOwotICAgIGlmICh1cmxT
dHJpbmdSZWYpCi0gICAgICAgIENGUmVsZWFzZSh1cmxTdHJpbmdSZWYpOwotfQotCi12b2lkIFFU
TW92aWU6OmxvYWQoQ0ZVUkxSZWYgdXJsLCBib29sIHByZXNlcnZlc1BpdGNoKQotewotICAgIGlm
ICghdXJsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wcml2YXRlLT5tX21vdmllKSB7
Ci0gICAgICAgIG1fcHJpdmF0ZS0+ZW5kVGFzaygpOwotICAgICAgICBpZiAobV9wcml2YXRlLT5t
X21vdmllQ29udHJvbGxlcikKLSAgICAgICAgICAgIERpc3Bvc2VNb3ZpZUNvbnRyb2xsZXIobV9w
cml2YXRlLT5tX21vdmllQ29udHJvbGxlcik7Ci0gICAgICAgIG1fcHJpdmF0ZS0+bV9tb3ZpZUNv
bnRyb2xsZXIgPSAwOwotICAgICAgICBEaXNwb3NlTW92aWUobV9wcml2YXRlLT5tX21vdmllKTsK
LSAgICAgICAgbV9wcml2YXRlLT5tX21vdmllID0gMDsKLSAgICAgICAgbV9wcml2YXRlLT5tX2xv
YWRTdGF0ZSA9IDA7Ci0gICAgfSAgCi0KLSAgICAvLyBEZWZpbmUgYSBwcm9wZXJ0eSBhcnJheSBm
b3IgTmV3TW92aWVGcm9tUHJvcGVydGllcy4KLSAgICBRVE5ld01vdmllUHJvcGVydHlFbGVtZW50
IG1vdmllUHJvcHNbOV07IAotICAgIEl0ZW1Db3VudCBtb3ZpZVByb3BDb3VudCA9IDA7IAotCi0g
ICAgYm9vbCBib29sVHJ1ZSA9IHRydWU7Ci0gICAgCi0gICAgLy8gRGlzYWJsZSBzdHJlYW1pbmcg
c3VwcG9ydCBmb3Igbm93LiAKLSAgICBDRlN0cmluZ1JlZiBzY2hlbWUgPSBDRlVSTENvcHlTY2hl
bWUodXJsKTsKLSAgICBib29sIGlzUlRTUCA9IENGU3RyaW5nSGFzUHJlZml4KHNjaGVtZSwgQ0ZT
VFIoInJ0c3A6IikpOwotICAgIENGUmVsZWFzZShzY2hlbWUpOwotCi0gICAgaWYgKGlzUlRTUCkg
ewotICAgICAgICBtX3ByaXZhdGUtPm1fbG9hZEVycm9yID0gbm9Nb3ZpZUZvdW5kOwotICAgICAg
ICBnb3RvIGVuZDsKLSAgICB9Ci0KLSAgICBpZiAobV9wcml2YXRlLT5tX2N1cnJlbnRVUkwpIHsK
LSAgICAgICAgaWYgKG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMICE9IHVybCkgewotICAgICAgICAg
ICAgQ0ZSZWxlYXNlKG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMKTsKLSAgICAgICAgICAgIG1fcHJp
dmF0ZS0+bV9jdXJyZW50VVJMID0gdXJsOwotICAgICAgICAgICAgQ0ZSZXRhaW4odXJsKTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcHJpdmF0ZS0+bV9jdXJyZW50VVJMID0g
dXJsOwotICAgICAgICBDRlJldGFpbih1cmwpOwotICAgIH0KLQotICAgIC8vIEFkZCB0aGUgbW92
aWUgZGF0YSBsb2NhdGlvbiB0byB0aGUgcHJvcGVydHkgYXJyYXkgCi0gICAgbW92aWVQcm9wc1tt
b3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVydHlDbGFzc19EYXRhTG9jYXRpb247
IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BJRCA9IGtRVERhdGFMb2NhdGlv
blByb3BlcnR5SURfQ0ZVUkw7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BW
YWx1ZVNpemUgPSBzaXplb2YobV9wcml2YXRlLT5tX2N1cnJlbnRVUkwpOyAKLSAgICBtb3ZpZVBy
b3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJihtX3ByaXZhdGUtPm1fY3Vy
cmVudFVSTCk7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAw
OyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOyAKLQotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291
bnRdLnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfTW92aWVJbnN0YW50aWF0aW9uOyAKLSAg
ICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQgPSBrUVRNb3ZpZUluc3RhbnRpYXRp
b25Qcm9wZXJ0eUlEX0RvbnRBc2tVbnJlc29sdmVkRGF0YVJlZnM7IAotICAgIG1vdmllUHJvcHNb
bW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YoYm9vbFRydWUpOyAKLSAgICBt
b3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNzID0gJmJvb2xUcnVlOyAK
LSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVzID0gMDsgCi0gICAgbW92
aWVQcm9wQ291bnQrKzsgCi0KLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xh
c3MgPSBrUVRQcm9wZXJ0eUNsYXNzX01vdmllSW5zdGFudGlhdGlvbjsgCi0gICAgbW92aWVQcm9w
c1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0ga1FUTW92aWVJbnN0YW50aWF0aW9uUHJvcGVydHlJ
RF9Bc3luY09LOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXpl
ID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJv
cFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3Vu
dF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50Kys7IAotCi0gICAgbW92aWVQ
cm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVydHlDbGFzc19OZXdNb3Zp
ZVByb3BlcnR5OyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQgPSBrUVRO
ZXdNb3ZpZVByb3BlcnR5SURfQWN0aXZlOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9mKGJvb2xUcnVlKTsgCi0gICAgbW92aWVQcm9wc1ttb3Zp
ZVByb3BDb3VudF0ucHJvcFZhbHVlQWRkcmVzcyA9ICZib29sVHJ1ZTsgCi0gICAgbW92aWVQcm9w
c1ttb3ZpZVByb3BDb3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50Kys7
IAotCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENsYXNzID0ga1FUUHJvcGVy
dHlDbGFzc19OZXdNb3ZpZVByb3BlcnR5OyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50
XS5wcm9wSUQgPSBrUVROZXdNb3ZpZVByb3BlcnR5SURfRG9udEludGVyYWN0V2l0aFVzZXI7IAot
ICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBzaXplb2YoYm9v
bFRydWUpOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVBZGRyZXNz
ID0gJmJvb2xUcnVlOyAKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wU3RhdHVz
ID0gMDsgCi0gICAgbW92aWVQcm9wQ291bnQrKzsgCi0KLSAgICBtb3ZpZVByb3BzW21vdmllUHJv
cENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX01vdmllSW5zdGFudGlhdGlvbjsK
LSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQgPSAnIXVybCc7Ci0gICAgbW92
aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7
IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9v
bFRydWU7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAK
LSAgICBtb3ZpZVByb3BDb3VudCsrOyAKLQotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRd
LnByb3BDbGFzcyA9IGtRVFByb3BlcnR5Q2xhc3NfTW92aWVJbnN0YW50aWF0aW9uOyAKLSAgICBt
b3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wSUQgPSAnc2l0ZSc7Ci0gICAgbW92aWVQcm9w
c1ttb3ZpZVByb3BDb3VudF0ucHJvcFZhbHVlU2l6ZSA9IHNpemVvZihib29sVHJ1ZSk7IAotICAg
IG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZUFkZHJlc3MgPSAmYm9vbFRydWU7
IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBt
b3ZpZVByb3BDb3VudCsrOwotCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcENs
YXNzID0ga1FUUHJvcGVydHlDbGFzc19BdWRpbzsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BD
b3VudF0ucHJvcElEID0ga1FUQXVkaW9Qcm9wZXJ0eUlEX1JhdGVDaGFuZ2VzUHJlc2VydmVQaXRj
aDsKLSAgICBtb3ZpZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wVmFsdWVTaXplID0gc2l6ZW9m
KHByZXNlcnZlc1BpdGNoKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcFZh
bHVlQWRkcmVzcyA9ICZwcmVzZXJ2ZXNQaXRjaDsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BD
b3VudF0ucHJvcFN0YXR1cyA9IDA7IAotICAgIG1vdmllUHJvcENvdW50Kys7IAotCi0gICAgYm9v
bCBhbGxvd0NhY2hpbmcgPSAhbV9wcml2YXRlLT5tX3ByaXZhdGVCcm93c2luZzsKLSAgICBtb3Zp
ZVByb3BzW21vdmllUHJvcENvdW50XS5wcm9wQ2xhc3MgPSBrUVRQcm9wZXJ0eUNsYXNzX01vdmll
SW5zdGFudGlhdGlvbjsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJvcElEID0g
J3BlcnMnOwotICAgIG1vdmllUHJvcHNbbW92aWVQcm9wQ291bnRdLnByb3BWYWx1ZVNpemUgPSBz
aXplb2YoYWxsb3dDYWNoaW5nKTsgCi0gICAgbW92aWVQcm9wc1ttb3ZpZVByb3BDb3VudF0ucHJv
cFZhbHVlQWRkcmVzcyA9ICZhbGxvd0NhY2hpbmc7IAotICAgIG1vdmllUHJvcHNbbW92aWVQcm9w
Q291bnRdLnByb3BTdGF0dXMgPSAwOyAKLSAgICBtb3ZpZVByb3BDb3VudCsrOwotCi0gICAgQVNT
RVJUKG1vdmllUHJvcENvdW50IDw9IFdURl9BUlJBWV9MRU5HVEgobW92aWVQcm9wcykpOwotICAg
IG1fcHJpdmF0ZS0+bV9sb2FkRXJyb3IgPSBOZXdNb3ZpZUZyb21Qcm9wZXJ0aWVzKG1vdmllUHJv
cENvdW50LCBtb3ZpZVByb3BzLCAwLCAwLCAmbV9wcml2YXRlLT5tX21vdmllKTsKLQotZW5kOgot
ICAgIG1fcHJpdmF0ZS0+c3RhcnRUYXNrKCk7Ci0gICAgLy8gZ2V0IHRoZSBsb2FkIGZhaWwgY2Fs
bGJhY2sgcXVpY2tseSAKLSAgICBpZiAobV9wcml2YXRlLT5tX2xvYWRFcnJvcikKLSAgICAgICAg
UVRNb3ZpZVRhc2s6OnNoYXJlZFRhc2soKS0+dXBkYXRlVGFza1RpbWVyKDApOwotICAgIGVsc2Ug
ewotICAgICAgICBPU1R5cGUgbW9kZSA9IGtRVEFwZXJ0dXJlTW9kZV9DbGVhbkFwZXJ0dXJlOwot
Ci0gICAgICAgIC8vIFNldCB0aGUgYXBlcnR1cmUgbW9kZSBwcm9wZXJ0eSBvbiBhIG1vdmllIHRv
IHNpZ25hbCB0aGF0IHdlIHdhbnQgYXNwZWN0IHJhdGlvCi0gICAgICAgIC8vIGFuZCBjbGVhbiBh
cGVydHVyZSBkaW1lbnNpb25zLiBEb24ndCB3b3JyeSBhYm91dCBlcnJvcnMsIHdlIGNhbid0IGRv
IGFueXRoaW5nIGlmCi0gICAgICAgIC8vIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBRVCBkb2Vz
bid0IHN1cHBvcnQgaXQgYW5kIGl0IGlzbid0IHNlcmlvdXMgZW5vdWdoIHRvIAotICAgICAgICAv
LyB3YXJyYW50IGZhaWxpbmcuCi0gICAgICAgIFFUU2V0TW92aWVQcm9wZXJ0eShtX3ByaXZhdGUt
Pm1fbW92aWUsIGtRVFByb3BlcnR5Q2xhc3NfVmlzdWFsLCBrUVRWaXN1YWxQcm9wZXJ0eUlEX0Fw
ZXJ0dXJlTW9kZSwgc2l6ZW9mKG1vZGUpLCAmbW9kZSk7Ci0gICAgfQotfQotCi12b2lkIFFUTW92
aWU6OmRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQs
IHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1fbW92
aWUpIHsKLSAgICAgICAgdG90YWxUcmFja0NvdW50ID0gMDsKLSAgICAgICAgZW5hYmxlZFRyYWNr
Q291bnQgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RhdGljIEhhc2hTZXQ8
T1NUeXBlPiogYWxsb3dlZFRyYWNrVHlwZXMgPSAwOwotICAgIGlmICghYWxsb3dlZFRyYWNrVHlw
ZXMpIHsKLSAgICAgICAgYWxsb3dlZFRyYWNrVHlwZXMgPSBuZXcgSGFzaFNldDxPU1R5cGU+Owot
ICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKFZpZGVvTWVkaWFUeXBlKTsKLSAgICAgICAg
YWxsb3dlZFRyYWNrVHlwZXMtPmFkZChTb3VuZE1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRU
cmFja1R5cGVzLT5hZGQoVGV4dE1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVz
LT5hZGQoQmFzZU1lZGlhVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoY2xv
c2VkQ2FwdGlvblRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5cGVzLT5hZGQoc3Vi
VGl0bGVUcmFja1R5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRkKG1wZWc0T2Jq
ZWN0RGVzY3JpcHRpb25UcmFja1R5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+YWRk
KG1wZWc0U2NlbmVEZXNjcmlwdGlvblRyYWNrVHlwZSk7Ci0gICAgICAgIGFsbG93ZWRUcmFja1R5
cGVzLT5hZGQoVGltZUNvZGVNZWRpYVR5cGUpOwotICAgICAgICBhbGxvd2VkVHJhY2tUeXBlcy0+
YWRkKFRpbWVDb2RlNjRNZWRpYVR5cGUpOwotICAgIH0KLQotICAgIGxvbmcgdHJhY2tDb3VudCA9
IEdldE1vdmllVHJhY2tDb3VudChtX3ByaXZhdGUtPm1fbW92aWUpOwotICAgIGVuYWJsZWRUcmFj
a0NvdW50ID0gdHJhY2tDb3VudDsKLSAgICB0b3RhbFRyYWNrQ291bnQgPSB0cmFja0NvdW50Owot
Ci0gICAgLy8gVHJhY2sgaW5kZXhlcyBhcmUgMS1iYXNlZC4geXVjay4gVGhlc2UgdGhpbmdzIG11
c3QgZGVzY2VuZCBmcm9tIG9sZC0KLSAgICAvLyBzY2hvb2wgbWFjIHJlc291cmNlcyBvciBzb21l
dGhpbmcuCi0gICAgZm9yIChsb25nIHRyYWNrSW5kZXggPSAxOyB0cmFja0luZGV4IDw9IHRyYWNr
Q291bnQ7IHRyYWNrSW5kZXgrKykgewotICAgICAgICAvLyBHcmFiIHRoZSB0cmFjayBhdCB0aGUg
Y3VycmVudCBpbmRleC4gSWYgdGhlcmUgaXNuJ3Qgb25lIHRoZXJlLCB0aGVuCi0gICAgICAgIC8v
IHdlIGNhbiBtb3ZlIG9udG8gdGhlIG5leHQgb25lLgotICAgICAgICBUcmFjayBjdXJyZW50VHJh
Y2sgPSBHZXRNb3ZpZUluZFRyYWNrKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgdHJhY2tJbmRleCk7Ci0g
ICAgICAgIGlmICghY3VycmVudFRyYWNrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IAotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRyYWNrIGlzIGRpc2FibGVkIGFscmVh
ZHksIHdlIHNob3VsZCBtb3ZlIGFsb25nLgotICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJl
LWRpc2FibGUgaXQuCi0gICAgICAgIGlmICghR2V0VHJhY2tFbmFibGVkKGN1cnJlbnRUcmFjaykp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBHcmFiIHRoZSB0cmFjaydzIG1l
ZGlhLiBXZSdyZSBnb2luZyB0byBjaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0bwotICAgICAgICAv
LyBkaXNhYmxlIHRoZSB0cmFja3MuIFRoZXkgY291bGQgYmUgdW5zdXBwb3J0ZWQuCi0gICAgICAg
IE1lZGlhIHRyYWNrTWVkaWEgPSBHZXRUcmFja01lZGlhKGN1cnJlbnRUcmFjayk7Ci0gICAgICAg
IGlmICghdHJhY2tNZWRpYSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAg
ICAgLy8gR3JhYiB0aGUgbWVkaWEgdHlwZSBmb3IgdGhpcyB0cmFjay4gTWFrZSBzdXJlIHRoYXQg
d2UgZG9uJ3QKLSAgICAgICAgLy8gZ2V0IGFuIGVycm9yIGluIGRvaW5nIHNvLiBJZiB3ZSBkbywg
dGhlbiBzb21ldGhpbmcgcmVhbGx5IGZ1bmt5IGlzCi0gICAgICAgIC8vIHdyb25nLgotICAgICAg
ICBPU1R5cGUgbWVkaWFUeXBlOwotICAgICAgICBHZXRNZWRpYUhhbmRsZXJEZXNjcmlwdGlvbih0
cmFja01lZGlhLCAmbWVkaWFUeXBlLCBuaWwsIG5pbCk7Ci0gICAgICAgIE9TRXJyIG1lZGlhRXJy
ID0gR2V0TW92aWVzRXJyb3IoKTsgICAgCi0gICAgICAgIGlmIChtZWRpYUVyciAhPSBub0VycikK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFhbGxvd2VkVHJh
Y2tUeXBlcy0+Y29udGFpbnMobWVkaWFUeXBlKSkgewotCi0gICAgICAgICAgICAvLyBEaWZmZXJl
bnQgbXBlZyB2YXJpYW50cyBpbXBvcnQgYXMgZGlmZmVyZW50IHRyYWNrIHR5cGVzIHNvIGNoZWNr
IGZvciB0aGUgIm1wZWcgCi0gICAgICAgICAgICAvLyBjaGFyYWN0ZXJpc3RpYyIgaW5zdGVhZCBv
ZiBoYXJkIGNvZGluZyB0aGUgKGN1cnJlbnQpIGxpc3Qgb2YgbXBlZyBtZWRpYSB0eXBlcy4KLSAg
ICAgICAgICAgIGlmIChHZXRNb3ZpZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEs
ICdtcGVnJywgbW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJsZWRPbmx5
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU2V0VHJhY2tFbmFi
bGVkKGN1cnJlbnRUcmFjaywgZmFsc2UpOwotICAgICAgICAgICAgLS1lbmFibGVkVHJhY2tDb3Vu
dDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2sgcmVmZXJl
bmNlIGNvdW50IGZvciBjaGFwdGVycy4gVGhpcyB3aWxsIHRlbGwgdXMgaWYgaXQKLSAgICAgICAg
Ly8gaGFzIGNoYXB0ZXIgdHJhY2tzIGluIGl0LiBJZiB0aGVyZSBhcmVuJ3QgYW55IHJlZmVyZW5j
ZXMsIHRoZW4gd2UKLSAgICAgICAgLy8gY2FuIG1vdmUgb24gdGhlIG5leHQgdHJhY2suCi0gICAg
ICAgIGxvbmcgcmVmZXJlbmNlQ291bnQgPSBHZXRUcmFja1JlZmVyZW5jZUNvdW50KGN1cnJlbnRU
cmFjaywga1RyYWNrUmVmZXJlbmNlQ2hhcHRlckxpc3QpOwotICAgICAgICBpZiAocmVmZXJlbmNl
Q291bnQgPD0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgbG9u
ZyByZWZlcmVuY2VJbmRleCA9IDA7ICAgICAgICAKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAg
ICAgICAgIC8vIElmIHdlIGdldCBub3RoaW5nIGhlcmUsIHdlJ3ZlIG92ZXJzdGVwcGVkIG91ciBi
b3VuZHMgYW5kIGNhbiBzdG9wCi0gICAgICAgICAgICAvLyBsb29raW5nLiBDaGFwdGVyIGluZGlj
ZXMgaGVyZSBhcmUgMS1iYXNlZCBhcyB3ZWxsIC0gaGVuY2UsIHRoZQotICAgICAgICAgICAgLy8g
cHJlLWluY3JlbWVudC4KLSAgICAgICAgICAgIHJlZmVyZW5jZUluZGV4Kys7Ci0gICAgICAgICAg
ICBUcmFjayBjaGFwdGVyVHJhY2sgPSBHZXRUcmFja1JlZmVyZW5jZShjdXJyZW50VHJhY2ssIGtU
cmFja1JlZmVyZW5jZUNoYXB0ZXJMaXN0LCByZWZlcmVuY2VJbmRleCk7Ci0gICAgICAgICAgICBp
ZiAoIWNoYXB0ZXJUcmFjaykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gVHJ5IHRvIGdyYWIgdGhlIG1lZGlhIGZvciB0aGUgdHJhY2suCi0gICAg
ICAgICAgICBNZWRpYSBjaGFwdGVyTWVkaWEgPSBHZXRUcmFja01lZGlhKGNoYXB0ZXJUcmFjayk7
Ci0gICAgICAgICAgICBpZiAoIWNoYXB0ZXJNZWRpYSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBHcmFiIHRoZSBtZWRpYSB0eXBlIGZvciB0aGlz
IHRyYWNrLiBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndAotICAgICAgICAgICAgLy8gZ2V0IGFuIGVy
cm9yIGluIGRvaW5nIHNvLiBJZiB3ZSBkbywgdGhlbiBzb21ldGhpbmcgcmVhbGx5Ci0gICAgICAg
ICAgICAvLyBmdW5reSBpcyB3cm9uZy4KLSAgICAgICAgICAgIE9TVHlwZSBtZWRpYVR5cGU7Ci0g
ICAgICAgICAgICBHZXRNZWRpYUhhbmRsZXJEZXNjcmlwdGlvbihjaGFwdGVyTWVkaWEsICZtZWRp
YVR5cGUsIG5pbCwgbmlsKTsKLSAgICAgICAgICAgIE9TRXJyIG1lZGlhRXJyID0gR2V0TW92aWVz
RXJyb3IoKTsKLSAgICAgICAgICAgIGlmIChtZWRpYUVyciAhPSBub0VycikKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIHRoZSB0cmFjayBpcyBhIHZpZGVvIHRyYWNrLiBXZSBkb24ndCBjYXJlIGFib3V0Ci0gICAg
ICAgICAgICAvLyBvdGhlciBub24tdmlkZW8gdHJhY2tzLgotICAgICAgICAgICAgaWYgKG1lZGlh
VHlwZSAhPSBWaWRlb01lZGlhVHlwZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFjayBpcyBhbHJl
YWR5IGRpc2FibGVkLiBJZiBpdCBpcywgd2UKLSAgICAgICAgICAgIC8vIHNob3VsZCBtb3ZlIGFs
b25nLgotICAgICAgICAgICAgaWYgKCFHZXRUcmFja0VuYWJsZWQoY2hhcHRlclRyYWNrKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRGlz
YWJsZWQgdGhlIGV2aWwsIGV2aWwgdHJhY2suCi0gICAgICAgICAgICBTZXRUcmFja0VuYWJsZWQo
Y2hhcHRlclRyYWNrLCBmYWxzZSk7Ci0gICAgICAgICAgICAtLWVuYWJsZWRUcmFja0NvdW50Owot
ICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFFUTW92aWU6OmlzRGlzYWJsZWQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fZGlzYWJsZWQ7Ci19Ci0KLXZvaWQgUVRNb3ZpZTo6
c2V0RGlzYWJsZWQoYm9vbCBiKQotewotICAgIG1fcHJpdmF0ZS0+bV9kaXNhYmxlZCA9IGI7Ci19
Ci0KLQotYm9vbCBRVE1vdmllOjpoYXNWaWRlbygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaXZh
dGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKEdldE1vdmll
SW5kVHJhY2tUeXBlKG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMSwgVmlzdWFsTWVkaWFDaGFyYWN0ZXJp
c3RpYywgbW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJsZWRPbmx5KSk7
Ci19Ci0KLWJvb2wgUVRNb3ZpZTo6aGFzQXVkaW8oKSBjb25zdAotewotICAgIGlmICghbV9wcml2
YXRlLT5tX21vdmllKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIChHZXRNb3Zp
ZUluZFRyYWNrVHlwZShtX3ByaXZhdGUtPm1fbW92aWUsIDEsIEF1ZGlvTWVkaWFDaGFyYWN0ZXJp
c3RpYywgbW92aWVUcmFja0NoYXJhY3RlcmlzdGljIHwgbW92aWVUcmFja0VuYWJsZWRPbmx5KSk7
Ci19Ci0KLVFUVHJhY2tBcnJheSBRVE1vdmllOjp2aWRlb1RyYWNrcygpIGNvbnN0Ci17Ci0gICAg
UVRUcmFja0FycmF5IHRyYWNrczsKLSAgICBsb25nIHRyYWNrSW5kZXggPSAxOwotCi0gICAgd2hp
bGUgKFRyYWNrIHRoZVRyYWNrID0gR2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2YXRlLT5tX21v
dmllLCB0cmFja0luZGV4KyssIFZpc3VhbE1lZGlhQ2hhcmFjdGVyaXN0aWMsIG1vdmllVHJhY2tD
aGFyYWN0ZXJpc3RpYyB8IG1vdmllVHJhY2tFbmFibGVkT25seSkpCi0gICAgICAgIHRyYWNrcy5h
cHBlbmQoUVRUcmFjazo6Y3JlYXRlKHRoZVRyYWNrKSk7Ci0KLSAgICByZXR1cm4gdHJhY2tzOwot
fQotCi1ib29sIFFUTW92aWU6Omhhc0Nsb3NlZENhcHRpb25zKCkgY29uc3QgCi17Ci0gICAgaWYg
KCFtX3ByaXZhdGUtPm1fbW92aWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
R2V0TW92aWVJbmRUcmFja1R5cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCBjbG9zZWRDYXB0aW9u
VHJhY2tUeXBlLCBtb3ZpZVRyYWNrTWVkaWFUeXBlKTsKLX0KLQotdm9pZCBRVE1vdmllOjpzZXRD
bG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCB2aXNpYmxlKQotewotICAgIGlmICghbV9wcml2YXRl
LT5tX21vdmllKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUcmFjayBjY1RyYWNrID0gR2V0TW92
aWVJbmRUcmFja1R5cGUobV9wcml2YXRlLT5tX21vdmllLCAxLCBjbG9zZWRDYXB0aW9uVHJhY2tU
eXBlLCBtb3ZpZVRyYWNrTWVkaWFUeXBlKTsKLSAgICBpZiAoIWNjVHJhY2spCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEJvb2xlYW4gZG9EaXNwbGF5ID0gdmlzaWJsZTsKLSAgICBRVFNldFRyYWNr
UHJvcGVydHkoY2NUcmFjaywgY2xvc2VkQ2FwdGlvblRyYWNrVHlwZSwgY2xvc2VkQ2FwdGlvbkRp
c3BsYXlQcm9wZXJ0eUlELCBzaXplb2YoZG9EaXNwbGF5KSwgJmRvRGlzcGxheSk7Ci19Ci0KLWxv
bmcgUVRNb3ZpZTo6dGltZVNjYWxlKCkgY29uc3QgCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1f
bW92aWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIEdldE1vdmllVGltZVNjYWxl
KG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldE1JTUVUeXBlQ2FsbEJh
Y2soY29uc3QgY2hhciogdHlwZSk7Ci0KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRU
eXBlcygpIAotewotICAgIGlmIChnU3VwcG9ydGVkVHlwZXMpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGdTdXBwb3J0ZWRUeXBlcyA9IENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDAsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOwotICAgIGlmIChxdWlja1RpbWVWZXJz
aW9uIDwgbWluaW11bVF1aWNrVGltZVZlcnNpb24pIHsKLSAgICAgICAgTE9HX0VSUk9SKCJRdWlj
a1RpbWUgdmVyc2lvbiAleCBkZXRlY3RlZCwgYXQgbGVhc3QgJXggcmVxdWlyZWQuIFJldHVybmlu
ZyBlbXB0eSBsaXN0IG9mIHN1cHBvcnRlZCBtZWRpYSBNSU1FIHR5cGVzLiIsIHF1aWNrVGltZVZl
cnNpb24sIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIFF1aWNrVGltZSBkb2Vzbid0IGhhdmUgYW4gaW1wb3J0ZXIgZm9yIHZpZGVvL3F1
aWNrdGltZS4gQWRkIGl0IG1hbnVhbGx5LgotICAgIENGQXJyYXlBcHBlbmRWYWx1ZShnU3VwcG9y
dGVkVHlwZXMsIENGU1RSKCJ2aWRlby9xdWlja3RpbWUiKSk7Ci0gICAgCi0gICAgd2tHZXRRdWlj
a1RpbWVNSU1FVHlwZUxpc3QoZ2V0TUlNRVR5cGVDYWxsQmFjayk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGdldE1JTUVUeXBlQ2FsbEJhY2soY29uc3QgY2hhciogdHlwZSkKLXsKLSAgICBBU1NFUlQodHlw
ZSk7Ci0gICAgQ0ZTdHJpbmdSZWYgY2ZUeXBlID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCB0eXBlLCBrQ0ZTdHJpbmdFbmNvZGluZ01hY1JvbWFuKTsKLSAg
ICBpZiAoIWNmVHlwZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRmlsdGVyIG91dCBhbGwg
bm9uLWF1ZGlvIG9yIC12aWRlbyBNSU1FIFR5cGVzLCBhbmQgb25seSBhZGQgZWFjaCB0eXBlIG9u
Y2U6Ci0gICAgaWYgKENGU3RyaW5nSGFzUHJlZml4KGNmVHlwZSwgQ0ZTVFIoImF1ZGlvLyIpKSB8
fCBDRlN0cmluZ0hhc1ByZWZpeChjZlR5cGUsIENGU1RSKCJ2aWRlby8iKSkpIHsKLSAgICAgICAg
Q0ZSYW5nZSByYW5nZSA9IENGUmFuZ2VNYWtlKDAsIENGQXJyYXlHZXRDb3VudChnU3VwcG9ydGVk
VHlwZXMpKTsKLSAgICAgICAgaWYgKCFDRkFycmF5Q29udGFpbnNWYWx1ZShnU3VwcG9ydGVkVHlw
ZXMsIHJhbmdlLCBjZlR5cGUpKQotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGdTdXBw
b3J0ZWRUeXBlcywgY2ZUeXBlKTsKLSAgICB9Ci0KLSAgICBDRlJlbGVhc2UoY2ZUeXBlKTsKLX0K
LQotdW5zaWduZWQgUVRNb3ZpZTo6Y291bnRTdXBwb3J0ZWRUeXBlcygpCi17Ci0gICAgaW5pdGlh
bGl6ZVN1cHBvcnRlZFR5cGVzKCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihD
RkFycmF5R2V0Q291bnQoZ1N1cHBvcnRlZFR5cGVzKSk7Ci19Ci0KLXZvaWQgUVRNb3ZpZTo6Z2V0
U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBpbmRleCwgY29uc3QgVUNoYXIqJiBzdHIsIHVuc2lnbmVk
JiBsZW4pCi17Ci0gICAgaW5pdGlhbGl6ZVN1cHBvcnRlZFR5cGVzKCk7Ci0gICAgQVNTRVJUKGlu
ZGV4IDwgQ0ZBcnJheUdldENvdW50KGdTdXBwb3J0ZWRUeXBlcykpOwotCi0gICAgLy8gQWxsb2Nh
dGUgc3VmZmljaWVudCBidWZmZXIgdG8gaG9sZCBhbnkgTUlNRSB0eXBlCi0gICAgc3RhdGljIFVu
aUNoYXIqIHN0YXRpY0J1ZmZlciA9IDA7Ci0gICAgaWYgKCFzdGF0aWNCdWZmZXIpCi0gICAgICAg
IHN0YXRpY0J1ZmZlciA9IG5ldyBVbmlDaGFyWzMyXTsKLQotICAgIENGU3RyaW5nUmVmIGNmc3Ry
ID0gKENGU3RyaW5nUmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZ1N1cHBvcnRlZFR5cGVzLCBp
bmRleCk7Ci0gICAgbGVuID0gQ0ZTdHJpbmdHZXRMZW5ndGgoY2ZzdHIpOwotICAgIENGUmFuZ2Ug
cmFuZ2UgPSB7IDAsIGxlbiB9OwotICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhjZnN0ciwgcmFu
Z2UsIHN0YXRpY0J1ZmZlcik7Ci0gICAgc3RyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hh
cio+KHN0YXRpY0J1ZmZlcik7Ci0gICAgCi19Ci0KLUNHQWZmaW5lVHJhbnNmb3JtIFFUTW92aWU6
OmdldFRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7
Ci0gICAgTWF0cml4UmVjb3JkIG0gPSB7MH07Ci0gICAgR2V0TW92aWVNYXRyaXgobV9wcml2YXRl
LT5tX21vdmllLCAmbSk7Ci0KLSAgICBBU1NFUlQoIW0ubWF0cml4WzBdWzJdKTsKLSAgICBBU1NF
UlQoIW0ubWF0cml4WzFdWzJdKTsKLSAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBD
R0FmZmluZVRyYW5zZm9ybU1ha2UoCi0gICAgICAgIEZpeDJYKG0ubWF0cml4WzBdWzBdKSwKLSAg
ICAgICAgRml4MlgobS5tYXRyaXhbMF1bMV0pLAotICAgICAgICBGaXgyWChtLm1hdHJpeFsxXVsw
XSksCi0gICAgICAgIEZpeDJYKG0ubWF0cml4WzFdWzFdKSwKLSAgICAgICAgRml4MlgobS5tYXRy
aXhbMl1bMF0pLAotICAgICAgICBGaXgyWChtLm1hdHJpeFsyXVsxXSkpOwotICAgIHJldHVybiB0
cmFuc2Zvcm07Ci19Ci0KLXZvaWQgUVRNb3ZpZTo6c2V0VHJhbnNmb3JtKENHQWZmaW5lVHJhbnNm
b3JtIHQpCi17Ci0gICAgQVNTRVJUKG1fcHJpdmF0ZS0+bV9tb3ZpZSk7Ci0gICAgTWF0cml4UmVj
b3JkIG0gPSB7ewotICAgICAgICB7WDJGaXgodC5hKSwgWDJGaXgodC5iKSwgMH0sCi0gICAgICAg
IHtYMkZpeCh0LmMpLCBYMkZpeCh0LmQpLCAwfSwKLSAgICAgICAge1gyRml4KHQudHgpLCBYMkZp
eCh0LnR5KSwgZnJhY3QxfSwKLSAgICB9fTsKLQotICAgIFNldE1vdmllTWF0cml4KG1fcHJpdmF0
ZS0+bV9tb3ZpZSwgJm0pOwotICAgIG1fcHJpdmF0ZS0+Y2FjaGVNb3ZpZVNjYWxlKCk7Ci19Ci0K
LXZvaWQgUVRNb3ZpZTo6cmVzZXRUcmFuc2Zvcm0oKQotewotICAgIEFTU0VSVChtX3ByaXZhdGUt
Pm1fbW92aWUpOwotICAgIFNldE1vdmllTWF0cml4KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgMCk7Ci0g
ICAgbV9wcml2YXRlLT5jYWNoZU1vdmllU2NhbGUoKTsKLX0KLQotdm9pZCBRVE1vdmllOjpzZXRQ
cml2YXRlQnJvd3NpbmdNb2RlKGJvb2wgcHJpdmF0ZUJyb3dzaW5nKQotewotICAgIG1fcHJpdmF0
ZS0+bV9wcml2YXRlQnJvd3NpbmcgPSBwcml2YXRlQnJvd3Npbmc7Ci0gICAgaWYgKG1fcHJpdmF0
ZS0+bV9tb3ZpZSkgewotICAgICAgICBib29sIGFsbG93Q2FjaGluZyA9ICFtX3ByaXZhdGUtPm1f
cHJpdmF0ZUJyb3dzaW5nOwotICAgICAgICBRVFNldE1vdmllUHJvcGVydHkobV9wcml2YXRlLT5t
X21vdmllLCAnY2FjaCcsICdwZXJzJywgc2l6ZW9mKGFsbG93Q2FjaGluZyksICZhbGxvd0NhY2hp
bmcpOwotICAgIH0KLX0KLQotYm9vbCBRVE1vdmllOjppbml0aWFsaXplUXVpY2tUaW1lKCkgCi17
Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBp
bml0aWFsaXphdGlvblN1Y2NlZWRlZCA9IGZhbHNlOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsK
LSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICAvLyBJbml0aWFsaXplIGFuZCBj
aGVjayBRdWlja1RpbWUgdmVyc2lvbgotICAgICAgICBPU0VyciByZXN1bHQgPSBJbml0aWFsaXpl
UVRNTChrSW5pdGlhbGl6ZVFUTUxFbmFibGVEb3VibGVCdWZmZXJlZFN1cmZhY2UpOwotICAgICAg
ICBpZiAocmVzdWx0ID09IG5vRXJyKQotICAgICAgICAgICAgcmVzdWx0ID0gR2VzdGFsdChnZXN0
YWx0UXVpY2tUaW1lLCAmcXVpY2tUaW1lVmVyc2lvbik7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0g
bm9FcnIpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiTm8gUXVpY2tUaW1lIGF2YWlsYWJsZS4g
RGlzYWJsaW5nIDx2aWRlbz4gYW5kIDxhdWRpbz4gc3VwcG9ydC4iKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocXVpY2tUaW1lVmVyc2lvbiA8IG1p
bmltdW1RdWlja1RpbWVWZXJzaW9uKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIlF1aWNrVGlt
ZSB2ZXJzaW9uICV4IGRldGVjdGVkLCBhdCBsZWFzdCAleCByZXF1aXJlZC4gRGlzYWJsaW5nIDx2
aWRlbz4gYW5kIDxhdWRpbz4gc3VwcG9ydC4iLCBxdWlja1RpbWVWZXJzaW9uLCBtaW5pbXVtUXVp
Y2tUaW1lVmVyc2lvbik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgRW50ZXJNb3ZpZXMoKTsKLSAgICAgICAgaW5pdGlhbGl6YXRpb25TdWNjZWVkZWQgPSB0
cnVlOwotICAgIH0KLSAgICByZXR1cm4gaW5pdGlhbGl6YXRpb25TdWNjZWVkZWQ7Ci19Ci0KLU1v
dmllIFFUTW92aWU6OmdldE1vdmllSGFuZGxlKCkgY29uc3QgCi17Ci0gICAgcmV0dXJuIG1fcHJp
dmF0ZS0+bV9tb3ZpZTsKLX0KLQotQk9PTCBXSU5BUEkgRGxsTWFpbihISU5TVEFOQ0UgaGluc3RE
TEwsIERXT1JEIGZkd1JlYXNvbiwgTFBWT0lEIGxwdlJlc2VydmVkKQotewotICAgIHN3aXRjaCAo
ZmR3UmVhc29uKSB7Ci0gICAgY2FzZSBETExfUFJPQ0VTU19BVFRBQ0g6Ci0gICAgICAgIHJldHVy
biBUUlVFOwotICAgIGNhc2UgRExMX1BST0NFU1NfREVUQUNIOgotICAgIGNhc2UgRExMX1RIUkVB
RF9BVFRBQ0g6Ci0gICAgY2FzZSBETExfVEhSRUFEX0RFVEFDSDoKLSAgICAgICAgcmV0dXJuIEZB
TFNFOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gRkFMU0U7
Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1v
dmllLmgJKHJldmlzaW9uIDE2NTQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9RVE1vdmllLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUVRNb3ZpZV9oCi0jZGVmaW5lIFFUTW92
aWVfaAotCi0jaW5jbHVkZSAiUVRUcmFjay5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
I2lmZGVmIFFUTU9WSUVXSU5fRVhQT1JUUwotI2RlZmluZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xz
cGVjKGRsbGV4cG9ydCkKLSNlbHNlCi0jZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMo
ZGxsaW1wb3J0KQotI2VuZGlmCi0KLWNsYXNzIFFUTW92aWU7Ci1jbGFzcyBRVE1vdmllUHJpdmF0
ZTsKLXR5cGVkZWYgc3RydWN0IE1vdmllVHlwZSoqIE1vdmllOwotdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPFFUVHJhY2s+PiBRVFRyYWNrQXJyYXk7Ci0KLWNsYXNzIFFUTW92aWVDbGllbnQgewotcHVi
bGljOgotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFUTW92aWUqKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIG1vdmllTG9hZFN0YXRlQ2hhbmdlZChRVE1vdmllKikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBtb3ZpZVRpbWVDaGFuZ2VkKFFUTW92aWUqKSA9IDA7Ci19OwotCi1lbnVtIHsKLSAg
ICBRVE1vdmllTG9hZFN0YXRlRXJyb3IgPSAtMUwsCi0gICAgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRl
ZCAgPSAyMDAwTCwKLSAgICBRVE1vdmllTG9hZFN0YXRlUGxheWFibGUgPSAxMDAwMEwsCi0gICAg
UVRNb3ZpZUxvYWRTdGF0ZVBsYXl0aHJvdWdoT0sgPSAyMDAwMEwsCi0gICAgUVRNb3ZpZUxvYWRT
dGF0ZUNvbXBsZXRlID0gMTAwMDAwTAotfTsKLQotdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVS
TCAqIENGVVJMUmVmOwotCi1jbGFzcyBRVE1PVklFV0lOX0FQSSBRVE1vdmllIDogcHVibGljIFJl
ZkNvdW50ZWQ8UVRNb3ZpZT4gewotcHVibGljOgotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVR
dWlja1RpbWUoKTsKLSAgICBzdGF0aWMgdm9pZCB0YXNrVGltZXJGaXJlZCgpOwotCi0gICAgc3Rh
dGljIHZvaWQgZGlzYWJsZUNvbXBvbmVudCh1aW50MzJfdFs1XSk7Ci0KLSAgICBRVE1vdmllKFFU
TW92aWVDbGllbnQqKTsKLSAgICB+UVRNb3ZpZSgpOwotCi0gICAgdm9pZCBhZGRDbGllbnQoUVRN
b3ZpZUNsaWVudCopOwotICAgIHZvaWQgcmVtb3ZlQ2xpZW50KFFUTW92aWVDbGllbnQqKTsKLQot
ICAgIHZvaWQgbG9hZFBhdGgoY29uc3QgVUNoYXIqIHVybCwgaW50IGxlbiwgYm9vbCBwcmVzZXJ2
ZXNQaXRjaCk7Ci0gICAgdm9pZCBsb2FkKGNvbnN0IFVDaGFyKiB1cmwsIGludCBsZW4sIGJvb2wg
cHJlc2VydmVzUGl0Y2gpOwotICAgIHZvaWQgbG9hZChDRlVSTFJlZiwgYm9vbCBwcmVzZXJ2ZXNQ
aXRjaCk7Ci0KLSAgICBsb25nIGxvYWRTdGF0ZSgpIGNvbnN0OwotICAgIGZsb2F0IG1heFRpbWVM
b2FkZWQoKSBjb25zdDsKLQotICAgIHZvaWQgcGxheSgpOwotICAgIHZvaWQgcGF1c2UoKTsKLQot
ICAgIGZsb2F0IHJhdGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFJhdGUoZmxvYXQpOwotCi0gICAg
ZmxvYXQgZHVyYXRpb24oKSBjb25zdDsKLSAgICBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0Q3VycmVudFRpbWUoZmxvYXQpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRWb2x1
bWUoZmxvYXQpOwotICAgIHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCk7Ci0KLSAgICB1bnNp
Z25lZCBkYXRhU2l6ZSgpIGNvbnN0OwotCi0gICAgdm9pZCBnZXROYXR1cmFsU2l6ZShpbnQmIHdp
ZHRoLCBpbnQmIGhlaWdodCk7Ci0KLSAgICB2b2lkIGRpc2FibGVVbnN1cHBvcnRlZFRyYWNrcyh1
bnNpZ25lZCYgZW5hYmxlZFRyYWNrQ291bnQsIHVuc2lnbmVkJiB0b3RhbFRyYWNrQ291bnQpOwot
Ci0gICAgYm9vbCBpc0Rpc2FibGVkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREaXNhYmxlZChib29s
KTsKLQotICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKLSAgICBib29sIGhhc0F1ZGlvKCkgY29u
c3Q7Ci0KLSAgICBRVFRyYWNrQXJyYXkgdmlkZW9UcmFja3MoKSBjb25zdDsKLQotICAgIGJvb2wg
aGFzQ2xvc2VkQ2FwdGlvbnMoKSBjb25zdDsKLSAgICB2b2lkIHNldENsb3NlZENhcHRpb25zVmlz
aWJsZShib29sKTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBjb3VudFN1cHBvcnRlZFR5cGVzKCk7
Ci0gICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZSh1bnNpZ25lZCBpbmRleCwgY29uc3Qg
VUNoYXIqJiBzdHIsIHVuc2lnbmVkJiBsZW4pOwotCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0
VHJhbnNmb3JtKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUcmFuc2Zvcm0oQ0dBZmZpbmVUcmFuc2Zv
cm0pOwotICAgIHZvaWQgcmVzZXRUcmFuc2Zvcm0oKTsKLQotICAgIE1vdmllIGdldE1vdmllSGFu
ZGxlKCkgY29uc3Q7Ci0KLSAgICBsb25nIHRpbWVTY2FsZSgpIGNvbnN0OwotCi0gICAgdm9pZCBz
ZXRQcml2YXRlQnJvd3NpbmdNb2RlKGJvb2wpOwotCi1wcml2YXRlOgotICAgIFFUTW92aWVQcml2
YXRlKiBtX3ByaXZhdGU7Ci0gICAgZnJpZW5kIGNsYXNzIFFUTW92aWVQcml2YXRlOwotfTsKLQot
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3Zp
ZUdXb3JsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1FUTW92aWVHV29ybGQuY3BwCShyZXZpc2lvbiAxNjU0NTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZUdXb3JsZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJRVE1vdmllR1dvcmxkLmgiCi0KLSNpbmNsdWRlICJR
VE1vdmllVGFzay5oIgotI2luY2x1ZGUgPEdYTWF0aC5oPgotI2luY2x1ZGUgPE1vdmllcy5oPgot
I2luY2x1ZGUgPFFUTUwuaD4KLSNpbmNsdWRlIDxRdWlja1RpbWVDb21wb25lbnRzLmg+Ci0jaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKLQotc3RhdGljIGNvbnN0IGxvbmcgbWluaW11bVF1aWNrVGltZVZlcnNp
b24gPSAweDA3MzAwMDAwOyAvLyA3LjMKLQotc3RhdGljIExQQ1dTVFIgZnVsbHNjcmVlblFUTW92
aWVHV29ybGRQb2ludGVyUHJvcCA9IEwiZnVsbHNjcmVlblFUTW92aWVHV29ybGRQb2ludGVyIjsK
LQotLy8gUmVzaXppbmcgR1dvcmxkcyBpcyBzbG93LCBnaXZlIHRoZW0gYSBtaW5pbXVtIHNpemUg
c28gc2l6ZSBvZiBzbWFsbCAKLS8vIHZpZGVvcyBjYW4gYmUgYW5pbWF0ZWQgc21vb3RobHkKLXN0
YXRpYyBjb25zdCBpbnQgY0dXb3JsZE1pbldpZHRoID0gNjQwOwotc3RhdGljIGNvbnN0IGludCBj
R1dvcmxkTWluSGVpZ2h0ID0gMzYwOwotCi1zdGF0aWMgY29uc3QgZmxvYXQgY05vbkNvbnRpbnVv
dXNUaW1lQ2hhbmdlID0gMC4yZjsKLQotdW5pb24gVXBwUGFyYW0gewotICAgIGxvbmcgbG9uZ1Zh
bHVlOwotICAgIHZvaWQqIHB0cjsKLX07Ci0KLXN0YXRpYyBNb3ZpZURyYXdpbmdDb21wbGV0ZVVQ
UCBnTW92aWVEcmF3aW5nQ29tcGxldGVVUFAgPSAwOwotc3RhdGljIEhhc2hTZXQ8UVRNb3ZpZUdX
b3JsZFByaXZhdGUqPiogZ1Rhc2tMaXN0Owotc3RhdGljIFZlY3RvcjxDRlN0cmluZ1JlZj4qIGdT
dXBwb3J0ZWRUeXBlcyA9IDA7Ci1zdGF0aWMgU0ludDMyIHF1aWNrVGltZVZlcnNpb24gPSAwOwot
Ci1jbGFzcyBRVE1vdmllR1dvcmxkUHJpdmF0ZSA6IHB1YmxpYyBRVE1vdmllQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICBRVE1vdmllR1dvcmxkUHJpdmF0ZShRVE1vdmllR1dvcmxkKiBtb3ZpZVdpbik7
Ci0gICAgdmlydHVhbCB+UVRNb3ZpZUdXb3JsZFByaXZhdGUoKTsKLQotICAgIHZvaWQgcmVnaXN0
ZXJEcmF3aW5nQ2FsbGJhY2soKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2so
KTsKLSAgICB2b2lkIGRyYXdpbmdDb21wbGV0ZSgpOwotICAgIHZvaWQgdXBkYXRlR1dvcmxkKCk7
Ci0gICAgdm9pZCBjcmVhdGVHV29ybGQoKTsKLSAgICB2b2lkIGRlbGV0ZUdXb3JsZCgpOwotICAg
IHZvaWQgY2xlYXJHV29ybGQoKTsKLSAgICB2b2lkIHVwZGF0ZU1vdmllU2l6ZSgpOwotCi0gICAg
dm9pZCBzZXRTaXplKGludCwgaW50KTsKLQotICAgIHZpcnR1YWwgdm9pZCBtb3ZpZUVuZGVkKFFU
TW92aWUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgbW92aWVMb2FkU3RhdGVDaGFuZ2VkKFFUTW92aWUq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgbW92aWVUaW1lQ2hhbmdlZChRVE1vdmllKik7Ci0KLSAgICBR
VE1vdmllR1dvcmxkKiBtX21vdmllV2luOwotICAgIFJlZlB0cjxRVE1vdmllPiBtX3F0TW92aWU7
Ci0gICAgTW92aWUgbV9tb3ZpZTsKLSAgICBRVE1vdmllR1dvcmxkQ2xpZW50KiBtX2NsaWVudDsK
LSAgICBsb25nIG1fbG9hZFN0YXRlOwotICAgIGludCBtX3dpZHRoOwotICAgIGludCBtX2hlaWdo
dDsKLSAgICBib29sIG1fdmlzaWJsZTsKLSAgICBHV29ybGRQdHIgbV9nV29ybGQ7Ci0gICAgaW50
IG1fZ1dvcmxkV2lkdGg7Ci0gICAgaW50IG1fZ1dvcmxkSGVpZ2h0OwotICAgIEdXb3JsZFB0ciBt
X3NhdmVkR1dvcmxkOwotICAgIGZsb2F0IG1fd2lkdGhTY2FsZUZhY3RvcjsKLSAgICBmbG9hdCBt
X2hlaWdodFNjYWxlRmFjdG9yOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBib29sIG1fc2Nh
bGVDYWNoZWQ7Ci0jZW5kaWYKLSAgICBXaW5kb3dQdHIgbV9mdWxsc2NyZWVuV2luZG93OwotICAg
IEdXb3JsZFB0ciBtX2Z1bGxzY3JlZW5PcmlnR1dvcmxkOwotICAgIFJlY3QgbV9mdWxsc2NyZWVu
UmVjdDsKLSAgICBRVE1vdmllR1dvcmxkRnVsbHNjcmVlbkNsaWVudCogbV9mdWxsc2NyZWVuQ2xp
ZW50OwotICAgIGNoYXIqIG1fZnVsbHNjcmVlblJlc3RvcmVTdGF0ZTsKLSAgICBib29sIG1fZGlz
YWJsZWQ7Ci19OwotCi1RVE1vdmllR1dvcmxkUHJpdmF0ZTo6UVRNb3ZpZUdXb3JsZFByaXZhdGUo
UVRNb3ZpZUdXb3JsZCogbW92aWVXaW4pCi0gICAgOiBtX21vdmllV2luKG1vdmllV2luKQotICAg
ICwgbV9tb3ZpZSgwKQotICAgICwgbV9jbGllbnQoMCkKLSAgICAsIG1fbG9hZFN0YXRlKDApCi0g
ICAgLCBtX3dpZHRoKDApCi0gICAgLCBtX2hlaWdodCgwKQotICAgICwgbV92aXNpYmxlKGZhbHNl
KQotICAgICwgbV9nV29ybGQoMCkKLSAgICAsIG1fZ1dvcmxkV2lkdGgoMCkKLSAgICAsIG1fZ1dv
cmxkSGVpZ2h0KDApCi0gICAgLCBtX3NhdmVkR1dvcmxkKDApCi0gICAgLCBtX3dpZHRoU2NhbGVG
YWN0b3IoMSkKLSAgICAsIG1faGVpZ2h0U2NhbGVGYWN0b3IoMSkKLSNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgLCBtX3NjYWxlQ2FjaGVkKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX2Z1bGxzY3Jl
ZW5XaW5kb3coMCkKLSAgICAsIG1fZnVsbHNjcmVlbk9yaWdHV29ybGQoMCkKLSAgICAsIG1fZnVs
bHNjcmVlbkNsaWVudCgwKQotICAgICwgbV9mdWxsc2NyZWVuUmVzdG9yZVN0YXRlKDApCi0gICAg
LCBtX2Rpc2FibGVkKGZhbHNlKQotICAgICwgbV9xdE1vdmllKDApCi17Ci0gICAgUmVjdCByZWN0
ID0geyAwLCAwLCAwLCAwIH07Ci0gICAgbV9mdWxsc2NyZWVuUmVjdCA9IHJlY3Q7Ci19Ci0KLVFU
TW92aWVHV29ybGRQcml2YXRlOjp+UVRNb3ZpZUdXb3JsZFByaXZhdGUoKQotewotICAgIEFTU0VS
VCghbV9mdWxsc2NyZWVuV2luZG93KTsKLQotICAgIGlmIChtX2dXb3JsZCkKLSAgICAgICAgZGVs
ZXRlR1dvcmxkKCk7Ci19Ci0KLXBhc2NhbCBPU0VyciBtb3ZpZURyYXdpbmdDb21wbGV0ZVByb2Mo
TW92aWUgbW92aWUsIGxvbmcgZGF0YSkKLXsKLSAgICBVcHBQYXJhbSBwYXJhbTsKLSAgICBwYXJh
bS5sb25nVmFsdWUgPSBkYXRhOwotICAgIFFUTW92aWVHV29ybGRQcml2YXRlKiBtcCA9IHN0YXRp
Y19jYXN0PFFUTW92aWVHV29ybGRQcml2YXRlKj4ocGFyYW0ucHRyKTsKLSAgICBpZiAobXApCi0g
ICAgICAgIG1wLT5kcmF3aW5nQ29tcGxldGUoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBR
VE1vdmllR1dvcmxkUHJpdmF0ZTo6cmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKQotewotICAgIGlm
ICghZ01vdmllRHJhd2luZ0NvbXBsZXRlVVBQKQotICAgICAgICBnTW92aWVEcmF3aW5nQ29tcGxl
dGVVUFAgPSBOZXdNb3ZpZURyYXdpbmdDb21wbGV0ZVVQUChtb3ZpZURyYXdpbmdDb21wbGV0ZVBy
b2MpOwotCi0gICAgVXBwUGFyYW0gcGFyYW07Ci0gICAgcGFyYW0ucHRyID0gdGhpczsKLSAgICBT
ZXRNb3ZpZURyYXdpbmdDb21wbGV0ZVByb2MobV9tb3ZpZSwgbW92aWVEcmF3aW5nQ2FsbFdoZW5D
aGFuZ2VkLCBnTW92aWVEcmF3aW5nQ29tcGxldGVVUFAsIHBhcmFtLmxvbmdWYWx1ZSk7Ci19Ci0K
LXZvaWQgUVRNb3ZpZUdXb3JsZFByaXZhdGU6OnVucmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2soKQot
ewotICAgIFNldE1vdmllRHJhd2luZ0NvbXBsZXRlUHJvYyhtX21vdmllLCBtb3ZpZURyYXdpbmdD
YWxsV2hlbkNoYW5nZWQsIDAsIDApOwotfQotCi12b2lkIFFUTW92aWVHV29ybGRQcml2YXRlOjpk
cmF3aW5nQ29tcGxldGUoKQotewotICAgIGlmICghbV9nV29ybGQgfHwgbV9tb3ZpZVdpbi0+bV9w
cml2YXRlLT5tX2Rpc2FibGVkIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRl
ZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2xpZW50LT5tb3ZpZU5ld0ltYWdlQXZhaWxhYmxl
KG1fbW92aWVXaW4pOwotfQotCi12b2lkIFFUTW92aWVHV29ybGRQcml2YXRlOjp1cGRhdGVHV29y
bGQoKQotewotICAgIGJvb2wgc2hvdWxkQmVWaXNpYmxlID0gbV92aXNpYmxlOwotICAgIGlmICgh
bV9oZWlnaHQgfHwgIW1fd2lkdGgpCi0gICAgICAgIHNob3VsZEJlVmlzaWJsZSA9IGZhbHNlOwot
Ci0gICAgaWYgKHNob3VsZEJlVmlzaWJsZSAmJiAhbV9nV29ybGQpCi0gICAgICAgIGNyZWF0ZUdX
b3JsZCgpOwotICAgIGVsc2UgaWYgKCFzaG91bGRCZVZpc2libGUgJiYgbV9nV29ybGQpCi0gICAg
ICAgIGRlbGV0ZUdXb3JsZCgpOwotICAgIGVsc2UgaWYgKG1fZ1dvcmxkICYmIChtX3dpZHRoID4g
bV9nV29ybGRXaWR0aCB8fCBtX2hlaWdodCA+IG1fZ1dvcmxkSGVpZ2h0KSkgewotICAgICAgICAv
LyBuZWVkIGEgYmlnZ2VyLCBiZXR0ZXIgZ1dvcmxkCi0gICAgICAgIGRlbGV0ZUdXb3JsZCgpOwot
ICAgICAgICBjcmVhdGVHV29ybGQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUVRNb3ZpZUdXb3JsZFBy
aXZhdGU6OmNyZWF0ZUdXb3JsZCgpCi17Ci0gICAgQVNTRVJUKCFtX2dXb3JsZCk7Ci0gICAgaWYg
KCFtX21vdmllIHx8IG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxvYWRlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9nV29ybGRXaWR0aCA9IG1heChjR1dvcmxkTWluV2lkdGgsIG1f
d2lkdGgpOwotICAgIG1fZ1dvcmxkSGVpZ2h0ID0gbWF4KGNHV29ybGRNaW5IZWlnaHQsIG1faGVp
Z2h0KTsKLSAgICBSZWN0IGJvdW5kczsgCi0gICAgYm91bmRzLnRvcCA9IDA7Ci0gICAgYm91bmRz
LmxlZnQgPSAwOyAKLSAgICBib3VuZHMucmlnaHQgPSBtX2dXb3JsZFdpZHRoOwotICAgIGJvdW5k
cy5ib3R0b20gPSBtX2dXb3JsZEhlaWdodDsKLSAgICBPU0VyciBlcnIgPSBRVE5ld0dXb3JsZCgm
bV9nV29ybGQsIGszMkJHUkFQaXhlbEZvcm1hdCwgJmJvdW5kcywgMCwgMCwgMCk7IAotICAgIGlm
IChlcnIpIAotICAgICAgICByZXR1cm47Ci0gICAgR2V0TW92aWVHV29ybGQobV9tb3ZpZSwgJm1f
c2F2ZWRHV29ybGQsIDApOwotICAgIFNldE1vdmllR1dvcmxkKG1fbW92aWUsIG1fZ1dvcmxkLCAw
KTsKLSAgICBib3VuZHMucmlnaHQgPSBtX3dpZHRoOwotICAgIGJvdW5kcy5ib3R0b20gPSBtX2hl
aWdodDsKLSAgICBTZXRNb3ZpZUJveChtX21vdmllLCAmYm91bmRzKTsKLX0KLQotdm9pZCBRVE1v
dmllR1dvcmxkUHJpdmF0ZTo6Y2xlYXJHV29ybGQoKQotewotICAgIGlmICghbV9tb3ZpZSB8fCAh
bV9nV29ybGQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYWZQdHIgc2F2ZVBvcnQ7Ci0gICAg
R2V0UG9ydCgmc2F2ZVBvcnQpOyAKLSAgICBNYWNTZXRQb3J0KChHcmFmUHRyKW1fZ1dvcmxkKTsK
LQotICAgIFJlY3QgYm91bmRzOyAKLSAgICBib3VuZHMudG9wID0gMDsKLSAgICBib3VuZHMubGVm
dCA9IDA7IAotICAgIGJvdW5kcy5yaWdodCA9IG1fZ1dvcmxkV2lkdGg7Ci0gICAgYm91bmRzLmJv
dHRvbSA9IG1fZ1dvcmxkSGVpZ2h0OwotICAgIEVyYXNlUmVjdCgmYm91bmRzKTsKLQotICAgIE1h
Y1NldFBvcnQoc2F2ZVBvcnQpOwotfQotCi12b2lkIFFUTW92aWVHV29ybGRQcml2YXRlOjpzZXRT
aXplKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAobV93aWR0aCA9PSB3aWR0aCAm
JiBtX2hlaWdodCA9PSBoZWlnaHQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dpZHRoID0gd2lk
dGg7Ci0gICAgbV9oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICAvLyBEbyBub3QgY2hhbmdlIG1vdmll
IGJveCBiZWZvcmUgcmVhY2hpbmcgbG9hZCBzdGF0ZSBsb2FkZWQgYXMgd2UgZ3JhYgotICAgIC8v
IHRoZSBpbml0aWFsIHNpemUgd2hlbiB0YXNrKCkgc2VlcyB0aGF0IHN0YXRlIGZvciB0aGUgZmly
c3QgdGltZSwgYW5kCi0gICAgLy8gd2UgbmVlZCB0aGUgaW5pdGlhbCBzaXplIHRvIGJlIGFibGUg
dG8gc2NhbGUgbW92aWUgcHJvcGVybHkuIAotICAgIGlmICghbV9tb3ZpZSB8fCBtX2xvYWRTdGF0
ZSA8IFFUTW92aWVMb2FkU3RhdGVMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLQotI2lmICFBU1NF
UlRfRElTQUJMRUQKLSAgICBBU1NFUlQobV9zY2FsZUNhY2hlZCk7Ci0jZW5kaWYKLQotICAgIHVw
ZGF0ZU1vdmllU2l6ZSgpOwotfQotCi12b2lkIFFUTW92aWVHV29ybGRQcml2YXRlOjp1cGRhdGVN
b3ZpZVNpemUoKQotewotICAgIGlmICghbV9tb3ZpZSB8fCBtX2xvYWRTdGF0ZSA8IFFUTW92aWVM
b2FkU3RhdGVMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlY3QgYm91bmRzOyAKLSAg
ICBib3VuZHMudG9wID0gMDsKLSAgICBib3VuZHMubGVmdCA9IDA7IAotICAgIGJvdW5kcy5yaWdo
dCA9IG1fd2lkdGg7Ci0gICAgYm91bmRzLmJvdHRvbSA9IG1faGVpZ2h0OwotICAgIFNldE1vdmll
Qm94KG1fbW92aWUsICZib3VuZHMpOwotICAgIHVwZGF0ZUdXb3JsZCgpOwotfQotCi0KLXZvaWQg
UVRNb3ZpZUdXb3JsZFByaXZhdGU6OmRlbGV0ZUdXb3JsZCgpCi17Ci0gICAgQVNTRVJUKG1fZ1dv
cmxkKTsKLSAgICBpZiAobV9tb3ZpZSkKLSAgICAgICAgU2V0TW92aWVHV29ybGQobV9tb3ZpZSwg
bV9zYXZlZEdXb3JsZCwgMCk7Ci0gICAgbV9zYXZlZEdXb3JsZCA9IDA7Ci0gICAgRGlzcG9zZUdX
b3JsZChtX2dXb3JsZCk7IAotICAgIG1fZ1dvcmxkID0gMDsKLSAgICBtX2dXb3JsZFdpZHRoID0g
MDsKLSAgICBtX2dXb3JsZEhlaWdodCA9IDA7Ci19Ci0KLXZvaWQgUVRNb3ZpZUdXb3JsZFByaXZh
dGU6Om1vdmllRW5kZWQoUVRNb3ZpZSopCi17Ci0gICAgLy8gRG8gbm90aGluZwotfQotCi12b2lk
IFFUTW92aWVHV29ybGRQcml2YXRlOjptb3ZpZUxvYWRTdGF0ZUNoYW5nZWQoUVRNb3ZpZSogbW92
aWUpCi17Ci0gICAgbG9uZyBsb2FkU3RhdGUgPSBHZXRNb3ZpZUxvYWRTdGF0ZShtb3ZpZS0+Z2V0
TW92aWVIYW5kbGUoKSk7Ci0gICAgaWYgKGxvYWRTdGF0ZSAhPSBtX2xvYWRTdGF0ZSkgewotCi0g
ICAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byBlcmFzZSB0aGUgbW92aWUgZ3dvcmxkIHdoZW4gdGhl
IGxvYWQgc3RhdGUgY2hhbmdlcyB0byBsb2FkZWQgd2hpbGUgaXQKLSAgICAgICAgLy8gIGlzIHZp
c2libGUgYXMgdGhlIGd3b3JsZCBpcyBkZXN0cm95ZWQvY3JlYXRlZCB3aGVuIHZpc2liaWxpdHkg
Y2hhbmdlcwotICAgICAgICBib29sIG1vdmllTmV3bHlQbGF5YWJsZSA9IGxvYWRTdGF0ZSA+PSBR
VE1vdmllTG9hZFN0YXRlTG9hZGVkICYmIG1fbG9hZFN0YXRlIDwgUVRNb3ZpZUxvYWRTdGF0ZUxv
YWRlZDsKLSAgICAgICAgbV9sb2FkU3RhdGUgPSBsb2FkU3RhdGU7Ci0KLSAgICAgICAgaWYgKG1v
dmllTmV3bHlQbGF5YWJsZSkgewotICAgICAgICAgICAgdXBkYXRlTW92aWVTaXplKCk7Ci0gICAg
ICAgICAgICBpZiAobV92aXNpYmxlKQotICAgICAgICAgICAgICAgIGNsZWFyR1dvcmxkKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUVRNb3ZpZUdXb3JsZFByaXZhdGU6Om1vdmllVGlt
ZUNoYW5nZWQoUVRNb3ZpZSopCi17Ci0gICAgLy8gRG8gbm90aGluZwotfQotCi1RVE1vdmllR1dv
cmxkOjpRVE1vdmllR1dvcmxkKFFUTW92aWVHV29ybGRDbGllbnQqIGNsaWVudCkKLSAgICA6IG1f
cHJpdmF0ZShuZXcgUVRNb3ZpZUdXb3JsZFByaXZhdGUodGhpcykpCi17Ci0gICAgbV9wcml2YXRl
LT5tX2NsaWVudCA9IGNsaWVudDsKLX0KLQotUVRNb3ZpZUdXb3JsZDo6flFUTW92aWVHV29ybGQo
KQotewotICAgIGRlbGV0ZSBtX3ByaXZhdGU7Ci19Ci0KLXZvaWQgUVRNb3ZpZUdXb3JsZDo6c2V0
U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgbV9wcml2YXRlLT5zZXRTaXplKHdp
ZHRoLCBoZWlnaHQpOwotICAgIFFUTW92aWVUYXNrOjpzaGFyZWRUYXNrKCktPnVwZGF0ZVRhc2tU
aW1lcigpOwotfQotCi12b2lkIFFUTW92aWVHV29ybGQ6OnNldFZpc2libGUoYm9vbCBiKQotewot
ICAgIG1fcHJpdmF0ZS0+bV92aXNpYmxlID0gYjsKLSAgICBtX3ByaXZhdGUtPnVwZGF0ZUdXb3Js
ZCgpOwotfQotCi12b2lkIFFUTW92aWVHV29ybGQ6OmdldEN1cnJlbnRGcmFtZUluZm8odm9pZCom
IGJ1ZmZlciwgdW5zaWduZWQmIGJpdHNQZXJQaXhlbCwgdW5zaWduZWQmIHJvd0J5dGVzLCB1bnNp
Z25lZCYgd2lkdGgsIHVuc2lnbmVkJiBoZWlnaHQpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPm1f
Z1dvcmxkKSB7Ci0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgICAgIGJpdHNQZXJQaXhlbCA9IDA7
Ci0gICAgICAgIHJvd0J5dGVzID0gMDsKLSAgICAgICAgd2lkdGggPSAwOwotICAgICAgICBoZWln
aHQgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBpeE1hcEhhbmRsZSBvZmZzY3Jl
ZW5QaXhNYXAgPSBHZXRHV29ybGRQaXhNYXAobV9wcml2YXRlLT5tX2dXb3JsZCk7Ci0gICAgYnVm
ZmVyID0gKCpvZmZzY3JlZW5QaXhNYXApLT5iYXNlQWRkcjsKLSAgICBiaXRzUGVyUGl4ZWwgPSAo
Km9mZnNjcmVlblBpeE1hcCktPnBpeGVsU2l6ZTsKLSAgICByb3dCeXRlcyA9ICgqb2Zmc2NyZWVu
UGl4TWFwKS0+cm93Qnl0ZXMgJiAweDNGRkY7Ci0gICAgd2lkdGggPSBtX3ByaXZhdGUtPm1fd2lk
dGg7Ci0gICAgaGVpZ2h0ID0gbV9wcml2YXRlLT5tX2hlaWdodDsKLX0KLQotdm9pZCBRVE1vdmll
R1dvcmxkOjpwYWludChIREMgaGRjLCBpbnQgeCwgaW50IHkpCi17Ci0gICAgaWYgKCFtX3ByaXZh
dGUtPm1fZ1dvcmxkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIREMgaGRjU3JjID0gc3RhdGlj
X2Nhc3Q8SERDPihHZXRQb3J0SERDKHJlaW50ZXJwcmV0X2Nhc3Q8R3JhZlB0cj4obV9wcml2YXRl
LT5tX2dXb3JsZCkpKTsgCi0gICAgaWYgKCFoZGNTcmMpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEZJWE1FOiBJZiB3ZSBjb3VsZCBkZXRlcm1pbmUgdGhlIG1vdmllIGhhcyBubyBhbHBoYSwg
d2UgY291bGQgdXNlIEJpdEJsdCBmb3IgdGhvc2UgY2FzZXMsIHdoaWNoIG1pZ2h0IGJlIGZhc3Rl
ci4KLSAgICBCTEVOREZVTkNUSU9OIGJsZW5kRnVuY3Rpb247IAotICAgIGJsZW5kRnVuY3Rpb24u
QmxlbmRPcCA9IEFDX1NSQ19PVkVSOwotICAgIGJsZW5kRnVuY3Rpb24uQmxlbmRGbGFncyA9IDA7
Ci0gICAgYmxlbmRGdW5jdGlvbi5Tb3VyY2VDb25zdGFudEFscGhhID0gMjU1OwotICAgIGJsZW5k
RnVuY3Rpb24uQWxwaGFGb3JtYXQgPSBBQ19TUkNfQUxQSEE7Ci0gICAgQWxwaGFCbGVuZChoZGMs
IHgsIHksIG1fcHJpdmF0ZS0+bV93aWR0aCwgbV9wcml2YXRlLT5tX2hlaWdodCwgaGRjU3JjLCAK
LSAgICAgICAgIDAsIDAsIG1fcHJpdmF0ZS0+bV93aWR0aCwgbV9wcml2YXRlLT5tX2hlaWdodCwg
YmxlbmRGdW5jdGlvbik7Ci19Ci0KLXZvaWQgUVRNb3ZpZUdXb3JsZDo6c2V0RGlzYWJsZWQoYm9v
bCBiKQotewotICAgIG1fcHJpdmF0ZS0+bV9kaXNhYmxlZCA9IGI7Ci19Ci0KLWJvb2wgUVRNb3Zp
ZUdXb3JsZDo6aXNEaXNhYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9k
aXNhYmxlZDsKLX0KLQotTFJFU1VMVCBRVE1vdmllR1dvcmxkOjpmdWxsc2NyZWVuV25kUHJvYyhI
V05EIHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewot
ICAgIFFUTW92aWVHV29ybGQqIG1vdmllID0gc3RhdGljX2Nhc3Q8UVRNb3ZpZUdXb3JsZCo+KEdl
dFByb3BXKHduZCwgZnVsbHNjcmVlblFUTW92aWVHV29ybGRQb2ludGVyUHJvcCkpOwotCi0gICAg
aWYgKG1lc3NhZ2UgPT0gV01fREVTVFJPWSkKLSAgICAgICAgUmVtb3ZlUHJvcFcod25kLCBmdWxs
c2NyZWVuUVRNb3ZpZUdXb3JsZFBvaW50ZXJQcm9wKTsKLQotICAgIGlmICghbW92aWUpCi0gICAg
ICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKHduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwot
Ci0gICAgcmV0dXJuIG1vdmllLT5tX3ByaXZhdGUtPm1fZnVsbHNjcmVlbkNsaWVudC0+ZnVsbHNj
cmVlbkNsaWVudFduZFByb2Mod25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci19Ci0KLUhX
TkQgUVRNb3ZpZUdXb3JsZDo6ZW50ZXJGdWxsc2NyZWVuKFFUTW92aWVHV29ybGRGdWxsc2NyZWVu
Q2xpZW50KiBjbGllbnQpCi17Ci0gICAgbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5DbGllbnQgPSBj
bGllbnQ7Ci0gICAgCi0gICAgQmVnaW5GdWxsU2NyZWVuKCZtX3ByaXZhdGUtPm1fZnVsbHNjcmVl
blJlc3RvcmVTdGF0ZSwgMCwgMCwgMCwgJm1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93LCAw
LCBmdWxsU2NyZWVuQWxsb3dFdmVudHMpOyAKLSAgICBRVE1MU2V0V2luZG93V25kUHJvYyhtX3By
aXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdywgZnVsbHNjcmVlblduZFByb2MpOwotICAgIENyZWF0
ZVBvcnRBc3NvY2lhdGlvbihHZXRQb3J0TmF0aXZlV2luZG93KG1fcHJpdmF0ZS0+bV9mdWxsc2Ny
ZWVuV2luZG93KSwgMCwgMCk7Ci0KLSAgICBHZXRNb3ZpZUJveChtX3ByaXZhdGUtPm1fbW92aWUs
ICZtX3ByaXZhdGUtPm1fZnVsbHNjcmVlblJlY3QpOwotICAgIEdldE1vdmllR1dvcmxkKG1fcHJp
dmF0ZS0+bV9tb3ZpZSwgJm1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuT3JpZ0dXb3JsZCwgMCk7Ci0g
ICAgU2V0TW92aWVHV29ybGQobV9wcml2YXRlLT5tX21vdmllLCByZWludGVycHJldF9jYXN0PENH
cmFmUHRyPihtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdyksIEdldEdXb3JsZERldmljZShy
ZWludGVycHJldF9jYXN0PENHcmFmUHRyPihtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdykp
KTsKLQotICAgIC8vIFNldCB0aGUgc2l6ZSBvZiB0aGUgYm94IHRvIHByZXNlcnZlIGFzcGVjdCBy
YXRpbwotICAgIFJlY3QgcmVjdCA9IG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93LT5wb3J0
UmVjdDsKLQotICAgIGZsb2F0IG1vdmllUmF0aW8gPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9wcml2
YXRlLT5tX3dpZHRoKSAvIG1fcHJpdmF0ZS0+bV9oZWlnaHQ7Ci0gICAgaW50IHdpbmRvd1dpZHRo
ID0gIHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7Ci0gICAgaW50IHdpbmRvd0hlaWdodCA9IHJlY3Qu
Ym90dG9tIC0gcmVjdC50b3A7Ci0gICAgZmxvYXQgd2luZG93UmF0aW8gPSBzdGF0aWNfY2FzdDxm
bG9hdD4od2luZG93V2lkdGgpIC8gd2luZG93SGVpZ2h0OwotICAgIGludCBhY3R1YWxXaWR0aCA9
ICh3aW5kb3dSYXRpbyA+IG1vdmllUmF0aW8pID8gKHdpbmRvd0hlaWdodCAqIG1vdmllUmF0aW8p
IDogd2luZG93V2lkdGg7Ci0gICAgaW50IGFjdHVhbEhlaWdodCA9ICh3aW5kb3dSYXRpbyA8IG1v
dmllUmF0aW8pID8gKHdpbmRvd1dpZHRoIC8gbW92aWVSYXRpbykgOiB3aW5kb3dIZWlnaHQ7Ci0g
ICAgaW50IG9mZnNldFggPSAod2luZG93V2lkdGggLSBhY3R1YWxXaWR0aCkgLyAyOwotICAgIGlu
dCBvZmZzZXRZID0gKHdpbmRvd0hlaWdodCAtIGFjdHVhbEhlaWdodCkgLyAyOwotCi0gICAgcmVj
dC5sZWZ0ID0gb2Zmc2V0WDsKLSAgICByZWN0LnJpZ2h0ID0gb2Zmc2V0WCArIGFjdHVhbFdpZHRo
OwotICAgIHJlY3QudG9wID0gb2Zmc2V0WTsKLSAgICByZWN0LmJvdHRvbSA9IG9mZnNldFkgKyBh
Y3R1YWxIZWlnaHQ7Ci0KLSAgICBTZXRNb3ZpZUJveChtX3ByaXZhdGUtPm1fbW92aWUsICZyZWN0
KTsKLSAgICBTaG93SGlkZVRhc2tCYXIodHJ1ZSk7Ci0KLSAgICAvLyBTZXQgdGhlICd0aGlzJyBw
b2ludGVyIG9uIHRoZSBIV05ECi0gICAgSFdORCB3bmQgPSBzdGF0aWNfY2FzdDxIV05EPihHZXRQ
b3J0TmF0aXZlV2luZG93KG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuV2luZG93KSk7Ci0gICAgU2V0
UHJvcFcod25kLCBmdWxsc2NyZWVuUVRNb3ZpZUdXb3JsZFBvaW50ZXJQcm9wLCBzdGF0aWNfY2Fz
dDxIQU5ETEU+KHRoaXMpKTsKLQotICAgIHJldHVybiB3bmQ7Ci19Ci0KLXZvaWQgUVRNb3ZpZUdX
b3JsZDo6ZXhpdEZ1bGxzY3JlZW4oKQotewotICAgIGlmICghbV9wcml2YXRlLT5tX2Z1bGxzY3Jl
ZW5XaW5kb3cpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhXTkQgd25kID0gc3RhdGljX2Nhc3Q8
SFdORD4oR2V0UG9ydE5hdGl2ZVdpbmRvdyhtX3ByaXZhdGUtPm1fZnVsbHNjcmVlbldpbmRvdykp
OwotICAgIERlc3Ryb3lQb3J0QXNzb2NpYXRpb24ocmVpbnRlcnByZXRfY2FzdDxDR3JhZlB0cj4o
bV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cpKTsKLSAgICBTZXRNb3ZpZUdXb3JsZChtX3By
aXZhdGUtPm1fbW92aWUsIG1fcHJpdmF0ZS0+bV9mdWxsc2NyZWVuT3JpZ0dXb3JsZCwgMCk7Ci0g
ICAgRW5kRnVsbFNjcmVlbihtX3ByaXZhdGUtPm1fZnVsbHNjcmVlblJlc3RvcmVTdGF0ZSwgMEwp
OwotICAgIFNldE1vdmllQm94KG1fcHJpdmF0ZS0+bV9tb3ZpZSwgJm1fcHJpdmF0ZS0+bV9mdWxs
c2NyZWVuUmVjdCk7Ci0gICAgbV9wcml2YXRlLT5tX2Z1bGxzY3JlZW5XaW5kb3cgPSAwOwotfQot
Ci12b2lkIFFUTW92aWVHV29ybGQ6OnNldE1vdmllKFBhc3NSZWZQdHI8UVRNb3ZpZT4gbW92aWUp
Ci17Ci0gICAgaWYgKG1fcHJpdmF0ZS0+bV9xdE1vdmllKSB7Ci0gICAgICAgIG1fcHJpdmF0ZS0+
dW5yZWdpc3RlckRyYXdpbmdDYWxsYmFjaygpOwotICAgICAgICBtX3ByaXZhdGUtPm1fcXRNb3Zp
ZS0+cmVtb3ZlQ2xpZW50KG1fcHJpdmF0ZSk7Ci0gICAgICAgIG1fcHJpdmF0ZS0+bV9xdE1vdmll
ID0gMDsKLSAgICAgICAgbV9wcml2YXRlLT5tX21vdmllID0gMDsKLSAgICB9Ci0KLSAgICBtX3By
aXZhdGUtPm1fcXRNb3ZpZSA9IG1vdmllOwotCi0gICAgaWYgKG1fcHJpdmF0ZS0+bV9xdE1vdmll
KSB7Ci0gICAgICAgIG1fcHJpdmF0ZS0+bV9xdE1vdmllLT5hZGRDbGllbnQobV9wcml2YXRlKTsK
LSAgICAgICAgbV9wcml2YXRlLT5tX21vdmllID0gbV9wcml2YXRlLT5tX3F0TW92aWUtPmdldE1v
dmllSGFuZGxlKCk7Ci0gICAgICAgIG1fcHJpdmF0ZS0+cmVnaXN0ZXJEcmF3aW5nQ2FsbGJhY2so
KTsKLSAgICB9Ci19Ci0KLVFUTW92aWUqIFFUTW92aWVHV29ybGQ6Om1vdmllKCkgY29uc3QgCi17
Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9xdE1vdmllLmdldCgpOwotfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVHV29ybGQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZUdXb3JsZC5o
CShyZXZpc2lvbiAxNjU0NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUVRNb3ZpZUdXb3JsZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUVRNb3ZpZUdXb3JsZF9oCi0jZGVmaW5l
IFFUTW92aWVHV29ybGRfaAotCi0KLSNpbmNsdWRlICJRVE1vdmllLmgiCi0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d2luZG93
cy5oPgotCi0jaWZkZWYgUVRNT1ZJRVdJTl9FWFBPUlRTCi0jZGVmaW5lIFFUTU9WSUVXSU5fQVBJ
IF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotI2Vsc2UKLSNkZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19k
ZWNsc3BlYyhkbGxpbXBvcnQpCi0jZW5kaWYKLQotY2xhc3MgUVRNb3ZpZUdXb3JsZDsKLWNsYXNz
IFFUTW92aWVHV29ybGRQcml2YXRlOwotCi1jbGFzcyBRVE1vdmllR1dvcmxkQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbW92aWVOZXdJbWFnZUF2YWlsYWJsZShRVE1vdmllR1dv
cmxkKikgPSAwOwotfTsKLQotY2xhc3MgUVRNb3ZpZUdXb3JsZEZ1bGxzY3JlZW5DbGllbnQgewot
cHVibGljOgotICAgIHZpcnR1YWwgTFJFU1VMVCBmdWxsc2NyZWVuQ2xpZW50V25kUHJvYyhIV05E
LCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKSA9IDA7Ci19OwotCi1jbGFzcyBRVE1PVklF
V0lOX0FQSSBRVE1vdmllR1dvcmxkIDogcHVibGljIFJlZkNvdW50ZWQ8UVRNb3ZpZUdXb3JsZD4g
ewotcHVibGljOgotICAgIFFUTW92aWVHV29ybGQoUVRNb3ZpZUdXb3JsZENsaWVudCopOwotICAg
IH5RVE1vdmllR1dvcmxkKCk7Ci0KLSAgICB2b2lkIGdldE5hdHVyYWxTaXplKGludCYgd2lkdGgs
IGludCYgaGVpZ2h0KTsKLSAgICB2b2lkIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
LQotICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKLSAgICB2b2lkIHBhaW50KEhEQywgaW50IHgs
IGludCB5KTsKLSAgICB2b2lkIGdldEN1cnJlbnRGcmFtZUluZm8odm9pZComIGJ1ZmZlciwgdW5z
aWduZWQmIGJpdHNQZXJQaXhlbCwgdW5zaWduZWQmIHJvd0J5dGVzLCB1bnNpZ25lZCYgd2lkdGgs
IHVuc2lnbmVkJiBoZWlnaHQpOwotCi0gICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKLSAgICBi
b29sIGlzRGlzYWJsZWQoKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMgdGhlIGZ1bGwtc2NyZWVu
IHdpbmRvdyBjcmVhdGVkCi0gICAgSFdORCBlbnRlckZ1bGxzY3JlZW4oUVRNb3ZpZUdXb3JsZEZ1
bGxzY3JlZW5DbGllbnQqKTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuKCk7Ci0KLSAgICB2b2lk
IHNldE1vdmllKFBhc3NSZWZQdHI8UVRNb3ZpZT4pOwotICAgIFFUTW92aWUqIG1vdmllKCkgY29u
c3Q7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIExSRVNVTFQgZnVsbHNjcmVlblduZFByb2MoSFdO
RCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7Ci0KLSAgICBRVE1vdmllR1dvcmxkUHJp
dmF0ZSogbV9wcml2YXRlOwotICAgIGZyaWVuZCBjbGFzcyBRVE1vdmllR1dvcmxkUHJpdmF0ZTsK
LX07Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1FUTW92aWVUYXNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vUVRNb3ZpZVRhc2suY3BwCShyZXZpc2lvbiAxNjU0NTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVRhc2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKLQotLy8gUHV0IE1vdmll
cy5oIGZpcnN0IHNvIGJ1aWxkIGZhaWx1cmVzIGhlcmUgcG9pbnQgY2xlYXJseSB0byBRdWlja1Rp
bWUKLSNpbmNsdWRlIDxNb3ZpZXMuaD4KLQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotUVRN
b3ZpZVRhc2s6OlFUTW92aWVUYXNrKCkgCi0gICAgOiBtX3NldFRhc2tUaW1lckRlbGF5KDApCi0g
ICAgLCBtX3N0b3BUYXNrVGltZXIoMCkKLXsKLX0KLQotUVRNb3ZpZVRhc2s6On5RVE1vdmllVGFz
aygpCi17Ci19Ci0KLVFUTW92aWVUYXNrKiBRVE1vdmllVGFzazo6c2hhcmVkVGFzaygpCi17Ci0g
ICAgc3RhdGljIFFUTW92aWVUYXNrKiBzX3NoYXJlZFRhc2sgPSBuZXcgUVRNb3ZpZVRhc2s7Ci0g
ICAgcmV0dXJuIHNfc2hhcmVkVGFzazsKLX0KLQotdm9pZCBRVE1vdmllVGFzazo6dXBkYXRlVGFz
a1RpbWVyKGRvdWJsZSBtYXhJbnRlcnZhbCwgZG91YmxlIG1pbkludGVydmFsKQotewotICAgIEFT
U0VSVChtX3NldFRhc2tUaW1lckRlbGF5KTsKLSAgICBpZiAoIW1fc2V0VGFza1RpbWVyRGVsYXkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3N0b3BUYXNrVGltZXIpOwotICAgIGlm
ICghbV90YXNrTGlzdC5zaXplKCkgJiYgbV9zdG9wVGFza1RpbWVyKSB7Ci0gICAgICAgIG1fc3Rv
cFRhc2tUaW1lcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGxvbmcgaW50
ZXJ2YWxJbk1TOwotICAgIE9TU3RhdHVzIHN0YXR1cyA9IFFUR2V0VGltZVVudGlsTmV4dFRhc2so
JmludGVydmFsSW5NUywgMTAwMCk7Ci0gICAgZG91YmxlIGludGVydmFsID0gaW50ZXJ2YWxJbk1T
IC8gMTAwMC4wOwotICAgIGlmIChpbnRlcnZhbCA8IG1pbkludGVydmFsKQotICAgICAgICBpbnRl
cnZhbCA9IG1pbkludGVydmFsOwotICAgIGlmIChpbnRlcnZhbCA+IG1heEludGVydmFsKQotICAg
ICAgICBpbnRlcnZhbCA9IG1heEludGVydmFsOwotICAgIG1fc2V0VGFza1RpbWVyRGVsYXkoaW50
ZXJ2YWwpOwotfQotCi12b2lkIFFUTW92aWVUYXNrOjpmaXJlVGFza0NsaWVudHMoKQotewotICAg
IFZlY3RvcjxRVE1vdmllVGFza0NsaWVudCo+IGNsaWVudHM7Ci0gICAgY29weVRvVmVjdG9yKG1f
dGFza0xpc3QsIGNsaWVudHMpOwotICAgIGZvciAoVmVjdG9yPFFUTW92aWVUYXNrQ2xpZW50Kj46
Oml0ZXJhdG9yIGkgPSBjbGllbnRzLmJlZ2luKCk7IGkgIT0gY2xpZW50cy5lbmQoKTsgKytpKQot
ICAgICAgICAoKmkpLT50YXNrKCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVRhc2s6OmFkZFRhc2tDbGll
bnQoUVRNb3ZpZVRhc2tDbGllbnQqIGNsaWVudCkgCi17Ci0gICAgQVNTRVJUKGNsaWVudCk7Ci0g
ICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdGFza0xpc3QuYWRkKGNs
aWVudCk7Ci19Ci0KLXZvaWQgUVRNb3ZpZVRhc2s6OnJlbW92ZVRhc2tDbGllbnQoUVRNb3ZpZVRh
c2tDbGllbnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQoY2xpZW50KTsKLSAgICBpZiAoIWNsaWVu
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90YXNrTGlzdC5yZW1vdmUoY2xpZW50KTsKLX0K
LQotdm9pZCBRVE1vdmllVGFzazo6c2V0VGFza1RpbWVyRnVuY3MoU2V0VGFza1RpbWVyRGVsYXlG
dW5jIHNldFRhc2tUaW1lckRlbGF5LCBTdG9wVGFza1RpbWVyRnVuYyBzdG9wVGFza1RpbWVyKQot
ewotICAgIG1fc2V0VGFza1RpbWVyRGVsYXkgPSBzZXRUYXNrVGltZXJEZWxheTsKLSAgICBtX3N0
b3BUYXNrVGltZXIgPSBzdG9wVGFza1RpbWVyOwotfQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVRhc2suaAkocmV2aXNpb24gMTY1
NDUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVUYXNr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBRVE1vdmllVGFza19oCi0jZGVmaW5lIFFUTW92aWVUYXNrX2gKLQot
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KLSNpZmRlZiBRVE1PVklFV0lOX0VYUE9SVFMKLSNk
ZWZpbmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jZWxzZQotI2RlZmlu
ZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSNlbmRpZgotCi1jbGFzcyBR
VE1vdmllVGFza0NsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHRhc2soKSA9IDA7
Ci19OwotCi10eXBlZGVmIHZvaWQgKCpTZXRUYXNrVGltZXJEZWxheUZ1bmMpKGRvdWJsZSk7Ci10
eXBlZGVmIHZvaWQgKCpTdG9wVGFza1RpbWVyRnVuYykoKTsKLQotY2xhc3MgUVRNT1ZJRVdJTl9B
UEkgUVRNb3ZpZVRhc2sgewotcHVibGljOgotICAgIHN0YXRpYyBRVE1vdmllVGFzayogc2hhcmVk
VGFzaygpOwotCi0gICAgdm9pZCBhZGRUYXNrQ2xpZW50KFFUTW92aWVUYXNrQ2xpZW50KiBjbGll
bnQpOwotICAgIHZvaWQgcmVtb3ZlVGFza0NsaWVudChRVE1vdmllVGFza0NsaWVudCopOwotICAg
IHZvaWQgZmlyZVRhc2tDbGllbnRzKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVRhc2tUaW1lcihkb3Vi
bGUgbWF4SW50ZXJ2YWwgPSAxLjAsIGRvdWJsZSBtaW5JbnRlcnZhbCA9IDEuMCAvIDMwKTsKLSAg
ICB2b2lkIHNldFRhc2tUaW1lckZ1bmNzKFNldFRhc2tUaW1lckRlbGF5RnVuYyBzZXRUYXNrVGlt
ZXJEZWxheSwgU3RvcFRhc2tUaW1lckZ1bmMgc3RvcFRhc2tUaW1lcik7Ci0KLXByb3RlY3RlZDoK
LSAgICBRVE1vdmllVGFzaygpOwotICAgIH5RVE1vdmllVGFzaygpOwotCi0gICAgU2V0VGFza1Rp
bWVyRGVsYXlGdW5jIG1fc2V0VGFza1RpbWVyRGVsYXk7Ci0gICAgU3RvcFRhc2tUaW1lckZ1bmMg
bV9zdG9wVGFza1RpbWVyOwotICAgIEhhc2hTZXQ8UVRNb3ZpZVRhc2tDbGllbnQqPiBtX3Rhc2tM
aXN0OwotCi1wcml2YXRlOgotICAgIFFUTW92aWVUYXNrKGNvbnN0IFFUTW92aWVUYXNrJik7Ci0g
ICAgUVRNb3ZpZVRhc2smIG9wZXJhdG9yPShjb25zdCBRVE1vdmllVGFzayYpOwotfTsKLQotI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVZp
c3VhbENvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDE2NTQ1MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllVmlzdWFsQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJRVE1vdmllVmlzdWFs
Q29udGV4dC5oIgotCi0jaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIKLSNpbmNsdWRlIDxDVkJhc2Uu
aD4KLSNpbmNsdWRlIDxDVkhvc3RUaW1lLmg+Ci0jaW5jbHVkZSA8SW1hZ2VDb21wcmVzc2lvbi5o
PgotI2luY2x1ZGUgPE1vdmllcy5oPgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgotCi1zdHJ1Y3QgUVRDVlRpbWVTdGFtcCB7Ci0gICAgQ1ZUaW1lU3Rh
bXAgdDsKLX07Ci0KLWNsYXNzIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdiB7Ci1wdWJsaWM6Ci0g
ICAgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2KFFUTW92aWVWaXN1YWxDb250ZXh0KiBwYXJlbnQs
IFFUTW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiBjbGllbnQsIFFUUGl4ZWxCdWZmZXI6OlR5cGUg
Y29udGV4dFR5cGUpOwotICAgIH5RVE1vdmllVmlzdWFsQ29udGV4dFByaXYoKTsKLQotICAgIGJv
b2wgaXNJbWFnZUF2YWlsYWJsZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCopIGNvbnN0Owot
ICAgIFFUUGl4ZWxCdWZmZXIgaW1hZ2VGb3JUaW1lKGNvbnN0IFFUQ1ZUaW1lU3RhbXAqKTsKLSAg
ICB2b2lkIHRhc2soKTsKLQotICAgIFFUVmlzdWFsQ29udGV4dFJlZiB2aXN1YWxDb250ZXh0UmVm
KCk7Ci0KLSAgICB2b2lkIHNldE1vdmllKFBhc3NSZWZQdHI8UVRNb3ZpZT4pOwotICAgIFFUTW92
aWUqIG1vdmllKCkgY29uc3Q7Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgaW1hZ2VBdmFpbGFibGVD
YWxsYmFjayhRVFZpc3VhbENvbnRleHRSZWYgdmlzdWFsQ29udGV4dCwgY29uc3QgQ1ZUaW1lU3Rh
bXAgKnRpbWVTdGFtcCwgdm9pZCAqcmVmQ29uKTsKLQotcHJpdmF0ZToKLSAgICBRVE1vdmllVmlz
dWFsQ29udGV4dCogbV9wYXJlbnQ7Ci0gICAgUVRNb3ZpZVZpc3VhbENvbnRleHRDbGllbnQqIG1f
Y2xpZW50OwotICAgIFFUVmlzdWFsQ29udGV4dFJlZiBtX3Zpc3VhbENvbnRleHQ7Ci0gICAgUmVm
UHRyPFFUTW92aWU+IG1fbW92aWU7Ci0KLX07Ci0KLXN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgY3Jl
YXRlUGl4ZWxCdWZmZXJPcHRpb25zRGljdGlvbmFyeShRVFBpeGVsQnVmZmVyOjpUeXBlIGNvbnRl
eHRUeXBlKQotewotICAgIGNvbnN0IHZvaWQqIGtleSA9IGtRVFZpc3VhbENvbnRleHRQaXhlbEJ1
ZmZlckF0dHJpYnV0ZXNLZXk7Ci0gICAgY29uc3Qgdm9pZCogdmFsdWUgPSBRVFBpeGVsQnVmZmVy
OjpjcmVhdGVQaXhlbEJ1ZmZlckF0dHJpYnV0ZXNEaWN0aW9uYXJ5KGNvbnRleHRUeXBlKTsKLSAg
ICBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJPcHRpb25zID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7Ci0gICAgQ0ZS
ZWxlYXNlKHZhbHVlKTsKLSAgICByZXR1cm4gcGl4ZWxCdWZmZXJPcHRpb25zOwotfQotCi1zdGF0
aWMgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQ3JlYXRpb25PcHRpb25zKFFUUGl4ZWxCdWZm
ZXI6OlR5cGUgY29udGV4dFR5cGUpCi17Ci0gICAgaWYgKGNvbnRleHRUeXBlID09IFFUUGl4ZWxC
dWZmZXI6OkNvbmZpZ3VyZUZvckNBSW1hZ2VRdWV1ZSkgewotICAgICAgICBzdGF0aWMgQ0ZEaWN0
aW9uYXJ5UmVmIGltYWdlUXVldWVPcHRpb25zID0gY3JlYXRlUGl4ZWxCdWZmZXJPcHRpb25zRGlj
dGlvbmFyeShjb250ZXh0VHlwZSk7Ci0gICAgICAgIHJldHVybiBpbWFnZVF1ZXVlT3B0aW9uczsK
LSAgICB9IAotCi0gICAgQVNTRVJUKGNvbnRleHRUeXBlID09IFFUUGl4ZWxCdWZmZXI6OkNvbmZp
Z3VyZUZvckNHSW1hZ2UpOwotICAgIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgY2dJbWFnZU9wdGlv
bnMgPSBjcmVhdGVQaXhlbEJ1ZmZlck9wdGlvbnNEaWN0aW9uYXJ5KGNvbnRleHRUeXBlKTsKLSAg
ICByZXR1cm4gY2dJbWFnZU9wdGlvbnM7Ci19Ci0KLVFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6
UVRNb3ZpZVZpc3VhbENvbnRleHRQcml2KFFUTW92aWVWaXN1YWxDb250ZXh0KiBwYXJlbnQsIFFU
TW92aWVWaXN1YWxDb250ZXh0Q2xpZW50KiBjbGllbnQsIFFUUGl4ZWxCdWZmZXI6OlR5cGUgY29u
dGV4dFR5cGUpIAotICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKLSAgICAgICAgLCBtX2NsaWVu
dChjbGllbnQpCi0gICAgICAgICwgbV92aXN1YWxDb250ZXh0KDApCi17Ci0gICAgdHlwZWRlZiBP
U1N0YXR1cyAoIF9fY2RlY2wgKnBmblFUUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlKShDRkFsbG9j
YXRvclJlZiwgQ0ZEaWN0aW9uYXJ5UmVmLCBRVFZpc3VhbENvbnRleHRSZWYqKTsKLSAgICBzdGF0
aWMgcGZuUVRQaXhlbEJ1ZmZlckNvbnRleHRDcmVhdGUgcFBpeGVsQnVmZmVyQ29udGV4dENyZWF0
ZSA9IDA7Ci0gICAgaWYgKCFwUGl4ZWxCdWZmZXJDb250ZXh0Q3JlYXRlKSB7Ci0gICAgICAgIEhN
T0RVTEUgcXRtbERMTCA9IDo6TG9hZExpYnJhcnlXKEwiUVRNTENsaWVudC5kbGwiKTsKLSAgICAg
ICAgaWYgKCFxdG1sRExMKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBwUGl4ZWxCdWZm
ZXJDb250ZXh0Q3JlYXRlID0gcmVpbnRlcnByZXRfY2FzdDxwZm5RVFBpeGVsQnVmZmVyQ29udGV4
dENyZWF0ZT4oR2V0UHJvY0FkZHJlc3MocXRtbERMTCwgIlFUUGl4ZWxCdWZmZXJDb250ZXh0Q3Jl
YXRlIikpOwotICAgICAgICBpZiAoIXBQaXhlbEJ1ZmZlckNvbnRleHRDcmVhdGUpIAotICAgICAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE9TU3RhdHVzIHN0YXR1cyA9IHBQaXhlbEJ1ZmZl
ckNvbnRleHRDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcGl4ZWxCdWZmZXJDcmVhdGlvbk9w
dGlvbnMoY29udGV4dFR5cGUpLCAmbV92aXN1YWxDb250ZXh0KTsKLSAgICBpZiAoc3RhdHVzID09
IG5vRXJyICYmIG1fdmlzdWFsQ29udGV4dCkKLSAgICAgICAgUVRWaXN1YWxDb250ZXh0U2V0SW1h
Z2VBdmFpbGFibGVDYWxsYmFjayhtX3Zpc3VhbENvbnRleHQsICZRVE1vdmllVmlzdWFsQ29udGV4
dFByaXY6OmltYWdlQXZhaWxhYmxlQ2FsbGJhY2ssIHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7
Ci19Ci0KLVFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6flFUTW92aWVWaXN1YWxDb250ZXh0UHJp
digpCi17Ci0gICAgaWYgKG1fdmlzdWFsQ29udGV4dCkKLSAgICAgICAgUVRWaXN1YWxDb250ZXh0
U2V0SW1hZ2VBdmFpbGFibGVDYWxsYmFjayhtX3Zpc3VhbENvbnRleHQsIDAsIDApOwotfQotCi1i
b29sIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6aXNJbWFnZUF2YWlsYWJsZUZvclRpbWUoY29u
c3QgUVRDVlRpbWVTdGFtcCogdGltZVN0YW1wKSBjb25zdAotewotICAgIGlmICghbV92aXN1YWxD
b250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gUVRWaXN1YWxDb250
ZXh0SXNOZXdJbWFnZUF2YWlsYWJsZShtX3Zpc3VhbENvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgQ1ZUaW1lU3RhbXAqPih0aW1lU3RhbXApKTsgCi19Ci0KLVFUUGl4ZWxCdWZmZXIgUVRN
b3ZpZVZpc3VhbENvbnRleHRQcml2OjppbWFnZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCog
dGltZVN0YW1wKQotewotICAgIFFUUGl4ZWxCdWZmZXIgcGl4ZWxCdWZmZXI7Ci0gICAgaWYgKG1f
dmlzdWFsQ29udGV4dCkgewotICAgICAgICBDVkltYWdlQnVmZmVyUmVmIG5ld0ltYWdlID0gMDsK
LSAgICAgICAgT1NTdGF0dXMgc3RhdHVzID0gUVRWaXN1YWxDb250ZXh0Q29weUltYWdlRm9yVGlt
ZShtX3Zpc3VhbENvbnRleHQsIGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgQ1ZUaW1lU3RhbXAqPih0aW1lU3RhbXApLCAmbmV3SW1hZ2UpOwotICAgICAgICBpZiAo
c3RhdHVzID09IG5vRXJyKQotICAgICAgICAgICAgcGl4ZWxCdWZmZXIuYWRvcHQobmV3SW1hZ2Up
OwotICAgIH0KLSAgICByZXR1cm4gcGl4ZWxCdWZmZXI7Ci19Ci0KLXZvaWQgUVRNb3ZpZVZpc3Vh
bENvbnRleHRQcml2Ojp0YXNrKCkKLXsKLSAgICBpZiAobV92aXN1YWxDb250ZXh0KQotICAgICAg
ICBRVFZpc3VhbENvbnRleHRUYXNrKG1fdmlzdWFsQ29udGV4dCk7Ci19Ci0KLVFUVmlzdWFsQ29u
dGV4dFJlZiBRVE1vdmllVmlzdWFsQ29udGV4dFByaXY6OnZpc3VhbENvbnRleHRSZWYoKSAKLXsK
LSAgICByZXR1cm4gbV92aXN1YWxDb250ZXh0OwotfQotCi12b2lkIFFUTW92aWVWaXN1YWxDb250
ZXh0UHJpdjo6c2V0TW92aWUoUGFzc1JlZlB0cjxRVE1vdmllPiBtb3ZpZSkKLXsKLSAgICBpZiAo
bW92aWUgPT0gbV9tb3ZpZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fbW92aWUpIHsK
LSAgICAgICAgU2V0TW92aWVWaXN1YWxDb250ZXh0KG1fbW92aWUtPmdldE1vdmllSGFuZGxlKCks
IDApOwotICAgICAgICBtX21vdmllID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobW92aWUpCi0gICAg
ICAgIE9TU3RhdHVzIHN0YXR1cyA9IFNldE1vdmllVmlzdWFsQ29udGV4dChtb3ZpZS0+Z2V0TW92
aWVIYW5kbGUoKSwgbV92aXN1YWxDb250ZXh0KTsKLSAgICAKLSAgICBtX21vdmllID0gbW92aWU7
Ci19Ci0KLVFUTW92aWUqIFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdjo6bW92aWUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX21vdmllLmdldCgpOwotfQotCi12b2lkIFFUTW92aWVWaXN1YWxDb250
ZXh0UHJpdjo6aW1hZ2VBdmFpbGFibGVDYWxsYmFjayhRVFZpc3VhbENvbnRleHRSZWYgdmlzdWFs
Q29udGV4dCwgY29uc3QgQ1ZUaW1lU3RhbXAgKnRpbWVTdGFtcCwgdm9pZCAqcmVmQ29uKSAKLXsK
LSAgICBpZiAoIXJlZkNvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUVRNb3ZpZVZpc3VhbENv
bnRleHRQcml2KiB2YyA9IHN0YXRpY19jYXN0PFFUTW92aWVWaXN1YWxDb250ZXh0UHJpdio+KHJl
ZkNvbik7Ci0gICAgaWYgKCF2Yy0+bV9jbGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZj
LT5tX2NsaWVudC0+aW1hZ2VBdmFpbGFibGVGb3JUaW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
UVRDVlRpbWVTdGFtcCo+KHRpbWVTdGFtcCkpOwotfQotCi1QYXNzUmVmUHRyPFFUTW92aWVWaXN1
YWxDb250ZXh0PiBRVE1vdmllVmlzdWFsQ29udGV4dDo6Y3JlYXRlKFFUTW92aWVWaXN1YWxDb250
ZXh0Q2xpZW50KiBjbGllbnQsIFFUUGl4ZWxCdWZmZXI6OlR5cGUgY29udGV4dFR5cGUpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBRVE1vdmllVmlzdWFsQ29udGV4dChjbGllbnQsIGNvbnRl
eHRUeXBlKSk7Ci19Ci0KLVFUTW92aWVWaXN1YWxDb250ZXh0OjpRVE1vdmllVmlzdWFsQ29udGV4
dChRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCogY2xpZW50LCBRVFBpeGVsQnVmZmVyOjpUeXBl
IGNvbnRleHRUeXBlKSAKLSAgICA6IG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgUVRNb3ZpZVZpc3Vh
bENvbnRleHRQcml2KHRoaXMsIGNsaWVudCwgY29udGV4dFR5cGUpKSkKLXsKLX0KLQotUVRNb3Zp
ZVZpc3VhbENvbnRleHQ6On5RVE1vdmllVmlzdWFsQ29udGV4dCgpCi17Ci19Ci0KLWJvb2wgUVRN
b3ZpZVZpc3VhbENvbnRleHQ6OmlzSW1hZ2VBdmFpbGFibGVGb3JUaW1lKGNvbnN0IFFUQ1ZUaW1l
U3RhbXAqIHRpbWVTdGFtcCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc0ltYWdl
QXZhaWxhYmxlRm9yVGltZSh0aW1lU3RhbXApOwotfQotCi1RVFBpeGVsQnVmZmVyIFFUTW92aWVW
aXN1YWxDb250ZXh0OjppbWFnZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCogdGltZVN0YW1w
KQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmltYWdlRm9yVGltZSh0aW1lU3RhbXApOwotfQot
Ci12b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0Ojp0YXNrKCkKLXsKLSAgICBtX3ByaXZhdGUtPnRh
c2soKTsKLX0KLQotUVRWaXN1YWxDb250ZXh0UmVmIFFUTW92aWVWaXN1YWxDb250ZXh0Ojp2aXN1
YWxDb250ZXh0UmVmKCkgCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+dmlzdWFsQ29udGV4dFJl
ZigpOwotfQotCi12b2lkIFFUTW92aWVWaXN1YWxDb250ZXh0OjpzZXRNb3ZpZShQYXNzUmVmUHRy
PFFUTW92aWU+IG1vdmllKQotewotICAgIG1fcHJpdmF0ZS0+c2V0TW92aWUobW92aWUpOwotfQot
Ci1RVE1vdmllKiBRVE1vdmllVmlzdWFsQ29udGV4dDo6bW92aWUoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3ByaXZhdGUtPm1vdmllKCk7Ci19Ci0KLWRvdWJsZSBRVE1vdmllVmlzdWFsQ29udGV4
dDo6Y3VycmVudEhvc3RUaW1lKCkKLXsKLSAgICByZXR1cm4gQ1ZHZXRDdXJyZW50SG9zdFRpbWUo
KSAvIENWR2V0SG9zdENsb2NrRnJlcXVlbmN5KCk7Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVZpc3VhbENvbnRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVZpc3VhbENvbnRl
eHQuaAkocmV2aXNpb24gMTY1NDUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1FUTW92aWVWaXN1YWxDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBRVE1vdmllVmlzdWFs
Q29udGV4dF9oCi0jZGVmaW5lIFFUTW92aWVWaXN1YWxDb250ZXh0X2gKLQotI2lmZGVmIFFUTU9W
SUVXSU5fRVhQT1JUUwotI2RlZmluZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9y
dCkKLSNlbHNlCi0jZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQot
I2VuZGlmCi0KLSNpbmNsdWRlICJRVE1vdmllLmgiCi0jaW5jbHVkZSAiUVRNb3ZpZVRhc2suaCIK
LSNpbmNsdWRlICJRVFBpeGVsQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLXR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZEaWN0
aW9uYXJ5KiBDRkRpY3Rpb25hcnlSZWY7Ci10eXBlZGVmIHN0cnVjdCBPcGFxdWVRVFZpc3VhbENv
bnRleHQqICAgUVRWaXN1YWxDb250ZXh0UmVmOwotCi0vLyBRVENWVGltZVN0YW1wIGlzIGEgc3Ry
dWN0IGNvbnRhaW5pbmcgb25seSBhIENWVGltZVN0YW1wLiAgVGhpcyBpcyB0byAKLS8vIHdvcmsg
YXJvdW5kIHRoZSBpbmFiaWxpdHkgb2YgQ1ZUaW1lU3RhbXAgdG8gYmUgZm9yd2FyZCBkZWNsYXJl
ZCwgaW4gCi0vLyBhZGRpdGlvbiB0byBpdCBiZWluZyBkZWNsYXJlZCBpbiBkaWZmZXJlbnQgaGVh
ZGVyIGZpbGVzIHdoZW4gYnVpbGRpbmcKLS8vIHRoZSBRVE1vdmllV2luIGFuZCBXZWJDb3JlIHBy
b2plY3RzLgotc3RydWN0IFFUQ1ZUaW1lU3RhbXA7Ci0KLWNsYXNzIFFUTW92aWVWaXN1YWxDb250
ZXh0Q2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VBdmFpbGFibGVGb3JU
aW1lKGNvbnN0IFFUQ1ZUaW1lU3RhbXAqKSA9IDA7Ci19OwotCi1jbGFzcyBRVE1PVklFV0lOX0FQ
SSBRVE1vdmllVmlzdWFsQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFFUTW92aWVWaXN1YWxD
b250ZXh0PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UVRNb3ZpZVZpc3VhbENv
bnRleHQ+IGNyZWF0ZShRVE1vdmllVmlzdWFsQ29udGV4dENsaWVudCosIFFUUGl4ZWxCdWZmZXI6
OlR5cGUpOwotICAgIH5RVE1vdmllVmlzdWFsQ29udGV4dCgpOwotCi0gICAgYm9vbCBpc0ltYWdl
QXZhaWxhYmxlRm9yVGltZShjb25zdCBRVENWVGltZVN0YW1wKikgY29uc3Q7Ci0gICAgUVRQaXhl
bEJ1ZmZlciBpbWFnZUZvclRpbWUoY29uc3QgUVRDVlRpbWVTdGFtcCopOwotICAgIHZvaWQgdGFz
aygpOwotCi0gICAgUVRWaXN1YWxDb250ZXh0UmVmIHZpc3VhbENvbnRleHRSZWYoKTsKLQotICAg
IHZvaWQgc2V0TW92aWUoUGFzc1JlZlB0cjxRVE1vdmllPik7Ci0gICAgUVRNb3ZpZSogbW92aWUo
KSBjb25zdDsKLQotICAgIHN0YXRpYyBkb3VibGUgY3VycmVudEhvc3RUaW1lKCk7Ci0KLXByb3Rl
Y3RlZDoKLSAgICBRVE1vdmllVmlzdWFsQ29udGV4dChRVE1vdmllVmlzdWFsQ29udGV4dENsaWVu
dCosIFFUUGl4ZWxCdWZmZXI6OlR5cGUpOwotICAgIHZvaWQgc2V0dXBWaXN1YWxDb250ZXh0KCk7
Ci0KLSAgICBmcmllbmQgY2xhc3MgUVRNb3ZpZVZpc3VhbENvbnRleHRQcml2OwotICAgIE93blB0
cjxRVE1vdmllVmlzdWFsQ29udGV4dFByaXY+IG1fcHJpdmF0ZTsKLX07Ci0KLSNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FUTW92aWVXaW5UaW1lci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FU
TW92aWVXaW5UaW1lci5jcHAJKHJldmlzaW9uIDE2NTQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllV2luVGltZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotCi0jaW5jbHVkZSAiUVRNb3ZpZVdp
blRpbWVyLmgiCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0vLyBUaGlzIGZpbGUg
aXMgdXNlZCBieSB0aGUgUXVpY2tUaW1lIGFjY2VzcyBETEwuIEl0IGNvcGllcyBzb21lIFdlYkNv
cmUgY29kZSAKLS8vIHdoaWNoIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgZHVlIHRvIGRlcGVuZGVu
Y3kgaXNzdWVzLgotCi0vLyBGSVhNRTogRmluZCBhIHdheSB0byBkbyB0aW1lcnMgdGhhdCBjYW4g
bWFuYWdlIDwxMG1zIHJlc29sdXRpb24gcHJvcGVybHkgdG9vLgotCi1zdGF0aWMgVUlOVF9QVFIg
dGltZXJJRDsKLXN0YXRpYyB2b2lkICgqc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKSgpOwotCi1z
dGF0aWMgSElOU1RBTkNFIGluc3RhbmNlSGFuZGxlID0gMDsKLQotc3RhdGljIEhXTkQgdGltZXJX
aW5kb3dIYW5kbGUgPSAwOwotc3RhdGljIFVJTlQgdGltZXJGaXJlZE1lc3NhZ2UgPSAwOwotc3Rh
dGljIGNvbnN0IExQQ1dTVFIga1RpbWVyV2luZG93Q2xhc3NOYW1lID0gTCJUaW1lcldpbmRvd0Ns
YXNzIjsKLXN0YXRpYyBib29sIHByb2Nlc3NpbmdDdXN0b21UaW1lck1lc3NhZ2UgPSBmYWxzZTsK
LQotc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgVGltZXJXaW5kb3dXbmRQcm9jKEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIGlmICht
ZXNzYWdlID09IHRpbWVyRmlyZWRNZXNzYWdlKSB7Ci0gICAgICAgIHByb2Nlc3NpbmdDdXN0b21U
aW1lck1lc3NhZ2UgPSB0cnVlOwotICAgICAgICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oKTsK
LSAgICAgICAgcHJvY2Vzc2luZ0N1c3RvbVRpbWVyTWVzc2FnZSA9IGZhbHNlOwotICAgIH0gZWxz
ZSBpZiAobWVzc2FnZSA9PSBXTV9USU1FUiAmJiB3UGFyYW0gPT0gdGltZXJJRCkgewotICAgICAg
ICBzdG9wU2hhcmVkVGltZXIoKTsKLSAgICAgICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3NhZ2Us
IHdQYXJhbSwgbFBhcmFtKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZU9mZlNjcmVlblRpbWVyV2luZG93KCkKLXsKLSAgICBpZiAodGltZXJXaW5kb3dIYW5kbGUp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBXTkRDTEFTU0VYIHdjZXg7Ci0gICAgbWVtc2V0
KCZ3Y2V4LCAwLCBzaXplb2YoV05EQ0xBU1NFWCkpOwotICAgIHdjZXguY2JTaXplID0gc2l6ZW9m
KFdORENMQVNTRVgpOwotICAgIHdjZXgubHBmblduZFByb2MgICAgPSBUaW1lcldpbmRvd1duZFBy
b2M7Ci0gICAgd2NleC5oSW5zdGFuY2UgICAgICA9IGluc3RhbmNlSGFuZGxlOwotICAgIHdjZXgu
bHBzekNsYXNzTmFtZSAgPSBrVGltZXJXaW5kb3dDbGFzc05hbWU7Ci0gICAgUmVnaXN0ZXJDbGFz
c0V4KCZ3Y2V4KTsKLQotICAgIHRpbWVyV2luZG93SGFuZGxlID0gQ3JlYXRlV2luZG93KGtUaW1l
cldpbmRvd0NsYXNzTmFtZSwgMCwgMCwKLSAgICAgICBDV19VU0VERUZBVUxULCAwLCBDV19VU0VE
RUZBVUxULCAwLCBIV05EX01FU1NBR0UsIDAsIGluc3RhbmNlSGFuZGxlLCAwKTsKLSAgICB0aW1l
ckZpcmVkTWVzc2FnZSA9IFJlZ2lzdGVyV2luZG93TWVzc2FnZShMImNvbS5hcHBsZS5XZWJLaXQu
VGltZXJGaXJlZCIpOwotfQotCi12b2lkIHNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lk
ICgqZikoKSkKLXsKLSAgICBzaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24gPSBmOwotfQotCi12b2lk
IHNldFNoYXJlZFRpbWVyRmlyZURlbGF5KGRvdWJsZSBpbnRlcnZhbCkKLXsKLSAgICBBU1NFUlQo
c2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKTsKLQotICAgIHVuc2lnbmVkIGludGVydmFsSW5NUzsK
LSAgICBpZiAoaW50ZXJ2YWwgPCAwKQotICAgICAgICBpbnRlcnZhbEluTVMgPSAwOwotICAgIGVs
c2UgewotICAgICAgICBpbnRlcnZhbCAqPSAxMDAwOwotICAgICAgICBpZiAoaW50ZXJ2YWwgPiBV
U0VSX1RJTUVSX01BWElNVU0pCi0gICAgICAgICAgICBpbnRlcnZhbEluTVMgPSBVU0VSX1RJTUVS
X01BWElNVU07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGludGVydmFsSW5NUyA9ICh1bnNp
Z25lZClpbnRlcnZhbDsKLSAgICB9Ci0KLSAgICBzdG9wU2hhcmVkVGltZXIoKTsKLSAgICBpbml0
aWFsaXplT2ZmU2NyZWVuVGltZXJXaW5kb3coKTsKLQotICAgIC8vIFdlIGRvbid0IGFsbG93IG5l
c3RlZCBQb3N0TWVzc2FnZXMsIHNpbmNlIHRoZSBjdXN0b20gbWVzc2FnZXMgd2lsbCBlZmZlY3Rp
dmVseSBzdGFydmUKLSAgICAvLyBwYWludGluZyBhbmQgdXNlciBpbnB1dC4gKFdpbjMyIGhhcyBh
IHRyaS1sZXZlbCBxdWV1ZSB3aXRoIGFwcGxpY2F0aW9uIG1lc3NhZ2VzID4gCi0gICAgLy8gdXNl
ciBpbnB1dCA+IFdNX1BBSU5UL1dNX1RJTUVSLikKLSAgICAvLyBJbiBhZGRpdGlvbiwgaWYgdGhl
IHF1ZXVlIGNvbnRhaW5zIGlucHV0IGV2ZW50cyB0aGF0IGhhdmUgYmVlbiB0aGVyZSBzaW5jZSB0
aGUgbGFzdCBjYWxsIHRvCi0gICAgLy8gR2V0UXVldWVTdGF0dXMsIFBlZWtNZXNzYWdlIG9yIEdl
dE1lc3NhZ2Ugd2UgZmF2b3IgdGltZXJzLgotICAgIGlmIChpbnRlcnZhbEluTVMgPCBVU0VSX1RJ
TUVSX01JTklNVU0gCi0gICAgICAgICYmICFwcm9jZXNzaW5nQ3VzdG9tVGltZXJNZXNzYWdlIAot
ICAgICAgICAmJiAhTE9XT1JEKDo6R2V0UXVldWVTdGF0dXMoUVNfQUxMSU5QVVQpKSkgewotICAg
ICAgICAvLyBXaW5kb3dzIFNldFRpbWVyIGRvZXMgbm90IGFsbG93IHRpbWVvdXRzIHNtYWxsZXIg
dGhhbiAxMG1zIChVU0VSX1RJTUVSX01JTklNVU0pCi0gICAgICAgIFBvc3RNZXNzYWdlKHRpbWVy
V2luZG93SGFuZGxlLCB0aW1lckZpcmVkTWVzc2FnZSwgMCwgMCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHRpbWVySUQgPSBTZXRUaW1lcih0aW1lcldpbmRvd0hhbmRsZSwgdGltZXJGaXJlZE1lc3Nh
Z2UsIGludGVydmFsSW5NUywgMCk7Ci19Ci0KLXZvaWQgc3RvcFNoYXJlZFRpbWVyKCkKLXsKLSAg
ICBpZiAodGltZXJJRCkgewotICAgICAgICBLaWxsVGltZXIodGltZXJXaW5kb3dIYW5kbGUsIHRp
bWVySUQpOwotICAgICAgICB0aW1lcklEID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgc2V0U2hhcmVk
VGltZXJJbnN0YW5jZUhhbmRsZShISU5TVEFOQ0UgaGFuZGxlKQotewotICAgIGluc3RhbmNlSGFu
ZGxlID0gaGFuZGxlOwotfQotCi1kb3VibGUgc3lzdGVtVGltZSgpCi17Ci0gICAgRklMRVRJTUUg
ZnQ7Ci0gICAgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0KTsKLSAgICBVTEFSR0VfSU5URUdF
UiB0OwotICAgIG1lbWNweSgmdCwgJmZ0LCBzaXplb2YodCkpOwotICAgIHJldHVybiB0LlF1YWRQ
YXJ0ICogMC4wMDAwMDAxIC0gMTE2NDQ0NzM2MDAuMDsKLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVE1vdmllV2luVGltZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRNb3ZpZVdpblRpbWVyLmgJKHJl
dmlzaW9uIDE2NTQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9R
VE1vdmllV2luVGltZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFFUTW92aWVXaW5UaW1lcl9oCi0jZGVmaW5lIFFU
TW92aWVXaW5UaW1lcl9oCi0KLS8vIFRoaXMgaGVhZGVyIHNob3VsZCBub3QgYmUgaW5jbHVkZWQg
ZnJvbSBXZWJDb3JlLgotLy8gSXQgaXMgdXNlZCBieSB0aGUgUXVpY2tUaW1lIGFjY2VzcyBETEwu
IEl0IGNvcGllcyBzb21lIFdlYkNvcmUgY29kZSAKLS8vIHdoaWNoIGNhbid0IGJlIHVzZWQgZGly
ZWN0bHkgZHVlIHRvIGRlcGVuZGVuY3kgaXNzdWVzLgotCi12b2lkIHNldFNoYXJlZFRpbWVyRmly
ZWRGdW5jdGlvbih2b2lkICgqKSgpKTsKLXZvaWQgc2V0U2hhcmVkVGltZXJGaXJlRGVsYXkoZG91
YmxlIGRlbGF5KTsKLXZvaWQgc3RvcFNoYXJlZFRpbWVyKCk7Ci12b2lkIHNldFNoYXJlZFRpbWVy
SW5zdGFuY2VIYW5kbGUoSElOU1RBTkNFIGhhbmRsZSk7Ci1kb3VibGUgc3lzdGVtVGltZSgpOwot
Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBp
eGVsQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vUVRQaXhlbEJ1ZmZlci5jcHAJKHJldmlzaW9uIDE2NTQ1MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFBpeGVsQnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwyNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlFUUGl4ZWxCdWZmZXIuaCIKLQotI2luY2x1ZGUg
PENGTnVtYmVyLmg+Ci0jaW5jbHVkZSA8Q0ZTdHJpbmcuaD4KLSNpbmNsdWRlIDxDR0NvbG9yU3Bh
Y2UuaD4KLSNpbmNsdWRlIDxDR0ltYWdlLmg+Ci0jaW5jbHVkZSA8Q1ZQaXhlbEJ1ZmZlci5oPgot
I2luY2x1ZGUgPFF1aWNrRHJhdy5oPgotI2luY2x1ZGUgPG1lbW9yeS5oPgotCi1zdGF0aWMgT1NT
dGF0dXMgU2V0TnVtYmVyVmFsdWUoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBpbkRpY3QsIENGU3Ry
aW5nUmVmIGluS2V5LCBTSW50MzIgaW5WYWx1ZSkKLXsKLSAgICBDRk51bWJlclJlZiBudW1iZXI7
Ci0gCi0gICAgbnVtYmVyID0gQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NG
TnVtYmVyU0ludDMyVHlwZSwgJmluVmFsdWUpOwotICAgIGlmICghbnVtYmVyKSAKLSAgICAgICAg
cmV0dXJuIGNvcmVGb3VuZGF0aW9uVW5rbm93bkVycjsKLSAKLSAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShpbkRpY3QsIGluS2V5LCBudW1iZXIpOwotICAgIENGUmVsZWFzZShudW1iZXIpOwotCi0g
ICAgcmV0dXJuIG5vRXJyOwotfQotCi1DRkRpY3Rpb25hcnlSZWYgUVRQaXhlbEJ1ZmZlcjo6Y3Jl
YXRlUGl4ZWxCdWZmZXJBdHRyaWJ1dGVzRGljdGlvbmFyeShRVFBpeGVsQnVmZmVyOjpUeXBlIGNv
bnRleHRUeXBlKQotewotICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrRGlyZWN0M0RDb21w
YXRpYmlsaXR5S2V5ID0gQ0ZTVFIoIkRpcmVjdDNEQ29tcGF0aWJpbGl0eSIpOwotCi0gICAgQ0ZN
dXRhYmxlRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMgPSBDRkRpY3Rpb25hcnlD
cmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtl
eUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOwotICAgIGlmIChj
b250ZXh0VHlwZSA9PSBRVFBpeGVsQnVmZmVyOjpDb25maWd1cmVGb3JDQUltYWdlUXVldWUpIHsK
LSAgICAgICAgLy8gQXNrIGZvciBEM0QgY29tcGF0aWJsZSBwaXhlbCBidWZmZXJzIHNvIG5vIGZ1
cnRoZXIgd29yayBpcyBuZWVkZWQuCi0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHBpeGVs
QnVmZmVyQXR0cmlidXRlcywga0RpcmVjdDNEQ29tcGF0aWJpbGl0eUtleSwga0NGQm9vbGVhblRy
dWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFVzZSB0aGUgazMyQkdSQVBpeGVsRm9ybWF0
LCBhcyBRdWFydHpDb3JlIHdpbGwgYmUgYWJsZSB0byB1c2UgdGhlIHBpeGVscyBkaXJlY3RseSwK
LSAgICAgICAgLy8gd2l0aG91dCBuZWVkaW5nIGFuIGFkZGl0aW9uYWwgY29weSBvciByZW5kZXJp
bmcgcGFzcy4KLSAgICAgICAgU2V0TnVtYmVyVmFsdWUocGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBr
Q1ZQaXhlbEJ1ZmZlclBpeGVsRm9ybWF0VHlwZUtleSwgazMyQkdSQVBpeGVsRm9ybWF0KTsKLSAg
ICAgICAgICAgIAotICAgICAgICAvLyBTZXQga0NWUGl4ZWxCdWZmZXJCeXRlc1BlclJvd0FsaWdu
bWVudEtleSB0byAxNiB0byBlbnN1cmUgdGhhdCBlYWNoIHJvdyBvZiBwaXhlbHMgCi0gICAgICAg
IC8vIHN0YXJ0cyBhdCBhIDE2IGJ5dGUgYWxpZ25lZCBhZGRyZXNzIGZvciBtb3N0IGVmZmljaWVu
dCBkYXRhIHJlYWRpbmcuCi0gICAgICAgIFNldE51bWJlclZhbHVlKHBpeGVsQnVmZmVyQXR0cmli
dXRlcywga0NWUGl4ZWxCdWZmZXJCeXRlc1BlclJvd0FsaWdubWVudEtleSwgMTYpOwotICAgICAg
ICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIGtDVlBpeGVsQnVm
ZmVyQ0dJbWFnZUNvbXBhdGliaWxpdHlLZXksIGtDRkJvb2xlYW5UcnVlKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHBpeGVsQnVmZmVyQXR0cmlidXRlczsKLX0KLQotUVRQaXhlbEJ1ZmZlcjo6UVRQaXhl
bEJ1ZmZlcigpIAotICAgIDogbV9waXhlbEJ1ZmZlcigwKSAKLXsKLX0KLQotUVRQaXhlbEJ1ZmZl
cjo6UVRQaXhlbEJ1ZmZlcihjb25zdCBRVFBpeGVsQnVmZmVyJiBwKSAKLSAgICA6IG1fcGl4ZWxC
dWZmZXIocC5tX3BpeGVsQnVmZmVyKSAKLXsKLSAgICBDVlBpeGVsQnVmZmVyUmV0YWluKG1fcGl4
ZWxCdWZmZXIpOwotfQotCi1RVFBpeGVsQnVmZmVyOjpRVFBpeGVsQnVmZmVyKENWUGl4ZWxCdWZm
ZXJSZWYgcmVmKSAKLSAgICA6IG1fcGl4ZWxCdWZmZXIocmVmKQotewotICAgIENWUGl4ZWxCdWZm
ZXJSZXRhaW4obV9waXhlbEJ1ZmZlcik7Ci19Ci0KLVFUUGl4ZWxCdWZmZXI6On5RVFBpeGVsQnVm
ZmVyKCkgCi17Ci0gICAgY2xlYXIoKTsKLX0KLQotUVRQaXhlbEJ1ZmZlciYgUVRQaXhlbEJ1ZmZl
cjo6b3BlcmF0b3I9KGNvbnN0IFFUUGl4ZWxCdWZmZXImIHApIAotewotICAgIHNldChwLm1fcGl4
ZWxCdWZmZXIpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotdm9pZCBRVFBpeGVsQnVmZmVyOjpz
ZXQoQ1ZQaXhlbEJ1ZmZlclJlZiByZWYpCi17Ci0gICAgQ1ZQaXhlbEJ1ZmZlclJldGFpbihyZWYp
OwotICAgIENWUGl4ZWxCdWZmZXJSZWxlYXNlKG1fcGl4ZWxCdWZmZXIpOwotICAgIG1fcGl4ZWxC
dWZmZXIgPSByZWY7Ci19Ci0KLUNWUGl4ZWxCdWZmZXJSZWYgUVRQaXhlbEJ1ZmZlcjo6cGl4ZWxC
dWZmZXJSZWYoKQotewotICAgIHJldHVybiBtX3BpeGVsQnVmZmVyOwotfQotCi12b2lkIFFUUGl4
ZWxCdWZmZXI6OmFkb3B0KENWUGl4ZWxCdWZmZXJSZWYgcmVmKQotewotICAgIGlmIChyZWYgPT0g
bV9waXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIENWUGl4ZWxCdWZmZXJSZWxlYXNl
KG1fcGl4ZWxCdWZmZXIpOwotICAgIG1fcGl4ZWxCdWZmZXIgPSByZWY7Ci19Ci0KLXZvaWQgUVRQ
aXhlbEJ1ZmZlcjo6Y2xlYXIoKQotewotICAgIENWUGl4ZWxCdWZmZXJSZWxlYXNlKG1fcGl4ZWxC
dWZmZXIpOwotICAgIG1fcGl4ZWxCdWZmZXIgPSAwOwotfQotCi1DVlJldHVybiBRVFBpeGVsQnVm
ZmVyOjpsb2NrQmFzZUFkZHJlc3MoKQotewotICAgIHJldHVybiBDVlBpeGVsQnVmZmVyTG9ja0Jh
c2VBZGRyZXNzKG1fcGl4ZWxCdWZmZXIsIDApOwotfQotCi1DVlJldHVybiBRVFBpeGVsQnVmZmVy
Ojp1bmxvY2tCYXNlQWRkcmVzcygpCi17Ci0gICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJVbmxvY2tC
YXNlQWRkcmVzcyhtX3BpeGVsQnVmZmVyLCAwKTsKLX0KLQotdm9pZCogUVRQaXhlbEJ1ZmZlcjo6
YmFzZUFkZHJlc3MoKQotewotICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3Mo
bV9waXhlbEJ1ZmZlcik7Ci19Ci0KLXNpemVfdCBRVFBpeGVsQnVmZmVyOjp3aWR0aCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRXaWR0aChtX3BpeGVsQnVmZmVyKTsKLX0K
LQotc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENW
UGl4ZWxCdWZmZXJHZXRIZWlnaHQobV9waXhlbEJ1ZmZlcik7Ci19Ci0KLXVuc2lnbmVkIGxvbmcg
UVRQaXhlbEJ1ZmZlcjo6cGl4ZWxGb3JtYXRUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ1ZQ
aXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShtX3BpeGVsQnVmZmVyKTsKLX0KLQotYm9vbCBR
VFBpeGVsQnVmZmVyOjpwaXhlbEZvcm1hdElzMzJBUkdCKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Q1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShtX3BpeGVsQnVmZmVyKSA9PSBrMzJBUkdC
UGl4ZWxGb3JtYXQ7Ci19Ci0KLWJvb2wgUVRQaXhlbEJ1ZmZlcjo6cGl4ZWxGb3JtYXRJczMyQkdS
QSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUo
bV9waXhlbEJ1ZmZlcikgPT0gazMyQkdSQVBpeGVsRm9ybWF0OwotfQotCi1zaXplX3QgUVRQaXhl
bEJ1ZmZlcjo6Ynl0ZXNQZXJSb3coKSBjb25zdAotewotICAgIHJldHVybiBDVlBpeGVsQnVmZmVy
R2V0Qnl0ZXNQZXJSb3cobV9waXhlbEJ1ZmZlcik7Ci19Ci0KLXNpemVfdCBRVFBpeGVsQnVmZmVy
OjpkYXRhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXREYXRhU2l6
ZShtX3BpeGVsQnVmZmVyKTsKLX0KLQotYm9vbCBRVFBpeGVsQnVmZmVyOjppc1BsYW5hcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJJc1BsYW5hcihtX3BpeGVsQnVmZmVyKTsK
LX0KLQotc2l6ZV90IFFUUGl4ZWxCdWZmZXI6OnBsYW5lQ291bnQoKSBjb25zdAotewotICAgIHJl
dHVybiBDVlBpeGVsQnVmZmVyR2V0UGxhbmVDb3VudChtX3BpeGVsQnVmZmVyKTsKLX0KLQotc2l6
ZV90IFFUUGl4ZWxCdWZmZXI6OndpZHRoT2ZQbGFuZShzaXplX3QgcGxhbmUpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRXaWR0aE9mUGxhbmUobV9waXhlbEJ1ZmZlciwgcGxh
bmUpOwotfQotCi1zaXplX3QgUVRQaXhlbEJ1ZmZlcjo6aGVpZ2h0T2ZQbGFuZShzaXplX3QgcGxh
bmUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHRPZlBsYW5lKG1f
cGl4ZWxCdWZmZXIsIHBsYW5lKTsKLX0KLQotdm9pZCogUVRQaXhlbEJ1ZmZlcjo6YmFzZUFkZHJl
c3NPZlBsYW5lKHNpemVfdCBwbGFuZSkgY29uc3QKLXsKLSAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZl
ckdldEJhc2VBZGRyZXNzT2ZQbGFuZShtX3BpeGVsQnVmZmVyLCBwbGFuZSk7Ci19Ci0KLXNpemVf
dCBRVFBpeGVsQnVmZmVyOjpieXRlc1BlclJvd09mUGxhbmUoc2l6ZV90IHBsYW5lKSBjb25zdAot
ewotICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKG1fcGl4ZWxC
dWZmZXIsIHBsYW5lKTsKLX0KLQotdm9pZCBRVFBpeGVsQnVmZmVyOjpnZXRFeHRlbmRlZFBpeGVs
cyhzaXplX3QqIGxlZnQsIHNpemVfdCogcmlnaHQsIHNpemVfdCogdG9wLCBzaXplX3QqIGJvdHRv
bSkgY29uc3QKLXsKLSAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEV4dGVuZGVkUGl4ZWxzKG1f
cGl4ZWxCdWZmZXIsIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSk7Ci19Ci0KLUNGRGljdGlvbmFy
eVJlZiBRVFBpeGVsQnVmZmVyOjphdHRhY2htZW50cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENW
QnVmZmVyR2V0QXR0YWNobWVudHMobV9waXhlbEJ1ZmZlciwga0NWQXR0YWNobWVudE1vZGVfU2hv
dWxkUHJvcGFnYXRlKTsKLX0KLQotdm9pZCBRVFBpeGVsQnVmZmVyOjpyZXRhaW5DYWxsYmFjayh2
b2lkKiByZWZjb24pCi17Ci0gICAgQ1ZQaXhlbEJ1ZmZlclJldGFpbihzdGF0aWNfY2FzdDxDVlBp
eGVsQnVmZmVyUmVmPihyZWZjb24pKTsKLX0KLQotdm9pZCBRVFBpeGVsQnVmZmVyOjpyZWxlYXNl
Q2FsbGJhY2sodm9pZCogcmVmY29uKQotewotICAgIENWUGl4ZWxCdWZmZXJSZWxlYXNlKHN0YXRp
Y19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KHJlZmNvbikpOwotfQotCi12b2lkIFFUUGl4ZWxCdWZm
ZXI6OmltYWdlUXVldWVSZWxlYXNlQ2FsbGJhY2sodW5zaWduZWQgaW50IHR5cGUsIHVpbnQ2NF90
IGlkLCB2b2lkKiByZWZjb24pCi17Ci0gICAgQ1ZQaXhlbEJ1ZmZlclJlbGVhc2Uoc3RhdGljX2Nh
c3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4ocmVmY29uKSk7Ci19Ci0KLXZvaWQgUVRQaXhlbEJ1ZmZlcjo6
ZGF0YVByb3ZpZGVyUmVsZWFzZUJ5dGVQb2ludGVyQ2FsbGJhY2sodm9pZCogcmVmY29uLCBjb25z
dCB2b2lkKiBwb2ludGVyKQotewotICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhz
dGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pLCAwKTsKLX0KLQotY29uc3Qgdm9p
ZCogUVRQaXhlbEJ1ZmZlcjo6ZGF0YVByb3ZpZGVyR2V0Qnl0ZVBvaW50ZXJDYWxsYmFjayh2b2lk
KiByZWZjb24pCi17Ci0gICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhzdGF0aWNfY2Fz
dDxDVlBpeGVsQnVmZmVyUmVmPihyZWZjb24pLCAwKTsKLSAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZl
ckdldEJhc2VBZGRyZXNzKHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KHJlZmNvbikpOwot
fQotCi1zaXplX3QgUVRQaXhlbEJ1ZmZlcjo6ZGF0YVByb3ZpZGVyR2V0Qnl0ZXNBdFBvc2l0aW9u
Q2FsbGJhY2sodm9pZCogcmVmY29uLCB2b2lkKiBidWZmZXIsIHNpemVfdCBwb3NpdGlvbiwgc2l6
ZV90IGNvdW50KQotewotICAgIGNoYXIqIGRhdGEgPSAoY2hhciopQ1ZQaXhlbEJ1ZmZlckdldEJh
c2VBZGRyZXNzKHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KHJlZmNvbikpOwotICAgIHNp
emVfdCBzaXplID0gQ1ZQaXhlbEJ1ZmZlckdldERhdGFTaXplKHN0YXRpY19jYXN0PENWUGl4ZWxC
dWZmZXJSZWY+KHJlZmNvbikpOwotICAgIGlmIChzaXplIC0gcG9zaXRpb24gPCBjb3VudCkKLSAg
ICAgICAgY291bnQgPSBzaXplIC0gcG9zaXRpb247Ci0KLSAgICBtZW1jcHkoYnVmZmVyLCBkYXRh
K3Bvc2l0aW9uLCBjb3VudCk7Ci0gICAgcmV0dXJuIGNvdW50OwotfQotCi12b2lkIFFUUGl4ZWxC
dWZmZXI6OmRhdGFQcm92aWRlclJlbGVhc2VJbmZvQ2FsbGJhY2sodm9pZCogcmVmY29uKQotewot
ICAgIENWUGl4ZWxCdWZmZXJSZWxlYXNlKHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KHJl
ZmNvbikpOwotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1FU
UGl4ZWxCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vUVRQaXhlbEJ1ZmZlci5oCShyZXZpc2lvbiAxNjU0NTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRQaXhlbEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5
LCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IFFUUGl4ZWxCdWZmZXJfaAotI2RlZmluZSBRVFBpeGVsQnVmZmVyX2gKLQotI2lmZGVmIFFUTU9W
SUVXSU5fRVhQT1JUUwotI2RlZmluZSBRVE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGV4cG9y
dCkKLSNlbHNlCi0jZGVmaW5lIFFUTU9WSUVXSU5fQVBJIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQot
I2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZl
ciAqQ1ZCdWZmZXJSZWY7Ci10eXBlZGVmIENWQnVmZmVyUmVmIENWUGl4ZWxCdWZmZXJSZWY7Ci10
eXBlZGVmIHN0cnVjdCBDR0ltYWdlKiBDR0ltYWdlUmVmOwotdHlwZWRlZiBpbnQzMl90IENWUmV0
dXJuOwotdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRkRpY3Rpb25hcnkgKiBDRkRpY3Rpb25hcnlS
ZWY7Ci0KLS8vIFFUUGl4ZWxCdWZmZXIgd3JhcHMgUXVpY2tUaW1lJ3MgaW1wbGVtZW50YXRpb24g
b2YgQ1ZQaXhlbEJ1ZmZlciwgc28gaXRzIGZ1bmN0aW9ucyBhcmUKLS8vIHNhZmUgdG8gY2FsbCB3
aXRoaW4gV2ViS2l0LgotY2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVRQaXhlbEJ1ZmZlciB7Ci1wdWJs
aWM6Ci0gICAgZW51bSBUeXBlIHsgQ29uZmlndXJlRm9yQ0dJbWFnZSwgQ29uZmlndXJlRm9yQ0FJ
bWFnZVF1ZXVlIH07Ci0gICAgc3RhdGljIENGRGljdGlvbmFyeVJlZiBjcmVhdGVQaXhlbEJ1ZmZl
ckF0dHJpYnV0ZXNEaWN0aW9uYXJ5KFR5cGUpOwotCi0gICAgUVRQaXhlbEJ1ZmZlcigpOwotICAg
IFFUUGl4ZWxCdWZmZXIoY29uc3QgUVRQaXhlbEJ1ZmZlciYpOwotICAgIFFUUGl4ZWxCdWZmZXIo
Q1ZQaXhlbEJ1ZmZlclJlZik7Ci0gICAgUVRQaXhlbEJ1ZmZlciYgb3BlcmF0b3I9KGNvbnN0IFFU
UGl4ZWxCdWZmZXImKTsKLSAgICB+UVRQaXhlbEJ1ZmZlcigpOwotCi0gICAgdm9pZCBzZXQoQ1ZQ
aXhlbEJ1ZmZlclJlZik7Ci0gICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlclJlZigpOwot
ICAgIHZvaWQgYWRvcHQoQ1ZQaXhlbEJ1ZmZlclJlZik7Ci0gICAgdm9pZCBjbGVhcigpOwotCi0g
ICAgQ1ZSZXR1cm4gbG9ja0Jhc2VBZGRyZXNzKCk7Ci0gICAgQ1ZSZXR1cm4gdW5sb2NrQmFzZUFk
ZHJlc3MoKTsKLSAgICB2b2lkKiBiYXNlQWRkcmVzcygpOwotCi0gICAgc2l6ZV90IHdpZHRoKCkg
Y29uc3Q7Ci0gICAgc2l6ZV90IGhlaWdodCgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGxvbmcgcGl4
ZWxGb3JtYXRUeXBlKCkgY29uc3Q7Ci0gICAgYm9vbCBwaXhlbEZvcm1hdElzMzJBUkdCKCkgY29u
c3Q7Ci0gICAgYm9vbCBwaXhlbEZvcm1hdElzMzJCR1JBKCkgY29uc3Q7Ci0gICAgc2l6ZV90IGJ5
dGVzUGVyUm93KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGRhdGFTaXplKCkgY29uc3Q7Ci0KLSAgICBi
b29sIGlzUGxhbmFyKCkgY29uc3Q7Ci0gICAgc2l6ZV90IHBsYW5lQ291bnQoKSBjb25zdDsKLSAg
ICBzaXplX3Qgd2lkdGhPZlBsYW5lKHNpemVfdCkgY29uc3Q7Ci0gICAgc2l6ZV90IGhlaWdodE9m
UGxhbmUoc2l6ZV90KSBjb25zdDsKLSAgICB2b2lkKiBiYXNlQWRkcmVzc09mUGxhbmUoc2l6ZV90
KSBjb25zdDsKLSAgICBzaXplX3QgYnl0ZXNQZXJSb3dPZlBsYW5lKHNpemVfdCkgY29uc3Q7Ci0K
LSAgICB2b2lkIGdldEV4dGVuZGVkUGl4ZWxzKHNpemVfdCogbGVmdCwgc2l6ZV90KiByaWdodCwg
c2l6ZV90KiB0b3AsIHNpemVfdCogYm90dG9tKSBjb25zdDsKLSAgICBDRkRpY3Rpb25hcnlSZWYg
YXR0YWNobWVudHMoKSBjb25zdDsKLQotICAgIC8vIEdlbmVyaWMgQ0ZSZXRhaW4vQ0ZSZWxlYXNl
IGNhbGxiYWNrcwotICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDYWxsYmFjayh2b2lkKiByZWZjb24p
OwotICAgIHN0YXRpYyB2b2lkIHJldGFpbkNhbGxiYWNrKHZvaWQqIHJlZmNvbik7Ci0KLSAgICAv
LyBDQUltYWdlUXVldWUgY2FsbGJhY2tzCi0gICAgc3RhdGljIHZvaWQgaW1hZ2VRdWV1ZVJlbGVh
c2VDYWxsYmFjayh1bnNpZ25lZCBpbnQgdHlwZSwgdWludDY0X3QgaWQsIHZvaWQqIHJlZmNvbik7
Ci0KLSAgICAvLyBDR0RhdGFQcm92aWRlciBjYWxsYmFja3MKLSAgICBzdGF0aWMgdm9pZCBkYXRh
UHJvdmlkZXJSZWxlYXNlQnl0ZVBvaW50ZXJDYWxsYmFjayh2b2lkKiByZWZjb24sIGNvbnN0IHZv
aWQqIHBvaW50ZXIpOwotICAgIHN0YXRpYyBjb25zdCB2b2lkKiBkYXRhUHJvdmlkZXJHZXRCeXRl
UG9pbnRlckNhbGxiYWNrKHZvaWQqIHJlZmNvbik7Ci0gICAgc3RhdGljIHNpemVfdCBkYXRhUHJv
dmlkZXJHZXRCeXRlc0F0UG9zaXRpb25DYWxsYmFjayh2b2lkKiByZWZjb24sIHZvaWQqIGJ1ZmZl
ciwgc2l6ZV90IHBvc2l0aW9uLCBzaXplX3QgY291bnQpOwotICAgIHN0YXRpYyB2b2lkIGRhdGFQ
cm92aWRlclJlbGVhc2VJbmZvQ2FsbGJhY2sodm9pZCogcmVmY29uKTsKLQotcHJpdmF0ZToKLSAg
ICBDVlBpeGVsQnVmZmVyUmVmIG1fcGl4ZWxCdWZmZXI7Ci19OwotCi0jZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9RVFRyYWNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRUcmFjay5jcHAJKHJl
dmlzaW9uIDE2NTQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9R
VFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlFUVHJhY2su
aCIKLQotI2luY2x1ZGUgPE1vdmllcy5oPgotI2luY2x1ZGUgPFFUTUwuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKLQotY2xhc3MgUVRUcmFja1ByaXZhdGUgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFFUVHJhY2tQcml2YXRlKTsKLXB1YmxpYzoKLSAgICBRVFRyYWNrUHJpdmF0ZSgpOwot
ICAgIH5RVFRyYWNrUHJpdmF0ZSgpOwotCi0gICAgUVRUcmFjayogbV90cmFjazsKLSAgICBUcmFj
ayBtX3RyYWNrSGFuZGxlOwotfTsKLQotUVRUcmFja1ByaXZhdGU6OlFUVHJhY2tQcml2YXRlKCkK
LSAgICA6IG1fdHJhY2soMCkKLSAgICAsIG1fdHJhY2tIYW5kbGUoMCkKLXsKLX0KLQotUVRUcmFj
a1ByaXZhdGU6On5RVFRyYWNrUHJpdmF0ZSgpCi17Ci0gICAgbV90cmFja0hhbmRsZSA9IDA7Ci19
Ci0KLVBhc3NSZWZQdHI8UVRUcmFjaz4gUVRUcmFjazo6Y3JlYXRlKFRyYWNrIHRyYWNrSGFuZGxl
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgUVRUcmFjayh0cmFja0hhbmRsZSkpOwotfQot
Ci1RVFRyYWNrOjpRVFRyYWNrKFRyYWNrIHRyYWNrSGFuZGxlKQotICAgIDogbV9wcml2YXRlKG5l
dyBRVFRyYWNrUHJpdmF0ZSgpKQotewotICAgIG1fcHJpdmF0ZS0+bV90cmFjayA9IHRoaXM7Ci0g
ICAgbV9wcml2YXRlLT5tX3RyYWNrSGFuZGxlID0gdHJhY2tIYW5kbGU7Ci19Ci0KLVFUVHJhY2s6
On5RVFRyYWNrKCkKLXsKLSAgICBkZWxldGUgbV9wcml2YXRlOwotfQotCi1ib29sIFFUVHJhY2s6
OmlzRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcHJpdmF0ZS0+bV90cmFjayk7Ci0g
ICAgcmV0dXJuIEdldFRyYWNrRW5hYmxlZChtX3ByaXZhdGUtPm1fdHJhY2tIYW5kbGUpOwotfQot
Ci12b2lkIFFUVHJhY2s6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIEFTU0VSVCht
X3ByaXZhdGUtPm1fdHJhY2tIYW5kbGUpOwotICAgIFNldFRyYWNrRW5hYmxlZChtX3ByaXZhdGUt
Pm1fdHJhY2tIYW5kbGUsIGVuYWJsZWQpOwotfQotCi1DR0FmZmluZVRyYW5zZm9ybSBRVFRyYWNr
OjpnZXRUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIEFTU0VSVChtX3ByaXZhdGUtPm1fdHJhY2tI
YW5kbGUpOwotICAgIE1hdHJpeFJlY29yZCBtID0gezB9OwotICAgIEdldFRyYWNrTWF0cml4KG1f
cHJpdmF0ZS0+bV90cmFja0hhbmRsZSwgJm0pOwotCi0gICAgQVNTRVJUKCFtLm1hdHJpeFswXVsy
XSk7Ci0gICAgQVNTRVJUKCFtLm1hdHJpeFsxXVsyXSk7Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKAotICAgICAgICBGaXgyWChtLm1hdHJp
eFswXVswXSksCi0gICAgICAgIEZpeDJYKG0ubWF0cml4WzBdWzFdKSwKLSAgICAgICAgRml4Mlgo
bS5tYXRyaXhbMV1bMF0pLAotICAgICAgICBGaXgyWChtLm1hdHJpeFsxXVsxXSksCi0gICAgICAg
IEZpeDJYKG0ubWF0cml4WzJdWzBdKSwKLSAgICAgICAgRml4MlgobS5tYXRyaXhbMl1bMV0pKTsK
LQotICAgIHJldHVybiB0cmFuc2Zvcm07Ci19Ci0KLXZvaWQgUVRUcmFjazo6c2V0VHJhbnNmb3Jt
KENHQWZmaW5lVHJhbnNmb3JtIHQpCi17Ci0gICAgQVNTRVJUKG1fcHJpdmF0ZS0+bV90cmFja0hh
bmRsZSk7Ci0gICAgTWF0cml4UmVjb3JkIG0gPSB7ewotICAgICAgICB7WDJGaXgodC5hKSwgWDJG
aXgodC5iKSwgMH0sCi0gICAgICAgIHtYMkZpeCh0LmMpLCBYMkZpeCh0LmQpLCAwfSwKLSAgICAg
ICAge1gyRml4KHQudHgpLCBYMkZpeCh0LnR5KSwgZnJhY3QxfSwKLSAgICB9fTsKLQotICAgIFNl
dFRyYWNrTWF0cml4KG1fcHJpdmF0ZS0+bV90cmFja0hhbmRsZSwgJm0pOwotfQotCi12b2lkIFFU
VHJhY2s6OnJlc2V0VHJhbnNmb3JtKCkKLXsKLSAgICBBU1NFUlQobV9wcml2YXRlLT5tX3RyYWNr
SGFuZGxlKTsKLSAgICBTZXRUcmFja01hdHJpeChtX3ByaXZhdGUtPm1fdHJhY2tIYW5kbGUsIDAp
OwotfQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUVRUcmFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9R
VFRyYWNrLmgJKHJldmlzaW9uIDE2NTQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9RVFRyYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBRVFRyYWNrX2gKLSNkZWZpbmUgUVRU
cmFja19oCi0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NHQWZmaW5lVHJhbnNmb3JtLmg+Ci0KLSNpZmRlZiBRVE1PVklFV0lOX0VYUE9SVFMKLSNkZWZp
bmUgUVRNT1ZJRVdJTl9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jZWxzZQotI2RlZmluZSBR
VE1PVklFV0lOX0FQSSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSNlbmRpZgotCi1jbGFzcyBRVFRy
YWNrOwotY2xhc3MgUVRUcmFja1ByaXZhdGU7Ci10eXBlZGVmIHN0cnVjdCBUcmFja1R5cGUqKiBU
cmFjazsKLQotY2xhc3MgUVRNT1ZJRVdJTl9BUEkgUVRUcmFjayA6IHB1YmxpYyBSZWZDb3VudGVk
PFFUVHJhY2s+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxRVFRyYWNrPiBjcmVh
dGUoVHJhY2spOwotICAgIH5RVFRyYWNrKCk7Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBnZXRU
cmFuc2Zvcm0oKSBjb25zdDsKLSAgICB2b2lkIHNldFRyYW5zZm9ybShDR0FmZmluZVRyYW5zZm9y
bSk7Ci0gICAgdm9pZCByZXNldFRyYW5zZm9ybSgpOwotCi0gICAgYm9vbCBpc0VuYWJsZWQoKSBj
b25zdDsKLSAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7Ci0KLSAgICBUcmFjayBnZXRUcmFja0hh
bmRsZSgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBRVFRyYWNrKFRyYWNrKTsKLSAgICBRVFRyYWNr
UHJpdmF0ZSogbV9wcml2YXRlOwotICAgIGZyaWVuZCBjbGFzcyBRVFRyYWNrUHJpdmF0ZTsKLX07
Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YWJh
c2VXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdp
bkRhdGFiYXNlV2luLmNwcAkocmV2aXNpb24gMTY1NDUyKQorKysgU291cmNlL1dlYkNvcmUvcGx1
Z2lucy93aW4vUGx1Z2luRGF0YWJhc2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsMjAg
KzI1Nyw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRXaW5kb3dzTWVkaWFQbGF5ZXIKICAgICAg
ICAgZGlyZWN0b3JpZXMuYXBwZW5kKFN0cmluZyhpbnN0YWxsYXRpb25EaXJlY3RvcnlTdHIsIGlu
c3RhbGxhdGlvbkRpcmVjdG9yeVNpemUgLyBzaXplb2YoV0NIQVIpIC0gMSkpOwogfQogCi1zdGF0
aWMgaW5saW5lIHZvaWQgYWRkUXVpY2tUaW1lUGx1Z2luRGlyZWN0b3J5KFZlY3RvcjxTdHJpbmc+
JiBkaXJlY3RvcmllcykKLXsKLSAgICBEV09SRCB0eXBlOwotICAgIFdDSEFSIGluc3RhbGxhdGlv
bkRpcmVjdG9yeVN0cltfTUFYX1BBVEhdOwotICAgIERXT1JEIGluc3RhbGxhdGlvbkRpcmVjdG9y
eVNpemUgPSBzaXplb2YoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3RyKTsKLQotICAgIEhSRVNVTFQg
cmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01BQ0hJTkUsIEwiU29mdHdhcmVc
XEFwcGxlIENvbXB1dGVyLCBJbmMuXFxRdWlja1RpbWUiLCBMIkluc3RhbGxEaXIiLCAmdHlwZSwg
Jmluc3RhbGxhdGlvbkRpcmVjdG9yeVN0ciwgJmluc3RhbGxhdGlvbkRpcmVjdG9yeVNpemUpOwot
Ci0gICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIHR5cGUgPT0gUkVHX1NaKSB7Ci0g
ICAgICAgIFN0cmluZyBwbHVnaW5EaXIgPSBTdHJpbmcoaW5zdGFsbGF0aW9uRGlyZWN0b3J5U3Ry
LCBpbnN0YWxsYXRpb25EaXJlY3RvcnlTaXplIC8gc2l6ZW9mKFdDSEFSKSAtIDEpICsgIlxccGx1
Z2lucyI7Ci0gICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChwbHVnaW5EaXIpOwotICAgIH0KLX0K
LQogc3RhdGljIGlubGluZSB2b2lkIGFkZEFkb2JlQWNyb2JhdFBsdWdpbkRpcmVjdG9yeShWZWN0
b3I8U3RyaW5nPiYgZGlyZWN0b3JpZXMpCiB7CiAgICAgSEtFWSBrZXk7CkBAIC00MTQsNyArNDAw
LDYgQEAgVmVjdG9yPFN0cmluZz4gUGx1Z2luRGF0YWJhc2U6OmRlZmF1bHRQbAogCiAgICAgaWYg
KCFvdXJEaXJlY3RvcnkuaXNOdWxsKCkpCiAgICAgICAgIGRpcmVjdG9yaWVzLmFwcGVuZChvdXJE
aXJlY3RvcnkpOwotICAgIGFkZFF1aWNrVGltZVBsdWdpbkRpcmVjdG9yeShkaXJlY3Rvcmllcyk7
CiAgICAgYWRkQWRvYmVBY3JvYmF0UGx1Z2luRGlyZWN0b3J5KGRpcmVjdG9yaWVzKTsKICAgICBh
ZGRNb3ppbGxhUGx1Z2luRGlyZWN0b3JpZXMoZGlyZWN0b3JpZXMpOwogICAgIGFkZFdpbmRvd3NN
ZWRpYVBsYXllclBsdWdpbkRpcmVjdG9yeShkaXJlY3Rvcmllcyk7CkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjU0NTcpCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNC0w
My0xMSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbV2lu
XSBSZW1vdmUgdXNlIG9mIFFUU0RLCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzAwNDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHA6Cisg
ICAgICAgIChpbml0aWFsaXplKTogUmVtb3ZlIFF1aWNrVGltZSBjb2RlLgorICAgICAgICAqIHdp
bi9Bc3NlbWJsZUJ1aWxkTG9ncy9Bc3NlbWJsZUxvZ3MuY21kOiBEb24ndCBncmFiIGxvZ3MgZnJv
bQorICAgICAgICBidWlsZGluZyBRVE1vdmllV2luLgorCiAyMDE0LTAzLTExICBHdXN0YXZvIE5v
cm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvbT4KIAogICAgICAgICBb
R1RLXVtDTWFrZV0gLS11cGRhdGUtZ3RrIGhhcyBubyBlZmZlY3QKSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMTY1NDUyKQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjk2LDQzICsyOTYsNiBAQCBzdGF0aWMgY29uc3Qgd3N0cmluZyYgZm9udHNQYXRoKCkK
ICAgICByZXR1cm4gcGF0aDsKIH0KIAotc3RhdGljIHZvaWQgYWRkUVREaXJUb1BBVEgoKQotewot
ICAgIHN0YXRpYyBMUENXU1RSIHBhdGhFbnZpcm9ubWVudFZhcmlhYmxlID0gTCJQQVRIIjsKLSAg
ICBzdGF0aWMgTFBDV1NUUiBxdWlja1RpbWVLZXlOYW1lID0gTCJTb2Z0d2FyZVxcQXBwbGUgQ29t
cHV0ZXIsIEluYy5cXFF1aWNrVGltZSI7Ci0gICAgc3RhdGljIExQQ1dTVFIgcXVpY2tUaW1lU3lz
RGlyID0gTCJRVFN5c0RpciI7Ci0gICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7Ci0KLSAgICBp
ZiAoaW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBpbml0aWFsaXplZCA9IHRydWU7
Ci0KLSAgICAvLyBHZXQgdGhlIFF1aWNrVGltZSBkbGwgZGlyZWN0b3J5IGZyb20gdGhlIHJlZ2lz
dHJ5LiBUaGUga2V5IGNhbiBiZSBpbiBlaXRoZXIgSEtMTSBvciBIS0NVLgotICAgIFdDSEFSIHF0
UGF0aFtNQVhfUEFUSF07Ci0gICAgRFdPUkQgcXRQYXRoQnVmZmVyTGVuID0gc2l6ZW9mKHF0UGF0
aCk7Ci0gICAgRFdPUkQga2V5VHlwZTsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IFNIR2V0VmFsdWUo
SEtFWV9MT0NBTF9NQUNISU5FLCBxdWlja1RpbWVLZXlOYW1lLCBxdWlja1RpbWVTeXNEaXIsICZr
ZXlUeXBlLCAoTFBWT0lEKXF0UGF0aCwgJnF0UGF0aEJ1ZmZlckxlbik7Ci0gICAgaWYgKHJlc3Vs
dCAhPSBFUlJPUl9TVUNDRVNTIHx8ICFxdFBhdGhCdWZmZXJMZW4gfHwga2V5VHlwZSAhPSBSRUdf
U1opIHsKLSAgICAgICAgcXRQYXRoQnVmZmVyTGVuID0gc2l6ZW9mKHF0UGF0aCk7Ci0gICAgICAg
IHJlc3VsdCA9IFNIR2V0VmFsdWUoSEtFWV9DVVJSRU5UX1VTRVIsIHF1aWNrVGltZUtleU5hbWUs
IHF1aWNrVGltZVN5c0RpciwgJmtleVR5cGUsIChMUFZPSUQpcXRQYXRoLCAmcXRQYXRoQnVmZmVy
TGVuKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBFUlJPUl9TVUNDRVNTIHx8ICFxdFBhdGhCdWZm
ZXJMZW4gfHwga2V5VHlwZSAhPSBSRUdfU1opCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gUmVhZCB0aGUgY3VycmVudCBQQVRILgotICAgIERXT1JEIHBhdGhTaXplID0gR2V0
RW52aXJvbm1lbnRWYXJpYWJsZVcocGF0aEVudmlyb25tZW50VmFyaWFibGUsIDAsIDApOwotICAg
IFZlY3RvcjxXQ0hBUj4gb2xkUGF0aChwYXRoU2l6ZSk7Ci0gICAgaWYgKCFHZXRFbnZpcm9ubWVu
dFZhcmlhYmxlVyhwYXRoRW52aXJvbm1lbnRWYXJpYWJsZSwgb2xkUGF0aC5kYXRhKCksIG9sZFBh
dGguc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQW5kIGFkZCB0aGUgUXVpY2tU
aW1lIGRsbC4KLSAgICB3c3RyaW5nIG5ld1BhdGg7Ci0gICAgbmV3UGF0aC5hcHBlbmQocXRQYXRo
KTsKLSAgICBuZXdQYXRoLmFwcGVuZChMIjsiKTsKLSAgICBuZXdQYXRoLmFwcGVuZChvbGRQYXRo
LmRhdGEoKSwgb2xkUGF0aC5zaXplKCkpOwotICAgIFNldEVudmlyb25tZW50VmFyaWFibGVXKHBh
dGhFbnZpcm9ubWVudFZhcmlhYmxlLCBuZXdQYXRoLmRhdGEoKSk7Ci19Ci0KICNpZmRlZiBERUJV
R19BTEwKICNkZWZpbmUgV0VCS0lURExMIFRFWFQoIldlYktpdF9kZWJ1Zy5kbGwiKQogI2Vsc2UK
QEAgLTM5NSwxMCArMzU4LDYgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgQVJSQVlTSVpFKGZvbnRzVG9JbnN0YWxsKTsgKytpKQogICAgICAg
ICAgICAgdGV4dFJlbmRlcmVyLT5yZWdpc3RlclByaXZhdGVGb250KHdzdHJpbmcocmVzb3VyY2Vz
UGF0aCArIGZvbnRzVG9JbnN0YWxsW2ldKS5jX3N0cigpKTsKIAotICAgIC8vIEFkZCB0aGUgUXVp
Y2tUaW1lIGRsbCBkaXJlY3RvcnkgdG8gUEFUSCBvciBRVCA3LjYgd2lsbCBmYWlsIHRvIGluaXRp
YWxpemUgb24gc3lzdGVtcwotICAgIC8vIGxpbmtlZCB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIHF0
bWxjbGllbnRsaWIuZGxsLgotICAgIGFkZFFURGlyVG9QQVRIKCk7Ci0KICAgICAvLyBSZWdpc3Rl
ciBhIGhvc3Qgd2luZG93CiAgICAgV05EQ0xBU1NFWCB3Y2V4OwogCkluZGV4OiBUb29scy93aW4v
QXNzZW1ibGVCdWlsZExvZ3MvQXNzZW1ibGVMb2dzLmNtZAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy93
aW4vQXNzZW1ibGVCdWlsZExvZ3MvQXNzZW1ibGVMb2dzLmNtZAkocmV2aXNpb24gMTY1NDUyKQor
KysgVG9vbHMvd2luL0Fzc2VtYmxlQnVpbGRMb2dzL0Fzc2VtYmxlTG9ncy5jbWQJKHdvcmtpbmcg
Y29weSkKQEAgLTExOCwxNSArMTE4LDYgQEAgZWNobyBDT01QSUxJTkcgV2ViQ29yZUdlbmVyYXRl
ZC4uLgogZWNobyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18gPj4gIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXEJ1aWxkT3V0cHV0Lmh0bSIK
IHR5cGUgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXG9iaiVQbGF0Zm9ybUFyY2hpdGVjdHVyZSVc
V2ViQ29yZUdlbmVyYXRlZFxCdWlsZExvZy5odG0iID4+ICIlQ09ORklHVVJBVElPTkJVSUxERElS
JVxCdWlsZE91dHB1dC5odG0iCiAKLWlmIG5vdCBleGlzdCAiJUNPTkZJR1VSQVRJT05CVUlMRERJ
UiVcb2JqJVBsYXRmb3JtQXJjaGl0ZWN0dXJlJVxRVE1vdmllV2luXEJ1aWxkTG9nLmh0bSIgR09U
TyBTa2lwUVRNb3ZpZVdpbgotCi1lY2hvIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXyA+PiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcQnVp
bGRPdXRwdXQuaHRtIgotZWNobyBDT01QSUxJTkcgUVRNb3ZpZVdpbi4uLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPj4gIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXEJ1aWxkT3V0
cHV0Lmh0bSIKLWVjaG8gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fID4+ICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxCdWlsZE91dHB1dC5o
dG0iCi10eXBlICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxvYmolUGxhdGZvcm1BcmNoaXRlY3R1
cmUlXFFUTW92aWVXaW5cQnVpbGRMb2cuaHRtIiA+PiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVc
QnVpbGRPdXRwdXQuaHRtIgotCi06U2tpcFFUTW92aWVXaW4KLQogZWNobyBfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gPj4gIiVDT05GSUdV
UkFUSU9OQlVJTERESVIlXEJ1aWxkT3V0cHV0Lmh0bSIKIGVjaG8gQ09NUElMSU5HIFdlYkNvcmUu
Li4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICIlQ09ORklHVVJBVElP
TkJVSUxERElSJVxCdWlsZE91dHB1dC5odG0iCiBlY2hvIF9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyA+PiAiJUNPTkZJR1VSQVRJT05CVUlM
RERJUiVcQnVpbGRPdXRwdXQuaHRtIgo=
</data>
<flag name="review"
          id="250691"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>