<?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>237594</bug_id>
          
          <creation_ts>2022-03-08 03:59:37 -0800</creation_ts>
          <short_desc>Have MediaFormatReader plugin use WebMParser directly</short_desc>
          <delta_ts>2022-03-09 14:36:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>237472</dependson>
          <blocked>236754</blocked>
    
    <blocked>237677</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jean-Yves Avenard [:jya]">jean-yves.avenard</reporter>
          <assigned_to name="Jean-Yves Avenard [:jya]">jean-yves.avenard</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1849182</commentid>
    <comment_count>0</comment_count>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-08 03:59:37 -0800</bug_when>
    <thetext>Sub-task of bug 236754.

Currently, the MediaFormatReader uses a SourceBufferParserWebM to demux the webm file and build a samples table.
This unnecessarily creates MediaSampleAVFObjC object which will be immediately deleted after the needed information has been read (presentation time, decode time, flags and byte range).

This is inefficient and requires to read the entire webm file into memory before we can play it.

By using the WebM parser introduced in bug 236754, we can only export the required ByteRange and build the sample table from that without needed an intermediary MediaSampleAVFObjC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849183</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-08 04:00:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/89960307&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849187</commentid>
    <comment_count>2</comment_count>
      <attachid>454096</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-08 04:09:35 -0800</bug_when>
    <thetext>Created attachment 454096
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849189</commentid>
    <comment_count>3</comment_count>
      <attachid>454098</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-08 04:12:27 -0800</bug_when>
    <thetext>Created attachment 454098
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849207</commentid>
    <comment_count>4</comment_count>
      <attachid>454106</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-08 05:12:09 -0800</bug_when>
    <thetext>Created attachment 454106
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849210</commentid>
    <comment_count>5</comment_count>
      <attachid>454107</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-08 05:15:47 -0800</bug_when>
    <thetext>Created attachment 454107
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849211</commentid>
    <comment_count>6</comment_count>
      <attachid>454108</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-08 05:16:21 -0800</bug_when>
    <thetext>Created attachment 454108
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849471</commentid>
    <comment_count>7</comment_count>
      <attachid>454173</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-08 16:35:36 -0800</bug_when>
    <thetext>Created attachment 454173
Patch

Simplify flags handling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849498</commentid>
    <comment_count>8</comment_count>
      <attachid>454173</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2022-03-08 17:33:37 -0800</bug_when>
    <thetext>Comment on attachment 454173
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=454173&amp;action=review

&gt; Source/WebCore/platform/graphics/cocoa/SourceBufferParserWebM.cpp:1097
&gt; +    if (m_useByteRange)
&gt; +        m_completeMediaSamples.append({ presentationTime, presentationTime, MediaTime(duration, presentationTime.timeScale()), MediaSample::ByteRange { metadata.position, metadata.size }, isKey ? MediaSample::SampleFlags::IsSync : MediaSample::SampleFlags::None });
&gt; +    else
&gt; +        m_completeMediaSamples.append({ presentationTime, presentationTime, MediaTime(duration, presentationTime.timeScale()), m_completeBlockBuffer.releaseNonNull(), isKey ? MediaSample::SampleFlags::IsSync : MediaSample::SampleFlags::None });

This would be easier to read, and less error prone if/when it is edited, if you rewrote it to set a local variable based on `m_useByteRange` and passed that to `m_completeMediaSamples.append({...`. 

Is that possible?

&gt; Source/WebCore/platform/graphics/cocoa/SourceBufferParserWebM.cpp:1188
&gt; +    if (m_useByteRange)
&gt; +        m_completeMediaSamples.append({ presentationTime, MediaTime::invalidTime(), m_packetDuration, MediaSample::ByteRange { metadata.position, metadata.size }, MediaSample::SampleFlags::IsSync });
&gt; +    else
&gt; +        m_completeMediaSamples.append({ presentationTime, MediaTime::invalidTime(), m_packetDuration, m_completeBlockBuffer.releaseNonNull(), MediaSample::SampleFlags::IsSync });

Ditto.

&gt; Source/WebKit/Shared/mac/MediaFormatReader/MediaFormatReader.cpp:148
&gt; +    // TODO: why do we need a storage queue different to reader&apos;s queue?

&quot;FIXME:&quot; is the more idiomatic way to leave a note for future WebKit work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849538</commentid>
    <comment_count>9</comment_count>
      <attachid>454193</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-08 21:57:36 -0800</bug_when>
    <thetext>Created attachment 454193
Patch

apply comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849551</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-08 23:40:07 -0800</bug_when>
    <thetext>Committed r291033 (248207@main): &lt;https://commits.webkit.org/248207@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 454193.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454096</attachid>
            <date>2022-03-08 04:09:35 -0800</date>
            <delta_ts>2022-03-08 05:12:02 -0800</delta_ts>
            <desc>Patch for review</desc>
            <filename>bug-237594-20220308230934.patch</filename>
            <type>text/plain</type>
            <size>50685</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWIzODNiMjU3MjdlODI0
YTBkZjExY2NmNjMzNjg3ZTMxM2FjMTEzZC4uM2RiMzk3OTMwYTczZDFmNjI5ODZiY2Y5NjUwMzQz
ZTI5MDJhN2M2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIyLTAzLTA4ICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBNZWRpYUZvcm1h
dFJlYWRlciBwbHVnaW4gdXNlIFdlYk1QYXJzZXIgZGlyZWN0bHkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzU5NAorICAgICAgICByZGFyOi8vODk5
NjAzMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
b3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1w
bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpieXRlUmFuZ2UgY29uc3QpOiBI
YXZlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogcGxhdGZvcm0vVmlkZW9GcmFt
ZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vVmlkZW9GcmFtZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJBVkZPYmpDU2FtcGxlOjpieXRlUmFuZ2VGb3JB
dHRhY2htZW50IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaDogRXhwb3J0IHN5bWJvbHMuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpjcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uVHJhY2tFbnRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1l
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpwcm92aWRlTWVkaWFEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZE1lZGlhRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpyZXR1cm5TYW1w
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVu
ZGluZ0F1ZGlvU2FtcGxlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJh
Y2tEYXRhOjpjcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6ZHJhaW5QZW5kaW5nU2FtcGxlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHA6CisK
IDIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGlj
IFdlYk1QYXJzZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMzg1YWZmNjY2MmIwZGJiYjIyOTAwYjc0OTcwOGUwNDlm
MmQ0MDVkYS4uNTE3MjZlNzI2YWI0NjQwYTFiYmRkZGE2MDM2MGZmYzlmN2E1ODJkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzOSBAQAorMjAyMi0wMy0wOCAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFA
YXBwbGUuY29tPgorCisgICAgICAgIEhhdmUgTWVkaWFGb3JtYXRSZWFkZXIgcGx1Z2luIHVzZSBX
ZWJNUGFyc2VyIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzc1OTQKKyAgICAgICAgcmRhcjovLzg5OTYwMzA3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlhRm9y
bWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWVkaWFG
b3JtYXRSZWFkZXI6OnBhcnNlQnl0ZVNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhRm9y
bWF0UmVhZGVyOjpwYXJzZWRJbml0aWFsaXphdGlvbkRhdGEpOgorICAgICAgICAoV2ViS2l0OjpN
ZWRpYUZvcm1hdFJlYWRlcjo6cGFyc2VkTWVkaWFEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TWVk
aWFGb3JtYXRSZWFkZXI6OmRpZFByb3ZpZGVNZWRpYURhdGEpOgorICAgICAgICAoV2ViS2l0OjpN
ZWRpYUZvcm1hdFJlYWRlcjo6ZmluaXNoUGFyc2luZyk6CisgICAgICAgICogU2hhcmVkL21hYy9N
ZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5oOgorICAgICAgICAqIFNoYXJlZC9t
YWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6TWVkaWFTYW1wbGVCeXRlUmFuZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6dHJhY2tJRCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpwbGF0Zm9ybVNhbXBsZSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpwcmVzZW50YXRpb25UaW1l
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmRlY29kZVRp
bWUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6ZHVyYXRp
b24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6c2l6ZUlu
Qnl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6cHJl
c2VudGF0aW9uU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJh
bmdlOjpmbGFncyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdl
OjpieXRlUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5n
ZTo6b2Zmc2V0VGltZXN0YW1wc0J5KToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFTYW1wbGVCeXRl
UmFuZ2U6OnNldFRpbWVzdGFtcHMpOgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRS
ZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaDoKKyAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWVk
aWFTYW1wbGVDdXJzb3I6OmNvcHlGb3JtYXREZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgICog
U2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TWVkaWFUcmFja1JlYWRlcjo6YWRkU2FtcGxlKToKKyAgICAgICAgKFdlYktp
dDo6TWVkaWFUcmFja1JlYWRlcjo6Y29weVByb3BlcnR5KToKKyAgICAgICAgKiBTaGFyZWQvbWFj
L01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuaDoKKwogMjAyMi0wMy0wNCAgSmVh
bi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgogCiAgICAgICAgIFNwbGl0IFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKaW5kZXggYTEyODI3M2E1NzZmODNiZmFlMTdi
NTcyODA4MTUyNGY2ZGJhNTIzMy4uYWQ2Zjg1NmVkYWZkZmQ5MjE3MzRkMzM3MTgxMDdjY2M3MzU4
NjQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1WaWRlb0NvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5cy5oPgorI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRl
IDx3dGYvTWVkaWFUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
CkBAIC00Nyw2ICs0OCw3IEBAIGNsYXNzIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI7CiBjbGFzcyBN
b2NrU2FtcGxlQm94OwogY2xhc3MgUHJvY2Vzc0lkZW50aXR5OwogY2xhc3MgU2hhcmVkQnVmZmVy
Oworc3RydWN0IFRyYWNrSW5mbzsKIAogc3RydWN0IFBsYXRmb3JtU2FtcGxlIHsKICAgICBlbnVt
IFR5cGUgewpAQCAtNjEsNyArNjMsNyBAQCBzdHJ1Y3QgUGxhdGZvcm1TYW1wbGUgewogICAgICAg
ICBjb25zdCBNb2NrU2FtcGxlQm94KiBtb2NrU2FtcGxlQm94OwogICAgICAgICBDTVNhbXBsZUJ1
ZmZlclJlZiBjbVNhbXBsZUJ1ZmZlcjsKICAgICAgICAgR3N0U2FtcGxlKiBnc3RTYW1wbGU7Ci0g
ICAgICAgIHN0ZDo6cGFpcjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWYsIENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IGJ5dGVSYW5nZVNhbXBsZTsKKyAgICAgICAgc3RkOjpwYWlyPE1UUGx1Z2luQnl0ZVNv
dXJjZVJlZiwgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBUcmFja0luZm8+PiBieXRlUmFu
Z2VTYW1wbGU7CiAgICAgfSBzYW1wbGU7CiB9OwogCkBAIC0xMDcsNyArMTA5LDcgQEAgcHVibGlj
OgogICAgICAgICBzaXplX3QgYnl0ZU9mZnNldCB7IDAgfTsKICAgICAgICAgc2l6ZV90IGJ5dGVM
ZW5ndGggeyAwIH07CiAgICAgfTsKLSAgICB2aXJ0dWFsIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdl
PiBieXRlUmFuZ2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBzdGQ6Om9wdGlvbmFsPEJ5dGVS
YW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAKICAgICBl
bnVtIGNsYXNzIFZpZGVvUm90YXRpb24gewogICAgICAgICBOb25lID0gMCwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVmlkZW9GcmFtZS5jcHAKaW5kZXggYTIyMThjNWRkNzQxZmZjNDY4ODU3NzFlZGQ1
MTk0YmMzMTJhN2ZkYy4uMTRjYjcwZDE3MGEwNzIxYzE3ZWJmM2YxOGQ2ZDQ4NDE1N2Y3ODcxZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5jcHAKQEAgLTEwOCwxMyArMTA4LDYg
QEAgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzIFZpZGVvRnJhbWU6OmZsYWdzKCkgY29uc3QKICAg
ICByZXR1cm4gTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpOb25lOwogfQogCi1zdGQ6Om9wdGlv
bmFsPE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2U+IFZpZGVvRnJhbWU6OmJ5dGVSYW5nZSgpIGNvbnN0
Ci17Ci0gICAgLy8gRklYTUU6IFJlbW92ZSBmcm9tIHRoZSBiYXNlIGNsYXNzLgotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KIHZvaWQgVmlk
ZW9GcmFtZTo6ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0CiB7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9WaWRlb0ZyYW1lLmgKaW5kZXggMjI4NWU4YWM3YmYwMjE0MmY5MmE5MWY3ODBlNzU5MTAyNDJh
YTZiMS4uZDk2NzRjZTc0MDU0YmNkNzQ4OGVhZWRkMmYxMjgyMjI4NDZiMWU5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaApAQCAtNzQsNyArNzQsNiBAQCBwcml2YXRlOgogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRpbWUmLCBjb25z
dCBNZWRpYVRpbWUmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8V2ViQ29yZTo6TWVk
aWFTYW1wbGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3QgZmluYWw7CiAgICAgV0VC
Q09SRV9FWFBPUlQgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbDsKLSAgICBXRUJDT1JF
X0VYUE9SVCBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgZmluYWw7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgZmluYWw7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbQpp
bmRleCBhZDdmNDUxMDFjMDZhMTg4OGMwMDhmYWVkNGE5MTkwNTYxMzgyOTNiLi42MjBhM2JlNjJh
Yjg0NTBmN2UzODY0NDg0NmY3OTg5MTIzODgxZjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpD
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgPHd0
Zi9NZWRpYVRpbWUuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8
d3RmL1ZlY3Rvci5oPgorI2ltcG9ydCA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CiAKICNpbXBvcnQg
IkNvcmVWaWRlb1NvZnRMaW5rLmgiCiAjaW1wb3J0ICJWaWRlb1Rvb2xib3hTb2Z0TGluay5oIgpA
QCAtMjcyLDYgKzI3MywyNiBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKKyAgICBzdGQ6Om9w
dGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlRm9yQXR0YWNobWVudChDRlN0cmluZ1JlZiBrZXkp
IGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGJ5dGVPZmZzZXRDRiA9IGR5bmFtaWNfY2ZfY2Fz
dDxDRk51bWJlclJlZj4oUEFMOjpDTUdldEF0dGFjaG1lbnQobV9zYW1wbGUuZ2V0KCksIGtleSwg
bnVsbHB0cikpOworICAgICAgICBpZiAoIWJ5dGVPZmZzZXRDRikKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgaW50NjRfdCBieXRlT2Zmc2V0ID0gMDsKKyAgICAg
ICAgaWYgKCFDRk51bWJlckdldFZhbHVlKGJ5dGVPZmZzZXRDRiwga0NGTnVtYmVyU0ludDY0VHlw
ZSwgJmJ5dGVPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
ICAgICBDTUl0ZW1Db3VudCBzaXplQXJyYXlFbnRyaWVzID0gMDsKKyAgICAgICAgUEFMOjpDTVNh
bXBsZUJ1ZmZlckdldFNhbXBsZVNpemVBcnJheShtX3NhbXBsZS5nZXQoKSwgMCwgbnVsbHB0ciwg
JnNpemVBcnJheUVudHJpZXMpOworICAgICAgICBpZiAoc2l6ZUFycmF5RW50cmllcyAhPSAxKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBzaXplX3Qgc2luZ2xl
U2l6ZUVudHJ5ID0gMDsKKyAgICAgICAgUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVNpemVB
cnJheShtX3NhbXBsZS5nZXQoKSwgMSwgJnNpbmdsZVNpemVFbnRyeSwgbnVsbHB0cik7CisgICAg
ICAgIHJldHVybiB7IHsgQ2hlY2tlZFNpemUoYnl0ZU9mZnNldCksIHNpbmdsZVNpemVFbnRyeSB9
IH07CisgICAgfQorCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1faW1hZ2U7CiAgICAgYm9v
bCBtX2hhc0FscGhhIHsgZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
U2FtcGxlQVZGT2JqQy5oCmluZGV4IDAyNWQwZDM0NGYzYWVhNDI4YTZlZDg3Njg2ODhjY2FiZmQz
N2EzMmQuLjg3ZmFjODUxM2Y2NDVjYzBkMTI1ZmFhZjQzNmZjNjljYjAwZWY5MzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhU2FtcGxlQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oCkBAIC02NCw3ICs2NCw2IEBA
IHB1YmxpYzoKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IG92ZXJyaWRlOwogICAgIFBs
YXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUGxhdGZv
cm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlwZTsgfQotICAgIHN0ZDo6b3B0aW9u
YWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIG9mZnNl
dFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFRp
bWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJpZGU7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0RpdmlzYWJsZSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAt
ODIsOCArODEsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0hvbW9nZW5lb3VzKCkgY29uc3Q7CiAg
ICAgVmVjdG9yPFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+PiBkaXZpZGVJbnRvSG9tb2dlbmVvdXNT
YW1wbGVzKCk7CiAKLSAgICB2b2lkIHNldEJ5dGVSYW5nZU9mZnNldChzaXplX3QpOwotCiAjaWYg
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgSEFWRShBVkNPTlRFTlRLRVlTRVNTSU9OKQogICAg
IHVzaW5nIEtleUlEcyA9IFZlY3RvcjxSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+OwogICAg
IHZvaWQgc2V0S2V5SURzKEtleUlEcyYmIGtleUlEcykgeyBtX2tleUlEcyA9IFdURk1vdmUoa2V5
SURzKTsgfQpAQCAtMTAxLDggKzk4LDYgQEAgcHJvdGVjdGVkOgogICAgIFdFQkNPUkVfRVhQT1JU
IE1lZGlhU2FtcGxlQVZGT2JqQyhDTVNhbXBsZUJ1ZmZlclJlZiwgVmlkZW9Sb3RhdGlvbiwgYm9v
bCBtaXJyb3JlZCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+TWVkaWFTYW1wbGVBVkZP
YmpDKCk7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2U+IGJ5dGVS
YW5nZUZvckF0dGFjaG1lbnQoQ0ZTdHJpbmdSZWYga2V5KSBjb25zdDsKLQogICAgIFJldGFpblB0
cjxDTVNhbXBsZUJ1ZmZlclJlZj4gbV9zYW1wbGU7CiAgICAgQXRvbVN0cmluZyBtX2lkOwogICAg
IFZpZGVvUm90YXRpb24gbV9yb3RhdGlvbiB7IFZpZGVvUm90YXRpb246Ok5vbmUgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhU2FtcGxlQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQppbmRleCA5Y2FkODlkMWM3
NmM5Y2MxMThiNDcxMjJhNTZjYmQ1N2ExMzEyZDRlLi5lNWE2MTg0ODIwNDI0NzIyNGNhNjIxNmM2
YTU0YzkxZmRkMDk2YTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVB
VkZPYmpDLm1tCkBAIC0zNCw3ICszNCw2IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NJ
bmxpbmVzLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgog
I2ltcG9ydCA8d3RmL1ByaW50U3RyZWFtLmg+Ci0jaW1wb3J0IDx3dGYvY2YvVHlwZUNhc3RzQ0Yu
aD4KIAogI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsuaCIKICNpbXBvcnQgPHBhbC9jZi9Db3Jl
TWVkaWFTb2Z0TGluay5oPgpAQCAtNTA1LDQ0ICs1MDQsNiBAQCBSZXRhaW5QdHI8Q01TYW1wbGVC
dWZmZXJSZWY+IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y2xvbmVTYW1wbGVCdWZmZXJBbmRTZXRBc0Rp
c3BsYQogICAgIHJldHVybiBhZG9wdENGKG5ld1NhbXBsZUJ1ZmZlcik7CiB9CiAKLXN0YXRpYyBD
RlN0cmluZ1JlZiBieXRlUmFuZ2VPZmZzZXRBdHRhY2htZW50S2V5KCkKLXsKLSAgICBzdGF0aWMg
Q0ZTdHJpbmdSZWYga2V5ID0gQ0ZTVFIoIldlYktpdE1lZGlhU2FtcGxlQnl0ZVJhbmdlT2Zmc2V0
Iik7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotc3RkOjpvcHRpb25hbDxNZWRpYVNhbXBsZTo6Qnl0
ZVJhbmdlPiBNZWRpYVNhbXBsZUFWRk9iakM6OmJ5dGVSYW5nZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGJ5dGVSYW5nZUZvckF0dGFjaG1lbnQoYnl0ZVJhbmdlT2Zmc2V0QXR0YWNobWVudEtleSgp
KTsKLX0KLQotdm9pZCBNZWRpYVNhbXBsZUFWRk9iakM6OnNldEJ5dGVSYW5nZU9mZnNldChzaXpl
X3QgYnl0ZU9mZnNldCkKLXsKLSAgICBpbnQ2NF90IGNoZWNrZWRPZmZzZXQgPSBDaGVja2VkSW50
NjQoYnl0ZU9mZnNldCk7Ci0gICAgYXV0byBvZmZzZXROdW1iZXIgPSBhZG9wdENGKENGTnVtYmVy
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlclNJbnQ2NFR5cGUsICZjaGVja2Vk
T2Zmc2V0KSk7Ci0gICAgUEFMOjpDTVNldEF0dGFjaG1lbnQobV9zYW1wbGUuZ2V0KCksIGJ5dGVS
YW5nZU9mZnNldEF0dGFjaG1lbnRLZXkoKSwgb2Zmc2V0TnVtYmVyLmdldCgpLCBrQ01BdHRhY2ht
ZW50TW9kZV9TaG91bGRQcm9wYWdhdGUpOwotfQotCi1zdGQ6Om9wdGlvbmFsPE1lZGlhU2FtcGxl
OjpCeXRlUmFuZ2U+IE1lZGlhU2FtcGxlQVZGT2JqQzo6Ynl0ZVJhbmdlRm9yQXR0YWNobWVudChD
RlN0cmluZ1JlZiBrZXkpIGNvbnN0Ci17Ci0gICAgYXV0byBieXRlT2Zmc2V0Q0YgPSBkeW5hbWlj
X2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KFBBTDo6Q01HZXRBdHRhY2htZW50KG1fc2FtcGxlLmdldCgp
LCBrZXksIG51bGxwdHIpKTsKLSAgICBpZiAoIWJ5dGVPZmZzZXRDRikKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgIGludDY0X3QgYnl0ZU9mZnNldCA9IDA7Ci0gICAgaWYgKCFD
Rk51bWJlckdldFZhbHVlKGJ5dGVPZmZzZXRDRiwga0NGTnVtYmVyU0ludDY0VHlwZSwgJmJ5dGVP
ZmZzZXQpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgQ01JdGVtQ291bnQg
c2l6ZUFycmF5RW50cmllcyA9IDA7Ci0gICAgUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVNp
emVBcnJheShtX3NhbXBsZS5nZXQoKSwgMCwgbnVsbHB0ciwgJnNpemVBcnJheUVudHJpZXMpOwot
ICAgIGlmIChzaXplQXJyYXlFbnRyaWVzICE9IDEpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0KLSAgICBzaXplX3Qgc2luZ2xlU2l6ZUVudHJ5ID0gMDsKLSAgICBQQUw6OkNNU2FtcGxl
QnVmZmVyR2V0U2FtcGxlU2l6ZUFycmF5KG1fc2FtcGxlLmdldCgpLCAxLCAmc2luZ2xlU2l6ZUVu
dHJ5LCBudWxscHRyKTsKLSAgICByZXR1cm4geyB7IENoZWNrZWRTaXplKGJ5dGVPZmZzZXQpLCBz
aW5nbGVTaXplRW50cnkgfSB9OwotfQotCiBDVlBpeGVsQnVmZmVyUmVmIE1lZGlhU2FtcGxlQVZG
T2JqQzo6cGl4ZWxCdWZmZXIoKSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDVlBp
eGVsQnVmZmVyUmVmPihQQUw6OkNNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIobV9zYW1wbGUu
Z2V0KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0NNVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9DTVV0aWxpdGllcy5oCmluZGV4IGFlMzkzZTBiMmQwMTdjZDRjOWFkZDdkNTRiZWJmNWIyOWM0
YzJkZWYuLmFiNzFiODdmZjYzZWQzMzhkOTVmY2RmNmIyZGQyNGY0ODM3NzAzMWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMu
aApAQCAtNDEsNyArNDEsNyBAQCBzdHJ1Y3QgVHJhY2tJbmZvOwogV0VCQ09SRV9FWFBPUlQgUmV0
YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJv
bVRyYWNrSW5mbyhjb25zdCBUcmFja0luZm8mKTsKIC8vIENvbnZlcnQgTWVkaWFTYW1wbGVzQmxv
Y2sgdG8gdGhlIGVxdWl2YWxlbnQgQ01TYW1wbGVCdWZmZXJSZWYuIElmIENNRm9ybWF0RGVzY3Jp
cHRpb25SZWYKIC8vIGlzIHNldCBpdCB3aWxsIGJlIHVzZWQsIG90aGVyd2lzZSBpdCB3aWxsIGJl
IGNyZWF0ZWQgZnJvbSB0aGUgTWVkaWFTYW1wbGVzQmxvY2sncyBUcmFja0luZm8uCi1XRUJDT1JF
X0VYUE9SVCBFeHBlY3RlZDxSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+LCBDU3RyaW5nPiB0
b0NNU2FtcGxlQnVmZmVyKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIENNRm9ybWF0RGVzY3JpcHRpb25S
ZWYpOworV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8UmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVm
PiwgQ1N0cmluZz4gdG9DTVNhbXBsZUJ1ZmZlcihNZWRpYVNhbXBsZXNCbG9jayYmLCBDTUZvcm1h
dERlc2NyaXB0aW9uUmVmID0gbnVsbHB0cik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNLmNwcAppbmRleCA5NGJiMmVkNmM1NmU3ODQ1MTBkMmY0MWUyNzhiOGNhMzk5OGYzYjBm
Li5lMWE2NDdjYWFhMGQ0Y2U2NmU0NzQzM2Q3ZjE3OTYxYjI4Zjk0MjdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNLmNwcApAQCAtNTM2LDkgKzUzNiw3IEBAIFdlYk1QYXJzZXI6Oldl
Yk1QYXJzZXIoQ2FsbGJhY2smIGNhbGxiYWNrKQogewogfQogCi1XZWJNUGFyc2VyOjp+V2ViTVBh
cnNlcigpCi17Ci19CitXZWJNUGFyc2VyOjp+V2ViTVBhcnNlcigpID0gZGVmYXVsdDsKIAogdm9p
ZCBXZWJNUGFyc2VyOjpyZXNldFN0YXRlKCkKIHsKQEAgLTU2MCw2ICs1NTgsMTMgQEAgdm9pZCBX
ZWJNUGFyc2VyOjpyZXNldCgpCiAgICAgbV9wYXJzZXItPkRpZFNlZWsoKTsKIH0KIAordm9pZCBX
ZWJNUGFyc2VyOjpjcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHRy
YWNrIDogbV90cmFja3MpCisgICAgICAgIHRyYWNrLT5jcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKCk7
CisgICAgbV9jcmVhdGVCeXRlUmFuZ2VTYW1wbGVzID0gdHJ1ZTsKK30KKwogRXhjZXB0aW9uT3I8
aW50PiBXZWJNUGFyc2VyOjpwYXJzZShTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQmJiBzZWdt
ZW50KQogewogICAgIGlmICghbV9wYXJzZXIpCkBAIC04NTEsMzIgKzg1NiwzMCBAQCBTdGF0dXMg
V2ViTVBhcnNlcjo6T25UcmFja0VudHJ5KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IFRy
YWNrRW50cnkmIHRyYWNrRQogICAgIH0KIAogICAgIFN0cmluZ1ZpZXcgY29kZWNTdHJpbmcgeyB0
cmFja0VudHJ5LmNvZGVjX2lkLnZhbHVlKCkuZGF0YSgpLCAodW5zaWduZWQpdHJhY2tFbnRyeS5j
b2RlY19pZC52YWx1ZSgpLmxlbmd0aCgpIH07CisgICAgYXV0byB0cmFjayA9IFsmXSgpIC0+IFVu
aXF1ZVJlZjxUcmFja0RhdGE+IHsKICNpZiBFTkFCTEUoVlA5KQotICAgIGlmIChjb2RlY1N0cmlu
ZyA9PSAiVl9WUDkiICYmIGlzVlA5RGVjb2RlckF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIG1fdHJh
Y2tzLmFwcGVuZChWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6VlA5LCB0cmFja0Vu
dHJ5LCAqdGhpcykpOwotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVk
KTsKLSAgICB9Ci0gICAgaWYgKGNvZGVjU3RyaW5nID09ICJWX1ZQOCIgJiYgaXNWUDhEZWNvZGVy
QXZhaWxhYmxlKCkpIHsKLSAgICAgICAgbV90cmFja3MuYXBwZW5kKFZpZGVvVHJhY2tEYXRhOjpj
cmVhdGUoQ29kZWNUeXBlOjpWUDgsIHRyYWNrRW50cnksICp0aGlzKSk7Ci0gICAgICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwotICAgIH0KKyAgICAgICAgaWYgKGNvZGVj
U3RyaW5nID09ICJWX1ZQOSIgJiYgaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAg
ICByZXR1cm4gVmlkZW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZQOSwgdHJhY2tFbnRy
eSwgKnRoaXMpOworICAgICAgICBpZiAoY29kZWNTdHJpbmcgPT0gIlZfVlA4IiAmJiBpc1ZQOERl
Y29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBWaWRlb1RyYWNrRGF0YTo6Y3Jl
YXRlKENvZGVjVHlwZTo6VlA4LCB0cmFja0VudHJ5LCAqdGhpcyk7CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShWT1JCSVMpCi0gICAgaWYgKGNvZGVjU3RyaW5nID09ICJBX1ZPUkJJUyIgJiYgaXNWb3Ji
aXNEZWNvZGVyQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgbV90cmFja3MuYXBwZW5kKEF1ZGlvVHJh
Y2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpWb3JiaXMsIHRyYWNrRW50cnksICp0aGlzKSk7Ci0g
ICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwotICAgIH0KKyAgICAg
ICAgaWYgKGNvZGVjU3RyaW5nID09ICJBX1ZPUkJJUyIgJiYgaXNWb3JiaXNEZWNvZGVyQXZhaWxh
YmxlKCkpCisgICAgICAgICAgICByZXR1cm4gQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5
cGU6OlZvcmJpcywgdHJhY2tFbnRyeSwgKnRoaXMpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoT1BV
UykKLSAgICBpZiAoY29kZWNTdHJpbmcgPT0gIkFfT1BVUyIgJiYgaXNPcHVzRGVjb2RlckF2YWls
YWJsZSgpKSB7Ci0gICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRl
KENvZGVjVHlwZTo6T3B1cywgdHJhY2tFbnRyeSwgKnRoaXMpKTsKLSAgICAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7Ci0gICAgfQorICAgICAgICBpZiAoY29kZWNTdHJp
bmcgPT0gIkFfT1BVUyIgJiYgaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAg
cmV0dXJuIEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpPcHVzLCB0cmFja0VudHJ5
LCAqdGhpcyk7CiAjZW5kaWYKKyAgICAgICAgcmV0dXJuIFRyYWNrRGF0YTo6Y3JlYXRlKENvZGVj
VHlwZTo6VW5zdXBwb3J0ZWQsIHRyYWNrRW50cnksICp0aGlzKTsKKyAgICB9KCk7CisKKyAgICBp
ZiAobV9jcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKQorICAgICAgICB0cmFjay0+Y3JlYXRlQnl0ZVJh
bmdlU2FtcGxlcygpOwogCi0gICAgbV90cmFja3MuYXBwZW5kKFRyYWNrRGF0YTo6Y3JlYXRlKENv
ZGVjVHlwZTo6VW5zdXBwb3J0ZWQsIHRyYWNrRW50cnksICp0aGlzKSk7CisgICAgbV90cmFja3Mu
YXBwZW5kKFdURk1vdmUodHJhY2spKTsKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29t
cGxldGVkKTsKIH0KIApAQCAtMTA1MSw4ICsxMDU0LDYgQEAgd2VibTo6U3RhdHVzIFdlYk1QYXJz
ZXI6OlZpZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVy
LAogICAgIGlmICghc3RhdHVzLmNvbXBsZXRlZF9vaygpKQogICAgICAgICByZXR1cm4gc3RhdHVz
OwogCi0gICAgbV9sYXN0UG9zaXRpb24gPSBtZXRhZGF0YS5wb3NpdGlvbjsKLQogICAgIGNvbnN0
ZXhwciBzaXplX3QgbWF4SGVhZGVyU2l6ZSA9IDMyOyAvLyBUaGUgbWF4aW11bSBsZW5ndGggb2Yg
YSBWUDkgdW5jb21wcmVzc2VkIGhlYWRlciBpcyAxNDQgYml0cyBhbmQgMTEgYnl0ZXMgZm9yIFZQ
OC4gUm91bmQgaGlnaC4KICAgICBzaXplX3Qgc2VnbWVudEhlYWRlckxlbmd0aCA9IHN0ZDo6bWlu
KG1heEhlYWRlclNpemUsIG1fY29tcGxldGVCbG9ja0J1ZmZlci0+c2l6ZSgpKTsKICAgICBhdXRv
IGNvbnRpZ3VvdXNCdWZmZXIgPSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcigwLCBzZWdt
ZW50SGVhZGVyTGVuZ3RoKTsKQEAgLTEwOTAsNyArMTA5MSwxMCBAQCB3ZWJtOjpTdGF0dXMgV2Vi
TVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiBy
ZWFkZXIsCiAgICAgaWYgKHRyYWNrLmRlZmF1bHRfZHVyYXRpb24uaXNfcHJlc2VudCgpKQogICAg
ICAgICBkdXJhdGlvbiA9IHRyYWNrLmRlZmF1bHRfZHVyYXRpb24udmFsdWUoKSAqIHByZXNlbnRh
dGlvblRpbWUudGltZVNjYWxlKCkgLyBrX3VzX2luX3NlY29uZHM7CiAKLSAgICBtX2NvbXBsZXRl
TWVkaWFTYW1wbGVzLmFwcGVuZCh7IHByZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUs
IE1lZGlhVGltZShkdXJhdGlvbiwgcHJlc2VudGF0aW9uVGltZS50aW1lU2NhbGUoKSksIG1fY29t
cGxldGVCbG9ja0J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBpc0tleSA/IE1lZGlhU2FtcGxlOjpT
YW1wbGVGbGFnczo6SXNTeW5jIDogTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpOb25lIH0pOwor
ICAgIGlmIChtX3VzZUJ5dGVSYW5nZSkKKyAgICAgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5h
cHBlbmQoeyBwcmVzZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1lLCBNZWRpYVRpbWUoZHVy
YXRpb24sIHByZXNlbnRhdGlvblRpbWUudGltZVNjYWxlKCkpLCBNZWRpYVNhbXBsZTo6Qnl0ZVJh
bmdlIHsgbWV0YWRhdGEucG9zaXRpb24sIG1ldGFkYXRhLnNpemUgfSwgaXNLZXkgPyBNZWRpYVNh
bXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyA6IE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6Tm9u
ZSB9KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMuYXBwZW5kKHsg
cHJlc2VudGF0aW9uVGltZSwgcHJlc2VudGF0aW9uVGltZSwgTWVkaWFUaW1lKGR1cmF0aW9uLCBw
cmVzZW50YXRpb25UaW1lLnRpbWVTY2FsZSgpKSwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLnJlbGVh
c2VOb25OdWxsKCksIGlzS2V5ID8gTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpJc1N5bmMgOiBN
ZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6Ok5vbmUgfSk7CiAKICAgICBkcmFpblBlbmRpbmdTYW1w
bGVzKCk7CiAKQEAgLTExMTYsOCArMTEyMCw2IEBAIHdlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpB
dWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwKICAg
ICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKICAgICAgICAgcmV0dXJuIHN0YXR1czsKIAot
ICAgIG1fbGFzdFBvc2l0aW9uID0gbWV0YWRhdGEucG9zaXRpb247Ci0KICAgICBpZiAoIWZvcm1h
dERlc2NyaXB0aW9uKCkpIHsKICAgICAgICAgaWYgKCF0cmFjaygpLmNvZGVjX3ByaXZhdGUuaXNf
cHJlc2VudCgpKSB7CiAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJB
dWRpbyB0cmFjayBtaXNzaW5nIG1hZ2ljIGNvb2tpZSIpOwpAQCAtMTE4MCw3ICsxMTgyLDEwIEBA
IHdlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0
YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwKICAgICBlbHNlIGlmIChmb3JtYXREZXNjcmlwdGlvbigp
ICYmICpmb3JtYXREZXNjcmlwdGlvbigpICE9ICptX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmluZm8o
KSkKICAgICAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCi0gICAgbV9jb21wbGV0ZU1lZGlh
U2FtcGxlcy5hcHBlbmQoeyBwcmVzZW50YXRpb25UaW1lLCBNZWRpYVRpbWU6OmludmFsaWRUaW1l
KCksIG1fcGFja2V0RHVyYXRpb24sIG1fY29tcGxldGVCbG9ja0J1ZmZlci5yZWxlYXNlTm9uTnVs
bCgpLCBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyB9KTsKKyAgICBpZiAobV91c2VC
eXRlUmFuZ2UpCisgICAgICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMuYXBwZW5kKHsgcHJlc2Vu
dGF0aW9uVGltZSwgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpLCBtX3BhY2tldER1cmF0aW9uLCBN
ZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlIHsgbWV0YWRhdGEucG9zaXRpb24sIG1ldGFkYXRhLnNpemUg
fSwgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpJc1N5bmMgfSk7CisgICAgZWxzZQorICAgICAg
ICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmFwcGVuZCh7IHByZXNlbnRhdGlvblRpbWUsIE1lZGlh
VGltZTo6aW52YWxpZFRpbWUoKSwgbV9wYWNrZXREdXJhdGlvbiwgbV9jb21wbGV0ZUJsb2NrQnVm
ZmVyLnJlbGVhc2VOb25OdWxsKCksIE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jIH0p
OwogCiAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCkBAIC0xMjk5LDkgKzEzMDQsOSBAQCBS
ZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2ViTT4gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y3Jl
YXRlKGNvbnN0IENvbnRlbnRUeXBlJgogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIFdl
Yk1QYXJzZXI6OnByb3ZpZGVNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGVzLCB1
aW50NjRfdCBwb3NpdGlvbikKK3ZvaWQgV2ViTVBhcnNlcjo6cHJvdmlkZU1lZGlhRGF0YShNZWRp
YVNhbXBsZXNCbG9jayYmIHNhbXBsZXMpCiB7Ci0gICAgbV9jYWxsYmFjay5wYXJzZWRNZWRpYURh
dGEoV1RGTW92ZShzYW1wbGVzKSwgcG9zaXRpb24pOworICAgIG1fY2FsbGJhY2sucGFyc2VkTWVk
aWFEYXRhKFdURk1vdmUoc2FtcGxlcykpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OnBhcnNlZEluaXRpYWxpemF0aW9uRGF0YShJbml0aWFsaXphdGlvblNlZ21lbnQmJiBpbml0
aWFsaXphdGlvblNlZ21lbnQpCkBAIC0xMzEyLDcgKzEzMTcsNyBAQCB2b2lkIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OnBhcnNlZEluaXRpYWxpemF0aW9uRGF0YShJbml0aWFsaXphdGlvblNlZ21l
bnQmJiBpbgogICAgIH0pOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNl
ZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZXNCbG9jaywgdWludDY0X3QgcG9z
aXRpb24pCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZE1lZGlhRGF0YShNZWRp
YVNhbXBsZXNCbG9jayYmIHNhbXBsZXNCbG9jaykKIHsKICAgICBpZiAoIXNhbXBsZXNCbG9jay5p
bmZvKCkpIHsKICAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJO
byBUcmFja0luZm8gc2V0Iik7CkBAIC0xMzM2LDcgKzEzNDEsNyBAQCB2b2lkIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OnBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZXNC
bG9jaywgdQogICAgIH0KIAogICAgIGlmIChzYW1wbGVzQmxvY2suaXNWaWRlbygpKSB7Ci0gICAg
ICAgIHJldHVyblNhbXBsZXMoV1RGTW92ZShzYW1wbGVzQmxvY2spLCBtX3ZpZGVvRm9ybWF0RGVz
Y3JpcHRpb24uZ2V0KCksIHBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuU2FtcGxlcyhXVEZNb3Zl
KHNhbXBsZXNCbG9jayksIG1fdmlkZW9Gb3JtYXREZXNjcmlwdGlvbi5nZXQoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTEzNDQsMTcgKzEzNDksMTcgQEAgdm9pZCBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGVz
QmxvY2ssIHUKICAgICBpZiAobV9xdWV1ZWRBdWRpb1NhbXBsZXMuc2l6ZSgpKSB7CiAgICAgICAg
IGF1dG8mIGxhc3RTYW1wbGUgPSBtX3F1ZXVlZEF1ZGlvU2FtcGxlcy5sYXN0KCk7CiAgICAgICAg
IGlmIChsYXN0U2FtcGxlLmR1cmF0aW9uICsgbGFzdFNhbXBsZS5wcmVzZW50YXRpb25UaW1lICE9
IHNhbXBsZXNCbG9jay5maXJzdCgpLnByZXNlbnRhdGlvblRpbWUpCi0gICAgICAgICAgICBmbHVz
aFBlbmRpbmdBdWRpb1NhbXBsZXMocG9zaXRpb24pOworICAgICAgICAgICAgZmx1c2hQZW5kaW5n
QXVkaW9TYW1wbGVzKCk7CiAgICAgfQogICAgIGZvciAoYXV0byYgc2FtcGxlIDogc2FtcGxlc0Js
b2NrKQogICAgICAgICBtX3F1ZXVlZEF1ZGlvRHVyYXRpb24gKz0gc2FtcGxlLmR1cmF0aW9uOwog
ICAgIG1fcXVldWVkQXVkaW9TYW1wbGVzLmFwcGVuZChXVEZNb3ZlKHNhbXBsZXNCbG9jaykpOwog
ICAgIGlmIChtX3F1ZXVlZEF1ZGlvRHVyYXRpb24gPCBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0
aW9uKQogICAgICAgICByZXR1cm47Ci0gICAgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHBvc2l0
aW9uKTsKKyAgICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoKTsKIH0KIAotdm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpyZXR1cm5TYW1wbGVzKE1lZGlhU2FtcGxlc0Jsb2NrJiYgYmxvY2ss
IENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZGVzY3JpcHRpb24sIHN0ZDo6b3B0aW9uYWw8dWludDY0
X3Q+IHBvc2l0aW9uKQordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpyZXR1cm5TYW1wbGVz
KE1lZGlhU2FtcGxlc0Jsb2NrJiYgYmxvY2ssIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZGVzY3Jp
cHRpb24pCiB7CiAgICAgaWYgKGJsb2NrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTM2NSwxMyArMTM3MCwxMSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJldHVyblNh
bXBsZXMoTWVkaWFTYW1wbGVzQmxvY2smJiBibG9jaywgQ01Gb3JtYXREZQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRyYWNrSUQgPSBibG9jay5pbmZvKCktPnRyYWNr
SUQsIHNhbXBsZUJ1ZmZlciA9IFdURk1vdmUoZXhwZWN0ZWRCdWZmZXIudmFsdWUoKSksIHBvc2l0
aW9uXSAoKSBtdXRhYmxlIHsKKyAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdHJhY2tJRCA9IGJsb2NrLmluZm8oKS0+
dHJhY2tJRCwgc2FtcGxlQnVmZmVyID0gV1RGTW92ZShleHBlY3RlZEJ1ZmZlci52YWx1ZSgpKV0g
KCkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2sp
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0byBtZWRpYVNhbXBsZSA9IE1lZGlh
U2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJhY2tJRCk7Ci0gICAg
ICAgIGlmIChwb3NpdGlvbikKLSAgICAgICAgICAgIG1lZGlhU2FtcGxlLT5zZXRCeXRlUmFuZ2VP
ZmZzZXQoKnBvc2l0aW9uKTsKIAogICAgICAgICBtX2RpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFj
ayhXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwgZW1wdHlTdHJpbmcoKSk7CiAgICAgfSk7
CkBAIC0xMzkxLDEzICsxMzk0LDEzIEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y29u
dGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKFJlZjxTCiAgICAgICAg
IG1fZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJ
RENhbGxiYWNrKFdURk1vdmUoa2V5SUQpLCB0cmFja0lEKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gcG9zaXRpb24pCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGlu
Z0F1ZGlvU2FtcGxlcygpCiB7CiAgICAgaWYgKCFtX2F1ZGlvRm9ybWF0RGVzY3JpcHRpb24pCiAg
ICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9hdWRpb0luZm8pOwogICAgIG1fcXVldWVkQXVk
aW9TYW1wbGVzLnNldEluZm8obV9hdWRpb0luZm8uY29weVJlZigpKTsKLSAgICByZXR1cm5TYW1w
bGVzKFdURk1vdmUobV9xdWV1ZWRBdWRpb1NhbXBsZXMpLCBtX2F1ZGlvRm9ybWF0RGVzY3JpcHRp
b24uZ2V0KCksIHBvc2l0aW9uKTsKKyAgICByZXR1cm5TYW1wbGVzKFdURk1vdmUobV9xdWV1ZWRB
dWRpb1NhbXBsZXMpLCBtX2F1ZGlvRm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkpOwogCiAgICAgbV9x
dWV1ZWRBdWRpb1NhbXBsZXMgPSB7IH07CiAgICAgbV9xdWV1ZWRBdWRpb0R1cmF0aW9uID0geyB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IGZmY2VkMzQyNWQ2ZTUyNTQyYTBh
ZmZhYWU4NzcwZjVjMmM2MTA4YzEuLjg3YTk0MDNhOGYzZmM1MGI2OGFhZGU4MTU3OTVhMjkzZjU3
NzYxYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKKyNp
bmNsdWRlICJNZWRpYVNhbXBsZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1
ZGUgIlNvdXJjZUJ1ZmZlclBhcnNlci5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9U
eXBlcy5oPgpAQCAtNTIsMzAgKzUzLDMwIEBAIGNsYXNzIFdlYk1QYXJzZXIgOiBwcml2YXRlIHdl
Ym06OkNhbGxiYWNrIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBjbGFzcyBDYWxsYmFjayB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAg
IHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlZFRyaW1taW5nRGF0YSh1aW50NjRf
dCwgY29uc3QgTWVkaWFUaW1lJikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZWRJbml0
aWFsaXphdGlvbkRhdGEoU291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQm
JikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VkTWVkaWFEYXRhKE1lZGlhU2FtcGxl
c0Jsb2NrJiYsIHVpbnQ2NF90KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZWRNZWRp
YURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJikgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2Fu
RGVjcnlwdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBj
b250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoUmVmPFNoYXJlZEJ1
ZmZlcj4mJiwgdWludDY0X3QpIHsgfQogICAgICAgICB2aXJ0dWFsIH5DYWxsYmFjaygpID0gZGVm
YXVsdDsKICAgICB9OwogCi0gICAgV2ViTVBhcnNlcihDYWxsYmFjayYpOwotICAgIH5XZWJNUGFy
c2VyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgV2ViTVBhcnNlcihDYWxsYmFjayYpOworICAgIFdF
QkNPUkVfRVhQT1JUIH5XZWJNUGFyc2VyKCk7CiAKICAgICBjbGFzcyBTZWdtZW50UmVhZGVyOwog
Ci0gICAgRXhjZXB0aW9uT3I8aW50PiBwYXJzZShTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQm
Jik7Ci0gICAgdm9pZCByZXNldFN0YXRlKCk7Ci0gICAgdm9pZCByZXNldCgpOwotICAgIHZvaWQg
aW52YWxpZGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY3JlYXRlQnl0ZVJhbmdlU2Ft
cGxlcygpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPGludD4gcGFyc2UoU291cmNl
QnVmZmVyUGFyc2VyOjpTZWdtZW50JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRT
dGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGludmFsaWRhdGUoKTsKICAgICBjb25zdCB3ZWJtOjpTdGF0dXMmIHN0YXR1cygp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAKLSAgICB2b2lkIHByb3ZpZGVNZWRpYURhdGEo
TWVkaWFTYW1wbGVzQmxvY2smJiwgdWludDY0X3QpOworICAgIHZvaWQgcHJvdmlkZU1lZGlhRGF0
YShNZWRpYVNhbXBsZXNCbG9jayYmKTsKIAotICAgIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExvZ2dl
ciYsIGNvbnN0IHZvaWQqIGlkZW50aWZpZXIpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
TG9nZ2VyKGNvbnN0IExvZ2dlciYsIGNvbnN0IHZvaWQqIGlkZW50aWZpZXIpOwogICAgIGNvbnN0
IExvZ2dlciogbG9nZ2VyUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KICAg
ICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dJZGVudGlm
aWVyOyB9CiAKQEAgLTEzNCw2ICsxMzUsOCBAQCBwdWJsaWM6CiAgICAgICAgIHdlYm06OlRyYWNr
RW50cnkmIHRyYWNrKCkgeyByZXR1cm4gbV90cmFjazsgfQogICAgICAgICBUcmFja0luZm86OlRy
YWNrVHlwZSB0cmFja1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrVHlwZTsgfQogCisgICAg
ICAgIHZvaWQgY3JlYXRlQnl0ZVJhbmdlU2FtcGxlcygpIHsgbV91c2VCeXRlUmFuZ2UgPSB0cnVl
OyB9CisKICAgICAgICAgUmVmUHRyPFRyYWNrSW5mbz4gZm9ybWF0RGVzY3JpcHRpb24oKSBjb25z
dCB7IHJldHVybiBtX2Zvcm1hdERlc2NyaXB0aW9uLmNvcHlSZWYoKTsgfQogICAgICAgICB2b2lk
IHNldEZvcm1hdERlc2NyaXB0aW9uKFJlZjxUcmFja0luZm8+JiYgZGVzY3JpcHRpb24pCiAgICAg
ICAgIHsKQEAgLTE2Nyw3ICsxNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmICghbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5zaXplKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgbV9wYXJzZXIucHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKG1fY29t
cGxldGVNZWRpYVNhbXBsZXMpLCBtX2xhc3RQb3NpdGlvbik7CisgICAgICAgICAgICBtX3BhcnNl
ci5wcm92aWRlTWVkaWFEYXRhKFdURk1vdmUobV9jb21wbGV0ZU1lZGlhU2FtcGxlcykpOwogICAg
ICAgICAgICAgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOwogICAgICAgICB9CiAKQEAgLTE3
Niw3ICsxNzksNyBAQCBwdWJsaWM6CiAgICAgICAgIHdlYm06OlN0YXR1cyByZWFkRnJhbWVEYXRh
KHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCogYnl0
ZXNSZW1haW5pbmcpOwogICAgICAgICBSZWZQdHI8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4gbV9j
b21wbGV0ZUJsb2NrQnVmZmVyOwogICAgICAgICBNZWRpYVNhbXBsZXNCbG9jayBtX2NvbXBsZXRl
TWVkaWFTYW1wbGVzOwotICAgICAgICB1aW50NjRfdCBtX2xhc3RQb3NpdGlvbiB7IDAgfTsKKyAg
ICAgICAgYm9vbCBtX3VzZUJ5dGVSYW5nZSB7IGZhbHNlIH07CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBDb2RlY1R5cGUgbV9jb2RlYzsKQEAgLTI3OSw2ICsyODIsNyBAQCBwcml2YXRlOgogICAg
IGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKICAgICB1aW50NjRfdCBt
X25leHRDaGlsZElkZW50aWZpZXIgeyAwIH07CiAgICAgQ2FsbGJhY2smIG1fY2FsbGJhY2s7Cisg
ICAgYm9vbCBtX2NyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMgeyBmYWxzZSB9OwogfTsKIAogY2xhc3Mg
U291cmNlQnVmZmVyUGFyc2VyV2ViTSA6IHB1YmxpYyBTb3VyY2VCdWZmZXJQYXJzZXIsIFdlYk1Q
YXJzZXI6OkNhbGxiYWNrIHsKQEAgLTMwOCw3ICszMTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
ZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwogICAgIH0K
IAotICAgIHZvaWQgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHN0ZDo6b3B0aW9uYWw8dWludDY0
X3Q+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygp
OwogICAgIHZvaWQgc2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQpOwogICAgIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYsIGNvbnN0IHZv
aWQqIGlkZW50aWZpZXIpIGZpbmFsOwpAQCAtMzE4LDEyICszMjIsMTIgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICAvLyBXZWJNUGFyc2VyOjpDYWxsYmFjawogICAgIHZvaWQgcGFyc2VkSW5pdGlh
bGl6YXRpb25EYXRhKFNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYp
IGZpbmFsOwotICAgIHZvaWQgcGFyc2VkTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIHVp
bnQ2NF90KSBmaW5hbDsKKyAgICB2b2lkIHBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9j
ayYmKSBmaW5hbDsKICAgICBib29sIGNhbkRlY3J5cHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiAh
IW1fZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJ
RENhbGxiYWNrOyB9CiAgICAgdm9pZCBjb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0
YUZvclRyYWNrSUQoUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgdWludDY0X3QpIGZpbmFsOwogICAgIHZv
aWQgcGFyc2VkVHJpbW1pbmdEYXRhKHVpbnQ2NF90LCBjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsK
LSAgICAKLSAgICB2b2lkIHJldHVyblNhbXBsZXMoTWVkaWFTYW1wbGVzQmxvY2smJiwgQ01Gb3Jt
YXREZXNjcmlwdGlvblJlZiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4pOworCisgICAgdm9pZCBy
ZXR1cm5TYW1wbGVzKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIENNRm9ybWF0RGVzY3JpcHRpb25SZWYp
OwogCiAgICAgRGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayBtX2RpZFBhcnNlVHJpbW1pbmdE
YXRhQ2FsbGJhY2s7CiAgICAgV2ViTVBhcnNlciBtX3BhcnNlcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2Ft
cGxlR1N0cmVhbWVyLmgKaW5kZXggMmI3ZGQ0NDRjNTNkMmQ2YmQwN2E5YjgzOGQ2NzliNjRiMzc0
OWFmNy4uYmU0YTBmZTNjM2M5OTdhOGRiZTEyZmI2ZjRmZjlkMWFlYzhhZGRlNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxl
R1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmgKQEAgLTYxLDcgKzYxLDYgQEAgcHVibGljOgogICAg
IFNhbXBsZUZsYWdzIGZsYWdzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9mbGFnczsgfQog
ICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
UGxhdGZvcm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gUGxhdGZvcm1TYW1wbGU6OkdTdHJlYW1lclNhbXBsZVR5cGU7IH0KLSAgICBzdGQ6
Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
c3RkOjpudWxsb3B0OyB9CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IGdldFJHQkFJbWFnZURhdGEo
KSBjb25zdCBmaW5hbDsKICAgICBWaWRlb1JvdGF0aW9uIHZpZGVvUm90YXRpb24oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3ZpZGVvUm90YXRpb247IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNl
QnVmZmVyUHJpdmF0ZS5jcHAKaW5kZXggM2NmN2VlNjUzZWM4MTNkZmJhZTMzZWY5M2EwYzMzZmUy
YzYzOTRlMC4uZDRjZmU0MThkNWM2MTIwNjU3ZGUwZDBiYzAyMDM2ZmIxMGE4MjBmYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNl
QnVmZmVyUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRp
YXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKQEAgLTYyLDcgKzYyLDYgQEAgcHJp
dmF0ZToKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IG92ZXJyaWRlOwogICAgIFBsYXRm
b3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUGxhdGZvcm1T
YW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
UGxhdGZvcm1TYW1wbGU6Ok1vY2tTYW1wbGVCb3hUeXBlOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxC
eXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsgfQogICAgIEZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gRmxvYXRTaXplKCk7IH0KICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKICAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmIG9m
ZnNldCkgb3ZlcnJpZGUgeyBtX2JveC5vZmZzZXRUaW1lc3RhbXBzQnkob2Zmc2V0KTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlh
Rm9ybWF0UmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJl
YWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAKaW5kZXggMWMzMzhjNmEzZThjYmVmYjRjNmU0YmFm
NTAyMWIxNTUyNTQ4ZmJmYi4uMGMyZTVkYWQ5YzZmODc3ZmYzZTYyODg5MmVmMzkwOTJiZjJkODJi
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVy
L01lZGlhRm9ybWF0UmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVk
aWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCkBAIC0xMzIsNDAgKzEzMiwxMiBA
QCB2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpwYXJzZUJ5dGVTb3VyY2UoUmV0YWluUHRyPE1UUGx1
Z2luQnl0ZVNvdXJjZVJlZj4mJiBieXRlUwogewogICAgIEFTU0VSVChpc01haW5SdW5Mb29wKCkp
OwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbnRlbnRUeXBlPiBjb250ZW50VHlwZSgi
dmlkZW8vd2VibSJfcyk7Ci0gICAgYXV0byBwYXJzZXIgPSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpjcmVhdGUoY29udGVudFR5cGUpOwotICAgIGlmICghcGFyc2VyKSB7Ci0gICAgICAgIExvY2tl
ciBsb2NrZXIgeyBtX3BhcnNlVHJhY2tzTG9jayB9OwotICAgICAgICBtX3BhcnNlVHJhY2tzU3Rh
dHVzID0ga01UUGx1Z2luRm9ybWF0UmVhZGVyRXJyb3JfQWxsb2NhdGlvbkZhaWx1cmU7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoIW1fbG9nZ2VyKSB7CiAgICAgICAgIG1fbG9n
Z2VyID0gJkRvY3VtZW50OjpzaGFyZWRMb2dnZXIoKTsKICAgICAgICAgbV9sb2dJZGVudGlmaWVy
ID0gbmV4dExvZ0lkZW50aWZpZXIoKTsKICAgICB9CiAKICAgICBBTFdBWVNfTE9HX0lGX1BPU1NJ
QkxFKExPR0lERU5USUZJRVIpOwotICAgIHBhcnNlci0+c2V0TG9nZ2VyKCptX2xvZ2dlciwgbV9s
b2dJZGVudGlmaWVyKTsKLQotICAgIC8vIFNldCBhIG1pbmltdW0gYXVkaW8gc2FtcGxlIGR1cmF0
aW9uIG9mIDAgc28gdGhlIHBhcnNlciBjcmVhdGVzIGluZGl2aXNpYmxlIHNhbXBsZXMgd2l0aCBi
eXRlIHNvdXJjZSByYW5nZXMuCi0gICAgcGFyc2VyLT5zZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJh
dGlvbigwKTsKLQotICAgIHBhcnNlci0+c2V0Q2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW10o
RnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKSB7Ci0gICAgICAgIE1lZGlhVHJhY2tSZWFkZXI6
OnN0b3JhZ2VRdWV1ZSgpLmRpc3BhdGNoKFdURk1vdmUoZnVuY3Rpb24pKTsKLSAgICB9KTsKLQot
ICAgIHBhcnNlci0+c2V0RGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxsYmFjayhbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dKFNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5pdGlh
bGl6YXRpb25TZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdtZW50KSB7Ci0gICAgICAgIGRpZFBh
cnNlVHJhY2tzKFdURk1vdmUoaW5pdGlhbGl6YXRpb25TZWdtZW50KSwgbm9FcnIpOwotICAgIH0p
OwotCi0gICAgcGFyc2VyLT5zZXREaWRFbmNvdW50ZXJFcnJvckR1cmluZ1BhcnNpbmdDYWxsYmFj
ayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dKHVpbnQ2NF90IGVycm9yQ29k
ZSkgewotICAgICAgICBkaWRQYXJzZVRyYWNrcyh7IH0sIGVycm9yQ29kZSk7Ci0gICAgfSk7Ci0K
LSAgICBwYXJzZXItPnNldERpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjayhbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dKFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+JiYgbWVkaWFT
YW1wbGUsIHVpbnQ2NF90IHRyYWNrSUQsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKSB7Ci0gICAg
ICAgIGRpZFByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShtZWRpYVNhbXBsZSksIHRyYWNrSUQsIG1l
ZGlhVHlwZSk7Ci0gICAgfSk7CiAKICAgICBMb2NrZXIgbG9ja2VyIHsgbV9wYXJzZVRyYWNrc0xv
Y2sgfTsKICAgICBtX2J5dGVTb3VyY2UgPSBXVEZNb3ZlKGJ5dGVTb3VyY2UpOwpAQCAtMTczLDE0
ICsxNDUsMzQgQEAgdm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6cGFyc2VCeXRlU291cmNlKFJldGFp
blB0cjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWY+JiYgYnl0ZVMKICAgICBtX2R1cmF0aW9uID0gTWVk
aWFUaW1lOjppbnZhbGlkVGltZSgpOwogICAgIG1fdHJhY2tSZWFkZXJzLmNsZWFyKCk7CiAKLSAg
ICByZWFkZXJRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRo
aXMgfSwgYnl0ZVNvdXJjZSA9IG1fYnl0ZVNvdXJjZSwgcGFyc2VyID0gcGFyc2VyLnJlbGVhc2VO
b25OdWxsKCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIHBhcnNlci0+YXBwZW5kRGF0YShXVEZNb3Zl
KGJ5dGVTb3VyY2UpKTsKLSAgICAgICAgTWVkaWFUcmFja1JlYWRlcjo6c3RvcmFnZVF1ZXVlKCku
ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBwYXJzZXIgPSBX
VEZNb3ZlKHBhcnNlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaW5pc2hQYXJzaW5nKFdU
Rk1vdmUocGFyc2VyKSk7CisgICAgLy8gVE9ETzogd2h5IGRvIHdlIG5lZWQgYSBzdG9yYWdlIHF1
ZXVlIGRpZmZlcmVudCB0byByZWFkZXIncyBxdWV1ZT8KKyAgICByZWFkZXJRdWV1ZSgpLmRpc3Bh
dGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgYnl0ZVNvdXJjZSA9IG1f
Ynl0ZVNvdXJjZV0oKSBtdXRhYmxlIHsKKyAgICAgICAgV2ViTVBhcnNlciBwYXJzZXIoKnRoaXMp
OworICAgICAgICBwYXJzZXIuc2V0TG9nZ2VyKCptX2xvZ2dlciwgbV9sb2dJZGVudGlmaWVyKTsK
KyAgICAgICAgcGFyc2VyLmNyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMoKTsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBwYXJzZXIucGFyc2UoV1RGTW92ZShieXRlU291cmNlKSk7CisgICAgICAgIE1lZGlh
VHJhY2tSZWFkZXI6OnN0b3JhZ2VRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gUmVmIHsgKnRoaXMgfSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmICgh
cmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZXR1cm5WYWx1ZSgpKQorICAgICAgICAg
ICAgICAgIGRpZFBhcnNlVHJhY2tzKHsgfSwgcmVzdWx0LnJldHVyblZhbHVlKCkpOworICAgICAg
ICAgICAgZmluaXNoUGFyc2luZygpOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KIAordm9pZCBN
ZWRpYUZvcm1hdFJlYWRlcjo6cGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFNvdXJjZUJ1ZmZlclBh
cnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdtZW50KQorewor
ICAgIE1lZGlhVHJhY2tSZWFkZXI6OnN0b3JhZ2VRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgaW5pdGlhbGl6YXRpb25TZWdtZW50ID0gV1RGTW92
ZShpbml0aWFsaXphdGlvblNlZ21lbnQpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgZGlkUGFyc2VU
cmFja3MoV1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpLCBub0Vycik7CisgICAgfSk7Cit9
CisKK3ZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OnBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNC
bG9jayYmIG1lZGlhU2FtcGxlcykKK3sKKyAgICBNZWRpYVRyYWNrUmVhZGVyOjpzdG9yYWdlUXVl
dWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIG1lZGlh
U2FtcGxlcyA9IFdURk1vdmUobWVkaWFTYW1wbGVzKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGRp
ZFByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShtZWRpYVNhbXBsZXMpKTsKKyAgICB9KTsKK30KKwog
dm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6ZGlkUGFyc2VUcmFja3MoU291cmNlQnVmZmVyUHJpdmF0
ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYgc2VnbWVudCwgdWludDY0X3QgZXJyb3JD
b2RlKQogewogICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKQEAgLTIyNSwyMCArMjE3LDIw
IEBAIHZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OmRpZFBhcnNlVHJhY2tzKFNvdXJjZUJ1ZmZlclBy
aXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uCiAgICAgbV9pbml0ID0gdHJ1ZTsKIH0KIAotdm9p
ZCBNZWRpYUZvcm1hdFJlYWRlcjo6ZGlkUHJvdmlkZU1lZGlhRGF0YShSZWY8TWVkaWFTYW1wbGVB
VkZPYmpDPiYmIG1lZGlhU2FtcGxlLCB1aW50NjRfdCB0cmFja0lELCBjb25zdCBTdHJpbmcmKQor
dm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6ZGlkUHJvdmlkZU1lZGlhRGF0YShNZWRpYVNhbXBsZXNC
bG9jayYmIG1lZGlhU2FtcGxlcykKIHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAK
ICAgICBMb2NrZXIgbG9ja2VyIHsgbV9wYXJzZVRyYWNrc0xvY2sgfTsKICAgICBhdXRvIHRyYWNr
SW5kZXggPSBtX3RyYWNrUmVhZGVycy5maW5kSWYoWyZdKGF1dG8mIHRyYWNrKSB7Ci0gICAgICAg
IHJldHVybiB0cmFjay0+dHJhY2tJRCgpID09IHRyYWNrSUQ7CisgICAgICAgIHJldHVybiB0cmFj
ay0+dHJhY2tJRCgpID09IG1lZGlhU2FtcGxlcy5pbmZvKCktPnRyYWNrSUQ7CiAgICAgfSk7CiAK
ICAgICBpZiAodHJhY2tJbmRleCAhPSBub3RGb3VuZCkKLSAgICAgICAgbV90cmFja1JlYWRlcnNb
dHJhY2tJbmRleF0tPmFkZFNhbXBsZShXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgbV9ieXRlU291cmNl
LmdldCgpKTsKKyAgICAgICAgbV90cmFja1JlYWRlcnNbdHJhY2tJbmRleF0tPmFkZFNhbXBsZShX
VEZNb3ZlKG1lZGlhU2FtcGxlcyksIG1fYnl0ZVNvdXJjZS5nZXQoKSk7CiB9CiAKLXZvaWQgTWVk
aWFGb3JtYXRSZWFkZXI6OmZpbmlzaFBhcnNpbmcoUmVmPFNvdXJjZUJ1ZmZlclBhcnNlcj4mJiBw
YXJzZXIpCit2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpmaW5pc2hQYXJzaW5nKCkKIHsKICAgICBB
U1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAgICAgQUxXQVlTX0xPR19JRl9QT1NTSUJMRShMT0dJ
REVOVElGSUVSKTsKQEAgLTI1OCwxMSArMjUwLDYgQEAgdm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6
ZmluaXNoUGFyc2luZyhSZWY8U291cmNlQnVmZmVyUGFyc2VyPiYmIHBhcnNlcikKICAgICAgICAg
aWYgKGdyZWF0ZXN0UHJlc2VudGF0aW9uVGltZS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBtX2R1
cmF0aW9uID0gZ3JlYXRlc3RQcmVzZW50YXRpb25UaW1lOwogICAgIH0KLQotICAgIHBhcnNlci0+
c2V0RGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxsYmFjayhudWxscHRyKTsKLSAgICBwYXJz
ZXItPnNldERpZEVuY291bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNrKG51bGxwdHIpOwot
ICAgIHBhcnNlci0+c2V0RGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKG51bGxwdHIpOwotICAg
IHBhcnNlci0+cmVzZXRQYXJzZXJTdGF0ZSgpOwogfQogCiBPU1N0YXR1cyBNZWRpYUZvcm1hdFJl
YWRlcjo6Y29weVByb3BlcnR5KENGU3RyaW5nUmVmIGtleSwgQ0ZBbGxvY2F0b3JSZWYgYWxsb2Nh
dG9yLCB2b2lkKiB2YWx1ZUNvcHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuaCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5oCmluZGV4IDE1
ZDU1NzM2MzM4MTc0NjBjMmU2MjA0NDE5MDEwMjNjZjg2YjRhOTMuLjFhNDhjMTY4MGU4NzVkYzYy
NTIyODc0MTVmNTQ4OGM5MmM1ODgwMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5oCkBA
IC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKIAogI2luY2x1
ZGUgIkNvcmVNZWRpYVdyYXBwZWQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NvdXJjZUJ1ZmZlclBh
cnNlcldlYk0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQu
aD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KQEAg
LTM2LDE1ICszNywxNSBAQAogREVDTEFSRV9DT1JFX01FRElBX1RSQUlUUyhGb3JtYXRSZWFkZXIp
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBNZWRpYVNhbXBsZUFWRk9iakM7Ci1jbGFz
cyBTb3VyY2VCdWZmZXJQYXJzZXI7CitjbGFzcyBNZWRpYVNhbXBsZXNCbG9jazsKK2NsYXNzIFdl
Yk1QYXJzZXI7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBNZWRpYVRyYWNrUmVh
ZGVyOwogCi1jbGFzcyBNZWRpYUZvcm1hdFJlYWRlciBmaW5hbCA6IHB1YmxpYyBDb3JlTWVkaWFX
cmFwcGVkPE1lZGlhRm9ybWF0UmVhZGVyPiB7CitjbGFzcyBNZWRpYUZvcm1hdFJlYWRlciBmaW5h
bCA6IHB1YmxpYyBDb3JlTWVkaWFXcmFwcGVkPE1lZGlhRm9ybWF0UmVhZGVyPiAsIHB1YmxpYyBX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpDYWxsYmFjayB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQ29yZU1l
ZGlhV3JhcHBlZDxNZWRpYUZvcm1hdFJlYWRlcj46OnVud3JhcDsKIApAQCAtNjQsMTIgKzY1LDE2
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTWVkaWFGb3JtYXRSZWFkZXIoQWxs
b2NhdG9yJiYpOwogCisgICAgLy8gV2ViTVBhcnNlcjo6Q2FsbGJhY2sKKyAgICB2b2lkIHBhcnNl
ZEluaXRpYWxpemF0aW9uRGF0YShXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxp
emF0aW9uU2VnbWVudCYmKSBmaW5hbDsKKyAgICB2b2lkIHBhcnNlZE1lZGlhRGF0YShXZWJDb3Jl
OjpNZWRpYVNhbXBsZXNCbG9jayYmKSBmaW5hbDsKKwogICAgIHZvaWQgcGFyc2VCeXRlU291cmNl
KFJldGFpblB0cjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWY+JiYpOwogICAgIHZvaWQgZGlkUGFyc2VU
cmFja3MoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25T
ZWdtZW50JiYsIHVpbnQ2NF90IGVycm9yQ29kZSk7CiAgICAgdm9pZCBkaWRTZWxlY3RWaWRlb1Ry
YWNrKFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlJiwgYm9vbCkgeyB9CiAgICAgdm9pZCBkaWRF
bmFibGVBdWRpb1RyYWNrKFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlJiwgYm9vbCkgeyB9Ci0g
ICAgdm9pZCBkaWRQcm92aWRlTWVkaWFEYXRhKFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9i
akM+JiYsIHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGZpbmlzaFBhcnNpbmco
UmVmPFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcj4mJik7CisgICAgdm9pZCBkaWRQcm92aWRl
TWVkaWFEYXRhKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrJiYpOworICAgIHZvaWQgZmluaXNo
UGFyc2luZygpOwogCiAgICAgLy8gQ01CYXNlQ2xhc3MKICAgICBTdHJpbmcgZGVidWdEZXNjcmlw
dGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJXZWJLaXQ6Ok1lZGlhRm9ybWF0UmVhZGVyIl9z
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFk
ZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcAppbmRleCA4OWM3OTJmZTVk
NDVlNDU5ODg0MTQzZjU0NDI5MDE2ZDY3MmM0ZTc1Li43NTYyNTJjNDIxZjc3NDAyZGNhZTMzNWI2
MmM5NTdjZjAyYzFhNDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVk
aWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAK
QEAgLTMzLDU1ICszMyw3MyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKLU1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpNZWRpYVNhbXBsZUJ5dGVSYW5nZShN
ZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSwgdWlu
dDY0X3QgdHJhY2tJRCkKLSAgICA6IG1fcHJlc2VudGF0aW9uVGltZShzYW1wbGUucHJlc2VudGF0
aW9uVGltZSgpKQotICAgICwgbV9kZWNvZGVUaW1lKHNhbXBsZS5kZWNvZGVUaW1lKCkpCi0gICAg
LCBtX2R1cmF0aW9uKHNhbXBsZS5kdXJhdGlvbigpKQotICAgICwgbV9ieXRlUmFuZ2UoKnNhbXBs
ZS5ieXRlUmFuZ2UoKSkKLSAgICAsIG1fdHJhY2tJRCh0cmFja0lEKQotICAgICwgbV9zaXplSW5C
eXRlcyhzYW1wbGUuc2l6ZUluQnl0ZXMoKSkKLSAgICAsIG1fcHJlc2VudGF0aW9uU2l6ZShzYW1w
bGUucHJlc2VudGF0aW9uU2l6ZSgpKQorTWVkaWFTYW1wbGVCeXRlUmFuZ2U6Ok1lZGlhU2FtcGxl
Qnl0ZVJhbmdlKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VS
ZWYgYnl0ZVNvdXJjZSkKKyAgICA6IG1fYmxvY2soV1RGTW92ZShzYW1wbGUpKQogICAgICwgbV9i
eXRlU291cmNlKGJ5dGVTb3VyY2UpCi0gICAgLCBtX2ZsYWdzKHNhbXBsZS5mbGFncygpKQogewot
ICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKLSAgICBBU1NFUlQobV9kZWNvZGVUaW1lID09
IG1fcHJlc2VudGF0aW9uVGltZSB8fCBtX2RlY29kZVRpbWUgPT0gTWVkaWFUaW1lOjppbnZhbGlk
VGltZSgpKTsKLSAgICBhdXRvIHBsYXRmb3JtU2FtcGxlID0gc2FtcGxlLnBsYXRmb3JtU2FtcGxl
KCk7Ci0gICAgc3dpdGNoIChwbGF0Zm9ybVNhbXBsZS50eXBlKSB7Ci0gICAgY2FzZSBQbGF0Zm9y
bVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlOgotICAgICAgICBtX2Zvcm1hdERlc2NyaXB0aW9u
ID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHBsYXRmb3JtU2FtcGxl
LnNhbXBsZS5jbVNhbXBsZUJ1ZmZlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZv
cm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGU6Ci0gICAgICAgIG1fZm9ybWF0RGVzY3JpcHRp
b24gPSBwbGF0Zm9ybVNhbXBsZS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29uZDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBBU1NFUlQoIW1fYmxvY2suaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxNZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlPiht
X2Jsb2NrLmxhc3QoKS5kYXRhKSk7CiB9CiAKIEF0b21TdHJpbmcgTWVkaWFTYW1wbGVCeXRlUmFu
Z2U6OnRyYWNrSUQoKSBjb25zdAogewotICAgIHJldHVybiBBdG9tU3RyaW5nOjpudW1iZXIobV90
cmFja0lEKTsKKyAgICByZXR1cm4gQXRvbVN0cmluZzo6bnVtYmVyKG1fYmxvY2suaW5mbygpLT50
cmFja0lEKTsKIH0KIAogUGxhdGZvcm1TYW1wbGUgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnBsYXRm
b3JtU2FtcGxlKCkgY29uc3QKIHsKKyAgICBBU1NFUlQobV9ibG9jay5pbmZvKCkpOwogICAgIHJl
dHVybiB7CiAgICAgICAgIFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlLAotICAg
ICAgICB7IC5ieXRlUmFuZ2VTYW1wbGUgPSBzdGQ6Om1ha2VfcGFpcihtX2J5dGVTb3VyY2UuZ2V0
KCksIG1fZm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkpIH0sCisgICAgICAgIHsgLmJ5dGVSYW5nZVNh
bXBsZSA9IHN0ZDo6bWFrZV9wYWlyKG1fYnl0ZVNvdXJjZS5nZXQoKSwgc3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcigqbV9ibG9jay5pbmZvKCkpKSB9LAogICAgIH07CiB9CiAKLXZvaWQgTWVkaWFTYW1w
bGVCeXRlUmFuZ2U6Om9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmIG9mZnNldCkK
K01lZGlhVGltZSBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6cHJlc2VudGF0aW9uVGltZSgpIGNvbnN0
CiB7Ci0gICAgc2V0VGltZXN0YW1wcyhwcmVzZW50YXRpb25UaW1lKCkgKyBvZmZzZXQsIGRlY29k
ZVRpbWUoKSArIG9mZnNldCk7CisgICAgcmV0dXJuIG1fYmxvY2subGFzdCgpLnByZXNlbnRhdGlv
blRpbWU7CiB9CiAKLXZvaWQgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnNldFRpbWVzdGFtcHMoY29u
c3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBjb25zdCBNZWRpYVRpbWUmIGRlY29kZVRp
bWUpCitNZWRpYVRpbWUgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmRlY29kZVRpbWUoKSBjb25zdAog
ewotICAgIG1fcHJlc2VudGF0aW9uVGltZSA9IHByZXNlbnRhdGlvblRpbWU7Ci0gICAgbV9kZWNv
ZGVUaW1lID0gZGVjb2RlVGltZTsKKyAgICByZXR1cm4gbV9ibG9jay5sYXN0KCkuZGVjb2RlVGlt
ZTsKK30KKworTWVkaWFUaW1lIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpkdXJhdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fYmxvY2subGFzdCgpLmR1cmF0aW9uOworfQorCitzaXplX3QgTWVk
aWFTYW1wbGVCeXRlUmFuZ2U6OnNpemVJbkJ5dGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3Rk
OjpnZXQ8TWVkaWFTYW1wbGU6OkJ5dGVSYW5nZT4obV9ibG9jay5sYXN0KCkuZGF0YSkuYnl0ZUxl
bmd0aDsKK30KKworV2ViQ29yZTo6RmxvYXRTaXplIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpwcmVz
ZW50YXRpb25TaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9ibG9jay5pc1ZpZGVvKCkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxjb25zdCBWaWRlb0luZm8+KG1fYmxvY2suaW5mbygpKS0+ZGlz
cGxheVNpemU7CisgICAgcmV0dXJuIHsgfTsKK30KKworTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OlNh
bXBsZUZsYWdzIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpmbGFncygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFNhbXBsZUZsYWdzKHVpbnQzMl90KG1fYmxvY2subGFzdCgpLmZsYWdzKSB8IE1lZGlhU2Ft
cGxlOjpIYXNTeW5jSW5mbyk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8TWVkaWFTYW1wbGVCeXRlUmFu
Z2U6OkJ5dGVSYW5nZT4gTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmJ5dGVSYW5nZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHN0ZDo6Z2V0PE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2U+KG1fYmxvY2subGFz
dCgpLmRhdGEpOworfQorCit2b2lkIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpvZmZzZXRUaW1lc3Rh
bXBzQnkoY29uc3QgTWVkaWFUaW1lJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6c2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRp
bWUmLCBjb25zdCBNZWRpYVRpbWUmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmgK
aW5kZXggNWRhMjg4NWQ0NWQxNzg4ODM2MjI5MTdlNWU0YWNiOTdmOGVjYWUwNy4uMjI1Yjk0NDJh
NzkyMjQ2ZjRlN2Y4NDgwNmRhMTNiYTUzYjFhZGNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmgKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxl
Qnl0ZVJhbmdlLmgKQEAgLTI3LDI3ICsyNywyNCBAQAogCiAjaWYgRU5BQkxFKFdFQk1fRk9STUFU
X1JFQURFUikKIAotI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTYW1wbGVBVkZPYmpDLmg+Ci0jaW5j
bHVkZSA8cGFsL3NwaS9jb2NvYS9NZWRpYVRvb2xib3hTUEkuaD4KLSNpbmNsdWRlIDx3dGYvTWVk
aWFUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
TWVkaWFTYW1wbGUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE1lZGlhU2FtcGxl
Qnl0ZVJhbmdlIGZpbmFsIDogcHVibGljIFdlYkNvcmU6Ok1lZGlhU2FtcGxlIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlQnl0ZVJhbmdlPiBjcmVhdGUoV2ViQ29yZTo6TWVk
aWFTYW1wbGUmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UsIHVpbnQ2
NF90IHRyYWNrSUQpCisgICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUJ5dGVSYW5nZT4gY3JlYXRl
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VS
ZWYgYnl0ZVNvdXJjZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlh
U2FtcGxlQnl0ZVJhbmdlKHNhbXBsZSwgYnl0ZVNvdXJjZSwgdHJhY2tJRCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBsZUJ5dGVSYW5nZShXVEZNb3ZlKHNhbXBsZSks
IGJ5dGVTb3VyY2UpKTsKICAgICB9CiAKLSAgICBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcHJlc2VudGF0aW9uVGltZTsgfQotICAgIE1lZGlhVGlt
ZSBkZWNvZGVUaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kZWNvZGVUaW1lOyB9Ci0gICAg
TWVkaWFUaW1lIGR1cmF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQot
ICAgIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2l6ZUluQnl0
ZXM7IH0KLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgcHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fcHJlc2VudGF0aW9uU2l6ZTsgfQotICAgIFNhbXBsZUZsYWdzIGZsYWdz
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9mbGFnczsgfQotICAgIHN0ZDo6b3B0aW9uYWw8Qnl0
ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2J5dGVSYW5nZTsgfQor
ICAgIE1lZGlhVGltZSBwcmVzZW50YXRpb25UaW1lKCkgY29uc3QgZmluYWw7CisgICAgTWVkaWFU
aW1lIGRlY29kZVRpbWUoKSBjb25zdCBmaW5hbDsKKyAgICBNZWRpYVRpbWUgZHVyYXRpb24oKSBj
b25zdCBmaW5hbDsKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBmaW5hbDsKKyAgICBX
ZWJDb3JlOjpGbG9hdFNpemUgcHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIFNh
bXBsZUZsYWdzIGZsYWdzKCkgY29uc3QgZmluYWw7CisgICAgc3RkOjpvcHRpb25hbDxCeXRlUmFu
Z2U+IGJ5dGVSYW5nZSgpIGNvbnN0IGZpbmFsOwogCiAgICAgQXRvbVN0cmluZyB0cmFja0lEKCkg
Y29uc3QgZmluYWw7CiAgICAgV2ViQ29yZTo6UGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUo
KSBjb25zdCBmaW5hbDsKQEAgLTU3LDE4ICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgUmVmPE1lZGlh
U2FtcGxlPiBjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0IHsgcmV0dXJuICpjb25zdF9j
YXN0PE1lZGlhU2FtcGxlQnl0ZVJhbmdlKj4odGhpcyk7IH0KIAogcHJpdmF0ZToKLSAgICBNZWRp
YVNhbXBsZUJ5dGVSYW5nZShNZWRpYVNhbXBsZSYsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiwgdWlu
dDY0X3QgdHJhY2tJRCk7CisgICAgTWVkaWFTYW1wbGVCeXRlUmFuZ2UoV2ViQ29yZTo6TWVkaWFT
YW1wbGVzQmxvY2smJiwgTVRQbHVnaW5CeXRlU291cmNlUmVmKTsKIAotICAgIE1lZGlhVGltZSBt
X3ByZXNlbnRhdGlvblRpbWU7Ci0gICAgTWVkaWFUaW1lIG1fZGVjb2RlVGltZTsKLSAgICBNZWRp
YVRpbWUgbV9kdXJhdGlvbjsKLSAgICBCeXRlUmFuZ2UgbV9ieXRlUmFuZ2U7Ci0gICAgdWludDY0
X3QgbV90cmFja0lEOwotICAgIHNpemVfdCBtX3NpemVJbkJ5dGVzOwotICAgIFdlYkNvcmU6OkZs
b2F0U2l6ZSBtX3ByZXNlbnRhdGlvblNpemU7CisgICAgY29uc3QgV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2sgbV9ibG9jazsKICAgICBSZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiBt
X2J5dGVTb3VyY2U7Ci0gICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fZm9y
bWF0RGVzY3JpcHRpb247Ci0gICAgU2FtcGxlRmxhZ3MgbV9mbGFnczsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5jcHAKaW5kZXggNmFhMDIz
YzY2NTYzNDMyNWI3NDhiYjNkNzU1ODYwZDA5NDdlMGI0ZS4uNGQ5ZDA5NjViZTQ0ODA0MTBlMTZi
MTdjZTRmNjVmZmYyNGU3OGRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3BwCkBA
IC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFU
cmFja1JlYWRlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ01VdGlsaXRpZXMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL01lZGlhU2FtcGxlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TYW1wbGVNYXAuaD4K
ICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgpAQCAt
MzY3LDcgKzM2OCw3IEBAIE9TU3RhdHVzIE1lZGlhU2FtcGxlQ3Vyc29yOjpjb3B5Rm9ybWF0RGVz
Y3JpcHRpb24oQ01Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0CiB7CiAgICAgcmV0dXJuIGdl
dE1lZGlhU2FtcGxlKFsmXShNZWRpYVNhbXBsZSYgc2FtcGxlKSB7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCku
dHlwZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Qnl0ZVJhbmdlU2FtcGxlVHlwZSk7Ci0gICAgICAgICpm
b3JtYXREZXNjcmlwdGlvbk91dCA9IHJldGFpblB0cihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5z
YW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29uZCkubGVha1JlZigpOworICAgICAgICAqZm9ybWF0
RGVzY3JpcHRpb25PdXQgPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8oc2Ft
cGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5zZWNvbmQpLmxlYWtS
ZWYoKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuY3BwIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuY3BwCmluZGV4IGYw
NGM1OTA2ZjFhMTZmYjNkZjc4YmQ0MzgyOGMwZGM2ZDhkZWI2MWEuLjQ3MjRlYzhkYTNmZDIzMDdj
YjY1NzllYzBlMDVhMTQ2OTkwNjZlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5jcHAK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJNZWRpYVNhbXBsZUJ5dGVSYW5nZS5oIgogI2lu
Y2x1ZGUgIk1lZGlhU2FtcGxlQ3Vyc29yLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BdWRpb1RyYWNr
UHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ01VdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0luYmFuZFRleHRUcmFja1ByaXZhdGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01lZGlh
RGVzY3JpcHRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NhbXBsZU1hcC5oPgpAQCAtOTcsMTUg
Kzk4LDE3IEBAIE1lZGlhVGltZSBNZWRpYVRyYWNrUmVhZGVyOjpncmVhdGVzdFByZXNlbnRhdGlv
blRpbWUoKSBjb25zdAogICAgIHJldHVybiBsYXN0U2FtcGxlLnByZXNlbnRhdGlvblRpbWUoKSAr
IGxhc3RTYW1wbGUuZHVyYXRpb24oKTsKIH0KIAotdm9pZCBNZWRpYVRyYWNrUmVhZGVyOjphZGRT
YW1wbGUoUmVmPE1lZGlhU2FtcGxlPiYmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5
dGVTb3VyY2UpCit2b2lkIE1lZGlhVHJhY2tSZWFkZXI6OmFkZFNhbXBsZShNZWRpYVNhbXBsZXNC
bG9jayYmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCiB7CiAgICAg
QVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOwogICAgIExvY2tlciBsb2NrZXIgeyBtX3NhbXBsZVN0
b3JhZ2VMb2NrIH07CiAgICAgaWYgKCFtX3NhbXBsZVN0b3JhZ2UpCiAgICAgICAgIG1fc2FtcGxl
U3RvcmFnZSA9IG1ha2VVbmlxdWU8U2FtcGxlU3RvcmFnZT4oKTsKIAotICAgIEFTU0VSVCghc2Ft
cGxlLT5pc0RpdmlzYWJsZSgpICYmIHNhbXBsZS0+Ynl0ZVJhbmdlKCkpOwotICAgIGF1dG8gc2Ft
cGxlVG9BZGQgPSBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6Y3JlYXRlKHNhbXBsZS5nZXQoKSwgYnl0
ZVNvdXJjZSwgbV90cmFja0lEKTsKKyAgICBBU1NFUlQoIXNhbXBsZS5pc0VtcHR5KCkpOworICAg
IEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2U+KHNh
bXBsZS5sYXN0KCkuZGF0YSkpOworCisgICAgYXV0byBzYW1wbGVUb0FkZCA9IE1lZGlhU2FtcGxl
Qnl0ZVJhbmdlOjpjcmVhdGUoV1RGTW92ZShzYW1wbGUpLCBieXRlU291cmNlKTsKIAogICAgIC8v
IEZJWE1FOiBFdmVuIHRob3VnaCBXZWJNIG11eGVyIGd1aWRlbGluZXMgc2F5IHRoaXMgbXVzdCBu
b3QgaGFwcGVuLCBzb21lIHZpZGVvIHRyYWNrcyBoYXZlIHR3bwogICAgIC8vIGNvbnNlY3V0aXZl
IGZyYW1lcyB3aXRoIHRoZSBzYW1lIHByZXNlbnRhdGlvbiB0aW1lLiBTYW1wbGVNYXAgd2lsbCBu
b3Qgc3RvcmUgdGhlIHNlY29uZCBmcmFtZQpAQCAtMTg1LDcgKzE4OCwxNSBAQCBPU1N0YXR1cyBN
ZWRpYVRyYWNrUmVhZGVyOjpjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYga2V5LCBDRkFsbG9jYXRv
clJlZiBhbGxvY2F0bwogCiAgICAgaWYgKENGRXF1YWwoa2V5LCBQQUw6OmdldF9NZWRpYVRvb2xi
b3hfa01UUGx1Z2luVHJhY2tSZWFkZXJQcm9wZXJ0eV9Gb3JtYXREZXNjcmlwdGlvbkFycmF5KCkp
KSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obGFz
dFNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5n
ZVNhbXBsZVR5cGUpOwotICAgICAgICBjb25zdCB2b2lkKiBkZXNjcmlwdGlvbnNbMV0gPSB7IGxh
c3RTYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29uZCB9
OworICAgICAgICBjb25zdCBUcmFja0luZm8mIHRyYWNrSW5mbyA9IGxhc3RTYW1wbGUucGxhdGZv
cm1TYW1wbGUoKS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29uZDsKKyAgICAgICAgaWYgKCFt
X3RyYWNrSW5mbykgeworICAgICAgICAgICAgbV90cmFja0luZm8gPSAmbGFzdFNhbXBsZS5wbGF0
Zm9ybVNhbXBsZSgpLnNhbXBsZS5ieXRlUmFuZ2VTYW1wbGUuc2Vjb25kLmdldCgpOworICAgICAg
ICAgICAgbV9mb3JtYXREZXNjcmlwdGlvbiA9IFdlYkNvcmU6OmNyZWF0ZUZvcm1hdERlc2NyaXB0
aW9uRnJvbVRyYWNrSW5mbygqbV90cmFja0luZm8pOworICAgICAgICB9IGVsc2UgaWYgKCptX3Ry
YWNrSW5mbyAhPSB0cmFja0luZm8pIHsKKyAgICAgICAgICAgIG1fdHJhY2tJbmZvID0gJnRyYWNr
SW5mbzsKKyAgICAgICAgICAgIG1fZm9ybWF0RGVzY3JpcHRpb24gPSBXZWJDb3JlOjpjcmVhdGVG
b3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8oKm1fdHJhY2tJbmZvKTsKKyAgICAgICAgfQor
ICAgICAgICBjb25zdCB2b2lkKiBkZXNjcmlwdGlvbnNbMV0gPSB7IG1fZm9ybWF0RGVzY3JpcHRp
b24uZ2V0KCkgfTsKICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Q0ZBcnJheVJlZio+KGNvcGll
ZFZhbHVlKSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZShhbGxvY2F0b3IsIGRlc2NyaXB0aW9ucywg
MSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpLmxlYWtSZWYoKTsKICAgICAgICAgcmV0dXJuIG5v
RXJyOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMv
TWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5oCmluZGV4IDEyMDViYzI2ZGFmZWU3
ZGQ0ZmRjYTdjODY2MzgxOGZkOGY4OTc0MmMuLmRkMjVmYzNkYjcyY2U4NmY4ZWU3NGUxYzRkY2M4
ZDllOGM0NzJmMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuaApAQCAtNDEsNyArNDEsNyBA
QCBjbGFzcyBXb3JrUXVldWU7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdWRpb1RyYWNr
UHJpdmF0ZTsKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGU7Ci1jbGFzcyBNZWRpYVNhbXBs
ZTsKK2NsYXNzIE1lZGlhU2FtcGxlc0Jsb2NrOwogY2xhc3MgVHJhY2tQcml2YXRlQmFzZTsKIGNs
YXNzIFZpZGVvVHJhY2tQcml2YXRlOwogfQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
TWVkaWFUaW1lIGdyZWF0ZXN0UHJlc2VudGF0aW9uVGltZSgpIGNvbnN0OwogCiAgICAgdm9pZCBz
ZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2lzRW5hYmxlZCA9IGVuYWJsZWQgPyBFbmFibGVk
OjpUcnVlIDogRW5hYmxlZDo6RmFsc2U7IH0KLSAgICB2b2lkIGFkZFNhbXBsZShSZWY8V2ViQ29y
ZTo6TWVkaWFTYW1wbGU+JiYsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZik7CisgICAgdm9pZCBhZGRT
YW1wbGUoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2smJiwgTVRQbHVnaW5CeXRlU291cmNlUmVm
KTsKICAgICB2b2lkIHdhaXRGb3JTYW1wbGUoRnVuY3Rpb248Ym9vbChXZWJDb3JlOjpTYW1wbGVN
YXAmLCBib29sKT4mJikgY29uc3Q7CiAgICAgdm9pZCBmaW5pc2hQYXJzaW5nKCk7CiAKQEAgLTEx
MSw2ICsxMTEsOCBAQCBwcml2YXRlOgogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFNhbXBs
ZVN0b3JhZ2U+IG1fc2FtcGxlU3RvcmFnZSBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fc2FtcGxlU3Rv
cmFnZUxvY2spOwogICAgIFJlZjxjb25zdCBMb2dnZXI+IG1fbG9nZ2VyOwogICAgIGNvbnN0IHZv
aWQqIG1fbG9nSWRlbnRpZmllcjsKKyAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJl
Zj4gbV9mb3JtYXREZXNjcmlwdGlvbjsKKyAgICBSZWZQdHI8Y29uc3QgV2ViQ29yZTo6VHJhY2tJ
bmZvPiBtX3RyYWNrSW5mbzsKIH07CiAKIGNvbnN0ZXhwciBNZWRpYVRyYWNrUmVhZGVyOjpXcmFw
cGVyQ2xhc3MgTWVkaWFUcmFja1JlYWRlcjo6d3JhcHBlckNsYXNzKCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0ZDkyNzZhNzZmZjRjOTJkNDdh
MTY1OTVkZDUzYmRiMDlmNDg1MmUxLi43OTdkMDg3NzViMTdhOTQ0ZmE0NzYyNmVjNTRjMzE3OWYw
ZDcyOTQ2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMjItMDMtMDggIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFw
cGxlLmNvbT4KKworICAgICAgICBIYXZlIE1lZGlhRm9ybWF0UmVhZGVyIHBsdWdpbiB1c2UgV2Vi
TVBhcnNlciBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM3NTk0CisgICAgICAgIHJkYXI6Ly84OTk2MDMwNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL1NhbXBsZU1hcC5jcHA6CisKIDIwMjItMDMtMDUgIEplYW4tWXZlcyBBdmVuYXJkICA8
anlhQGFwcGxlLmNvbT4KIAogICAgICAgICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIGFu
ZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGljIFdlYk1QYXJzZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBsZU1hcC5jcHAKaW5kZXggNzEyMDU4YTM2ODg4Nzc2YjE3
NzhlNGRjZDlkOGE5MGMwMjA2YWVhOC4uZWRlZTMxMmJjZTIzYzFhZjAzYmUwYWYwYjYyYmQyNjNi
ZjUzMGMwNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1Nh
bXBsZU1hcC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBs
ZU1hcC5jcHAKQEAgLTcwLDcgKzcwLDYgQEAgcHVibGljOgogICAgIFNhbXBsZUZsYWdzIGZsYWdz
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9mbGFnczsgfQogICAgIFBsYXRmb3JtU2FtcGxlIHBs
YXRmb3JtU2FtcGxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4geyBQbGF0Zm9ybVNhbXBsZTo6Tm9u
ZSwgeyBudWxscHRyIH0gfTsgfQogICAgIFBsYXRmb3JtU2FtcGxlOjpUeXBlIHBsYXRmb3JtU2Ft
cGxlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFBsYXRmb3JtU2FtcGxlOjpOb25lOyB9Ci0g
ICAgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsgfQogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qg
ZmluYWwgeyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454098</attachid>
            <date>2022-03-08 04:12:27 -0800</date>
            <delta_ts>2022-03-08 05:12:05 -0800</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>bug-237594-20220308231225.patch</filename>
            <type>text/plain</type>
            <size>186542</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwOTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzU2ZjI0ODk3ZjIyY2Yw
ZGZlNjU5NTVhOGQwOWVmNDRkNTM4NzYxMy4uNWU5MzBiZTZkZDU0YjliY2UyYzJmZTFkMzNmNDgx
NmYxNjYwNjliNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyMSBAQAorMjAyMi0wMy0wOCAgSmVh
bi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIEhhdmUgTWVkaWFGb3Jt
YXRSZWFkZXIgcGx1Z2luIHVzZSBXZWJNUGFyc2VyIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1OTQKKyAgICAgICAgcmRhcjovLzg5
OTYwMzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL01lZGlhU2Ft
cGxlLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZTo6Ynl0ZVJhbmdlIGNvbnN0KTog
SGF2ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL1ZpZGVvRnJh
bWUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1ZpZGVvRnJhbWUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQVZGT2JqQ1NhbXBsZTo6Ynl0ZVJhbmdlRm9y
QXR0YWNobWVudCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmg6IEV4cG9ydCBzeW1ib2xzLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Y3JlYXRlQnl0ZVJhbmdlU2FtcGxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPblRyYWNrRW50cnkpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFt
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cHJvdmlkZU1lZGlhRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cmV0dXJuU2Ft
cGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBl
bmRpbmdBdWRpb1NhbXBsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1Nv
dXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRy
YWNrRGF0YTo6Y3JlYXRlQnl0ZVJhbmdlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJN
UGFyc2VyOjpUcmFja0RhdGE6OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5oOgorICAgICAgICAq
IHBsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgor
CisyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3BsaXQgU291cmNlQnVmZmVyUGFyc2VyV2ViTSBhbmQgaGF2ZSBwbGF0Zm9ybSBhZ25vc3Rp
YyBXZWJNUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzc0NzIKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODk4MTA5NjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdCByYXcgV2ViTVBhcnNl
ciBmcm9tIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gYW5kIGludHJvZHVjZSBwbGF0Zm9ybQorICAg
ICAgICBhZ25vc3RpYyBNZWRpYVNhbXBsZXNCbG9jayBvYmplY3RzIGFuZCBUcmFja0luZm8KKwor
ICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBsYXRmb3JtL01lZGlhU2FtcGxlLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZTo6
ZHVtcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0luZm86OmlzQXVkaW8gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjppc1ZpZGVvIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRyYWNrSW5mbzo6dHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFj
a0luZm86Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjpv
cGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrSW5mbzo6VHJhY2tJbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvSW5mbzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlZpZGVvSW5mbzo6VmlkZW9JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvSW5mbzo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvSW5mbzo6QXVkaW9JbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpzZXRJbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjppbmZvIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU2FtcGxlc0Jsb2NrOjppc1ZpZGVvIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U2FtcGxlc0Jsb2NrOjppc0F1ZGlvIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Ft
cGxlc0Jsb2NrOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Js
b2NrOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2s6OnNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2s6OmlzRW1wdHkgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2s6OmNsZWFyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjp0YWtlU2FtcGxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6Zmlyc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTYW1wbGVzQmxvY2s6Omxhc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTYW1wbGVzQmxvY2s6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Ft
cGxlc0Jsb2NrOjplbmQgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0ZpbGVSZWFkZXJDb2NvYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0ZpbGVSZWFkZXI6OmRlbXV4V2ViTURhdGEgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3MuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVNhbXBsZUFWRk9iakMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLmguCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMubW06IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRU
b0NNVHJhbnNmZXJGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVlDYkNS
TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRy
YWNrSW5mbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVy
UGFyc2VyV2ViTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZWdtZW50UmVhZEVycm9yVG9XZWJt
U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OldlYk1QYXJzZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6fldlYk1QYXJzZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViTVBhcnNlcjo6cmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2Vy
OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpwYXJzZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJNUGFyc2VyOjpzZXRMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
TVBhcnNlcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjp0cmFj
a0RhdGFGb3JUcmFja051bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkVs
ZW1lbnRCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkVsZW1lbnRFbmQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FYm1sKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYk1QYXJzZXI6Ok9uU2VnbWVudEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6Ok9uSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkNsdXN0ZXJC
ZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPblRyYWNrRW50cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25CbG9ja0JlZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tFbmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6T25TaW1wbGVCbG9ja0JlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9u
U2ltcGxlQmxvY2tFbmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25CbG9ja0dy
b3VwQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25CbG9ja0dyb3VwRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZl
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OnJlYWRG
cmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6
OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFt
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6aXNTdXBwb3J0ZWRWaWRlb0Nv
ZGVjKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OmlzU3VwcG9ydGVkQXVkaW9Db2Rl
Yyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OmlzV2ViTUZvcm1hdFJlYWRlckF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJNUGFyc2VyOjpwcm92aWRlTWVkaWFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnBhcnNlZEluaXRpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cmV0dXJuU2FtcGxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRUcmltbWluZ0RhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y29udGVudEtleVJlcXVl
c3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ01lZGlhRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRTaG91bGRQcm92aWRl
TWVkaWFEYXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpzaG91bGRQcm92aWRlTWVkaWFkYXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldExvZ2dlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2Vi
TS5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OnBhcnNlZFRyaW1t
aW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpDYWxsYmFjazo6Y2FuRGVj
cnlwdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpDYWxsYmFjazo6Y29u
dGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYk1QYXJzZXI6OmxvZ2dlclB0ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJNUGFyc2VyOjpsb2dJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6
OlRyYWNrRGF0YTo6VHJhY2tEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRy
YWNrRGF0YTo6dHJhY2tUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6
OlRyYWNrRGF0YTo6Zm9ybWF0RGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpzZXRGb3JtYXREZXNjcmlwdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OnBhcnNlciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNrRGF0YTo6ZHJhaW5QZW5k
aW5nU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0
YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRh
OjpWaWRlb1RyYWNrRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1Ry
YWNrRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OkF1ZGlvVHJh
Y2tEYXRhOjpBdWRpb1RyYWNrRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OmFwcGVuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6c2V0RGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpsb2dnZXJQdHIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6bG9nSWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0
aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRp
bGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9QbGF0Zm9ybVZpZGVv
Q29sb3JQcmltYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUGxhdGZvcm1WaWRl
b1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1Bs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
VmlkZW9JbmZvRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZVZpZGVvSW5mb0Zyb21WUDlIZWFkZXJQYXJzZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlVmlkZW9JbmZvRnJvbVZQOEhlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUF1ZGlvSW5mb0ZvckZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZU9wdXNQcml2YXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcHVzQXVkaW9JbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZvcmJpc0F1ZGlvSW5mbyk6CisKKzIwMjItMDIt
MjMgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBIYXZlIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0gdXNlIFNoYXJlZEJ1ZmZlciBpbnRlcm5hbGx5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzcwNzgKKyAgICAgICAg
cmRhcjovLzg5MzQ4NzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBpcyBhIHJlZmFjdG9yIHRvIGFsbG93IFNvdXJjZUJ1ZmZlclBhcnNlciB0
byByZXR1cm4gU2hhcmVkQnVmZmVyCisgICAgICAgIHJhdGhlciB0aGFuIENNQmxvY2tCdWZmZXIu
CisKKyAgICAgICAgTm8gY2hhbmdlIGluIG9ic2VydmFibGUgYmVoYXZpb3Vycy4KKyAgICAgICAg
Q292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UHJpdmF0ZTo6cmVlbnF1ZXVlTWVkaWFGb3JUaW1lKTogRmx5LWJ5IGZpeDogdHlwby4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6OmRpZFJlY2VpdmVTYW1wbGUpOiBGbHkt
YnkgZml4LCAgZXhpdCBlYXJseQorICAgICAgICBpZiBlbmQgdGltZSBpcyBsb3dlciB0aGFuIHN0
YXJ0IHRpbWUgd2hpY2ggY2FuIGhhcHBlbiBpZiB0aGUgZHVyYXRpb24gaXMKKyAgICAgICAgc21h
bGxlciB0aGFuIGNvbnRpZ3VvdXNGcmFtZVRvbGVyYW5jZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRl
QmxvY2tCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpyZXNl
dENvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpW
aWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cG9zdFByb2Nlc3MpOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OnJlc2V0
Q29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1
ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZXNldENvbXBs
ZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0Rh
dGE6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRy
YWNrRGF0YTo6ZHJhaW5QZW5kaW5nU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnBvc3RQcm9jZXNzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VWUDhGcmFtZUhlYWRlcik6IE1ha2UgbWV0aG9kcyBjb25zdC4KKwogMjAyMi0wMi0y
MyAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhYmls
aXR5IHRvIGNvbnZlcnQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciB0byBDTUJsb2NrQnVmZmVyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
UEFML0NoYW5nZUxvZwppbmRleCA3ODEzNWRkZDAzNzUwZjk4ZTIzZWNlMTYzNGI2YjcyMTU3Mzdj
MmRkLi4yNjk4NjRmZDM1OGFmMTc4OWQ2ZGMxNGExYTMyMzk2NjI0NDM4ZjVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMi0wMy0wNCAgSmVhbi1ZdmVzIEF2ZW5hcmQg
IDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0g
YW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAgICAgIHJkYXI6Ly9wcm9i
bGVtLzg5ODEwOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwOgorICAgICAgICAqIHBhbC9jZi9D
b3JlTWVkaWFTb2Z0TGluay5oOiBNZXRob2QgQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSB3YXNu
J3Qgc29mdC1saW5rZWQuCisKIDIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFw
cGxlLmNvbT4KIAogICAgICAgICBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkgY29udmVyc2lvbiB0
byBDTVRpbWUgaW5jb3JyZWN0bHkgY3JlYXRlcyBhIHZhbGlkIHRpbWUuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGMx
MjgxN2VjNjhlYzliYTQ2NmE1MGNhNTU1ZGQzNjMxNDFmYmEwOGQuLmQ0NzYyNGNhNGZkMDBjYzU3
YmY1ZTNjMTI0OGE3MGE0YzU2ZDUzM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMjIt
MDMtMDggIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBIYXZl
IE1lZGlhRm9ybWF0UmVhZGVyIHBsdWdpbiB1c2UgV2ViTVBhcnNlciBkaXJlY3RseQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NTk0CisgICAgICAg
IHJkYXI6Ly84OTk2MDMwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhRm9ybWF0UmVhZGVyOjpwYXJzZUJ5dGVTb3Vy
Y2UpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYUZvcm1hdFJlYWRlcjo6cGFyc2VkSW5pdGlhbGl6
YXRpb25EYXRhKToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFGb3JtYXRSZWFkZXI6OnBhcnNlZE1l
ZGlhRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhRm9ybWF0UmVhZGVyOjpkaWRQcm92aWRl
TWVkaWFEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFGb3JtYXRSZWFkZXI6OmZpbmlzaFBh
cnNpbmcpOgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3Jt
YXRSZWFkZXIuaDoKKyAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlh
U2FtcGxlQnl0ZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWVkaWFTYW1wbGVCeXRlUmFu
Z2U6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFTYW1wbGVC
eXRlUmFuZ2U6OnRyYWNrSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5
dGVSYW5nZTo6cGxhdGZvcm1TYW1wbGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNh
bXBsZUJ5dGVSYW5nZTo6cHJlc2VudGF0aW9uVGltZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpkZWNvZGVUaW1lIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmR1cmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnNpemVJbkJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnByZXNlbnRhdGlvblNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6ZmxhZ3MgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6Ynl0ZVJhbmdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6TWVkaWFTYW1wbGVCeXRlUmFuZ2U6Om9mZnNldFRpbWVzdGFtcHNCeSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpzZXRUaW1lc3RhbXBzKToKKyAg
ICAgICAgKiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdl
Lmg6CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1
cnNvci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQ3Vyc29yOjpjb3B5Rm9ybWF0
RGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFk
ZXIvTWVkaWFUcmFja1JlYWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhVHJhY2tSZWFk
ZXI6OmFkZFNhbXBsZSk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhVHJhY2tSZWFkZXI6OmNvcHlQ
cm9wZXJ0eSk6CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRy
YWNrUmVhZGVyLmg6CisKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxl
LmNvbT4KKworICAgICAgICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIGFuZCBoYXZlIHBs
YXRmb3JtIGFnbm9zdGljIFdlYk1QYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzNzQ3MgorICAgICAgICByZGFyOi8vcHJvYmxlbS84OTgxMDk2
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hh
cmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpNZWRpYVNhbXBsZUJ5dGVSYW5nZSk6
CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVS
YW5nZS5oOiBNZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCisgICAgICAgIGRpZG4ndCBuZWVkIHRvIGlu
aGVyaXQgZnJvbSBNZWRpYVNhbXBsZUFWRk9iakMuIAorCiAyMDIyLTAzLTA3ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSBWb2xhdGlsaXR5
U3RhdGUgdG8gU2V0Tm9uVm9sYXRpbGVSZXN1bHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9jZi9Db3JlTWVkaWFTb2Z0TGluay5jcHAKaW5kZXggODdiNTYyMDdlODRkZjNmNDk5OWIzNmY1
NWYyZGY2ZjhjOTlkNTc2Yi4uZDc0YjhkNWI2YzMzODVmM2Q4M2M5M2RmMjMxMGY3Y2RhMmIyNjUz
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5j
cHAKQEAgLTE2OSw2ICsxNjksNyBAQCBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRI
X0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFzZVJlbW92ZVRpbWVyRAogU09GVF9MSU5L
X0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENNVGltZWJh
c2VTZXRUaW1lckRpc3BhdGNoU291cmNlTmV4dEZpcmVUaW1lLCBPU1N0YXR1cywgKENNVGltZWJh
c2VSZWYgdGltZWJhc2UsIGRpc3BhdGNoX3NvdXJjZV90IHRpbWVyU291cmNlLCBDTVRpbWUgZmly
ZVRpbWUsIHVpbnQzMl90IGZsYWdzKSwgKHRpbWViYXNlLCB0aW1lclNvdXJjZSwgZmlyZVRpbWUs
IGZsYWdzKSwgUEFMX0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhf
RVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJjZVRv
RmlyZUltbWVkaWF0ZWx5LCBPU1N0YXR1cywgKENNVGltZWJhc2VSZWYgdGltZWJhc2UsIGRpc3Bh
dGNoX3NvdXJjZV90IHRpbWVyU291cmNlKSwgKHRpbWViYXNlLCB0aW1lclNvdXJjZSksIFBBTF9F
WFBPUlQpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQQUwsIENv
cmVNZWRpYSwgQ01UaW1lQ29weUFzRGljdGlvbmFyeSwgQ0ZEaWN0aW9uYXJ5UmVmLCAoQ01UaW1l
IHRpbWUsIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciksICh0aW1lLCBhbGxvY2F0b3IpLCBQQUxf
RVhQT1JUKQorU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBD
b3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZSwgT1NTdGF0dXMsIChDRkFs
bG9jYXRvclJlZiBhbGxvY2F0b3IsIENNVmlkZW9Db2RlY1R5cGUgY29kZWNUeXBlLCBpbnQzMl90
IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgQ0ZEaWN0aW9uYXJ5UmVmIGV4dGVuc2lvbnMsIENNVmlk
ZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0RGVzY3JpcHRpb25PdXQpLCAoYWxsb2NhdG9y
LCBjb2RlY1R5cGUsIHdpZHRoLCBoZWlnaHQsIGV4dGVuc2lvbnMsIGZvcm1hdERlc2NyaXB0aW9u
T3V0KSwgUEFMX0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQ
T1JUKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFn
ZUJ1ZmZlciwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENWSW1hZ2VCdWZm
ZXJSZWYgaW1hZ2VCdWZmZXIsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogb3V0RGVzYyks
IChhbGxvY2F0b3IsIGltYWdlQnVmZmVyLCBvdXREZXNjKSwgUEFMX0VYUE9SVCkKIFNPRlRfTElO
S19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVv
Rm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNpb25zLCBDTVZpZGVvRGltZW5zaW9ucywgKENNVmlk
ZW9Gb3JtYXREZXNjcmlwdGlvblJlZiB2aWRlb0Rlc2MpLCAodmlkZW9EZXNjKSwgUEFMX0VYUE9S
VCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1l
ZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zLCBD
R1NpemUsIChDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNjLCBCb29sZWFuIHVz
ZVBpeGVsQXNwZWN0UmF0aW8sIEJvb2xlYW4gdXNlQ2xlYW5BcGVydHVyZSksICh2aWRlb0Rlc2Ms
IHVzZVBpeGVsQXNwZWN0UmF0aW8sIHVzZUNsZWFuQXBlcnR1cmUpLCBQQUxfRVhQT1JUKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oCmluZGV4IDU3MGE2
YTk4NTNjNDQ4MTY4Yjk5MDIyMDQyMzAwOTZkZmU4ZmViMDEuLjMzY2ExYjI2ZjNkMzdlNTkyNWEy
NWI2YWNmYmQxNThhNDMyZTdhYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Y2YvQ29yZU1lZGlhU29mdExpbmsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NmL0Nv
cmVNZWRpYVNvZnRMaW5rLmgKQEAgLTI2Myw2ICsyNjMsOCBAQCBTT0ZUX0xJTktfRlVOQ1RJT05f
Rk9SX0hFQURFUihQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFzZVNldFRpbWVyRGlzcGF0Y2hTb3Vy
Y2VUbwogI2RlZmluZSBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJjZVRvRmlyZUltbWVk
aWF0ZWx5IHNvZnRMaW5rX0NvcmVNZWRpYV9DTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJj
ZVRvRmlyZUltbWVkaWF0ZWx5CiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQQUwsIENv
cmVNZWRpYSwgQ01UaW1lQ29weUFzRGljdGlvbmFyeSwgQ0ZEaWN0aW9uYXJ5UmVmLCAoQ01UaW1l
IHRpbWUsIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciksICh0aW1lLCBhbGxvY2F0b3IpKQogI2Rl
ZmluZSBDTVRpbWVDb3B5QXNEaWN0aW9uYXJ5IHNvZnRMaW5rX0NvcmVNZWRpYV9DTVRpbWVDb3B5
QXNEaWN0aW9uYXJ5CitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQQUwsIENvcmVNZWRp
YSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlLCBPU1N0YXR1cywgKENGQWxsb2NhdG9y
UmVmIGFsbG9jYXRvciwgQ01WaWRlb0NvZGVjVHlwZSBjb2RlY1R5cGUsIGludDMyX3Qgd2lkdGgs
IGludDMyX3QgaGVpZ2h0LCBDRkRpY3Rpb25hcnlSZWYgZXh0ZW5zaW9ucywgQ01WaWRlb0Zvcm1h
dERlc2NyaXB0aW9uUmVmKiBmb3JtYXREZXNjcmlwdGlvbk91dCksIChhbGxvY2F0b3IsIGNvZGVj
VHlwZSwgd2lkdGgsIGhlaWdodCwgZXh0ZW5zaW9ucywgZm9ybWF0RGVzY3JpcHRpb25PdXQpKQor
I2RlZmluZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGUgc29mdExpbmtfQ29yZU1lZGlh
X0NNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZQogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9I
RUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvcklt
YWdlQnVmZmVyLCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ1ZJbWFnZUJ1
ZmZlclJlZiBpbWFnZUJ1ZmZlciwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmKiBvdXREZXNj
KSwgKGFsbG9jYXRvciwgaW1hZ2VCdWZmZXIsIG91dERlc2MpKQogI2RlZmluZSBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlciBzb2Z0TGlua19Db3JlTWVkaWFfQ01W
aWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIKIFNPRlRfTElOS19GVU5D
VElPTl9GT1JfSEVBREVSKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25H
ZXREaW1lbnNpb25zLCBDTVZpZGVvRGltZW5zaW9ucywgKENNVmlkZW9Gb3JtYXREZXNjcmlwdGlv
blJlZiB2aWRlb0Rlc2MpLCAodmlkZW9EZXNjKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5k
ZXggOThiMDM1NzkxYTZlYmIwZDlmMTU3MWE1N2E0MmVjZDVmMTU1Y2ZiOS4uNWRlZTc1NDA1MzU3
OWY1NWI1NWYyZmU0YWQwZGQwYTY5ZGViZmQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UK
QEAgLTMxMiw2ICszMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvQ01VdGlsaXRpZXMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9GbG9hdFJlY3RD
b2NvYS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EuY3BwCkBAIC02
NDksNiArNjUwLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvQ01VdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29j
b2EuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGFhNDRmNWY1MzE2N2I5YmMwZjE0MjNmMjdi
ZmMyNGQ3MTdlYmFjZmEuLmY5ZTBhYmFmNGI5MjJiODkzNzJmOWJhOTcyNTQwOWZiYzdiN2Y4NWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMzgxLDYgKzM4MSw3IEBAIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVn
aXN0cnkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9BdWRpb1RyYWNrUHJpdmF0ZVdlYk0u
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5tbSBAbm8tdW5pZnkKIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0Zsb2F0UmVjdENvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVD
b3JlVGV4dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA2ODMyNDA1Y2U3OTc4ODQ5NDljYjM0MzAyM2I5MDAxYWJlZWI2M2Y1
Li4xMzE2MjFiNDc0MjViNGM3YWQ2YWNhMzdjNWNjNWNiMmIyNzM2NzEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTgwLDYg
KzE1ODAsOCBAQAogCQk1MTRDNzY3QjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE0Qzc2NjYwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCAqLzsg
fTsKIAkJNTE0Qzc2N0QwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjY4MENF
OTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2N0YwQ0U5MjNBMTAwN0VGM0NE
IC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNw
b25zZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk1MTUwQjVERDI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTBCNURDMjdDREYyRTAwMDRG
QzgxRSAvKiBDTVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTUxNTBCNURGMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTBCNURF
MjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5tbSAqLzsgfTsKIAkJNTE1MUYwN0UyNjE1
NDM1QTAwRkRCMkI0IC8qIE1lZGlhVW5pcXVlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1MUYwN0IyNjE1MzYzRjAwRkRCMkI0IC8q
IE1lZGlhVW5pcXVlSWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUxNUJFMTkwMUQ1NEY1RkIwMEREN0M2OCAvKiBFbXB0eUdhbWVw
YWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE1QkUxODkxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVyLmggKi87
IH07CiAJCTUxNUJFMTkyMUQ1NEY1RkIwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMThCMUQ1NEY1
RjYwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTc3OSw2ICs5NzgxLDggQEAKIAkJNTE0Qzc2Njgw
Q0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTRDNzY2OTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25z
ZUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VS
ZXNwb25zZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRDNzY2QTBD
RTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXNwb25zZUJhc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTE1MEI1REMyN0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0aWVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENNVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxNTBCNURFMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IENNVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTUxRjA3QjI2MTUzNjNGMDBGREIyQjQgLyogTWVkaWFVbmlxdWVJZGVudGlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhVW5pcXVlSWRlbnRpZmllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTVCRTE4ODFENTRGNUY2MDBERDdDNjggLyog
RW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTVCRTE4OTFENTRGNUY2MDBERDdDNjggLyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW1wdHlHYW1lcGFkUHJvdmlkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MjkwLDYgKzI5Mjk0LDggQEAKIAkJCQk3
QkNENDJEQzI3MDVDOTQ5MDBFQjIxMjcgLyogQU5HTEVVdGlsaXRpZXNDb2NvYS5oICovLAogCQkJ
CUNERjk5NTAxMjRDMjgxNDkwMDJFQTA2MiAvKiBBdWRpb1RyYWNrUHJpdmF0ZVdlYk0uY3BwICov
LAogCQkJCUNERjk5NTAwMjRDMjgxNDkwMDJFQTA2MiAvKiBBdWRpb1RyYWNrUHJpdmF0ZVdlYk0u
aCAqLywKKwkJCQk1MTUwQjVEQzI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMuaCAqLywK
KwkJCQk1MTUwQjVERTI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gKi8sCiAJCQkJ
RjQ4RDJBQTMyMTU5NzQwRDAwQzY3NTJCIC8qIENvbG9yQ29jb2EuaCAqLywKIAkJCQlGNDhEMkFB
NDIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JDb2NvYS5tbSAqLywKIAkJCQlCMjc1MzU0QzBCMDUz
ODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q29jb2EubW0gKi8sCkBAIC0zMzg5Nyw2ICszMzkwMyw3
IEBACiAJCQkJRjREMDc1NTkyMzREODIzMzAwODgxRTczIC8qIENsaXBib2FyZEl0ZW1QYXN0ZWJv
YXJkRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgwMzcxNjIxQTY2RjAwQTAwQkFG
NTE5IC8qIENsaXBSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxMzE0RkEwOUQ1MDA3
NDU3QUUgLyogQ2xvc2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE1MEI1REQyN0NERjJF
MDAwNEZDODFFIC8qIENNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMEMwNTRDQjEx
MThDOEU0MDBDRTI2MzYgLyogQ29kZUdlbmVyYXRvci5wbSBpbiBIZWFkZXJzICovLAogCQkJCUJD
NUVCNURGMEU4MUI5QUIwMEIyNTk2NSAvKiBDb2xsYXBzZWRCb3JkZXJWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQyNUE0OUExODI5MkI4NDAwMjBDRkNGIC8qIENvbGxlY3Rpb25JbmRleENh
Y2hlLmggaW4gSGVhZGVycyAqLywKQEAgLTM4ODA0LDYgKzM4ODExLDcgQEAKIAkJCQlDREY0Qjcx
NTFFMDBCN0U1MDBFMjM1QTIgLyogQ0RNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQjcwNDVC
MUY3NDY1QTEwMDM5MjNERiAvKiBDRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDREMyMjQyODFGNzU2OTY2MDA1RjA3N0IgLyogQ0RNSW5zdGFuY2VGYWlyUGxheVN0
cmVhbWluZ0FWRk9iakMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTUwQjVERjI3Q0RGNDk5MDA0
RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQwOTBGQjFBQTUx
RTFEMDA5MTE5MUEgLyogQ29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyQ29jb2EubW0gaW4gU291
cmNlcyAqLywKIAkJCQk0NkM2OTZDQzFFNzIwNUZDMDA1OTc5MzcgLyogQ1BVTW9uaXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQUJBNzZDQTExRDIwRTUwMDA0QzIwMUMgLyogQ1NTUHJvcGVy
dHlOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL01lZGlhU2FtcGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBs
ZS5oCmluZGV4IDBhNmYyOGEyMDEzMTM1NTM1OGI2ZTdmOWNkYzEyNmE0ZDVjMGU2YWMuLmFkNmY4
NTZlZGFmZGZkOTIxNzM0ZDMzNzE4MTA3Y2NjNzM1ODY0MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTWVkaWFTYW1wbGUuaApAQCAtMjYsNyArMjYsMTEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiRm91ckNDLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1WaWRlb0NvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAj
aW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CkBAIC00MCw4ICs0NCwxMSBAQCB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uICpDTUZvcm1hdERl
c2NyaXB0aW9uUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI7CiBjbGFzcyBNb2NrU2FtcGxlQm94OwogY2xhc3MgUHJvY2Vzc0lkZW50aXR5
OworY2xhc3MgU2hhcmVkQnVmZmVyOworc3RydWN0IFRyYWNrSW5mbzsKIAogc3RydWN0IFBsYXRm
b3JtU2FtcGxlIHsKICAgICBlbnVtIFR5cGUgewpAQCAtNTYsNyArNjMsNyBAQCBzdHJ1Y3QgUGxh
dGZvcm1TYW1wbGUgewogICAgICAgICBjb25zdCBNb2NrU2FtcGxlQm94KiBtb2NrU2FtcGxlQm94
OwogICAgICAgICBDTVNhbXBsZUJ1ZmZlclJlZiBjbVNhbXBsZUJ1ZmZlcjsKICAgICAgICAgR3N0
U2FtcGxlKiBnc3RTYW1wbGU7Ci0gICAgICAgIHN0ZDo6cGFpcjxNVFBsdWdpbkJ5dGVTb3VyY2VS
ZWYsIENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGJ5dGVSYW5nZVNhbXBsZTsKKyAgICAgICAgc3Rk
OjpwYWlyPE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiwgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25z
dCBUcmFja0luZm8+PiBieXRlUmFuZ2VTYW1wbGU7CiAgICAgfSBzYW1wbGU7CiB9OwogCkBAIC03
MiwxMyArNzksMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRmxvYXRTaXplIHByZXNlbnRhdGlv
blNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShj
b25zdCBNZWRpYVRpbWUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFRpbWVzdGFtcHMoY29u
c3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBp
c0RpdmlzYWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNEaXZpc2FibGUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfTsKICAgICBlbnVtIERpdmlkZUZsYWdzIHsgQmVmb3JlUHJl
c2VudGF0aW9uVGltZSwgQWZ0ZXJQcmVzZW50YXRpb25UaW1lIH07CiAgICAgZW51bSBjbGFzcyBV
c2VFbmRUaW1lIDogYm9vbCB7CiAgICAgICAgIERvTm90VXNlLAogICAgICAgICBVc2UsCiAgICAg
fTsKLSAgICB2aXJ0dWFsIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1wbGU+LCBSZWZQdHI8TWVk
aWFTYW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBVc2VF
bmRUaW1lID0gVXNlRW5kVGltZTo6RG9Ob3RVc2UpID0gMDsKKyAgICB2aXJ0dWFsIHN0ZDo6cGFp
cjxSZWZQdHI8TWVkaWFTYW1wbGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUoY29uc3Qg
TWVkaWFUaW1lJiwgVXNlRW5kVGltZSA9IFVzZUVuZFRpbWU6OkRvTm90VXNlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG51
bGxwdHIgfTsKKyAgICB9CiAgICAgdmlydHVhbCBSZWY8TWVkaWFTYW1wbGU+IGNyZWF0ZU5vbkRp
c3BsYXlpbmdDb3B5KCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBSZWZQdHI8SlNDOjpVaW50
OENsYW1wZWRBcnJheT4gZ2V0UkdCQUltYWdlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7
IH0KQEAgLTk4LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IGJ5dGVPZmZzZXQg
eyAwIH07CiAgICAgICAgIHNpemVfdCBieXRlTGVuZ3RoIHsgMCB9OwogICAgIH07Ci0gICAgdmly
dHVhbCBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsgfQogCiAgICAgZW51bSBjbGFzcyBWaWRlb1JvdGF0aW9uIHsKICAg
ICAgICAgTm9uZSA9IDAsCkBAIC0xMTksNyArMTMwLDExIEBAIHB1YmxpYzoKICAgICBib29sIGhh
c0FscGhhKCkgY29uc3QgeyByZXR1cm4gZmxhZ3MoKSAmIEhhc0FscGhhOyB9CiAgICAgYm9vbCBo
YXNTeW5jSW5mbygpIGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkgJiBIYXNTeW5jSW5mbzsgfQogCi0g
ICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5w
cmludCgie1BUUygiLCBwcmVzZW50YXRpb25UaW1lKCksICIpLCBEVFMoIiwgZGVjb2RlVGltZSgp
LCAiKSwgZHVyYXRpb24oIiwgZHVyYXRpb24oKSwgIiksIGZsYWdzKCIsIChpbnQpZmxhZ3MoKSwg
IiksIHByZXNlbnRhdGlvblNpemUoIiwgcHJlc2VudGF0aW9uU2l6ZSgpLndpZHRoKCksICJ4Iiwg
cHJlc2VudGF0aW9uU2l6ZSgpLmhlaWdodCgpLCAiKX0iKTsKKyAgICB9CisKICAgICBTdHJpbmcg
dG9KU09OU3RyaW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKQEAgLTEzNCw4ICsxNDksMTI4IEBAIHB1YmxpYzoKICAgICB9CiB9
OwogCitzdHJ1Y3QgQXVkaW9JbmZvOworc3RydWN0IFZpZGVvSW5mbzsKKworc3RydWN0IFRyYWNr
SW5mbyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUcmFja0luZm8+IHsKKyAgICBlbnVt
IGNsYXNzIFRyYWNrVHlwZSB7IFVua25vd24sIEF1ZGlvLCBWaWRlbyB9OworCisgICAgYm9vbCBp
c0F1ZGlvKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFRyYWNrVHlwZTo6QXVkaW87IH0KKyAg
ICBib29sIGlzVmlkZW8oKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHJhY2tUeXBlOjpWaWRl
bzsgfQorCisgICAgVHJhY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFja0luZm8mIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKHR5cGUoKSAhPSBvdGhlci50eXBlKCkgfHwgY29kZWNOYW1lICE9IG90aGVy
LmNvZGVjTmFtZSB8fCB0cmFja0lEICE9IG90aGVyLnRyYWNrSUQpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBlcXVhbFRvKG90aGVyKTsKKyAgICB9CisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFRyYWNrSW5mbyYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOyB9CisKKyAgICBGb3VyQ0MgY29kZWNOYW1lOworICAgIHVpbnQ2NF90IHRy
YWNrSUQgeyAwIH07CisKKyAgICB2aXJ0dWFsIH5UcmFja0luZm8oKSA9IGRlZmF1bHQ7CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxUbyhjb25zdCBUcmFja0luZm8mIG90aGVy
KSBjb25zdCA9IDA7CisgICAgVHJhY2tJbmZvKFRyYWNrVHlwZSB0eXBlKQorICAgICAgICA6IG1f
dHlwZSh0eXBlKSB7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUcmFja1R5cGUgbV90eXBlIHsg
VHJhY2tUeXBlOjpVbmtub3duIH07Cit9OworCitzdHJ1Y3QgVmlkZW9JbmZvIDogcHVibGljIFRy
YWNrSW5mbyB7CisgICAgc3RhdGljIFJlZjxWaWRlb0luZm8+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVmlkZW9JbmZvKCkpOyB9CisKKyAgICBGbG9hdFNpemUgc2l6ZTsKKyAgICAv
LyBTaXplIGluIHBpeGVscyBhdCB3aGljaCB0aGUgdmlkZW8gaXMgcmVuZGVyZWQuIFRoaXMgaXMg
YWZ0ZXIgaXQgaGFzCisgICAgLy8gYmVlbiBzY2FsZWQgYnkgaXRzIGFzcGVjdCByYXRpby4KKyAg
ICBGbG9hdFNpemUgZGlzcGxheVNpemU7CisgICAgdWludDhfdCBiaXREZXB0aCB7IDggfTsKKyAg
ICBQbGF0Zm9ybVZpZGVvQ29sb3JTcGFjZSBjb2xvclNwYWNlOworICAgIE1lZGlhU2FtcGxlOjpW
aWRlb1JvdGF0aW9uIHJvdGF0aW9uIHsgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmUg
fTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGF0b21EYXRhOworCitwcml2YXRlOgorICAg
IFZpZGVvSW5mbygpCisgICAgICAgIDogVHJhY2tJbmZvKFRyYWNrVHlwZTo6VmlkZW8pIHsgfQor
ICAgIGJvb2wgZXF1YWxUbyhjb25zdCBUcmFja0luZm8mIG90aGVyVmlkZW9JbmZvKSBjb25zdCBm
aW5hbAorICAgIHsKKyAgICAgICAgYXV0byYgb3RoZXIgPSBkb3duY2FzdDxjb25zdCBWaWRlb0lu
Zm8+KG90aGVyVmlkZW9JbmZvKTsKKyAgICAgICAgcmV0dXJuIHNpemUgPT0gb3RoZXIuc2l6ZSAm
JiBkaXNwbGF5U2l6ZSA9PSBvdGhlci5kaXNwbGF5U2l6ZSAmJiBiaXREZXB0aCA9PSBvdGhlci5i
aXREZXB0aCAmJiBjb2xvclNwYWNlID09IG90aGVyLmNvbG9yU3BhY2UgJiYgcm90YXRpb24gPT0g
b3RoZXIucm90YXRpb24gJiYgKCghYXRvbURhdGEgJiYgIW90aGVyLmF0b21EYXRhKSB8fCAoYXRv
bURhdGEgJiYgb3RoZXIuYXRvbURhdGEgJiYgKmF0b21EYXRhID09ICpvdGhlci5hdG9tRGF0YSkp
OworICAgIH0KK307CisKK3N0cnVjdCBBdWRpb0luZm8gOiBwdWJsaWMgVHJhY2tJbmZvIHsKKyAg
ICBzdGF0aWMgUmVmPEF1ZGlvSW5mbz4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBB
dWRpb0luZm8oKSk7IH0KKworICAgIHVpbnQzMl90IHJhdGUgeyAwIH07CisgICAgdWludDMyX3Qg
Y2hhbm5lbHMgeyAwIH07CisgICAgdWludDMyX3QgZnJhbWVzUGVyUGFja2V0IHsgMCB9OworICAg
IHVpbnQzMl90IGJpdERlcHRoIHsgMTYgfTsKKyAgICBpbnQ4X3QgcHJvZmlsZSB7IDAgfTsKKyAg
ICBpbnQ4X3QgZXh0ZW5kZWRQcm9maWxlIHsgMCB9OworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gY29va2llRGF0YTsKKworcHJpdmF0ZToKKyAgICBBdWRpb0luZm8oKQorICAgICAgICA6IFRy
YWNrSW5mbyhUcmFja1R5cGU6OkF1ZGlvKSB7IH0KKyAgICBib29sIGVxdWFsVG8oY29uc3QgVHJh
Y2tJbmZvJiBvdGhlckF1ZGlvSW5mbykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIGF1dG8m
IG90aGVyID0gZG93bmNhc3Q8Y29uc3QgQXVkaW9JbmZvPihvdGhlckF1ZGlvSW5mbyk7CisgICAg
ICAgIHJldHVybiByYXRlID09IG90aGVyLnJhdGUgJiYgY2hhbm5lbHMgPT0gb3RoZXIuY2hhbm5l
bHMgJiYgYml0RGVwdGggPT0gb3RoZXIuYml0RGVwdGggJiYgZnJhbWVzUGVyUGFja2V0ID09IG90
aGVyLmZyYW1lc1BlclBhY2tldCAmJiBwcm9maWxlID09IG90aGVyLnByb2ZpbGUgJiYgZXh0ZW5k
ZWRQcm9maWxlID09IG90aGVyLmV4dGVuZGVkUHJvZmlsZSAmJiAoKCFjb29raWVEYXRhICYmICFv
dGhlci5jb29raWVEYXRhKSB8fCAoY29va2llRGF0YSAmJiBvdGhlci5jb29raWVEYXRhICYmICpj
b29raWVEYXRhID09ICpvdGhlci5jb29raWVEYXRhKSk7CisgICAgfQorfTsKKworY2xhc3MgTWVk
aWFTYW1wbGVzQmxvY2sgeworcHVibGljOgorICAgIHN0cnVjdCBNZWRpYVNhbXBsZUl0ZW0gewor
ICAgICAgICBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZTsKKyAgICAgICAgTWVkaWFUaW1lIGRl
Y29kZVRpbWU7CisgICAgICAgIE1lZGlhVGltZSBkdXJhdGlvbjsKKyAgICAgICAgc3RkOjp2YXJp
YW50PE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2UsIFJlZjxjb25zdCBGcmFnbWVudGVkU2hhcmVkQnVm
ZmVyPj4gZGF0YTsKKyAgICAgICAgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzIGZsYWdzOworICAg
IH07CisKKyAgICB2b2lkIHNldEluZm8oUmVmUHRyPGNvbnN0IFRyYWNrSW5mbz4mJiBpbmZvKSB7
IG1faW5mbyA9IFdURk1vdmUoaW5mbyk7IH0KKyAgICBjb25zdCBUcmFja0luZm8qIGluZm8oKSBj
b25zdCB7IHJldHVybiBtX2luZm8uZ2V0KCk7IH0KKyAgICBib29sIGlzVmlkZW8oKSBjb25zdCB7
IHJldHVybiBtX2luZm8gJiYgbV9pbmZvLT5pc1ZpZGVvKCk7IH0KKyAgICBib29sIGlzQXVkaW8o
KSBjb25zdCB7IHJldHVybiBtX2luZm8gJiYgbV9pbmZvLT5pc0F1ZGlvKCk7IH0KKyAgICBUcmFj
a0luZm86OlRyYWNrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvID8gbV9pbmZvLT50
eXBlKCkgOiBUcmFja0luZm86OlRyYWNrVHlwZTo6VW5rbm93bjsgfQorICAgIHZvaWQgYXBwZW5k
KE1lZGlhU2FtcGxlSXRlbSYmIGl0ZW0pIHsgbV9zYW1wbGVzLmFwcGVuZChXVEZNb3ZlKGl0ZW0p
KTsgfQorICAgIHZvaWQgYXBwZW5kKE1lZGlhU2FtcGxlc0Jsb2NrJiYgYmxvY2spIHsgbV9zYW1w
bGVzLmFwcGVuZFZlY3RvcihzdGQ6OmV4Y2hhbmdlKGJsb2NrLm1fc2FtcGxlcywgeyB9KSk7IH0K
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5zaXplKCk7IH07Cisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmlzRW1wdHkoKTsgfQor
ICAgIHZvaWQgY2xlYXIoKSB7IG1fc2FtcGxlcy5jbGVhcigpOyB9CisgICAgdXNpbmcgU2FtcGxl
c1ZlY3RvciA9IFZlY3RvcjxNZWRpYVNhbXBsZUl0ZW0+OworICAgIFNhbXBsZXNWZWN0b3IgdGFr
ZVNhbXBsZXMoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2FtcGxlcywgeyB9KTsgfQorCisg
ICAgY29uc3QgTWVkaWFTYW1wbGVJdGVtJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9zYW1wbGVzW2luZGV4XTsgfQorICAgIGNvbnN0IE1lZGlhU2FtcGxlSXRlbSYg
Zmlyc3QoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuZmlyc3QoKTsgfQorICAgIGNvbnN0IE1l
ZGlhU2FtcGxlSXRlbSYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5sYXN0KCk7IH0K
KyAgICBTYW1wbGVzVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2FtcGxlcy5iZWdpbigpOyB9CisgICAgU2FtcGxlc1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmVuZCgpOyB9CisKK3ByaXZhdGU6CisgICAg
UmVmUHRyPGNvbnN0IFRyYWNrSW5mbz4gbV9pbmZvOworICAgIFNhbXBsZXNWZWN0b3IgbV9zYW1w
bGVzOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0JFR0lOKFdlYkNvcmU6OlZpZGVvSW5mbykKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6VHJhY2tJbmZvJiBpbmZvKSB7IHJldHVybiBpbmZvLmlzVmlkZW8oKTsgfQor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYkNvcmU6OkF1ZGlvSW5mbykKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6VHJhY2tJbmZvJiBpbmZvKSB7IHJldHVybiBpbmZvLmlzQXVkaW8oKTsgfQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbj4gewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcAppbmRleCBhNTQ5YzFhNWM0OGViMjNk
NjRiYTNmZDM1Mzg0MDhiZDE1NTIzNGYwLi4xNGNiNzBkMTcwYTA3MjFjMTdlYmYzZjE4ZDZkNDg0
MTU3Zjc4NzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcApAQCAtOTgs
MTggKzk4LDYgQEAgdm9pZCBWaWRlb0ZyYW1lOjpzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGlt
ZSYsIGNvbnN0IE1lZGlhVGltZSYpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWJv
b2wgVmlkZW9GcmFtZTo6aXNEaXZpc2FibGUoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RkOjpwYWlyPFJlZlB0cjxXZWJDb3Jl
OjpNZWRpYVNhbXBsZT4sIFJlZlB0cjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4+IFZpZGVvRnJhbWU6
OmRpdmlkZShjb25zdCBNZWRpYVRpbWUmLCBVc2VFbmRUaW1lKQotewotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiB7IG51bGxwdHIsIG51bGxwdHIgfTsKLX0KLQogUmVmPFdl
YkNvcmU6Ok1lZGlhU2FtcGxlPiBWaWRlb0ZyYW1lOjpjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgp
IGNvbnN0CiB7CiAgICAgQ1JBU0goKTsKQEAgLTEyMCwxMyArMTA4LDYgQEAgTWVkaWFTYW1wbGU6
OlNhbXBsZUZsYWdzIFZpZGVvRnJhbWU6OmZsYWdzKCkgY29uc3QKICAgICByZXR1cm4gTWVkaWFT
YW1wbGU6OlNhbXBsZUZsYWdzOjpOb25lOwogfQogCi1zdGQ6Om9wdGlvbmFsPE1lZGlhU2FtcGxl
OjpCeXRlUmFuZ2U+IFZpZGVvRnJhbWU6OmJ5dGVSYW5nZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklY
TUU6IFJlbW92ZSBmcm9tIHRoZSBiYXNlIGNsYXNzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci19Ci0KIHZvaWQgVmlkZW9GcmFtZTo6ZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0CiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9WaWRlb0ZyYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmgK
aW5kZXggNjQxMWRmN2Q2NDBjY2RlZDFkMWUzZTExZmQxYTQyOGEyOTFiMzFlZC4uZDk2NzRjZTc0
MDU0YmNkNzQ4OGVhZWRkMmYxMjgyMjI4NDZiMWU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Zp
ZGVvRnJhbWUuaApAQCAtNzIsMTEgKzcyLDggQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9S
VCBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVk
aWFUaW1lJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0RpdmlzYWJsZSgpIGNv
bnN0IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1w
bGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50
YXRpb25UaW1lLCBVc2VFbmRUaW1lID0gVXNlRW5kVGltZTo6RG9Ob3RVc2UpIGZpbmFsOwogICAg
IFdFQkNPUkVfRVhQT1JUIFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxh
eWluZ0NvcHkoKSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCBTYW1wbGVGbGFncyBm
bGFncygpIGNvbnN0IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6b3B0aW9uYWw8Qnl0
ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29h
LmNwcAppbmRleCBiNzAzY2ZlY2QzMTZjNjI3YzY5NGU2NGI4ZTY5NzYyMDY4NjdmN2FiLi5iZDg3
ZTQ2OGY4ZjBkZmYwYjM0YzY4YTVmNDliNDZlM2RiMDBjNTYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0ZpbGVSZWFkZXJDb2NvYS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxlUmVhZGVyQ29j
b2EuY3BwCkBAIC0yMTksNyArMjE5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRmlsZVJlYWRl
cldlYk1EYXRhPiBBdWRpb0ZpbGVSZWFkZXI6OmRlbXV4V2ViTURhdGEoY29uc3QgdWkKICAgICBw
YXJzZXItPmFwcGVuZERhdGEoV1RGTW92ZShzZWdtZW50KSk7CiAgICAgaWYgKCF0cmFjaykKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcGFyc2VyLT5mbHVzaFBlbmRpbmdBdWRpb0J1ZmZl
cnMoKTsKKyAgICBwYXJzZXItPmZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOwogICAgIHJldHVy
biBtYWtlVW5pcXVlPEF1ZGlvRmlsZVJlYWRlcldlYk1EYXRhPihBdWRpb0ZpbGVSZWFkZXJXZWJN
RGF0YSB7IFdURk1vdmUoYnVmZmVyKSwgdHJhY2sucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShk
dXJhdGlvbiksIFdURk1vdmUoc2FtcGxlcykgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFy
aWVzLmgKaW5kZXggMDg0NGIxZThkY2FjZmNhNjA2ZDAxYWZkYzljNmY3MjBlMzM5NDQ1Yy4uYWZj
MzEyNTRlYjU0ZmFkZjNmMTIxOTk2NWU4MjVlZDMyNjNkNGJiMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9y
UHJpbWFyaWVzLmgKQEAgLTMzLDYgKzMzLDE1IEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb0Nv
bG9yUHJpbWFyaWVzIDogdWludDhfdCB7CiAgICAgQnQ3MDksCiAgICAgQnQ0NzBiZywKICAgICBT
bXB0ZTE3MG0sCisgICAgQnQ0NzBtLAorICAgIFNtcHRlMjQwbSwKKyAgICBGaWxtLAorICAgIEJ0
MjAyMCwKKyAgICBTbXB0ZVN0NDI4MSwKKyAgICBTbXB0ZVJwNDMxLAorICAgIFNtcHRlRWc0MzIs
CisgICAgSmVkZWNQMjJQaG9zcGhvcnMsCisgICAgVW5zcGVjaWZpZWQsCiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkBAIC00NCw3ICs1MywxNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcz4gewogICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMsCiAgICAgICAgIFdlYkNvcmU6OlBs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQ3MDksCiAgICAgICAgIFdlYkNvcmU6OlBsYXRm
b3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQ0NzBiZywKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZv
cm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTE3MG0KKyAgICAgICAgV2ViQ29yZTo6UGxhdGZv
cm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTE3MG0sCisgICAgICAgIFdlYkNvcmU6OlBsYXRm
b3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQ0NzBtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9y
bVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlMjQwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZv
cm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpGaWxtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZp
ZGVvQ29sb3JQcmltYXJpZXM6OkJ0MjAyMCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVN0NDI4MSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1W
aWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVJwNDMxLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9y
bVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlRWc0MzIsCisgICAgICAgIFdlYkNvcmU6OlBsYXRm
b3JtVmlkZW9Db2xvclByaW1hcmllczo6SmVkZWNQMjJQaG9zcGhvcnMsCisgICAgICAgIFdlYkNv
cmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQKICAgICA+OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1W
aWRlb01hdHJpeENvZWZmaWNpZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cy5oCmluZGV4IGU5MDczNWM4OGQ3ZmU1
MWYzNzc1NWJkOGMwNzQ0ZmE2YjUzYzZmZTkuLjM5MWFkZWNhZDIyY2E2ZDkxMWViMDA4Yjc1NmM4
ZGVhNzc0ZjIyYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmgKQEAgLTM0
LDYgKzM0LDEyIEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cyA6
IHVpbnQ4X3QgewogICAgIEJ0NzA5LAogICAgIEJ0NDcwYmcsCiAgICAgU21wdGUxNzBtLAorICAg
IFNtcHRlMjQwbSwKKyAgICBGY2MsCisgICAgWUNnQ28sCisgICAgQnQyMDIwTm9uY29uc3RhbnRM
dW1pbmFuY2UsCisgICAgQnQyMDIwQ29uc3RhbnRMdW1pbmFuY2UsCisgICAgVW5zcGVjaWZpZWQs
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkBAIC00Niw3ICs1MiwxMyBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmlj
aWVudHM+IHsKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50
czo6UmdiLAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRz
OjpCdDcwOSwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50
czo6QnQ0NzBiZywKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNp
ZW50czo6U21wdGUxNzBtCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2Vm
ZmljaWVudHM6OlNtcHRlMTcwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJp
eENvZWZmaWNpZW50czo6U21wdGUyNDBtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVv
TWF0cml4Q29lZmZpY2llbnRzOjpGY2MsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9N
YXRyaXhDb2VmZmljaWVudHM6OllDZ0NvLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVv
TWF0cml4Q29lZmZpY2llbnRzOjpCdDIwMjBOb25jb25zdGFudEx1bWluYW5jZSwKKyAgICAgICAg
V2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQyMDIwQ29uc3RhbnRM
dW1pbmFuY2UsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVu
dHM6OlVuc3BlY2lmaWVkCiAgICAgPjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzLmgKaW5kZXggY2M3ZjFlYTIxNGU0YTlhYjVlYzFlNjJhYjI0NDYyODhh
ODQwZDRlYi4uYmIxODNjMDMwNjMwMWIzNzA3OGZkY2Q1NDAyM2ZmZTc0M2JjMmFiNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmgKQEAgLTMzLDYgKzMzLDIw
IEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzIDogdWlu
dDhfdCB7CiAgICAgQnQ3MDksCiAgICAgU21wdGUxNzBtLAogICAgIEllYzYxOTY2MjEsCisgICAg
R2FtbWEyMmN1cnZlLAorICAgIEdhbW1hMjhjdXJ2ZSwKKyAgICBTbXB0ZTI0MG0sCisgICAgTGlu
ZWFyLAorICAgIExvZywKKyAgICBMb2dTcXJ0LAorICAgIEllYzYxOTY2MjQsCisgICAgQnQxMzYx
RXh0ZW5kZWRDb2xvdXJHYW11dCwKKyAgICBCdDIwMjBfMTBiaXQsCisgICAgQnQyMDIwXzEyYml0
LAorICAgIFNtcHRlU3QyMDg0LAorICAgIFNtcHRlU3Q0MjgxLAorICAgIEFyaWJTdGRCNjdIbGcs
CisgICAgVW5zcGVjaWZpZWQKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTQ0LDcg
KzU4LDIxIEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzPiB7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3Jt
VmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcywKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDcwOSwKICAgICAgICAgV2ViQ29yZTo6UGxh
dGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTE3MG0sCi0gICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyMQor
ICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6Okll
YzYxOTY2MjEsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6R2FtbWEyMmN1cnZlLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkdhbW1hMjhjdXJ2ZSwKKyAgICAgICAgV2ViQ29yZTo6UGxh
dGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTI0MG0sCisgICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyLAorICAg
ICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZywK
KyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpM
b2dTcXJ0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OkllYzYxOTY2MjQsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2Zl
ckNoYXJhY3RlcmlzdGljczo6QnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dCwKKyAgICAgICAgV2Vi
Q29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTBiaXQs
CisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
QnQyMDIwXzEyYml0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OlNtcHRlU3QyMDg0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3Q0MjgxLAorICAgICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkFyaWJTdGRCNjdIbGcsCisgICAg
ICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVj
aWZpZWQKICAgICA+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAppbmRleCAwNGNiZTRkMjdmMTkwYjdi
MjdiOWNhN2U5OGE5YzQ3MTczZDJmODliLi5iZjQ3ZmNlYmI1NmUyZjlkZTU0YTQyMGRlMmQyMTZh
NDdlY2EyZjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
b3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcApAQCAtMzk4LDcgKzM5OCw3IEBAIHZvaWQgU291
cmNlQnVmZmVyUHJpdmF0ZTo6cmVlbnF1ZXVlTWVkaWFGb3JUaW1lKFRyYWNrQnVmZmVyJiB0cmFj
a0J1ZmZlciwgY29uc3QKICAgICAgICAgfHwgKGN1cnJlbnRTYW1wbGVQVFNJdGVyYXRvci0+Zmly
c3QgLSB0aW1lKSA+IHRpbWVGdWRnZUZhY3RvcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBTZWFjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZpb3VzIHN5bmMgc2FtcGxlLgorICAgIC8vIFNl
YXJjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZpb3VzIHN5bmMgc2FtcGxlLgogICAgIERlY29kZU9y
ZGVyU2FtcGxlTWFwOjpLZXlUeXBlIGRlY29kZUtleShjdXJyZW50U2FtcGxlUFRTSXRlcmF0b3It
PnNlY29uZC0+ZGVjb2RlVGltZSgpLCBjdXJyZW50U2FtcGxlUFRTSXRlcmF0b3ItPnNlY29uZC0+
cHJlc2VudGF0aW9uVGltZSgpKTsKICAgICBhdXRvIGN1cnJlbnRTYW1wbGVEVFNJdGVyYXRvciA9
IHRyYWNrQnVmZmVyLnNhbXBsZXMuZGVjb2RlT3JkZXIoKS5maW5kU2FtcGxlV2l0aERlY29kZUtl
eShkZWNvZGVLZXkpOwogICAgIEFTU0VSVChjdXJyZW50U2FtcGxlRFRTSXRlcmF0b3IgIT0gdHJh
Y2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigpLmVuZCgpKTsKQEAgLTExNzEsNiArMTE3MSw5
IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6ZGlkUmVjZWl2ZVNhbXBsZShSZWY8TWVkaWFT
YW1wbGU+JiYgb3JpZ2luYWxTYW1wbGUpCiAgICAgICAgICAgICAgICAgTWVkaWFUaW1lIGVyYXNl
QmVnaW5UaW1lID0gdHJhY2tCdWZmZXIuaGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcDsKICAg
ICAgICAgICAgICAgICBNZWRpYVRpbWUgZXJhc2VFbmRUaW1lID0gZnJhbWVFbmRUaW1lc3RhbXAg
LSBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2U7CiAKKyAgICAgICAgICAgICAgICBpZiAoZXJhc2VF
bmRUaW1lIDw9IGVyYXNlQmVnaW5UaW1lKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwog
ICAgICAgICAgICAgICAgIFByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjppdGVyYXRvcl9yYW5n
ZSByYW5nZTsKICAgICAgICAgICAgICAgICBpZiAoaGlnaGVzdEJ1ZmZlcmVkVGltZSAtIHRyYWNr
QnVmZmVyLmhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAgPCB0cmFja0J1ZmZlci5sYXN0RnJh
bWVEdXJhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbmV3IGZyYW1lIGlz
IGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcmVkIHJhbmdlcywgcGVyZm9ybSBhIHNlcXVlbnRpYWwg
c2NhbiBmcm9tIGVuZCAoTygxKSkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNv
ZGVyQVZGT2JqQy5tbQppbmRleCBhZDdmNDUxMDFjMDZhMTg4OGMwMDhmYWVkNGE5MTkwNTYxMzgy
OTNiLi42MjBhM2JlNjJhYjg0NTBmN2UzODY0NDg0NmY3OTg5MTIzODgxZjExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFn
ZURlY29kZXJBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KQEAgLTUzLDYgKzUzLDcg
QEAKICNpbXBvcnQgPHd0Zi9NZWRpYVRpbWUuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorI2ltcG9ydCA8d3RmL2NmL1R5cGVDYXN0c0NG
Lmg+CiAKICNpbXBvcnQgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCiAjaW1wb3J0ICJWaWRlb1Rvb2xi
b3hTb2Z0TGluay5oIgpAQCAtMjcyLDYgKzI3MywyNiBAQCBwcml2YXRlOgogICAgIHsKICAgICB9
CiAKKyAgICBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlRm9yQXR0YWNobWVudChD
RlN0cmluZ1JlZiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGJ5dGVPZmZzZXRDRiA9
IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oUEFMOjpDTUdldEF0dGFjaG1lbnQobV9zYW1w
bGUuZ2V0KCksIGtleSwgbnVsbHB0cikpOworICAgICAgICBpZiAoIWJ5dGVPZmZzZXRDRikKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgaW50NjRfdCBieXRlT2Zm
c2V0ID0gMDsKKyAgICAgICAgaWYgKCFDRk51bWJlckdldFZhbHVlKGJ5dGVPZmZzZXRDRiwga0NG
TnVtYmVyU0ludDY0VHlwZSwgJmJ5dGVPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgICAgICBDTUl0ZW1Db3VudCBzaXplQXJyYXlFbnRyaWVzID0gMDsKKyAg
ICAgICAgUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVNpemVBcnJheShtX3NhbXBsZS5nZXQo
KSwgMCwgbnVsbHB0ciwgJnNpemVBcnJheUVudHJpZXMpOworICAgICAgICBpZiAoc2l6ZUFycmF5
RW50cmllcyAhPSAxKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAg
ICBzaXplX3Qgc2luZ2xlU2l6ZUVudHJ5ID0gMDsKKyAgICAgICAgUEFMOjpDTVNhbXBsZUJ1ZmZl
ckdldFNhbXBsZVNpemVBcnJheShtX3NhbXBsZS5nZXQoKSwgMSwgJnNpbmdsZVNpemVFbnRyeSwg
bnVsbHB0cik7CisgICAgICAgIHJldHVybiB7IHsgQ2hlY2tlZFNpemUoYnl0ZU9mZnNldCksIHNp
bmdsZVNpemVFbnRyeSB9IH07CisgICAgfQorCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1f
aW1hZ2U7CiAgICAgYm9vbCBtX2hhc0FscGhhIHsgZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNh
bXBsZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oCmluZGV4IDZjY2ZmYjBkNmE5MmVmMDZhZTc2
Zjg4YTBiMjg1Njk3NWRhM2IyZjcuLjg3ZmFjODUxM2Y2NDVjYzBkMTI1ZmFhZjQzNmZjNjljYjAw
ZWY5MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oCkBA
IC02NCw4ICs2NCw2IEBAIHB1YmxpYzoKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IG92
ZXJyaWRlOwogICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgUGxhdGZvcm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlwZTsgfQot
ICAgIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBvdmVycmlkZTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlk
ZTsKICAgICB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFU
aW1lJikgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0RpdmlzYWJsZSgpIGNv
bnN0IG92ZXJyaWRlOwpAQCAtODMsOCArODEsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0hvbW9n
ZW5lb3VzKCkgY29uc3Q7CiAgICAgVmVjdG9yPFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+PiBkaXZp
ZGVJbnRvSG9tb2dlbmVvdXNTYW1wbGVzKCk7CiAKLSAgICB2b2lkIHNldEJ5dGVSYW5nZU9mZnNl
dChzaXplX3QpOwotCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgSEFWRShBVkNPTlRF
TlRLRVlTRVNTSU9OKQogICAgIHVzaW5nIEtleUlEcyA9IFZlY3RvcjxSZWY8RnJhZ21lbnRlZFNo
YXJlZEJ1ZmZlcj4+OwogICAgIHZvaWQgc2V0S2V5SURzKEtleUlEcyYmIGtleUlEcykgeyBtX2tl
eUlEcyA9IFdURk1vdmUoa2V5SURzKTsgfQpAQCAtMTAyLDggKzk4LDYgQEAgcHJvdGVjdGVkOgog
ICAgIFdFQkNPUkVfRVhQT1JUIE1lZGlhU2FtcGxlQVZGT2JqQyhDTVNhbXBsZUJ1ZmZlclJlZiwg
VmlkZW9Sb3RhdGlvbiwgYm9vbCBtaXJyb3JlZCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+TWVkaWFTYW1wbGVBVkZPYmpDKCk7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPE1lZGlhU2FtcGxl
OjpCeXRlUmFuZ2U+IGJ5dGVSYW5nZUZvckF0dGFjaG1lbnQoQ0ZTdHJpbmdSZWYga2V5KSBjb25z
dDsKLQogICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gbV9zYW1wbGU7CiAgICAgQXRv
bVN0cmluZyBtX2lkOwogICAgIFZpZGVvUm90YXRpb24gbV9yb3RhdGlvbiB7IFZpZGVvUm90YXRp
b246Ok5vbmUgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5t
bQppbmRleCBlODM4ZWNlMzE3ZTkwNDRiYmFjOWVjNzcwYjg5MWZjOWFkMzFjZGYwLi5lNWE2MTg0
ODIwNDI0NzIyNGNhNjIxNmM2YTU0YzkxZmRkMDk2YTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9i
akMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCkBAIC0zNCw3ICszNCw2IEBACiAjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9UeXBl
ZEFycmF5SW5saW5lcy5oPgogI2ltcG9ydCA8d3RmL1ByaW50U3RyZWFtLmg+Ci0jaW1wb3J0IDx3
dGYvY2YvVHlwZUNhc3RzQ0YuaD4KIAogI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsuaCIKICNp
bXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgpAQCAtMjQ1LDExICsyNDQsNiBAQCBG
bG9hdFNpemUgTWVkaWFTYW1wbGVBVkZPYmpDOjpwcmVzZW50YXRpb25TaXplKCkgY29uc3QKICAg
ICByZXR1cm4gRmxvYXRTaXplKFBBTDo6Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0UHJlc2Vu
dGF0aW9uRGltZW5zaW9ucyhmb3JtYXREZXNjcmlwdGlvbiwgdHJ1ZSwgdHJ1ZSkpOwogfQogCi12
b2lkIE1lZGlhU2FtcGxlQVZGT2JqQzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewot
ICAgIG91dC5wcmludCgie1BUUygiLCBwcmVzZW50YXRpb25UaW1lKCksICIpLCBEVFMoIiwgZGVj
b2RlVGltZSgpLCAiKSwgZHVyYXRpb24oIiwgZHVyYXRpb24oKSwgIiksIGZsYWdzKCIsIChpbnQp
ZmxhZ3MoKSwgIiksIHByZXNlbnRhdGlvblNpemUoIiwgcHJlc2VudGF0aW9uU2l6ZSgpLndpZHRo
KCksICJ4IiwgcHJlc2VudGF0aW9uU2l6ZSgpLmhlaWdodCgpLCAiKX0iKTsKLX0KLQogdm9pZCBN
ZWRpYVNhbXBsZUFWRk9iakM6Om9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmIG9m
ZnNldCkKIHsKICAgICBDTUl0ZW1Db3VudCBpdGVtQ291bnQgPSAwOwpAQCAtNTEwLDQ0ICs1MDQs
NiBAQCBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y2xv
bmVTYW1wbGVCdWZmZXJBbmRTZXRBc0Rpc3BsYQogICAgIHJldHVybiBhZG9wdENGKG5ld1NhbXBs
ZUJ1ZmZlcik7CiB9CiAKLXN0YXRpYyBDRlN0cmluZ1JlZiBieXRlUmFuZ2VPZmZzZXRBdHRhY2ht
ZW50S2V5KCkKLXsKLSAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYga2V5ID0gQ0ZTVFIoIldlYktpdE1l
ZGlhU2FtcGxlQnl0ZVJhbmdlT2Zmc2V0Iik7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotc3RkOjpv
cHRpb25hbDxNZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlPiBNZWRpYVNhbXBsZUFWRk9iakM6OmJ5dGVS
YW5nZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGJ5dGVSYW5nZUZvckF0dGFjaG1lbnQoYnl0ZVJh
bmdlT2Zmc2V0QXR0YWNobWVudEtleSgpKTsKLX0KLQotdm9pZCBNZWRpYVNhbXBsZUFWRk9iakM6
OnNldEJ5dGVSYW5nZU9mZnNldChzaXplX3QgYnl0ZU9mZnNldCkKLXsKLSAgICBpbnQ2NF90IGNo
ZWNrZWRPZmZzZXQgPSBDaGVja2VkSW50NjQoYnl0ZU9mZnNldCk7Ci0gICAgYXV0byBvZmZzZXRO
dW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51
bWJlclNJbnQ2NFR5cGUsICZjaGVja2VkT2Zmc2V0KSk7Ci0gICAgUEFMOjpDTVNldEF0dGFjaG1l
bnQobV9zYW1wbGUuZ2V0KCksIGJ5dGVSYW5nZU9mZnNldEF0dGFjaG1lbnRLZXkoKSwgb2Zmc2V0
TnVtYmVyLmdldCgpLCBrQ01BdHRhY2htZW50TW9kZV9TaG91bGRQcm9wYWdhdGUpOwotfQotCi1z
dGQ6Om9wdGlvbmFsPE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2U+IE1lZGlhU2FtcGxlQVZGT2JqQzo6
Ynl0ZVJhbmdlRm9yQXR0YWNobWVudChDRlN0cmluZ1JlZiBrZXkpIGNvbnN0Ci17Ci0gICAgYXV0
byBieXRlT2Zmc2V0Q0YgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KFBBTDo6Q01HZXRB
dHRhY2htZW50KG1fc2FtcGxlLmdldCgpLCBrZXksIG51bGxwdHIpKTsKLSAgICBpZiAoIWJ5dGVP
ZmZzZXRDRikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGludDY0X3QgYnl0
ZU9mZnNldCA9IDA7Ci0gICAgaWYgKCFDRk51bWJlckdldFZhbHVlKGJ5dGVPZmZzZXRDRiwga0NG
TnVtYmVyU0ludDY0VHlwZSwgJmJ5dGVPZmZzZXQpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotCi0gICAgQ01JdGVtQ291bnQgc2l6ZUFycmF5RW50cmllcyA9IDA7Ci0gICAgUEFMOjpD
TVNhbXBsZUJ1ZmZlckdldFNhbXBsZVNpemVBcnJheShtX3NhbXBsZS5nZXQoKSwgMCwgbnVsbHB0
ciwgJnNpemVBcnJheUVudHJpZXMpOwotICAgIGlmIChzaXplQXJyYXlFbnRyaWVzICE9IDEpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBzaXplX3Qgc2luZ2xlU2l6ZUVudHJ5
ID0gMDsKLSAgICBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlU2l6ZUFycmF5KG1fc2FtcGxl
LmdldCgpLCAxLCAmc2luZ2xlU2l6ZUVudHJ5LCBudWxscHRyKTsKLSAgICByZXR1cm4geyB7IENo
ZWNrZWRTaXplKGJ5dGVPZmZzZXQpLCBzaW5nbGVTaXplRW50cnkgfSB9OwotfQotCiBDVlBpeGVs
QnVmZmVyUmVmIE1lZGlhU2FtcGxlQVZGT2JqQzo6cGl4ZWxCdWZmZXIoKSBjb25zdAogewogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxDVlBpeGVsQnVmZmVyUmVmPihQQUw6OkNNU2FtcGxlQnVmZmVy
R2V0SW1hZ2VCdWZmZXIobV9zYW1wbGUuZ2V0KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiNzFi
ODdmZjYzZWQzMzhkOTVmY2RmNmIyZGQyNGY0ODM3NzAzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5oCkBAIC0w
LDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKENP
Q09BKQorCisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBD
TUZvcm1hdERlc2NyaXB0aW9uUmVmOwordHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZm
ZXIqIENNU2FtcGxlQnVmZmVyUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1l
ZGlhU2FtcGxlc0Jsb2NrOworc3RydWN0IFRyYWNrSW5mbzsKKworV0VCQ09SRV9FWFBPUlQgUmV0
YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJv
bVRyYWNrSW5mbyhjb25zdCBUcmFja0luZm8mKTsKKy8vIENvbnZlcnQgTWVkaWFTYW1wbGVzQmxv
Y2sgdG8gdGhlIGVxdWl2YWxlbnQgQ01TYW1wbGVCdWZmZXJSZWYuIElmIENNRm9ybWF0RGVzY3Jp
cHRpb25SZWYKKy8vIGlzIHNldCBpdCB3aWxsIGJlIHVzZWQsIG90aGVyd2lzZSBpdCB3aWxsIGJl
IGNyZWF0ZWQgZnJvbSB0aGUgTWVkaWFTYW1wbGVzQmxvY2sncyBUcmFja0luZm8uCitXRUJDT1JF
X0VYUE9SVCBFeHBlY3RlZDxSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+LCBDU3RyaW5nPiB0
b0NNU2FtcGxlQnVmZmVyKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIENNRm9ybWF0RGVzY3JpcHRpb25S
ZWYgPSBudWxscHRyKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjE4MmMw
NGI3YmQ4MTc4NjAxZTgxMWQ0OWFkMDc1Zjg1MmVlMjM5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLm1tCkBAIC0w
LDAgKzEsMjc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIkNNVXRpbGl0aWVzLmgiCisKKyNpZiBQTEFURk9STShDT0NPQSkKKworI2ltcG9ydCAiQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJN
ZWRpYVNhbXBsZS5oIgorI2ltcG9ydCAiTWVkaWFVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlNoYXJl
ZEJ1ZmZlci5oIgorI2ltcG9ydCAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKKyNpbXBvcnQg
PENvcmVNZWRpYS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CisjaW1wb3J0IDxwYWwvYXZmb3VuZGF0
aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8d3RmL1Njb3BlLmg+CisjaW1w
b3J0IDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KKworI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsu
aCIKKyNpbXBvcnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgiCisjaW1wb3J0IDxwYWwvY29jb2Ev
QVZGb3VuZGF0aW9uU29mdExpbmsuaD4KKyNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5oPgorI2ltcG9ydCA8cGFsL2NmL0F1ZGlvVG9vbGJveFNvZnRMaW5rLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKE9QVVMpIHx8IEVOQUJMRShWT1JCSVMpCisKK3N0
YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXRE
ZXNjcmlwdGlvbihjb25zdCBBdWRpb0luZm8mIGluZm8pCit7CisgICAgQXVkaW9TdHJlYW1CYXNp
Y0Rlc2NyaXB0aW9uIGFzYmQgeyB9OworICAgIGFzYmQubUZvcm1hdElEID0gaW5mby5jb2RlY05h
bWUudmFsdWU7CisgICAgVUludDMyIHNpemUgPSBzaXplb2YoYXNiZCk7CisgICAgYXV0byBlcnJv
ciA9IFBBTDo6QXVkaW9Gb3JtYXRHZXRQcm9wZXJ0eShrQXVkaW9Gb3JtYXRQcm9wZXJ0eV9Gb3Jt
YXRJbmZvLCBpbmZvLmNvb2tpZURhdGEtPnNpemUoKSwgaW5mby5jb29raWVEYXRhLT5kYXRhKCks
ICZzaXplLCAmYXNiZCk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE1lZGlhLCAiY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbiBmYWlsZWQgd2l0aCBlcnJv
ciAlZCAoJS40cykiLCBlcnJvciwgKGNoYXIgKikmZXJyb3IpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oYXNiZCksIGluZm8uY29va2llRGF0YS0+c2l6ZSgpLCBp
bmZvLmNvb2tpZURhdGEtPmRhdGEoKSk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgQ0ZTdHJpbmdS
ZWYgY29udmVydFRvQ01Db2xvclByaW1hcmllcyhQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMg
cHJpbWFyaWVzKQoreworICAgIHN3aXRjaCAocHJpbWFyaWVzKSB7CisgICAgY2FzZSBQbGF0Zm9y
bVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0NzA5OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZm
ZXJDb2xvclByaW1hcmllc19JVFVfUl83MDlfMjsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xv
clByaW1hcmllczo6SmVkZWNQMjJQaG9zcGhvcnM6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1
ZmZlckNvbG9yUHJpbWFyaWVzX0VCVV8zMjEzOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9y
UHJpbWFyaWVzOjpTbXB0ZTE3MG06CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJp
ZXM6OlNtcHRlMjQwbToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJp
ZXNfU01QVEVfQzsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGVS
cDQzMToKKyAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1h
cmllc19EQ0lfUDM7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRl
RWc0MzI6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmlt
YXJpZXNfUDNfRDY1OworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpCdDIw
MjA6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJp
ZXNfSVRVX1JfMjAyMDsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9Cit9CisKKworc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlv
bihQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgY2hhcmFjdGVyaXN0aWNzKQor
eworICAgIHN3aXRjaCAoY2hhcmFjdGVyaXN0aWNzKSB7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0NzA5OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VC
dWZmZXJUcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzcwOV8yOworICAgIGNhc2UgUGxhdGZvcm1WaWRl
b1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTI0MG06CisgICAgICAgIHJldHVybiBrQ1ZJ
bWFnZUJ1ZmZlclRyYW5zZmVyRnVuY3Rpb25fU01QVEVfMjQwTV8xOTk1OworICAgIGNhc2UgUGxh
dGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZVN0MjA4NDoKKyAgICAgICAg
cmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX1NNUFRFX1NU
XzIwODRfUFE7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkJ0MjAyMF8xMGJpdDoKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6QnQyMDIwXzEyYml0OgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlw
dGlvblRyYW5zZmVyRnVuY3Rpb25fSVRVX1JfMjAyMDsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGVTdDQyODE6CisgICAgICAgIHJldHVybiBQQUw6
OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF80MjhfMTsKKyAg
ICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QXJpYlN0ZEI2N0hs
ZzoKKyAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0
aW9uX0lUVV9SXzIxMDBfSExHOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpJZWM2MTk2NjIxOgorICAgICAgICByZXR1cm4gUEFMOjpjYW5Mb2FkX0NvcmVN
ZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpID8gUEFMOjpn
ZXRfQ29yZU1lZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkg
OiBudWxscHRyOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpMaW5lYXI6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNm
ZXJGdW5jdGlvbl9MaW5lYXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorfQorCitzdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01ZQ2JDUk1hdHJpeChQ
bGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzIGNvZWZmaWNpZW50cykKK3sKKyAgICBzd2l0
Y2ggKGNvZWZmaWNpZW50cykgeworICAgIGNhc2UgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNp
ZW50czo6QnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBQQUw6OmtD
TUZvcm1hdERlc2NyaXB0aW9uWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMDsKKyAgICBjYXNlIFBsYXRm
b3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0NDcwYmc6CisgICAgY2FzZSBQbGF0Zm9ybVZp
ZGVvTWF0cml4Q29lZmZpY2llbnRzOjpTbXB0ZTE3MG06CisgICAgICAgIHJldHVybiBrQ1ZJbWFn
ZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzYwMV80OworICAgIGNhc2UgUGxhdGZvcm1WaWRlb01h
dHJpeENvZWZmaWNpZW50czo6QnQ3MDk6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllD
YkNyTWF0cml4X0lUVV9SXzcwOV8yOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZm
aWNpZW50czo6U21wdGUyNDBtOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1h
dHJpeF9TTVBURV8yNDBNXzE5OTU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorfQorCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRl
Rm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKGNvbnN0IFRyYWNrSW5mbyYgaW5mbykKK3sK
KyAgICBBU1NFUlQoaW5mby5pc1ZpZGVvKCkgfHwgaW5mby5pc0F1ZGlvKCkpOworCisgICAgaWYg
KGluZm8uaXNBdWRpbygpKSB7CisgICAgICAgIGF1dG8mIGF1ZGlvSW5mbyA9IGRvd25jYXN0PGNv
bnN0IEF1ZGlvSW5mbz4oaW5mbyk7CisgICAgICAgIGlmICghYXVkaW9JbmZvLmNvb2tpZURhdGEg
fHwgIWF1ZGlvSW5mby5jb29raWVEYXRhLT5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICBzd2l0Y2ggKGF1ZGlvSW5mby5jb2RlY05hbWUudmFsdWUpIHsKKyNp
ZiBFTkFCTEUoT1BVUykKKyAgICAgICAgY2FzZSAnb3B1cyc6CisgICAgICAgICAgICBpZiAoIWlz
T3B1c0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGF1ZGlvSW5m
byk7CisjZW5kaWYKKyNpZiBFTkFCTEUoVk9SQklTKQorICAgICAgICBjYXNlICd2b3JiJzoKKyAg
ICAgICAgICAgIGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXRE
ZXNjcmlwdGlvbihhdWRpb0luZm8pOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8mIHZpZGVv
SW5mbyA9IGRvd25jYXN0PGNvbnN0IFZpZGVvSW5mbz4oaW5mbyk7CisKKyAgICBhdXRvIGRhdGEg
PSB2aWRlb0luZm8uYXRvbURhdGEtPmNyZWF0ZUNGRGF0YSgpOworICAgIEFTU0VSVCh2aWRlb0lu
Zm8uY29kZWNOYW1lID09ICd2cDA5JyB8fCB2aWRlb0luZm8uY29kZWNOYW1lID09ICd2cDA4Jyk7
CisgICAgQ0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25LZXlzW10gPSB7IENGU1RSKCJ2cGNDIikgfTsK
KyAgICBDRlR5cGVSZWYgY29uZmlndXJhdGlvblZhbHVlc1tdID0geyBkYXRhLmdldCgpIH07Cisg
ICAgYXV0byBjb25maWd1cmF0aW9uRGljdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGNvbmZpZ3VyYXRpb25LZXlzLCBjb25maWd1cmF0aW9uVmFsdWVz
LCBXVEZfQVJSQVlfTEVOR1RIKGNvbmZpZ3VyYXRpb25LZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworCisgICAg
VmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc0tleXMgeyBQQUw6OmtDTUZvcm1hdERlc2NyaXB0
aW9uRXh0ZW5zaW9uX1NhbXBsZURlc2NyaXB0aW9uRXh0ZW5zaW9uQXRvbXMgfTsKKyAgICBWZWN0
b3I8Q0ZUeXBlUmVmPiBleHRlbnNpb25zVmFsdWVzID0geyBjb25maWd1cmF0aW9uRGljdC5nZXQo
KSB9OworCisgICAgaWYgKHZpZGVvSW5mby5jb2xvclNwYWNlLmZ1bGxSYW5nZSAmJiAqdmlkZW9J
bmZvLmNvbG9yU3BhY2UuZnVsbFJhbmdlKSB7CisgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVu
ZChQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uRXh0ZW5zaW9uX0Z1bGxSYW5nZVZpZGVvKTsKKyAg
ICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoa0NGQm9vbGVhblRydWUpOworICAgIH0KKwor
ICAgIGlmICh2aWRlb0luZm8uY29sb3JTcGFjZS5wcmltYXJpZXMpIHsKKyAgICAgICAgaWYgKGF1
dG8gY21Db2xvclByaW1hcmllcyA9IGNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMoKnZpZGVvSW5m
by5jb2xvclNwYWNlLnByaW1hcmllcykpIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFw
cGVuZChrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzS2V5KTsKKyAgICAgICAgICAgIGV4dGVu
c2lvbnNWYWx1ZXMuYXBwZW5kKGNtQ29sb3JQcmltYXJpZXMpOworICAgICAgICB9CisgICAgfQor
ICAgIGlmICh2aWRlb0luZm8uY29sb3JTcGFjZS50cmFuc2ZlcikgeworICAgICAgICBpZiAoYXV0
byBjbVRyYW5zZmVyRnVuY3Rpb24gPSBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24oKnZpZGVv
SW5mby5jb2xvclNwYWNlLnRyYW5zZmVyKSkgeworICAgICAgICAgICAgZXh0ZW5zaW9uc0tleXMu
YXBwZW5kKGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbktleSk7CisgICAgICAgICAgICBl
eHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbVRyYW5zZmVyRnVuY3Rpb24pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHZpZGVvSW5mby5jb2xvclNwYWNlLm1hdHJpeCkgeworICAgICAgICBp
ZiAoYXV0byBjbU1hdHJpeCA9IGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgoKnZpZGVvSW5mby5jb2xv
clNwYWNlLm1hdHJpeCkpIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJ
bWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5KTsKKyAgICAgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMu
YXBwZW5kKGNtTWF0cml4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gZXh0ZW5zaW9u
cyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGV4dGVu
c2lvbnNLZXlzLmRhdGEoKSwgZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCksIGV4dGVuc2lvbnNLZXlz
LnNpemUoKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25h
cnlWYWx1ZUNhbGxCYWNrcykpOworCisgICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZv
cm1hdERlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICBDTVZpZGVvQ29kZWNUeXBlIGNvZGVjID0g
dmlkZW9JbmZvLmNvZGVjTmFtZSA9PSAidnAwOSIgPyBrQ01WaWRlb0NvZGVjVHlwZV9WUDkgOiAn
dnAwOCc7CisgICAgaWYgKG5vRXJyICE9IFBBTDo6Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvZGVjLCB2aWRlb0luZm8uc2l6ZS53aWR0aCgpLCB2
aWRlb0luZm8uc2l6ZS5oZWlnaHQoKSwgZXh0ZW5zaW9ucy5nZXQoKSwgJmZvcm1hdERlc2NyaXB0
aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYWRvcHRDRihmb3Jt
YXREZXNjcmlwdGlvbik7Cit9CisKK0V4cGVjdGVkPFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJl
Zj4sIENTdHJpbmc+IHRvQ01TYW1wbGVCdWZmZXIoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGVz
LCBDTUZvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uKQoreworICAgIGlmICgh
c2FtcGxlcy5pbmZvKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm8gVHJhY2tJ
bmZvIGZvdW5kIik7CisKKyAgICBhdXRvIHNjb3BlRXhpdCA9IG1ha2VTY29wZUV4aXQoWyZdIHsK
KyAgICAgICAgc2FtcGxlcy5jbGVhcigpOworICAgIH0pOworCisgICAgYXV0byBmb3JtYXQgPSBm
b3JtYXREZXNjcmlwdGlvbiA/IHJldGFpblB0cihmb3JtYXREZXNjcmlwdGlvbikgOiBjcmVhdGVG
b3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8oKnNhbXBsZXMuaW5mbygpKTsKKyAgICBpZiAo
IWZvcm1hdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJObyBDTUZvcm1hdERlc2Ny
aXB0aW9uIGF2YWlsYWJsZSIpOworCisgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IGNv
bXBsZXRlQmxvY2tCdWZmZXJzOworICAgIGlmIChzYW1wbGVzLnNpemUoKSA+IDEpIHsKKyAgICAg
ICAgLy8gT3B0aW1pc2F0aW9uIHNvIHRoYXQgd2UgYWxsb2NhdGUgdGhlIGVudGlyZSBDTUJsb2Nr
QnVmZmVyIGF0IG9uY2UgaWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIHRvIHJldHVybi4KKyAgICAg
ICAgQ01CbG9ja0J1ZmZlclJlZiByYXdCbG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGF1
dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgc2FtcGxlcy5zaXplKCksIDAsICZyYXdCbG9ja0J1ZmZlcik7CisgICAgICAgIGlmIChlcnIg
IT0ga0NNQmxvY2tCdWZmZXJOb0VyciB8fCAhcmF3QmxvY2tCdWZmZXIpCisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNNQmxvY2tCdWZmZXJDcmVhdGVFbXB0eSBmYWlsZWQiKTsK
KyAgICAgICAgY29tcGxldGVCbG9ja0J1ZmZlcnMgPSByYXdCbG9ja0J1ZmZlcjsKKyAgICB9CisK
KyAgICBWZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiBwYWNrZXRUaW1pbmdzOworICAgIHBhY2tl
dFRpbWluZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzYW1wbGVzLnNpemUoKSk7CisgICAgVmVj
dG9yPHNpemVfdD4gcGFja2V0U2l6ZXM7CisgICAgcGFja2V0U2l6ZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShzYW1wbGVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBzYW1wbGUgOiBzYW1wbGVz
KSB7CisgICAgICAgIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgRnJhZ21l
bnRlZFNoYXJlZEJ1ZmZlcj4+KHNhbXBsZS5kYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiSW52YWxpZCBNZWRpYVNhbXBsZXNCbG9jayB0eXBlIik7CisgICAgICAgIGF1
dG8mIGRhdGEgPSBzdGQ6OmdldDxSZWY8Y29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+KHNh
bXBsZS5kYXRhKTsKKyAgICAgICAgYXV0byBibG9ja0J1ZmZlciA9IGRhdGEtPmNyZWF0ZUNNQmxv
Y2tCdWZmZXIoKTsKKyAgICAgICAgaWYgKCFibG9ja0J1ZmZlcikKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiQ291bGRuJ3QgY3JlYXRlIENNQmxvY2tCdWZmZXIiKTsKKworICAg
ICAgICBpZiAoIWNvbXBsZXRlQmxvY2tCdWZmZXJzKQorICAgICAgICAgICAgY29tcGxldGVCbG9j
a0J1ZmZlcnMgPSBXVEZNb3ZlKGJsb2NrQnVmZmVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZShj
b21wbGV0ZUJsb2NrQnVmZmVycy5nZXQoKSwgYmxvY2tCdWZmZXIuZ2V0KCksIDAsIDAsIDApOwor
ICAgICAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQorICAgICAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ01CbG9ja0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVy
ZW5jZSBmYWlsZWQiKTsKKyAgICAgICAgfQorICAgICAgICBwYWNrZXRUaW1pbmdzLmFwcGVuZCh7
IFBBTDo6dG9DTVRpbWUoc2FtcGxlLmR1cmF0aW9uKSwgUEFMOjp0b0NNVGltZShzYW1wbGUucHJl
c2VudGF0aW9uVGltZSksIFBBTDo6dG9DTVRpbWUoc2FtcGxlLmRlY29kZVRpbWUpIH0pOworICAg
ICAgICBwYWNrZXRTaXplcy5hcHBlbmQoZGF0YS0+c2l6ZSgpKTsKKyAgICB9CisKKyAgICBDTVNh
bXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOworICAgIGlmIChhdXRvIGVy
ciA9IFBBTDo6Q01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBj
b21wbGV0ZUJsb2NrQnVmZmVycy5nZXQoKSwgZm9ybWF0LmdldCgpLCBwYWNrZXRTaXplcy5zaXpl
KCksIHBhY2tldFRpbWluZ3Muc2l6ZSgpLCBwYWNrZXRUaW1pbmdzLmRhdGEoKSwgcGFja2V0U2l6
ZXMuc2l6ZSgpLCBwYWNrZXRTaXplcy5kYXRhKCksICZyYXdTYW1wbGVCdWZmZXIpKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkgZmFpbGVk
OiBPT00iKTsKKworICAgIGlmIChzYW1wbGVzLmlzVmlkZW8oKSAmJiBzYW1wbGVzLnNpemUoKSkg
eworICAgICAgICBhdXRvIGF0dGFjaG1lbnRzQXJyYXkgPSBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0
U2FtcGxlQXR0YWNobWVudHNBcnJheShyYXdTYW1wbGVCdWZmZXIsIHRydWUpOworICAgICAgICBB
U1NFUlQoYXR0YWNobWVudHNBcnJheSk7CisgICAgICAgIGlmICghYXR0YWNobWVudHNBcnJheSkK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm8gc2FtcGxlIGF0dGFjaG1lbnQg
Zm91bmQiKTsKKyAgICAgICAgQVNTRVJUKHNpemVfdChDRkFycmF5R2V0Q291bnQoYXR0YWNobWVu
dHNBcnJheSkpID09IHNhbXBsZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChDRkluZGV4IGkgPSAw
LCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSBj
aGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJ
bmRleChhdHRhY2htZW50c0FycmF5LCBpKSk7CisgICAgICAgICAgICBpZiAoIShzYW1wbGVzW2ld
LmZsYWdzICYgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpJc1N5bmMpKQorICAgICAgICAgICAg
ICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBQQUw6OmtDTVNhbXBsZUF0dGFj
aG1lbnRLZXlfTm90U3luYywga0NGQm9vbGVhblRydWUpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBh
cnNlcldlYk0uY3BwCmluZGV4IGFlMTY0MTRmMjFjNjg0NmMxODk3NzA5ZTE0MjRlNGE2YTRiNzYx
YTAuLmUxYTY0N2NhYWEwZDRjZTY2ZTQ3NDMzZDdmMTc5NjFiMjhmOTQyN2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNl
cldlYk0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1Nv
dXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKE1F
RElBX1NPVVJDRSkKIAogI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlV2ViTS5oIgorI2luY2x1
ZGUgIkNNVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKICNpbmNsdWRlICJJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtMzYsMjUg
KzM3LDE4IEBACiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIK
LSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJWUDlVdGlsaXRpZXNDb2NvYS5o
IgogI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlV2ViTS5oIgogI2luY2x1ZGUgIldlYk1BdWRp
b1V0aWxpdGllc0NvY29hLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRGF0YVZpZXcuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8d2VibS93ZWJtX3BhcnNlci5oPgogI2luY2x1ZGUgPHd0Zi9BbGdvcml0aG1z
Lmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlckhlbHBlci5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGlzdC5oPgotI2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgogI2luY2x1ZGUgPHd0
Zi9kYXJ3aW4vV2Vha0xpbmtpbmcuaD4KICNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9PU1Zhcmlh
bnRTUEkuaD4KIAogI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCi0jaW5jbHVkZSAiVmlk
ZW9Ub29sYm94U29mdExpbmsuaCIKLSNpbmNsdWRlIDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsu
aD4KIAogV1RGX1dFQUtfTElOS19GT1JDRV9JTVBPUlQod2VibTo6c3dhcCk7CiAKQEAgLTIzNSwy
NSArMjI5LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgTG9nQXJndW1lbnQ8d2VibTo6SWQ+IHsKICAg
ICB9CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpTdGF0ZT4gewotICAgIHN0YXRpYyBBU0NJSUxpdGVyYWwgdG9TdHJp
bmcoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGUgc3RhdGUpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6U3RhdGU6Ok5vbmU6IHJldHVybiAiTm9uZSJfczsKLSAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ0VibWw6IHJl
dHVybiAiUmVhZGluZ0VibWwiX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRFYm1sOiByZXR1cm4gIlJlYWRFYm1sIl9zOwotICAgICAg
ICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5nU2Vn
bWVudDogcmV0dXJuICJSZWFkaW5nU2VnbWVudCJfczsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ0luZm86IHJldHVybiAiUmVhZGlu
Z0luZm8iX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
U3RhdGU6OlJlYWRJbmZvOiByZXR1cm4gIlJlYWRJbmZvIl9zOwotICAgICAgICBjYXNlIFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5nVHJhY2tzOiByZXR1cm4g
IlJlYWRpbmdUcmFja3MiX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6U3RhdGU6OlJlYWRpbmdUcmFjazogcmV0dXJuICJSZWFkaW5nVHJhY2siX3M7Ci0g
ICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRU
cmFjazogcmV0dXJuICJSZWFkVHJhY2siX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRpbmdDbHVzdGVyOiByZXR1cm4gIlJlYWRpbmdD
bHVzdGVyIl9zOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAiVW5rbm93biJfczsKLSAgICB9
Ci19OwotCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjc3
LDE0ICsyNTIsMTQgQEAgc3RhdGljIFN0YXR1cyBzZWdtZW50UmVhZEVycm9yVG9XZWJtU3RhdHVz
KFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudDo6UmVhZEVycm8KIHsKICAgICBzd2l0Y2ggKGVy
cm9yKSB7CiAgICAgY2FzZSBTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ6OlJlYWRFcnJvcjo6
RW5kT2ZGaWxlOiByZXR1cm4gU3RhdHVzKFN0YXR1czo6a0VuZE9mRmlsZSk7Ci0gICAgY2FzZSBT
b3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ6OlJlYWRFcnJvcjo6RmF0YWxFcnJvcjogcmV0dXJu
IFN0YXR1cyhTdGF0dXM6OkNvZGUoU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6RXJyb3JDb2RlOjpS
ZWFkZXJGYWlsZWQpKTsKKyAgICBjYXNlIFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudDo6UmVh
ZEVycm9yOjpGYXRhbEVycm9yOiByZXR1cm4gU3RhdHVzKFN0YXR1czo6Q29kZShXZWJNUGFyc2Vy
OjpFcnJvckNvZGU6OlJlYWRlckZhaWxlZCkpOwogICAgIH0KIH0KIAotY2xhc3MgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6U2VnbWVudFJlYWRlciBmaW5hbCA6IHB1YmxpYyB3ZWJtOjpSZWFkZXIg
eworY2xhc3MgV2ViTVBhcnNlcjo6U2VnbWVudFJlYWRlciBmaW5hbCA6IHB1YmxpYyB3ZWJtOjpS
ZWFkZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHZvaWQg
YXBwZW5kU2VnbWVudChTZWdtZW50JiYgc2VnbWVudCkKKyAgICB2b2lkIGFwcGVuZFNlZ21lbnQo
U291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50JiYgc2VnbWVudCkKICAgICB7CiAgICAgICAgIG1f
ZGF0YS5wdXNoX2JhY2soV1RGTW92ZShzZWdtZW50KSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRT
ZWdtZW50ID09IG1fZGF0YS5lbmQoKSkKQEAgLTM2NSwyMSArMzQwLDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtXb3VsZEJsb2NrKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBGcmVlU2hhcmVkQnVmZmVyKHZvaWQqIHJlZmNvbiwgdm9pZCosIHNpemVfdCkK
LSAgICB7Ci0gICAgICAgIGF1dG8qIGJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2hhcmVkQnVm
ZmVyKj4ocmVmY29uKTsKLSAgICAgICAgYnVmZmVyLT5kZXJlZigpOwotICAgIH0KLQotICAgIFN0
YXR1cyBSZWFkSW50byhzdGQ6OnNpemVfdCBudW1Ub1JlYWQsIENNQmxvY2tCdWZmZXJSZWYgb3V0
cHV0QnVmZmVyLCB1aW50NjRfdCogbnVtQWN0dWFsbHlSZWFkKQorICAgIFN0YXR1cyBSZWFkSW50
byhzdGQ6OnNpemVfdCBudW1Ub1JlYWQsIFNoYXJlZEJ1ZmZlckJ1aWxkZXImIG91dHB1dEJ1ZmZl
ciwgdWludDY0X3QqIG51bUFjdHVhbGx5UmVhZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChvdXRw
dXRCdWZmZXIgJiYgbnVtQWN0dWFsbHlSZWFkKTsKKyAgICAgICAgQVNTRVJUKG51bUFjdHVhbGx5
UmVhZCk7CiAgICAgICAgIGlmICghbnVtQWN0dWFsbHlSZWFkKQogICAgICAgICAgICAgcmV0dXJu
IFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwogCiAgICAgICAgICpudW1BY3R1YWxs
eVJlYWQgPSAwOwotICAgICAgICBpZiAoIW91dHB1dEJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKIAogICAgICAgICB3aGlsZSAobnVt
VG9SZWFkICYmIG1fY3VycmVudFNlZ21lbnQgIT0gbV9kYXRhLmVuZCgpKSB7CiAgICAgICAgICAg
ICBhdXRvJiBjdXJyZW50U2VnbWVudCA9ICptX2N1cnJlbnRTZWdtZW50OwpAQCAtMzg5LDQ0ICsz
NTYsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVmZmVyID0gY3VycmVu
dFNlZ21lbnQuZ2V0U2hhcmVkQnVmZmVyKCk7Ci0gICAgICAgICAgICBDTUJsb2NrQnVmZmVyUmVm
IHJhd0Jsb2NrQnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHVpbnQ2NF90IGxhc3RSZWFk
ID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJhd0Jsb2NrQnVmZmVyOwog
ICAgICAgICAgICAgaWYgKCFzaGFyZWRCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBj
b3VsZCBwb3RlbnRpYWxseSBhbGxvY2F0ZSBtb3JlIG1lbW9yeSB0aGFuIG5lZWRlZCBpZiB0aGUg
cmVhZCBpcyBwYXJ0aWFsLgotICAgICAgICAgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2Nr
QnVmZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2NrKGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIs
IG51bVRvUmVhZCwga0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgMCwgbnVtVG9SZWFkLCBr
Q01CbG9ja0J1ZmZlckFzc3VyZU1lbW9yeU5vd0ZsYWcsICZyYXdCbG9ja0J1ZmZlcik7Ci0gICAg
ICAgICAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7Ci0gICAgICAg
ICAgICAgICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICBzaXplX3Qgc2VnbWVudFNpemVBdFBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgICAgICBl
cnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihyYXdCbG9ja0J1ZmZlciwgMCwg
JnNlZ21lbnRTaXplQXRQb3NpdGlvbiwgbnVsbHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJEYXRh
KTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCisgICAg
ICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBpZiAo
IWJ1ZmZlci50cnlSZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bVRvUmVhZCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAgICAg
ICAgICAgICAgICBhdXRvIHJlYWRSZXN1bHQgPSBjdXJyZW50U2VnbWVudC5yZWFkKG1fcG9zaXRp
b25XaXRoaW5TZWdtZW50LCBudW1Ub1JlYWQsIGJsb2NrQnVmZmVyRGF0YSk7CisgICAgICAgICAg
ICAgICAgYnVmZmVyLnJlc2l6ZShudW1Ub1JlYWQpOworICAgICAgICAgICAgICAgIGF1dG8gcmVh
ZFJlc3VsdCA9IGN1cnJlbnRTZWdtZW50LnJlYWQobV9wb3NpdGlvbldpdGhpblNlZ21lbnQsIG51
bVRvUmVhZCwgYnVmZmVyLmRhdGEoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZWFkUmVzdWx0
Lmhhc192YWx1ZSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VnbWVudFJlYWRFcnJv
clRvV2VibVN0YXR1cyhyZWFkUmVzdWx0LmVycm9yKCkpOwotICAgICAgICAgICAgICAgIGxhc3RS
ZWFkID0gcmVhZFJlc3VsdC52YWx1ZSgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAvLyBUT0RPOiBjb3VsZCB3ZSBvbmx5IGNyZWF0ZSBhIG5ldyBDTUJsb2NrQnVmZmVy
IGlmIHRoZSBiYWNrZW5kIG1lbW9yeSBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBvbmU/Ci0g
ICAgICAgICAgICAgICAgc2l6ZV90IGNhblJlYWQgPSBzdGQ6Om1pbjxzaXplX3Q+KG51bVRvUmVh
ZCwgc2hhcmVkQnVmZmVyLT5zaXplKCkgLSBtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCk7Ci0gICAg
ICAgICAgICAgICAgLy8gRnJvbSBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxvY2tTb3VyY2UgZG9jdW1l
bnRhdGlvbjoKLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgZm9yIDY0LWJpdCBhcmNoaXRl
Y3R1cmVzLCB0aGlzIHN0cnVjdCBjb250YWlucyBtaXNhbGlnbmVkIGZ1bmN0aW9uIHBvaW50ZXJz
LgotICAgICAgICAgICAgICAgIC8vIFRvIGF2b2lkIGxpbmstdGltZSBpc3N1ZXMsIGl0IGlzIHJl
Y29tbWVuZGVkIHRoYXQgY2xpZW50cyBmaWxsIENNQmxvY2tCdWZmZXJDdXN0b21CbG9ja1NvdXJj
ZSdzIGZ1bmN0aW9uIHBvaW50ZXIgZmllbGRzCi0gICAgICAgICAgICAgICAgLy8gYnkgdXNpbmcg
YXNzaWdubWVudCBzdGF0ZW1lbnRzLCByYXRoZXIgdGhhbiBkZWNsYXJpbmcgdGhlbSBhcyBnbG9i
YWwgb3Igc3RhdGljIHN0cnVjdHMuCi0gICAgICAgICAgICAgICAgQ01CbG9ja0J1ZmZlckN1c3Rv
bUJsb2NrU291cmNlIGFsbG9jYXRvcjsKLSAgICAgICAgICAgICAgICBhbGxvY2F0b3IudmVyc2lv
biA9IDA7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLkFsbG9jYXRlQmxvY2sgPSBudWxscHRy
OwotICAgICAgICAgICAgICAgIGFsbG9jYXRvci5GcmVlQmxvY2sgPSBGcmVlU2hhcmVkQnVmZmVy
OwotICAgICAgICAgICAgICAgIGFsbG9jYXRvci5yZWZDb24gPSBzaGFyZWRCdWZmZXIuZ2V0KCk7
Ci0gICAgICAgICAgICAgICAgc2hhcmVkQnVmZmVyLT5yZWYoKTsKLSAgICAgICAgICAgICAgICBh
dXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhudWxscHRy
LCBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDx1aW50OF90Kj4oc2hhcmVkQnVmZmVyLT5k
YXRhKCkpKSwgc2hhcmVkQnVmZmVyLT5zaXplKCksIG51bGxwdHIsICZhbGxvY2F0b3IsIG1fcG9z
aXRpb25XaXRoaW5TZWdtZW50LCBjYW5SZWFkLCAwLCAmcmF3QmxvY2tCdWZmZXIpOwotICAgICAg
ICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwotICAgICAgICAg
ICAgICAgIGxhc3RSZWFkID0gY2FuUmVhZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1
dG8gYmxvY2tCdWZmZXIgPSBhZG9wdENGKHJhd0Jsb2NrQnVmZmVyKTsKLSAgICAgICAgICAgIGF1
dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlKG91dHB1dEJ1
ZmZlciwgcmF3QmxvY2tCdWZmZXIsIDAsIDAsIDApOwotICAgICAgICAgICAgaWYgKGVyciAhPSBr
Q01CbG9ja0J1ZmZlck5vRXJyKQotICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVz
OjprTm90RW5vdWdoTWVtb3J5KTsKKyAgICAgICAgICAgICAgICBidWZmZXIucmVzaXplKHJlYWRS
ZXN1bHQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcmF3QmxvY2tCdWZmZXIgPSBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgcmF3QmxvY2tCdWZmZXIgPSBzaGFyZWRCdWZmZXItPmdldENvbnRpZ3VvdXNE
YXRhKG1fcG9zaXRpb25XaXRoaW5TZWdtZW50LCBudW1Ub1JlYWQpOworICAgICAgICAgICAgYXV0
byBsYXN0UmVhZCA9IHJhd0Jsb2NrQnVmZmVyLT5zaXplKCk7CisgICAgICAgICAgICBvdXRwdXRC
dWZmZXIuYXBwZW5kKCpyYXdCbG9ja0J1ZmZlcik7CiAgICAgICAgICAgICBtX3Bvc2l0aW9uICs9
IGxhc3RSZWFkOwogICAgICAgICAgICAgKm51bUFjdHVhbGx5UmVhZCArPSBsYXN0UmVhZDsKICAg
ICAgICAgICAgIG1fcG9zaXRpb25XaXRoaW5TZWdtZW50ICs9IGxhc3RSZWFkOwpAQCAtNDkxLDgg
KzQzNiw4IEBAIHByaXZhdGU6CiAgICAgICAgIG1fcG9zaXRpb25XaXRoaW5TZWdtZW50ID0gMDsK
ICAgICB9CiAKLSAgICBTdGRMaXN0PFNlZ21lbnQ+IG1fZGF0YTsKLSAgICBTdGRMaXN0PFNlZ21l
bnQ+OjppdGVyYXRvciBtX2N1cnJlbnRTZWdtZW50IHsgbV9kYXRhLmVuZCgpIH07CisgICAgU3Rk
TGlzdDxTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ+IG1fZGF0YTsKKyAgICBTdGRMaXN0PFNv
dXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudD46Oml0ZXJhdG9yIG1fY3VycmVudFNlZ21lbnQgeyBt
X2RhdGEuZW5kKCkgfTsKICAgICBzaXplX3QgbV9wb3NpdGlvbiB7IDAgfTsKICAgICBzaXplX3Qg
bV9wb3NpdGlvbldpdGhpblNlZ21lbnQgeyAwIH07CiB9OwpAQCAtNTg0LDEzOSArNTI5LDU0IEBA
IHN0YXRpYyBib29sIGNhbkxvYWRGb3JtYXRSZWFkZXIoKQogI2VuZGlmIC8vICFVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQogfQogCi1ib29sIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzV2ViTUZv
cm1hdFJlYWRlckF2YWlsYWJsZSgpCitXZWJNUGFyc2VyOjpXZWJNUGFyc2VyKENhbGxiYWNrJiBj
YWxsYmFjaykKKyAgICA6IG1fcGFyc2VyKG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNr
PFdlYm1QYXJzZXI+KCkpCisgICAgLCBtX3JlYWRlcihtYWtlVW5pcXVlUmVmPFNlZ21lbnRSZWFk
ZXI+KCkpCisgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQogewotICAgIHJldHVybiBQbGF0Zm9y
bU1lZGlhU2Vzc2lvbk1hbmFnZXI6OndlYk1Gb3JtYXRSZWFkZXJFbmFibGVkKCkgJiYgY2FuTG9h
ZEZvcm1hdFJlYWRlcigpICYmIGlzV2VibVBhcnNlckF2YWlsYWJsZSgpOwogfQogCi1NZWRpYVBs
YXllckVudW1zOjpTdXBwb3J0c1R5cGUgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNDb250ZW50
VHlwZVN1cHBvcnRlZChjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKLXsKLSNpZiBFTkFCTEUoVlA5
KSB8fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykKLSAgICBpZiAoIWlzV2VibVBhcnNl
ckF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNU
eXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAgIGF1dG8gY29udGFpbmVyVHlwZSA9IHR5cGUuY29u
dGFpbmVyVHlwZSgpOwotICAgIGJvb2wgaXNBdWRpb0NvbnRhaW5lclR5cGUgPSBlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGNvbnRhaW5lclR5cGUsICJhdWRpby93ZWJtIik7Ci0gICAgYm9vbCBpc1Zp
ZGVvQ29udGFpbmVyVHlwZSA9IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29udGFpbmVyVHlwZSwg
InZpZGVvL3dlYm0iKTsKLSAgICBpZiAoIWlzQXVkaW9Db250YWluZXJUeXBlICYmICFpc1ZpZGVv
Q29udGFpbmVyVHlwZSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRz
VHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0gICAgCi0gICAgYm9vbCBpc0FueUF1ZGlvQ29kZWNBdmFp
bGFibGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoVk9SQklTKQotICAgIGlzQW55QXVkaW9Db2RlY0F2
YWlsYWJsZSB8PSBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKTsKLSNlbmRpZgotI2lmIEVOQUJM
RShPUFVTKQotICAgIGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSB8PSBpc09wdXNEZWNvZGVyQXZh
aWxhYmxlKCk7Ci0jZW5kaWYKLQotICAgIGlmIChpc0F1ZGlvQ29udGFpbmVyVHlwZSAmJiAhaXNB
bnlBdWRpb0NvZGVjQXZhaWxhYmxlKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6
U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAgIGJvb2wgaXNBbnlDb2RlY0F2YWls
YWJsZSA9IGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZTsKLSNpZiBFTkFCTEUoVlA5KQotICAgIGlz
QW55Q29kZWNBdmFpbGFibGUgfD0gaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCk7Ci0jZW5kaWYKLQot
ICAgIGlmICghaXNBbnlDb2RlY0F2YWlsYWJsZSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVy
RW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICBhdXRvIGNvZGVjcyA9
IHR5cGUuY29kZWNzKCk7Ci0gICAgaWYgKGNvZGVjcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6Ok1heUJlU3VwcG9ydGVkOwotCi0gICAg
Zm9yIChhdXRvJiBjb2RlYyA6IGNvZGVjcykgewotI2lmIEVOQUJMRShWUDkpCi0gICAgICAgIGlm
IChjb2RlYy5zdGFydHNXaXRoKCJ2cDA5IikgfHwgY29kZWMuc3RhcnRzV2l0aCgidnAwOCIpIHx8
IGVxdWFsKGNvZGVjLCAidnA4IikgfHwgZXF1YWwoY29kZWMsICJ2cDkiKSkgeworV2ViTVBhcnNl
cjo6fldlYk1QYXJzZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICAgICAgICAgIGlmICghaXNWUDlEZWNv
ZGVyQXZhaWxhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6
OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICAgICAgICAgIGF1dG8gY29kZWNQ
YXJhbWV0ZXJzID0gcGFyc2VWUENvZGVjUGFyYW1ldGVycyhjb2RlYyk7Ci0gICAgICAgICAgICBp
ZiAoIWNvZGVjUGFyYW1ldGVycykKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJF
bnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAgICAgICAgICAgaWYgKCFp
c1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKCpjb2RlY1BhcmFtZXRlcnMpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6Oklz
Tm90U3VwcG9ydGVkOwotCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotI2VuZGlm
IC8vIEVOQUJMRShWUDkpCi0KLSNpZiBFTkFCTEUoVk9SQklTKQotICAgICAgICBpZiAoY29kZWMg
PT0gInZvcmJpcyIpIHsKLSAgICAgICAgICAgIGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlw
ZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0j
ZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKLQotI2lmIEVOQUJMRShPUFVTKQotICAgICAgICBpZiAo
Y29kZWMgPT0gIm9wdXMiKSB7Ci0gICAgICAgICAgICBpZiAoIWlzT3B1c0RlY29kZXJBdmFpbGFi
bGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNU
eXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LSNlbmRpZiAvLyBFTkFCTEUoT1BVUykKLQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gTWVk
aWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc1N1cHBvcnRlZDsKLQotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0odHlwZSk7Ci0KLSAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9y
dHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLSNlbmRpZiAvLyBFTkFCTEUoVlA5KSB8fCBFTkFCTEUo
Vk9SQklTKSB8fCBFTkFCTEUoT1BVUykKLX0KLQotUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYgdHlw
ZSkKK3ZvaWQgV2ViTVBhcnNlcjo6cmVzZXRTdGF0ZSgpCiB7Ci0gICAgaWYgKGlzQ29udGVudFR5
cGVTdXBwb3J0ZWQodHlwZSkgIT0gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05v
dFN1cHBvcnRlZCkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNKCkpOwotICAgIHJldHVybiBudWxscHRyOworICAgIElORk9fTE9HX0lGX1BPU1NJQkxF
KExPR0lERU5USUZJRVIpOworICAgIGlmIChtX3BhcnNlcikKKyAgICAgICAgbV9wYXJzZXItPkRp
ZFNlZWsoKTsKKyAgICBtX3JlYWRlci0+cmVzZXQoKTsKKyAgICBtX3N0YXRlID0gbV9pbml0aWFs
aXphdGlvblNlZ21lbnRQcm9jZXNzZWQgPyBTdGF0ZTo6UmVhZGluZ1NlZ21lbnQgOiBTdGF0ZTo6
Tm9uZTsKKyAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudCA9IG51bGxwdHI7CisgICAgbV9pbml0
aWFsaXphdGlvblNlZ21lbnRFbmNvdW50ZXJlZCA9IGZhbHNlOworICAgIG1fY3VycmVudEJsb2Nr
LnJlc2V0KCk7CisgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdHJhY2tzKQorICAgICAgICB0cmFj
ay0+cmVzZXQoKTsKIH0KIAotU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTSgpCi0gICAgOiBtX3JlYWRlcihtYWtlVW5pcXVlUmVmPFNlZ21lbnRSZWFkZXI+KCkp
Cit2b2lkIFdlYk1QYXJzZXI6OnJlc2V0KCkKIHsKLSAgICBpZiAoaXNXZWJtUGFyc2VyQXZhaWxh
YmxlKCkpCi0gICAgICAgIG1fcGFyc2VyID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hl
Y2s8V2VibVBhcnNlcj4oKTsKKyAgICBtX3JlYWRlci0+cmVzZXQoKTsKKyAgICBtX3BhcnNlci0+
RGlkU2VlaygpOwogfQogCi1Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjp+U291cmNlQnVmZmVyUGFy
c2VyV2ViTSgpCit2b2lkIFdlYk1QYXJzZXI6OmNyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMoKQogewor
ICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3RyYWNrcykKKyAgICAgICAgdHJhY2stPmNyZWF0ZUJ5
dGVSYW5nZVNhbXBsZXMoKTsKKyAgICBtX2NyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMgPSB0cnVlOwog
fQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmFwcGVuZERhdGEoU2VnbWVudCYmIHNl
Z21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlciwgQXBw
ZW5kRmxhZ3MgYXBwZW5kRmxhZ3MpCitFeGNlcHRpb25PcjxpbnQ+IFdlYk1QYXJzZXI6OnBhcnNl
KFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudCYmIHNlZ21lbnQpCiB7Ci0gICAgaWYgKCFtX3Bh
cnNlcikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgImZsYWdzKCIs
IGFwcGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250aW51aXR5ID8gIkRpc2NvbnRpbnVp
dHkiIDogIiIsICIpLCBzaXplKCIsIHNlZ21lbnQuc2l6ZSgpLCAiKSIpOworICAgIGlmICghbV9w
YXJzZXIpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9Owog
Ci0gICAgaWYgKGFwcGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250aW51aXR5KSB7Ci0g
ICAgICAgIG1fcmVhZGVyLT5yZXNldCgpOwotICAgICAgICBtX3BhcnNlci0+RGlkU2VlaygpOwot
ICAgIH0KICAgICBtX3JlYWRlci0+YXBwZW5kU2VnbWVudChXVEZNb3ZlKHNlZ21lbnQpKTsKIAog
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIG1fc3RhdHVzID0gbV9wYXJzZXItPkZlZWQodGhp
cywgJm1fcmVhZGVyKTsKICAgICAgICAgaWYgKG1fc3RhdHVzLm9rKCkgfHwgbV9zdGF0dXMuY29k
ZSA9PSBTdGF0dXM6OmtFbmRPZkZpbGUgfHwgbV9zdGF0dXMuY29kZSA9PSBTdGF0dXM6OmtXb3Vs
ZEJsb2NrKSB7CiAgICAgICAgICAgICBtX3JlYWRlci0+cmVjbGFpbVNlZ21lbnRzKCk7Ci0KLSAg
ICAgICAgICAgIC8vIEF1ZGlvIHRyYWNrcyBhcmUgZ3JvdXBlZCBpbnRvIG1ldGEtc2FtcGxlcyBv
ZiBhIGR1cmF0aW9uIG5vIG1vcmUgdGhhbiBtX21pbmltdW1TYW1wbGVEdXJhdGlvbi4KLSAgICAg
ICAgICAgIC8vIEJ1dCBhdCB0aGUgZW5kIG9mIGEgZmlsZSwgbm8gbW9yZSBhdWRpbyBkYXRhIG1h
eSBiZSBpbmNvbWluZywgc28gZmx1c2ggYW5kIGVtaXQgYW55IHBlbmRpbmcKLSAgICAgICAgICAg
IC8vIGF1ZGlvIGJ1ZmZlcnMuCi0gICAgICAgICAgICBmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMo
KTsKLQotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fc3Rh
dHVzLmNvZGUgIT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oRXJyb3JDb2RlOjpSZWNlaXZlZEVibWxJ
bnNpZGVTZWdtZW50KSkKQEAgLTc0MSw2MSArNjAxLDI0IEBAIHZvaWQgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6YXBwZW5kRGF0YShTZWdtZW50JiYgc2VnbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pCiAgICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAotICAgIEVSUk9SX0xPR19JRl9QT1NTSUJM
RShMT0dJREVOVElGSUVSLCAic3RhdHVzLmNvZGUoIiwgbV9zdGF0dXMuY29kZSwgIikiKTsKLSAg
ICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVm
IHsgKnRoaXMgfSwgY29kZSA9IG1fc3RhdHVzLmNvZGVdIHsKLSAgICAgICAgaWYgKG1fZGlkRW5j
b3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2spCi0gICAgICAgICAgICBtX2RpZEVuY291
bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNrKGNvZGUpOwotICAgIH0pOwotCi0gICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVz
aFBlbmRpbmdNZWRpYURhdGEoKQotewotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OnNldFNob3VsZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEKGJvb2wsIHVpbnQ2NF90KQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
c2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQodWludDY0X3QpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc3RhdHVzLmNvZGU7
CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cmVzZXRQYXJzZXJTdGF0ZSgpCit2
b2lkIFdlYk1QYXJzZXI6OnNldExvZ2dlcihjb25zdCBMb2dnZXImIGxvZ2dlciwgY29uc3Qgdm9p
ZCogbG9nSWRlbnRpZmllcikKIHsKLSAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElG
SUVSKTsKLSAgICBpZiAobV9wYXJzZXIpCi0gICAgICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7Ci0g
ICAgbV9yZWFkZXItPnJlc2V0KCk7Ci0gICAgbV9zdGF0ZSA9IG1faW5pdGlhbGl6YXRpb25TZWdt
ZW50UHJvY2Vzc2VkID8gU3RhdGU6OlJlYWRpbmdTZWdtZW50IDogU3RhdGU6Ok5vbmU7Ci0gICAg
bV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBudWxscHRyOwotICAgIG1faW5pdGlhbGl6YXRpb25T
ZWdtZW50RW5jb3VudGVyZWQgPSBmYWxzZTsKLSAgICBtX2N1cnJlbnRCbG9jay5yZXNldCgpOwot
ICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3RyYWNrcykKLSAgICAgICAgdHJhY2stPnJlc2V0KCk7
CisgICAgbV9sb2dnZXIgPSAmbG9nZ2VyOworICAgIG1fbG9nSWRlbnRpZmllciA9IGxvZ0lkZW50
aWZpZXI7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aW52YWxpZGF0ZSgpCit2
b2lkIFdlYk1QYXJzZXI6OmludmFsaWRhdGUoKQogewotICAgIElORk9fTE9HX0lGX1BPU1NJQkxF
KExPR0lERU5USUZJRVIpOwotCiAgICAgbV9wYXJzZXIgPSBudWxscHRyOwogICAgIG1fdHJhY2tz
LmNsZWFyKCk7CiAgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBudWxscHRyOwogICAgIG1f
Y3VycmVudEJsb2NrLnJlc2V0KCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
c2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYgbG9nZ2VyLCBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVy
KQotewotICAgIG1fbG9nZ2VyID0gJmxvZ2dlcjsKLSAgICBtX2xvZ0lkZW50aWZpZXIgPSBsb2dJ
ZGVudGlmaWVyOwotfQotCi1hdXRvIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnRyYWNrRGF0YUZv
clRyYWNrTnVtYmVyKHVpbnQ2NF90IHRyYWNrTnVtYmVyKSAtPiBUcmFja0RhdGEqCithdXRvIFdl
Yk1QYXJzZXI6OnRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90IHRyYWNrTnVtYmVyKSAt
PiBUcmFja0RhdGEqCiB7CiAgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdHJhY2tzKSB7CiAgICAg
ICAgIGlmICh0cmFjay0+dHJhY2soKS50cmFja19udW1iZXIuaXNfcHJlc2VudCgpICYmIHRyYWNr
LT50cmFjaygpLnRyYWNrX251bWJlci52YWx1ZSgpID09IHRyYWNrTnVtYmVyKQpAQCAtODA0LDcg
KzYyNyw3IEBAIGF1dG8gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHJhY2tEYXRhRm9yVHJhY2tO
dW1iZXIodWludDY0X3QgdHJhY2tOdW1iZXIpIC0+IFRyCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRCZWdpbihjb25zdCBF
bGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhLCBBY3Rpb24qIGFjdGlvbikKK1N0YXR1cyBXZWJNUGFy
c2VyOjpPbkVsZW1lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhLCBBY3Rp
b24qIGFjdGlvbikKIHsKICAgICBBU1NFUlQoYWN0aW9uKTsKICAgICBpZiAoIWFjdGlvbikKQEAg
LTg3Niw3ICs2OTksNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25FbGVtZW50
QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgQQogICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6T25FbGVtZW50RW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEpCitTdGF0
dXMgV2ViTVBhcnNlcjo6T25FbGVtZW50RW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRh
dGEpCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTg5
MiwyNCArNzE1LDIwIEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRF
bmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSkKICAgICBJTkZPX0xPR19JRl9QT1NT
SUJMRShMT0dJREVOVElGSUVSLCAic3RhdGUoIiwgb2xkU3RhdGUsICItPiIsIG1fc3RhdGUsICIp
LCBpZCgiLCBtZXRhZGF0YS5pZCwgIiksIHNpemUoIiwgbWV0YWRhdGEuc2l6ZSwgIikiKTsKIAog
ICAgIGlmIChtZXRhZGF0YS5pZCA9PSBJZDo6a1RyYWNrcykgewotICAgICAgICBpZiAoIW1fa2V5
SWRzLmlzRW1wdHkoKSAmJiAhbV9kaWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXph
dGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2spIHsKKyAgICAgICAgaWYgKCFtX2tleUlkcy5pc0Vt
cHR5KCkgJiYgIW1fY2FsbGJhY2suY2FuRGVjcnlwdCgpKSB7CiAgICAgICAgICAgICBFUlJPUl9M
T0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIkVuY291bnRlcmVkIGVuY3J5cHRlZCBjb250
ZW50IHdpdGhvdXQgYW4ga2V5IHJlcXVlc3QgY2FsbGJhY2siKTsKICAgICAgICAgICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjpDb2RlKEVycm9yQ29kZTo6Q29udGVudEVuY3J5cHRlZCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1faW5pdGlhbGl6YXRpb25TZWdtZW50RW5jb3VudGVyZWQp
IHsKLSAgICAgICAgICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBpbml0aWFsaXphdGlvblNlZ21lbnQgPSBXVEZNb3Zl
KCptX2luaXRpYWxpemF0aW9uU2VnbWVudCldKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxsYmFjaykKLSAgICAgICAgICAgICAg
ICAgICAgbV9kaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNrKFdURk1vdmUoaW5pdGlh
bGl6YXRpb25TZWdtZW50KSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAobV9pbml0aWFsaXphdGlvblNlZ21lbnRFbmNvdW50ZXJlZCkKKyAgICAgICAgICAgIG1fY2Fs
bGJhY2sucGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFdURk1vdmUoKm1faW5pdGlhbGl6YXRpb25T
ZWdtZW50KSk7CiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50RW5jb3VudGVyZWQgPSBm
YWxzZTsKICAgICAgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBudWxscHRyOwogICAgICAg
ICBtX2luaXRpYWxpemF0aW9uU2VnbWVudFByb2Nlc3NlZCA9IHRydWU7CiAKICAgICAgICAgaWYg
KCFtX2tleUlkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYga2V5SWRQYWly
IDogbV9rZXlJZHMpCi0gICAgICAgICAgICAgICAgbV9kaWRQcm92aWRlQ29udGVudEtleVJlcXVl
c3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2soV1RGTW92ZShrZXlJZFBhaXIu
c2Vjb25kKSwga2V5SWRQYWlyLmZpcnN0KTsKKyAgICAgICAgICAgICAgICBtX2NhbGxiYWNrLmNv
bnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRChXVEZNb3ZlKGtleUlk
UGFpci5zZWNvbmQpLCBrZXlJZFBhaXIuZmlyc3QpOwogICAgICAgICB9CiAgICAgICAgIG1fa2V5
SWRzLmNsZWFyKCk7CiAgICAgfQpAQCAtOTE3LDcgKzczNiw3IEBAIFN0YXR1cyBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0
YSkKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotU3RhdHVz
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWJtbChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBj
b25zdCBFYm1sJiBlYm1sKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uRWJtbChjb25zdCBFbGVtZW50
TWV0YWRhdGEmLCBjb25zdCBFYm1sJiBlYm1sKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxF
KExPR0lERU5USUZJRVIpOwogCkBAIC05MjUsNyArNzQ0LDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06Ok9uRWJtbChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBFYm1sJiBl
Ym1sKQogICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6Q29kZShFcnJvckNvZGU6OkludmFs
aWREb2NUeXBlKSk7CiAKICAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudEVuY291bnRlcmVkID0g
dHJ1ZTsKLSAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudCA9IG1ha2VVbmlxdWVXaXRob3V0RmFz
dE1hbGxvY0NoZWNrPEluaXRpYWxpemF0aW9uU2VnbWVudD4oKTsKKyAgICBtX2luaXRpYWxpemF0
aW9uU2VnbWVudCA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPFNvdXJjZUJ1ZmZl
clBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50PigpOwogICAgIC8vIFRPRE86IFNldHRpbmcg
dGhpcyB0byBmYWxzZSBoZXJlLCB3aWxsIHByZXZlbnQgYWRkaW5nIGEgbmV3IG1lZGlhIHNlZ21l
bnQgc2hvdWxkIGEKICAgICAvLyBwYXJ0aWFsIGluaXQgc2VnbWVudCBiZSBlbmNvdW50ZXJlZCBh
ZnRlciBhIGNhbGwgdG8gc291cmNlQnVmZmVyLmFib3J0KCkuCiAgICAgLy8gSXQncyBwcm9iYWJs
eSBmaW5lIGFzIG5vLW9uZSBpbiB0aGVpciByaWdodCBtaW5kIHNob3VsZCBzZW5kIHBhcnRpYWwg
aW5pdCBzZWdtZW50IG9ubHkKQEAgLTkzNiw3ICs3NTUsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6T25FYm1sKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEVibWwmIGVi
bWwpCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLVN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblNlZ21lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0
YWRhdGEmLCBBY3Rpb24qIGFjdGlvbikKK1N0YXR1cyBXZWJNUGFyc2VyOjpPblNlZ21lbnRCZWdp
bihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBBY3Rpb24qIGFjdGlvbikKIHsKICAgICBJTkZPX0xP
R19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtOTUzLDcgKzc3Miw3IEBAIFN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblNlZ21lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0
YWRhdGEmLCBBY3Rpb24qIGFjCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRl
ZCk7CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkluZm8oY29uc3QgRWxl
bWVudE1ldGFkYXRhJiwgY29uc3QgSW5mbyYgaW5mbykKK1N0YXR1cyBXZWJNUGFyc2VyOjpPbklu
Zm8oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgSW5mbyYgaW5mbykKIHsKICAgICBJTkZP
X0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtOTY5LDcgKzc4OCw3IEBAIFN0
YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkluZm8oY29uc3QgRWxlbWVudE1ldGFkYXRh
JiwgY29uc3QgSW5mbyYgaW5mbykKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxl
dGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQ2x1c3RlckJlZ2lu
KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IENsdXN0ZXImIGNsdXN0ZXIsIEFjdGlvbiog
YWN0aW9uKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uQ2x1c3RlckJlZ2luKGNvbnN0IEVsZW1lbnRN
ZXRhZGF0YSYsIGNvbnN0IENsdXN0ZXImIGNsdXN0ZXIsIEFjdGlvbiogYWN0aW9uKQogewogICAg
IElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC05ODUsNyArODA0LDcg
QEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQ2x1c3RlckJlZ2luKGNvbnN0IEVs
ZW1lbnRNZXRhZGF0YSYsIGNvbnN0IENsdXMKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09r
Q29tcGxldGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tF
bnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBUcmFja0VudHJ5JiB0cmFja0VudHJ5
KQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uVHJhY2tFbnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEm
LCBjb25zdCBUcmFja0VudHJ5JiB0cmFja0VudHJ5KQogewogICAgIGlmICghdHJhY2tFbnRyeS50
cmFja190eXBlLmlzX3ByZXNlbnQoKSB8fCAhdHJhY2tFbnRyeS5jb2RlY19pZC5pc19wcmVzZW50
KCkpCiAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwpAQCAtMTAz
NywzNiArODU2LDM0IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50
cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgVHJhY2tFCiAgICAgfQogCiAgICAgU3Ry
aW5nVmlldyBjb2RlY1N0cmluZyB7IHRyYWNrRW50cnkuY29kZWNfaWQudmFsdWUoKS5kYXRhKCks
ICh1bnNpZ25lZCl0cmFja0VudHJ5LmNvZGVjX2lkLnZhbHVlKCkubGVuZ3RoKCkgfTsKKyAgICBh
dXRvIHRyYWNrID0gWyZdKCkgLT4gVW5pcXVlUmVmPFRyYWNrRGF0YT4gewogI2lmIEVOQUJMRShW
UDkpCi0gICAgaWYgKGNvZGVjU3RyaW5nID09ICJWX1ZQOSIgJiYgaXNWUDlEZWNvZGVyQXZhaWxh
YmxlKCkpIHsKLSAgICAgICAgbV90cmFja3MuYXBwZW5kKFZpZGVvVHJhY2tEYXRhOjpjcmVhdGUo
Q29kZWNUeXBlOjpWUDksIHRyYWNrRW50cnksICp0aGlzKSk7Ci0gICAgICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwotICAgIH0KLSAgICBpZiAoY29kZWNTdHJpbmcgPT0g
IlZfVlA4IiAmJiBpc1ZQOERlY29kZXJBdmFpbGFibGUoKSkgewotICAgICAgICBtX3RyYWNrcy5h
cHBlbmQoVmlkZW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZQOCwgdHJhY2tFbnRyeSwg
KnRoaXMpKTsKLSAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7Ci0g
ICAgfQorICAgICAgICBpZiAoY29kZWNTdHJpbmcgPT0gIlZfVlA5IiAmJiBpc1ZQOURlY29kZXJB
dmFpbGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlKENv
ZGVjVHlwZTo6VlA5LCB0cmFja0VudHJ5LCAqdGhpcyk7CisgICAgICAgIGlmIChjb2RlY1N0cmlu
ZyA9PSAiVl9WUDgiICYmIGlzVlA4RGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgcmV0
dXJuIFZpZGVvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpWUDgsIHRyYWNrRW50cnksICp0
aGlzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZPUkJJUykKLSAgICBpZiAoY29kZWNTdHJpbmcg
PT0gIkFfVk9SQklTIiAmJiBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkgewotICAgICAgICBt
X3RyYWNrcy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZvcmJpcywg
dHJhY2tFbnRyeSwgKnRoaXMsIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pKTsKLSAgICAg
ICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7Ci0gICAgfQorICAgICAgICBp
ZiAoY29kZWNTdHJpbmcgPT0gIkFfVk9SQklTIiAmJiBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUo
KSkKKyAgICAgICAgICAgIHJldHVybiBBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6
Vm9yYmlzLCB0cmFja0VudHJ5LCAqdGhpcyk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUFVTKQot
ICAgIGlmIChjb2RlY1N0cmluZyA9PSAiQV9PUFVTIiAmJiBpc09wdXNEZWNvZGVyQXZhaWxhYmxl
KCkpIHsKLSAgICAgICAgbV90cmFja3MuYXBwZW5kKEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29k
ZWNUeXBlOjpPcHVzLCB0cmFja0VudHJ5LCAqdGhpcywgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJh
dGlvbikpOwotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKLSAg
ICB9CisgICAgICAgIGlmIChjb2RlY1N0cmluZyA9PSAiQV9PUFVTIiAmJiBpc09wdXNEZWNvZGVy
QXZhaWxhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShD
b2RlY1R5cGU6Ok9wdXMsIHRyYWNrRW50cnksICp0aGlzKTsKICNlbmRpZgorICAgICAgICByZXR1
cm4gVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpVbnN1cHBvcnRlZCwgdHJhY2tFbnRyeSwg
KnRoaXMpOworICAgIH0oKTsKKworICAgIGlmIChtX2NyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMpCisg
ICAgICAgIHRyYWNrLT5jcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKCk7CiAKLSAgICBtX3RyYWNrcy5h
cHBlbmQoVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpVbnN1cHBvcnRlZCwgdHJhY2tFbnRy
eSwgKnRoaXMpKTsKKyAgICBtX3RyYWNrcy5hcHBlbmQoV1RGTW92ZSh0cmFjaykpOwogICAgIHJl
dHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYs
IGNvbnN0IEJsb2NrJiBibG9jaywgQWN0aW9uKiBhY3Rpb24pCit3ZWJtOjpTdGF0dXMgV2ViTVBh
cnNlcjo6T25CbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEJsb2NrJiBi
bG9jaywgQWN0aW9uKiBhY3Rpb24pCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURF
TlRJRklFUik7CiAKQEAgLTEwODEsNyArODk4LDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06Ok9uQmxvY2tCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdAog
ICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0
dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0VuZChjb25zdCBFbGVtZW50TWV0YWRh
dGEmLCBjb25zdCBCbG9jayYpCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6T25CbG9ja0VuZChj
b25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBCbG9jayYpCiB7CiAgICAgSU5GT19MT0dfSUZf
UE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTEwOTAsNyArOTA3LDcgQEAgd2VibTo6U3Rh
dHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tFbmQoY29uc3QgRWxlbWVudE1ldGFk
YXRhJiwgY29uc3QgQmwKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsK
IH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uU2ltcGxlQmxvY2tC
ZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBTaW1wbGVCbG9jayYgYmxvY2ssIEFj
dGlvbiogYWN0aW9uKQord2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9uU2ltcGxlQmxvY2tCZWdp
bihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBTaW1wbGVCbG9jayYgYmxvY2ssIEFjdGlv
biogYWN0aW9uKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwog
CkBAIC0xMTA1LDcgKzkyMiw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpPblNpbXBsZUJsb2NrQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwKICAgICByZXR1cm4g
U3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06Ok9uU2ltcGxlQmxvY2tFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwg
Y29uc3QgU2ltcGxlQmxvY2smKQord2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9uU2ltcGxlQmxv
Y2tFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgU2ltcGxlQmxvY2smKQogewogICAg
IElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC0xMTE0LDcgKzkzMSw3
IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblNpbXBsZUJsb2NrRW5k
KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtP
a0NvbXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpP
bkJsb2NrR3JvdXBCZWdpbihjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEmLCB3ZWJtOjpBY3Rp
b24qIGFjdGlvbikKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPbkJsb2NrR3JvdXBCZWdpbihj
b25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEmLCB3ZWJtOjpBY3Rpb24qIGFjdGlvbikKIHsKICAg
ICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtMTEyNiw3ICs5NDMs
NyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0dyb3VwQmVn
aW4oY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYQogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpr
T2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
T25CbG9ja0dyb3VwRW5kKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IHdlYm06
OkJsb2NrR3JvdXAmIGJsb2NrR3JvdXApCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6T25CbG9j
a0dyb3VwRW5kKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IHdlYm06OkJsb2Nr
R3JvdXAmIGJsb2NrR3JvdXApCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJ
RklFUik7CiAgICAgaWYgKGJsb2NrR3JvdXAuYmxvY2suaXNfcHJlc2VudCgpICYmIGJsb2NrR3Jv
dXAuZGlzY2FyZF9wYWRkaW5nLmlzX3ByZXNlbnQoKSkgewpAQCAtMTEzNiwxNyArOTUzLDEzIEBA
IHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrR3JvdXBFbmQoY29u
c3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhCiAgICAgICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lC
TEUoTE9HSURFTlRJRklFUiwgIklnbm9yaW5nIHVua25vd24gdHJhY2sgbnVtYmVyICIsIHRyYWNr
TnVtYmVyKTsKICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQp
OwogICAgICAgICB9Ci0gICAgICAgIGlmICh0cmFja0RhdGEtPnRyYWNrKCkudHJhY2tfdWlkLmlz
X3ByZXNlbnQoKSAmJiBibG9ja0dyb3VwLmRpc2NhcmRfcGFkZGluZy52YWx1ZSgpID4gMCkgewot
ICAgICAgICAgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRyYWNrSUQgPSB0cmFja0RhdGEtPnRyYWNrKCkudHJhY2tf
dWlkLnZhbHVlKCksIHBhZGRpbmcgPSBNZWRpYVRpbWUoYmxvY2tHcm91cC5kaXNjYXJkX3BhZGRp
bmcudmFsdWUoKSwga191c19pbl9zZWNvbmRzKV0oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1f
ZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjaykKLSAgICAgICAgICAgICAgICAgICAgbV9kaWRQ
YXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKHRyYWNrSUQsIHBhZGRpbmcpOwotICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHRyYWNrRGF0YS0+dHJhY2soKS50cmFja191aWQu
aXNfcHJlc2VudCgpICYmIGJsb2NrR3JvdXAuZGlzY2FyZF9wYWRkaW5nLnZhbHVlKCkgPiAwKQor
ICAgICAgICAgICAgbV9jYWxsYmFjay5wYXJzZWRUcmltbWluZ0RhdGEodHJhY2tEYXRhLT50cmFj
aygpLnRyYWNrX3VpZC52YWx1ZSgpLCBNZWRpYVRpbWUoYmxvY2tHcm91cC5kaXNjYXJkX3BhZGRp
bmcudmFsdWUoKSwga191c19pbl9zZWNvbmRzKSk7CiAgICAgfQogICAgIHJldHVybiBTdGF0dXMo
U3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6T25GcmFtZShjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgUmVhZGVyKiBy
ZWFkZXIsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2Vy
OjpPbkZyYW1lKGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCBSZWFkZXIqIHJlYWRlciwg
dWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQogewogICAgIEFTU0VSVChyZWFkZXIpOwogICAgIGlm
ICghcmVhZGVyKQpAQCAtMTE4MywzNyArOTk2LDIwIEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpPbkZyYW1lKGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCBSZWFk
CiAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgIH0KIAot
ICAgIHJldHVybiB0cmFja0RhdGEtPmNvbnN1bWVGcmFtZURhdGEoKnJlYWRlciwgbWV0YWRhdGEs
IGJ5dGVzUmVtYWluaW5nLCBQQUw6OkNNVGltZU1ha2UoYmxvY2stPnRpbWVjb2RlICsgbV9jdXJy
ZW50VGltZWNvZGUsIG1fdGltZXNjYWxlKSwgYmxvY2stPm51bV9mcmFtZXMpOworICAgIHJldHVy
biB0cmFja0RhdGEtPmNvbnN1bWVGcmFtZURhdGEoKnJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVt
YWluaW5nLCBNZWRpYVRpbWUoYmxvY2stPnRpbWVjb2RlICsgbV9jdXJyZW50VGltZWNvZGUsIG1f
dGltZXNjYWxlKSwgYmxvY2stPm51bV9mcmFtZXMpOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OnByb3ZpZGVNZWRpYURhdGEoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBz
YW1wbGVCdWZmZXIsIHVpbnQ2NF90IHRyYWNrSUQsIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBieXRl
UmFuZ2VPZmZzZXQpCi17Ci0gICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHNhbXBsZUJ1ZmZlciA9IFdURk1vdmUoc2Ft
cGxlQnVmZmVyKSwgdHJhY2tJRCwgYnl0ZVJhbmdlT2Zmc2V0XSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKCFtX2RpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjaykKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBhdXRvIG1lZGlhU2FtcGxlID0gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUoc2FtcGxlQnVmZmVyLmdldCgpLCB0cmFja0lEKTsKLSAgICAgICAgaWYgKGJ5dGVSYW5nZU9m
ZnNldCkKLSAgICAgICAgICAgIG1lZGlhU2FtcGxlLT5zZXRCeXRlUmFuZ2VPZmZzZXQoKmJ5dGVS
YW5nZU9mZnNldCk7Ci0gICAgICAgIG1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKFdURk1v
dmUobWVkaWFTYW1wbGUpLCB0cmFja0lELCBlbXB0eVN0cmluZygpKTsKLSAgICB9KTsKLX0KIAog
I2RlZmluZSBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKC4uLikgaWYgKHBhcnNlcigpLmxv
Z2dlclB0cigpKSBwYXJzZXIoKS5sb2dnZXJQdHIoKS0+ZXJyb3IobG9nQ2hhbm5lbCgpLCBMb2dn
ZXI6OkxvZ1NpdGVJZGVudGlmaWVyKGxvZ0NsYXNzTmFtZSgpLCBfX2Z1bmNfXywgcGFyc2VyKCku
bG9nSWRlbnRpZmllcigpKSwgX19WQV9BUkdTX18pCiAKLVJldGFpblB0cjxDTUJsb2NrQnVmZmVy
UmVmPiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0
ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0CitSZWZQdHI8
U2hhcmVkQnVmZmVyPiBXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJs
b2NrQnVmZmVyKHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgaWYg
KCFvZmZzZXQgJiYgIWxlbmd0aCAmJiBQQUw6OkNNQmxvY2tCdWZmZXJJc1JhbmdlQ29udGlndW91
cyhtX2NvbXBsZXRlQmxvY2tCdWZmZXIuZ2V0KCksIDAsIDApKQotICAgICAgICByZXR1cm4gbV9j
b21wbGV0ZUJsb2NrQnVmZmVyOwotICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3Q29udGlndW91c0J1
ZmZlciA9IG51bGxwdHI7Ci0gICAgaWYgKFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZUNvbnRpZ3Vv
dXMobnVsbHB0ciwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLmdldCgpLCBudWxscHRyLCBudWxscHRy
LCBvZmZzZXQsIGxlbmd0aCwgMCwgJnJhd0NvbnRpZ3VvdXNCdWZmZXIpICE9IGtDTUJsb2NrQnVm
ZmVyTm9FcnIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRkFVTFQoV2ViQXVkaW8sICJmYWlsZWQg
dG8gY3JlYXRlIGNvbnRpZ3VvdXMgYmxvY2sgYnVmZmVyIik7CisgICAgaWYgKG9mZnNldCArIGxl
bmd0aCA+IG1fY29tcGxldGVCbG9ja0J1ZmZlci0+c2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIGFkb3B0Q0YocmF3Q29udGlndW91c0J1ZmZlcik7Cisg
ICAgcmV0dXJuIG1fY29tcGxldGVCbG9ja0J1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEob2Zmc2V0
LCBsZW5ndGgpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJh
Y2tEYXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCB3ZWJtOjpG
cmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQord2VibTo6
U3RhdHVzIFdlYk1QYXJzZXI6OlRyYWNrRGF0YTo6cmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXIm
IHJlYWRlciwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBi
eXRlc1JlbWFpbmluZykKIHsKICAgICBpZiAobV9jb21wbGV0ZVBhY2tldFNpemUgJiYgKm1fY29t
cGxldGVQYWNrZXRTaXplICE9IG1ldGFkYXRhLnNpemUpIHsKICAgICAgICAgLy8gVGhlIHBhY2tl
dCdzIG1ldGFkYXRhIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnRseSBwZW5kaW5nIGNvbXBsZXRl
IHBhY2tldDsgcmVzdGFydC4KQEAgLTEyMjQsMjAgKzEwMjAsOSBAQCB3ZWJtOjpTdGF0dXMgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRl
ciYgcmVhZAogICAgIGlmICghbV9jb21wbGV0ZVBhY2tldFNpemUpCiAgICAgICAgIG1fY29tcGxl
dGVQYWNrZXRTaXplID0gbWV0YWRhdGEuc2l6ZTsKIAotICAgIGlmICghbV9jdXJyZW50QmxvY2tC
dWZmZXIpIHsKLSAgICAgICAgQVNTRVJUKCFtX3BhcnRpYWxCeXRlc1JlYWQpOwotICAgICAgICBD
TUJsb2NrQnVmZmVyUmVmIHJhd0Jsb2NrQnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAgYXV0byBl
cnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVFbXB0eShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBt
TWF4QmxvY2tCdWZmZXJDYXBhY2l0eSwgMCwgJnJhd0Jsb2NrQnVmZmVyKTsKLSAgICAgICAgaWYg
KGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyIHx8ICFyYXdCbG9ja0J1ZmZlcikgewotICAgICAg
ICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckNyZWF0ZUVt
cHR5IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBTa2lwKCZy
ZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgfQotICAgICAgICBtX2N1cnJlbnRCbG9j
a0J1ZmZlciA9IGFkb3B0Q0YocmF3QmxvY2tCdWZmZXIpOwotICAgIH0KLQogICAgIHdoaWxlICgq
Ynl0ZXNSZW1haW5pbmcpIHsKICAgICAgICAgdWludDY0X3QgYnl0ZXNSZWFkOwotICAgICAgICBh
dXRvIHN0YXR1cyA9IHN0YXRpY19jYXN0PFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNlZ21lbnRS
ZWFkZXImPihyZWFkZXIpLlJlYWRJbnRvKCpieXRlc1JlbWFpbmluZywgbV9jdXJyZW50QmxvY2tC
dWZmZXIuZ2V0KCksICZieXRlc1JlYWQpOworICAgICAgICBhdXRvIHN0YXR1cyA9IHN0YXRpY19j
YXN0PFdlYk1QYXJzZXI6OlNlZ21lbnRSZWFkZXImPihyZWFkZXIpLlJlYWRJbnRvKCpieXRlc1Jl
bWFpbmluZywgbV9jdXJyZW50QmxvY2tCdWZmZXIsICZieXRlc1JlYWQpOwogICAgICAgICAqYnl0
ZXNSZW1haW5pbmcgLT0gYnl0ZXNSZWFkOwogICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgKz0g
Ynl0ZXNSZWFkOwogCkBAIC0xMjQ5LDE4MSArMTAzNCwxMTAgQEAgd2VibTo6U3RhdHVzIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXIm
IHJlYWQKICAgICBpZiAobV9wYXJ0aWFsQnl0ZXNSZWFkIDwgKm1fY29tcGxldGVQYWNrZXRTaXpl
KQogICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rUGFydGlhbCk7
CiAKLSAgICBpZiAoIW1fY29tcGxldGVCbG9ja0J1ZmZlcikKLSAgICAgICAgbV9jb21wbGV0ZUJs
b2NrQnVmZmVyID0gV1RGTW92ZShtX2N1cnJlbnRCbG9ja0J1ZmZlcik7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNl
KG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgbV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCks
IDAsIDAsIDApOwotICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VS
Uk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlIHRvIGNv
bXBsZXRlIGJsb2NrIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAgICAgICAgfQotICAgICAgICBt
X2N1cnJlbnRCbG9ja0J1ZmZlciA9IG51bGxwdHI7Ci0gICAgfQorICAgIG1fY29tcGxldGVCbG9j
a0J1ZmZlciA9IG1fY3VycmVudEJsb2NrQnVmZmVyLnRha2UoKTsKKyAgICBtX2NvbXBsZXRlUGFj
a2V0U2l6ZSA9IHN0ZDo6bnVsbG9wdDsKICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgPSAwOwogCiAg
ICAgcmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAK
LXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y29u
c3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVNZXRhZGF0YSYg
bWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1lJiBwcmVzZW50
YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQpCit2b2lkIFdlYk1QYXJzZXI6OlZpZGVvVHJhY2tE
YXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkKK3sKKyAgICBtX2tleUZyYW1lcy5jbGVh
cigpOworICAgIFRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOworfQorCit3
ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEo
d2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50
NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSwg
aW50KQogewogI2lmIEVOQUJMRShWUDkpCiAgICAgYXV0byBzdGF0dXMgPSByZWFkRnJhbWVEYXRh
KHJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5nKTsKICAgICBpZiAoIXN0YXR1cy5jb21w
bGV0ZWRfb2soKSkKICAgICAgICAgcmV0dXJuIHN0YXR1czsKIAotICAgIGNyZWF0ZVNhbXBsZUJ1
ZmZlcihwcmVzZW50YXRpb25UaW1lLCBzYW1wbGVDb3VudCwgbWV0YWRhdGEpOwotICAgIHJlc2V0
KCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHByZXNlbnRhdGlvblRpbWUpOwotICAgIFVOVVNFRF9QQVJBTShzYW1wbGVDb3VudCk7Ci0jZW5k
aWYKLQotICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLX0KLQotdm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVm
ZmVyKGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50LCBjb25z
dCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSkKLXsKLSNpZiBFTkFCTEUoVlA5KQotICAg
IHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7CiAgICAgY29uc3RleHByIHNpemVf
dCBtYXhIZWFkZXJTaXplID0gMzI7IC8vIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIFZQOSB1bmNv
bXByZXNzZWQgaGVhZGVyIGlzIDE0NCBiaXRzIGFuZCAxMSBieXRlcyBmb3IgVlA4LiBSb3VuZCBo
aWdoLgotICAgIHNpemVfdCBzZWdtZW50SGVhZGVyTGVuZ3RoID0gc3RkOjptaW4obWF4SGVhZGVy
U2l6ZSwgKm1fY29tcGxldGVQYWNrZXRTaXplKTsKKyAgICBzaXplX3Qgc2VnbWVudEhlYWRlckxl
bmd0aCA9IHN0ZDo6bWluKG1heEhlYWRlclNpemUsIG1fY29tcGxldGVCbG9ja0J1ZmZlci0+c2l6
ZSgpKTsKICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIgPSBjb250aWd1b3VzQ29tcGxldGVCbG9j
a0J1ZmZlcigwLCBzZWdtZW50SGVhZGVyTGVuZ3RoKTsKICAgICBpZiAoIWNvbnRpZ3VvdXNCdWZm
ZXIpIHsKLSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiVmlkZW9UcmFja0Rh
dGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlciBmYWlsZWQgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBi
bG9jayIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGF1dG8gZXJyID0gUEFMOjpDTUJs
b2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIoY29udGlndW91c0J1ZmZlci5nZXQoKSwgMCwgbnVsbHB0
ciwgbnVsbHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJEYXRhKTsKLSAgICBpZiAoZXJyKSB7Ci0g
ICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJHZXREYXRh
UG9pbnRlciBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7Ci0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiVmlkZW9UcmFja0RhdGE6OmNvbnN1bWVG
cmFtZURhdGEgZmFpbGVkIHRvIGNyZWF0ZSBjb250aWd1b3VzIGRhdGEgYmxvY2siKTsKKyAgICAg
ICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgIH0KKyAgICBjb25z
dCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBjb250aWd1b3VzQnVmZmVyLT5kYXRhKCk7CiAK
ICAgICBib29sIGlzS2V5ID0gZmFsc2U7Ci0gICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOwogICAgIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6
VlA5KSB7CiAgICAgICAgIGlmICghbV9oZWFkZXJQYXJzZXIuUGFyc2VVbmNvbXByZXNzZWRIZWFk
ZXIoYmxvY2tCdWZmZXJEYXRhLCBzZWdtZW50SGVhZGVyTGVuZ3RoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsK
IAogICAgICAgICBpZiAobV9oZWFkZXJQYXJzZXIua2V5KCkpIHsKICAgICAgICAgICAgIGlzS2V5
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8gZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVGb3Jt
YXREZXNjcmlwdGlvbkZyb21WUDlIZWFkZXJQYXJzZXIobV9oZWFkZXJQYXJzZXIsIHRyYWNrKCku
dmlkZW8udmFsdWUoKS5jb2xvdXIpOwotICAgICAgICAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlv
bikgewotICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoImZhaWxl
ZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZyb20gVlBYIGhlYWRlciIpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldEZvcm1hdERl
c2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRpb24pKTsKKyAgICAgICAgICAgIHNldEZv
cm1hdERlc2NyaXB0aW9uKGNyZWF0ZVZpZGVvSW5mb0Zyb21WUDlIZWFkZXJQYXJzZXIobV9oZWFk
ZXJQYXJzZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5jb2xvdXIpKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSBpZiAoY29kZWMoKSA9PSBDb2RlY1R5cGU6OlZQOCkgewogICAgICAgICBhdXRvIGhl
YWRlciA9IHBhcnNlVlA4RnJhbWVIZWFkZXIoYmxvY2tCdWZmZXJEYXRhLCBzZWdtZW50SGVhZGVy
TGVuZ3RoKTsKICAgICAgICAgaWYgKGhlYWRlciAmJiBoZWFkZXItPmtleWZyYW1lKSB7CiAgICAg
ICAgICAgICBpc0tleSA9IHRydWU7Ci0gICAgICAgICAgICBhdXRvIGZvcm1hdERlc2NyaXB0aW9u
ID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA4SGVhZGVyKCpoZWFkZXIsIHRyYWNrKCku
dmlkZW8udmFsdWUoKS5jb2xvdXIpOwotICAgICAgICAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlv
bikgewotICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoImZhaWxl
ZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZyb20gVlBYIGhlYWRlciIpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldEZvcm1hdERl
c2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRpb24pKTsKKyAgICAgICAgICAgIHNldEZv
cm1hdERlc2NyaXB0aW9uKGNyZWF0ZVZpZGVvSW5mb0Zyb21WUDhIZWFkZXIoKmhlYWRlciwgdHJh
Y2soKS52aWRlby52YWx1ZSgpLmNvbG91cikpOwogICAgICAgICB9CiAgICAgfQogCisgICAgaWYg
KCFtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmluZm8oKSkKKyAgICAgICAgbV9jb21wbGV0ZU1lZGlh
U2FtcGxlcy5zZXRJbmZvKGZvcm1hdERlc2NyaXB0aW9uKCkpOworICAgIGVsc2UgaWYgKGZvcm1h
dERlc2NyaXB0aW9uKCkgJiYgKmZvcm1hdERlc2NyaXB0aW9uKCkgIT0gKm1fY29tcGxldGVNZWRp
YVNhbXBsZXMuaW5mbygpKQorICAgICAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7CisKICAgICBh
dXRvIHRyYWNrID0gdGhpcy0+dHJhY2soKTsKLSAgICAvLyBGSVhNRTogQSBibG9jayBtaWdodCBj
b250YWluIG1vcmUgdGhhbiBvbmUgZnJhbWUsIGJ1dCBvbmx5IHRoaXMgZnJhbWUgaGFzIGJlZW4g
cmVhZCBpbnRvIGBjb21wbGV0ZUJsb2NrQnVmZmVyYC4KLSAgICAvLyBCZWxvdyB3ZSBjcmVhdGUg
c2FtcGxlIGJ1ZmZlcnMgZm9yIGVhY2ggZnJhbWUsIGVhY2ggd2l0aCB0aGUgYmxvY2sncyB0aW1l
Y29kZSBhbmQgYG51bV9mcmFtZXNgIHZhbHVlLgotICAgIC8vIFNob3VsZG4ndCB3ZSBjcmVhdGUg
anVzdCBvbmUgc2FtcGxlIGJ1ZmZlciBvbmNlIGFsbCB0aGUgYmxvY2sncyBmcmFtZXMgaGF2ZSBi
ZWVuIHJlYWQgaW50byBgY3VycmVudEJsb2NrQnVmZmVyYD8KIAogICAgIHVpbnQ2NF90IGR1cmF0
aW9uID0gMDsKICAgICBpZiAodHJhY2suZGVmYXVsdF9kdXJhdGlvbi5pc19wcmVzZW50KCkpCi0g
ICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgpICogcHJlc2Vu
dGF0aW9uVGltZS50aW1lc2NhbGUgLyBrX3VzX2luX3NlY29uZHM7CisgICAgICAgIGR1cmF0aW9u
ID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgpICogcHJlc2VudGF0aW9uVGltZS50aW1l
U2NhbGUoKSAvIGtfdXNfaW5fc2Vjb25kczsKIAotICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1Nh
bXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZyA9IHsg
UEFMOjpDTVRpbWVNYWtlKGR1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSksIHBy
ZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUgfTsKLSAgICBlcnIgPSBQQUw6OkNNU2Ft
cGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9jb21wbGV0ZUJsb2Nr
QnVmZmVyLmdldCgpLCB0aGlzLT5mb3JtYXREZXNjcmlwdGlvbigpLmdldCgpLCBzYW1wbGVDb3Vu
dCwgMSwgJnRpbWluZywgMSwgJiptX2NvbXBsZXRlUGFja2V0U2l6ZSwgJnJhd1NhbXBsZUJ1ZmZl
cik7Ci0gICAgaWYgKGVycikgewotICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxF
KCJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0Q0YocmF3
U2FtcGxlQnVmZmVyKTsKLQotICAgIGF1dG8gYXR0YWNobWVudHNBcnJheSA9IFBBTDo6Q01TYW1w
bGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJ1
ZSk7Ci0gICAgQVNTRVJUKGF0dGFjaG1lbnRzQXJyYXkpOwotICAgIGlmICghYXR0YWNobWVudHNB
cnJheSkgewotICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1
ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkgcmV0dXJuZWQgTlVMTCIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChtX3VzZUJ5dGVSYW5nZSkKKyAgICAgICAgbV9jb21wbGV0
ZU1lZGlhU2FtcGxlcy5hcHBlbmQoeyBwcmVzZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1l
LCBNZWRpYVRpbWUoZHVyYXRpb24sIHByZXNlbnRhdGlvblRpbWUudGltZVNjYWxlKCkpLCBNZWRp
YVNhbXBsZTo6Qnl0ZVJhbmdlIHsgbWV0YWRhdGEucG9zaXRpb24sIG1ldGFkYXRhLnNpemUgfSwg
aXNLZXkgPyBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyA6IE1lZGlhU2FtcGxlOjpT
YW1wbGVGbGFnczo6Tm9uZSB9KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29tcGxldGVNZWRpYVNh
bXBsZXMuYXBwZW5kKHsgcHJlc2VudGF0aW9uVGltZSwgcHJlc2VudGF0aW9uVGltZSwgTWVkaWFU
aW1lKGR1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLnRpbWVTY2FsZSgpKSwgbV9jb21wbGV0ZUJs
b2NrQnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIGlzS2V5ID8gTWVkaWFTYW1wbGU6OlNhbXBsZUZs
YWdzOjpJc1N5bmMgOiBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6Ok5vbmUgfSk7CiAKLSAgICBp
ZiAoIWlzS2V5KSB7Ci0gICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMCwgY291bnQgPSBDRkFycmF5
R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAg
ICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tlZF9jZl9jYXN0PENG
TXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNB
cnJheSwgaSkpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMs
IFBBTDo6a0NNU2FtcGxlQXR0YWNobWVudEtleV9Ob3RTeW5jLCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCi0gICAgYXV0byB0
cmFja0lEID0gdHJhY2sudHJhY2tfdWlkLnZhbHVlKCk7Ci0gICAgcGFyc2VyKCkucHJvdmlkZU1l
ZGlhRGF0YShXVEZNb3ZlKHNhbXBsZUJ1ZmZlciksIHRyYWNrSUQsIG1ldGFkYXRhLnBvc2l0aW9u
KTsKKyAgICBBU1NFUlQoISpieXRlc1JlbWFpbmluZyk7CisgICAgcmV0dXJuIHdlYm06OlN0YXR1
cyh3ZWJtOjpTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShw
cmVzZW50YXRpb25UaW1lKTsKICAgICBVTlVTRURfUEFSQU0oc2FtcGxlQ291bnQpOwogICAgIFVO
VVNFRF9QQVJBTShtZXRhZGF0YSk7Ci0jZW5kaWYgLy8gRU5BQkxFKFZQOSkKKyAgICByZXR1cm4g
U2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisjZW5kaWYKIH0KIAotdm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQoKQordm9pZCBX
ZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpCiB7
CiAgICAgbU51bUZyYW1lc0luQ29tcGxldGVCbG9jayA9IDA7Ci0gICAgbV9wYWNrZXRTaXplcy5j
bGVhcigpOwotICAgIG1fcGFja2V0VGltaW5ncy5jbGVhcigpOwotICAgIG1fY3VycmVudFBhY2tl
dEJ5dGVPZmZzZXQgPSAwOwotICAgIFRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQoKTsKKyAgICBU
cmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKTsKIH0KIAotd2VibTo6U3RhdHVz
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRh
KHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWlu
dDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGlu
dCBzYW1wbGVDb3VudCkKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6
Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVNZXRhZGF0
YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgTWVkaWFUaW1lJiBw
cmVzZW50YXRpb25UaW1lLCBpbnQpCiB7Ci0gICAgaWYgKG1fcGFja2V0VGltaW5ncy5zaXplKCkp
IHsKLSAgICAgICAgYXV0byYgbGFzdFRpbWluZyA9IG1fcGFja2V0VGltaW5ncy5sYXN0KCk7Ci0g
ICAgICAgIGlmIChQQUw6OkNNVGltZUNvbXBhcmUoUEFMOjpDTVRpbWVBZGQobGFzdFRpbWluZy5k
dXJhdGlvbiwgbGFzdFRpbWluZy5wcmVzZW50YXRpb25UaW1lU3RhbXApLCBwcmVzZW50YXRpb25U
aW1lKSkgewotICAgICAgICAgICAgLy8gRGlzY29udGludWl0eSBlbmNvdW50ZXJlZCwgZW1pdCB0
aGUgcHJldmlvdXNseSBkZW11eGVkIHNhbXBsZXMuCi0gICAgICAgICAgICBjcmVhdGVTYW1wbGVC
dWZmZXIobWV0YWRhdGEucG9zaXRpb24pOwotICAgICAgICAgICAgcmVzZXQoKTsKLSAgICAgICAg
fQotICAgIH0KLQogICAgIGF1dG8gc3RhdHVzID0gcmVhZEZyYW1lRGF0YShyZWFkZXIsIG1ldGFk
YXRhLCBieXRlc1JlbWFpbmluZyk7CiAgICAgaWYgKCFzdGF0dXMuY29tcGxldGVkX29rKCkpCiAg
ICAgICAgIHJldHVybiBzdGF0dXM7CiAKLSAgICAvLyBBdHRlbXB0cyB0byBtaW5pbWlzZSB0aGUg
YW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0aW9ucyBkdWUgdG8gcmVwZXRpdHZlIENNQmxvY2tCdWZm
ZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UgY2FsbHMgaW4gcmVhZEZyYW1lRGF0YS4KLSAgICBtTnVt
RnJhbWVzSW5Db21wbGV0ZUJsb2NrKys7Ci0gICAgaWYgKG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxv
Y2sgPiBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0eSkKLSAgICAgICAgbU1heEJsb2NrQnVmZmVyQ2Fw
YWNpdHkgPSBtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrOwotCi0gICAgaWYgKG1fcGFja2V0U2l6
ZXMuaXNFbXB0eSgpKQotICAgICAgICBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUgPSBwcmVzZW50
YXRpb25UaW1lOwotCiAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbigpKSB7CiAgICAgICAgIGlm
ICghdHJhY2soKS5jb2RlY19wcml2YXRlLmlzX3ByZXNlbnQoKSkgewogICAgICAgICAgICAgUEFS
U0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQXVkaW8gdHJhY2sgbWlzc2luZyBtYWdpYyBjb29r
aWUiKTsKICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsK
ICAgICAgICAgfQogCi0gICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBm
b3JtYXREZXNjcmlwdGlvbjsKKyAgICAgICAgUmVmUHRyPEF1ZGlvSW5mbz4gZm9ybWF0RGVzY3Jp
cHRpb247CiAgICAgICAgIGF1dG8mIHByaXZhdGVEYXRhID0gdHJhY2soKS5jb2RlY19wcml2YXRl
LnZhbHVlKCk7CiAgICAgICAgIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6Vm9yYmlzKQotICAg
ICAgICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2Ny
aXB0aW9uKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlVm9yYmlzQXVkaW9JbmZvKHByaXZhdGVEYXRh
LnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpKTsKICAgICAgICAgZWxzZSBpZiAoY29kZWMoKSA9
PSBDb2RlY1R5cGU6Ok9wdXMpIHsKLSAgICAgICAgICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9
IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQs
ICptX2NvbXBsZXRlUGFja2V0U2l6ZSk7CisgICAgICAgICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZm
ZXIgPSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcigwLCBrT3B1c01pbmltdW1GcmFtZURh
dGFTaXplKTsKICAgICAgICAgICAgIGlmICghY29udGlndW91c0J1ZmZlcikgewogICAgICAgICAg
ICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvVHJhY2tEYXRhOjpjb25z
dW1lRnJhbWVEYXRhOiB1bmFibGUgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBibG9jayIpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxw
dHI7Ci0gICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERhdGFQb2lu
dGVyKGNvbnRpZ3VvdXNCdWZmZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51bGxwdHIsIChjaGFyKiop
JmJsb2NrQnVmZmVyRGF0YSk7Ci0gICAgICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAgICAg
ICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2lu
dGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU2tp
cCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBP
cHVzQ29va2llQ29udGVudHMgY29va2llQ29udGVudHM7Ci0gICAgICAgICAgICBpZiAoIXBhcnNl
T3B1c1ByaXZhdGVEYXRhKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpLCAq
bV9jb21wbGV0ZVBhY2tldFNpemUsIGJsb2NrQnVmZmVyRGF0YSwgY29va2llQ29udGVudHMpKSB7
CisgICAgICAgICAgICBpZiAoIXBhcnNlT3B1c1ByaXZhdGVEYXRhKHByaXZhdGVEYXRhLnNpemUo
KSwgcHJpdmF0ZURhdGEuZGF0YSgpLCBjb250aWd1b3VzQnVmZmVyLT5zaXplKCksIGNvbnRpZ3Vv
dXNCdWZmZXItPmRhdGEoKSwgY29va2llQ29udGVudHMpKSB7CiAgICAgICAgICAgICAgICAgUEFS
U0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiRmFpbGVkIHRvIHBhcnNlIE9wdXMgcHJpdmF0ZSBk
YXRhIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5p
bmcpOwogICAgICAgICAgICAgfQpAQCAtMTQzMyw0MCArMTE0NywyOSBAQCB3ZWJtOjpTdGF0dXMg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEo
d2VibTo6UmVhZAogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9mcmFtZXNQZXJQYWNrZXQg
PSBjb29raWVDb250ZW50cy5mcmFtZXNQZXJQYWNrZXQ7CiAgICAgICAgICAgICBtX2ZyYW1lRHVy
YXRpb24gPSBjb29raWVDb250ZW50cy5mcmFtZUR1cmF0aW9uOwotICAgICAgICAgICAgZm9ybWF0
RGVzY3JpcHRpb24gPSBjcmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb29raWVDb250
ZW50cyk7CisgICAgICAgICAgICBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZU9wdXNBdWRpb0lu
Zm8oY29va2llQ29udGVudHMpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFmb3JtYXREZXNj
cmlwdGlvbikgewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiRmFp
bGVkIHRvIGNyZWF0ZSBmb3JtYXQgZGVzY3JpcHRpb24gZnJvbSBhdWRpbyB0cmFjayBoZWFkZXIi
KTsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0byBj
cmVhdGUgQXVkaW9JbmZvIGZyb20gYXVkaW8gdHJhY2sgaGVhZGVyIik7CiAgICAgICAgICAgICBy
ZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAgIH0KIAotICAgICAg
ICBhdXRvIHN0cmVhbURlc2NyaXB0aW9uID0gUEFMOjpDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25H
ZXRTdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKGZvcm1hdERlc2NyaXB0aW9uLmdldCgpKTsKLSAgICAg
ICAgaWYgKCFzdHJlYW1EZXNjcmlwdGlvbikgewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJP
Ul9JRl9QT1NTSUJMRSgiQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNj
cmlwdGlvbiBmYWlsZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVz
UmVtYWluaW5nKTsKLSAgICAgICAgfQotICAgICAgICBtX3BhY2tldER1cmF0aW9uID0gUEFMOjpD
TVRpbWVNYWtlKHN0cmVhbURlc2NyaXB0aW9uLT5tRnJhbWVzUGVyUGFja2V0LCBzdHJlYW1EZXNj
cmlwdGlvbi0+bVNhbXBsZVJhdGUpOworICAgICAgICBtX3BhY2tldER1cmF0aW9uID0gTWVkaWFU
aW1lKGZvcm1hdERlc2NyaXB0aW9uLT5mcmFtZXNQZXJQYWNrZXQsIGZvcm1hdERlc2NyaXB0aW9u
LT5yYXRlKTsKIAotICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERl
c2NyaXB0aW9uKSk7CisgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKGZvcm1hdERlc2NyaXB0
aW9uLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0gZWxzZSBpZiAoY29kZWMoKSA9PSBDb2RlY1R5
cGU6Ok9wdXMpIHsKICAgICAgICAgLy8gT3B1cyB0ZWNobmljYWxseSBhbGxvd3MgdGhlIGZyYW1l
IGR1cmF0aW9uIGFuZCBmcmFtZXMtcGVyLXBhY2tldCB2YWx1ZXMgdG8gY2hhbmdlIGZyb20gcGFj
a2V0IHRvIHBhY2tldC4KICAgICAgICAgLy8gQ29yZUF1ZGlvIGRvZXNuJ3Qgc3VwcG9ydCBBU0JE
IHZhbHVlcyBsaWtlIHRoZXNlIHRvIGNoYW5nZSBvbiBhIHBlci1wYWNrZXQgYmFzaXMsIHNvIHRo
cm93IGFuIGVycm9yIHdoZW4KICAgICAgICAgLy8gdGhhdCBraW5kIG9mIHZhcmlhYmlsaXR5IGlz
IGVuY291bnRlcmVkLgogICAgICAgICBPcHVzQ29va2llQ29udGVudHMgY29va2llQ29udGVudHM7
CiAgICAgICAgIGF1dG8mIHByaXZhdGVEYXRhID0gdHJhY2soKS5jb2RlY19wcml2YXRlLnZhbHVl
KCk7Ci0gICAgICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJs
b2NrQnVmZmVyKG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQsICptX2NvbXBsZXRlUGFja2V0U2l6
ZSk7CisgICAgICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJs
b2NrQnVmZmVyKDAsIGtPcHVzTWluaW11bUZyYW1lRGF0YVNpemUpOwogICAgICAgICBpZiAoIWNv
bnRpZ3VvdXNCdWZmZXIpIHsKICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lC
TEUoIkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhOiB1bmFibGUgdG8gY3JlYXRlIGNv
bnRpZ3VvdXMgZGF0YSBibG9jayIpOwogICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwg
Ynl0ZXNSZW1haW5pbmcpOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVy
RGF0YSA9IG51bGxwdHI7Ci0gICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyR2V0
RGF0YVBvaW50ZXIoY29udGlndW91c0J1ZmZlci5nZXQoKSwgMCwgbnVsbHB0ciwgbnVsbHB0ciwg
KGNoYXIqKikmYmxvY2tCdWZmZXJEYXRhKTsKLSAgICAgICAgaWYgKGVycikgewotICAgICAgICAg
ICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2lu
dGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBTa2lwKCZy
ZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXBhcnNlT3B1
c1ByaXZhdGVEYXRhKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpLCAqbV9j
b21wbGV0ZVBhY2tldFNpemUsIGJsb2NrQnVmZmVyRGF0YSwgY29va2llQ29udGVudHMpCisgICAg
ICAgIGlmICghcGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRl
RGF0YS5kYXRhKCksIGNvbnRpZ3VvdXNCdWZmZXItPnNpemUoKSwgY29udGlndW91c0J1ZmZlci0+
ZGF0YSgpLCBjb29raWVDb250ZW50cykKICAgICAgICAgICAgIHx8IGNvb2tpZUNvbnRlbnRzLmZy
YW1lc1BlclBhY2tldCAhPSBtX2ZyYW1lc1BlclBhY2tldAogICAgICAgICAgICAgfHwgY29va2ll
Q29udGVudHMuZnJhbWVEdXJhdGlvbiAhPSBtX2ZyYW1lRHVyYXRpb24pIHsKICAgICAgICAgICAg
IFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIk9wdXMgZnJhbWVzLXBlci1wYWNrZXQgY2hh
bmdlZCB3aXRoaW4gYSB0cmFjazsgZXJyb3IiKTsKQEAgLTE0NzQsNjMgKzExNzcsMjk0IEBAIHdl
Ym06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3Vt
ZUZyYW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3BhY2tldFNp
emVzLmFwcGVuZCgqbV9jb21wbGV0ZVBhY2tldFNpemUpOwotICAgIG1fcGFja2V0VGltaW5ncy5h
cHBlbmQoeyBtX3BhY2tldER1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLCBQQUw6OmtDTVRpbWVJ
bnZhbGlkIH0pOwotICAgIG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgKz0gKm1fY29tcGxldGVQ
YWNrZXRTaXplOwotICAgIG1fY29tcGxldGVQYWNrZXRTaXplID0gc3RkOjpudWxsb3B0OworICAg
IGlmICghbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5pbmZvKCkpCisgICAgICAgIG1fY29tcGxldGVN
ZWRpYVNhbXBsZXMuc2V0SW5mbyhmb3JtYXREZXNjcmlwdGlvbigpKTsKKyAgICBlbHNlIGlmIChm
b3JtYXREZXNjcmlwdGlvbigpICYmICpmb3JtYXREZXNjcmlwdGlvbigpICE9ICptX2NvbXBsZXRl
TWVkaWFTYW1wbGVzLmluZm8oKSkKKyAgICAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCi0g
ICAgYXV0byBzYW1wbGVEdXJhdGlvbiA9IFBBTDo6Q01UaW1lR2V0U2Vjb25kcyhQQUw6OkNNVGlt
ZVN1YnRyYWN0KHByZXNlbnRhdGlvblRpbWUsIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZSkpICsg
UEFMOjpDTVRpbWVHZXRTZWNvbmRzKG1fcGFja2V0RHVyYXRpb24pICogc2FtcGxlQ291bnQ7Cisg
ICAgaWYgKG1fdXNlQnl0ZVJhbmdlKQorICAgICAgICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmFw
cGVuZCh7IHByZXNlbnRhdGlvblRpbWUsIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSwgbV9wYWNr
ZXREdXJhdGlvbiwgTWVkaWFTYW1wbGU6OkJ5dGVSYW5nZSB7IG1ldGFkYXRhLnBvc2l0aW9uLCBt
ZXRhZGF0YS5zaXplIH0sIE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jIH0pOworICAg
IGVsc2UKKyAgICAgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5hcHBlbmQoeyBwcmVzZW50YXRp
b25UaW1lLCBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCksIG1fcGFja2V0RHVyYXRpb24sIG1fY29t
cGxldGVCbG9ja0J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBNZWRpYVNhbXBsZTo6U2FtcGxlRmxh
Z3M6OklzU3luYyB9KTsKIAotICAgIGlmIChzYW1wbGVEdXJhdGlvbiA+PSBtX21pbmltdW1TYW1w
bGVEdXJhdGlvbikgewotICAgICAgICBjcmVhdGVTYW1wbGVCdWZmZXIobWV0YWRhdGEucG9zaXRp
b24pOwotICAgICAgICByZXNldCgpOwotICAgIH0KKyAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7
CiAKICAgICBBU1NFUlQoISpieXRlc1JlbWFpbmluZyk7CiAgICAgcmV0dXJuIHdlYm06OlN0YXR1
cyh3ZWJtOjpTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcihzdGQ6Om9wdGlvbmFs
PHNpemVfdD4gbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0KQorCitib29sIFdlYk1QYXJzZXI6OmlzU3Vw
cG9ydGVkVmlkZW9Db2RlYyhTdHJpbmdWaWV3IG5hbWUpCit7CisgICAgcmV0dXJuIG5hbWUgPT0g
IlZfVlA4IiB8fCBuYW1lID09ICJWX1ZQOSI7Cit9CisKK2Jvb2wgV2ViTVBhcnNlcjo6aXNTdXBw
b3J0ZWRBdWRpb0NvZGVjKFN0cmluZ1ZpZXcgbmFtZSkKK3sKKyAgICByZXR1cm4gbmFtZSA9PSAi
QV9WT1JCSVMiIHx8IG5hbWUgPT0gIkFfT1BVUyI7Cit9CisKK1NvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKQorICAgIDogbV9wYXJzZXIoKnRoaXMpCit7Cit9
CisKK2Jvb2wgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNXZWJNRm9ybWF0UmVhZGVyQXZhaWxh
YmxlKCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjp3ZWJNRm9y
bWF0UmVhZGVyRW5hYmxlZCgpICYmIGNhbkxvYWRGb3JtYXRSZWFkZXIoKSAmJiBpc1dlYm1QYXJz
ZXJBdmFpbGFibGUoKTsKK30KKworTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5
cGUmIHR5cGUpCit7CisjaWYgRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxF
KE9QVVMpCisgICAgaWYgKCFpc1dlYm1QYXJzZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBh
dXRvIGNvbnRhaW5lclR5cGUgPSB0eXBlLmNvbnRhaW5lclR5cGUoKTsKKyAgICBib29sIGlzQXVk
aW9Db250YWluZXJUeXBlID0gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb250YWluZXJUeXBlLCAi
YXVkaW8vd2VibSIpOworICAgIGJvb2wgaXNWaWRlb0NvbnRhaW5lclR5cGUgPSBlcXVhbElnbm9y
aW5nQVNDSUlDYXNlKGNvbnRhaW5lclR5cGUsICJ2aWRlby93ZWJtIik7CisgICAgaWYgKCFpc0F1
ZGlvQ29udGFpbmVyVHlwZSAmJiAhaXNWaWRlb0NvbnRhaW5lclR5cGUpCisgICAgICAgIHJldHVy
biBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAg
Ym9vbCBpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGUgPSBmYWxzZTsKKyNpZiBFTkFCTEUoVk9SQklT
KQorICAgIGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSB8PSBpc1ZvcmJpc0RlY29kZXJBdmFpbGFi
bGUoKTsKKyNlbmRpZgorI2lmIEVOQUJMRShPUFVTKQorICAgIGlzQW55QXVkaW9Db2RlY0F2YWls
YWJsZSB8PSBpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCk7CisjZW5kaWYKKworICAgIGlmIChpc0F1
ZGlvQ29udGFpbmVyVHlwZSAmJiAhaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlKQorICAgICAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKwor
ICAgIGJvb2wgaXNBbnlDb2RlY0F2YWlsYWJsZSA9IGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZTsK
KyNpZiBFTkFCTEUoVlA5KQorICAgIGlzQW55Q29kZWNBdmFpbGFibGUgfD0gaXNWUDlEZWNvZGVy
QXZhaWxhYmxlKCk7CisjZW5kaWYKKworICAgIGlmICghaXNBbnlDb2RlY0F2YWlsYWJsZSkKKyAg
ICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0
ZWQ7CisKKyAgICBhdXRvIGNvZGVjcyA9IHR5cGUuY29kZWNzKCk7CisgICAgaWYgKGNvZGVjcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6
Ok1heUJlU3VwcG9ydGVkOworCisgICAgZm9yIChhdXRvJiBjb2RlYyA6IGNvZGVjcykgeworI2lm
IEVOQUJMRShWUDkpCisgICAgICAgIGlmIChjb2RlYy5zdGFydHNXaXRoKCJ2cDA5IikgfHwgY29k
ZWMuc3RhcnRzV2l0aCgidnAwOCIpIHx8IGVxdWFsKGNvZGVjLCAidnA4IikgfHwgZXF1YWwoY29k
ZWMsICJ2cDkiKSkgeworCisgICAgICAgICAgICBpZiAoIWlzVlA5RGVjb2RlckF2YWlsYWJsZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6
OklzTm90U3VwcG9ydGVkOworCisgICAgICAgICAgICBhdXRvIGNvZGVjUGFyYW1ldGVycyA9IHBh
cnNlVlBDb2RlY1BhcmFtZXRlcnMoY29kZWMpOworICAgICAgICAgICAgaWYgKCFjb2RlY1BhcmFt
ZXRlcnMpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRz
VHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAgICAgIGlmICghaXNWUENvZGVjQ29uZmln
dXJhdGlvblJlY29yZFN1cHBvcnRlZCgqY29kZWNQYXJhbWV0ZXJzKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsK
KworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoVlA5
KQorCisjaWYgRU5BQkxFKFZPUkJJUykKKyAgICAgICAgaWYgKGNvZGVjID09ICJ2b3JiaXMiKSB7
CisgICAgICAgICAgICBpZiAoIWlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9y
dGVkOworCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJM
RShWT1JCSVMpCisKKyNpZiBFTkFCTEUoT1BVUykKKyAgICAgICAgaWYgKGNvZGVjID09ICJvcHVz
IikgeworICAgICAgICAgICAgaWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBw
b3J0ZWQ7CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5B
QkxFKE9QVVMpCisKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlw
ZTo6SXNOb3RTdXBwb3J0ZWQ7CisgICAgfQorCisgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6
OlN1cHBvcnRzVHlwZTo6SXNTdXBwb3J0ZWQ7CisKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHR5
cGUpOworCisgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RT
dXBwb3J0ZWQ7CisjZW5kaWYgLy8gRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5B
QkxFKE9QVVMpCit9CisKK1JlZlB0cjxTb3VyY2VCdWZmZXJQYXJzZXJXZWJNPiBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpjcmVhdGUoY29uc3QgQ29udGVudFR5cGUmIHR5cGUpCit7CisgICAgaWYg
KGlzQ29udGVudFR5cGVTdXBwb3J0ZWQodHlwZSkgIT0gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9y
dHNUeXBlOjpJc05vdFN1cHBvcnRlZCkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNKCkpOworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFdl
Yk1QYXJzZXI6OnByb3ZpZGVNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGVzKQor
eworICAgIG1fY2FsbGJhY2sucGFyc2VkTWVkaWFEYXRhKFdURk1vdmUoc2FtcGxlcykpOworfQor
Cit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZEluaXRpYWxpemF0aW9uRGF0YShJ
bml0aWFsaXphdGlvblNlZ21lbnQmJiBpbml0aWFsaXphdGlvblNlZ21lbnQpCit7CisgICAgbV9j
YWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0
aGlzIH0sIGluaXRpYWxpemF0aW9uU2VnbWVudCA9IFdURk1vdmUoaW5pdGlhbGl6YXRpb25TZWdt
ZW50KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKG1fZGlkUGFyc2VJbml0aWFsaXphdGlvbkRh
dGFDYWxsYmFjaykKKyAgICAgICAgICAgIG1fZGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxs
YmFjayhXVEZNb3ZlKGluaXRpYWxpemF0aW9uU2VnbWVudCkpOworICAgIH0pOworfQorCit2b2lk
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9j
ayYmIHNhbXBsZXNCbG9jaykKIHsKLSAgICBpZiAobV9wYWNrZXRTaXplcy5pc0VtcHR5KCkpCisg
ICAgaWYgKCFzYW1wbGVzQmxvY2suaW5mbygpKSB7CisgICAgICAgIEVSUk9SX0xPR19JRl9QT1NT
SUJMRShMT0dJREVOVElGSUVSLCAiTm8gVHJhY2tJbmZvIHNldCIpOwogICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVsbHB0
cjsKLSAgICBhdXRvIGVyciA9IFBBTDo6Q01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0
aW9uKCkuZ2V0KCksIG1fcGFja2V0U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFRpbWluZ3Muc2l6ZSgp
LCBtX3BhY2tldFRpbWluZ3MuZGF0YSgpLCBtX3BhY2tldFNpemVzLnNpemUoKSwgbV9wYWNrZXRT
aXplcy5kYXRhKCksICZyYXdTYW1wbGVCdWZmZXIpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAg
UEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01BdWRpb1NhbXBsZUJ1ZmZlckNyZWF0ZVdp
dGhQYWNrZXREZXNjcmlwdGlvbnMgZmFpbGVkIHdpdGggJWQiLCBlcnIpOworICAgIFJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNjcmlwdGlvbjsKKyAgICBpZiAoc2Ft
cGxlc0Jsb2NrLmlzVmlkZW8oKSkgeworICAgICAgICBpZiAobV92aWRlb0luZm8gIT0gc2FtcGxl
c0Jsb2NrLmluZm8oKSkgeworICAgICAgICAgICAgbV92aWRlb0luZm8gPSBzYW1wbGVzQmxvY2su
aW5mbygpOworICAgICAgICAgICAgbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9y
bWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKCpzYW1wbGVzQmxvY2suaW5mbygpKTsKKyAgICAg
ICAgfQorICAgICAgICBmb3JtYXREZXNjcmlwdGlvbiA9IG1fdmlkZW9Gb3JtYXREZXNjcmlwdGlv
bjsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9hdWRpb0luZm8gIT0gc2FtcGxlc0Jsb2Nr
LmluZm8oKSkgeworICAgICAgICAgICAgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKCk7CisgICAg
ICAgICAgICBtX2F1ZGlvRm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlv
bkZyb21UcmFja0luZm8oKnNhbXBsZXNCbG9jay5pbmZvKCkpOworICAgICAgICAgICAgbV9hdWRp
b0luZm8gPSBzYW1wbGVzQmxvY2suaW5mbygpOworICAgICAgICB9CisgICAgICAgIGZvcm1hdERl
c2NyaXB0aW9uID0gbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uOworICAgIH0KKworICAgIGlmIChz
YW1wbGVzQmxvY2suaXNWaWRlbygpKSB7CisgICAgICAgIHJldHVyblNhbXBsZXMoV1RGTW92ZShz
YW1wbGVzQmxvY2spLCBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gYWRvcHRDRihyYXdTYW1wbGVC
dWZmZXIpOwogCi0gICAgYXV0byB0cmFja0lEID0gdHJhY2soKS50cmFja191aWQudmFsdWUoKTsK
LSAgICBwYXJzZXIoKS5wcm92aWRlTWVkaWFEYXRhKFdURk1vdmUoc2FtcGxlQnVmZmVyKSwgdHJh
Y2tJRCwgbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0KTsKKyAgICAvLyBQYWNrIGF1ZGlvIGlmIG5lZWRl
ZC4KKyAgICBpZiAobV9xdWV1ZWRBdWRpb1NhbXBsZXMuc2l6ZSgpKSB7CisgICAgICAgIGF1dG8m
IGxhc3RTYW1wbGUgPSBtX3F1ZXVlZEF1ZGlvU2FtcGxlcy5sYXN0KCk7CisgICAgICAgIGlmIChs
YXN0U2FtcGxlLmR1cmF0aW9uICsgbGFzdFNhbXBsZS5wcmVzZW50YXRpb25UaW1lICE9IHNhbXBs
ZXNCbG9jay5maXJzdCgpLnByZXNlbnRhdGlvblRpbWUpCisgICAgICAgICAgICBmbHVzaFBlbmRp
bmdBdWRpb1NhbXBsZXMoKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBzYW1wbGUgOiBzYW1wbGVz
QmxvY2spCisgICAgICAgIG1fcXVldWVkQXVkaW9EdXJhdGlvbiArPSBzYW1wbGUuZHVyYXRpb247
CisgICAgbV9xdWV1ZWRBdWRpb1NhbXBsZXMuYXBwZW5kKFdURk1vdmUoc2FtcGxlc0Jsb2NrKSk7
CisgICAgaWYgKG1fcXVldWVkQXVkaW9EdXJhdGlvbiA8IG1fbWluaW11bUF1ZGlvU2FtcGxlRHVy
YXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoKTsK
IH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb0J1ZmZl
cnMoKQordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpyZXR1cm5TYW1wbGVzKE1lZGlhU2Ft
cGxlc0Jsb2NrJiYgYmxvY2ssIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZGVzY3JpcHRpb24pCiB7
Ci0gICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdHJhY2tzKSB7Ci0gICAgICAgIGlmICh0cmFjay0+
dHJhY2tUeXBlKCkgPT0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBlOjpB
dWRpbykgewotICAgICAgICAgICAgQXVkaW9UcmFja0RhdGEmIGF1ZGlvVHJhY2sgPSBkb3duY2Fz
dDxBdWRpb1RyYWNrRGF0YT4odHJhY2suZ2V0KCkpOwotICAgICAgICAgICAgYXVkaW9UcmFjay5j
cmVhdGVTYW1wbGVCdWZmZXIoKTsKLSAgICAgICAgICAgIGF1ZGlvVHJhY2sucmVzZXRDb21wbGV0
ZWQoKTsKLSAgICAgICAgfQorICAgIGlmIChibG9jay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gZXhwZWN0ZWRCdWZmZXIgPSB0b0NNU2FtcGxlQnVmZmVyKFdURk1vdmUo
YmxvY2spLCBkZXNjcmlwdGlvbik7CisgICAgaWYgKCFleHBlY3RlZEJ1ZmZlcikgeworICAgICAg
ICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgInRvQ01TYW1wbGVCdWZmZXIg
ZXJyb3I6IiwgZXhwZWN0ZWRCdWZmZXIuZXJyb3IoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47
CiAgICAgfQorCisgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRyYWNrSUQgPSBibG9jay5pbmZvKCktPnRyYWNrSUQs
IHNhbXBsZUJ1ZmZlciA9IFdURk1vdmUoZXhwZWN0ZWRCdWZmZXIudmFsdWUoKSldICgpIG11dGFi
bGUgeworICAgICAgICBpZiAoIW1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRpYVNhbXBsZUFW
Rk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIHRyYWNrSUQpOworCisgICAgICAgIG1f
ZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKFdURk1vdmUobWVkaWFTYW1wbGUpLCB0cmFja0lE
LCBlbXB0eVN0cmluZygpKTsKKyAgICB9KTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpzZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbihmbG9hdCBkdXJhdGlvbikKK3ZvaWQg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkVHJpbW1pbmdEYXRhKHVpbnQ2NF90IHRyYWNr
SUQsIGNvbnN0IE1lZGlhVGltZSYgcGFkZGluZykKIHsKLSAgICBtX21pbmltdW1BdWRpb1NhbXBs
ZUR1cmF0aW9uID0gZHVyYXRpb247CisgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRyYWNrSUQsIHBhZGRpbmddICgp
IHsKKyAgICAgICAgaWYgKG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjaykKKyAgICAgICAg
ICAgIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayh0cmFja0lELCBwYWRkaW5nKTsKKyAg
ICB9KTsKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1N1cHBvcnRlZFZpZGVv
Q29kZWMoU3RyaW5nVmlldyBuYW1lKQordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpjb250
ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoUmVmPFNoYXJlZEJ1ZmZl
cj4mJiBrZXlJRCwgdWludDY0X3QgdHJhY2tJRCkKIHsKLSAgICByZXR1cm4gbmFtZSA9PSAiVl9W
UDgiIHx8IG5hbWUgPT0gIlZfVlA5IjsKKyAgICBpZiAobV9kaWRQcm92aWRlQ29udGVudEtleVJl
cXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2spCisgICAgICAgIG1fZGlk
UHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRENhbGxi
YWNrKFdURk1vdmUoa2V5SUQpLCB0cmFja0lEKTsKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMoU3RyaW5nVmlldyBuYW1lKQordm9pZCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoKQogewotICAgIHJl
dHVybiBuYW1lID09ICJBX1ZPUkJJUyIgfHwgbmFtZSA9PSAiQV9PUFVTIjsKKyAgICBpZiAoIW1f
YXVkaW9Gb3JtYXREZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX2F1
ZGlvSW5mbyk7CisgICAgbV9xdWV1ZWRBdWRpb1NhbXBsZXMuc2V0SW5mbyhtX2F1ZGlvSW5mby5j
b3B5UmVmKCkpOworICAgIHJldHVyblNhbXBsZXMoV1RGTW92ZShtX3F1ZXVlZEF1ZGlvU2FtcGxl
cyksIG1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbi5nZXQoKSk7CisKKyAgICBtX3F1ZXVlZEF1ZGlv
U2FtcGxlcyA9IHsgfTsKKyAgICBtX3F1ZXVlZEF1ZGlvRHVyYXRpb24gPSB7IH07Cit9CisKK3Zv
aWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6YXBwZW5kRGF0YShTZWdtZW50JiYgc2VnbWVudCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBBcHBlbmRGbGFn
cyBhcHBlbmRGbGFncykKK3sKKyAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVS
LCAiZmxhZ3MoIiwgYXBwZW5kRmxhZ3MgPT0gQXBwZW5kRmxhZ3M6OkRpc2NvbnRpbnVpdHkgPyAi
RGlzY29udGludWl0eSIgOiAiIiwgIiksIHNpemUoIiwgc2VnbWVudC5zaXplKCksICIpIik7CisK
KyAgICBpZiAoYXBwZW5kRmxhZ3MgPT0gQXBwZW5kRmxhZ3M6OkRpc2NvbnRpbnVpdHkpCisgICAg
ICAgIG1fcGFyc2VyLnJlc2V0KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGFyc2VyLnBhcnNl
KFdURk1vdmUoc2VnbWVudCkpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChyZXN1bHQucmV0dXJuVmFsdWUoKSkgeworICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lC
TEUoTE9HSURFTlRJRklFUiwgInN0YXR1cy5jb2RlKCIsIHJlc3VsdC5yZXR1cm5WYWx1ZSgpLCAi
KSIpOworCisgICAgICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBjb2RlID0gcmVzdWx0LnJldHVyblZhbHVlKCldIHsK
KyAgICAgICAgICAgIGlmIChtX2RpZEVuY291bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNr
KQorICAgICAgICAgICAgICAgIG1fZGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJh
Y2soY29kZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIEF1ZGlvIHRyYWNrcyBhcmUg
Z3JvdXBlZCBpbnRvIG1ldGEtc2FtcGxlcyBvZiBhIGR1cmF0aW9uIG5vIG1vcmUgdGhhbiBtX21p
bmltdW1TYW1wbGVEdXJhdGlvbi4KKyAgICAvLyBCdXQgYXQgdGhlIGVuZCBvZiBhIGZpbGUsIG5v
IG1vcmUgYXVkaW8gZGF0YSBtYXkgYmUgaW5jb21pbmcsIHNvIGZsdXNoIGFuZCBlbWl0IGFueSBw
ZW5kaW5nCisgICAgLy8gYXVkaW8gYnVmZmVycy4KKyAgICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBs
ZXMoKTsKKworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nTWVkaWFEYXRhKCkKK3sKK30KKwordm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRChib29s
LCB1aW50NjRfdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnNob3VsZFByb3ZpZGVNZWRpYWRhdGFGb3JUcmFja0lEKHVpbnQ2NF90
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmludmFsaWRhdGUoKQoreworICAgIElORk9fTE9HX0lG
X1BPU1NJQkxFKExPR0lERU5USUZJRVIpOworICAgIG1fcGFyc2VyLmludmFsaWRhdGUoKTsKK30K
Kwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiBs
b2dnZXIsIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIpCit7CisgICAgbV9wYXJzZXIuc2V0TG9n
Z2VyKGxvZ2dlciwgbG9nSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQgZHVyYXRpb24pCit7Cisg
ICAgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbiA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aEZs
b2F0KGR1cmF0aW9uKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4
IGU4NzZhYjQxNGE0YWJiMzNkNTE4YzM3YjQxZmU1YTE0Nzc2YWI0OTYuLjg3YTk0MDNhOGYzZmM1
MGI2OGFhZGU4MTU3OTVhMjkzZjU3NzYxYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJN
LmgKQEAgLTI3LDE5ICsyNywyMSBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGUuaCIKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQYXJzZXIuaCIKICNpbmNs
dWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KLSNpbmNsdWRlIDxDb3JlTWVkaWEvQ01U
aW1lLmg+CiAjaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlTWVkaWFTUEkuaD4KICNpbmNsdWRlIDx2
YXJpYW50PgogI2luY2x1ZGUgPHdlYm0vY2FsbGJhY2suaD4KICNpbmNsdWRlIDx3ZWJtL3N0YXR1
cy5oPgogI2luY2x1ZGUgPHdlYm0vdnA5X2hlYWRlcl9wYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYv
TWVkaWFUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlv
biogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKLXR5cGVkZWYgc3RydWN0IE9wYXF1ZUNNQmxvY2tC
dWZmZXIgKkNNQmxvY2tCdWZmZXJSZWY7CiAKIG5hbWVzcGFjZSB3ZWJtIHsKIGNsYXNzIFdlYm1Q
YXJzZXI7CkBAIC00Nyw0MiArNDksMzYgQEAgY2xhc3MgV2VibVBhcnNlcjsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIDogcHVibGljIFNvdXJj
ZUJ1ZmZlclBhcnNlciwgcHJpdmF0ZSB3ZWJtOjpDYWxsYmFjayB7CitjbGFzcyBXZWJNUGFyc2Vy
IDogcHJpdmF0ZSB3ZWJtOjpDYWxsYmFjayB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgY2xhc3MgU2VnbWVudFJlYWRlcjsKLQotICAgIHN0YXRpYyBib29sIGlz
V2ViTUZvcm1hdFJlYWRlckF2YWlsYWJsZSgpOwotICAgIHN0YXRpYyBNZWRpYVBsYXllckVudW1z
OjpTdXBwb3J0c1R5cGUgaXNDb250ZW50VHlwZVN1cHBvcnRlZChjb25zdCBDb250ZW50VHlwZSYp
OwotICAgIHN0YXRpYyBTcGFuPGNvbnN0IEFTQ0lJTGl0ZXJhbD4gc3VwcG9ydGVkTUlNRVR5cGVz
KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNPiBjcmVhdGUoY29uc3QgQ29udGVudFR5cGUmKTsKKyAgICBjbGFzcyBDYWxsYmFjayB7Cisg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VkVHJpbW1pbmdEYXRhKHVpbnQ2
NF90LCBjb25zdCBNZWRpYVRpbWUmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlZElu
aXRpYWxpemF0aW9uRGF0YShTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0aW9uU2VnbWVu
dCYmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1w
bGVzQmxvY2smJikgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuRGVjcnlwdCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZW50S2V5UmVxdWVz
dEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgdWludDY0
X3QpIHsgfQorICAgICAgICB2aXJ0dWFsIH5DYWxsYmFjaygpID0gZGVmYXVsdDsKKyAgICB9Owog
Ci0gICAgU291cmNlQnVmZmVyUGFyc2VyV2ViTSgpOwotICAgIH5Tb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgV2ViTVBhcnNlcihDYWxsYmFjayYpOworICAgIFdF
QkNPUkVfRVhQT1JUIH5XZWJNUGFyc2VyKCk7CiAKLSAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJs
ZSgpOworICAgIGNsYXNzIFNlZ21lbnRSZWFkZXI7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGNyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25P
cjxpbnQ+IHBhcnNlKFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudCYmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlc2V0U3RhdGUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0
KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7CiAgICAgY29uc3Qgd2Vi
bTo6U3RhdHVzJiBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQogCi0gICAgVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gVHlwZTo6V2ViTTsgfQotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYXBwZW5kRGF0YShTZWdtZW50JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9
IFtdIHsgfSwgQXBwZW5kRmxhZ3MgPSBBcHBlbmRGbGFnczo6Tm9uZSkgZmluYWw7Ci0gICAgdm9p
ZCBmbHVzaFBlbmRpbmdNZWRpYURhdGEoKSBmaW5hbDsKLSAgICB2b2lkIHNldFNob3VsZFByb3Zp
ZGVNZWRpYURhdGFGb3JUcmFja0lEKGJvb2wsIHVpbnQ2NF90KSBmaW5hbDsKLSAgICBib29sIHNo
b3VsZFByb3ZpZGVNZWRpYWRhdGFGb3JUcmFja0lEKHVpbnQ2NF90KSBmaW5hbDsKLSAgICB2b2lk
IHJlc2V0UGFyc2VyU3RhdGUoKSBmaW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGUoKSBmaW5hbDsK
LQotICAgIHZvaWQgZmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCk7Ci0gICAgdm9pZCBzZXRNaW5p
bXVtQXVkaW9TYW1wbGVEdXJhdGlvbihmbG9hdCk7Ci0gICAgCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmllcikgZmlu
YWw7CisgICAgdm9pZCBwcm92aWRlTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYpOwogCi0g
ICAgdm9pZCBwcm92aWRlTWVkaWFEYXRhKFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4sIHVp
bnQ2NF90LCBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gYnl0ZVJhbmdlT2Zmc2V0KTsKLSAgICB1c2lu
ZyBEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrID0gRnVuY3Rpb248dm9pZCh1aW50NjRfdCB0
cmFja0lELCBjb25zdCBNZWRpYVRpbWUmIGRpc2NhcmRQYWRkaW5nKT47Ci0gICAgdm9pZCBzZXRE
aWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKERpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2sm
JiBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dExvZ2dlcihjb25zdCBMb2dnZXImLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKTsKKyAgICBjb25z
dCBMb2dnZXIqIGxvZ2dlclB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9Cisg
ICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nSWRlbnRp
ZmllcjsgfQogCiAgICAgZW51bSBjbGFzcyBFcnJvckNvZGUgOiBpbnQzMl90IHsKICAgICAgICAg
U291cmNlQnVmZmVyUGFyc2VyV2ViTUVycm9yQ29kZVN0YXJ0ID0gMjAwMCwKQEAgLTk0LDYgKzkw
LDcgQEAgcHVibGljOgogICAgICAgICBDb250ZW50RW5jcnlwdGVkLAogICAgICAgICBWYXJpYWJs
ZUZyYW1lRHVyYXRpb24sCiAgICAgICAgIFJlYWRlckZhaWxlZCwKKyAgICAgICAgUGFyc2VyU2h1
dGRvd24sCiAgICAgfTsKIAogICAgIGVudW0gY2xhc3MgU3RhdGUgOiB1aW50OF90IHsKQEAgLTEy
MCwxOCArMTE3LDEyIEBAIHB1YmxpYzoKICAgICBjbGFzcyBUcmFja0RhdGEgewogICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBhdXRv
IGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFj
a0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxUcmFj
a0RhdGE+CisgICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBj
b25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBXZWJNUGFyc2VyJiBwYXJzZXIpIC0+
IFVuaXF1ZVJlZjxUcmFja0RhdGE+CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlUmVmPFRyYWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpVbmtub3du
LCBwYXJzZXIpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VHJhY2tEYXRhPihj
b2RlY1R5cGUsIHRyYWNrRW50cnksIFRyYWNrSW5mbzo6VHJhY2tUeXBlOjpVbmtub3duLCBwYXJz
ZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgICAg
IFVua25vd24sCi0gICAgICAgICAgICBBdWRpbywKLSAgICAgICAgICAgIFZpZGVvLAotICAgICAg
ICB9OwotCi0gICAgICAgIFRyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJt
OjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBUeXBlIHRyYWNrVHlwZSwgU291cmNlQnVmZmVyUGFy
c2VyV2ViTSYgcGFyc2VyKQorICAgICAgICBUcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwg
Y29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgVHJhY2tJbmZvOjpUcmFja1R5cGUg
dHJhY2tUeXBlLCBXZWJNUGFyc2VyJiBwYXJzZXIpCiAgICAgICAgICAgICA6IG1fY29kZWMgeyBj
b2RlY1R5cGUgfQogICAgICAgICAgICAgLCBtX3RyYWNrIHsgd2VibTo6VHJhY2tFbnRyeSB7IHRy
YWNrRW50cnkgfSB9CiAgICAgICAgICAgICAsIG1fdHJhY2tUeXBlIHsgdHJhY2tUeXBlIH0KQEAg
LTE0MiwxMTMgKzEzMywxMTQgQEAgcHVibGljOgogCiAgICAgICAgIENvZGVjVHlwZSBjb2RlYygp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZWM7IH0KICAgICAgICAgd2VibTo6VHJhY2tFbnRyeSYgdHJh
Y2soKSB7IHJldHVybiBtX3RyYWNrOyB9Ci0gICAgICAgIFR5cGUgdHJhY2tUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFja1R5cGU7IH0KKyAgICAgICAgVHJhY2tJbmZvOjpUcmFja1R5cGUgdHJh
Y2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90cmFja1R5cGU7IH0KIAotICAgICAgICBSZXRhaW5Q
dHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gZm9ybWF0RGVzY3JpcHRpb24oKSB7IHJldHVybiBt
X2Zvcm1hdERlc2NyaXB0aW9uOyB9Ci0gICAgICAgIHZvaWQgc2V0Rm9ybWF0RGVzY3JpcHRpb24o
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+JiYgZGVzY3JpcHRpb24pIHsgbV9mb3Jt
YXREZXNjcmlwdGlvbiA9IFdURk1vdmUoZGVzY3JpcHRpb24pOyB9CisgICAgICAgIHZvaWQgY3Jl
YXRlQnl0ZVJhbmdlU2FtcGxlcygpIHsgbV91c2VCeXRlUmFuZ2UgPSB0cnVlOyB9CisKKyAgICAg
ICAgUmVmUHRyPFRyYWNrSW5mbz4gZm9ybWF0RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBt
X2Zvcm1hdERlc2NyaXB0aW9uLmNvcHlSZWYoKTsgfQorICAgICAgICB2b2lkIHNldEZvcm1hdERl
c2NyaXB0aW9uKFJlZjxUcmFja0luZm8+JiYgZGVzY3JpcHRpb24pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fZm9ybWF0RGVzY3JpcHRpb24gPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAgICAg
ICAgICAgIG1fZm9ybWF0RGVzY3JpcHRpb24tPnRyYWNrSUQgPSB0cmFjaygpLnRyYWNrX3VpZC52
YWx1ZSgpOworICAgICAgICB9CiAKLSAgICAgICAgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFy
c2VyKCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZXI7IH0KKyAgICAgICAgV2ViTVBhcnNlciYgcGFy
c2VyKCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZXI7IH0KIAotICAgICAgICB2aXJ0dWFsIHdlYm06
OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1l
TWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkKKyAgICAgICAgdmlydHVh
bCB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJt
OjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBNZWRpYVRpbWUmLCBpbnQpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0
dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtJbnZhbGlkRWxlbWVudElkKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZXNldENvbXBsZXRlZCgpCisgICAgICAgIHZp
cnR1YWwgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkKICAgICAgICAgewogICAgICAg
ICAgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fY29t
cGxldGVNZWRpYVNhbXBsZXMgPSB7IH07CiAgICAgICAgIH0KKwogICAgICAgICB2b2lkIHJlc2V0
KCkKICAgICAgICAgewotICAgICAgICAgICAgcmVzZXRDb21wbGV0ZWQoKTsKKyAgICAgICAgICAg
IHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKTsKICAgICAgICAgICAgIG1fY29tcGxldGVQYWNr
ZXRTaXplID0gc3RkOjpudWxsb3B0OwogICAgICAgICAgICAgbV9wYXJ0aWFsQnl0ZXNSZWFkID0g
MDsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrQnVmZmVyLnJlc2V0KCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGRyYWluUGVuZGluZ1NhbXBsZXMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1f
Y29tcGxldGVNZWRpYVNhbXBsZXMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIG1fcGFyc2VyLnByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShtX2NvbXBsZXRlTWVk
aWFTYW1wbGVzKSk7CisgICAgICAgICAgICByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7CiAg
ICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZm
ZXJSZWY+IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZzZXQsIHNpemVf
dCBsZW5ndGgpIGNvbnN0OworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBjb250aWd1b3Vz
Q29tcGxldGVCbG9ja0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsK
ICAgICAgICAgd2VibTo6U3RhdHVzIHJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qg
d2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAg
IFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBtX2NvbXBsZXRlQmxvY2tCdWZmZXI7Ci0gICAg
ICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBtX2NvbXBsZXRlUGFja2V0U2l6ZTsKLSAgICAgICAg
Ly8gSW5pdGlhbCBhbGxvY2F0aW9uIHNpemUgb2YgZW1wdHkgQ01CbG9ja0J1ZmZlci4KLSAgICAg
ICAgc2l6ZV90IG1NYXhCbG9ja0J1ZmZlckNhcGFjaXR5IHsgMCB9OworICAgICAgICBSZWZQdHI8
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4gbV9jb21wbGV0ZUJsb2NrQnVmZmVyOworICAgICAgICBN
ZWRpYVNhbXBsZXNCbG9jayBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzOworICAgICAgICBib29sIG1f
dXNlQnl0ZVJhbmdlIHsgZmFsc2UgfTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIENvZGVjVHlw
ZSBtX2NvZGVjOwogICAgICAgICB3ZWJtOjpUcmFja0VudHJ5IG1fdHJhY2s7Ci0gICAgICAgIFR5
cGUgbV90cmFja1R5cGU7Ci0gICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVm
PiBtX2Zvcm1hdERlc2NyaXB0aW9uOwotICAgICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJl
Zj4gbV9jdXJyZW50QmxvY2tCdWZmZXI7Ci0gICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0m
IG1fcGFyc2VyOworICAgICAgICBjb25zdCBUcmFja0luZm86OlRyYWNrVHlwZSBtX3RyYWNrVHlw
ZTsKKyAgICAgICAgUmVmUHRyPFRyYWNrSW5mbz4gbV9mb3JtYXREZXNjcmlwdGlvbjsKKyAgICAg
ICAgU2hhcmVkQnVmZmVyQnVpbGRlciBtX2N1cnJlbnRCbG9ja0J1ZmZlcjsKKyAgICAgICAgV2Vi
TVBhcnNlciYgbV9wYXJzZXI7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBtX2NvbXBs
ZXRlUGFja2V0U2l6ZTsKICAgICAgICAgLy8gU2l6ZSBvZiB0aGUgY3VycmVudGx5IGluY29tcGxl
dGUgcGFyc2VkIHBhY2tldC4KICAgICAgICAgc2l6ZV90IG1fcGFydGlhbEJ5dGVzUmVhZCB7IDAg
fTsKICAgICB9OwogCiAgICAgY2xhc3MgVmlkZW9UcmFja0RhdGEgOiBwdWJsaWMgVHJhY2tEYXRh
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUgY29k
ZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxWaWRlb1RyYWNrRGF0YT4KKyAgICAgICAg
c3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNr
RW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJzZXImIHBhcnNlcikgLT4gVW5pcXVlUmVmPFZpZGVv
VHJhY2tEYXRhPgogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxW
aWRlb1RyYWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0VudHJ5LCBwYXJzZXIpOwogICAgICAgICB9
CiAKLSAgICAgICAgVmlkZW9UcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2Vi
bTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2Vy
KQotICAgICAgICAgICAgOiBUcmFja0RhdGEoY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpW
aWRlbywgcGFyc2VyKQorICAgICAgICBWaWRlb1RyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBl
LCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBXZWJNUGFyc2VyJiBwYXJzZXIp
CisgICAgICAgICAgICA6IFRyYWNrRGF0YShjb2RlY1R5cGUsIHRyYWNrRW50cnksIFRyYWNrSW5m
bzo6VHJhY2tUeXBlOjpWaWRlbywgcGFyc2VyKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAg
ICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3
ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFs
OwotCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZmZXIoY29uc3Qg
Q01UaW1lJiwgaW50LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJik7CiAgICAgICAgIGNvbnN0
IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJWaWRlb1RyYWNrRGF0YSI7IH0K
KyAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29u
c3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgTWVkaWFUaW1lJiwgaW50
KSBmaW5hbDsKKyAgICAgICAgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkgZmluYWw7
CiAKICNpZiBFTkFCTEUoVlA5KQogICAgICAgICB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXIg
bV9oZWFkZXJQYXJzZXI7CisgICAgICAgIFZlY3Rvcjxib29sPiBtX2tleUZyYW1lczsKICNlbmRp
ZgogICAgIH07CiAKICAgICBjbGFzcyBBdWRpb1RyYWNrRGF0YSA6IHB1YmxpYyBUcmFja0RhdGEg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2Rl
Y1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk0mIHBhcnNlciwgZmxvYXQgbWluaW11bVNhbXBsZUR1cmF0aW9uKSAtPiBVbmlxdWVS
ZWY8QXVkaW9UcmFja0RhdGE+CisgICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUg
Y29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBXZWJNUGFyc2Vy
JiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4KICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJh
Y2tFbnRyeSwgcGFyc2VyLCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwg
cGFyc2VyKTsKICAgICAgICAgfQogCi0gICAgICAgIEF1ZGlvVHJhY2tEYXRhKENvZGVjVHlwZSBj
b2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk0mIHBhcnNlciwgZmxvYXQgbWluaW11bVNhbXBsZUR1cmF0aW9uKQotICAgICAg
ICAgICAgOiBUcmFja0RhdGEgeyBjb2RlY1R5cGUsIHRyYWNrRW50cnksIFR5cGU6OkF1ZGlvLCBw
YXJzZXIgfQotICAgICAgICAgICAgLCBtX21pbmltdW1TYW1wbGVEdXJhdGlvbiB7IG1pbmltdW1T
YW1wbGVEdXJhdGlvbiB9CisgICAgICAgIEF1ZGlvVHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5
cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJzZXImIHBhcnNl
cikKKyAgICAgICAgICAgIDogVHJhY2tEYXRhIHsgY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUcmFj
a0luZm86OlRyYWNrVHlwZTo6QXVkaW8sIHBhcnNlciB9CiAgICAgICAgIHsKICAgICAgICAgfQog
Ci0gICAgICAgIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNv
bnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkg
ZmluYWw7Ci0gICAgICAgIHZvaWQgcmVzZXRDb21wbGV0ZWQoKSBmaW5hbDsKLSAgICAgICAgdm9p
ZCBjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVSYW5n
ZU9mZnNldCA9IHN0ZDo6bnVsbG9wdCk7Ci0KICAgICBwcml2YXRlOgorICAgICAgICB3ZWJtOjpT
dGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1l
dGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBNZWRpYVRpbWUmLCBpbnQpIGZpbmFsOworICAgICAg
ICB2b2lkIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKSBmaW5hbDsKICAgICAgICAgY29uc3Qg
Y2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgeyByZXR1cm4gIkF1ZGlvVHJhY2tEYXRhIjsgfQog
Ci0gICAgICAgIENNVGltZSBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWU7Ci0gICAgICAgIENNVGlt
ZSBtX3BhY2tldER1cmF0aW9uOwotICAgICAgICBzaXplX3QgbV9jdXJyZW50UGFja2V0Qnl0ZU9m
ZnNldCB7IDAgfTsKKyAgICAgICAgTWVkaWFUaW1lIG1fcGFja2V0RHVyYXRpb247CiAgICAgICAg
IHVpbnQ4X3QgbV9mcmFtZXNQZXJQYWNrZXQgeyAwIH07CiAgICAgICAgIFNlY29uZHMgbV9mcmFt
ZUR1cmF0aW9uIHsgMF9zIH07Ci0gICAgICAgIFZlY3RvcjxzaXplX3Q+IG1fcGFja2V0U2l6ZXM7
Ci0gICAgICAgIFZlY3RvcjxDTVNhbXBsZVRpbWluZ0luZm8+IG1fcGFja2V0VGltaW5nczsKICAg
ICAgICAgc2l6ZV90IG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2sgeyAwIH07Ci0gICAgICAgIC8v
IEZJWE1FOiAwLjUgLSAxLjAgc2Vjb25kcyBpcyBhIGJldHRlciBkdXJhdGlvbiBwZXIgc2FtcGxl
IGJ1ZmZlciwgYnV0IHVzZSAyIHNlY29uZHMgc28gYXQgbGVhc3QgdGhlIGZpcnN0Ci0gICAgICAg
IC8vIHNhbXBsZSBidWZmZXIgd2lsbCBwbGF5IHVudGlsIHdlIGZpeCBNZWRpYVNhbXBsZUN1cnNv
cjo6Y3JlYXRlU2FtcGxlQnVmZmVyIHRvIGRlYWwgd2l0aCBgZW5kQ3Vyc29yYC4KLSAgICAgICAg
ZmxvYXQgbV9taW5pbXVtU2FtcGxlRHVyYXRpb24geyAyIH07CiAgICAgfTsKIAotICAgIGNvbnN0
IExvZ2dlciogbG9nZ2VyUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KLSAg
ICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dJZGVudGlm
aWVyOyB9Ci0KIHByaXZhdGU6Ci0KICAgICBUcmFja0RhdGEqIHRyYWNrRGF0YUZvclRyYWNrTnVt
YmVyKHVpbnQ2NF90KTsKLQogICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkVmlkZW9Db2RlYyhT
dHJpbmdWaWV3KTsKICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEF1ZGlvQ29kZWMoU3RyaW5n
Vmlldyk7CiAKQEAgLTI2OCw3ICsyNjAsNyBAQCBwcml2YXRlOgogICAgIHdlYm06OlN0YXR1cyBP
bkJsb2NrR3JvdXBFbmQoY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgY29uc3Qgd2VibTo6
QmxvY2tHcm91cCYpOwogICAgIHdlYm06OlN0YXR1cyBPbkZyYW1lKGNvbnN0IHdlYm06OkZyYW1l
TWV0YWRhdGEmLCB3ZWJtOjpSZWFkZXIqLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpIGZpbmFs
OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEluaXRpYWxpemF0aW9uU2VnbWVudD4gbV9pbml0aWFs
aXphdGlvblNlZ21lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUJ1ZmZlclBhcnNlcjo6
SW5pdGlhbGl6YXRpb25TZWdtZW50PiBtX2luaXRpYWxpemF0aW9uU2VnbWVudDsKICAgICBWZWN0
b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBSZWY8U2hhcmVkQnVmZmVyPj4+IG1fa2V5SWRzOwogICAg
IHdlYm06OlN0YXR1cyBtX3N0YXR1czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8d2VibTo6V2VibVBh
cnNlcj4gbV9wYXJzZXI7CkBAIC0yODUsMTIgKzI3Nyw2OSBAQCBwcml2YXRlOgogICAgIHVzaW5n
IEJsb2NrVmFyaWFudCA9IHN0ZDo6dmFyaWFudDx3ZWJtOjpCbG9jaywgd2VibTo6U2ltcGxlQmxv
Y2s+OwogICAgIHN0ZDo6b3B0aW9uYWw8QmxvY2tWYXJpYW50PiBtX2N1cnJlbnRCbG9jazsKICAg
ICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBtX3Jld2luZFRvUG9zaXRpb247Ci0gICAgZmxvYXQg
bV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbiB7IDIgfTsKIAogICAgIFJlZlB0cjxjb25zdCBM
b2dnZXI+IG1fbG9nZ2VyOwogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxw
dHIgfTsKICAgICB1aW50NjRfdCBtX25leHRDaGlsZElkZW50aWZpZXIgeyAwIH07CisgICAgQ2Fs
bGJhY2smIG1fY2FsbGJhY2s7CisgICAgYm9vbCBtX2NyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMgeyBm
YWxzZSB9OworfTsKKworY2xhc3MgU291cmNlQnVmZmVyUGFyc2VyV2ViTSA6IHB1YmxpYyBTb3Vy
Y2VCdWZmZXJQYXJzZXIsIFdlYk1QYXJzZXI6OkNhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBpc1dlYk1Gb3JtYXRSZWFkZXJB
dmFpbGFibGUoKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIGlz
Q29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUmKTsKKyAgICBzdGF0aWMgU3Bh
bjxjb25zdCBBU0NJSUxpdGVyYWw+IHN1cHBvcnRlZE1JTUVUeXBlcygpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2ViTT4gY3JlYXRlKGNvbnN0
IENvbnRlbnRUeXBlJik7CisKKyAgICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCk7CisgICAgflNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0oKSA9IGRlZmF1bHQ7CisKKyAgICBzdGF0aWMgYm9vbCBpc0F2
YWlsYWJsZSgpOworCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gVHlwZTo6V2ViTTsg
fQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwZW5kRGF0YShTZWdtZW50JiYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiA9IFtdIHsgfSwgQXBwZW5kRmxhZ3MgPSBBcHBlbmRGbGFnczo6
Tm9uZSkgZmluYWw7CisgICAgdm9pZCBmbHVzaFBlbmRpbmdNZWRpYURhdGEoKSBmaW5hbDsKKyAg
ICB2b2lkIHNldFNob3VsZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEKGJvb2wsIHVpbnQ2NF90
KSBmaW5hbDsKKyAgICBib29sIHNob3VsZFByb3ZpZGVNZWRpYWRhdGFGb3JUcmFja0lEKHVpbnQ2
NF90KSBmaW5hbDsKKyAgICB2b2lkIHJlc2V0UGFyc2VyU3RhdGUoKSBmaW5hbCB7IG1fcGFyc2Vy
LnJlc2V0U3RhdGUoKTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZSgpIGZpbmFsOworCisgICAgdXNp
bmcgRGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQodWludDY0X3Qg
dHJhY2tJRCwgY29uc3QgTWVkaWFUaW1lJiBkaXNjYXJkUGFkZGluZyk+OworICAgIHZvaWQgc2V0
RGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayhEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNr
JiYgY2FsbGJhY2spCisgICAgeworICAgICAgICBtX2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoUGVuZGluZ0F1
ZGlvU2FtcGxlcygpOworICAgIHZvaWQgc2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxv
YXQpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExvZ2dl
ciYsIGNvbnN0IHZvaWQqIGlkZW50aWZpZXIpIGZpbmFsOworICAgIGNvbnN0IExvZ2dlciogbG9n
Z2VyUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCB2b2lk
KiBsb2dJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9CisKK3By
aXZhdGU6CisgICAgLy8gV2ViTVBhcnNlcjo6Q2FsbGJhY2sKKyAgICB2b2lkIHBhcnNlZEluaXRp
YWxpemF0aW9uRGF0YShTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0aW9uU2VnbWVudCYm
KSBmaW5hbDsKKyAgICB2b2lkIHBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmKSBm
aW5hbDsKKyAgICBib29sIGNhbkRlY3J5cHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhIW1fZGlk
UHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRENhbGxi
YWNrOyB9CisgICAgdm9pZCBjb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRy
YWNrSUQoUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgdWludDY0X3QpIGZpbmFsOworICAgIHZvaWQgcGFy
c2VkVHJpbW1pbmdEYXRhKHVpbnQ2NF90LCBjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKKworICAg
IHZvaWQgcmV0dXJuU2FtcGxlcyhNZWRpYVNhbXBsZXNCbG9jayYmLCBDTUZvcm1hdERlc2NyaXB0
aW9uUmVmKTsKKwogICAgIERpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2sgbV9kaWRQYXJzZVRy
aW1taW5nRGF0YUNhbGxiYWNrOworICAgIFdlYk1QYXJzZXIgbV9wYXJzZXI7CisgICAgUmV0YWlu
UHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbjsKKyAg
ICBSZWZQdHI8Y29uc3QgVHJhY2tJbmZvPiBtX2F1ZGlvSW5mbzsKKyAgICBSZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uOworICAgIFJlZlB0
cjxjb25zdCBUcmFja0luZm8+IG1fdmlkZW9JbmZvOworICAgIE1lZGlhVGltZSBtX21pbmltdW1B
dWRpb1NhbXBsZUR1cmF0aW9uIHsgOTYwMDAsIDQ4MDAwIH07CisgICAgTWVkaWFTYW1wbGVzQmxv
Y2sgbV9xdWV1ZWRBdWRpb1NhbXBsZXM7CisgICAgTWVkaWFUaW1lIG1fcXVldWVkQXVkaW9EdXJh
dGlvbjsKKyAgICBSZWZQdHI8Y29uc3QgTG9nZ2VyPiBtX2xvZ2dlcjsKKyAgICBjb25zdCB2b2lk
KiBtX2xvZ0lkZW50aWZpZXIgeyBudWxscHRyIH07CiB9OwogCiB9CkBAIC0yOTksMTIgKzM0OCwx
MiBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBh
cnNlcldlYk0pCiAgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlciYgcGFyc2VyKSB7IHJldHVybiBwYXJzZXIudHlwZSgpID09IFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlclBhcnNlcjo6VHlwZTo6V2ViTTsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19F
TkQoKQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25z
dCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkg
eyByZXR1cm4gdHJhY2tEYXRhLnRyYWNrVHlwZSgpID09IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6VmlkZW87IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQkVHSU4oV2ViQ29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGEpCisgICAgc3RhdGlj
IGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNrRGF0YSYgdHJhY2tE
YXRhKSB7IHJldHVybiB0cmFja0RhdGEudHJhY2tUeXBlKCkgPT0gV2ViQ29yZTo6VHJhY2tJbmZv
OjpUcmFja1R5cGU6OlZpZGVvOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6QXVkaW9UcmFja0RhdGEpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YSYgdHJhY2tEYXRhKSB7IHJldHVybiB0
cmFja0RhdGEudHJhY2tUeXBlKCkgPT0gV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
VHJhY2tEYXRhOjpUeXBlOjpBdWRpbzsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5
cGUoY29uc3QgV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0
dXJuIHRyYWNrRGF0YS50cmFja1R5cGUoKSA9PSBXZWJDb3JlOjpUcmFja0luZm86OlRyYWNrVHlw
ZTo6QXVkaW87IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAogI2VuZGlmIC8vIEVO
QUJMRShNRURJQV9TT1VSQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaAppbmRleCA3NjM2MTY3MDg5MzBi
NGRkMzViMmJiYjI3YTA0YTZhMzU5ZDA3OTczLi4yM2Y2YTQ2MDYzZTNkMWQxYjFhNDNjYmI1MmM0
Yjk2YTBjMTAxODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmgKQEAgLTMwLDggKzMwLDYgQEAKICNp
bmNsdWRlICJWUDlVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3ZWJtL2RvbV90eXBlcy5oPgogCi10
eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERl
c2NyaXB0aW9uUmVmOwotCiBuYW1lc3BhY2UgdnA5X3BhcnNlciB7CiBjbGFzcyBWcDlIZWFkZXJQ
YXJzZXI7CiB9CkBAIC00MCw2ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0
IE1lZGlhQ2FwYWJpbGl0aWVzSW5mbzsKIHN0cnVjdCBWaWRlb0NvbmZpZ3VyYXRpb247CitzdHJ1
Y3QgVmlkZW9JbmZvOwogCiBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVyV2ViS2l0VlA5RGVj
b2RlcigpOwogV0VCQ09SRV9FWFBPUlQgdm9pZCByZWdpc3RlcldlYktpdFZQOERlY29kZXIoKTsK
QEAgLTUyLDcgKzUxLDcgQEAgc3RkOjpvcHRpb25hbDxNZWRpYUNhcGFiaWxpdGllc0luZm8+IHZh
bGlkYXRlVlBQYXJhbWV0ZXJzKGNvbnN0IFZQQ29kZWNDb25maWd1cmEKIHN0ZDo6b3B0aW9uYWw8
TWVkaWFDYXBhYmlsaXRpZXNJbmZvPiBjb21wdXRlVlBQYXJhbWV0ZXJzKGNvbnN0IFZpZGVvQ29u
ZmlndXJhdGlvbiYpOwogYm9vbCBpc1ZQU29mdHdhcmVEZWNvZGVyU21vb3RoKGNvbnN0IFZpZGVv
Q29uZmlndXJhdGlvbiYpOwogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3Jl
YXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6
OlZwOUhlYWRlclBhcnNlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOwor
UmVmPFZpZGVvSW5mbz4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2
cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXImLCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNv
bG91cj4mKTsKIAogc3RydWN0IFZQOEZyYW1lSGVhZGVyIHsKICAgICBib29sIGtleWZyYW1lIHsg
ZmFsc2UgfTsKQEAgLTY3LDggKzY2LDggQEAgc3RydWN0IFZQOEZyYW1lSGVhZGVyIHsKICAgICBi
b29sIG5lZWRzQ2xhbXBpbmcgeyBmYWxzZSB9OwogfTsKIAotc3RkOjpvcHRpb25hbDxWUDhGcmFt
ZUhlYWRlcj4gcGFyc2VWUDhGcmFtZUhlYWRlcih1aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBm
cmFtZVNpemUpOwotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1h
dERlc2NyaXB0aW9uRnJvbVZQOEhlYWRlcihjb25zdCBWUDhGcmFtZUhlYWRlciYsIGNvbnN0IHdl
Ym06OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOworc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRl
cj4gcGFyc2VWUDhGcmFtZUhlYWRlcihjb25zdCB1aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBm
cmFtZVNpemUpOworUmVmPFZpZGVvSW5mbz4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQOEhlYWRlcihj
b25zdCBWUDhGcmFtZUhlYWRlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYp
OwogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBWUDlUZXN0aW5nT3ZlcnJpZGVzIHsKIHB1YmxpYzoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0
aWxpdGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
VlA5VXRpbGl0aWVzQ29jb2EubW0KaW5kZXggY2IyYzk3ZmIwMDYyYTBhNmFhNzhhNTYxZDI5MGNj
Y2JkMGUxZTgwOS4uODQyMjEwYjM3MTI3ZmU4ZWVlZTlhY2MyM2NjYzk2YzA0ZDhjNTdhMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0
aWVzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
VlA5VXRpbGl0aWVzQ29jb2EubW0KQEAgLTMxLDExICszMSwxMiBAQAogI2ltcG9ydCAiRm91ckND
LmgiCiAjaW1wb3J0ICJMaWJXZWJSVENQcm92aWRlci5oIgogI2ltcG9ydCAiTWVkaWFDYXBhYmls
aXRpZXNJbmZvLmgiCisjaW1wb3J0ICJNZWRpYVNhbXBsZS5oIgogI2ltcG9ydCAiUGxhdGZvcm1T
Y3JlZW4uaCIKICNpbXBvcnQgIlNjcmVlblByb3BlcnRpZXMuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1
ZmZlci5oIgogI2ltcG9ydCAiU3lzdGVtQmF0dGVyeS5oIgogI2ltcG9ydCAiVmlkZW9Db25maWd1
cmF0aW9uLmgiCi0jaW1wb3J0IDxDb3JlTWVkaWEvQ01Gb3JtYXREZXNjcmlwdGlvbi5oPgogI2lt
cG9ydCA8SmF2YVNjcmlwdENvcmUvRGF0YVZpZXcuaD4KICNpbXBvcnQgPHdlYm0vdnA5X2hlYWRl
cl9wYXJzZXIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24u
aD4KQEAgLTM2MCwyNSArMzYxLDM1IEBAIHN0YXRpYyB1aW50OF90IGNvbnZlcnRUb0NvbG9yUHJp
bWFyaWVzKGNvbnN0IFByaW1hcmllcyYgY29lZmZpY2llbnRzKQogICAgIH0KIH0KIAotc3RhdGlj
IENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXModWludDhfdCBwcmltYXJpZXMp
CitzdGF0aWMgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzIGNvbnZlcnRUb1BsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllcyh1aW50OF90IHByaW1hcmllcykKIHsKICAgICBzd2l0Y2ggKHByaW1h
cmllcykgewogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzcwOV82
OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19JVFVfUl83MDlf
MjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEz
X0U6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0VCVV8zMjEz
OworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpCdDcwOTsKKyAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF80NzBfNl9NOgorICAgICAg
ICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpCdDQ3MG07CisgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNDcwXzdfQkc6CisgICAgICAgIHJldHVy
biBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0NDcwYmc7CiAgICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNjAxXzc6CisgICAgICAgIHJldHVybiBQbGF0Zm9y
bVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlMTcwbTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlv
bkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF8yNDA6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1
ZmZlckNvbG9yUHJpbWFyaWVzX1NNUFRFX0M7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVv
Q29sb3JQcmltYXJpZXM6OlNtcHRlMjQwbTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpGaWxtOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFy
aWVzOjpGaWxtOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzIw
MjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0Nv
bG9yUHJpbWFyaWVzOjpCdDIwMjA7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1h
cmllczo6U01QVEVfU1RfNDI4XzE6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQ
cmltYXJpZXM6OlNtcHRlU3Q0MjgxOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmlt
YXJpZXM6OlNNUFRFX1JQXzQzMV8yOgotICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNj
cmlwdGlvbkNvbG9yUHJpbWFyaWVzX0RDSV9QMzsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6U21wdGVScDQzMTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNv
bG9yUHJpbWFyaWVzOjpTTVBURV9FR180MzJfMToKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9y
bWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19QM19ENjU7Ci0gICAgY2FzZSBWUENvbmZpZ3Vy
YXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6Ci0gICAg
ICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfSVRVX1Jf
MjAyMDsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGVF
ZzQzMjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8z
MjEzX0U6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkplZGVj
UDIyUGhvc3Bob3JzOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlVu
c3BlY2lmaWVkOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29s
b3JQcmltYXJpZXM6OlVuc3BlY2lmaWVkOwogICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwog
fQogCiBzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyhjb25z
dCBUcmFuc2ZlckNoYXJhY3RlcmlzdGljcyYgY2hhcmFjdGVyaXN0aWNzKQpAQCAtNDIxLDI5ICs0
MzIsNDUgQEAgc3RhdGljIHVpbnQ4X3QgY29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3Mo
Y29uc3QgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MmIGMKICAgICB9CiB9CiAKLXN0YXRpYyBDRlN0
cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24odWludDhfdCBjaGFyYWN0ZXJpc3Rp
Y3MpCitzdGF0aWMgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzIGNvbnZlcnRU
b1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyh1aW50OF90IGNoYXJhY3Rlcmlz
dGljcykKIHsKICAgICBzd2l0Y2ggKGNoYXJhY3RlcmlzdGljcykgewogICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzcwOV82OgotICAgICAgICByZXR1
cm4ga0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzcwOV8yOworICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDcwOTsKKyAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF80NzBfNl9NOgor
ICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpHYW1t
YTIyY3VydmU7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6QlRfNDcwXzdfQkc6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkdhbW1hMjhjdXJ2ZTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF82MDFfNzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlk
ZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGUxNzBtOwogICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzI0MDoKLSAgICAgICAgcmV0
dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9TTVBURV8yNDBNXzE5OTU7Ci0gICAg
Y2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjA4
NDoKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0
aW9uX1NNUFRFX1NUXzIwODRfUFE7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlMjQwbTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRy
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZp
ZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVhcjsKKyAgICBjYXNlIFZQQ29uZmlndXJh
dGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dyaXRobWljOgorICAgICAgICByZXR1cm4g
UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2c7CisgICAgY2FzZSBWUENv
bmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TG9ncml0aG1pY19TcXJ0OgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dTcXJ0
OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182
MTk2Nl8yXzQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OkllYzYxOTY2MjQ7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6QlRfMTM2MV8wOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDEzNjFFeHRlbmRlZENvbG91ckdhbXV0OworICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE6Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYx
OTY2MjE7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
QlRfMjAyMF8xMGJpdDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6QnQyMDIwXzEwYml0OwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ6Ci0gICAgICAgIHJldHVybiBQQUw6OmtD
TUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMDIwOworICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTJiaXQ7
CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVf
U1RfMjA4NDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6U21wdGVTdDIwODQ7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6U01QVEVfU1RfNDI4XzE6Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1h
dERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF80MjhfMTsKKyAgICAgICAgcmV0
dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGVTdDQyODE7CiAg
ICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjEwMF9I
TEc6Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5j
dGlvbl9JVFVfUl8yMTAwX0hMRzsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOgotICAgICAgICByZXR1cm4gUEFMOjpjYW5Mb2Fk
X0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpID8g
UEFMOjpnZXRfQ29yZU1lZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9z
UkdCKCkgOiBudWxscHRyOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OkxpbmVhcjoKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRp
b25UcmFuc2ZlckZ1bmN0aW9uX0xpbmVhcjsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QXJpYlN0ZEI2N0hsZzsKKyAgICBjYXNlIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpVbnNwZWNpZmllZDoKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpV
bnNwZWNpZmllZDsKICAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIHVp
bnQ4X3QgY29udmVydFRvTWF0cml4Q29lZmZpY2llbnRzKGNvbnN0IE1hdHJpeENvZWZmaWNpZW50
cyYgY29lZmZpY2llbnRzKQpAQCAtNDcyLDIxICs0OTksMzEgQEAgc3RhdGljIHVpbnQ4X3QgY29u
dmVydFRvTWF0cml4Q29lZmZpY2llbnRzKGNvbnN0IE1hdHJpeENvZWZmaWNpZW50cyYgY29lZmZp
Y2llbnQKICAgICB9CiB9CiAKLXN0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTVlDYkNSTWF0
cml4KHVpbnQ4X3QgY29lZmZpY2llbnRzKQorc3RhdGljIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2Vm
ZmljaWVudHMgY29udmVydFRvUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cyh1aW50OF90
IGNvZWZmaWNpZW50cykKIHsKICAgICBzd2l0Y2ggKGNvZWZmaWNpZW50cykgewotICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1
bWluYW5jZToKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25ZQ2JDck1h
dHJpeF9JVFVfUl8yMDIwOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2ll
bnRzOjpJZGVudGl0eToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmlj
aWVudHM6OlJnYjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6
QlRfNzA5XzY6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRz
OjpCdDcwOTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6RkND
OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6RmNjOwog
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF80NzBfN19CRzoK
KyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0NDcwYmc7
CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzYwMV83Ogot
ICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl82MDFfNDsKLSAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNzA5XzY6Ci0gICAg
ICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzcwOV8yOworICAgICAg
ICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6U21wdGUxNzBtOwogICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpTTVBURV9TVF8yNDA6Ci0g
ICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NTsK
KyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlNtcHRlMjQw
bTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6WUNnQ286Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpZQ2dDbzsKKyAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAyMF9Ob25jb25z
dGFudF9MdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZp
Y2llbnRzOjpCdDIwMjBOb25jb25zdGFudEx1bWluYW5jZTsKKyAgICBjYXNlIFZQQ29uZmlndXJh
dGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAyMF9Db25zdGFudF9MdW1pbmFuY2U6CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDIwMjBDb25zdGFu
dEx1bWluYW5jZTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6
VW5zcGVjaWZpZWQ6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9N
YXRyaXhDb2VmZmljaWVudHM6OlVuc3BlY2lmaWVkOwogICAgIH0KLQotICAgIHJldHVybiBudWxs
cHRyOwogfQogCiBzdGF0aWMgdWludDhfdCBjb252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vi
c2FtcGxpbmcodWludDY0X3QgeCwgdWludDY0X3QgeSkKQEAgLTUwMSw3ICs1MzgsNyBAQCBzdGF0
aWMgdWludDhfdCBjb252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2FtcGxpbmcodWludDY0
X3QgeCwgdWludDY0X3QgeSkKICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hyb21hU3Vic2Ft
cGxpbmc6OlN1YnNhbXBsaW5nXzQyMF9Db2xvY2F0ZWQ7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8
Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2Rl
Y0NvbmZpZ3VyYXRpb25SZWNvcmQoY29uc3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIHJl
Y29yZCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQpCitzdGF0aWMgUmVmPFZpZGVvSW5m
bz4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkKGNvbnN0IFZQ
Q29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiByZWNvcmQsIGludDMyX3Qgd2lkdGgsIGludDMyX3Qg
aGVpZ2h0KQogewogICAgIC8vIFJlZjogIlZQIENvZGVjIElTTyBNZWRpYSBGaWxlIEZvcm1hdCBC
aW5kaW5nLCB2MS4wLCAyMDE3LTAzLTMxIgogICAgIC8vIDxodHRwczovL3d3dy53ZWJtcHJvamVj
dC5vcmcvdnA5L21wNC8+CkBAIC01MzAsMTIgKzU2NywxNCBAQCBzdGF0aWMgUmV0YWluUHRyPENN
Rm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29kZWND
b25maQogICAgIC8vIEZJWE1FOiBDb252ZXJ0IGV4aXN0aW5nIHN0cnVjdCB0byBhbiBJU09Cb3gg
YW5kIHJlcGxhY2UgdGhlIHdyaXRpbmcgY29kZSBiZWxvdwogICAgIC8vIHdpdGggYSBzdWJjbGFz
cyBvZiBJU09GdWxsQm94LgogCisgICAgYXV0byB2aWRlb0luZm8gPSBWaWRlb0luZm86OmNyZWF0
ZSgpOworICAgIHZpZGVvSW5mby0+c2l6ZSA9IHZpZGVvSW5mby0+ZGlzcGxheVNpemUgPSB7IGZs
b2F0KHdpZHRoKSwgZmxvYXQoaGVpZ2h0KSB9OworCiAgICAgY29uc3RleHByIHNpemVfdCBWUENv
ZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRzU2l6ZSA9IDEyOwogCiAgICAgdWludDMyX3QgdmVyc2lv
bkFuZEZsYWdzID0gMSA8PCAyNDsKICAgICB1aW50OF90IGJpdERlcHRoQ2hyb21hQW5kUmFuZ2Ug
PSAoMHhGICYgcmVjb3JkLmJpdERlcHRoKSA8PCA0IHwgKDB4NyAmIHJlY29yZC5jaHJvbWFTdWJz
YW1wbGluZykgPDwgMSB8ICgweDEgJiByZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnKTsKICAgICB1
aW50MTZfdCBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZSA9IDA7Ci0KICAgICBhdXRvIHZpZXcg
PSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShWUENvZGVjQ29uZmln
dXJhdGlvbkNvbnRlbnRzU2l6ZSwgMSksIDAsIFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNT
aXplKTsKICAgICB2aWV3LT5zZXQoMCwgdmVyc2lvbkFuZEZsYWdzLCBmYWxzZSk7CiAgICAgdmll
dy0+c2V0KDQsIHJlY29yZC5wcm9maWxlLCBmYWxzZSk7CkBAIC01NDUsNDYgKzU4NCwxNiBAQCBz
dGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2Ny
aXB0aW9uRnJvbVZQQ29kZWNDb25maQogICAgIHZpZXctPnNldCg4LCByZWNvcmQudHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3MsIGZhbHNlKTsKICAgICB2aWV3LT5zZXQoOSwgcmVjb3JkLm1hdHJpeENv
ZWZmaWNpZW50cywgZmFsc2UpOwogICAgIHZpZXctPnNldCgxMCwgY29kZWNJbnRpYWxpemF0aW9u
RGF0YVNpemUsIGZhbHNlKTsKLQotICAgIGF1dG8gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBVSW50OCAqKXZpZXctPmRhdGEoKSwgdmlldy0+
Ynl0ZUxlbmd0aCgpKSk7Ci0KLSAgICBDRlR5cGVSZWYgY29uZmlndXJhdGlvbktleXNbXSA9IHsg
Q0ZTVFIoInZwY0MiKSB9OwotICAgIENGVHlwZVJlZiBjb25maWd1cmF0aW9uVmFsdWVzW10gPSB7
IGRhdGEuZ2V0KCkgfTsKLSAgICBhdXRvIGNvbmZpZ3VyYXRpb25EaWN0ID0gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29uZmlndXJhdGlvbktleXMsIGNv
bmZpZ3VyYXRpb25WYWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoY29uZmlndXJhdGlvbktleXMpLCAm
a0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2Fs
bEJhY2tzKSk7Ci0KLSAgICBWZWN0b3I8Q0ZUeXBlUmVmPiBleHRlbnNpb25zS2V5cyB7IFBBTDo6
a0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fU2FtcGxlRGVzY3JpcHRpb25FeHRlbnNpb25B
dG9tcyB9OwotICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNWYWx1ZXMgPSB7IGNvbmZp
Z3VyYXRpb25EaWN0LmdldCgpIH07Ci0KLSAgICBpZiAocmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxh
ZyA9PSBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlKSB7Ci0gICAgICAgIGV4dGVuc2lv
bnNLZXlzLmFwcGVuZChQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uRXh0ZW5zaW9uX0Z1bGxSYW5n
ZVZpZGVvKTsKLSAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoa0NGQm9vbGVhblRydWUp
OwotICAgIH0KLQotICAgIGlmIChhdXRvIGNtQ29sb3JQcmltYXJpZXMgPSBjb252ZXJ0VG9DTUNv
bG9yUHJpbWFyaWVzKHJlY29yZC5jb2xvclByaW1hcmllcykpIHsKLSAgICAgICAgZXh0ZW5zaW9u
c0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNLZXkpOwotICAgICAgICBl
eHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbUNvbG9yUHJpbWFyaWVzKTsKLSAgICB9Ci0KLSAgICBp
ZiAoYXV0byBjbVRyYW5zZmVyRnVuY3Rpb24gPSBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24o
cmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKSkgewotICAgICAgICBleHRlbnNpb25zS2V5
cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1bmN0aW9uS2V5KTsKLSAgICAgICAgZXh0
ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21UcmFuc2ZlckZ1bmN0aW9uKTsKLSAgICB9Ci0KLSAgICBp
ZiAoYXV0byBjbU1hdHJpeCA9IGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgocmVjb3JkLm1hdHJpeENv
ZWZmaWNpZW50cykpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVm
ZmVyWUNiQ3JNYXRyaXhLZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbU1h
dHJpeCk7Ci0gICAgfQotCi0gICAgYXV0byBleHRlbnNpb25zID0gYWRvcHRDRihDRkRpY3Rpb25h
cnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXh0ZW5zaW9uc0tleXMuZGF0YSgpLCBleHRl
bnNpb25zVmFsdWVzLmRhdGEoKSwgZXh0ZW5zaW9uc0tleXMuc2l6ZSgpLCAma0NGVHlwZURpY3Rp
b25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0K
LSAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxs
cHRyOwotICAgIENNVmlkZW9Db2RlY1R5cGUgY29kZWMgPSByZWNvcmQuY29kZWNOYW1lID09ICJ2
cDA5IiA/IGtDTVZpZGVvQ29kZWNUeXBlX1ZQOSA6ICd2cDA4JzsKLSAgICBpZiAobm9FcnIgIT0g
Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvZGVj
LCB3aWR0aCwgaGVpZ2h0LCBleHRlbnNpb25zLmdldCgpLCAmZm9ybWF0RGVzY3JpcHRpb24pKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYWRvcHRDRihmb3JtYXREZXNjcmlw
dGlvbik7CisgICAgdmlkZW9JbmZvLT5hdG9tRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0
YXRpY19jYXN0PHVpbnQ4X3QqPih2aWV3LT5kYXRhKCkpLCB2aWV3LT5ieXRlTGVuZ3RoKCkpOwor
ICAgIHZpZGVvSW5mby0+Y29sb3JTcGFjZS5mdWxsUmFuZ2UgPSByZWNvcmQudmlkZW9GdWxsUmFu
Z2VGbGFnID09IFZQQ29uZmlndXJhdGlvblJhbmdlOjpGdWxsUmFuZ2U7CisgICAgdmlkZW9JbmZv
LT5jb2xvclNwYWNlLnByaW1hcmllcyA9IGNvbnZlcnRUb1BsYXRmb3JtVmlkZW9Db2xvclByaW1h
cmllcyhyZWNvcmQuY29sb3JQcmltYXJpZXMpOworICAgIHZpZGVvSW5mby0+Y29sb3JTcGFjZS50
cmFuc2ZlciA9IGNvbnZlcnRUb1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyhy
ZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MpOworICAgIHZpZGVvSW5mby0+Y29sb3JTcGFj
ZS5tYXRyaXggPSBjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzKHJlY29y
ZC5tYXRyaXhDb2VmZmljaWVudHMpOworICAgIHZpZGVvSW5mby0+Y29kZWNOYW1lID0gcmVjb3Jk
LmNvZGVjTmFtZSA9PSAidnAwOSIgPyAndnAwOScgOiAndnAwOCc7CisgICAgcmV0dXJuIHZpZGVv
SW5mbzsKIH0KIAotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1h
dERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFk
ZXJQYXJzZXImIHBhcnNlciwgY29uc3Qgd2VibTo6RWxlbWVudDxDb2xvdXI+JiBjb2xvcikKK1Jl
ZjxWaWRlb0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zyb21WUDlIZWFkZXJQYXJzZXIoY29uc3QgdnA5
X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyJiBwYXJzZXIsIGNvbnN0IHdlYm06OkVsZW1lbnQ8Q29s
b3VyPiYgY29sb3IpCiB7CiAgICAgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgcmVjb3JkOwog
CkBAIC02MTYsMTAgKzYyNSwxMCBAQCBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4g
Y3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbgogICAgICAgICAg
ICAgcmVjb3JkLmNvbG9yUHJpbWFyaWVzID0gY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29sb3JW
YWx1ZS5wcmltYXJpZXMudmFsdWUoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUZvcm1h
dERlc2NyaXB0aW9uRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkKHJlY29yZCwgcGFyc2Vy
LndpZHRoKCksIHBhcnNlci5oZWlnaHQoKSk7CisgICAgcmV0dXJuIGNyZWF0ZVZpZGVvSW5mb0Zy
b21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChyZWNvcmQsIHBhcnNlci53aWR0aCgpLCBwYXJz
ZXIuaGVpZ2h0KCkpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQ
OEZyYW1lSGVhZGVyKHVpbnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSkKK3N0ZDo6
b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIoY29uc3QgdWludDhf
dCogZnJhbWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKQogewogICAgIC8vIFZQOCBmcmFtZSBoZWFk
ZXJzIGFyZSBkZWZpbmVkIGluIFJGQyA2Mzg2OiA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1s
L3JmYzYzODY+LgogCkBAIC02ODEsNyArNjkwLDcgQEAgc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhl
YWRlcj4gcGFyc2VWUDhGcmFtZUhlYWRlcih1aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmEK
ICAgICByZXR1cm4gaGVhZGVyOwogfQogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJl
Zj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA4SGVhZGVyKGNvbnN0IFZQOEZyYW1lSGVh
ZGVyJiBoZWFkZXIsIGNvbnN0IHdlYm06OkVsZW1lbnQ8Q29sb3VyPiYgY29sb3IpCitSZWY8Vmlk
ZW9JbmZvPiBjcmVhdGVWaWRlb0luZm9Gcm9tVlA4SGVhZGVyKGNvbnN0IFZQOEZyYW1lSGVhZGVy
JiBoZWFkZXIsIGNvbnN0IHdlYm06OkVsZW1lbnQ8Q29sb3VyPiYgY29sb3IpCiB7CiAgICAgVlBD
b2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgcmVjb3JkOwogICAgIHJlY29yZC5jb2RlY05hbWUgPSAi
dnAwOCI7CkBAIC03MTEsNyArNzIwLDcgQEAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25S
ZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOEhlYWRlcihjb25zdCBWUDgKICAgICAg
ICAgICAgIHJlY29yZC5jb2xvclByaW1hcmllcyA9IGNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKGNv
bG9yVmFsdWUucHJpbWFyaWVzLnZhbHVlKCkpOwogICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVG
b3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChyZWNvcmQsIGhl
YWRlci53aWR0aCwgaGVhZGVyLmhlaWdodCk7CisgICAgcmV0dXJuIGNyZWF0ZVZpZGVvSW5mb0Zy
b21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChyZWNvcmQsIGhlYWRlci53aWR0aCwgaGVhZGVy
LmhlaWdodCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oCmluZGV4IDg3
MTA0ZDhiN2IzNTdjMTYwYjZkY2NjNDFiZmUxZjg5ZTBhNmMyNzEuLmE5ODA5OGM1YTM5ZmNiNDUw
YjJmZjljNzYxMGQ5NzRlODI0NmQ0ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2Eu
aApAQCAtMjcsMTYgKzI3LDE3IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKIAotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIGNsYXNzIEF1ZGlv
U3RyZWFtRGVzY3JpcHRpb247Ci10eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERl
c2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0aW9uUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK3N0cnVjdCBBdWRpb0luZm87CisKIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNWb3JiaXNEZWNv
ZGVyQXZhaWxhYmxlKCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIHJlZ2lzdGVyVm9yYmlzRGVjb2Rl
cklmTmVlZGVkKCk7Ci1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlVm9y
YmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXplX3QsIGNvbnN0IHZvaWQqKTsKK1JlZlB0cjxB
dWRpb0luZm8+IGNyZWF0ZVZvcmJpc0F1ZGlvSW5mbyhzaXplX3QsIGNvbnN0IHZvaWQqKTsKIAog
c3RydWN0IE9wdXNDb29raWVDb250ZW50cyB7CiAgICAgdWludDhfdCB2ZXJzaW9uIHsgMCB9OwpA
QCAtNTUsOCArNTYsMTAgQEAgc3RydWN0IE9wdXNDb29raWVDb250ZW50cyB7CiAKIFdFQkNPUkVf
RVhQT1JUIGJvb2wgaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpOwogV0VCQ09SRV9FWFBPUlQgYm9v
bCByZWdpc3Rlck9wdXNEZWNvZGVySWZOZWVkZWQoKTsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IGtPcHVzSGVhZGVyU2l6ZSA9IDE5Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga09wdXNNaW5p
bXVtRnJhbWVEYXRhU2l6ZSA9IDI7CiBib29sIHBhcnNlT3B1c1ByaXZhdGVEYXRhKHNpemVfdCBw
cml2YXRlRGF0YVNpemUsIGNvbnN0IHZvaWQqIHByaXZhdGVEYXRhLCBzaXplX3QgZnJhbWVEYXRh
U2l6ZSwgY29uc3Qgdm9pZCogZnJhbWVEYXRhLCBPcHVzQ29va2llQ29udGVudHMmKTsKLVJldGFp
blB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlw
dGlvbihjb25zdCBPcHVzQ29va2llQ29udGVudHMmKTsKK1JlZlB0cjxBdWRpb0luZm8+IGNyZWF0
ZU9wdXNBdWRpb0luZm8oY29uc3QgT3B1c0Nvb2tpZUNvbnRlbnRzJik7CiAKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRp
bGl0aWVzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9X
ZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbQppbmRleCA3ZTBhZmIyOTBkZDg1YTc3ZjliZWZmZjQ5
NDdhNDdiNzUzNWViMmY0Li42NjA5ZjRhZWI2N2EyZGY2NDFmMDcyZTU4MTYwZjlhZjVkMzZkZjY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJN
QXVkaW9VdGlsaXRpZXNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbQpAQCAtMzAsMTIgKzMwLDEzIEBA
CiAKICNpbXBvcnQgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2ltcG9ydCAiTG9nZ2lu
Zy5oIgorI2ltcG9ydCAiTWVkaWFTYW1wbGUuaCIKICNpbXBvcnQgIk1lZGlhVXRpbGl0aWVzLmgi
CiAjaW1wb3J0ICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbXBvcnQgIlNoYXJl
ZEJ1ZmZlci5oIgogI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvQ29kZWMuaD4KICNpbXBvcnQg
PEF1ZGlvVG9vbGJveC9BdWRpb0NvbXBvbmVudC5oPgogI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1
ZGlvRm9ybWF0Lmg+Ci0jaW1wb3J0IDxDb3JlTWVkaWEvQ01Gb3JtYXREZXNjcmlwdGlvbi5oPgog
I2ltcG9ydCA8ZGxmY24uaD4KICNpbXBvcnQgPHd0Zi9GbGlwQnl0ZXMuaD4KICNpbXBvcnQgPHd0
Zi9TZWNvbmRzLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHN0YXRpYyBib29sIHJlZ2lzdGVyRGVjb2Rl
ckZhY3RvcnkoY29uc3QgY2hhciogZGVjb2Rlck5hbWUsIE9TVHlwZSBkZWNvZGVyVHlwZSkKICNl
bmRpZgogfQogCi1zdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0
ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQoT1NUeXBlIGZvcm1hdElELCBWZWN0b3I8
dWludDhfdD4mJiBtYWdpY0Nvb2tpZSkKK3N0YXRpYyBSZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVB
dWRpb0luZm9Gb3JGb3JtYXQoT1NUeXBlIGZvcm1hdElELCBWZWN0b3I8dWludDhfdD4mJiBtYWdp
Y0Nvb2tpZSkKIHsKICAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gYXNiZCB7IH07CiAg
ICAgYXNiZC5tRm9ybWF0SUQgPSBmb3JtYXRJRDsKQEAgLTg3LDggKzg4LDE2IEBAIHN0YXRpYyBS
ZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlw
dGlvbkZvckZvcm1hdChPCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIHJl
dHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKENBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bihhc2JkKSwgbWFnaWNDb29raWUuc2l6ZSgpLCBtYWdpY0Nvb2tpZS5kYXRhKCkpOworICAgIGF1
dG8gYXVkaW9JbmZvID0gQXVkaW9JbmZvOjpjcmVhdGUoKTsKKyAgICBhdWRpb0luZm8tPmNvZGVj
TmFtZSA9IGZvcm1hdElEOworICAgIGF1ZGlvSW5mby0+cmF0ZSA9IGFzYmQubVNhbXBsZVJhdGU7
CisgICAgYXVkaW9JbmZvLT5jaGFubmVscyA9IGFzYmQubUNoYW5uZWxzUGVyRnJhbWU7CisgICAg
YXVkaW9JbmZvLT5mcmFtZXNQZXJQYWNrZXQgPSBhc2JkLm1GcmFtZXNQZXJQYWNrZXQ7CisgICAg
YXVkaW9JbmZvLT5iaXREZXB0aCA9IDE2OworICAgIGF1ZGlvSW5mby0+Y29va2llRGF0YSA9IFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUobWFnaWNDb29raWUpKTsKKyAgICByZXR1cm4gYXVk
aW9JbmZvOwogfQorCiAjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCiAK
ICNpZiBFTkFCTEUoT1BVUykKQEAgLTIwMCw3ICsyMDksNyBAQCBib29sIHBhcnNlT3B1c1ByaXZh
dGVEYXRhKHNpemVfdCBjb2RlY1ByaXZhdGVTaXplLCBjb25zdCB2b2lkKiBjb2RlY1ByaXZhdGVE
YXRhLAogCiAgICAgYXV0byogcHJpdmF0ZURhdGFQdHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4oY29kZWNQcml2YXRlRGF0YSk7CiAKLSAgICBpZiAoY29kZWNQcml2YXRlU2l6ZSA8IDE5
KQorICAgIGlmIChjb2RlY1ByaXZhdGVTaXplIDwga09wdXNIZWFkZXJTaXplKQogICAgICAgICBy
ZXR1cm4geyB9OwogCiAgICAgLy8gMS4gTWFnaWMgU2lnbmF0dXJlOgpAQCAtMzYyLDcgKzM3MSw3
IEBAIGJvb2wgcmVnaXN0ZXJPcHVzRGVjb2RlcklmTmVlZGVkKCkKICNlbmRpZgogfQogCi1SZXRh
aW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlT3B1c0F1ZGlvRm9ybWF0RGVzY3Jp
cHRpb24oY29uc3QgT3B1c0Nvb2tpZUNvbnRlbnRzJiBjb29raWVDb250ZW50cykKK1JlZlB0cjxB
dWRpb0luZm8+IGNyZWF0ZU9wdXNBdWRpb0luZm8oY29uc3QgT3B1c0Nvb2tpZUNvbnRlbnRzJiBj
b29raWVDb250ZW50cykKIHsKICNpZiBFTkFCTEUoT1BVUykKICAgICBpZiAoIWlzT3B1c0RlY29k
ZXJBdmFpbGFibGUoKSkKQEAgLTM3Miw3ICszODEsNyBAQCBSZXRhaW5QdHI8Q01Gb3JtYXREZXNj
cmlwdGlvblJlZj4gY3JlYXRlT3B1c0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgT3B1c0Nv
bwogICAgIGlmICghY29va2llRGF0YS5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQoJ29wdXMn
LCBXVEZNb3ZlKGNvb2tpZURhdGEpKTsKKyAgICByZXR1cm4gY3JlYXRlQXVkaW9JbmZvRm9yRm9y
bWF0KCdvcHVzJywgV1RGTW92ZShjb29raWVEYXRhKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShjb29raWVDb250ZW50cyk7CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC00NjUsNyArNDc0LDcg
QEAgYm9vbCByZWdpc3RlclZvcmJpc0RlY29kZXJJZk5lZWRlZCgpCiAjZW5kaWYKIH0KIAotUmV0
YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVz
Y3JpcHRpb24oc2l6ZV90IHByaXZhdGVEYXRhU2l6ZSwgY29uc3Qgdm9pZCogcHJpdmF0ZURhdGEp
CitSZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVWb3JiaXNBdWRpb0luZm8oc2l6ZV90IHByaXZhdGVE
YXRhU2l6ZSwgY29uc3Qgdm9pZCogcHJpdmF0ZURhdGEpCiB7CiAjaWYgRU5BQkxFKFZPUkJJUykK
ICAgICBpZiAoIWlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQpAQCAtNDc1LDcgKzQ4NCw3IEBA
IFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVWb3JiaXNBdWRpb0Zvcm1h
dERlc2NyaXB0aW9uKHNpemVfdCBwcml2CiAgICAgaWYgKCFjb29raWVEYXRhLnNpemUoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNj
cmlwdGlvbkZvckZvcm1hdCgndm9yYicsIFdURk1vdmUoY29va2llRGF0YSkpOworICAgIHJldHVy
biBjcmVhdGVBdWRpb0luZm9Gb3JGb3JtYXQoJ3ZvcmInLCBXVEZNb3ZlKGNvb2tpZURhdGEpKTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHByaXZhdGVEYXRhU2l6ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHByaXZhdGVEYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmgKaW5kZXgg
ZmY4YzFhOGI0ODFkN2YzM2NjMjQ3YjY0ZGYxYjhmYWM3MGNiZGRkMi4uYmU0YTBmZTNjM2M5OTdh
OGRiZTEyZmI2ZjRmZjlkMWFlYzhhZGRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVh
bWVyLmgKQEAgLTU3LDEzICs1NywxMCBAQCBwdWJsaWM6CiAgICAgRmxvYXRTaXplIHByZXNlbnRh
dGlvblNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ByZXNlbnRhdGlvblNpemU7IH0K
ICAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1l
Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0RpdmlzYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgc3RkOjpwYWlyPFJlZlB0cjxNZWRpYVNhbXBsZT4sIFJlZlB0cjxN
ZWRpYVNhbXBsZT4+IGRpdmlkZShjb25zdCBNZWRpYVRpbWUmLCBVc2VFbmRUaW1lKSBvdmVycmlk
ZSAgeyByZXR1cm4geyBudWxscHRyLCBudWxscHRyIH07IH0KICAgICBSZWY8TWVkaWFTYW1wbGU+
IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgU2FtcGxlRmxh
Z3MgZmxhZ3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2ZsYWdzOyB9CiAgICAgUGxhdGZv
cm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBQbGF0Zm9ybVNh
bXBsZTo6VHlwZSBwbGF0Zm9ybVNhbXBsZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQ
bGF0Zm9ybVNhbXBsZTo6R1N0cmVhbWVyU2FtcGxlVHlwZTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8
Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGQ6Om51bGxv
cHQ7IH0KICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKICAgICBS
ZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gZ2V0UkdCQUltYWdlRGF0YSgpIGNvbnN0IGZp
bmFsOwogICAgIFZpZGVvUm90YXRpb24gdmlkZW9Sb3RhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fdmlkZW9Sb3RhdGlvbjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2
YXRlLmNwcAppbmRleCAwYTk0YWNmMWExZTEzNjZmNmE1NzI1ODhiNzcwNDFlNGMzYzY0NzMyLi5k
NGNmZTQxOGQ1YzYxMjA2NTdkZTBkMGJjMDIwMzZmYjEwYTgyMGZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2
YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01v
Y2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcApAQCAtNjIsMTMgKzYyLDEwIEBAIHByaXZhdGU6CiAg
ICAgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBvdmVycmlkZTsKICAgICBQbGF0Zm9ybVNhbXBs
ZSBwbGF0Zm9ybVNhbXBsZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFBsYXRmb3JtU2FtcGxlOjpU
eXBlIHBsYXRmb3JtU2FtcGxlVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRmb3Jt
U2FtcGxlOjpNb2NrU2FtcGxlQm94VHlwZTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdl
PiBieXRlUmFuZ2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAg
ICBGbG9hdFNpemUgcHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZs
b2F0U2l6ZSgpOyB9CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdm9pZCBvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJiBvZmZzZXQpIG92
ZXJyaWRlIHsgbV9ib3gub2Zmc2V0VGltZXN0YW1wc0J5KG9mZnNldCk7IH0KICAgICB2b2lkIHNl
dFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lc3RhbXAsIGNvbnN0
IE1lZGlhVGltZSYgZGVjb2RlVGltZXN0YW1wKSBvdmVycmlkZSB7IG1fYm94LnNldFRpbWVzdGFt
cHMocHJlc2VudGF0aW9uVGltZXN0YW1wLCBkZWNvZGVUaW1lc3RhbXApOyB9Ci0gICAgYm9vbCBp
c0RpdmlzYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgc3RkOjpw
YWlyPFJlZlB0cjxNZWRpYVNhbXBsZT4sIFJlZlB0cjxNZWRpYVNhbXBsZT4+IGRpdmlkZShjb25z
dCBNZWRpYVRpbWUmLCBVc2VFbmRUaW1lKSBvdmVycmlkZSB7IHJldHVybiB7bnVsbHB0ciwgbnVs
bHB0cn07IH0KICAgICBSZWY8TWVkaWFTYW1wbGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICB1bnNpZ25lZCBnZW5lcmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9ib3guZ2VuZXJhdGlvbigpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcApp
bmRleCAxYzMzOGM2YTNlOGNiZWZiNGM2ZTRiYWY1MDIxYjE1NTI1NDhmYmZiLi4wYzJlNWRhZDlj
NmY4NzdmZjNlNjI4ODkyZWYzOTA5MmJmMmQ4MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJl
YWRlci5jcHAKQEAgLTEzMiw0MCArMTMyLDEyIEBAIHZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OnBh
cnNlQnl0ZVNvdXJjZShSZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiYmIGJ5dGVTCiB7
CiAgICAgQVNTRVJUKGlzTWFpblJ1bkxvb3AoKSk7CiAKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Q29udGVudFR5cGU+IGNvbnRlbnRUeXBlKCJ2aWRlby93ZWJtIl9zKTsKLSAgICBhdXRvIHBh
cnNlciA9IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZShjb250ZW50VHlwZSk7Ci0gICAg
aWYgKCFwYXJzZXIpIHsKLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fcGFyc2VUcmFja3NMb2Nr
IH07Ci0gICAgICAgIG1fcGFyc2VUcmFja3NTdGF0dXMgPSBrTVRQbHVnaW5Gb3JtYXRSZWFkZXJF
cnJvcl9BbGxvY2F0aW9uRmFpbHVyZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGlm
ICghbV9sb2dnZXIpIHsKICAgICAgICAgbV9sb2dnZXIgPSAmRG9jdW1lbnQ6OnNoYXJlZExvZ2dl
cigpOwogICAgICAgICBtX2xvZ0lkZW50aWZpZXIgPSBuZXh0TG9nSWRlbnRpZmllcigpOwogICAg
IH0KIAogICAgIEFMV0FZU19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7Ci0gICAgcGFy
c2VyLT5zZXRMb2dnZXIoKm1fbG9nZ2VyLCBtX2xvZ0lkZW50aWZpZXIpOwotCi0gICAgLy8gU2V0
IGEgbWluaW11bSBhdWRpbyBzYW1wbGUgZHVyYXRpb24gb2YgMCBzbyB0aGUgcGFyc2VyIGNyZWF0
ZXMgaW5kaXZpc2libGUgc2FtcGxlcyB3aXRoIGJ5dGUgc291cmNlIHJhbmdlcy4KLSAgICBwYXJz
ZXItPnNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKDApOwotCi0gICAgcGFyc2VyLT5zZXRD
YWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbXShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24p
IHsKLSAgICAgICAgTWVkaWFUcmFja1JlYWRlcjo6c3RvcmFnZVF1ZXVlKCkuZGlzcGF0Y2goV1RG
TW92ZShmdW5jdGlvbikpOwotICAgIH0pOwotCi0gICAgcGFyc2VyLT5zZXREaWRQYXJzZUluaXRp
YWxpemF0aW9uRGF0YUNhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMg
fV0oU291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQmJiBpbml0aWFsaXph
dGlvblNlZ21lbnQpIHsKLSAgICAgICAgZGlkUGFyc2VUcmFja3MoV1RGTW92ZShpbml0aWFsaXph
dGlvblNlZ21lbnQpLCBub0Vycik7Ci0gICAgfSk7Ci0KLSAgICBwYXJzZXItPnNldERpZEVuY291
bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVm
IHsgKnRoaXMgfV0odWludDY0X3QgZXJyb3JDb2RlKSB7Ci0gICAgICAgIGRpZFBhcnNlVHJhY2tz
KHsgfSwgZXJyb3JDb2RlKTsKLSAgICB9KTsKLQotICAgIHBhcnNlci0+c2V0RGlkUHJvdmlkZU1l
ZGlhRGF0YUNhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfV0oUmVm
PE1lZGlhU2FtcGxlQVZGT2JqQz4mJiBtZWRpYVNhbXBsZSwgdWludDY0X3QgdHJhY2tJRCwgY29u
c3QgU3RyaW5nJiBtZWRpYVR5cGUpIHsKLSAgICAgICAgZGlkUHJvdmlkZU1lZGlhRGF0YShXVEZN
b3ZlKG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwgbWVkaWFUeXBlKTsKLSAgICB9KTsKIAogICAgIExv
Y2tlciBsb2NrZXIgeyBtX3BhcnNlVHJhY2tzTG9jayB9OwogICAgIG1fYnl0ZVNvdXJjZSA9IFdU
Rk1vdmUoYnl0ZVNvdXJjZSk7CkBAIC0xNzMsMTQgKzE0NSwzNCBAQCB2b2lkIE1lZGlhRm9ybWF0
UmVhZGVyOjpwYXJzZUJ5dGVTb3VyY2UoUmV0YWluUHRyPE1UUGx1Z2luQnl0ZVNvdXJjZVJlZj4m
JiBieXRlUwogICAgIG1fZHVyYXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAgICAg
bV90cmFja1JlYWRlcnMuY2xlYXIoKTsKIAotICAgIHJlYWRlclF1ZXVlKCkuZGlzcGF0Y2goW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBieXRlU291cmNlID0gbV9ieXRlU291
cmNlLCBwYXJzZXIgPSBwYXJzZXIucmVsZWFzZU5vbk51bGwoKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgcGFyc2VyLT5hcHBlbmREYXRhKFdURk1vdmUoYnl0ZVNvdXJjZSkpOwotICAgICAgICBNZWRp
YVRyYWNrUmVhZGVyOjpzdG9yYWdlUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFJlZiB7ICp0aGlzIH0sIHBhcnNlciA9IFdURk1vdmUocGFyc2VyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgICAgIGZpbmlzaFBhcnNpbmcoV1RGTW92ZShwYXJzZXIpKTsKKyAgICAvLyBUT0RP
OiB3aHkgZG8gd2UgbmVlZCBhIHN0b3JhZ2UgcXVldWUgZGlmZmVyZW50IHRvIHJlYWRlcidzIHF1
ZXVlPworICAgIHJlYWRlclF1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBS
ZWYgeyAqdGhpcyB9LCBieXRlU291cmNlID0gbV9ieXRlU291cmNlXSgpIG11dGFibGUgeworICAg
ICAgICBXZWJNUGFyc2VyIHBhcnNlcigqdGhpcyk7CisgICAgICAgIHBhcnNlci5zZXRMb2dnZXIo
Km1fbG9nZ2VyLCBtX2xvZ0lkZW50aWZpZXIpOworICAgICAgICBwYXJzZXIuY3JlYXRlQnl0ZVJh
bmdlU2FtcGxlcygpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNlci5wYXJzZShXVEZNb3Zl
KGJ5dGVTb3VyY2UpKTsKKyAgICAgICAgTWVkaWFUcmFja1JlYWRlcjo6c3RvcmFnZVF1ZXVlKCku
ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCByZXN1bHRdICgp
IG11dGFibGUgeworICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVz
dWx0LnJldHVyblZhbHVlKCkpCisgICAgICAgICAgICAgICAgZGlkUGFyc2VUcmFja3MoeyB9LCBy
ZXN1bHQucmV0dXJuVmFsdWUoKSk7CisgICAgICAgICAgICBmaW5pc2hQYXJzaW5nKCk7CiAgICAg
ICAgIH0pOwogICAgIH0pOwogfQogCit2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpwYXJzZWRJbml0
aWFsaXphdGlvbkRhdGEoU291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQm
JiBpbml0aWFsaXphdGlvblNlZ21lbnQpCit7CisgICAgTWVkaWFUcmFja1JlYWRlcjo6c3RvcmFn
ZVF1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBp
bml0aWFsaXphdGlvblNlZ21lbnQgPSBXVEZNb3ZlKGluaXRpYWxpemF0aW9uU2VnbWVudCldICgp
IG11dGFibGUgeworICAgICAgICBkaWRQYXJzZVRyYWNrcyhXVEZNb3ZlKGluaXRpYWxpemF0aW9u
U2VnbWVudCksIG5vRXJyKTsKKyAgICB9KTsKK30KKwordm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6
cGFyc2VkTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYgbWVkaWFTYW1wbGVzKQoreworICAg
IE1lZGlhVHJhY2tSZWFkZXI6OnN0b3JhZ2VRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgbWVkaWFTYW1wbGVzID0gV1RGTW92ZShtZWRpYVNhbXBs
ZXMpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgZGlkUHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKG1l
ZGlhU2FtcGxlcykpOworICAgIH0pOworfQorCiB2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpkaWRQ
YXJzZVRyYWNrcyhTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21l
bnQmJiBzZWdtZW50LCB1aW50NjRfdCBlcnJvckNvZGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5S
dW5Mb29wKCkpOwpAQCAtMjI1LDIwICsyMTcsMjAgQEAgdm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6
ZGlkUGFyc2VUcmFja3MoU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb24K
ICAgICBtX2luaXQgPSB0cnVlOwogfQogCi12b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpkaWRQcm92
aWRlTWVkaWFEYXRhKFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+JiYgbWVkaWFTYW1wbGUsIHVpbnQ2
NF90IHRyYWNrSUQsIGNvbnN0IFN0cmluZyYpCit2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpkaWRQ
cm92aWRlTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYgbWVkaWFTYW1wbGVzKQogewogICAg
IEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKIAogICAgIExvY2tlciBsb2NrZXIgeyBtX3BhcnNl
VHJhY2tzTG9jayB9OwogICAgIGF1dG8gdHJhY2tJbmRleCA9IG1fdHJhY2tSZWFkZXJzLmZpbmRJ
ZihbJl0oYXV0byYgdHJhY2spIHsKLSAgICAgICAgcmV0dXJuIHRyYWNrLT50cmFja0lEKCkgPT0g
dHJhY2tJRDsKKyAgICAgICAgcmV0dXJuIHRyYWNrLT50cmFja0lEKCkgPT0gbWVkaWFTYW1wbGVz
LmluZm8oKS0+dHJhY2tJRDsKICAgICB9KTsKIAogICAgIGlmICh0cmFja0luZGV4ICE9IG5vdEZv
dW5kKQotICAgICAgICBtX3RyYWNrUmVhZGVyc1t0cmFja0luZGV4XS0+YWRkU2FtcGxlKFdURk1v
dmUobWVkaWFTYW1wbGUpLCBtX2J5dGVTb3VyY2UuZ2V0KCkpOworICAgICAgICBtX3RyYWNrUmVh
ZGVyc1t0cmFja0luZGV4XS0+YWRkU2FtcGxlKFdURk1vdmUobWVkaWFTYW1wbGVzKSwgbV9ieXRl
U291cmNlLmdldCgpKTsKIH0KIAotdm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6ZmluaXNoUGFyc2lu
ZyhSZWY8U291cmNlQnVmZmVyUGFyc2VyPiYmIHBhcnNlcikKK3ZvaWQgTWVkaWFGb3JtYXRSZWFk
ZXI6OmZpbmlzaFBhcnNpbmcoKQogewogICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKICAg
ICBBTFdBWVNfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwpAQCAtMjU4LDExICsyNTAs
NiBAQCB2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpmaW5pc2hQYXJzaW5nKFJlZjxTb3VyY2VCdWZm
ZXJQYXJzZXI+JiYgcGFyc2VyKQogICAgICAgICBpZiAoZ3JlYXRlc3RQcmVzZW50YXRpb25UaW1l
LmlzVmFsaWQoKSkKICAgICAgICAgICAgIG1fZHVyYXRpb24gPSBncmVhdGVzdFByZXNlbnRhdGlv
blRpbWU7CiAgICAgfQotCi0gICAgcGFyc2VyLT5zZXREaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0
YUNhbGxiYWNrKG51bGxwdHIpOwotICAgIHBhcnNlci0+c2V0RGlkRW5jb3VudGVyRXJyb3JEdXJp
bmdQYXJzaW5nQ2FsbGJhY2sobnVsbHB0cik7Ci0gICAgcGFyc2VyLT5zZXREaWRQcm92aWRlTWVk
aWFEYXRhQ2FsbGJhY2sobnVsbHB0cik7Ci0gICAgcGFyc2VyLT5yZXNldFBhcnNlclN0YXRlKCk7
CiB9CiAKIE9TU3RhdHVzIE1lZGlhRm9ybWF0UmVhZGVyOjpjb3B5UHJvcGVydHkoQ0ZTdHJpbmdS
ZWYga2V5LCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIHZvaWQqIHZhbHVlQ29weSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZv
cm1hdFJlYWRlci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVy
L01lZGlhRm9ybWF0UmVhZGVyLmgKaW5kZXggMTVkNTU3MzYzMzgxNzQ2MGMyZTYyMDQ0MTkwMTAy
M2NmODZiNGE5My4uMWE0OGMxNjgwZTg3NWRjNjI1MjI4NzQxNWY1NDg4YzkyYzU4ODAyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlh
Rm9ybWF0UmVhZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0
UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUo
V0VCTV9GT1JNQVRfUkVBREVSKQogCiAjaW5jbHVkZSAiQ29yZU1lZGlhV3JhcHBlZC5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24u
aD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgpAQCAtMzYsMTUgKzM3LDE1IEBACiBERUNMQVJFX0NP
UkVfTUVESUFfVFJBSVRTKEZvcm1hdFJlYWRlcik7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNs
YXNzIE1lZGlhU2FtcGxlQVZGT2JqQzsKLWNsYXNzIFNvdXJjZUJ1ZmZlclBhcnNlcjsKK2NsYXNz
IE1lZGlhU2FtcGxlc0Jsb2NrOworY2xhc3MgV2ViTVBhcnNlcjsKIH0KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIE1lZGlhVHJhY2tSZWFkZXI7CiAKLWNsYXNzIE1lZGlhRm9ybWF0UmVh
ZGVyIGZpbmFsIDogcHVibGljIENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFGb3JtYXRSZWFkZXI+IHsK
K2NsYXNzIE1lZGlhRm9ybWF0UmVhZGVyIGZpbmFsIDogcHVibGljIENvcmVNZWRpYVdyYXBwZWQ8
TWVkaWFGb3JtYXRSZWFkZXI+ICwgcHVibGljIFdlYkNvcmU6OldlYk1QYXJzZXI6OkNhbGxiYWNr
IHsKIHB1YmxpYzoKICAgICB1c2luZyBDb3JlTWVkaWFXcmFwcGVkPE1lZGlhRm9ybWF0UmVhZGVy
Pjo6dW53cmFwOwogCkBAIC02NCwxMiArNjUsMTYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBl
eHBsaWNpdCBNZWRpYUZvcm1hdFJlYWRlcihBbGxvY2F0b3ImJik7CiAKKyAgICAvLyBXZWJNUGFy
c2VyOjpDYWxsYmFjaworICAgIHZvaWQgcGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYpIGZpbmFsOworICAg
IHZvaWQgcGFyc2VkTWVkaWFEYXRhKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrJiYpIGZpbmFs
OworCiAgICAgdm9pZCBwYXJzZUJ5dGVTb3VyY2UoUmV0YWluUHRyPE1UUGx1Z2luQnl0ZVNvdXJj
ZVJlZj4mJik7CiAgICAgdm9pZCBkaWRQYXJzZVRyYWNrcyhXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
cml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQmJiwgdWludDY0X3QgZXJyb3JDb2Rl
KTsKICAgICB2b2lkIGRpZFNlbGVjdFZpZGVvVHJhY2soV2ViQ29yZTo6VmlkZW9UcmFja1ByaXZh
dGUmLCBib29sKSB7IH0KICAgICB2b2lkIGRpZEVuYWJsZUF1ZGlvVHJhY2soV2ViQ29yZTo6QXVk
aW9UcmFja1ByaXZhdGUmLCBib29sKSB7IH0KLSAgICB2b2lkIGRpZFByb3ZpZGVNZWRpYURhdGEo
UmVmPFdlYkNvcmU6Ok1lZGlhU2FtcGxlQVZGT2JqQz4mJiwgdWludDY0X3QsIGNvbnN0IFN0cmlu
ZyYpOwotICAgIHZvaWQgZmluaXNoUGFyc2luZyhSZWY8V2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyPiYmKTsKKyAgICB2b2lkIGRpZFByb3ZpZGVNZWRpYURhdGEoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2smJik7CisgICAgdm9pZCBmaW5pc2hQYXJzaW5nKCk7CiAKICAgICAvLyBDTUJhc2VD
bGFzcwogICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IldlYktpdDo6TWVkaWFGb3JtYXRSZWFkZXIiX3M7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVC
eXRlUmFuZ2UuY3BwCmluZGV4IDc4ZjczMTM0Y2U2YTdhMjE0Y2RjOWRlMDVjNDc1MzcyZTE3Yzlh
M2QuLjc1NjI1MmM0MjFmNzc0MDJkY2FlMzM1YjYyYzk1N2NmMDJjMWE0NGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5
dGVSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcApAQCAtMzMsNTYgKzMzLDczIEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotTWVkaWFTYW1wbGVCeXRl
UmFuZ2U6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlKE1lZGlhU2FtcGxlJiBzYW1wbGUsIE1UUGx1Z2lu
Qnl0ZVNvdXJjZVJlZiBieXRlU291cmNlLCB1aW50NjRfdCB0cmFja0lEKQotICAgIDogTWVkaWFT
YW1wbGVBVkZPYmpDKG51bGxwdHIpCi0gICAgLCBtX3ByZXNlbnRhdGlvblRpbWUoc2FtcGxlLnBy
ZXNlbnRhdGlvblRpbWUoKSkKLSAgICAsIG1fZGVjb2RlVGltZShzYW1wbGUuZGVjb2RlVGltZSgp
KQotICAgICwgbV9kdXJhdGlvbihzYW1wbGUuZHVyYXRpb24oKSkKLSAgICAsIG1fYnl0ZVJhbmdl
KCpzYW1wbGUuYnl0ZVJhbmdlKCkpCi0gICAgLCBtX3RyYWNrSUQodHJhY2tJRCkKLSAgICAsIG1f
c2l6ZUluQnl0ZXMoc2FtcGxlLnNpemVJbkJ5dGVzKCkpCi0gICAgLCBtX3ByZXNlbnRhdGlvblNp
emUoc2FtcGxlLnByZXNlbnRhdGlvblNpemUoKSkKK01lZGlhU2FtcGxlQnl0ZVJhbmdlOjpNZWRp
YVNhbXBsZUJ5dGVSYW5nZShNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZSwgTVRQbHVnaW5CeXRl
U291cmNlUmVmIGJ5dGVTb3VyY2UpCisgICAgOiBtX2Jsb2NrKFdURk1vdmUoc2FtcGxlKSkKICAg
ICAsIG1fYnl0ZVNvdXJjZShieXRlU291cmNlKQotICAgICwgbV9mbGFncyhzYW1wbGUuZmxhZ3Mo
KSkKIHsKLSAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7Ci0gICAgQVNTRVJUKG1fZGVjb2Rl
VGltZSA9PSBtX3ByZXNlbnRhdGlvblRpbWUgfHwgbV9kZWNvZGVUaW1lID09IE1lZGlhVGltZTo6
aW52YWxpZFRpbWUoKSk7Ci0gICAgYXV0byBwbGF0Zm9ybVNhbXBsZSA9IHNhbXBsZS5wbGF0Zm9y
bVNhbXBsZSgpOwotICAgIHN3aXRjaCAocGxhdGZvcm1TYW1wbGUudHlwZSkgewotICAgIGNhc2Ug
UGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlwZToKLSAgICAgICAgbV9mb3JtYXREZXNj
cmlwdGlvbiA9IFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlwdGlvbihwbGF0Zm9y
bVNhbXBsZS5zYW1wbGUuY21TYW1wbGVCdWZmZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlOgotICAgICAgICBtX2Zvcm1hdERl
c2NyaXB0aW9uID0gcGxhdGZvcm1TYW1wbGUuc2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5zZWNvbmQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgQVNTRVJUKCFtX2Jsb2NrLmlzRW1wdHko
KSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8TWVkaWFTYW1wbGU6OkJ5dGVS
YW5nZT4obV9ibG9jay5sYXN0KCkuZGF0YSkpOwogfQogCiBBdG9tU3RyaW5nIE1lZGlhU2FtcGxl
Qnl0ZVJhbmdlOjp0cmFja0lEKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQXRvbVN0cmluZzo6bnVt
YmVyKG1fdHJhY2tJRCk7CisgICAgcmV0dXJuIEF0b21TdHJpbmc6Om51bWJlcihtX2Jsb2NrLmlu
Zm8oKS0+dHJhY2tJRCk7CiB9CiAKIFBsYXRmb3JtU2FtcGxlIE1lZGlhU2FtcGxlQnl0ZVJhbmdl
OjpwbGF0Zm9ybVNhbXBsZSgpIGNvbnN0CiB7CisgICAgQVNTRVJUKG1fYmxvY2suaW5mbygpKTsK
ICAgICByZXR1cm4gewogICAgICAgICBQbGF0Zm9ybVNhbXBsZTo6Qnl0ZVJhbmdlU2FtcGxlVHlw
ZSwKLSAgICAgICAgeyAuYnl0ZVJhbmdlU2FtcGxlID0gc3RkOjptYWtlX3BhaXIobV9ieXRlU291
cmNlLmdldCgpLCBtX2Zvcm1hdERlc2NyaXB0aW9uLmdldCgpKSB9LAorICAgICAgICB7IC5ieXRl
UmFuZ2VTYW1wbGUgPSBzdGQ6Om1ha2VfcGFpcihtX2J5dGVTb3VyY2UuZ2V0KCksIHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXIoKm1fYmxvY2suaW5mbygpKSkgfSwKICAgICB9OwogfQogCi12b2lkIE1l
ZGlhU2FtcGxlQnl0ZVJhbmdlOjpvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJiBv
ZmZzZXQpCitNZWRpYVRpbWUgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnByZXNlbnRhdGlvblRpbWUo
KSBjb25zdAogewotICAgIHNldFRpbWVzdGFtcHMocHJlc2VudGF0aW9uVGltZSgpICsgb2Zmc2V0
LCBkZWNvZGVUaW1lKCkgKyBvZmZzZXQpOworICAgIHJldHVybiBtX2Jsb2NrLmxhc3QoKS5wcmVz
ZW50YXRpb25UaW1lOwogfQogCi12b2lkIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpzZXRUaW1lc3Rh
bXBzKGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSwgY29uc3QgTWVkaWFUaW1lJiBk
ZWNvZGVUaW1lKQorTWVkaWFUaW1lIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpkZWNvZGVUaW1lKCkg
Y29uc3QKIHsKLSAgICBtX3ByZXNlbnRhdGlvblRpbWUgPSBwcmVzZW50YXRpb25UaW1lOwotICAg
IG1fZGVjb2RlVGltZSA9IGRlY29kZVRpbWU7CisgICAgcmV0dXJuIG1fYmxvY2subGFzdCgpLmRl
Y29kZVRpbWU7Cit9CisKK01lZGlhVGltZSBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6ZHVyYXRpb24o
KSBjb25zdAoreworICAgIHJldHVybiBtX2Jsb2NrLmxhc3QoKS5kdXJhdGlvbjsKK30KKworc2l6
ZV90IE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpzaXplSW5CeXRlcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHN0ZDo6Z2V0PE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2U+KG1fYmxvY2subGFzdCgpLmRhdGEp
LmJ5dGVMZW5ndGg7Cit9CisKK1dlYkNvcmU6OkZsb2F0U2l6ZSBNZWRpYVNhbXBsZUJ5dGVSYW5n
ZTo6cHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fYmxvY2suaXNWaWRlbygp
KQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Y29uc3QgVmlkZW9JbmZvPihtX2Jsb2NrLmluZm8o
KSktPmRpc3BsYXlTaXplOworICAgIHJldHVybiB7IH07Cit9CisKK01lZGlhU2FtcGxlQnl0ZVJh
bmdlOjpTYW1wbGVGbGFncyBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6ZmxhZ3MoKSBjb25zdAorewor
ICAgIHJldHVybiBTYW1wbGVGbGFncyh1aW50MzJfdChtX2Jsb2NrLmxhc3QoKS5mbGFncykgfCBN
ZWRpYVNhbXBsZTo6SGFzU3luY0luZm8pOworfQorCitzdGQ6Om9wdGlvbmFsPE1lZGlhU2FtcGxl
Qnl0ZVJhbmdlOjpCeXRlUmFuZ2U+IE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpieXRlUmFuZ2UoKSBj
b25zdAoreworICAgIHJldHVybiBzdGQ6OmdldDxNZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlPihtX2Js
b2NrLmxhc3QoKS5kYXRhKTsKK30KKwordm9pZCBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6b2Zmc2V0
VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3ZvaWQgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnNldFRpbWVzdGFtcHMoY29uc3Qg
TWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVS
YW5nZS5oCmluZGV4IGI2NmYzYTM1YTk2ZjdiNWQ1Zjk3YWJkNmVkYTAwMjYxNTgyNmUxZTIuLjIy
NWI5NDQyYTc5MjI0NmY0ZTdmODQ4MDZkYTEzYmE1M2IxYWRjYTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5n
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRp
YVNhbXBsZUJ5dGVSYW5nZS5oCkBAIC0yNyw0NyArMjcsMzcgQEAKIAogI2lmIEVOQUJMRShXRUJN
X0ZPUk1BVF9SRUFERVIpCiAKLSNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2FtcGxlQVZGT2JqQy5o
PgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvTWVkaWFUb29sYm94U1BJLmg+Ci0jaW5jbHVkZSA8
d3RmL01lZGlhVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL01lZGlhU2FtcGxlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBNZWRp
YVNhbXBsZUJ5dGVSYW5nZSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9i
akMgeworY2xhc3MgTWVkaWFTYW1wbGVCeXRlUmFuZ2UgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6
TWVkaWFTYW1wbGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVCeXRlUmFu
Z2U+IGNyZWF0ZShXZWJDb3JlOjpNZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3Vy
Y2VSZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKKyAgICBzdGF0aWMgUmVmPE1lZGlh
U2FtcGxlQnl0ZVJhbmdlPiBjcmVhdGUoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2smJiBzYW1w
bGUsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291cmNlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVCeXRlUmFuZ2Uoc2FtcGxlLCBieXRlU291cmNl
LCB0cmFja0lEKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhU2FtcGxlQnl0
ZVJhbmdlKFdURk1vdmUoc2FtcGxlKSwgYnl0ZVNvdXJjZSkpOwogICAgIH0KIAotICAgIE1lZGlh
VGltZSBwcmVzZW50YXRpb25UaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcmVzZW50YXRp
b25UaW1lOyB9Ci0gICAgTWVkaWFUaW1lIGRlY29kZVRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2RlY29kZVRpbWU7IH0KLSAgICBNZWRpYVRpbWUgZHVyYXRpb24oKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBwcmVz
ZW50YXRpb25TaXplKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcmVzZW50YXRpb25TaXplOyB9
Ci0gICAgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZsYWdzOyB9
Ci0gICAgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fYnl0ZVJhbmdlOyB9CisgICAgTWVkaWFUaW1lIHByZXNlbnRhdGlvblRpbWUoKSBj
b25zdCBmaW5hbDsKKyAgICBNZWRpYVRpbWUgZGVjb2RlVGltZSgpIGNvbnN0IGZpbmFsOworICAg
IE1lZGlhVGltZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFsOworICAgIHNpemVfdCBzaXplSW5CeXRl
cygpIGNvbnN0IGZpbmFsOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXpl
KCkgY29uc3QgZmluYWw7CisgICAgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbDsKKyAg
ICBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgZmluYWw7CiAKICAg
ICBBdG9tU3RyaW5nIHRyYWNrSUQoKSBjb25zdCBmaW5hbDsKICAgICBXZWJDb3JlOjpQbGF0Zm9y
bVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgpIGNvbnN0IGZpbmFsOwogICAgIFdlYkNvcmU6OlBsYXRm
b3JtU2FtcGxlOjpUeXBlIHBsYXRmb3JtU2FtcGxlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IFdlYkNvcmU6OlBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlOyB9CiAgICAgdm9p
ZCBvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJikgZmluYWw7CiAgICAgdm9pZCBz
ZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOwor
ICAgIFJlZjxNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkoKSBjb25zdCB7IHJl
dHVybiAqY29uc3RfY2FzdDxNZWRpYVNhbXBsZUJ5dGVSYW5nZSo+KHRoaXMpOyB9CiAKIHByaXZh
dGU6Ci0gICAgTWVkaWFTYW1wbGVCeXRlUmFuZ2UoTWVkaWFTYW1wbGUmLCBNVFBsdWdpbkJ5dGVT
b3VyY2VSZWYsIHVpbnQ2NF90IHRyYWNrSUQpOworICAgIE1lZGlhU2FtcGxlQnl0ZVJhbmdlKFdl
YkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrJiYsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZik7CiAKLSAg
ICBNZWRpYVRpbWUgbV9wcmVzZW50YXRpb25UaW1lOwotICAgIE1lZGlhVGltZSBtX2RlY29kZVRp
bWU7Ci0gICAgTWVkaWFUaW1lIG1fZHVyYXRpb247Ci0gICAgQnl0ZVJhbmdlIG1fYnl0ZVJhbmdl
OwotICAgIHVpbnQ2NF90IG1fdHJhY2tJRDsKLSAgICBzaXplX3QgbV9zaXplSW5CeXRlczsKLSAg
ICBXZWJDb3JlOjpGbG9hdFNpemUgbV9wcmVzZW50YXRpb25TaXplOworICAgIGNvbnN0IFdlYkNv
cmU6Ok1lZGlhU2FtcGxlc0Jsb2NrIG1fYmxvY2s7CiAgICAgUmV0YWluUHRyPE1UUGx1Z2luQnl0
ZVNvdXJjZVJlZj4gbV9ieXRlU291cmNlOwotICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0
aW9uUmVmPiBtX2Zvcm1hdERlc2NyaXB0aW9uOwotICAgIFNhbXBsZUZsYWdzIG1fZmxhZ3M7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3Bw
CmluZGV4IDZhYTAyM2M2NjU2MzQzMjViNzQ4YmIzZDc1NTg2MGQwOTQ3ZTBiNGUuLjRkOWQwOTY1
YmU0NDgwNDEwZTE2YjE3Y2U0ZjY1ZmZmMjRlNzhkYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxl
Q3Vyc29yLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIk1lZGlhVHJhY2tSZWFkZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NNVXRpbGl0aWVz
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNhbXBsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
U2FtcGxlTWFwLmg+CiAjaW5jbHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5k
YXRpb24uaD4KQEAgLTM2Nyw3ICszNjgsNyBAQCBPU1N0YXR1cyBNZWRpYVNhbXBsZUN1cnNvcjo6
Y29weUZvcm1hdERlc2NyaXB0aW9uKENNRm9ybWF0RGVzY3JpcHRpb25SZWYqIGZvcm1hdAogewog
ICAgIHJldHVybiBnZXRNZWRpYVNhbXBsZShbJl0oTWVkaWFTYW1wbGUmIHNhbXBsZSkgewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHNhbXBsZS5wbGF0
Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGUp
OwotICAgICAgICAqZm9ybWF0RGVzY3JpcHRpb25PdXQgPSByZXRhaW5QdHIoc2FtcGxlLnBsYXRm
b3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5zZWNvbmQpLmxlYWtSZWYoKTsKKyAg
ICAgICAgKmZvcm1hdERlc2NyaXB0aW9uT3V0ID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9t
VHJhY2tJbmZvKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5ieXRlUmFuZ2VTYW1wbGUu
c2Vjb25kKS5sZWFrUmVmKCk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVy
LmNwcAppbmRleCBmMDRjNTkwNmYxYTE2ZmIzZGY3OGJkNDM4MjhjMGRjNmQ4ZGViNjFhLi40NzI0
ZWM4ZGEzZmQyMzA3Y2I2NTc5ZWMwZTA1YTE0Njk5MDY2ZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJh
Y2tSZWFkZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVCeXRl
UmFuZ2UuaCIKICNpbmNsdWRlICJNZWRpYVNhbXBsZUN1cnNvci5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvQXVkaW9UcmFja1ByaXZhdGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NNVXRpbGl0aWVzLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9JbmJhbmRUZXh0VHJhY2tQcml2YXRlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9NZWRpYURlc2NyaXB0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TYW1wbGVNYXAu
aD4KQEAgLTk3LDE1ICs5OCwxNyBAQCBNZWRpYVRpbWUgTWVkaWFUcmFja1JlYWRlcjo6Z3JlYXRl
c3RQcmVzZW50YXRpb25UaW1lKCkgY29uc3QKICAgICByZXR1cm4gbGFzdFNhbXBsZS5wcmVzZW50
YXRpb25UaW1lKCkgKyBsYXN0U2FtcGxlLmR1cmF0aW9uKCk7CiB9CiAKLXZvaWQgTWVkaWFUcmFj
a1JlYWRlcjo6YWRkU2FtcGxlKFJlZjxNZWRpYVNhbXBsZT4mJiBzYW1wbGUsIE1UUGx1Z2luQnl0
ZVNvdXJjZVJlZiBieXRlU291cmNlKQordm9pZCBNZWRpYVRyYWNrUmVhZGVyOjphZGRTYW1wbGUo
TWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGUsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291
cmNlKQogewogICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKICAgICBMb2NrZXIgbG9ja2Vy
IHsgbV9zYW1wbGVTdG9yYWdlTG9jayB9OwogICAgIGlmICghbV9zYW1wbGVTdG9yYWdlKQogICAg
ICAgICBtX3NhbXBsZVN0b3JhZ2UgPSBtYWtlVW5pcXVlPFNhbXBsZVN0b3JhZ2U+KCk7CiAKLSAg
ICBBU1NFUlQoIXNhbXBsZS0+aXNEaXZpc2FibGUoKSAmJiBzYW1wbGUtPmJ5dGVSYW5nZSgpKTsK
LSAgICBhdXRvIHNhbXBsZVRvQWRkID0gTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmNyZWF0ZShzYW1w
bGUuZ2V0KCksIGJ5dGVTb3VyY2UsIG1fdHJhY2tJRCk7CisgICAgQVNTRVJUKCFzYW1wbGUuaXNF
bXB0eSgpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxNZWRpYVNhbXBsZTo6
Qnl0ZVJhbmdlPihzYW1wbGUubGFzdCgpLmRhdGEpKTsKKworICAgIGF1dG8gc2FtcGxlVG9BZGQg
PSBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6Y3JlYXRlKFdURk1vdmUoc2FtcGxlKSwgYnl0ZVNvdXJj
ZSk7CiAKICAgICAvLyBGSVhNRTogRXZlbiB0aG91Z2ggV2ViTSBtdXhlciBndWlkZWxpbmVzIHNh
eSB0aGlzIG11c3Qgbm90IGhhcHBlbiwgc29tZSB2aWRlbyB0cmFja3MgaGF2ZSB0d28KICAgICAv
LyBjb25zZWN1dGl2ZSBmcmFtZXMgd2l0aCB0aGUgc2FtZSBwcmVzZW50YXRpb24gdGltZS4gU2Ft
cGxlTWFwIHdpbGwgbm90IHN0b3JlIHRoZSBzZWNvbmQgZnJhbWUKQEAgLTE4NSw3ICsxODgsMTUg
QEAgT1NTdGF0dXMgTWVkaWFUcmFja1JlYWRlcjo6Y29weVByb3BlcnR5KENGU3RyaW5nUmVmIGtl
eSwgQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG8KIAogICAgIGlmIChDRkVxdWFsKGtleSwgUEFMOjpn
ZXRfTWVkaWFUb29sYm94X2tNVFBsdWdpblRyYWNrUmVhZGVyUHJvcGVydHlfRm9ybWF0RGVzY3Jp
cHRpb25BcnJheSgpKSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKGxhc3RTYW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2Ft
cGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlKTsKLSAgICAgICAgY29uc3Qgdm9pZCogZGVzY3JpcHRp
b25zWzFdID0geyBsYXN0U2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5nZVNh
bXBsZS5zZWNvbmQgfTsKKyAgICAgICAgY29uc3QgVHJhY2tJbmZvJiB0cmFja0luZm8gPSBsYXN0
U2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5zZWNvbmQ7Cisg
ICAgICAgIGlmICghbV90cmFja0luZm8pIHsKKyAgICAgICAgICAgIG1fdHJhY2tJbmZvID0gJmxh
c3RTYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29uZC5n
ZXQoKTsKKyAgICAgICAgICAgIG1fZm9ybWF0RGVzY3JpcHRpb24gPSBXZWJDb3JlOjpjcmVhdGVG
b3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8oKm1fdHJhY2tJbmZvKTsKKyAgICAgICAgfSBl
bHNlIGlmICgqbV90cmFja0luZm8gIT0gdHJhY2tJbmZvKSB7CisgICAgICAgICAgICBtX3RyYWNr
SW5mbyA9ICZ0cmFja0luZm87CisgICAgICAgICAgICBtX2Zvcm1hdERlc2NyaXB0aW9uID0gV2Vi
Q29yZTo6Y3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKCptX3RyYWNrSW5mbyk7
CisgICAgICAgIH0KKyAgICAgICAgY29uc3Qgdm9pZCogZGVzY3JpcHRpb25zWzFdID0geyBtX2Zv
cm1hdERlc2NyaXB0aW9uLmdldCgpIH07CiAgICAgICAgICpyZWludGVycHJldF9jYXN0PENGQXJy
YXlSZWYqPihjb3BpZWRWYWx1ZSkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGUoYWxsb2NhdG9yLCBk
ZXNjcmlwdGlvbnMsIDEsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKS5sZWFrUmVmKCk7CiAgICAg
ICAgIHJldHVybiBub0VycjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5oIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuaAppbmRleCAx
MjA1YmMyNmRhZmVlN2RkNGZkY2E3Yzg2NjM4MThmZDhmODk3NDJjLi5kZDI1ZmMzZGI3MmNlODZm
OGVlNzRlMWM0ZGNjOGQ5ZThjNDcyZjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmgKQEAg
LTQxLDcgKzQxLDcgQEAgY2xhc3MgV29ya1F1ZXVlOwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgQXVkaW9UcmFja1ByaXZhdGU7CiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOwotY2xh
c3MgTWVkaWFTYW1wbGU7CitjbGFzcyBNZWRpYVNhbXBsZXNCbG9jazsKIGNsYXNzIFRyYWNrUHJp
dmF0ZUJhc2U7CiBjbGFzcyBWaWRlb1RyYWNrUHJpdmF0ZTsKIH0KQEAgLTY1LDcgKzY1LDcgQEAg
cHVibGljOgogICAgIE1lZGlhVGltZSBncmVhdGVzdFByZXNlbnRhdGlvblRpbWUoKSBjb25zdDsK
IAogICAgIHZvaWQgc2V0RW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9pc0VuYWJsZWQgPSBlbmFi
bGVkID8gRW5hYmxlZDo6VHJ1ZSA6IEVuYWJsZWQ6OkZhbHNlOyB9Ci0gICAgdm9pZCBhZGRTYW1w
bGUoUmVmPFdlYkNvcmU6Ok1lZGlhU2FtcGxlPiYmLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYpOwor
ICAgIHZvaWQgYWRkU2FtcGxlKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrJiYsIE1UUGx1Z2lu
Qnl0ZVNvdXJjZVJlZik7CiAgICAgdm9pZCB3YWl0Rm9yU2FtcGxlKEZ1bmN0aW9uPGJvb2woV2Vi
Q29yZTo6U2FtcGxlTWFwJiwgYm9vbCk+JiYpIGNvbnN0OwogICAgIHZvaWQgZmluaXNoUGFyc2lu
ZygpOwogCkBAIC0xMTEsNiArMTExLDggQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxTYW1wbGVTdG9yYWdlPiBtX3NhbXBsZVN0b3JhZ2UgV1RGX0dVQVJERURfQllfTE9D
SyhtX3NhbXBsZVN0b3JhZ2VMb2NrKTsKICAgICBSZWY8Y29uc3QgTG9nZ2VyPiBtX2xvZ2dlcjsK
ICAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50aWZpZXI7CisgICAgUmV0YWluUHRyPENNRm9ybWF0
RGVzY3JpcHRpb25SZWY+IG1fZm9ybWF0RGVzY3JpcHRpb247CisgICAgUmVmUHRyPGNvbnN0IFdl
YkNvcmU6OlRyYWNrSW5mbz4gbV90cmFja0luZm87CiB9OwogCiBjb25zdGV4cHIgTWVkaWFUcmFj
a1JlYWRlcjo6V3JhcHBlckNsYXNzIE1lZGlhVHJhY2tSZWFkZXI6OndyYXBwZXJDbGFzcygpCmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzMxNjVh
MGM1OGQ1MjAyOTYwOWQwZDQxZWVlOGE2YWJhNjY4YjdjOS4uNWU0MzBmMmJjZGU4MDhkMDE0YWE0
Y2MyZTY3MTJhMDEzNTdhZGJjMyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIyLTAzLTA4ICBKZWFuLVl2ZXMgQXZl
bmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBNZWRpYUZvcm1hdFJlYWRlciBw
bHVnaW4gdXNlIFdlYk1QYXJzZXIgZGlyZWN0bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzU5NAorICAgICAgICByZGFyOi8vODk5NjAzMDcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAuY3BwOgorCisyMDIyLTAzLTA1ICBKZWFuLVl2
ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgU291cmNlQnVmZmVy
UGFyc2VyV2ViTSBhbmQgaGF2ZSBwbGF0Zm9ybSBhZ25vc3RpYyBXZWJNUGFyc2VyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc0NzIKKyAgICAgICAg
cmRhcjovL3Byb2JsZW0vODk4MTA5NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAu
Y3BwOiBVcGRhdGUgZm9sbG93aW5nIGJhc2UgY2xhc3MgZGVmaW5pdGlvbiBjaGFuZ2UuCisKIDIw
MjItMDItMjMgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgYWJpbGl0eSB0byBjb252ZXJ0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIgdG8gQ01CbG9ja0J1
ZmZlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBs
ZU1hcC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNw
cAppbmRleCA1YTY1MzU4MzAxNWQyODhkZWY0N2JjYjQ3OTJjMjRjOGQyZjlhN2VmLi5lZGVlMzEy
YmNlMjNjMWFmMDNiZTBhZjBiNjJiZDI2M2JmNTMwYzA1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNwcAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNwcApAQCAtNjQsMTUgKzY0LDEyIEBAIHB1
YmxpYzoKICAgICAgICAgbV9wcmVzZW50YXRpb25UaW1lID0gcHJlc2VudGF0aW9uVGltZTsKICAg
ICAgICAgbV9kZWNvZGVUaW1lID0gZGVjb2RlVGltZTsKICAgICB9OwotICAgIGJvb2wgaXNEaXZp
c2FibGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHN0ZDo6cGFpcjxSZWZQ
dHI8TWVkaWFTYW1wbGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFU
aW1lJiwgVXNlRW5kVGltZSkgZmluYWwgeyByZXR1cm4geyB9OyB9CiAgICAgUmVmPE1lZGlhU2Ft
cGxlPiBjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0IGZpbmFsIHsKICAgICAgICAgcmV0
dXJuIGNyZWF0ZShtX3ByZXNlbnRhdGlvblRpbWUsIG1fZGVjb2RlVGltZSwgbV9kdXJhdGlvbiwg
c3RhdGljX2Nhc3Q8U2FtcGxlRmxhZ3M+KG1fZmxhZ3MgfCBJc05vbkRpc3BsYXlpbmcpKTsKICAg
ICB9CiAgICAgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZsYWdz
OyB9CiAgICAgUGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiB7IFBsYXRmb3JtU2FtcGxlOjpOb25lLCB7IG51bGxwdHIgfSB9OyB9CiAgICAgUGxhdGZv
cm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
UGxhdGZvcm1TYW1wbGU6Ok5vbmU7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0
ZVJhbmdlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAKICAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbCB7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454106</attachid>
            <date>2022-03-08 05:12:09 -0800</date>
            <delta_ts>2022-03-08 05:15:43 -0800</delta_ts>
            <desc>Patch for review</desc>
            <filename>bug-237594-20220309001208.patch</filename>
            <type>text/plain</type>
            <size>53204</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwOTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQ1N2IwZjM4MGYyZGRl
YTE0YWI0M2E1MGQwYzA2ZDkyNzQ0MTBjYy4uNmFhMTUyMGM5ZmIzMWExZmRiMmRlNmQ3YzQwODc0
OTNiN2Q1NTNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIyLTAzLTA4ICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBNZWRpYUZvcm1h
dFJlYWRlciBwbHVnaW4gdXNlIFdlYk1QYXJzZXIgZGlyZWN0bHkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzU5NAorICAgICAgICByZGFyOi8vODk5
NjAzMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
b3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1w
bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpieXRlUmFuZ2UgY29uc3QpOiBI
YXZlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogcGxhdGZvcm0vVmlkZW9GcmFt
ZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vVmlkZW9GcmFtZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJBVkZPYmpDU2FtcGxlOjpieXRlUmFuZ2VGb3JB
dHRhY2htZW50IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaDogRXhwb3J0IHN5bWJvbHMuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpjcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uVHJhY2tFbnRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1l
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpwcm92aWRlTWVkaWFEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZE1lZGlhRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpyZXR1cm5TYW1w
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVu
ZGluZ0F1ZGlvU2FtcGxlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJh
Y2tEYXRhOjpjcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6ZHJhaW5QZW5kaW5nU2FtcGxlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHA6CisK
IDIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGlj
IFdlYk1QYXJzZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTExZDBhNTEwMjA3YTZkMmQ5ZjViMWYwMmNiYjc0OWUx
NTU1NDhhYS4uOGE1NjdmNzE3ZjQ2NjY0ZWFlNjZiZTMyNzlhNjFiYzFhZjQ0MDI2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0OSBAQAorMjAyMi0wMy0wOCAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFA
YXBwbGUuY29tPgorCisgICAgICAgIEhhdmUgTWVkaWFGb3JtYXRSZWFkZXIgcGx1Z2luIHVzZSBX
ZWJNUGFyc2VyIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzc1OTQKKyAgICAgICAgcmRhcjovLzg5OTYwMzA3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGlyZWN0bHkgYnVpbGQgdGhlIHNh
bXBsZSB0YWJsZXMgZnJvbSB0aGUgc2FtcGxlJ3Mgb2Zmc2V0L3NpemUgd2l0aG91dAorICAgICAg
ICBmaXJzdCBidWlsZCBNZWRpYVNhbXBsZUFWRk9iakMgb2JqZWN0cy4KKyAgICAgICAgVGhlIE1U
UGx1Z2luQnl0ZVNvdXJjZVJlZiBpbnRlcmZhY2UgdW5mb3J0dW5hdGVseSBkb2Vzbid0IGFsbG93
IHRvIHNraXAgYQorICAgICAgICBnaXZlbiBudW1iZXIgb2YgYnl0ZXMsIGFuZCB5b3UgbXVzdCBy
ZWFkIHRoZSBjb250ZW50IGludG8gYSBidWZmZXIgdG8gYmUKKyAgICAgICAgYWJsZSB0byBjb250
aW51ZSByZWFkaW5nIHRoZSByZXNvdXJjZS4KKyAgICAgICAgQXMgc3VjaCwgd2UgY29udGludWUg
dG8gaGF2ZSB0byBjcmVhdGUgU2hhcmVkQnVmZmVyIG9iamVjdHMgZm9yIGVhY2ggc2FtcGxlLgor
ICAgICAgICBIb3dldmVyLCB0aG9zZSBvYmplY3RzIGFyZSBub3cgbXVjaCBzaG9ydGVyIGxpdmVk
IGFuZCBub3QgZGlzcGF0Y2hlZCB0bworICAgICAgICBvdGhlciB3b3JrIHF1ZXVlcy4gQXMgc3Vj
aCwgdGhlIHBlYWsgbWVtb3J5IHVzYWdlIHdoZW4gcGxheWluZyBhIHdlYm0gaXMKKyAgICAgICAg
c2lnbmlmaWNhbnRseSBsb3dlciB0aGFuIGl0IHVzZWQgdG8gYmUuCisKKyAgICAgICAgKiBTaGFy
ZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TWVkaWFGb3JtYXRSZWFkZXI6OnBhcnNlQnl0ZVNvdXJjZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok1lZGlhRm9ybWF0UmVhZGVyOjpwYXJzZWRJbml0aWFsaXphdGlvbkRhdGEpOgorICAg
ICAgICAoV2ViS2l0OjpNZWRpYUZvcm1hdFJlYWRlcjo6cGFyc2VkTWVkaWFEYXRhKToKKyAgICAg
ICAgKFdlYktpdDo6TWVkaWFGb3JtYXRSZWFkZXI6OmRpZFByb3ZpZGVNZWRpYURhdGEpOgorICAg
ICAgICAoV2ViS2l0OjpNZWRpYUZvcm1hdFJlYWRlcjo6ZmluaXNoUGFyc2luZyk6CisgICAgICAg
ICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5oOgorICAg
ICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjp0cmFja0lEIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnBsYXRmb3JtU2FtcGxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnByZXNlbnRhdGlvblRpbWUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6ZGVjb2RlVGltZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpkdXJhdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpzaXplSW5CeXRlcyBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpwcmVzZW50YXRp
b25TaXplIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmZs
YWdzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmJ5dGVS
YW5nZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpvZmZz
ZXRUaW1lc3RhbXBzQnkpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6
c2V0VGltZXN0YW1wcyk6CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVNhbXBsZUJ5dGVSYW5nZS5oOgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRS
ZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBs
ZUN1cnNvcjo6Y29weUZvcm1hdERlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKiBTaGFyZWQv
bWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpNZWRpYVRyYWNrUmVhZGVyOjphZGRTYW1wbGUpOgorICAgICAgICAoV2ViS2l0OjpNZWRp
YVRyYWNrUmVhZGVyOjpjb3B5UHJvcGVydHkpOgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5oOgorCiAyMDIyLTAzLTA0ICBKZWFuLVl2ZXMg
QXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAgU3BsaXQgU291cmNlQnVmZmVyUGFy
c2VyV2ViTSBhbmQgaGF2ZSBwbGF0Zm9ybSBhZ25vc3RpYyBXZWJNUGFyc2VyCkBAIC02LDkgKzUy
LDE0IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKLSAgICAgICAg
KiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcDoK
LSAgICAgICAgKFdlYktpdDo6TWVkaWFTYW1wbGVCeXRlUmFuZ2U6Ok1lZGlhU2FtcGxlQnl0ZVJh
bmdlKToKLSAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxl
Qnl0ZVJhbmdlLmg6IE1lZGlhU2FtcGxlQnl0ZVJhbmdlLmgKKyAgICAgICAgKiBTaGFyZWQvbWFj
LworICAgICAgICBNZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHA6IHVu
Zm9ydHVuYXRlbHkgZG9lc24ndCBhbGxvdyB0byBza2lwIGEgZ2l2ZW4gbnVtYmVyCisgICAgICAg
IChXZWJLaXQKKyAgICAgICAgOjpNZWRpYVNhbXBsZUJ5dGVSYW5nZSB1bmZvcnR1bmF0ZWx5IGRv
ZXNuJ3QgYWxsb3cgdG8gc2tpcCBhIGdpdmVuIG51bWJlcgorICAgICAgICA6Ok1lZGlhU2FtcGxl
Qnl0ZVJhbmdlKTogdW5mb3J0dW5hdGVseSBkb2Vzbid0IGFsbG93IHRvIHNraXAgYSBnaXZlbiBu
dW1iZXIKKyAgICAgICAgKiBTaGFyZWQvbWFjLworICAgICAgICBNZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVNhbXBsZUJ5dGVSYW5nZS4gdW5mb3J0dW5hdGVseSBkb2Vzbid0IGFsbG93IHRvIHNraXAg
YSBnaXZlbiBudW1iZXIKKyAgICAgICAgaDogTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCB1bmZvcnR1
bmF0ZWx5IGRvZXNuJ3QgYWxsb3cgdG8gc2tpcCBhIGdpdmVuIG51bWJlcgogICAgICAgICBkaWRu
J3QgbmVlZCB0byBpbmhlcml0IGZyb20gTWVkaWFTYW1wbGVBVkZPYmpDLiAKIAogMjAyMi0wMy0w
OCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CkBAIC03OTQsNyArODQ1LDggQEAK
ICAgICAgICAgKiBTY3JpcHRzL3VwZGF0ZS1keWxkLWVudmlyb25tZW50LWxvYWQtY29tbWFuZDog
QWRkZWQuCiAgICAgICAgICogU2NyaXB0cy93ZWJraXRweTogQWRkZWQuCiAgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9tYWNoX28ucHk6IEFkZGVkLgotICAgICAgICAoX3V0ZjhfYnl0ZXNfdG9f
c3RyKToKKyAgICAgICAgCisgICAgICAgIChfdXRmOF9ieXRlc190b19zdHIpOiB1bmZvcnR1bmF0
ZWx5IGRvZXNuJ3QgYWxsb3cgdG8gc2tpcCBhIGdpdmVuIG51bWJlcgogICAgICAgICAoX21hY2hf
b19pbnRfZmllbGQpOgogICAgICAgICAoX21hY2hfb19pbnRfZmllbGQuX2dldF9tYWNoX29faW50
X2ZpZWxkKToKICAgICAgICAgKF9tYWNoX29faW50X2ZpZWxkLl9zZXRfbWFjaF9vX2ludF9maWVs
ZCk6CkBAIC04NDcsNyArODk5LDggQEAKICAgICAgICAgKE1hY2hPSGVhZGVyNjRMRS5fX2luaXRf
Xyk6CiAgICAgICAgIChNYWNoT0ZpbGUpOgogICAgICAgICAoTWFjaE9GaWxlLl9faW5pdF9fKToK
LSAgICAgICAgKGlzX21hY2hvX2J5dGVzKToKKyAgICAgICAgCisgICAgICAgIChpc19tYWNob19i
eXRlcyk6IHVuZm9ydHVuYXRlbHkgZG9lc24ndCBhbGxvdyB0byBza2lwIGEgZ2l2ZW4gbnVtYmVy
CiAgICAgICAgIChpc19tYWNob19maWxlKToKICAgICAgICAgKGVudW1lcmF0ZV9tYWNob19maWxl
cyk6CiAgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CkBAIC0yNTkx
LDcgKzI2NDQsOCBAQAogICAgICAgICBVcGRhdGUgY29kZSBiYXNlIHRvIHJlZmxlY3QgU2VyaWFs
aXplZFNjcmlwdFZhbHVlIEFQSSBjaGFuZ2VzLgogCiAgICAgICAgICogU2hhcmVkL0FQSS9BUElT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKLSAgICAgICAgKEFQSTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKToKKyAgICAgICAgKEFQSTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlCisgICAgICAgIDo6Y3JlYXRlRnJvbVdpcmVCeXRlcyk6IHVuZm9ydHVuYXRlbHkgZG9l
c24ndCBhbGxvdyB0byBza2lwIGEgZ2l2ZW4gbnVtYmVyCiAgICAgICAgIChBUEk6OlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6ZGF0YVJlZmVyZW5jZSBjb25zdCk6CiAgICAgICAgIChBUEk6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6YWRvcHQpOiBEZWxldGVkLgogICAgICAgICAqIFNoYXJlZC9TZXNz
aW9uU3RhdGUuY3BwOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVkaWFT
YW1wbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKaW5kZXggYTEy
ODI3M2E1NzZmODNiZmFlMTdiNTcyODA4MTUyNGY2ZGJhNTIzMy4uYWQ2Zjg1NmVkYWZkZmQ5MjE3
MzRkMzM3MTgxMDdjY2M3MzU4NjQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTWVkaWFTYW1wbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBs
ZS5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1WaWRlb0NvbG9yU3BhY2Uu
aCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9U
eXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0VudW1U
cmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CkBAIC00Nyw2ICs0OCw3IEBAIGNsYXNzIEZyYWdtZW50ZWRTaGFy
ZWRCdWZmZXI7CiBjbGFzcyBNb2NrU2FtcGxlQm94OwogY2xhc3MgUHJvY2Vzc0lkZW50aXR5Owog
Y2xhc3MgU2hhcmVkQnVmZmVyOworc3RydWN0IFRyYWNrSW5mbzsKIAogc3RydWN0IFBsYXRmb3Jt
U2FtcGxlIHsKICAgICBlbnVtIFR5cGUgewpAQCAtNjEsNyArNjMsNyBAQCBzdHJ1Y3QgUGxhdGZv
cm1TYW1wbGUgewogICAgICAgICBjb25zdCBNb2NrU2FtcGxlQm94KiBtb2NrU2FtcGxlQm94Owog
ICAgICAgICBDTVNhbXBsZUJ1ZmZlclJlZiBjbVNhbXBsZUJ1ZmZlcjsKICAgICAgICAgR3N0U2Ft
cGxlKiBnc3RTYW1wbGU7Ci0gICAgICAgIHN0ZDo6cGFpcjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWYs
IENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGJ5dGVSYW5nZVNhbXBsZTsKKyAgICAgICAgc3RkOjpw
YWlyPE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiwgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBU
cmFja0luZm8+PiBieXRlUmFuZ2VTYW1wbGU7CiAgICAgfSBzYW1wbGU7CiB9OwogCkBAIC0xMDcs
NyArMTA5LDcgQEAgcHVibGljOgogICAgICAgICBzaXplX3QgYnl0ZU9mZnNldCB7IDAgfTsKICAg
ICAgICAgc2l6ZV90IGJ5dGVMZW5ndGggeyAwIH07CiAgICAgfTsKLSAgICB2aXJ0dWFsIHN0ZDo6
b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBz
dGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgeyByZXR1cm4gc3RkOjpu
dWxsb3B0OyB9CiAKICAgICBlbnVtIGNsYXNzIFZpZGVvUm90YXRpb24gewogICAgICAgICBOb25l
ID0gMCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5jcHAKaW5kZXggYTIyMThjNWRk
NzQxZmZjNDY4ODU3NzFlZGQ1MTk0YmMzMTJhN2ZkYy4uMTRjYjcwZDE3MGEwNzIxYzE3ZWJmM2Yx
OGQ2ZDQ4NDE1N2Y3ODcxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlk
ZW9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5jcHAK
QEAgLTEwOCwxMyArMTA4LDYgQEAgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzIFZpZGVvRnJhbWU6
OmZsYWdzKCkgY29uc3QKICAgICByZXR1cm4gTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpOb25l
OwogfQogCi1zdGQ6Om9wdGlvbmFsPE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2U+IFZpZGVvRnJhbWU6
OmJ5dGVSYW5nZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFJlbW92ZSBmcm9tIHRoZSBiYXNl
IGNsYXNzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci19Ci0KIHZvaWQgVmlkZW9GcmFtZTo6ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0CiB7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmgKaW5kZXggMjI4NWU4YWM3YmYwMjE0MmY5
MmE5MWY3ODBlNzU5MTAyNDJhYTZiMS4uZDk2NzRjZTc0MDU0YmNkNzQ4OGVhZWRkMmYxMjgyMjI4
NDZiMWU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaApAQCAtNzQsNyArNzQs
NiBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VGltZXN0YW1wcyhjb25z
dCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9S
VCBSZWY8V2ViQ29yZTo6TWVkaWFTYW1wbGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29u
c3QgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBm
aW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJh
bmdlKCkgY29uc3QgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3QgZmluYWw7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VE
ZWNvZGVyQVZGT2JqQy5tbQppbmRleCBhZDdmNDUxMDFjMDZhMTg4OGMwMDhmYWVkNGE5MTkwNTYx
MzgyOTNiLi42MjBhM2JlNjJhYjg0NTBmN2UzODY0NDg0NmY3OTg5MTIzODgxZjExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9J
bWFnZURlY29kZXJBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KQEAgLTUzLDYgKzUz
LDcgQEAKICNpbXBvcnQgPHd0Zi9NZWRpYVRpbWUuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorI2ltcG9ydCA8d3RmL2NmL1R5cGVDYXN0
c0NGLmg+CiAKICNpbXBvcnQgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCiAjaW1wb3J0ICJWaWRlb1Rv
b2xib3hTb2Z0TGluay5oIgpAQCAtMjcyLDYgKzI3MywyNiBAQCBwcml2YXRlOgogICAgIHsKICAg
ICB9CiAKKyAgICBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlRm9yQXR0YWNobWVu
dChDRlN0cmluZ1JlZiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGJ5dGVPZmZzZXRD
RiA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oUEFMOjpDTUdldEF0dGFjaG1lbnQobV9z
YW1wbGUuZ2V0KCksIGtleSwgbnVsbHB0cikpOworICAgICAgICBpZiAoIWJ5dGVPZmZzZXRDRikK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAgICAgaW50NjRfdCBieXRl
T2Zmc2V0ID0gMDsKKyAgICAgICAgaWYgKCFDRk51bWJlckdldFZhbHVlKGJ5dGVPZmZzZXRDRiwg
a0NGTnVtYmVyU0ludDY0VHlwZSwgJmJ5dGVPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKworICAgICAgICBDTUl0ZW1Db3VudCBzaXplQXJyYXlFbnRyaWVzID0gMDsK
KyAgICAgICAgUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVNpemVBcnJheShtX3NhbXBsZS5n
ZXQoKSwgMCwgbnVsbHB0ciwgJnNpemVBcnJheUVudHJpZXMpOworICAgICAgICBpZiAoc2l6ZUFy
cmF5RW50cmllcyAhPSAxKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
ICAgICBzaXplX3Qgc2luZ2xlU2l6ZUVudHJ5ID0gMDsKKyAgICAgICAgUEFMOjpDTVNhbXBsZUJ1
ZmZlckdldFNhbXBsZVNpemVBcnJheShtX3NhbXBsZS5nZXQoKSwgMSwgJnNpbmdsZVNpemVFbnRy
eSwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiB7IHsgQ2hlY2tlZFNpemUoYnl0ZU9mZnNldCks
IHNpbmdsZVNpemVFbnRyeSB9IH07CisgICAgfQorCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IG1faW1hZ2U7CiAgICAgYm9vbCBtX2hhc0FscGhhIHsgZmFsc2UgfTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVNhbXBsZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oCmluZGV4IDAyNWQwZDM0NGYzYWVhNDI4
YTZlZDg3Njg2ODhjY2FiZmQzN2EzMmQuLjg3ZmFjODUxM2Y2NDVjYzBkMTI1ZmFhZjQzNmZjNjlj
YjAwZWY5MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5o
CkBAIC02NCw3ICs2NCw2IEBAIHB1YmxpYzoKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0
IG92ZXJyaWRlOwogICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgUGxhdGZvcm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlwZTsg
fQotICAgIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlk
ZTsKICAgICB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFU
aW1lJikgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0RpdmlzYWJsZSgpIGNv
bnN0IG92ZXJyaWRlOwpAQCAtODIsOCArODEsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0hvbW9n
ZW5lb3VzKCkgY29uc3Q7CiAgICAgVmVjdG9yPFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+PiBkaXZp
ZGVJbnRvSG9tb2dlbmVvdXNTYW1wbGVzKCk7CiAKLSAgICB2b2lkIHNldEJ5dGVSYW5nZU9mZnNl
dChzaXplX3QpOwotCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgSEFWRShBVkNPTlRF
TlRLRVlTRVNTSU9OKQogICAgIHVzaW5nIEtleUlEcyA9IFZlY3RvcjxSZWY8RnJhZ21lbnRlZFNo
YXJlZEJ1ZmZlcj4+OwogICAgIHZvaWQgc2V0S2V5SURzKEtleUlEcyYmIGtleUlEcykgeyBtX2tl
eUlEcyA9IFdURk1vdmUoa2V5SURzKTsgfQpAQCAtMTAxLDggKzk4LDYgQEAgcHJvdGVjdGVkOgog
ICAgIFdFQkNPUkVfRVhQT1JUIE1lZGlhU2FtcGxlQVZGT2JqQyhDTVNhbXBsZUJ1ZmZlclJlZiwg
VmlkZW9Sb3RhdGlvbiwgYm9vbCBtaXJyb3JlZCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+TWVkaWFTYW1wbGVBVkZPYmpDKCk7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPE1lZGlhU2FtcGxl
OjpCeXRlUmFuZ2U+IGJ5dGVSYW5nZUZvckF0dGFjaG1lbnQoQ0ZTdHJpbmdSZWYga2V5KSBjb25z
dDsKLQogICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gbV9zYW1wbGU7CiAgICAgQXRv
bVN0cmluZyBtX2lkOwogICAgIFZpZGVvUm90YXRpb24gbV9yb3RhdGlvbiB7IFZpZGVvUm90YXRp
b246Ok5vbmUgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5t
bQppbmRleCA5Y2FkODlkMWM3NmM5Y2MxMThiNDcxMjJhNTZjYmQ1N2ExMzEyZDRlLi41ZDY2YTA0
MjZiMDRhYWVjZDY1NzdkZWNjMzQ2Yjc3MDcwZGZlZjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9i
akMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCkBAIC01MDUsNDQgKzUwNSw2IEBAIFJldGFpblB0
cjxDTVNhbXBsZUJ1ZmZlclJlZj4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjbG9uZVNhbXBsZUJ1ZmZl
ckFuZFNldEFzRGlzcGxhCiAgICAgcmV0dXJuIGFkb3B0Q0YobmV3U2FtcGxlQnVmZmVyKTsKIH0K
IAotc3RhdGljIENGU3RyaW5nUmVmIGJ5dGVSYW5nZU9mZnNldEF0dGFjaG1lbnRLZXkoKQotewot
ICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBrZXkgPSBDRlNUUigiV2ViS2l0TWVkaWFTYW1wbGVCeXRl
UmFuZ2VPZmZzZXQiKTsKLSAgICByZXR1cm4ga2V5OwotfQotCi1zdGQ6Om9wdGlvbmFsPE1lZGlh
U2FtcGxlOjpCeXRlUmFuZ2U+IE1lZGlhU2FtcGxlQVZGT2JqQzo6Ynl0ZVJhbmdlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gYnl0ZVJhbmdlRm9yQXR0YWNobWVudChieXRlUmFuZ2VPZmZzZXRBdHRh
Y2htZW50S2V5KCkpOwotfQotCi12b2lkIE1lZGlhU2FtcGxlQVZGT2JqQzo6c2V0Qnl0ZVJhbmdl
T2Zmc2V0KHNpemVfdCBieXRlT2Zmc2V0KQotewotICAgIGludDY0X3QgY2hlY2tlZE9mZnNldCA9
IENoZWNrZWRJbnQ2NChieXRlT2Zmc2V0KTsKLSAgICBhdXRvIG9mZnNldE51bWJlciA9IGFkb3B0
Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDY0VHlw
ZSwgJmNoZWNrZWRPZmZzZXQpKTsKLSAgICBQQUw6OkNNU2V0QXR0YWNobWVudChtX3NhbXBsZS5n
ZXQoKSwgYnl0ZVJhbmdlT2Zmc2V0QXR0YWNobWVudEtleSgpLCBvZmZzZXROdW1iZXIuZ2V0KCks
IGtDTUF0dGFjaG1lbnRNb2RlX1Nob3VsZFByb3BhZ2F0ZSk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8
TWVkaWFTYW1wbGU6OkJ5dGVSYW5nZT4gTWVkaWFTYW1wbGVBVkZPYmpDOjpieXRlUmFuZ2VGb3JB
dHRhY2htZW50KENGU3RyaW5nUmVmIGtleSkgY29uc3QKLXsKLSAgICBhdXRvIGJ5dGVPZmZzZXRD
RiA9IGR5bmFtaWNfY2ZfY2FzdDxDRk51bWJlclJlZj4oUEFMOjpDTUdldEF0dGFjaG1lbnQobV9z
YW1wbGUuZ2V0KCksIGtleSwgbnVsbHB0cikpOwotICAgIGlmICghYnl0ZU9mZnNldENGKQotICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgaW50NjRfdCBieXRlT2Zmc2V0ID0gMDsK
LSAgICBpZiAoIUNGTnVtYmVyR2V0VmFsdWUoYnl0ZU9mZnNldENGLCBrQ0ZOdW1iZXJTSW50NjRU
eXBlLCAmYnl0ZU9mZnNldCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBD
TUl0ZW1Db3VudCBzaXplQXJyYXlFbnRyaWVzID0gMDsKLSAgICBQQUw6OkNNU2FtcGxlQnVmZmVy
R2V0U2FtcGxlU2l6ZUFycmF5KG1fc2FtcGxlLmdldCgpLCAwLCBudWxscHRyLCAmc2l6ZUFycmF5
RW50cmllcyk7Ci0gICAgaWYgKHNpemVBcnJheUVudHJpZXMgIT0gMSkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgIHNpemVfdCBzaW5nbGVTaXplRW50cnkgPSAwOwotICAgIFBB
TDo6Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVTaXplQXJyYXkobV9zYW1wbGUuZ2V0KCksIDEsICZz
aW5nbGVTaXplRW50cnksIG51bGxwdHIpOwotICAgIHJldHVybiB7IHsgQ2hlY2tlZFNpemUoYnl0
ZU9mZnNldCksIHNpbmdsZVNpemVFbnRyeSB9IH07Ci19Ci0KIENWUGl4ZWxCdWZmZXJSZWYgTWVk
aWFTYW1wbGVBVkZPYmpDOjpwaXhlbEJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PENWUGl4ZWxCdWZmZXJSZWY+KFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZl
cihtX3NhbXBsZS5nZXQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKaW5kZXggYWUzOTNlMGIyZDAxN2NkNGM5YWRkN2Q1
NGJlYmY1YjI5YzRjMmRlZi4uYWI3MWI4N2ZmNjNlZDMzOGQ5NWZjZGY2YjJkZDI0ZjQ4Mzc3MDMx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01V
dGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9D
TVV0aWxpdGllcy5oCkBAIC00MSw3ICs0MSw3IEBAIHN0cnVjdCBUcmFja0luZm87CiBXRUJDT1JF
X0VYUE9SVCBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVz
Y3JpcHRpb25Gcm9tVHJhY2tJbmZvKGNvbnN0IFRyYWNrSW5mbyYpOwogLy8gQ29udmVydCBNZWRp
YVNhbXBsZXNCbG9jayB0byB0aGUgZXF1aXZhbGVudCBDTVNhbXBsZUJ1ZmZlclJlZi4gSWYgQ01G
b3JtYXREZXNjcmlwdGlvblJlZgogLy8gaXMgc2V0IGl0IHdpbGwgYmUgdXNlZCwgb3RoZXJ3aXNl
IGl0IHdpbGwgYmUgY3JlYXRlZCBmcm9tIHRoZSBNZWRpYVNhbXBsZXNCbG9jaydzIFRyYWNrSW5m
by4KLVdFQkNPUkVfRVhQT1JUIEV4cGVjdGVkPFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4s
IENTdHJpbmc+IHRvQ01TYW1wbGVCdWZmZXIoTWVkaWFTYW1wbGVzQmxvY2smJiwgQ01Gb3JtYXRE
ZXNjcmlwdGlvblJlZik7CitXRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxSZXRhaW5QdHI8Q01TYW1w
bGVCdWZmZXJSZWY+LCBDU3RyaW5nPiB0b0NNU2FtcGxlQnVmZmVyKE1lZGlhU2FtcGxlc0Jsb2Nr
JiYsIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgPSBudWxscHRyKTsKIAogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJj
ZUJ1ZmZlclBhcnNlcldlYk0uY3BwCmluZGV4IDk0YmIyZWQ2YzU2ZTc4NDUxMGQyZjQxZTI3OGI4
Y2EzOTk4ZjNiMGYuLmUxYTY0N2NhYWEwZDRjZTY2ZTQ3NDMzZDdmMTc5NjFiMjhmOTQyN2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1
ZmZlclBhcnNlcldlYk0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCkBAIC01MzYsOSArNTM2LDcgQEAgV2Vi
TVBhcnNlcjo6V2ViTVBhcnNlcihDYWxsYmFjayYgY2FsbGJhY2spCiB7CiB9CiAKLVdlYk1QYXJz
ZXI6On5XZWJNUGFyc2VyKCkKLXsKLX0KK1dlYk1QYXJzZXI6On5XZWJNUGFyc2VyKCkgPSBkZWZh
dWx0OwogCiB2b2lkIFdlYk1QYXJzZXI6OnJlc2V0U3RhdGUoKQogewpAQCAtNTYwLDYgKzU1OCwx
MyBAQCB2b2lkIFdlYk1QYXJzZXI6OnJlc2V0KCkKICAgICBtX3BhcnNlci0+RGlkU2VlaygpOwog
fQogCit2b2lkIFdlYk1QYXJzZXI6OmNyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMoKQoreworICAgIGZv
ciAoYXV0byYgdHJhY2sgOiBtX3RyYWNrcykKKyAgICAgICAgdHJhY2stPmNyZWF0ZUJ5dGVSYW5n
ZVNhbXBsZXMoKTsKKyAgICBtX2NyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMgPSB0cnVlOworfQorCiBF
eGNlcHRpb25PcjxpbnQ+IFdlYk1QYXJzZXI6OnBhcnNlKFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2Vn
bWVudCYmIHNlZ21lbnQpCiB7CiAgICAgaWYgKCFtX3BhcnNlcikKQEAgLTg1MSwzMiArODU2LDMw
IEBAIFN0YXR1cyBXZWJNUGFyc2VyOjpPblRyYWNrRW50cnkoY29uc3QgRWxlbWVudE1ldGFkYXRh
JiwgY29uc3QgVHJhY2tFbnRyeSYgdHJhY2tFCiAgICAgfQogCiAgICAgU3RyaW5nVmlldyBjb2Rl
Y1N0cmluZyB7IHRyYWNrRW50cnkuY29kZWNfaWQudmFsdWUoKS5kYXRhKCksICh1bnNpZ25lZCl0
cmFja0VudHJ5LmNvZGVjX2lkLnZhbHVlKCkubGVuZ3RoKCkgfTsKKyAgICBhdXRvIHRyYWNrID0g
WyZdKCkgLT4gVW5pcXVlUmVmPFRyYWNrRGF0YT4gewogI2lmIEVOQUJMRShWUDkpCi0gICAgaWYg
KGNvZGVjU3RyaW5nID09ICJWX1ZQOSIgJiYgaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpIHsKLSAg
ICAgICAgbV90cmFja3MuYXBwZW5kKFZpZGVvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpW
UDksIHRyYWNrRW50cnksICp0aGlzKSk7Ci0gICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpr
T2tDb21wbGV0ZWQpOwotICAgIH0KLSAgICBpZiAoY29kZWNTdHJpbmcgPT0gIlZfVlA4IiAmJiBp
c1ZQOERlY29kZXJBdmFpbGFibGUoKSkgewotICAgICAgICBtX3RyYWNrcy5hcHBlbmQoVmlkZW9U
cmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZQOCwgdHJhY2tFbnRyeSwgKnRoaXMpKTsKLSAg
ICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7Ci0gICAgfQorICAgICAg
ICBpZiAoY29kZWNTdHJpbmcgPT0gIlZfVlA5IiAmJiBpc1ZQOURlY29kZXJBdmFpbGFibGUoKSkK
KyAgICAgICAgICAgIHJldHVybiBWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6VlA5
LCB0cmFja0VudHJ5LCAqdGhpcyk7CisgICAgICAgIGlmIChjb2RlY1N0cmluZyA9PSAiVl9WUDgi
ICYmIGlzVlA4RGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIFZpZGVvVHJh
Y2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpWUDgsIHRyYWNrRW50cnksICp0aGlzKTsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKFZPUkJJUykKLSAgICBpZiAoY29kZWNTdHJpbmcgPT0gIkFfVk9SQklT
IiAmJiBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkgewotICAgICAgICBtX3RyYWNrcy5hcHBl
bmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZvcmJpcywgdHJhY2tFbnRyeSwg
KnRoaXMpKTsKLSAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7Ci0g
ICAgfQorICAgICAgICBpZiAoY29kZWNTdHJpbmcgPT0gIkFfVk9SQklTIiAmJiBpc1ZvcmJpc0Rl
Y29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBBdWRpb1RyYWNrRGF0YTo6Y3Jl
YXRlKENvZGVjVHlwZTo6Vm9yYmlzLCB0cmFja0VudHJ5LCAqdGhpcyk7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShPUFVTKQotICAgIGlmIChjb2RlY1N0cmluZyA9PSAiQV9PUFVTIiAmJiBpc09wdXNE
ZWNvZGVyQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgbV90cmFja3MuYXBwZW5kKEF1ZGlvVHJhY2tE
YXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpPcHVzLCB0cmFja0VudHJ5LCAqdGhpcykpOwotICAgICAg
ICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKLSAgICB9CisgICAgICAgIGlm
IChjb2RlY1N0cmluZyA9PSAiQV9PUFVTIiAmJiBpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCisg
ICAgICAgICAgICByZXR1cm4gQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6Ok9wdXMs
IHRyYWNrRW50cnksICp0aGlzKTsKICNlbmRpZgorICAgICAgICByZXR1cm4gVHJhY2tEYXRhOjpj
cmVhdGUoQ29kZWNUeXBlOjpVbnN1cHBvcnRlZCwgdHJhY2tFbnRyeSwgKnRoaXMpOworICAgIH0o
KTsKKworICAgIGlmIChtX2NyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMpCisgICAgICAgIHRyYWNrLT5j
cmVhdGVCeXRlUmFuZ2VTYW1wbGVzKCk7CiAKLSAgICBtX3RyYWNrcy5hcHBlbmQoVHJhY2tEYXRh
OjpjcmVhdGUoQ29kZWNUeXBlOjpVbnN1cHBvcnRlZCwgdHJhY2tFbnRyeSwgKnRoaXMpKTsKKyAg
ICBtX3RyYWNrcy5hcHBlbmQoV1RGTW92ZSh0cmFjaykpOwogICAgIHJldHVybiBTdGF0dXMoU3Rh
dHVzOjprT2tDb21wbGV0ZWQpOwogfQogCkBAIC0xMDUxLDggKzEwNTQsNiBAQCB3ZWJtOjpTdGF0
dXMgV2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVh
ZGVyJiByZWFkZXIsCiAgICAgaWYgKCFzdGF0dXMuY29tcGxldGVkX29rKCkpCiAgICAgICAgIHJl
dHVybiBzdGF0dXM7CiAKLSAgICBtX2xhc3RQb3NpdGlvbiA9IG1ldGFkYXRhLnBvc2l0aW9uOwot
CiAgICAgY29uc3RleHByIHNpemVfdCBtYXhIZWFkZXJTaXplID0gMzI7IC8vIFRoZSBtYXhpbXVt
IGxlbmd0aCBvZiBhIFZQOSB1bmNvbXByZXNzZWQgaGVhZGVyIGlzIDE0NCBiaXRzIGFuZCAxMSBi
eXRlcyBmb3IgVlA4LiBSb3VuZCBoaWdoLgogICAgIHNpemVfdCBzZWdtZW50SGVhZGVyTGVuZ3Ro
ID0gc3RkOjptaW4obWF4SGVhZGVyU2l6ZSwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLT5zaXplKCkp
OwogICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVm
ZmVyKDAsIHNlZ21lbnRIZWFkZXJMZW5ndGgpOwpAQCAtMTA5MCw3ICsxMDkxLDEwIEBAIHdlYm06
OlN0YXR1cyBXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJt
OjpSZWFkZXImIHJlYWRlciwKICAgICBpZiAodHJhY2suZGVmYXVsdF9kdXJhdGlvbi5pc19wcmVz
ZW50KCkpCiAgICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgp
ICogcHJlc2VudGF0aW9uVGltZS50aW1lU2NhbGUoKSAvIGtfdXNfaW5fc2Vjb25kczsKIAotICAg
IG1fY29tcGxldGVNZWRpYVNhbXBsZXMuYXBwZW5kKHsgcHJlc2VudGF0aW9uVGltZSwgcHJlc2Vu
dGF0aW9uVGltZSwgTWVkaWFUaW1lKGR1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLnRpbWVTY2Fs
ZSgpKSwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIGlzS2V5ID8gTWVk
aWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpJc1N5bmMgOiBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6
Ok5vbmUgfSk7CisgICAgaWYgKG1fdXNlQnl0ZVJhbmdlKQorICAgICAgICBtX2NvbXBsZXRlTWVk
aWFTYW1wbGVzLmFwcGVuZCh7IHByZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUsIE1l
ZGlhVGltZShkdXJhdGlvbiwgcHJlc2VudGF0aW9uVGltZS50aW1lU2NhbGUoKSksIE1lZGlhU2Ft
cGxlOjpCeXRlUmFuZ2UgeyBtZXRhZGF0YS5wb3NpdGlvbiwgbWV0YWRhdGEuc2l6ZSB9LCBpc0tl
eSA/IE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jIDogTWVkaWFTYW1wbGU6OlNhbXBs
ZUZsYWdzOjpOb25lIH0pOworICAgIGVsc2UKKyAgICAgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxl
cy5hcHBlbmQoeyBwcmVzZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1lLCBNZWRpYVRpbWUo
ZHVyYXRpb24sIHByZXNlbnRhdGlvblRpbWUudGltZVNjYWxlKCkpLCBtX2NvbXBsZXRlQmxvY2tC
dWZmZXIucmVsZWFzZU5vbk51bGwoKSwgaXNLZXkgPyBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6
OklzU3luYyA6IE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6Tm9uZSB9KTsKIAogICAgIGRyYWlu
UGVuZGluZ1NhbXBsZXMoKTsKIApAQCAtMTExNiw4ICsxMTIwLDYgQEAgd2VibTo6U3RhdHVzIFdl
Yk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYg
cmVhZGVyLAogICAgIGlmICghc3RhdHVzLmNvbXBsZXRlZF9vaygpKQogICAgICAgICByZXR1cm4g
c3RhdHVzOwogCi0gICAgbV9sYXN0UG9zaXRpb24gPSBtZXRhZGF0YS5wb3NpdGlvbjsKLQogICAg
IGlmICghZm9ybWF0RGVzY3JpcHRpb24oKSkgewogICAgICAgICBpZiAoIXRyYWNrKCkuY29kZWNf
cHJpdmF0ZS5pc19wcmVzZW50KCkpIHsKICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZf
UE9TU0lCTEUoIkF1ZGlvIHRyYWNrIG1pc3NpbmcgbWFnaWMgY29va2llIik7CkBAIC0xMTgwLDcg
KzExODIsMTAgQEAgd2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25z
dW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLAogICAgIGVsc2UgaWYgKGZvcm1hdERl
c2NyaXB0aW9uKCkgJiYgKmZvcm1hdERlc2NyaXB0aW9uKCkgIT0gKm1fY29tcGxldGVNZWRpYVNh
bXBsZXMuaW5mbygpKQogICAgICAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7CiAKLSAgICBtX2Nv
bXBsZXRlTWVkaWFTYW1wbGVzLmFwcGVuZCh7IHByZXNlbnRhdGlvblRpbWUsIE1lZGlhVGltZTo6
aW52YWxpZFRpbWUoKSwgbV9wYWNrZXREdXJhdGlvbiwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLnJl
bGVhc2VOb25OdWxsKCksIE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jIH0pOworICAg
IGlmIChtX3VzZUJ5dGVSYW5nZSkKKyAgICAgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5hcHBl
bmQoeyBwcmVzZW50YXRpb25UaW1lLCBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCksIG1fcGFja2V0
RHVyYXRpb24sIE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2UgeyBtZXRhZGF0YS5wb3NpdGlvbiwgbWV0
YWRhdGEuc2l6ZSB9LCBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyB9KTsKKyAgICBl
bHNlCisgICAgICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMuYXBwZW5kKHsgcHJlc2VudGF0aW9u
VGltZSwgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpLCBtX3BhY2tldER1cmF0aW9uLCBtX2NvbXBs
ZXRlQmxvY2tCdWZmZXIucmVsZWFzZU5vbk51bGwoKSwgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdz
OjpJc1N5bmMgfSk7CiAKICAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7CiAKQEAgLTEyOTksOSAr
MTMwNCw5IEBAIFJlZlB0cjxTb3VyY2VCdWZmZXJQYXJzZXJXZWJNPiBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpjcmVhdGUoY29uc3QgQ29udGVudFR5cGUmCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLXZvaWQgV2ViTVBhcnNlcjo6cHJvdmlkZU1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYm
IHNhbXBsZXMsIHVpbnQ2NF90IHBvc2l0aW9uKQordm9pZCBXZWJNUGFyc2VyOjpwcm92aWRlTWVk
aWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlcykKIHsKLSAgICBtX2NhbGxiYWNrLnBh
cnNlZE1lZGlhRGF0YShXVEZNb3ZlKHNhbXBsZXMpLCBwb3NpdGlvbik7CisgICAgbV9jYWxsYmFj
ay5wYXJzZWRNZWRpYURhdGEoV1RGTW92ZShzYW1wbGVzKSk7CiB9CiAKIHZvaWQgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6cGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKEluaXRpYWxpemF0aW9uU2Vn
bWVudCYmIGluaXRpYWxpemF0aW9uU2VnbWVudCkKQEAgLTEzMTIsNyArMTMxNyw3IEBAIHZvaWQg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKEluaXRpYWxp
emF0aW9uU2VnbWVudCYmIGluCiAgICAgfSk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6cGFyc2VkTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlc0Jsb2NrLCB1
aW50NjRfdCBwb3NpdGlvbikKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkTWVk
aWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlc0Jsb2NrKQogewogICAgIGlmICghc2Ft
cGxlc0Jsb2NrLmluZm8oKSkgewogICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURF
TlRJRklFUiwgIk5vIFRyYWNrSW5mbyBzZXQiKTsKQEAgLTEzMzYsNyArMTM0MSw3IEBAIHZvaWQg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2Nr
JiYgc2FtcGxlc0Jsb2NrLCB1CiAgICAgfQogCiAgICAgaWYgKHNhbXBsZXNCbG9jay5pc1ZpZGVv
KCkpIHsKLSAgICAgICAgcmV0dXJuU2FtcGxlcyhXVEZNb3ZlKHNhbXBsZXNCbG9jayksIG1fdmlk
ZW9Gb3JtYXREZXNjcmlwdGlvbi5nZXQoKSwgcG9zaXRpb24pOworICAgICAgICByZXR1cm5TYW1w
bGVzKFdURk1vdmUoc2FtcGxlc0Jsb2NrKSwgbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uLmdldCgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTM0NCwxNyArMTM0OSwxNyBAQCB2b2lk
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9j
ayYmIHNhbXBsZXNCbG9jaywgdQogICAgIGlmIChtX3F1ZXVlZEF1ZGlvU2FtcGxlcy5zaXplKCkp
IHsKICAgICAgICAgYXV0byYgbGFzdFNhbXBsZSA9IG1fcXVldWVkQXVkaW9TYW1wbGVzLmxhc3Qo
KTsKICAgICAgICAgaWYgKGxhc3RTYW1wbGUuZHVyYXRpb24gKyBsYXN0U2FtcGxlLnByZXNlbnRh
dGlvblRpbWUgIT0gc2FtcGxlc0Jsb2NrLmZpcnN0KCkucHJlc2VudGF0aW9uVGltZSkKLSAgICAg
ICAgICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcyhwb3NpdGlvbik7CisgICAgICAgICAgICBm
bHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoKTsKICAgICB9CiAgICAgZm9yIChhdXRvJiBzYW1wbGUg
OiBzYW1wbGVzQmxvY2spCiAgICAgICAgIG1fcXVldWVkQXVkaW9EdXJhdGlvbiArPSBzYW1wbGUu
ZHVyYXRpb247CiAgICAgbV9xdWV1ZWRBdWRpb1NhbXBsZXMuYXBwZW5kKFdURk1vdmUoc2FtcGxl
c0Jsb2NrKSk7CiAgICAgaWYgKG1fcXVldWVkQXVkaW9EdXJhdGlvbiA8IG1fbWluaW11bUF1ZGlv
U2FtcGxlRHVyYXRpb24pCiAgICAgICAgIHJldHVybjsKLSAgICBmbHVzaFBlbmRpbmdBdWRpb1Nh
bXBsZXMocG9zaXRpb24pOworICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOwogfQogCi12
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJldHVyblNhbXBsZXMoTWVkaWFTYW1wbGVzQmxv
Y2smJiBibG9jaywgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiBkZXNjcmlwdGlvbiwgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gcG9zaXRpb24pCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJl
dHVyblNhbXBsZXMoTWVkaWFTYW1wbGVzQmxvY2smJiBibG9jaywgQ01Gb3JtYXREZXNjcmlwdGlv
blJlZiBkZXNjcmlwdGlvbikKIHsKICAgICBpZiAoYmxvY2suaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMzY1LDEzICsxMzcwLDExIEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6cmV0dXJuU2FtcGxlcyhNZWRpYVNhbXBsZXNCbG9jayYmIGJsb2NrLCBDTUZvcm1hdERlCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNr
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdHJhY2tJRCA9IGJsb2NrLmlu
Zm8oKS0+dHJhY2tJRCwgc2FtcGxlQnVmZmVyID0gV1RGTW92ZShleHBlY3RlZEJ1ZmZlci52YWx1
ZSgpKSwgcG9zaXRpb25dICgpIG11dGFibGUgeworICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2Fs
bGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCB0cmFja0lEID0gYmxv
Y2suaW5mbygpLT50cmFja0lELCBzYW1wbGVCdWZmZXIgPSBXVEZNb3ZlKGV4cGVjdGVkQnVmZmVy
LnZhbHVlKCkpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCFtX2RpZFByb3ZpZGVNZWRpYURh
dGFDYWxsYmFjaykKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBhdXRvIG1lZGlhU2Ft
cGxlID0gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpLCB0cmFj
a0lEKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uKQotICAgICAgICAgICAgbWVkaWFTYW1wbGUtPnNl
dEJ5dGVSYW5nZU9mZnNldCgqcG9zaXRpb24pOwogCiAgICAgICAgIG1fZGlkUHJvdmlkZU1lZGlh
RGF0YUNhbGxiYWNrKFdURk1vdmUobWVkaWFTYW1wbGUpLCB0cmFja0lELCBlbXB0eVN0cmluZygp
KTsKICAgICB9KTsKQEAgLTEzOTEsMTMgKzEzOTQsMTMgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpjb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoUmVm
PFMKICAgICAgICAgbV9kaWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRh
dGFGb3JUcmFja0lEQ2FsbGJhY2soV1RGTW92ZShrZXlJRCksIHRyYWNrSUQpOwogfQogCi12b2lk
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcyhzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBwb3NpdGlvbikKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
Zmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKCkKIHsKICAgICBpZiAoIW1fYXVkaW9Gb3JtYXREZXNj
cmlwdGlvbikKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChtX2F1ZGlvSW5mbyk7CiAgICAg
bV9xdWV1ZWRBdWRpb1NhbXBsZXMuc2V0SW5mbyhtX2F1ZGlvSW5mby5jb3B5UmVmKCkpOwotICAg
IHJldHVyblNhbXBsZXMoV1RGTW92ZShtX3F1ZXVlZEF1ZGlvU2FtcGxlcyksIG1fYXVkaW9Gb3Jt
YXREZXNjcmlwdGlvbi5nZXQoKSwgcG9zaXRpb24pOworICAgIHJldHVyblNhbXBsZXMoV1RGTW92
ZShtX3F1ZXVlZEF1ZGlvU2FtcGxlcyksIG1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbi5nZXQoKSk7
CiAKICAgICBtX3F1ZXVlZEF1ZGlvU2FtcGxlcyA9IHsgfTsKICAgICBtX3F1ZXVlZEF1ZGlvRHVy
YXRpb24gPSB7IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKaW5kZXggZmZjZWQzNDI1
ZDZlNTI1NDJhMGFmZmFhZTg3NzBmNWMyYzYxMDhjMS4uODdhOTQwM2E4ZjNmYzUwYjY4YWFkZTgx
NTc5NWEyOTNmNTc3NjFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaApAQCAtMjgs
NiArMjgsNyBAQAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKICNpbmNsdWRlICJFeGNlcHRp
b25Pci5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAjaW5jbHVkZSAiU291cmNlQnVmZmVyUGFyc2VyLmgiCiAjaW5jbHVkZSA8Q29yZUF1ZGlv
L0NvcmVBdWRpb1R5cGVzLmg+CkBAIC01MiwzMCArNTMsMzAgQEAgY2xhc3MgV2ViTVBhcnNlciA6
IHByaXZhdGUgd2VibTo6Q2FsbGJhY2sgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgogICAgIGNsYXNzIENhbGxiYWNrIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VkVHJpbW1pbmdE
YXRhKHVpbnQ2NF90LCBjb25zdCBNZWRpYVRpbWUmKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lk
IHBhcnNlZEluaXRpYWxpemF0aW9uRGF0YShTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0
aW9uU2VnbWVudCYmKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZWRNZWRpYURhdGEo
TWVkaWFTYW1wbGVzQmxvY2smJiwgdWludDY0X3QpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmKSA9IDA7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBjYW5EZWNyeXB0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmly
dHVhbCB2b2lkIGNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRChS
ZWY8U2hhcmVkQnVmZmVyPiYmLCB1aW50NjRfdCkgeyB9CiAgICAgICAgIHZpcnR1YWwgfkNhbGxi
YWNrKCkgPSBkZWZhdWx0OwogICAgIH07CiAKLSAgICBXZWJNUGFyc2VyKENhbGxiYWNrJik7Ci0g
ICAgfldlYk1QYXJzZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBXZWJNUGFyc2VyKENhbGxiYWNr
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgfldlYk1QYXJzZXIoKTsKIAogICAgIGNsYXNzIFNlZ21l
bnRSZWFkZXI7CiAKLSAgICBFeGNlcHRpb25PcjxpbnQ+IHBhcnNlKFNvdXJjZUJ1ZmZlclBhcnNl
cjo6U2VnbWVudCYmKTsKLSAgICB2b2lkIHJlc2V0U3RhdGUoKTsKLSAgICB2b2lkIHJlc2V0KCk7
Ci0gICAgdm9pZCBpbnZhbGlkYXRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjcmVhdGVC
eXRlUmFuZ2VTYW1wbGVzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8aW50PiBw
YXJzZShTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQmJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCByZXNldFN0YXRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXNldCgpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgaW52YWxpZGF0ZSgpOwogICAgIGNvbnN0IHdlYm06OlN0YXR1
cyYgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KIAotICAgIHZvaWQgcHJvdmlk
ZU1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmLCB1aW50NjRfdCk7CisgICAgdm9pZCBwcm92
aWRlTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYpOwogCi0gICAgdm9pZCBzZXRMb2dnZXIo
Y29uc3QgTG9nZ2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmllcik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmllcik7
CiAgICAgY29uc3QgTG9nZ2VyKiBsb2dnZXJQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ2dlci5n
ZXQoKTsgfQogICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X2xvZ0lkZW50aWZpZXI7IH0KIApAQCAtMTM0LDYgKzEzNSw4IEBAIHB1YmxpYzoKICAgICAgICAg
d2VibTo6VHJhY2tFbnRyeSYgdHJhY2soKSB7IHJldHVybiBtX3RyYWNrOyB9CiAgICAgICAgIFRy
YWNrSW5mbzo6VHJhY2tUeXBlIHRyYWNrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tUeXBl
OyB9CiAKKyAgICAgICAgdm9pZCBjcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKCkgeyBtX3VzZUJ5dGVS
YW5nZSA9IHRydWU7IH0KKwogICAgICAgICBSZWZQdHI8VHJhY2tJbmZvPiBmb3JtYXREZXNjcmlw
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0RGVzY3JpcHRpb24uY29weVJlZigpOyB9CiAg
ICAgICAgIHZvaWQgc2V0Rm9ybWF0RGVzY3JpcHRpb24oUmVmPFRyYWNrSW5mbz4mJiBkZXNjcmlw
dGlvbikKICAgICAgICAgewpAQCAtMTY3LDcgKzE3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgewog
ICAgICAgICAgICAgaWYgKCFtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLnNpemUoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX3BhcnNlci5wcm92aWRlTWVkaWFEYXRhKFdU
Rk1vdmUobV9jb21wbGV0ZU1lZGlhU2FtcGxlcyksIG1fbGFzdFBvc2l0aW9uKTsKKyAgICAgICAg
ICAgIG1fcGFyc2VyLnByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShtX2NvbXBsZXRlTWVkaWFTYW1w
bGVzKSk7CiAgICAgICAgICAgICByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7CiAgICAgICAg
IH0KIApAQCAtMTc2LDcgKzE3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgd2VibTo6U3RhdHVzIHJl
YWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVp
bnQ2NF90KiBieXRlc1JlbWFpbmluZyk7CiAgICAgICAgIFJlZlB0cjxGcmFnbWVudGVkU2hhcmVk
QnVmZmVyPiBtX2NvbXBsZXRlQmxvY2tCdWZmZXI7CiAgICAgICAgIE1lZGlhU2FtcGxlc0Jsb2Nr
IG1fY29tcGxldGVNZWRpYVNhbXBsZXM7Ci0gICAgICAgIHVpbnQ2NF90IG1fbGFzdFBvc2l0aW9u
IHsgMCB9OworICAgICAgICBib29sIG1fdXNlQnl0ZVJhbmdlIHsgZmFsc2UgfTsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIENvZGVjVHlwZSBtX2NvZGVjOwpAQCAtMjc5LDYgKzI4Miw3IEBAIHBy
aXZhdGU6CiAgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyIHsgbnVsbHB0ciB9OwogICAg
IHVpbnQ2NF90IG1fbmV4dENoaWxkSWRlbnRpZmllciB7IDAgfTsKICAgICBDYWxsYmFjayYgbV9j
YWxsYmFjazsKKyAgICBib29sIG1fY3JlYXRlQnl0ZVJhbmdlU2FtcGxlcyB7IGZhbHNlIH07CiB9
OwogCiBjbGFzcyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIDogcHVibGljIFNvdXJjZUJ1ZmZlclBh
cnNlciwgV2ViTVBhcnNlcjo6Q2FsbGJhY2sgewpAQCAtMzA4LDcgKzMxMiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayk7CiAgICAgfQogCi0gICAgdm9pZCBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gPSBzdGQ6Om51bGxvcHQpOworICAgIHZvaWQgZmx1c2hQZW5kaW5nQXVk
aW9TYW1wbGVzKCk7CiAgICAgdm9pZCBzZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbihmbG9h
dCk7CiAgICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMb2dnZXIoY29uc3QgTG9nZ2Vy
JiwgY29uc3Qgdm9pZCogaWRlbnRpZmllcikgZmluYWw7CkBAIC0zMTgsMTIgKzMyMiwxMiBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIC8vIFdlYk1QYXJzZXI6OkNhbGxiYWNrCiAgICAgdm9pZCBw
YXJzZWRJbml0aWFsaXphdGlvbkRhdGEoU291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlv
blNlZ21lbnQmJikgZmluYWw7Ci0gICAgdm9pZCBwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVz
QmxvY2smJiwgdWludDY0X3QpIGZpbmFsOworICAgIHZvaWQgcGFyc2VkTWVkaWFEYXRhKE1lZGlh
U2FtcGxlc0Jsb2NrJiYpIGZpbmFsOwogICAgIGJvb2wgY2FuRGVjcnlwdCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICEhbV9kaWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRh
dGFGb3JUcmFja0lEQ2FsbGJhY2s7IH0KICAgICB2b2lkIGNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlh
bGl6YXRpb25EYXRhRm9yVHJhY2tJRChSZWY8U2hhcmVkQnVmZmVyPiYmLCB1aW50NjRfdCkgZmlu
YWw7CiAgICAgdm9pZCBwYXJzZWRUcmltbWluZ0RhdGEodWludDY0X3QsIGNvbnN0IE1lZGlhVGlt
ZSYpIGZpbmFsOwotICAgIAotICAgIHZvaWQgcmV0dXJuU2FtcGxlcyhNZWRpYVNhbXBsZXNCbG9j
ayYmLCBDTUZvcm1hdERlc2NyaXB0aW9uUmVmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90Pik7CisK
KyAgICB2b2lkIHJldHVyblNhbXBsZXMoTWVkaWFTYW1wbGVzQmxvY2smJiwgQ01Gb3JtYXREZXNj
cmlwdGlvblJlZik7CiAKICAgICBEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrIG1fZGlkUGFy
c2VUcmltbWluZ0RhdGFDYWxsYmFjazsKICAgICBXZWJNUGFyc2VyIG1fcGFyc2VyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2Ft
cGxlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuaAppbmRleCAyYjdkZDQ0NGM1M2QyZDZiZDA3YTliODM4
ZDY3OWI2NGIzNzQ5YWY3Li5iZTRhMGZlM2MzYzk5N2E4ZGJlMTJmYjZmNGZmOWQxYWVjOGFkZGU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFTYW1wbGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuaApAQCAtNjEsNyArNjEsNiBAQCBw
dWJsaWM6CiAgICAgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2ZsYWdzOyB9CiAgICAgUGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBjb25zdCBvdmVy
cmlkZTsKICAgICBQbGF0Zm9ybVNhbXBsZTo6VHlwZSBwbGF0Zm9ybVNhbXBsZVR5cGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBQbGF0Zm9ybVNhbXBsZTo6R1N0cmVhbWVyU2FtcGxlVHlwZTsg
fQotICAgIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKICAgICBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gZ2V0UkdC
QUltYWdlRGF0YSgpIGNvbnN0IGZpbmFsOwogICAgIFZpZGVvUm90YXRpb24gdmlkZW9Sb3RhdGlv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlkZW9Sb3RhdGlvbjsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVm
ZmVyUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNl
L01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcAppbmRleCAzY2Y3ZWU2NTNlYzgxM2RmYmFlMzNl
ZjkzYTBjMzNmZTJjNjM5NGUwLi5kNGNmZTQxOGQ1YzYxMjA2NTdkZTBkMGJjMDIwMzZmYjEwYTgy
MGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNl
L01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tb2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcApAQCAtNjIsNyAr
NjIsNiBAQCBwcml2YXRlOgogICAgIFNhbXBsZUZsYWdzIGZsYWdzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgUGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBjb25zdCBvdmVycmlkZTsKICAg
ICBQbGF0Zm9ybVNhbXBsZTo6VHlwZSBwbGF0Zm9ybVNhbXBsZVR5cGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBQbGF0Zm9ybVNhbXBsZTo6TW9ja1NhbXBsZUJveFR5cGU7IH0KLSAgICBzdGQ6
Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
c3RkOjpudWxsb3B0OyB9CiAgICAgRmxvYXRTaXplIHByZXNlbnRhdGlvblNpemUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBGbG9hdFNpemUoKTsgfQogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1l
ZGlhVGltZSYgb2Zmc2V0KSBvdmVycmlkZSB7IG1fYm94Lm9mZnNldFRpbWVzdGFtcHNCeShvZmZz
ZXQpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRS
ZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcAppbmRleCAxYzMzOGM2YTNlOGNi
ZWZiNGM2ZTRiYWY1MDIxYjE1NTI1NDhmYmZiLi4wYzJlNWRhZDljNmY4NzdmZjNlNjI4ODkyZWYz
OTA5MmJmMmQ4MmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAKQEAgLTEzMiw0
MCArMTMyLDEyIEBAIHZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OnBhcnNlQnl0ZVNvdXJjZShSZXRh
aW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiYmIGJ5dGVTCiB7CiAgICAgQVNTRVJUKGlzTWFp
blJ1bkxvb3AoKSk7CiAKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29udGVudFR5cGU+IGNv
bnRlbnRUeXBlKCJ2aWRlby93ZWJtIl9zKTsKLSAgICBhdXRvIHBhcnNlciA9IFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OmNyZWF0ZShjb250ZW50VHlwZSk7Ci0gICAgaWYgKCFwYXJzZXIpIHsKLSAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IG1fcGFyc2VUcmFja3NMb2NrIH07Ci0gICAgICAgIG1fcGFy
c2VUcmFja3NTdGF0dXMgPSBrTVRQbHVnaW5Gb3JtYXRSZWFkZXJFcnJvcl9BbGxvY2F0aW9uRmFp
bHVyZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGlmICghbV9sb2dnZXIpIHsKICAg
ICAgICAgbV9sb2dnZXIgPSAmRG9jdW1lbnQ6OnNoYXJlZExvZ2dlcigpOwogICAgICAgICBtX2xv
Z0lkZW50aWZpZXIgPSBuZXh0TG9nSWRlbnRpZmllcigpOwogICAgIH0KIAogICAgIEFMV0FZU19M
T0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7Ci0gICAgcGFyc2VyLT5zZXRMb2dnZXIoKm1f
bG9nZ2VyLCBtX2xvZ0lkZW50aWZpZXIpOwotCi0gICAgLy8gU2V0IGEgbWluaW11bSBhdWRpbyBz
YW1wbGUgZHVyYXRpb24gb2YgMCBzbyB0aGUgcGFyc2VyIGNyZWF0ZXMgaW5kaXZpc2libGUgc2Ft
cGxlcyB3aXRoIGJ5dGUgc291cmNlIHJhbmdlcy4KLSAgICBwYXJzZXItPnNldE1pbmltdW1BdWRp
b1NhbXBsZUR1cmF0aW9uKDApOwotCi0gICAgcGFyc2VyLT5zZXRDYWxsT25DbGllbnRUaHJlYWRD
YWxsYmFjayhbXShGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pIHsKLSAgICAgICAgTWVkaWFU
cmFja1JlYWRlcjo6c3RvcmFnZVF1ZXVlKCkuZGlzcGF0Y2goV1RGTW92ZShmdW5jdGlvbikpOwot
ICAgIH0pOwotCi0gICAgcGFyc2VyLT5zZXREaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxi
YWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfV0oU291cmNlQnVmZmVyUGFy
c2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQmJiBpbml0aWFsaXphdGlvblNlZ21lbnQpIHsKLSAg
ICAgICAgZGlkUGFyc2VUcmFja3MoV1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpLCBub0Vy
cik7Ci0gICAgfSk7Ci0KLSAgICBwYXJzZXItPnNldERpZEVuY291bnRlckVycm9yRHVyaW5nUGFy
c2luZ0NhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfV0odWludDY0
X3QgZXJyb3JDb2RlKSB7Ci0gICAgICAgIGRpZFBhcnNlVHJhY2tzKHsgfSwgZXJyb3JDb2RlKTsK
LSAgICB9KTsKLQotICAgIHBhcnNlci0+c2V0RGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfV0oUmVmPE1lZGlhU2FtcGxlQVZGT2Jq
Qz4mJiBtZWRpYVNhbXBsZSwgdWludDY0X3QgdHJhY2tJRCwgY29uc3QgU3RyaW5nJiBtZWRpYVR5
cGUpIHsKLSAgICAgICAgZGlkUHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKG1lZGlhU2FtcGxlKSwg
dHJhY2tJRCwgbWVkaWFUeXBlKTsKLSAgICB9KTsKIAogICAgIExvY2tlciBsb2NrZXIgeyBtX3Bh
cnNlVHJhY2tzTG9jayB9OwogICAgIG1fYnl0ZVNvdXJjZSA9IFdURk1vdmUoYnl0ZVNvdXJjZSk7
CkBAIC0xNzMsMTQgKzE0NSwzNCBAQCB2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpwYXJzZUJ5dGVT
b3VyY2UoUmV0YWluUHRyPE1UUGx1Z2luQnl0ZVNvdXJjZVJlZj4mJiBieXRlUwogICAgIG1fZHVy
YXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAgICAgbV90cmFja1JlYWRlcnMuY2xl
YXIoKTsKIAotICAgIHJlYWRlclF1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBSZWYgeyAqdGhpcyB9LCBieXRlU291cmNlID0gbV9ieXRlU291cmNlLCBwYXJzZXIgPSBwYXJz
ZXIucmVsZWFzZU5vbk51bGwoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgcGFyc2VyLT5hcHBlbmRE
YXRhKFdURk1vdmUoYnl0ZVNvdXJjZSkpOwotICAgICAgICBNZWRpYVRyYWNrUmVhZGVyOjpzdG9y
YWdlUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0s
IHBhcnNlciA9IFdURk1vdmUocGFyc2VyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGZpbmlz
aFBhcnNpbmcoV1RGTW92ZShwYXJzZXIpKTsKKyAgICAvLyBUT0RPOiB3aHkgZG8gd2UgbmVlZCBh
IHN0b3JhZ2UgcXVldWUgZGlmZmVyZW50IHRvIHJlYWRlcidzIHF1ZXVlPworICAgIHJlYWRlclF1
ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBieXRl
U291cmNlID0gbV9ieXRlU291cmNlXSgpIG11dGFibGUgeworICAgICAgICBXZWJNUGFyc2VyIHBh
cnNlcigqdGhpcyk7CisgICAgICAgIHBhcnNlci5zZXRMb2dnZXIoKm1fbG9nZ2VyLCBtX2xvZ0lk
ZW50aWZpZXIpOworICAgICAgICBwYXJzZXIuY3JlYXRlQnl0ZVJhbmdlU2FtcGxlcygpOworICAg
ICAgICBhdXRvIHJlc3VsdCA9IHBhcnNlci5wYXJzZShXVEZNb3ZlKGJ5dGVTb3VyY2UpKTsKKyAg
ICAgICAgTWVkaWFUcmFja1JlYWRlcjo6c3RvcmFnZVF1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCByZXN1bHRdICgpIG11dGFibGUgeworICAgICAg
ICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJldHVyblZhbHVlKCkp
CisgICAgICAgICAgICAgICAgZGlkUGFyc2VUcmFja3MoeyB9LCByZXN1bHQucmV0dXJuVmFsdWUo
KSk7CisgICAgICAgICAgICBmaW5pc2hQYXJzaW5nKCk7CiAgICAgICAgIH0pOwogICAgIH0pOwog
fQogCit2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpwYXJzZWRJbml0aWFsaXphdGlvbkRhdGEoU291
cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQmJiBpbml0aWFsaXphdGlvblNl
Z21lbnQpCit7CisgICAgTWVkaWFUcmFja1JlYWRlcjo6c3RvcmFnZVF1ZXVlKCkuZGlzcGF0Y2go
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBpbml0aWFsaXphdGlvblNlZ21l
bnQgPSBXVEZNb3ZlKGluaXRpYWxpemF0aW9uU2VnbWVudCldICgpIG11dGFibGUgeworICAgICAg
ICBkaWRQYXJzZVRyYWNrcyhXVEZNb3ZlKGluaXRpYWxpemF0aW9uU2VnbWVudCksIG5vRXJyKTsK
KyAgICB9KTsKK30KKwordm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6cGFyc2VkTWVkaWFEYXRhKE1l
ZGlhU2FtcGxlc0Jsb2NrJiYgbWVkaWFTYW1wbGVzKQoreworICAgIE1lZGlhVHJhY2tSZWFkZXI6
OnN0b3JhZ2VRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRo
aXMgfSwgbWVkaWFTYW1wbGVzID0gV1RGTW92ZShtZWRpYVNhbXBsZXMpXSAoKSBtdXRhYmxlIHsK
KyAgICAgICAgZGlkUHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKG1lZGlhU2FtcGxlcykpOworICAg
IH0pOworfQorCiB2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpkaWRQYXJzZVRyYWNrcyhTb3VyY2VC
dWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQmJiBzZWdtZW50LCB1aW50
NjRfdCBlcnJvckNvZGUpCiB7CiAgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOwpAQCAtMjI1
LDIwICsyMTcsMjAgQEAgdm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6ZGlkUGFyc2VUcmFja3MoU291
cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb24KICAgICBtX2luaXQgPSB0cnVl
OwogfQogCi12b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpkaWRQcm92aWRlTWVkaWFEYXRhKFJlZjxN
ZWRpYVNhbXBsZUFWRk9iakM+JiYgbWVkaWFTYW1wbGUsIHVpbnQ2NF90IHRyYWNrSUQsIGNvbnN0
IFN0cmluZyYpCit2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpkaWRQcm92aWRlTWVkaWFEYXRhKE1l
ZGlhU2FtcGxlc0Jsb2NrJiYgbWVkaWFTYW1wbGVzKQogewogICAgIEFTU0VSVCghaXNNYWluUnVu
TG9vcCgpKTsKIAogICAgIExvY2tlciBsb2NrZXIgeyBtX3BhcnNlVHJhY2tzTG9jayB9OwogICAg
IGF1dG8gdHJhY2tJbmRleCA9IG1fdHJhY2tSZWFkZXJzLmZpbmRJZihbJl0oYXV0byYgdHJhY2sp
IHsKLSAgICAgICAgcmV0dXJuIHRyYWNrLT50cmFja0lEKCkgPT0gdHJhY2tJRDsKKyAgICAgICAg
cmV0dXJuIHRyYWNrLT50cmFja0lEKCkgPT0gbWVkaWFTYW1wbGVzLmluZm8oKS0+dHJhY2tJRDsK
ICAgICB9KTsKIAogICAgIGlmICh0cmFja0luZGV4ICE9IG5vdEZvdW5kKQotICAgICAgICBtX3Ry
YWNrUmVhZGVyc1t0cmFja0luZGV4XS0+YWRkU2FtcGxlKFdURk1vdmUobWVkaWFTYW1wbGUpLCBt
X2J5dGVTb3VyY2UuZ2V0KCkpOworICAgICAgICBtX3RyYWNrUmVhZGVyc1t0cmFja0luZGV4XS0+
YWRkU2FtcGxlKFdURk1vdmUobWVkaWFTYW1wbGVzKSwgbV9ieXRlU291cmNlLmdldCgpKTsKIH0K
IAotdm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6ZmluaXNoUGFyc2luZyhSZWY8U291cmNlQnVmZmVy
UGFyc2VyPiYmIHBhcnNlcikKK3ZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OmZpbmlzaFBhcnNpbmco
KQogewogICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKICAgICBBTFdBWVNfTE9HX0lGX1BP
U1NJQkxFKExPR0lERU5USUZJRVIpOwpAQCAtMjU4LDExICsyNTAsNiBAQCB2b2lkIE1lZGlhRm9y
bWF0UmVhZGVyOjpmaW5pc2hQYXJzaW5nKFJlZjxTb3VyY2VCdWZmZXJQYXJzZXI+JiYgcGFyc2Vy
KQogICAgICAgICBpZiAoZ3JlYXRlc3RQcmVzZW50YXRpb25UaW1lLmlzVmFsaWQoKSkKICAgICAg
ICAgICAgIG1fZHVyYXRpb24gPSBncmVhdGVzdFByZXNlbnRhdGlvblRpbWU7CiAgICAgfQotCi0g
ICAgcGFyc2VyLT5zZXREaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNrKG51bGxwdHIp
OwotICAgIHBhcnNlci0+c2V0RGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2so
bnVsbHB0cik7Ci0gICAgcGFyc2VyLT5zZXREaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2sobnVs
bHB0cik7Ci0gICAgcGFyc2VyLT5yZXNldFBhcnNlclN0YXRlKCk7CiB9CiAKIE9TU3RhdHVzIE1l
ZGlhRm9ybWF0UmVhZGVyOjpjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYga2V5LCBDRkFsbG9jYXRv
clJlZiBhbGxvY2F0b3IsIHZvaWQqIHZhbHVlQ29weSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVy
LmgKaW5kZXggMTVkNTU3MzYzMzgxNzQ2MGMyZTYyMDQ0MTkwMTAyM2NmODZiNGE5My4uMWE0OGMx
NjgwZTg3NWRjNjI1MjI4NzQxNWY1NDg4YzkyYzU4ODAyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmgKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0
UmVhZGVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVS
KQogCiAjaW5jbHVkZSAiQ29yZU1lZGlhV3JhcHBlZC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU291cmNlQnVmZmVyUHJp
dmF0ZUNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYv
TG9jay5oPgpAQCAtMzYsMTUgKzM3LDE1IEBACiBERUNMQVJFX0NPUkVfTUVESUFfVFJBSVRTKEZv
cm1hdFJlYWRlcik7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIE1lZGlhU2FtcGxlQVZG
T2JqQzsKLWNsYXNzIFNvdXJjZUJ1ZmZlclBhcnNlcjsKK2NsYXNzIE1lZGlhU2FtcGxlc0Jsb2Nr
OworY2xhc3MgV2ViTVBhcnNlcjsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE1l
ZGlhVHJhY2tSZWFkZXI7CiAKLWNsYXNzIE1lZGlhRm9ybWF0UmVhZGVyIGZpbmFsIDogcHVibGlj
IENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFGb3JtYXRSZWFkZXI+IHsKK2NsYXNzIE1lZGlhRm9ybWF0
UmVhZGVyIGZpbmFsIDogcHVibGljIENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFGb3JtYXRSZWFkZXI+
ICwgcHVibGljIFdlYkNvcmU6OldlYk1QYXJzZXI6OkNhbGxiYWNrIHsKIHB1YmxpYzoKICAgICB1
c2luZyBDb3JlTWVkaWFXcmFwcGVkPE1lZGlhRm9ybWF0UmVhZGVyPjo6dW53cmFwOwogCkBAIC02
NCwxMiArNjUsMTYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBleHBsaWNpdCBNZWRpYUZvcm1h
dFJlYWRlcihBbGxvY2F0b3ImJik7CiAKKyAgICAvLyBXZWJNUGFyc2VyOjpDYWxsYmFjaworICAg
IHZvaWQgcGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNl
cjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYpIGZpbmFsOworICAgIHZvaWQgcGFyc2VkTWVkaWFE
YXRhKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrJiYpIGZpbmFsOworCiAgICAgdm9pZCBwYXJz
ZUJ5dGVTb3VyY2UoUmV0YWluUHRyPE1UUGx1Z2luQnl0ZVNvdXJjZVJlZj4mJik7CiAgICAgdm9p
ZCBkaWRQYXJzZVRyYWNrcyhXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0
aWFsaXphdGlvblNlZ21lbnQmJiwgdWludDY0X3QgZXJyb3JDb2RlKTsKICAgICB2b2lkIGRpZFNl
bGVjdFZpZGVvVHJhY2soV2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGUmLCBib29sKSB7IH0KICAg
ICB2b2lkIGRpZEVuYWJsZUF1ZGlvVHJhY2soV2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGUmLCBi
b29sKSB7IH0KLSAgICB2b2lkIGRpZFByb3ZpZGVNZWRpYURhdGEoUmVmPFdlYkNvcmU6Ok1lZGlh
U2FtcGxlQVZGT2JqQz4mJiwgdWludDY0X3QsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgZmlu
aXNoUGFyc2luZyhSZWY8V2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyPiYmKTsKKyAgICB2b2lk
IGRpZFByb3ZpZGVNZWRpYURhdGEoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2smJik7CisgICAg
dm9pZCBmaW5pc2hQYXJzaW5nKCk7CiAKICAgICAvLyBDTUJhc2VDbGFzcwogICAgIFN0cmluZyBk
ZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIldlYktpdDo6TWVkaWFGb3Jt
YXRSZWFkZXIiX3M7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRp
YUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCmluZGV4
IDg5Yzc5MmZlNWQ0NWU0NTk4ODQxNDNmNTQ0MjkwMTZkNjcyYzRlNzUuLjc1NjI1MmM0MjFmNzc0
MDJkY2FlMzM1YjYyYzk1N2NmMDJjMWE0NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0
ZVJhbmdlLmNwcApAQCAtMzMsNTUgKzMzLDczIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotTWVkaWFTYW1wbGVCeXRlUmFuZ2U6Ok1lZGlhU2FtcGxl
Qnl0ZVJhbmdlKE1lZGlhU2FtcGxlJiBzYW1wbGUsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBieXRl
U291cmNlLCB1aW50NjRfdCB0cmFja0lEKQotICAgIDogbV9wcmVzZW50YXRpb25UaW1lKHNhbXBs
ZS5wcmVzZW50YXRpb25UaW1lKCkpCi0gICAgLCBtX2RlY29kZVRpbWUoc2FtcGxlLmRlY29kZVRp
bWUoKSkKLSAgICAsIG1fZHVyYXRpb24oc2FtcGxlLmR1cmF0aW9uKCkpCi0gICAgLCBtX2J5dGVS
YW5nZSgqc2FtcGxlLmJ5dGVSYW5nZSgpKQotICAgICwgbV90cmFja0lEKHRyYWNrSUQpCi0gICAg
LCBtX3NpemVJbkJ5dGVzKHNhbXBsZS5zaXplSW5CeXRlcygpKQotICAgICwgbV9wcmVzZW50YXRp
b25TaXplKHNhbXBsZS5wcmVzZW50YXRpb25TaXplKCkpCitNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6
TWVkaWFTYW1wbGVCeXRlUmFuZ2UoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGUsIE1UUGx1Z2lu
Qnl0ZVNvdXJjZVJlZiBieXRlU291cmNlKQorICAgIDogbV9ibG9jayhXVEZNb3ZlKHNhbXBsZSkp
CiAgICAgLCBtX2J5dGVTb3VyY2UoYnl0ZVNvdXJjZSkKLSAgICAsIG1fZmxhZ3Moc2FtcGxlLmZs
YWdzKCkpCiB7Ci0gICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOwotICAgIEFTU0VSVChtX2Rl
Y29kZVRpbWUgPT0gbV9wcmVzZW50YXRpb25UaW1lIHx8IG1fZGVjb2RlVGltZSA9PSBNZWRpYVRp
bWU6OmludmFsaWRUaW1lKCkpOwotICAgIGF1dG8gcGxhdGZvcm1TYW1wbGUgPSBzYW1wbGUucGxh
dGZvcm1TYW1wbGUoKTsKLSAgICBzd2l0Y2ggKHBsYXRmb3JtU2FtcGxlLnR5cGUpIHsKLSAgICBj
YXNlIFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZlclR5cGU6Ci0gICAgICAgIG1fZm9ybWF0
RGVzY3JpcHRpb24gPSBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24ocGxh
dGZvcm1TYW1wbGUuc2FtcGxlLmNtU2FtcGxlQnVmZmVyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQbGF0Zm9ybVNhbXBsZTo6Qnl0ZVJhbmdlU2FtcGxlVHlwZToKLSAgICAgICAgbV9mb3Jt
YXREZXNjcmlwdGlvbiA9IHBsYXRmb3JtU2FtcGxlLnNhbXBsZS5ieXRlUmFuZ2VTYW1wbGUuc2Vj
b25kOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIEFTU0VSVCghbV9ibG9jay5pc0Vt
cHR5KCkpOworICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPE1lZGlhU2FtcGxlOjpC
eXRlUmFuZ2U+KG1fYmxvY2subGFzdCgpLmRhdGEpKTsKIH0KIAogQXRvbVN0cmluZyBNZWRpYVNh
bXBsZUJ5dGVSYW5nZTo6dHJhY2tJRCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEF0b21TdHJpbmc6
Om51bWJlcihtX3RyYWNrSUQpOworICAgIHJldHVybiBBdG9tU3RyaW5nOjpudW1iZXIobV9ibG9j
ay5pbmZvKCktPnRyYWNrSUQpOwogfQogCiBQbGF0Zm9ybVNhbXBsZSBNZWRpYVNhbXBsZUJ5dGVS
YW5nZTo6cGxhdGZvcm1TYW1wbGUoKSBjb25zdAogeworICAgIEFTU0VSVChtX2Jsb2NrLmluZm8o
KSk7CiAgICAgcmV0dXJuIHsKICAgICAgICAgUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBs
ZVR5cGUsCi0gICAgICAgIHsgLmJ5dGVSYW5nZVNhbXBsZSA9IHN0ZDo6bWFrZV9wYWlyKG1fYnl0
ZVNvdXJjZS5nZXQoKSwgbV9mb3JtYXREZXNjcmlwdGlvbi5nZXQoKSkgfSwKKyAgICAgICAgeyAu
Ynl0ZVJhbmdlU2FtcGxlID0gc3RkOjptYWtlX3BhaXIobV9ieXRlU291cmNlLmdldCgpLCBzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyKCptX2Jsb2NrLmluZm8oKSkpIH0sCiAgICAgfTsKIH0KIAotdm9p
ZCBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6b2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGlt
ZSYgb2Zmc2V0KQorTWVkaWFUaW1lIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpwcmVzZW50YXRpb25U
aW1lKCkgY29uc3QKIHsKLSAgICBzZXRUaW1lc3RhbXBzKHByZXNlbnRhdGlvblRpbWUoKSArIG9m
ZnNldCwgZGVjb2RlVGltZSgpICsgb2Zmc2V0KTsKKyAgICByZXR1cm4gbV9ibG9jay5sYXN0KCku
cHJlc2VudGF0aW9uVGltZTsKIH0KIAotdm9pZCBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6c2V0VGlt
ZXN0YW1wcyhjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGNvbnN0IE1lZGlhVGlt
ZSYgZGVjb2RlVGltZSkKK01lZGlhVGltZSBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6ZGVjb2RlVGlt
ZSgpIGNvbnN0CiB7Ci0gICAgbV9wcmVzZW50YXRpb25UaW1lID0gcHJlc2VudGF0aW9uVGltZTsK
LSAgICBtX2RlY29kZVRpbWUgPSBkZWNvZGVUaW1lOworICAgIHJldHVybiBtX2Jsb2NrLmxhc3Qo
KS5kZWNvZGVUaW1lOworfQorCitNZWRpYVRpbWUgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmR1cmF0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ibG9jay5sYXN0KCkuZHVyYXRpb247Cit9CisK
K3NpemVfdCBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6c2l6ZUluQnl0ZXMoKSBjb25zdAoreworICAg
IHJldHVybiBzdGQ6OmdldDxNZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlPihtX2Jsb2NrLmxhc3QoKS5k
YXRhKS5ieXRlTGVuZ3RoOworfQorCitXZWJDb3JlOjpGbG9hdFNpemUgTWVkaWFTYW1wbGVCeXRl
UmFuZ2U6OnByZXNlbnRhdGlvblNpemUoKSBjb25zdAoreworICAgIGlmIChtX2Jsb2NrLmlzVmlk
ZW8oKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PGNvbnN0IFZpZGVvSW5mbz4obV9ibG9jay5p
bmZvKCkpLT5kaXNwbGF5U2l6ZTsKKyAgICByZXR1cm4geyB9OworfQorCitNZWRpYVNhbXBsZUJ5
dGVSYW5nZTo6U2FtcGxlRmxhZ3MgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmZsYWdzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gU2FtcGxlRmxhZ3ModWludDMyX3QobV9ibG9jay5sYXN0KCkuZmxhZ3Mp
IHwgTWVkaWFTYW1wbGU6Okhhc1N5bmNJbmZvKTsKK30KKworc3RkOjpvcHRpb25hbDxNZWRpYVNh
bXBsZUJ5dGVSYW5nZTo6Qnl0ZVJhbmdlPiBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6Ynl0ZVJhbmdl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjpnZXQ8TWVkaWFTYW1wbGU6OkJ5dGVSYW5nZT4o
bV9ibG9jay5sYXN0KCkuZGF0YSk7Cit9CisKK3ZvaWQgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6Om9m
ZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKQoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit2b2lkIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpzZXRUaW1lc3RhbXBzKGNv
bnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpCit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVC
eXRlUmFuZ2UuaAppbmRleCA1ZGEyODg1ZDQ1ZDE3ODg4MzYyMjkxN2U1ZTRhY2I5N2Y4ZWNhZTA3
Li4yMjViOTQ0MmE3OTIyNDZmNGU3Zjg0ODA2ZGExM2JhNTNiMWFkY2E1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRl
UmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFTYW1wbGVCeXRlUmFuZ2UuaApAQCAtMjcsMjcgKzI3LDI0IEBACiAKICNpZiBFTkFCTEUo
V0VCTV9GT1JNQVRfUkVBREVSKQogCi0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNhbXBsZUFWRk9i
akMuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL01lZGlhVG9vbGJveFNQSS5oPgotI2luY2x1
ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9NZWRpYVNhbXBsZS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3Mg
TWVkaWFTYW1wbGVCeXRlUmFuZ2UgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6TWVkaWFTYW1wbGUg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVCeXRlUmFuZ2U+IGNyZWF0ZShX
ZWJDb3JlOjpNZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNv
dXJjZSwgdWludDY0X3QgdHJhY2tJRCkKKyAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlQnl0ZVJh
bmdlPiBjcmVhdGUoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGUsIE1UUGx1Z2lu
Qnl0ZVNvdXJjZVJlZiBieXRlU291cmNlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTWVkaWFTYW1wbGVCeXRlUmFuZ2Uoc2FtcGxlLCBieXRlU291cmNlLCB0cmFja0lEKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhU2FtcGxlQnl0ZVJhbmdlKFdURk1v
dmUoc2FtcGxlKSwgYnl0ZVNvdXJjZSkpOwogICAgIH0KIAotICAgIE1lZGlhVGltZSBwcmVzZW50
YXRpb25UaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcmVzZW50YXRpb25UaW1lOyB9Ci0g
ICAgTWVkaWFUaW1lIGRlY29kZVRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2RlY29kZVRp
bWU7IH0KLSAgICBNZWRpYVRpbWUgZHVyYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2R1
cmF0aW9uOyB9Ci0gICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9zaXplSW5CeXRlczsgfQotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXpl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcmVzZW50YXRpb25TaXplOyB9Ci0gICAgU2FtcGxl
RmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZsYWdzOyB9Ci0gICAgc3RkOjpv
cHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYnl0
ZVJhbmdlOyB9CisgICAgTWVkaWFUaW1lIHByZXNlbnRhdGlvblRpbWUoKSBjb25zdCBmaW5hbDsK
KyAgICBNZWRpYVRpbWUgZGVjb2RlVGltZSgpIGNvbnN0IGZpbmFsOworICAgIE1lZGlhVGltZSBk
dXJhdGlvbigpIGNvbnN0IGZpbmFsOworICAgIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0IGZp
bmFsOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXplKCkgY29uc3QgZmlu
YWw7CisgICAgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbDsKKyAgICBzdGQ6Om9wdGlv
bmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgZmluYWw7CiAKICAgICBBdG9tU3RyaW5n
IHRyYWNrSUQoKSBjb25zdCBmaW5hbDsKICAgICBXZWJDb3JlOjpQbGF0Zm9ybVNhbXBsZSBwbGF0
Zm9ybVNhbXBsZSgpIGNvbnN0IGZpbmFsOwpAQCAtNTcsMTggKzU0LDEwIEBAIHB1YmxpYzoKICAg
ICBSZWY8TWVkaWFTYW1wbGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3QgeyByZXR1
cm4gKmNvbnN0X2Nhc3Q8TWVkaWFTYW1wbGVCeXRlUmFuZ2UqPih0aGlzKTsgfQogCiBwcml2YXRl
OgotICAgIE1lZGlhU2FtcGxlQnl0ZVJhbmdlKE1lZGlhU2FtcGxlJiwgTVRQbHVnaW5CeXRlU291
cmNlUmVmLCB1aW50NjRfdCB0cmFja0lEKTsKKyAgICBNZWRpYVNhbXBsZUJ5dGVSYW5nZShXZWJD
b3JlOjpNZWRpYVNhbXBsZXNCbG9jayYmLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYpOwogCi0gICAg
TWVkaWFUaW1lIG1fcHJlc2VudGF0aW9uVGltZTsKLSAgICBNZWRpYVRpbWUgbV9kZWNvZGVUaW1l
OwotICAgIE1lZGlhVGltZSBtX2R1cmF0aW9uOwotICAgIEJ5dGVSYW5nZSBtX2J5dGVSYW5nZTsK
LSAgICB1aW50NjRfdCBtX3RyYWNrSUQ7Ci0gICAgc2l6ZV90IG1fc2l6ZUluQnl0ZXM7Ci0gICAg
V2ViQ29yZTo6RmxvYXRTaXplIG1fcHJlc2VudGF0aW9uU2l6ZTsKKyAgICBjb25zdCBXZWJDb3Jl
OjpNZWRpYVNhbXBsZXNCbG9jayBtX2Jsb2NrOwogICAgIFJldGFpblB0cjxNVFBsdWdpbkJ5dGVT
b3VyY2VSZWY+IG1fYnl0ZVNvdXJjZTsKLSAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlv
blJlZj4gbV9mb3JtYXREZXNjcmlwdGlvbjsKLSAgICBTYW1wbGVGbGFncyBtX2ZsYWdzOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3BwIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcApp
bmRleCA2YWEwMjNjNjY1NjM0MzI1Yjc0OGJiM2Q3NTU4NjBkMDk0N2UwYjRlLi40ZDlkMDk2NWJl
NDQ4MDQxMGUxNmIxN2NlNGY2NWZmZjI0ZTc4ZGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1
cnNvci5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJNZWRpYVRyYWNrUmVhZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DTVV0aWxpdGllcy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTYW1wbGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nh
bXBsZU1hcC5oPgogI2luY2x1ZGUgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0
aW9uLmg+CkBAIC0zNjcsNyArMzY4LDcgQEAgT1NTdGF0dXMgTWVkaWFTYW1wbGVDdXJzb3I6OmNv
cHlGb3JtYXREZXNjcmlwdGlvbihDTUZvcm1hdERlc2NyaXB0aW9uUmVmKiBmb3JtYXQKIHsKICAg
ICByZXR1cm4gZ2V0TWVkaWFTYW1wbGUoWyZdKE1lZGlhU2FtcGxlJiBzYW1wbGUpIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzYW1wbGUucGxhdGZv
cm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlKTsK
LSAgICAgICAgKmZvcm1hdERlc2NyaXB0aW9uT3V0ID0gcmV0YWluUHRyKHNhbXBsZS5wbGF0Zm9y
bVNhbXBsZSgpLnNhbXBsZS5ieXRlUmFuZ2VTYW1wbGUuc2Vjb25kKS5sZWFrUmVmKCk7CisgICAg
ICAgICpmb3JtYXREZXNjcmlwdGlvbk91dCA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRy
YWNrSW5mbyhzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNl
Y29uZCkubGVha1JlZigpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5j
cHAKaW5kZXggZjA0YzU5MDZmMWExNmZiM2RmNzhiZDQzODI4YzBkYzZkOGRlYjYxYS4uNDcyNGVj
OGRhM2ZkMjMwN2NiNjU3OWVjMGUwNWExNDY5OTA2NmVhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNr
UmVhZGVyLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIk1lZGlhU2FtcGxlQnl0ZVJh
bmdlLmgiCiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVDdXJzb3IuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L0F1ZGlvVHJhY2tQcml2YXRlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9DTVV0aWxpdGllcy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvTWVkaWFEZXNjcmlwdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2FtcGxlTWFwLmg+
CkBAIC05NywxNSArOTgsMTcgQEAgTWVkaWFUaW1lIE1lZGlhVHJhY2tSZWFkZXI6OmdyZWF0ZXN0
UHJlc2VudGF0aW9uVGltZSgpIGNvbnN0CiAgICAgcmV0dXJuIGxhc3RTYW1wbGUucHJlc2VudGF0
aW9uVGltZSgpICsgbGFzdFNhbXBsZS5kdXJhdGlvbigpOwogfQogCi12b2lkIE1lZGlhVHJhY2tS
ZWFkZXI6OmFkZFNhbXBsZShSZWY8TWVkaWFTYW1wbGU+JiYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVT
b3VyY2VSZWYgYnl0ZVNvdXJjZSkKK3ZvaWQgTWVkaWFUcmFja1JlYWRlcjo6YWRkU2FtcGxlKE1l
ZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJj
ZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAgICAgTG9ja2VyIGxvY2tlciB7
IG1fc2FtcGxlU3RvcmFnZUxvY2sgfTsKICAgICBpZiAoIW1fc2FtcGxlU3RvcmFnZSkKICAgICAg
ICAgbV9zYW1wbGVTdG9yYWdlID0gbWFrZVVuaXF1ZTxTYW1wbGVTdG9yYWdlPigpOwogCi0gICAg
QVNTRVJUKCFzYW1wbGUtPmlzRGl2aXNhYmxlKCkgJiYgc2FtcGxlLT5ieXRlUmFuZ2UoKSk7Ci0g
ICAgYXV0byBzYW1wbGVUb0FkZCA9IE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpjcmVhdGUoc2FtcGxl
LmdldCgpLCBieXRlU291cmNlLCBtX3RyYWNrSUQpOworICAgIEFTU0VSVCghc2FtcGxlLmlzRW1w
dHkoKSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8TWVkaWFTYW1wbGU6OkJ5
dGVSYW5nZT4oc2FtcGxlLmxhc3QoKS5kYXRhKSk7CisKKyAgICBhdXRvIHNhbXBsZVRvQWRkID0g
TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmNyZWF0ZShXVEZNb3ZlKHNhbXBsZSksIGJ5dGVTb3VyY2Up
OwogCiAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIFdlYk0gbXV4ZXIgZ3VpZGVsaW5lcyBzYXkg
dGhpcyBtdXN0IG5vdCBoYXBwZW4sIHNvbWUgdmlkZW8gdHJhY2tzIGhhdmUgdHdvCiAgICAgLy8g
Y29uc2VjdXRpdmUgZnJhbWVzIHdpdGggdGhlIHNhbWUgcHJlc2VudGF0aW9uIHRpbWUuIFNhbXBs
ZU1hcCB3aWxsIG5vdCBzdG9yZSB0aGUgc2Vjb25kIGZyYW1lCkBAIC0xODUsNyArMTg4LDE1IEBA
IE9TU3RhdHVzIE1lZGlhVHJhY2tSZWFkZXI6OmNvcHlQcm9wZXJ0eShDRlN0cmluZ1JlZiBrZXks
IENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvCiAKICAgICBpZiAoQ0ZFcXVhbChrZXksIFBBTDo6Z2V0
X01lZGlhVG9vbGJveF9rTVRQbHVnaW5UcmFja1JlYWRlclByb3BlcnR5X0Zvcm1hdERlc2NyaXB0
aW9uQXJyYXkoKSkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihsYXN0U2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNhbXBs
ZTo6Qnl0ZVJhbmdlU2FtcGxlVHlwZSk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGRlc2NyaXB0aW9u
c1sxXSA9IHsgbGFzdFNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5ieXRlUmFuZ2VTYW1w
bGUuc2Vjb25kIH07CisgICAgICAgIGNvbnN0IFRyYWNrSW5mbyYgdHJhY2tJbmZvID0gbGFzdFNh
bXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5ieXRlUmFuZ2VTYW1wbGUuc2Vjb25kOworICAg
ICAgICBpZiAoIW1fdHJhY2tJbmZvKSB7CisgICAgICAgICAgICBtX3RyYWNrSW5mbyA9ICZsYXN0
U2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5zZWNvbmQuZ2V0
KCk7CisgICAgICAgICAgICBtX2Zvcm1hdERlc2NyaXB0aW9uID0gV2ViQ29yZTo6Y3JlYXRlRm9y
bWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKCptX3RyYWNrSW5mbyk7CisgICAgICAgIH0gZWxz
ZSBpZiAoKm1fdHJhY2tJbmZvICE9IHRyYWNrSW5mbykgeworICAgICAgICAgICAgbV90cmFja0lu
Zm8gPSAmdHJhY2tJbmZvOworICAgICAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlvbiA9IFdlYkNv
cmU6OmNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRyYWNrSW5mbygqbV90cmFja0luZm8pOwor
ICAgICAgICB9CisgICAgICAgIGNvbnN0IHZvaWQqIGRlc2NyaXB0aW9uc1sxXSA9IHsgbV9mb3Jt
YXREZXNjcmlwdGlvbi5nZXQoKSB9OwogICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxDRkFycmF5
UmVmKj4oY29waWVkVmFsdWUpID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlKGFsbG9jYXRvciwgZGVz
Y3JpcHRpb25zLCAxLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSkubGVha1JlZigpOwogICAgICAg
ICByZXR1cm4gbm9FcnI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuaCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmgKaW5kZXggMTIw
NWJjMjZkYWZlZTdkZDRmZGNhN2M4NjYzODE4ZmQ4Zjg5NzQyYy4uZGQyNWZjM2RiNzJjZTg2Zjhl
ZTc0ZTFjNGRjYzhkOWU4YzQ3MmYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5oCkBAIC00
MSw3ICs0MSw3IEBAIGNsYXNzIFdvcmtRdWV1ZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEF1ZGlvVHJhY2tQcml2YXRlOwogY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTsKLWNsYXNz
IE1lZGlhU2FtcGxlOworY2xhc3MgTWVkaWFTYW1wbGVzQmxvY2s7CiBjbGFzcyBUcmFja1ByaXZh
dGVCYXNlOwogY2xhc3MgVmlkZW9UcmFja1ByaXZhdGU7CiB9CkBAIC02NSw3ICs2NSw3IEBAIHB1
YmxpYzoKICAgICBNZWRpYVRpbWUgZ3JlYXRlc3RQcmVzZW50YXRpb25UaW1lKCkgY29uc3Q7CiAK
ICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1faXNFbmFibGVkID0gZW5hYmxl
ZCA/IEVuYWJsZWQ6OlRydWUgOiBFbmFibGVkOjpGYWxzZTsgfQotICAgIHZvaWQgYWRkU2FtcGxl
KFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4mJiwgTVRQbHVnaW5CeXRlU291cmNlUmVmKTsKKyAg
ICB2b2lkIGFkZFNhbXBsZShXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jayYmLCBNVFBsdWdpbkJ5
dGVTb3VyY2VSZWYpOwogICAgIHZvaWQgd2FpdEZvclNhbXBsZShGdW5jdGlvbjxib29sKFdlYkNv
cmU6OlNhbXBsZU1hcCYsIGJvb2wpPiYmKSBjb25zdDsKICAgICB2b2lkIGZpbmlzaFBhcnNpbmco
KTsKIApAQCAtMTExLDYgKzExMSw4IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8U2FtcGxlU3RvcmFnZT4gbV9zYW1wbGVTdG9yYWdlIFdURl9HVUFSREVEX0JZX0xPQ0so
bV9zYW1wbGVTdG9yYWdlTG9jayk7CiAgICAgUmVmPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7CiAg
ICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyOworICAgIFJldGFpblB0cjxDTUZvcm1hdERl
c2NyaXB0aW9uUmVmPiBtX2Zvcm1hdERlc2NyaXB0aW9uOworICAgIFJlZlB0cjxjb25zdCBXZWJD
b3JlOjpUcmFja0luZm8+IG1fdHJhY2tJbmZvOwogfTsKIAogY29uc3RleHByIE1lZGlhVHJhY2tS
ZWFkZXI6OldyYXBwZXJDbGFzcyBNZWRpYVRyYWNrUmVhZGVyOjp3cmFwcGVyQ2xhc3MoKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGMzODhiYTgy
Y2IxYmRlYzYyOGJkODlkMDAxNzE0OTgyNDVhZTEyYzMuLjg1OGZhNTRhOTk4MTNkZGMyNjA2ZDdk
MjJmOTU2YWFjY2Q4Y2E0MDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0wMy0wOCAgSmVhbi1ZdmVzIEF2ZW5h
cmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIEhhdmUgTWVkaWFGb3JtYXRSZWFkZXIgcGx1
Z2luIHVzZSBXZWJNUGFyc2VyIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1OTQKKyAgICAgICAgcmRhcjovLzg5OTYwMzA3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNwcDoKKwogMjAyMi0wMy0wNSAgSmVhbi1ZdmVz
IEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgogCiAgICAgICAgIFNwbGl0IFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk0gYW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBsZU1hcC5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNwcAppbmRleCA3MTIwNThh
MzY4ODg3NzZiMTc3OGU0ZGNkOWQ4YTkwYzAyMDZhZWE4Li5lZGVlMzEyYmNlMjNjMWFmMDNiZTBh
ZjBiNjJiZDI2M2JmNTMwYzA1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvU2FtcGxlTWFwLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvU2FtcGxlTWFwLmNwcApAQCAtNzAsNyArNzAsNiBAQCBwdWJsaWM6CiAgICAgU2FtcGxl
RmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZsYWdzOyB9CiAgICAgUGxhdGZv
cm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IFBsYXRmb3Jt
U2FtcGxlOjpOb25lLCB7IG51bGxwdHIgfSB9OyB9CiAgICAgUGxhdGZvcm1TYW1wbGU6OlR5cGUg
cGxhdGZvcm1TYW1wbGVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gUGxhdGZvcm1TYW1wbGU6
Ok5vbmU7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdCBmaW5hbCB7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454107</attachid>
            <date>2022-03-08 05:15:47 -0800</date>
            <delta_ts>2022-03-08 16:35:29 -0800</delta_ts>
            <desc>Patch for review</desc>
            <filename>bug-237594-20220309001545.patch</filename>
            <type>text/plain</type>
            <size>49693</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwOTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQ1N2IwZjM4MGYyZGRl
YTE0YWI0M2E1MGQwYzA2ZDkyNzQ0MTBjYy4uNmFhMTUyMGM5ZmIzMWExZmRiMmRlNmQ3YzQwODc0
OTNiN2Q1NTNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIyLTAzLTA4ICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBNZWRpYUZvcm1h
dFJlYWRlciBwbHVnaW4gdXNlIFdlYk1QYXJzZXIgZGlyZWN0bHkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzU5NAorICAgICAgICByZGFyOi8vODk5
NjAzMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
b3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1w
bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpieXRlUmFuZ2UgY29uc3QpOiBI
YXZlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogcGxhdGZvcm0vVmlkZW9GcmFt
ZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vVmlkZW9GcmFtZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJBVkZPYmpDU2FtcGxlOjpieXRlUmFuZ2VGb3JB
dHRhY2htZW50IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaDogRXhwb3J0IHN5bWJvbHMuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpjcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uVHJhY2tFbnRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1l
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpwcm92aWRlTWVkaWFEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZE1lZGlhRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpyZXR1cm5TYW1w
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVu
ZGluZ0F1ZGlvU2FtcGxlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJh
Y2tEYXRhOjpjcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6ZHJhaW5QZW5kaW5nU2FtcGxlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHA6CisK
IDIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGlj
IFdlYk1QYXJzZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTExZDBhNTEwMjA3YTZkMmQ5ZjViMWYwMmNiYjc0OWUx
NTU1NDhhYS4uNWQ2OTA3N2Y1ZmJlMTNkMWYzMWNjNTAxYmEwNmUzN2Q1NzBiMTVkZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTc5NCw3ICs3OTQsOCBAQAogICAgICAgICAqIFNjcmlwdHMvdXBkYXRlLWR5bGQtZW52
aXJvbm1lbnQtbG9hZC1jb21tYW5kOiBBZGRlZC4KICAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
OiBBZGRlZC4KICAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L21hY2hfby5weTogQWRkZWQuCi0g
ICAgICAgIChfdXRmOF9ieXRlc190b19zdHIpOgorICAgICAgICAKKyAgICAgICAgKF91dGY4X2J5
dGVzX3RvX3N0cik6IHVuZm9ydHVuYXRlbHkgZG9lc24ndCBhbGxvdyB0byBza2lwIGEgZ2l2ZW4g
bnVtYmVyCiAgICAgICAgIChfbWFjaF9vX2ludF9maWVsZCk6CiAgICAgICAgIChfbWFjaF9vX2lu
dF9maWVsZC5fZ2V0X21hY2hfb19pbnRfZmllbGQpOgogICAgICAgICAoX21hY2hfb19pbnRfZmll
bGQuX3NldF9tYWNoX29faW50X2ZpZWxkKToKQEAgLTg0Nyw3ICs4NDgsOCBAQAogICAgICAgICAo
TWFjaE9IZWFkZXI2NExFLl9faW5pdF9fKToKICAgICAgICAgKE1hY2hPRmlsZSk6CiAgICAgICAg
IChNYWNoT0ZpbGUuX19pbml0X18pOgotICAgICAgICAoaXNfbWFjaG9fYnl0ZXMpOgorICAgICAg
ICAKKyAgICAgICAgKGlzX21hY2hvX2J5dGVzKTogdW5mb3J0dW5hdGVseSBkb2Vzbid0IGFsbG93
IHRvIHNraXAgYSBnaXZlbiBudW1iZXIKICAgICAgICAgKGlzX21hY2hvX2ZpbGUpOgogICAgICAg
ICAoZW51bWVyYXRlX21hY2hvX2ZpbGVzKToKICAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKQEAgLTI1OTEsNyArMjU5Myw4IEBACiAgICAgICAgIFVwZGF0ZSBjb2Rl
IGJhc2UgdG8gcmVmbGVjdCBTZXJpYWxpemVkU2NyaXB0VmFsdWUgQVBJIGNoYW5nZXMuCiAKICAg
ICAgICAgKiBTaGFyZWQvQVBJL0FQSVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOgotICAgICAgICAo
QVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMpOgorICAgICAg
ICAoQVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUKKyAgICAgICAgOjpjcmVhdGVGcm9tV2lyZUJ5
dGVzKTogdW5mb3J0dW5hdGVseSBkb2Vzbid0IGFsbG93IHRvIHNraXAgYSBnaXZlbiBudW1iZXIK
ICAgICAgICAgKEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkYXRhUmVmZXJlbmNlIGNvbnN0
KToKICAgICAgICAgKEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjphZG9wdCk6IERlbGV0ZWQu
CiAgICAgICAgICogU2hhcmVkL1Nlc3Npb25TdGF0ZS5jcHA6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TWVkaWFTYW1wbGUuaAppbmRleCBhMTI4MjczYTU3NmY4M2JmYWUxN2I1NzI4MDgxNTI0ZjZkYmE1
MjMzLi5hZDZmODU2ZWRhZmRmZDkyMTczNGQzMzcxODEwN2NjYzczNTg2NDAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJQ
bGF0Zm9ybVZpZGVvQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8ZnVuY3Rpb25h
bD4KICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KQEAgLTQ3LDYgKzQ4LDcg
QEAgY2xhc3MgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIE1vY2tTYW1wbGVCb3g7CiBj
bGFzcyBQcm9jZXNzSWRlbnRpdHk7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CitzdHJ1Y3QgVHJhY2tJ
bmZvOwogCiBzdHJ1Y3QgUGxhdGZvcm1TYW1wbGUgewogICAgIGVudW0gVHlwZSB7CkBAIC02MSw3
ICs2Myw3IEBAIHN0cnVjdCBQbGF0Zm9ybVNhbXBsZSB7CiAgICAgICAgIGNvbnN0IE1vY2tTYW1w
bGVCb3gqIG1vY2tTYW1wbGVCb3g7CiAgICAgICAgIENNU2FtcGxlQnVmZmVyUmVmIGNtU2FtcGxl
QnVmZmVyOwogICAgICAgICBHc3RTYW1wbGUqIGdzdFNhbXBsZTsKLSAgICAgICAgc3RkOjpwYWly
PE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZj4gYnl0ZVJhbmdl
U2FtcGxlOworICAgICAgICBzdGQ6OnBhaXI8TVRQbHVnaW5CeXRlU291cmNlUmVmLCBzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPGNvbnN0IFRyYWNrSW5mbz4+IGJ5dGVSYW5nZVNhbXBsZTsKICAgICB9
IHNhbXBsZTsKIH07CiAKQEAgLTEwNyw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVf
dCBieXRlT2Zmc2V0IHsgMCB9OwogICAgICAgICBzaXplX3QgYnl0ZUxlbmd0aCB7IDAgfTsKICAg
ICB9OwotICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2Uo
KSBjb25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KIAogICAgIGVudW0gY2xhc3MgVmlkZW9S
b3RhdGlvbiB7CiAgICAgICAgIE5vbmUgPSAwLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVmlkZW9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0Zy
YW1lLmNwcAppbmRleCBhMjIxOGM1ZGQ3NDFmZmM0Njg4NTc3MWVkZDUxOTRiYzMxMmE3ZmRjLi4x
NGNiNzBkMTcwYTA3MjFjMTdlYmYzZjE4ZDZkNDg0MTU3Zjc4NzFkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcApAQCAtMTA4LDEzICsxMDgsNiBAQCBNZWRpYVNhbXBsZTo6
U2FtcGxlRmxhZ3MgVmlkZW9GcmFtZTo6ZmxhZ3MoKSBjb25zdAogICAgIHJldHVybiBNZWRpYVNh
bXBsZTo6U2FtcGxlRmxhZ3M6Ok5vbmU7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8TWVkaWFTYW1wbGU6
OkJ5dGVSYW5nZT4gVmlkZW9GcmFtZTo6Ynl0ZVJhbmdlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhN
RTogUmVtb3ZlIGZyb20gdGhlIGJhc2UgY2xhc3MuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLX0KLQogdm9pZCBWaWRlb0ZyYW1lOjpkdW1wKFBy
aW50U3RyZWFtJikgY29uc3QKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1ZpZGVvRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaApp
bmRleCAyMjg1ZThhYzdiZjAyMTQyZjkyYTkxZjc4MGU3NTkxMDI0MmFhNmIxLi5kOTY3NGNlNzQw
NTRiY2Q3NDg4ZWFlZGQyZjEyODIyMjg0NmIxZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlk
ZW9GcmFtZS5oCkBAIC03NCw3ICs3NCw2IEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIGZp
bmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4gY3JlYXRl
Tm9uRGlzcGxheWluZ0NvcHkoKSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCBTYW1w
bGVGbGFncyBmbGFncygpIGNvbnN0IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6b3B0
aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbDsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0lt
YWdlRGVjb2RlckFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tCmluZGV4IGFkN2Y0NTEwMWMw
NmExODg4YzAwOGZhZWQ0YTkxOTA1NjEzODI5M2IuLjYyMGEzYmU2MmFiODQ1MGY3ZTM4NjQ0ODQ2
Zjc5ODkxMjM4ODFmMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVy
QVZGT2JqQy5tbQpAQCAtNTMsNiArNTMsNyBAQAogI2ltcG9ydCA8d3RmL01lZGlhVGltZS5oPgog
I2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+Cisj
aW1wb3J0IDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KIAogI2ltcG9ydCAiQ29yZVZpZGVvU29mdExp
bmsuaCIKICNpbXBvcnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgiCkBAIC0yNzIsNiArMjczLDI2
IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAorICAgIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdl
PiBieXRlUmFuZ2VGb3JBdHRhY2htZW50KENGU3RyaW5nUmVmIGtleSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGF1dG8gYnl0ZU9mZnNldENGID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihQ
QUw6OkNNR2V0QXR0YWNobWVudChtX3NhbXBsZS5nZXQoKSwga2V5LCBudWxscHRyKSk7CisgICAg
ICAgIGlmICghYnl0ZU9mZnNldENGKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgICAgICBpbnQ2NF90IGJ5dGVPZmZzZXQgPSAwOworICAgICAgICBpZiAoIUNGTnVtYmVy
R2V0VmFsdWUoYnl0ZU9mZnNldENGLCBrQ0ZOdW1iZXJTSW50NjRUeXBlLCAmYnl0ZU9mZnNldCkp
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIENNSXRlbUNvdW50
IHNpemVBcnJheUVudHJpZXMgPSAwOworICAgICAgICBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0U2Ft
cGxlU2l6ZUFycmF5KG1fc2FtcGxlLmdldCgpLCAwLCBudWxscHRyLCAmc2l6ZUFycmF5RW50cmll
cyk7CisgICAgICAgIGlmIChzaXplQXJyYXlFbnRyaWVzICE9IDEpCisgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIHNpemVfdCBzaW5nbGVTaXplRW50cnkgPSAwOwor
ICAgICAgICBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlU2l6ZUFycmF5KG1fc2FtcGxlLmdl
dCgpLCAxLCAmc2luZ2xlU2l6ZUVudHJ5LCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIHsgeyBD
aGVja2VkU2l6ZShieXRlT2Zmc2V0KSwgc2luZ2xlU2l6ZUVudHJ5IH0gfTsKKyAgICB9CisKICAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9pbWFnZTsKICAgICBib29sIG1faGFzQWxwaGEgeyBm
YWxzZSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmgK
aW5kZXggMDI1ZDBkMzQ0ZjNhZWE0MjhhNmVkODc2ODY4OGNjYWJmZDM3YTMyZC4uODdmYWM4NTEz
ZjY0NWNjMGQxMjVmYWFmNDM2ZmM2OWNiMDBlZjkzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFTYW1wbGVBVkZPYmpDLmgKQEAgLTY0LDcgKzY0LDYgQEAgcHVibGljOgogICAgIFNh
bXBsZUZsYWdzIGZsYWdzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUGxhdGZvcm1TYW1wbGUgcGxh
dGZvcm1TYW1wbGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBQbGF0Zm9ybVNhbXBsZTo6VHlwZSBw
bGF0Zm9ybVNhbXBsZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQbGF0Zm9ybVNhbXBs
ZTo6Q01TYW1wbGVCdWZmZXJUeXBlOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5
dGVSYW5nZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5KGNv
bnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25zdCBN
ZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGlzRGl2aXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC04Miw4ICs4MSw2IEBAIHB1
YmxpYzoKICAgICBib29sIGlzSG9tb2dlbmVvdXMoKSBjb25zdDsKICAgICBWZWN0b3I8UmVmPE1l
ZGlhU2FtcGxlQVZGT2JqQz4+IGRpdmlkZUludG9Ib21vZ2VuZW91c1NhbXBsZXMoKTsKIAotICAg
IHZvaWQgc2V0Qnl0ZVJhbmdlT2Zmc2V0KHNpemVfdCk7Ci0KICNpZiBFTkFCTEUoRU5DUllQVEVE
X01FRElBKSAmJiBIQVZFKEFWQ09OVEVOVEtFWVNFU1NJT04pCiAgICAgdXNpbmcgS2V5SURzID0g
VmVjdG9yPFJlZjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPj47CiAgICAgdm9pZCBzZXRLZXlJRHMo
S2V5SURzJiYga2V5SURzKSB7IG1fa2V5SURzID0gV1RGTW92ZShrZXlJRHMpOyB9CkBAIC0xMDEs
OCArOTgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgV0VCQ09SRV9FWFBPUlQgTWVkaWFTYW1wbGVBVkZP
YmpDKENNU2FtcGxlQnVmZmVyUmVmLCBWaWRlb1JvdGF0aW9uLCBib29sIG1pcnJvcmVkKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5NZWRpYVNhbXBsZUFWRk9iakMoKTsKIAotICAgIHN0
ZDo6b3B0aW9uYWw8TWVkaWFTYW1wbGU6OkJ5dGVSYW5nZT4gYnl0ZVJhbmdlRm9yQXR0YWNobWVu
dChDRlN0cmluZ1JlZiBrZXkpIGNvbnN0OwotCiAgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVy
UmVmPiBtX3NhbXBsZTsKICAgICBBdG9tU3RyaW5nIG1faWQ7CiAgICAgVmlkZW9Sb3RhdGlvbiBt
X3JvdGF0aW9uIHsgVmlkZW9Sb3RhdGlvbjo6Tm9uZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZP
YmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCmluZGV4IDljYWQ4OWQxYzc2YzljYzExOGI0NzEyMmE1
NmNiZDU3YTEzMTJkNGUuLjVkNjZhMDQyNmIwNGFhZWNkNjU3N2RlY2MzNDZiNzcwNzBkZmVmNTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KQEAgLTUw
NSw0NCArNTA1LDYgQEAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBNZWRpYVNhbXBsZUFW
Rk9iakM6OmNsb25lU2FtcGxlQnVmZmVyQW5kU2V0QXNEaXNwbGEKICAgICByZXR1cm4gYWRvcHRD
RihuZXdTYW1wbGVCdWZmZXIpOwogfQogCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgYnl0ZVJhbmdlT2Zm
c2V0QXR0YWNobWVudEtleSgpCi17Ci0gICAgc3RhdGljIENGU3RyaW5nUmVmIGtleSA9IENGU1RS
KCJXZWJLaXRNZWRpYVNhbXBsZUJ5dGVSYW5nZU9mZnNldCIpOwotICAgIHJldHVybiBrZXk7Ci19
Ci0KLXN0ZDo6b3B0aW9uYWw8TWVkaWFTYW1wbGU6OkJ5dGVSYW5nZT4gTWVkaWFTYW1wbGVBVkZP
YmpDOjpieXRlUmFuZ2UoKSBjb25zdAotewotICAgIHJldHVybiBieXRlUmFuZ2VGb3JBdHRhY2ht
ZW50KGJ5dGVSYW5nZU9mZnNldEF0dGFjaG1lbnRLZXkoKSk7Ci19Ci0KLXZvaWQgTWVkaWFTYW1w
bGVBVkZPYmpDOjpzZXRCeXRlUmFuZ2VPZmZzZXQoc2l6ZV90IGJ5dGVPZmZzZXQpCi17Ci0gICAg
aW50NjRfdCBjaGVja2VkT2Zmc2V0ID0gQ2hlY2tlZEludDY0KGJ5dGVPZmZzZXQpOwotICAgIGF1
dG8gb2Zmc2V0TnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBrQ0ZOdW1iZXJTSW50NjRUeXBlLCAmY2hlY2tlZE9mZnNldCkpOwotICAgIFBBTDo6Q01T
ZXRBdHRhY2htZW50KG1fc2FtcGxlLmdldCgpLCBieXRlUmFuZ2VPZmZzZXRBdHRhY2htZW50S2V5
KCksIG9mZnNldE51bWJlci5nZXQoKSwga0NNQXR0YWNobWVudE1vZGVfU2hvdWxkUHJvcGFnYXRl
KTsKLX0KLQotc3RkOjpvcHRpb25hbDxNZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlPiBNZWRpYVNhbXBs
ZUFWRk9iakM6OmJ5dGVSYW5nZUZvckF0dGFjaG1lbnQoQ0ZTdHJpbmdSZWYga2V5KSBjb25zdAot
ewotICAgIGF1dG8gYnl0ZU9mZnNldENGID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihQ
QUw6OkNNR2V0QXR0YWNobWVudChtX3NhbXBsZS5nZXQoKSwga2V5LCBudWxscHRyKSk7Ci0gICAg
aWYgKCFieXRlT2Zmc2V0Q0YpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBp
bnQ2NF90IGJ5dGVPZmZzZXQgPSAwOwotICAgIGlmICghQ0ZOdW1iZXJHZXRWYWx1ZShieXRlT2Zm
c2V0Q0YsIGtDRk51bWJlclNJbnQ2NFR5cGUsICZieXRlT2Zmc2V0KSkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLQotICAgIENNSXRlbUNvdW50IHNpemVBcnJheUVudHJpZXMgPSAwOwot
ICAgIFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVTaXplQXJyYXkobV9zYW1wbGUuZ2V0KCks
IDAsIG51bGxwdHIsICZzaXplQXJyYXlFbnRyaWVzKTsKLSAgICBpZiAoc2l6ZUFycmF5RW50cmll
cyAhPSAxKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc2l6ZV90IHNpbmds
ZVNpemVFbnRyeSA9IDA7Ci0gICAgUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVNpemVBcnJh
eShtX3NhbXBsZS5nZXQoKSwgMSwgJnNpbmdsZVNpemVFbnRyeSwgbnVsbHB0cik7Ci0gICAgcmV0
dXJuIHsgeyBDaGVja2VkU2l6ZShieXRlT2Zmc2V0KSwgc2luZ2xlU2l6ZUVudHJ5IH0gfTsKLX0K
LQogQ1ZQaXhlbEJ1ZmZlclJlZiBNZWRpYVNhbXBsZUFWRk9iakM6OnBpeGVsQnVmZmVyKCkgY29u
c3QKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oUEFMOjpDTVNh
bXBsZUJ1ZmZlckdldEltYWdlQnVmZmVyKG1fc2FtcGxlLmdldCgpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaAppbmRleCBh
ZTM5M2UwYjJkMDE3Y2Q0YzlhZGQ3ZDU0YmViZjViMjljNGMyZGVmLi5hYjcxYjg3ZmY2M2VkMzM4
ZDk1ZmNkZjZiMmRkMjRmNDgzNzcwMzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKQEAgLTQxLDcgKzQxLDcgQEAgc3Ry
dWN0IFRyYWNrSW5mbzsKIFdFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0
aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8oY29uc3QgVHJhY2tJ
bmZvJik7CiAvLyBDb252ZXJ0IE1lZGlhU2FtcGxlc0Jsb2NrIHRvIHRoZSBlcXVpdmFsZW50IENN
U2FtcGxlQnVmZmVyUmVmLiBJZiBDTUZvcm1hdERlc2NyaXB0aW9uUmVmCiAvLyBpcyBzZXQgaXQg
d2lsbCBiZSB1c2VkLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBjcmVhdGVkIGZyb20gdGhlIE1lZGlh
U2FtcGxlc0Jsb2NrJ3MgVHJhY2tJbmZvLgotV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8UmV0YWlu
UHRyPENNU2FtcGxlQnVmZmVyUmVmPiwgQ1N0cmluZz4gdG9DTVNhbXBsZUJ1ZmZlcihNZWRpYVNh
bXBsZXNCbG9jayYmLCBDTUZvcm1hdERlc2NyaXB0aW9uUmVmKTsKK1dFQkNPUkVfRVhQT1JUIEV4
cGVjdGVkPFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4sIENTdHJpbmc+IHRvQ01TYW1wbGVC
dWZmZXIoTWVkaWFTYW1wbGVzQmxvY2smJiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiA9IG51bGxw
dHIpOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKaW5kZXggOTRiYjJl
ZDZjNTZlNzg0NTEwZDJmNDFlMjc4YjhjYTM5OThmM2IwZi4uZTFhNjQ3Y2FhYTBkNGNlNjZlNDc0
MzNkN2YxNzk2MWIyOGY5NDI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAK
QEAgLTUzNiw5ICs1MzYsNyBAQCBXZWJNUGFyc2VyOjpXZWJNUGFyc2VyKENhbGxiYWNrJiBjYWxs
YmFjaykKIHsKIH0KIAotV2ViTVBhcnNlcjo6fldlYk1QYXJzZXIoKQotewotfQorV2ViTVBhcnNl
cjo6fldlYk1QYXJzZXIoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgV2ViTVBhcnNlcjo6cmVzZXRTdGF0
ZSgpCiB7CkBAIC01NjAsNiArNTU4LDEzIEBAIHZvaWQgV2ViTVBhcnNlcjo6cmVzZXQoKQogICAg
IG1fcGFyc2VyLT5EaWRTZWVrKCk7CiB9CiAKK3ZvaWQgV2ViTVBhcnNlcjo6Y3JlYXRlQnl0ZVJh
bmdlU2FtcGxlcygpCit7CisgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdHJhY2tzKQorICAgICAg
ICB0cmFjay0+Y3JlYXRlQnl0ZVJhbmdlU2FtcGxlcygpOworICAgIG1fY3JlYXRlQnl0ZVJhbmdl
U2FtcGxlcyA9IHRydWU7Cit9CisKIEV4Y2VwdGlvbk9yPGludD4gV2ViTVBhcnNlcjo6cGFyc2Uo
U291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50JiYgc2VnbWVudCkKIHsKICAgICBpZiAoIW1fcGFy
c2VyKQpAQCAtODUxLDMyICs4NTYsMzAgQEAgU3RhdHVzIFdlYk1QYXJzZXI6Ok9uVHJhY2tFbnRy
eShjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBUcmFja0VudHJ5JiB0cmFja0UKICAgICB9
CiAKICAgICBTdHJpbmdWaWV3IGNvZGVjU3RyaW5nIHsgdHJhY2tFbnRyeS5jb2RlY19pZC52YWx1
ZSgpLmRhdGEoKSwgKHVuc2lnbmVkKXRyYWNrRW50cnkuY29kZWNfaWQudmFsdWUoKS5sZW5ndGgo
KSB9OworICAgIGF1dG8gdHJhY2sgPSBbJl0oKSAtPiBVbmlxdWVSZWY8VHJhY2tEYXRhPiB7CiAj
aWYgRU5BQkxFKFZQOSkKLSAgICBpZiAoY29kZWNTdHJpbmcgPT0gIlZfVlA5IiAmJiBpc1ZQOURl
Y29kZXJBdmFpbGFibGUoKSkgewotICAgICAgICBtX3RyYWNrcy5hcHBlbmQoVmlkZW9UcmFja0Rh
dGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZQOSwgdHJhY2tFbnRyeSwgKnRoaXMpKTsKLSAgICAgICAg
cmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7Ci0gICAgfQotICAgIGlmIChjb2Rl
Y1N0cmluZyA9PSAiVl9WUDgiICYmIGlzVlA4RGVjb2RlckF2YWlsYWJsZSgpKSB7Ci0gICAgICAg
IG1fdHJhY2tzLmFwcGVuZChWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6VlA4LCB0
cmFja0VudHJ5LCAqdGhpcykpOwotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29t
cGxldGVkKTsKLSAgICB9CisgICAgICAgIGlmIChjb2RlY1N0cmluZyA9PSAiVl9WUDkiICYmIGlz
VlA5RGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIFZpZGVvVHJhY2tEYXRh
OjpjcmVhdGUoQ29kZWNUeXBlOjpWUDksIHRyYWNrRW50cnksICp0aGlzKTsKKyAgICAgICAgaWYg
KGNvZGVjU3RyaW5nID09ICJWX1ZQOCIgJiYgaXNWUDhEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAg
ICAgICAgICByZXR1cm4gVmlkZW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZQOCwgdHJh
Y2tFbnRyeSwgKnRoaXMpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVk9SQklTKQotICAgIGlmIChj
b2RlY1N0cmluZyA9PSAiQV9WT1JCSVMiICYmIGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKSB7
Ci0gICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlw
ZTo6Vm9yYmlzLCB0cmFja0VudHJ5LCAqdGhpcykpOwotICAgICAgICByZXR1cm4gU3RhdHVzKFN0
YXR1czo6a09rQ29tcGxldGVkKTsKLSAgICB9CisgICAgICAgIGlmIChjb2RlY1N0cmluZyA9PSAi
QV9WT1JCSVMiICYmIGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgcmV0
dXJuIEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpWb3JiaXMsIHRyYWNrRW50cnks
ICp0aGlzKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QVVMpCi0gICAgaWYgKGNvZGVjU3RyaW5n
ID09ICJBX09QVVMiICYmIGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkgewotICAgICAgICBtX3Ry
YWNrcy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6Ok9wdXMsIHRyYWNr
RW50cnksICp0aGlzKSk7Ci0gICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0
ZWQpOwotICAgIH0KKyAgICAgICAgaWYgKGNvZGVjU3RyaW5nID09ICJBX09QVVMiICYmIGlzT3B1
c0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBBdWRpb1RyYWNrRGF0YTo6
Y3JlYXRlKENvZGVjVHlwZTo6T3B1cywgdHJhY2tFbnRyeSwgKnRoaXMpOwogI2VuZGlmCisgICAg
ICAgIHJldHVybiBUcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlVuc3VwcG9ydGVkLCB0cmFj
a0VudHJ5LCAqdGhpcyk7CisgICAgfSgpOworCisgICAgaWYgKG1fY3JlYXRlQnl0ZVJhbmdlU2Ft
cGxlcykKKyAgICAgICAgdHJhY2stPmNyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMoKTsKIAotICAgIG1f
dHJhY2tzLmFwcGVuZChUcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlVuc3VwcG9ydGVkLCB0
cmFja0VudHJ5LCAqdGhpcykpOworICAgIG1fdHJhY2tzLmFwcGVuZChXVEZNb3ZlKHRyYWNrKSk7
CiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKQEAgLTEwNTEs
OCArMTA1NCw2IEBAIHdlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6Y29u
c3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwKICAgICBpZiAoIXN0YXR1cy5jb21w
bGV0ZWRfb2soKSkKICAgICAgICAgcmV0dXJuIHN0YXR1czsKIAotICAgIG1fbGFzdFBvc2l0aW9u
ID0gbWV0YWRhdGEucG9zaXRpb247Ci0KICAgICBjb25zdGV4cHIgc2l6ZV90IG1heEhlYWRlclNp
emUgPSAzMjsgLy8gVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgVlA5IHVuY29tcHJlc3NlZCBoZWFk
ZXIgaXMgMTQ0IGJpdHMgYW5kIDExIGJ5dGVzIGZvciBWUDguIFJvdW5kIGhpZ2guCiAgICAgc2l6
ZV90IHNlZ21lbnRIZWFkZXJMZW5ndGggPSBzdGQ6Om1pbihtYXhIZWFkZXJTaXplLCBtX2NvbXBs
ZXRlQmxvY2tCdWZmZXItPnNpemUoKSk7CiAgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29u
dGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoMCwgc2VnbWVudEhlYWRlckxlbmd0aCk7CkBAIC0x
MDkwLDcgKzEwOTEsMTAgQEAgd2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLAogICAgIGlmICh0cmFjay5k
ZWZhdWx0X2R1cmF0aW9uLmlzX3ByZXNlbnQoKSkKICAgICAgICAgZHVyYXRpb24gPSB0cmFjay5k
ZWZhdWx0X2R1cmF0aW9uLnZhbHVlKCkgKiBwcmVzZW50YXRpb25UaW1lLnRpbWVTY2FsZSgpIC8g
a191c19pbl9zZWNvbmRzOwogCi0gICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5hcHBlbmQoeyBw
cmVzZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1lLCBNZWRpYVRpbWUoZHVyYXRpb24sIHBy
ZXNlbnRhdGlvblRpbWUudGltZVNjYWxlKCkpLCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIucmVsZWFz
ZU5vbk51bGwoKSwgaXNLZXkgPyBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyA6IE1l
ZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6Tm9uZSB9KTsKKyAgICBpZiAobV91c2VCeXRlUmFuZ2Up
CisgICAgICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMuYXBwZW5kKHsgcHJlc2VudGF0aW9uVGlt
ZSwgcHJlc2VudGF0aW9uVGltZSwgTWVkaWFUaW1lKGR1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1l
LnRpbWVTY2FsZSgpKSwgTWVkaWFTYW1wbGU6OkJ5dGVSYW5nZSB7IG1ldGFkYXRhLnBvc2l0aW9u
LCBtZXRhZGF0YS5zaXplIH0sIGlzS2V5ID8gTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpJc1N5
bmMgOiBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6Ok5vbmUgfSk7CisgICAgZWxzZQorICAgICAg
ICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmFwcGVuZCh7IHByZXNlbnRhdGlvblRpbWUsIHByZXNl
bnRhdGlvblRpbWUsIE1lZGlhVGltZShkdXJhdGlvbiwgcHJlc2VudGF0aW9uVGltZS50aW1lU2Nh
bGUoKSksIG1fY29tcGxldGVCbG9ja0J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBpc0tleSA/IE1l
ZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jIDogTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdz
OjpOb25lIH0pOwogCiAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCkBAIC0xMTE2LDggKzEx
MjAsNiBAQCB3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVG
cmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIsCiAgICAgaWYgKCFzdGF0dXMuY29tcGxldGVk
X29rKCkpCiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAKLSAgICBtX2xhc3RQb3NpdGlvbiA9IG1l
dGFkYXRhLnBvc2l0aW9uOwotCiAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbigpKSB7CiAgICAg
ICAgIGlmICghdHJhY2soKS5jb2RlY19wcml2YXRlLmlzX3ByZXNlbnQoKSkgewogICAgICAgICAg
ICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQXVkaW8gdHJhY2sgbWlzc2luZyBtYWdp
YyBjb29raWUiKTsKQEAgLTExODAsNyArMTE4MiwxMCBAQCB3ZWJtOjpTdGF0dXMgV2ViTVBhcnNl
cjo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIs
CiAgICAgZWxzZSBpZiAoZm9ybWF0RGVzY3JpcHRpb24oKSAmJiAqZm9ybWF0RGVzY3JpcHRpb24o
KSAhPSAqbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5pbmZvKCkpCiAgICAgICAgIGRyYWluUGVuZGlu
Z1NhbXBsZXMoKTsKIAotICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMuYXBwZW5kKHsgcHJlc2Vu
dGF0aW9uVGltZSwgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpLCBtX3BhY2tldER1cmF0aW9uLCBt
X2NvbXBsZXRlQmxvY2tCdWZmZXIucmVsZWFzZU5vbk51bGwoKSwgTWVkaWFTYW1wbGU6OlNhbXBs
ZUZsYWdzOjpJc1N5bmMgfSk7CisgICAgaWYgKG1fdXNlQnl0ZVJhbmdlKQorICAgICAgICBtX2Nv
bXBsZXRlTWVkaWFTYW1wbGVzLmFwcGVuZCh7IHByZXNlbnRhdGlvblRpbWUsIE1lZGlhVGltZTo6
aW52YWxpZFRpbWUoKSwgbV9wYWNrZXREdXJhdGlvbiwgTWVkaWFTYW1wbGU6OkJ5dGVSYW5nZSB7
IG1ldGFkYXRhLnBvc2l0aW9uLCBtZXRhZGF0YS5zaXplIH0sIE1lZGlhU2FtcGxlOjpTYW1wbGVG
bGFnczo6SXNTeW5jIH0pOworICAgIGVsc2UKKyAgICAgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxl
cy5hcHBlbmQoeyBwcmVzZW50YXRpb25UaW1lLCBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCksIG1f
cGFja2V0RHVyYXRpb24sIG1fY29tcGxldGVCbG9ja0J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBN
ZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyB9KTsKIAogICAgIGRyYWluUGVuZGluZ1Nh
bXBsZXMoKTsKIApAQCAtMTI5OSw5ICsxMzA0LDkgQEAgUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBXZWJNUGFyc2VyOjpwcm92aWRlTWVkaWFE
YXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlcywgdWludDY0X3QgcG9zaXRpb24pCit2b2lk
IFdlYk1QYXJzZXI6OnByb3ZpZGVNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGVz
KQogewotICAgIG1fY2FsbGJhY2sucGFyc2VkTWVkaWFEYXRhKFdURk1vdmUoc2FtcGxlcyksIHBv
c2l0aW9uKTsKKyAgICBtX2NhbGxiYWNrLnBhcnNlZE1lZGlhRGF0YShXVEZNb3ZlKHNhbXBsZXMp
KTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRJbml0aWFsaXphdGlv
bkRhdGEoSW5pdGlhbGl6YXRpb25TZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdtZW50KQpAQCAt
MTMxMiw3ICsxMzE3LDcgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRJbml0
aWFsaXphdGlvbkRhdGEoSW5pdGlhbGl6YXRpb25TZWdtZW50JiYgaW4KICAgICB9KTsKIH0KIAot
dm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVz
QmxvY2smJiBzYW1wbGVzQmxvY2ssIHVpbnQ2NF90IHBvc2l0aW9uKQordm9pZCBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGVz
QmxvY2spCiB7CiAgICAgaWYgKCFzYW1wbGVzQmxvY2suaW5mbygpKSB7CiAgICAgICAgIEVSUk9S
X0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiTm8gVHJhY2tJbmZvIHNldCIpOwpAQCAt
MTMzNiw3ICsxMzQxLDcgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRp
YURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGVzQmxvY2ssIHUKICAgICB9CiAKICAgICBp
ZiAoc2FtcGxlc0Jsb2NrLmlzVmlkZW8oKSkgewotICAgICAgICByZXR1cm5TYW1wbGVzKFdURk1v
dmUoc2FtcGxlc0Jsb2NrKSwgbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uLmdldCgpLCBwb3NpdGlv
bik7CisgICAgICAgIHJldHVyblNhbXBsZXMoV1RGTW92ZShzYW1wbGVzQmxvY2spLCBtX3ZpZGVv
Rm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MzQ0LDE3ICsxMzQ5LDE3IEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkTWVk
aWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlc0Jsb2NrLCB1CiAgICAgaWYgKG1fcXVl
dWVkQXVkaW9TYW1wbGVzLnNpemUoKSkgewogICAgICAgICBhdXRvJiBsYXN0U2FtcGxlID0gbV9x
dWV1ZWRBdWRpb1NhbXBsZXMubGFzdCgpOwogICAgICAgICBpZiAobGFzdFNhbXBsZS5kdXJhdGlv
biArIGxhc3RTYW1wbGUucHJlc2VudGF0aW9uVGltZSAhPSBzYW1wbGVzQmxvY2suZmlyc3QoKS5w
cmVzZW50YXRpb25UaW1lKQotICAgICAgICAgICAgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHBv
c2l0aW9uKTsKKyAgICAgICAgICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOwogICAgIH0K
ICAgICBmb3IgKGF1dG8mIHNhbXBsZSA6IHNhbXBsZXNCbG9jaykKICAgICAgICAgbV9xdWV1ZWRB
dWRpb0R1cmF0aW9uICs9IHNhbXBsZS5kdXJhdGlvbjsKICAgICBtX3F1ZXVlZEF1ZGlvU2FtcGxl
cy5hcHBlbmQoV1RGTW92ZShzYW1wbGVzQmxvY2spKTsKICAgICBpZiAobV9xdWV1ZWRBdWRpb0R1
cmF0aW9uIDwgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbikKICAgICAgICAgcmV0dXJuOwot
ICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcyhwb3NpdGlvbik7CisgICAgZmx1c2hQZW5kaW5n
QXVkaW9TYW1wbGVzKCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cmV0dXJu
U2FtcGxlcyhNZWRpYVNhbXBsZXNCbG9jayYmIGJsb2NrLCBDTUZvcm1hdERlc2NyaXB0aW9uUmVm
IGRlc2NyaXB0aW9uLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwb3NpdGlvbikKK3ZvaWQgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6cmV0dXJuU2FtcGxlcyhNZWRpYVNhbXBsZXNCbG9jayYmIGJs
b2NrLCBDTUZvcm1hdERlc2NyaXB0aW9uUmVmIGRlc2NyaXB0aW9uKQogewogICAgIGlmIChibG9j
ay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEzNjUsMTMgKzEzNzAsMTEgQEAgdm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpyZXR1cm5TYW1wbGVzKE1lZGlhU2FtcGxlc0Jsb2Nr
JiYgYmxvY2ssIENNRm9ybWF0RGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY2Fs
bE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhp
cyB9LCB0cmFja0lEID0gYmxvY2suaW5mbygpLT50cmFja0lELCBzYW1wbGVCdWZmZXIgPSBXVEZN
b3ZlKGV4cGVjdGVkQnVmZmVyLnZhbHVlKCkpLCBwb3NpdGlvbl0gKCkgbXV0YWJsZSB7CisgICAg
bV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7
ICp0aGlzIH0sIHRyYWNrSUQgPSBibG9jay5pbmZvKCktPnRyYWNrSUQsIHNhbXBsZUJ1ZmZlciA9
IFdURk1vdmUoZXhwZWN0ZWRCdWZmZXIudmFsdWUoKSldICgpIG11dGFibGUgewogICAgICAgICBp
ZiAoIW1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShz
YW1wbGVCdWZmZXIuZ2V0KCksIHRyYWNrSUQpOwotICAgICAgICBpZiAocG9zaXRpb24pCi0gICAg
ICAgICAgICBtZWRpYVNhbXBsZS0+c2V0Qnl0ZVJhbmdlT2Zmc2V0KCpwb3NpdGlvbik7CiAKICAg
ICAgICAgbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2soV1RGTW92ZShtZWRpYVNhbXBsZSks
IHRyYWNrSUQsIGVtcHR5U3RyaW5nKCkpOwogICAgIH0pOwpAQCAtMTM5MSwxMyArMTM5NCwxMyBA
QCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6
YXRpb25EYXRhRm9yVHJhY2tJRChSZWY8UwogICAgICAgICBtX2RpZFByb3ZpZGVDb250ZW50S2V5
UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSURDYWxsYmFjayhXVEZNb3ZlKGtleUlE
KSwgdHJhY2tJRCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5k
aW5nQXVkaW9TYW1wbGVzKHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBvc2l0aW9uKQordm9pZCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoKQogewogICAg
IGlmICghbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uKQogICAgICAgICByZXR1cm47CiAgICAgQVNT
RVJUKG1fYXVkaW9JbmZvKTsKICAgICBtX3F1ZXVlZEF1ZGlvU2FtcGxlcy5zZXRJbmZvKG1fYXVk
aW9JbmZvLmNvcHlSZWYoKSk7Ci0gICAgcmV0dXJuU2FtcGxlcyhXVEZNb3ZlKG1fcXVldWVkQXVk
aW9TYW1wbGVzKSwgbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uLmdldCgpLCBwb3NpdGlvbik7Cisg
ICAgcmV0dXJuU2FtcGxlcyhXVEZNb3ZlKG1fcXVldWVkQXVkaW9TYW1wbGVzKSwgbV9hdWRpb0Zv
cm1hdERlc2NyaXB0aW9uLmdldCgpKTsKIAogICAgIG1fcXVldWVkQXVkaW9TYW1wbGVzID0geyB9
OwogICAgIG1fcXVldWVkQXVkaW9EdXJhdGlvbiA9IHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNl
cldlYk0uaAppbmRleCBmZmNlZDM0MjVkNmU1MjU0MmEwYWZmYWFlODc3MGY1YzJjNjEwOGMxLi44
N2E5NDAzYThmM2ZjNTBiNjhhYWRlODE1Nzk1YTI5M2Y1Nzc2MWE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJN
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVm
ZmVyUGFyc2VyV2ViTS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGUuaCIK
ICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQYXJzZXIu
aCIKICNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KQEAgLTUyLDMwICs1Mywz
MCBAQCBjbGFzcyBXZWJNUGFyc2VyIDogcHJpdmF0ZSB3ZWJtOjpDYWxsYmFjayB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgY2xhc3MgQ2FsbGJhY2sgewotICAg
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBwYXJzZWRUcmltbWluZ0RhdGEodWludDY0X3QsIGNvbnN0IE1lZGlhVGltZSYpIHsg
fQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFNvdXJjZUJ1
ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYpID0gMDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmLCB1aW50NjRfdCkgPSAw
OworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VkTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2Nr
JiYpID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkRlY3J5cHQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGVudEtleVJlcXVlc3RJbml0aWFs
aXphdGlvbkRhdGFGb3JUcmFja0lEKFJlZjxTaGFyZWRCdWZmZXI+JiYsIHVpbnQ2NF90KSB7IH0K
ICAgICAgICAgdmlydHVhbCB+Q2FsbGJhY2soKSA9IGRlZmF1bHQ7CiAgICAgfTsKIAotICAgIFdl
Yk1QYXJzZXIoQ2FsbGJhY2smKTsKLSAgICB+V2ViTVBhcnNlcigpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFdlYk1QYXJzZXIoQ2FsbGJhY2smKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+V2ViTVBhcnNl
cigpOwogCiAgICAgY2xhc3MgU2VnbWVudFJlYWRlcjsKIAotICAgIEV4Y2VwdGlvbk9yPGludD4g
cGFyc2UoU291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50JiYpOwotICAgIHZvaWQgcmVzZXRTdGF0
ZSgpOwotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGludmFsaWRhdGUoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGNyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBFeGNlcHRpb25PcjxpbnQ+IHBhcnNlKFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudCYm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0U3RhdGUoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlc2V0KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlKCk7
CiAgICAgY29uc3Qgd2VibTo6U3RhdHVzJiBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1
czsgfQogCi0gICAgdm9pZCBwcm92aWRlTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIHVp
bnQ2NF90KTsKKyAgICB2b2lkIHByb3ZpZGVNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJik7
CiAKLSAgICB2b2lkIHNldExvZ2dlcihjb25zdCBMb2dnZXImLCBjb25zdCB2b2lkKiBpZGVudGlm
aWVyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvZ2dlcihjb25zdCBMb2dnZXImLCBj
b25zdCB2b2lkKiBpZGVudGlmaWVyKTsKICAgICBjb25zdCBMb2dnZXIqIGxvZ2dlclB0cigpIGNv
bnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9CiAgICAgY29uc3Qgdm9pZCogbG9nSWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQogCkBAIC0xMzQsNiArMTM1
LDggQEAgcHVibGljOgogICAgICAgICB3ZWJtOjpUcmFja0VudHJ5JiB0cmFjaygpIHsgcmV0dXJu
IG1fdHJhY2s7IH0KICAgICAgICAgVHJhY2tJbmZvOjpUcmFja1R5cGUgdHJhY2tUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV90cmFja1R5cGU7IH0KIAorICAgICAgICB2b2lkIGNyZWF0ZUJ5dGVSYW5n
ZVNhbXBsZXMoKSB7IG1fdXNlQnl0ZVJhbmdlID0gdHJ1ZTsgfQorCiAgICAgICAgIFJlZlB0cjxU
cmFja0luZm8+IGZvcm1hdERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXREZXNj
cmlwdGlvbi5jb3B5UmVmKCk7IH0KICAgICAgICAgdm9pZCBzZXRGb3JtYXREZXNjcmlwdGlvbihS
ZWY8VHJhY2tJbmZvPiYmIGRlc2NyaXB0aW9uKQogICAgICAgICB7CkBAIC0xNjcsNyArMTcwLDcg
QEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY29tcGxldGVNZWRpYVNh
bXBsZXMuc2l6ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG1fcGFy
c2VyLnByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShtX2NvbXBsZXRlTWVkaWFTYW1wbGVzKSwgbV9s
YXN0UG9zaXRpb24pOworICAgICAgICAgICAgbV9wYXJzZXIucHJvdmlkZU1lZGlhRGF0YShXVEZN
b3ZlKG1fY29tcGxldGVNZWRpYVNhbXBsZXMpKTsKICAgICAgICAgICAgIHJlc2V0Q29tcGxldGVk
RnJhbWVzU3RhdGUoKTsKICAgICAgICAgfQogCkBAIC0xNzYsNyArMTc5LDcgQEAgcHVibGljOgog
ICAgICAgICB3ZWJtOjpTdGF0dXMgcmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3
ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAg
UmVmUHRyPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+IG1fY29tcGxldGVCbG9ja0J1ZmZlcjsKICAg
ICAgICAgTWVkaWFTYW1wbGVzQmxvY2sgbV9jb21wbGV0ZU1lZGlhU2FtcGxlczsKLSAgICAgICAg
dWludDY0X3QgbV9sYXN0UG9zaXRpb24geyAwIH07CisgICAgICAgIGJvb2wgbV91c2VCeXRlUmFu
Z2UgeyBmYWxzZSB9OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29kZWNUeXBlIG1fY29kZWM7
CkBAIC0yNzksNiArMjgyLDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50
aWZpZXIgeyBudWxscHRyIH07CiAgICAgdWludDY0X3QgbV9uZXh0Q2hpbGRJZGVudGlmaWVyIHsg
MCB9OwogICAgIENhbGxiYWNrJiBtX2NhbGxiYWNrOworICAgIGJvb2wgbV9jcmVhdGVCeXRlUmFu
Z2VTYW1wbGVzIHsgZmFsc2UgfTsKIH07CiAKIGNsYXNzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0g
OiBwdWJsaWMgU291cmNlQnVmZmVyUGFyc2VyLCBXZWJNUGFyc2VyOjpDYWxsYmFjayB7CkBAIC0z
MDgsNyArMzEyLDcgQEAgcHVibGljOgogICAgICAgICBtX2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKICAgICB9CiAKLSAgICB2b2lkIGZsdXNoUGVuZGlu
Z0F1ZGlvU2FtcGxlcyhzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiA9IHN0ZDo6bnVsbG9wdCk7Cisg
ICAgdm9pZCBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoKTsKICAgICB2b2lkIHNldE1pbmltdW1B
dWRpb1NhbXBsZUR1cmF0aW9uKGZsb2F0KTsKICAgICAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldExvZ2dlcihjb25zdCBMb2dnZXImLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKSBmaW5hbDsK
QEAgLTMxOCwxMiArMzIyLDEyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgLy8gV2ViTVBhcnNl
cjo6Q2FsbGJhY2sKICAgICB2b2lkIHBhcnNlZEluaXRpYWxpemF0aW9uRGF0YShTb3VyY2VCdWZm
ZXJQYXJzZXI6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmKSBmaW5hbDsKLSAgICB2b2lkIHBhcnNl
ZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmLCB1aW50NjRfdCkgZmluYWw7CisgICAgdm9p
ZCBwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJikgZmluYWw7CiAgICAgYm9vbCBj
YW5EZWNyeXB0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gISFtX2RpZFByb3ZpZGVDb250ZW50S2V5
UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSURDYWxsYmFjazsgfQogICAgIHZvaWQg
Y29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKFJlZjxTaGFyZWRC
dWZmZXI+JiYsIHVpbnQ2NF90KSBmaW5hbDsKICAgICB2b2lkIHBhcnNlZFRyaW1taW5nRGF0YSh1
aW50NjRfdCwgY29uc3QgTWVkaWFUaW1lJikgZmluYWw7Ci0gICAgCi0gICAgdm9pZCByZXR1cm5T
YW1wbGVzKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIENNRm9ybWF0RGVzY3JpcHRpb25SZWYsIHN0ZDo6
b3B0aW9uYWw8dWludDY0X3Q+KTsKKworICAgIHZvaWQgcmV0dXJuU2FtcGxlcyhNZWRpYVNhbXBs
ZXNCbG9jayYmLCBDTUZvcm1hdERlc2NyaXB0aW9uUmVmKTsKIAogICAgIERpZFBhcnNlVHJpbW1p
bmdEYXRhQ2FsbGJhY2sgbV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrOwogICAgIFdlYk1Q
YXJzZXIgbV9wYXJzZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5oCmluZGV4IDJi
N2RkNDQ0YzUzZDJkNmJkMDdhOWI4MzhkNjc5YjY0YjM3NDlhZjcuLmJlNGEwZmUzYzNjOTk3YThk
YmUxMmZiNmY0ZmY5ZDFhZWM4YWRkZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1l
ci5oCkBAIC02MSw3ICs2MSw2IEBAIHB1YmxpYzoKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZmxhZ3M7IH0KICAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0
Zm9ybVNhbXBsZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFBsYXRmb3JtU2FtcGxlOjpUeXBlIHBs
YXRmb3JtU2FtcGxlVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRmb3JtU2FtcGxl
OjpHU3RyZWFtZXJTYW1wbGVUeXBlOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5
dGVSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFJlZlB0cjxKU0M6OlVp
bnQ4Q2xhbXBlZEFycmF5PiBnZXRSR0JBSW1hZ2VEYXRhKCkgY29uc3QgZmluYWw7CiAgICAgVmlk
ZW9Sb3RhdGlvbiB2aWRlb1JvdGF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV92aWRl
b1JvdGF0aW9uOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21l
ZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCmluZGV4
IDNjZjdlZTY1M2VjODEzZGZiYWUzM2VmOTNhMGMzM2ZlMmM2Mzk0ZTAuLmQ0Y2ZlNDE4ZDVjNjEy
MDY1N2RlMGQwYmMwMjAzNmZiMTBhODIwZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZl
clByaXZhdGUuY3BwCkBAIC02Miw3ICs2Miw2IEBAIHByaXZhdGU6CiAgICAgU2FtcGxlRmxhZ3Mg
ZmxhZ3MoKSBjb25zdCBvdmVycmlkZTsKICAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBs
ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFBsYXRmb3JtU2FtcGxlOjpUeXBlIHBsYXRmb3JtU2Ft
cGxlVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRmb3JtU2FtcGxlOjpNb2NrU2Ft
cGxlQm94VHlwZTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KICAgICBGbG9hdFNpemUgcHJl
c2VudGF0aW9uU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0U2l6ZSgpOyB9CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBvZmZz
ZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJiBvZmZzZXQpIG92ZXJyaWRlIHsgbV9ib3gu
b2Zmc2V0VGltZXN0YW1wc0J5KG9mZnNldCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIu
Y3BwCmluZGV4IDFjMzM4YzZhM2U4Y2JlZmI0YzZlNGJhZjUwMjFiMTU1MjU0OGZiZmIuLjBjMmU1
ZGFkOWM2Zjg3N2ZmM2U2Mjg4OTJlZjM5MDkyYmYyZDgyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9y
bWF0UmVhZGVyLmNwcApAQCAtMTMyLDQwICsxMzIsMTIgQEAgdm9pZCBNZWRpYUZvcm1hdFJlYWRl
cjo6cGFyc2VCeXRlU291cmNlKFJldGFpblB0cjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWY+JiYgYnl0
ZVMKIHsKICAgICBBU1NFUlQoaXNNYWluUnVuTG9vcCgpKTsKIAotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxDb250ZW50VHlwZT4gY29udGVudFR5cGUoInZpZGVvL3dlYm0iX3MpOwotICAgIGF1
dG8gcGFyc2VyID0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y3JlYXRlKGNvbnRlbnRUeXBlKTsK
LSAgICBpZiAoIXBhcnNlcikgewotICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9wYXJzZVRyYWNr
c0xvY2sgfTsKLSAgICAgICAgbV9wYXJzZVRyYWNrc1N0YXR1cyA9IGtNVFBsdWdpbkZvcm1hdFJl
YWRlckVycm9yX0FsbG9jYXRpb25GYWlsdXJlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgaWYgKCFtX2xvZ2dlcikgewogICAgICAgICBtX2xvZ2dlciA9ICZEb2N1bWVudDo6c2hhcmVk
TG9nZ2VyKCk7CiAgICAgICAgIG1fbG9nSWRlbnRpZmllciA9IG5leHRMb2dJZGVudGlmaWVyKCk7
CiAgICAgfQogCiAgICAgQUxXQVlTX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKLSAg
ICBwYXJzZXItPnNldExvZ2dlcigqbV9sb2dnZXIsIG1fbG9nSWRlbnRpZmllcik7Ci0KLSAgICAv
LyBTZXQgYSBtaW5pbXVtIGF1ZGlvIHNhbXBsZSBkdXJhdGlvbiBvZiAwIHNvIHRoZSBwYXJzZXIg
Y3JlYXRlcyBpbmRpdmlzaWJsZSBzYW1wbGVzIHdpdGggYnl0ZSBzb3VyY2UgcmFuZ2VzLgotICAg
IHBhcnNlci0+c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oMCk7Ci0KLSAgICBwYXJzZXIt
PnNldENhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFtdKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5j
dGlvbikgewotICAgICAgICBNZWRpYVRyYWNrUmVhZGVyOjpzdG9yYWdlUXVldWUoKS5kaXNwYXRj
aChXVEZNb3ZlKGZ1bmN0aW9uKSk7Ci0gICAgfSk7Ci0KLSAgICBwYXJzZXItPnNldERpZFBhcnNl
SW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAq
dGhpcyB9XShTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmIGluaXRp
YWxpemF0aW9uU2VnbWVudCkgewotICAgICAgICBkaWRQYXJzZVRyYWNrcyhXVEZNb3ZlKGluaXRp
YWxpemF0aW9uU2VnbWVudCksIG5vRXJyKTsKLSAgICB9KTsKLQotICAgIHBhcnNlci0+c2V0RGlk
RW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBSZWYgeyAqdGhpcyB9XSh1aW50NjRfdCBlcnJvckNvZGUpIHsKLSAgICAgICAgZGlkUGFyc2VU
cmFja3MoeyB9LCBlcnJvckNvZGUpOwotICAgIH0pOwotCi0gICAgcGFyc2VyLT5zZXREaWRQcm92
aWRlTWVkaWFEYXRhQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
XShSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiYmIG1lZGlhU2FtcGxlLCB1aW50NjRfdCB0cmFja0lE
LCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSkgewotICAgICAgICBkaWRQcm92aWRlTWVkaWFEYXRh
KFdURk1vdmUobWVkaWFTYW1wbGUpLCB0cmFja0lELCBtZWRpYVR5cGUpOwotICAgIH0pOwogCiAg
ICAgTG9ja2VyIGxvY2tlciB7IG1fcGFyc2VUcmFja3NMb2NrIH07CiAgICAgbV9ieXRlU291cmNl
ID0gV1RGTW92ZShieXRlU291cmNlKTsKQEAgLTE3MywxNCArMTQ1LDM0IEBAIHZvaWQgTWVkaWFG
b3JtYXRSZWFkZXI6OnBhcnNlQnl0ZVNvdXJjZShSZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNl
UmVmPiYmIGJ5dGVTCiAgICAgbV9kdXJhdGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsK
ICAgICBtX3RyYWNrUmVhZGVycy5jbGVhcigpOwogCi0gICAgcmVhZGVyUXVldWUoKS5kaXNwYXRj
aChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGJ5dGVTb3VyY2UgPSBtX2J5
dGVTb3VyY2UsIHBhcnNlciA9IHBhcnNlci5yZWxlYXNlTm9uTnVsbCgpXSgpIG11dGFibGUgewot
ICAgICAgICBwYXJzZXItPmFwcGVuZERhdGEoV1RGTW92ZShieXRlU291cmNlKSk7Ci0gICAgICAg
IE1lZGlhVHJhY2tSZWFkZXI6OnN0b3JhZ2VRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgcGFyc2VyID0gV1RGTW92ZShwYXJzZXIpXSgpIG11dGFi
bGUgewotICAgICAgICAgICAgZmluaXNoUGFyc2luZyhXVEZNb3ZlKHBhcnNlcikpOworICAgIC8v
IFRPRE86IHdoeSBkbyB3ZSBuZWVkIGEgc3RvcmFnZSBxdWV1ZSBkaWZmZXJlbnQgdG8gcmVhZGVy
J3MgcXVldWU/CisgICAgcmVhZGVyUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFJlZiB7ICp0aGlzIH0sIGJ5dGVTb3VyY2UgPSBtX2J5dGVTb3VyY2VdKCkgbXV0YWJsZSB7
CisgICAgICAgIFdlYk1QYXJzZXIgcGFyc2VyKCp0aGlzKTsKKyAgICAgICAgcGFyc2VyLnNldExv
Z2dlcigqbV9sb2dnZXIsIG1fbG9nSWRlbnRpZmllcik7CisgICAgICAgIHBhcnNlci5jcmVhdGVC
eXRlUmFuZ2VTYW1wbGVzKCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VyLnBhcnNlKFdU
Rk1vdmUoYnl0ZVNvdXJjZSkpOworICAgICAgICBNZWRpYVRyYWNrUmVhZGVyOjpzdG9yYWdlUXVl
dWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHJlc3Vs
dF0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAm
JiByZXN1bHQucmV0dXJuVmFsdWUoKSkKKyAgICAgICAgICAgICAgICBkaWRQYXJzZVRyYWNrcyh7
IH0sIHJlc3VsdC5yZXR1cm5WYWx1ZSgpKTsKKyAgICAgICAgICAgIGZpbmlzaFBhcnNpbmcoKTsK
ICAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKK3ZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OnBhcnNl
ZEluaXRpYWxpemF0aW9uRGF0YShTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0aW9uU2Vn
bWVudCYmIGluaXRpYWxpemF0aW9uU2VnbWVudCkKK3sKKyAgICBNZWRpYVRyYWNrUmVhZGVyOjpz
dG9yYWdlUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlz
IH0sIGluaXRpYWxpemF0aW9uU2VnbWVudCA9IFdURk1vdmUoaW5pdGlhbGl6YXRpb25TZWdtZW50
KV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGRpZFBhcnNlVHJhY2tzKFdURk1vdmUoaW5pdGlhbGl6
YXRpb25TZWdtZW50KSwgbm9FcnIpOworICAgIH0pOworfQorCit2b2lkIE1lZGlhRm9ybWF0UmVh
ZGVyOjpwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBtZWRpYVNhbXBsZXMpCit7
CisgICAgTWVkaWFUcmFja1JlYWRlcjo6c3RvcmFnZVF1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBtZWRpYVNhbXBsZXMgPSBXVEZNb3ZlKG1lZGlh
U2FtcGxlcyldICgpIG11dGFibGUgeworICAgICAgICBkaWRQcm92aWRlTWVkaWFEYXRhKFdURk1v
dmUobWVkaWFTYW1wbGVzKSk7CisgICAgfSk7Cit9CisKIHZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6
OmRpZFBhcnNlVHJhY2tzKFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9u
U2VnbWVudCYmIHNlZ21lbnQsIHVpbnQ2NF90IGVycm9yQ29kZSkKIHsKICAgICBBU1NFUlQoIWlz
TWFpblJ1bkxvb3AoKSk7CkBAIC0yMjUsMjAgKzIxNywyMCBAQCB2b2lkIE1lZGlhRm9ybWF0UmVh
ZGVyOjpkaWRQYXJzZVRyYWNrcyhTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXph
dGlvbgogICAgIG1faW5pdCA9IHRydWU7CiB9CiAKLXZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OmRp
ZFByb3ZpZGVNZWRpYURhdGEoUmVmPE1lZGlhU2FtcGxlQVZGT2JqQz4mJiBtZWRpYVNhbXBsZSwg
dWludDY0X3QgdHJhY2tJRCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6
OmRpZFByb3ZpZGVNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBtZWRpYVNhbXBsZXMpCiB7
CiAgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOwogCiAgICAgTG9ja2VyIGxvY2tlciB7IG1f
cGFyc2VUcmFja3NMb2NrIH07CiAgICAgYXV0byB0cmFja0luZGV4ID0gbV90cmFja1JlYWRlcnMu
ZmluZElmKFsmXShhdXRvJiB0cmFjaykgewotICAgICAgICByZXR1cm4gdHJhY2stPnRyYWNrSUQo
KSA9PSB0cmFja0lEOworICAgICAgICByZXR1cm4gdHJhY2stPnRyYWNrSUQoKSA9PSBtZWRpYVNh
bXBsZXMuaW5mbygpLT50cmFja0lEOwogICAgIH0pOwogCiAgICAgaWYgKHRyYWNrSW5kZXggIT0g
bm90Rm91bmQpCi0gICAgICAgIG1fdHJhY2tSZWFkZXJzW3RyYWNrSW5kZXhdLT5hZGRTYW1wbGUo
V1RGTW92ZShtZWRpYVNhbXBsZSksIG1fYnl0ZVNvdXJjZS5nZXQoKSk7CisgICAgICAgIG1fdHJh
Y2tSZWFkZXJzW3RyYWNrSW5kZXhdLT5hZGRTYW1wbGUoV1RGTW92ZShtZWRpYVNhbXBsZXMpLCBt
X2J5dGVTb3VyY2UuZ2V0KCkpOwogfQogCi12b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpmaW5pc2hQ
YXJzaW5nKFJlZjxTb3VyY2VCdWZmZXJQYXJzZXI+JiYgcGFyc2VyKQordm9pZCBNZWRpYUZvcm1h
dFJlYWRlcjo6ZmluaXNoUGFyc2luZygpCiB7CiAgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkp
OwogICAgIEFMV0FZU19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CkBAIC0yNTgsMTEg
KzI1MCw2IEBAIHZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OmZpbmlzaFBhcnNpbmcoUmVmPFNvdXJj
ZUJ1ZmZlclBhcnNlcj4mJiBwYXJzZXIpCiAgICAgICAgIGlmIChncmVhdGVzdFByZXNlbnRhdGlv
blRpbWUuaXNWYWxpZCgpKQogICAgICAgICAgICAgbV9kdXJhdGlvbiA9IGdyZWF0ZXN0UHJlc2Vu
dGF0aW9uVGltZTsKICAgICB9Ci0KLSAgICBwYXJzZXItPnNldERpZFBhcnNlSW5pdGlhbGl6YXRp
b25EYXRhQ2FsbGJhY2sobnVsbHB0cik7Ci0gICAgcGFyc2VyLT5zZXREaWRFbmNvdW50ZXJFcnJv
ckR1cmluZ1BhcnNpbmdDYWxsYmFjayhudWxscHRyKTsKLSAgICBwYXJzZXItPnNldERpZFByb3Zp
ZGVNZWRpYURhdGFDYWxsYmFjayhudWxscHRyKTsKLSAgICBwYXJzZXItPnJlc2V0UGFyc2VyU3Rh
dGUoKTsKIH0KIAogT1NTdGF0dXMgTWVkaWFGb3JtYXRSZWFkZXI6OmNvcHlQcm9wZXJ0eShDRlN0
cmluZ1JlZiBrZXksIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgdm9pZCogdmFsdWVDb3B5KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01l
ZGlhRm9ybWF0UmVhZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRS
ZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuaAppbmRleCAxNWQ1NTczNjMzODE3NDYwYzJlNjIwNDQx
OTAxMDIzY2Y4NmI0YTkzLi4xYTQ4YzE2ODBlODc1ZGM2MjUyMjg3NDE1ZjU0ODhjOTJjNTg4MDJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFGb3JtYXRSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVO
QUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCiAKICNpbmNsdWRlICJDb3JlTWVkaWFXcmFwcGVkLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Tb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50Lmg+CiAjaW5jbHVkZSA8d3RmL0NvbmRp
dGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CkBAIC0zNiwxNSArMzcsMTUgQEAKIERFQ0xB
UkVfQ09SRV9NRURJQV9UUkFJVFMoRm9ybWF0UmVhZGVyKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewotY2xhc3MgTWVkaWFTYW1wbGVBVkZPYmpDOwotY2xhc3MgU291cmNlQnVmZmVyUGFyc2VyOwor
Y2xhc3MgTWVkaWFTYW1wbGVzQmxvY2s7CitjbGFzcyBXZWJNUGFyc2VyOwogfQogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgTWVkaWFUcmFja1JlYWRlcjsKIAotY2xhc3MgTWVkaWFGb3Jt
YXRSZWFkZXIgZmluYWwgOiBwdWJsaWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYUZvcm1hdFJlYWRl
cj4geworY2xhc3MgTWVkaWFGb3JtYXRSZWFkZXIgZmluYWwgOiBwdWJsaWMgQ29yZU1lZGlhV3Jh
cHBlZDxNZWRpYUZvcm1hdFJlYWRlcj4gLCBwdWJsaWMgV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2Fs
bGJhY2sgewogcHVibGljOgogICAgIHVzaW5nIENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFGb3JtYXRS
ZWFkZXI+Ojp1bndyYXA7CiAKQEAgLTY0LDEyICs2NSwxNiBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIGV4cGxpY2l0IE1lZGlhRm9ybWF0UmVhZGVyKEFsbG9jYXRvciYmKTsKIAorICAgIC8vIFdl
Yk1QYXJzZXI6OkNhbGxiYWNrCisgICAgdm9pZCBwYXJzZWRJbml0aWFsaXphdGlvbkRhdGEoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQmJikgZmluYWw7
CisgICAgdm9pZCBwYXJzZWRNZWRpYURhdGEoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2smJikg
ZmluYWw7CisKICAgICB2b2lkIHBhcnNlQnl0ZVNvdXJjZShSZXRhaW5QdHI8TVRQbHVnaW5CeXRl
U291cmNlUmVmPiYmKTsKICAgICB2b2lkIGRpZFBhcnNlVHJhY2tzKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmLCB1aW50NjRfdCBlcnJv
ckNvZGUpOwogICAgIHZvaWQgZGlkU2VsZWN0VmlkZW9UcmFjayhXZWJDb3JlOjpWaWRlb1RyYWNr
UHJpdmF0ZSYsIGJvb2wpIHsgfQogICAgIHZvaWQgZGlkRW5hYmxlQXVkaW9UcmFjayhXZWJDb3Jl
OjpBdWRpb1RyYWNrUHJpdmF0ZSYsIGJvb2wpIHsgfQotICAgIHZvaWQgZGlkUHJvdmlkZU1lZGlh
RGF0YShSZWY8V2ViQ29yZTo6TWVkaWFTYW1wbGVBVkZPYmpDPiYmLCB1aW50NjRfdCwgY29uc3Qg
U3RyaW5nJik7Ci0gICAgdm9pZCBmaW5pc2hQYXJzaW5nKFJlZjxXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXI+JiYpOworICAgIHZvaWQgZGlkUHJvdmlkZU1lZGlhRGF0YShXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jayYmKTsKKyAgICB2b2lkIGZpbmlzaFBhcnNpbmcoKTsKIAogICAgIC8vIENN
QmFzZUNsYXNzCiAgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiV2ViS2l0OjpNZWRpYUZvcm1hdFJlYWRlciJfczsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNh
bXBsZUJ5dGVSYW5nZS5jcHAKaW5kZXggODljNzkyZmU1ZDQ1ZTQ1OTg4NDE0M2Y1NDQyOTAxNmQ2
NzJjNGU3NS4uNzU2MjUyYzQyMWY3NzQwMmRjYWUzMzViNjJjOTU3Y2YwMmMxYTQ0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2Ft
cGxlQnl0ZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3Jt
YXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCkBAIC0zMyw1NSArMzMsNzMgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1NZWRpYVNhbXBs
ZUJ5dGVSYW5nZTo6TWVkaWFTYW1wbGVCeXRlUmFuZ2UoTWVkaWFTYW1wbGUmIHNhbXBsZSwgTVRQ
bHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UsIHVpbnQ2NF90IHRyYWNrSUQpCi0gICAgOiBt
X3ByZXNlbnRhdGlvblRpbWUoc2FtcGxlLnByZXNlbnRhdGlvblRpbWUoKSkKLSAgICAsIG1fZGVj
b2RlVGltZShzYW1wbGUuZGVjb2RlVGltZSgpKQotICAgICwgbV9kdXJhdGlvbihzYW1wbGUuZHVy
YXRpb24oKSkKLSAgICAsIG1fYnl0ZVJhbmdlKCpzYW1wbGUuYnl0ZVJhbmdlKCkpCi0gICAgLCBt
X3RyYWNrSUQodHJhY2tJRCkKLSAgICAsIG1fc2l6ZUluQnl0ZXMoc2FtcGxlLnNpemVJbkJ5dGVz
KCkpCi0gICAgLCBtX3ByZXNlbnRhdGlvblNpemUoc2FtcGxlLnByZXNlbnRhdGlvblNpemUoKSkK
K01lZGlhU2FtcGxlQnl0ZVJhbmdlOjpNZWRpYVNhbXBsZUJ5dGVSYW5nZShNZWRpYVNhbXBsZXNC
bG9jayYmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCisgICAgOiBt
X2Jsb2NrKFdURk1vdmUoc2FtcGxlKSkKICAgICAsIG1fYnl0ZVNvdXJjZShieXRlU291cmNlKQot
ICAgICwgbV9mbGFncyhzYW1wbGUuZmxhZ3MoKSkKIHsKLSAgICBBU1NFUlQoIWlzTWFpblJ1bkxv
b3AoKSk7Ci0gICAgQVNTRVJUKG1fZGVjb2RlVGltZSA9PSBtX3ByZXNlbnRhdGlvblRpbWUgfHwg
bV9kZWNvZGVUaW1lID09IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSk7Ci0gICAgYXV0byBwbGF0
Zm9ybVNhbXBsZSA9IHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpOwotICAgIHN3aXRjaCAocGxhdGZv
cm1TYW1wbGUudHlwZSkgewotICAgIGNhc2UgUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVy
VHlwZToKLSAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlvbiA9IFBBTDo6Q01TYW1wbGVCdWZmZXJH
ZXRGb3JtYXREZXNjcmlwdGlvbihwbGF0Zm9ybVNhbXBsZS5zYW1wbGUuY21TYW1wbGVCdWZmZXIp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1w
bGVUeXBlOgotICAgICAgICBtX2Zvcm1hdERlc2NyaXB0aW9uID0gcGxhdGZvcm1TYW1wbGUuc2Ft
cGxlLmJ5dGVSYW5nZVNhbXBsZS5zZWNvbmQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Cisg
ICAgQVNTRVJUKCFtX2Jsb2NrLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8TWVkaWFTYW1wbGU6OkJ5dGVSYW5nZT4obV9ibG9jay5sYXN0KCkuZGF0YSkpOwog
fQogCiBBdG9tU3RyaW5nIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjp0cmFja0lEKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gQXRvbVN0cmluZzo6bnVtYmVyKG1fdHJhY2tJRCk7CisgICAgcmV0dXJuIEF0
b21TdHJpbmc6Om51bWJlcihtX2Jsb2NrLmluZm8oKS0+dHJhY2tJRCk7CiB9CiAKIFBsYXRmb3Jt
U2FtcGxlIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpwbGF0Zm9ybVNhbXBsZSgpIGNvbnN0CiB7Cisg
ICAgQVNTRVJUKG1fYmxvY2suaW5mbygpKTsKICAgICByZXR1cm4gewogICAgICAgICBQbGF0Zm9y
bVNhbXBsZTo6Qnl0ZVJhbmdlU2FtcGxlVHlwZSwKLSAgICAgICAgeyAuYnl0ZVJhbmdlU2FtcGxl
ID0gc3RkOjptYWtlX3BhaXIobV9ieXRlU291cmNlLmdldCgpLCBtX2Zvcm1hdERlc2NyaXB0aW9u
LmdldCgpKSB9LAorICAgICAgICB7IC5ieXRlUmFuZ2VTYW1wbGUgPSBzdGQ6Om1ha2VfcGFpciht
X2J5dGVTb3VyY2UuZ2V0KCksIHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXIoKm1fYmxvY2suaW5mbygp
KSkgfSwKICAgICB9OwogfQogCi12b2lkIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpvZmZzZXRUaW1l
c3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJiBvZmZzZXQpCitNZWRpYVRpbWUgTWVkaWFTYW1wbGVC
eXRlUmFuZ2U6OnByZXNlbnRhdGlvblRpbWUoKSBjb25zdAogewotICAgIHNldFRpbWVzdGFtcHMo
cHJlc2VudGF0aW9uVGltZSgpICsgb2Zmc2V0LCBkZWNvZGVUaW1lKCkgKyBvZmZzZXQpOworICAg
IHJldHVybiBtX2Jsb2NrLmxhc3QoKS5wcmVzZW50YXRpb25UaW1lOwogfQogCi12b2lkIE1lZGlh
U2FtcGxlQnl0ZVJhbmdlOjpzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0
aW9uVGltZSwgY29uc3QgTWVkaWFUaW1lJiBkZWNvZGVUaW1lKQorTWVkaWFUaW1lIE1lZGlhU2Ft
cGxlQnl0ZVJhbmdlOjpkZWNvZGVUaW1lKCkgY29uc3QKIHsKLSAgICBtX3ByZXNlbnRhdGlvblRp
bWUgPSBwcmVzZW50YXRpb25UaW1lOwotICAgIG1fZGVjb2RlVGltZSA9IGRlY29kZVRpbWU7Cisg
ICAgcmV0dXJuIG1fYmxvY2subGFzdCgpLmRlY29kZVRpbWU7Cit9CisKK01lZGlhVGltZSBNZWRp
YVNhbXBsZUJ5dGVSYW5nZTo6ZHVyYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2Jsb2Nr
Lmxhc3QoKS5kdXJhdGlvbjsKK30KKworc2l6ZV90IE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpzaXpl
SW5CeXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PE1lZGlhU2FtcGxlOjpCeXRl
UmFuZ2U+KG1fYmxvY2subGFzdCgpLmRhdGEpLmJ5dGVMZW5ndGg7Cit9CisKK1dlYkNvcmU6OkZs
b2F0U2l6ZSBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6cHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0Cit7
CisgICAgaWYgKG1fYmxvY2suaXNWaWRlbygpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Y29u
c3QgVmlkZW9JbmZvPihtX2Jsb2NrLmluZm8oKSktPmRpc3BsYXlTaXplOworICAgIHJldHVybiB7
IH07Cit9CisKK01lZGlhU2FtcGxlQnl0ZVJhbmdlOjpTYW1wbGVGbGFncyBNZWRpYVNhbXBsZUJ5
dGVSYW5nZTo6ZmxhZ3MoKSBjb25zdAoreworICAgIHJldHVybiBTYW1wbGVGbGFncyh1aW50MzJf
dChtX2Jsb2NrLmxhc3QoKS5mbGFncykgfCBNZWRpYVNhbXBsZTo6SGFzU3luY0luZm8pOworfQor
CitzdGQ6Om9wdGlvbmFsPE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpCeXRlUmFuZ2U+IE1lZGlhU2Ft
cGxlQnl0ZVJhbmdlOjpieXRlUmFuZ2UoKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6OmdldDxN
ZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlPihtX2Jsb2NrLmxhc3QoKS5kYXRhKTsKK30KKwordm9pZCBN
ZWRpYVNhbXBsZUJ5dGVSYW5nZTo6b2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYp
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgTWVkaWFTYW1wbGVCeXRl
UmFuZ2U6OnNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJikK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCmluZGV4IDVkYTI4ODVkNDVkMTc4ODgz
NjIyOTE3ZTVlNGFjYjk3ZjhlY2FlMDcuLjIyNWI5NDQyYTc5MjI0NmY0ZTdmODQ4MDZkYTEzYmE1
M2IxYWRjYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1h
dFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCkBAIC0yNywyNyAr
MjcsMjQgQEAKIAogI2lmIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCiAKLSNpbmNsdWRlIDxX
ZWJDb3JlL01lZGlhU2FtcGxlQVZGT2JqQy5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvTWVk
aWFUb29sYm94U1BJLmg+Ci0jaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgotI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2FtcGxlLmg+CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBNZWRpYVNhbXBsZUJ5dGVSYW5nZSBmaW5hbCA6IHB1Ymxp
YyBXZWJDb3JlOjpNZWRpYVNhbXBsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYVNh
bXBsZUJ5dGVSYW5nZT4gY3JlYXRlKFdlYkNvcmU6Ok1lZGlhU2FtcGxlJiBzYW1wbGUsIE1UUGx1
Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291cmNlLCB1aW50NjRfdCB0cmFja0lEKQorICAgIHN0YXRp
YyBSZWY8TWVkaWFTYW1wbGVCeXRlUmFuZ2U+IGNyZWF0ZShXZWJDb3JlOjpNZWRpYVNhbXBsZXNC
bG9jayYmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBsZUJ5dGVSYW5nZShzYW1wbGUs
IGJ5dGVTb3VyY2UsIHRyYWNrSUQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVk
aWFTYW1wbGVCeXRlUmFuZ2UoV1RGTW92ZShzYW1wbGUpLCBieXRlU291cmNlKSk7CiAgICAgfQog
Ci0gICAgTWVkaWFUaW1lIHByZXNlbnRhdGlvblRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3ByZXNlbnRhdGlvblRpbWU7IH0KLSAgICBNZWRpYVRpbWUgZGVjb2RlVGltZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fZGVjb2RlVGltZTsgfQotICAgIE1lZGlhVGltZSBkdXJhdGlvbigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAgICBzaXplX3Qgc2l6ZUluQnl0ZXMo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgV2ViQ29yZTo6Rmxv
YXRTaXplIHByZXNlbnRhdGlvblNpemUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ByZXNlbnRh
dGlvblNpemU7IH0KLSAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fZmxhZ3M7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9ieXRlUmFuZ2U7IH0KKyAgICBNZWRpYVRpbWUgcHJlc2VudGF0
aW9uVGltZSgpIGNvbnN0IGZpbmFsOworICAgIE1lZGlhVGltZSBkZWNvZGVUaW1lKCkgY29uc3Qg
ZmluYWw7CisgICAgTWVkaWFUaW1lIGR1cmF0aW9uKCkgY29uc3QgZmluYWw7CisgICAgc2l6ZV90
IHNpemVJbkJ5dGVzKCkgY29uc3QgZmluYWw7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHByZXNl
bnRhdGlvblNpemUoKSBjb25zdCBmaW5hbDsKKyAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0
IGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBm
aW5hbDsKIAogICAgIEF0b21TdHJpbmcgdHJhY2tJRCgpIGNvbnN0IGZpbmFsOwogICAgIFdlYkNv
cmU6OlBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29uc3QgZmluYWw7CkBAIC01Nywx
OCArNTQsMTAgQEAgcHVibGljOgogICAgIFJlZjxNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxh
eWluZ0NvcHkoKSBjb25zdCB7IHJldHVybiAqY29uc3RfY2FzdDxNZWRpYVNhbXBsZUJ5dGVSYW5n
ZSo+KHRoaXMpOyB9CiAKIHByaXZhdGU6Ci0gICAgTWVkaWFTYW1wbGVCeXRlUmFuZ2UoTWVkaWFT
YW1wbGUmLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYsIHVpbnQ2NF90IHRyYWNrSUQpOworICAgIE1l
ZGlhU2FtcGxlQnl0ZVJhbmdlKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrJiYsIE1UUGx1Z2lu
Qnl0ZVNvdXJjZVJlZik7CiAKLSAgICBNZWRpYVRpbWUgbV9wcmVzZW50YXRpb25UaW1lOwotICAg
IE1lZGlhVGltZSBtX2RlY29kZVRpbWU7Ci0gICAgTWVkaWFUaW1lIG1fZHVyYXRpb247Ci0gICAg
Qnl0ZVJhbmdlIG1fYnl0ZVJhbmdlOwotICAgIHVpbnQ2NF90IG1fdHJhY2tJRDsKLSAgICBzaXpl
X3QgbV9zaXplSW5CeXRlczsKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9wcmVzZW50YXRpb25T
aXplOworICAgIGNvbnN0IFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrIG1fYmxvY2s7CiAgICAg
UmV0YWluUHRyPE1UUGx1Z2luQnl0ZVNvdXJjZVJlZj4gbV9ieXRlU291cmNlOwotICAgIFJldGFp
blB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBtX2Zvcm1hdERlc2NyaXB0aW9uOwotICAgIFNh
bXBsZUZsYWdzIG1fZmxhZ3M7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBs
ZUN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFTYW1wbGVDdXJzb3IuY3BwCmluZGV4IDZhYTAyM2M2NjU2MzQzMjViNzQ4YmIzZDc1NTg2
MGQwOTQ3ZTBiNGUuLjRkOWQwOTY1YmU0NDgwNDEwZTE2YjE3Y2U0ZjY1ZmZmMjRlNzhkYzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRp
YVNhbXBsZUN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9y
bWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhVHJhY2tSZWFkZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0NNVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNhbXBsZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2FtcGxlTWFwLmg+CiAjaW5jbHVkZSA8cGFsL2F2Zm91bmRh
dGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4KQEAgLTM2Nyw3ICszNjgsNyBAQCBPU1N0YXR1
cyBNZWRpYVNhbXBsZUN1cnNvcjo6Y29weUZvcm1hdERlc2NyaXB0aW9uKENNRm9ybWF0RGVzY3Jp
cHRpb25SZWYqIGZvcm1hdAogewogICAgIHJldHVybiBnZXRNZWRpYVNhbXBsZShbJl0oTWVkaWFT
YW1wbGUmIHNhbXBsZSkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6
OkJ5dGVSYW5nZVNhbXBsZVR5cGUpOwotICAgICAgICAqZm9ybWF0RGVzY3JpcHRpb25PdXQgPSBy
ZXRhaW5QdHIoc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5z
ZWNvbmQpLmxlYWtSZWYoKTsKKyAgICAgICAgKmZvcm1hdERlc2NyaXB0aW9uT3V0ID0gY3JlYXRl
Rm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNh
bXBsZS5ieXRlUmFuZ2VTYW1wbGUuc2Vjb25kKS5sZWFrUmVmKCk7CiAgICAgfSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRp
YVRyYWNrUmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJl
YWRlci9NZWRpYVRyYWNrUmVhZGVyLmNwcAppbmRleCBmMDRjNTkwNmYxYTE2ZmIzZGY3OGJkNDM4
MjhjMGRjNmQ4ZGViNjFhLi40NzI0ZWM4ZGEzZmQyMzA3Y2I2NTc5ZWMwZTA1YTE0Njk5MDY2ZWFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFUcmFja1JlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCIKICNpbmNsdWRlICJNZWRpYVNhbXBsZUN1cnNv
ci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQXVkaW9UcmFja1ByaXZhdGUuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0NNVXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbmJhbmRUZXh0VHJhY2tQ
cml2YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYURlc2NyaXB0aW9uLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9TYW1wbGVNYXAuaD4KQEAgLTk3LDE1ICs5OCwxNyBAQCBNZWRpYVRpbWUgTWVk
aWFUcmFja1JlYWRlcjo6Z3JlYXRlc3RQcmVzZW50YXRpb25UaW1lKCkgY29uc3QKICAgICByZXR1
cm4gbGFzdFNhbXBsZS5wcmVzZW50YXRpb25UaW1lKCkgKyBsYXN0U2FtcGxlLmR1cmF0aW9uKCk7
CiB9CiAKLXZvaWQgTWVkaWFUcmFja1JlYWRlcjo6YWRkU2FtcGxlKFJlZjxNZWRpYVNhbXBsZT4m
JiBzYW1wbGUsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291cmNlKQordm9pZCBNZWRpYVRy
YWNrUmVhZGVyOjphZGRTYW1wbGUoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGUsIE1UUGx1Z2lu
Qnl0ZVNvdXJjZVJlZiBieXRlU291cmNlKQogewogICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgp
KTsKICAgICBMb2NrZXIgbG9ja2VyIHsgbV9zYW1wbGVTdG9yYWdlTG9jayB9OwogICAgIGlmICgh
bV9zYW1wbGVTdG9yYWdlKQogICAgICAgICBtX3NhbXBsZVN0b3JhZ2UgPSBtYWtlVW5pcXVlPFNh
bXBsZVN0b3JhZ2U+KCk7CiAKLSAgICBBU1NFUlQoIXNhbXBsZS0+aXNEaXZpc2FibGUoKSAmJiBz
YW1wbGUtPmJ5dGVSYW5nZSgpKTsKLSAgICBhdXRvIHNhbXBsZVRvQWRkID0gTWVkaWFTYW1wbGVC
eXRlUmFuZ2U6OmNyZWF0ZShzYW1wbGUuZ2V0KCksIGJ5dGVTb3VyY2UsIG1fdHJhY2tJRCk7Cisg
ICAgQVNTRVJUKCFzYW1wbGUuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxNZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlPihzYW1wbGUubGFzdCgpLmRhdGEpKTsKKwor
ICAgIGF1dG8gc2FtcGxlVG9BZGQgPSBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6Y3JlYXRlKFdURk1v
dmUoc2FtcGxlKSwgYnl0ZVNvdXJjZSk7CiAKICAgICAvLyBGSVhNRTogRXZlbiB0aG91Z2ggV2Vi
TSBtdXhlciBndWlkZWxpbmVzIHNheSB0aGlzIG11c3Qgbm90IGhhcHBlbiwgc29tZSB2aWRlbyB0
cmFja3MgaGF2ZSB0d28KICAgICAvLyBjb25zZWN1dGl2ZSBmcmFtZXMgd2l0aCB0aGUgc2FtZSBw
cmVzZW50YXRpb24gdGltZS4gU2FtcGxlTWFwIHdpbGwgbm90IHN0b3JlIHRoZSBzZWNvbmQgZnJh
bWUKQEAgLTE4NSw3ICsxODgsMTUgQEAgT1NTdGF0dXMgTWVkaWFUcmFja1JlYWRlcjo6Y29weVBy
b3BlcnR5KENGU3RyaW5nUmVmIGtleSwgQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG8KIAogICAgIGlm
IChDRkVxdWFsKGtleSwgUEFMOjpnZXRfTWVkaWFUb29sYm94X2tNVFBsdWdpblRyYWNrUmVhZGVy
UHJvcGVydHlfRm9ybWF0RGVzY3JpcHRpb25BcnJheSgpKSkgewogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGxhc3RTYW1wbGUucGxhdGZvcm1TYW1wbGUo
KS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlKTsKLSAgICAgICAg
Y29uc3Qgdm9pZCogZGVzY3JpcHRpb25zWzFdID0geyBsYXN0U2FtcGxlLnBsYXRmb3JtU2FtcGxl
KCkuc2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5zZWNvbmQgfTsKKyAgICAgICAgY29uc3QgVHJhY2tJ
bmZvJiB0cmFja0luZm8gPSBsYXN0U2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVS
YW5nZVNhbXBsZS5zZWNvbmQ7CisgICAgICAgIGlmICghbV90cmFja0luZm8pIHsKKyAgICAgICAg
ICAgIG1fdHJhY2tJbmZvID0gJmxhc3RTYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuYnl0
ZVJhbmdlU2FtcGxlLnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgIG1fZm9ybWF0RGVzY3JpcHRp
b24gPSBXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8oKm1fdHJh
Y2tJbmZvKTsKKyAgICAgICAgfSBlbHNlIGlmICgqbV90cmFja0luZm8gIT0gdHJhY2tJbmZvKSB7
CisgICAgICAgICAgICBtX3RyYWNrSW5mbyA9ICZ0cmFja0luZm87CisgICAgICAgICAgICBtX2Zv
cm1hdERlc2NyaXB0aW9uID0gV2ViQ29yZTo6Y3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJh
Y2tJbmZvKCptX3RyYWNrSW5mbyk7CisgICAgICAgIH0KKyAgICAgICAgY29uc3Qgdm9pZCogZGVz
Y3JpcHRpb25zWzFdID0geyBtX2Zvcm1hdERlc2NyaXB0aW9uLmdldCgpIH07CiAgICAgICAgICpy
ZWludGVycHJldF9jYXN0PENGQXJyYXlSZWYqPihjb3BpZWRWYWx1ZSkgPSBhZG9wdENGKENGQXJy
YXlDcmVhdGUoYWxsb2NhdG9yLCBkZXNjcmlwdGlvbnMsIDEsICZrQ0ZUeXBlQXJyYXlDYWxsQmFj
a3MpKS5sZWFrUmVmKCk7CiAgICAgICAgIHJldHVybiBub0VycjsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1Jl
YWRlci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlh
VHJhY2tSZWFkZXIuaAppbmRleCAxMjA1YmMyNmRhZmVlN2RkNGZkY2E3Yzg2NjM4MThmZDhmODk3
NDJjLi5kZDI1ZmMzZGI3MmNlODZmOGVlNzRlMWM0ZGNjOGQ5ZThjNDcyZjIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1Jl
YWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVRyYWNrUmVhZGVyLmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgV29ya1F1ZXVlOwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQXVkaW9UcmFja1ByaXZhdGU7CiBjbGFzcyBJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlOwotY2xhc3MgTWVkaWFTYW1wbGU7CitjbGFzcyBNZWRpYVNhbXBsZXNC
bG9jazsKIGNsYXNzIFRyYWNrUHJpdmF0ZUJhc2U7CiBjbGFzcyBWaWRlb1RyYWNrUHJpdmF0ZTsK
IH0KQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIE1lZGlhVGltZSBncmVhdGVzdFByZXNl
bnRhdGlvblRpbWUoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RW5hYmxlZChib29sIGVuYWJsZWQp
IHsgbV9pc0VuYWJsZWQgPSBlbmFibGVkID8gRW5hYmxlZDo6VHJ1ZSA6IEVuYWJsZWQ6OkZhbHNl
OyB9Ci0gICAgdm9pZCBhZGRTYW1wbGUoUmVmPFdlYkNvcmU6Ok1lZGlhU2FtcGxlPiYmLCBNVFBs
dWdpbkJ5dGVTb3VyY2VSZWYpOworICAgIHZvaWQgYWRkU2FtcGxlKFdlYkNvcmU6Ok1lZGlhU2Ft
cGxlc0Jsb2NrJiYsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZik7CiAgICAgdm9pZCB3YWl0Rm9yU2Ft
cGxlKEZ1bmN0aW9uPGJvb2woV2ViQ29yZTo6U2FtcGxlTWFwJiwgYm9vbCk+JiYpIGNvbnN0Owog
ICAgIHZvaWQgZmluaXNoUGFyc2luZygpOwogCkBAIC0xMTEsNiArMTExLDggQEAgcHJpdmF0ZToK
ICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxTYW1wbGVTdG9yYWdlPiBtX3NhbXBsZVN0b3Jh
Z2UgV1RGX0dVQVJERURfQllfTE9DSyhtX3NhbXBsZVN0b3JhZ2VMb2NrKTsKICAgICBSZWY8Y29u
c3QgTG9nZ2VyPiBtX2xvZ2dlcjsKICAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50aWZpZXI7Cisg
ICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fZm9ybWF0RGVzY3JpcHRpb247
CisgICAgUmVmUHRyPGNvbnN0IFdlYkNvcmU6OlRyYWNrSW5mbz4gbV90cmFja0luZm87CiB9Owog
CiBjb25zdGV4cHIgTWVkaWFUcmFja1JlYWRlcjo6V3JhcHBlckNsYXNzIE1lZGlhVHJhY2tSZWFk
ZXI6OndyYXBwZXJDbGFzcygpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggYzM4OGJhODJjYjFiZGVjNjI4YmQ4OWQwMDE3MTQ5ODI0NWFlMTJjMy4u
ODU4ZmE1NGE5OTgxM2RkYzI2MDZkN2QyMmY5NTZhYWNjZDhjYTQwNCAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIy
LTAzLTA4ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2
ZSBNZWRpYUZvcm1hdFJlYWRlciBwbHVnaW4gdXNlIFdlYk1QYXJzZXIgZGlyZWN0bHkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzU5NAorICAgICAg
ICByZGFyOi8vODk5NjAzMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAuY3BwOgor
CiAyMDIyLTAzLTA1ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAg
ICAgU3BsaXQgU291cmNlQnVmZmVyUGFyc2VyV2ViTSBhbmQgaGF2ZSBwbGF0Zm9ybSBhZ25vc3Rp
YyBXZWJNUGFyc2VyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvU2FtcGxlTWFwLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1w
bGVNYXAuY3BwCmluZGV4IDcxMjA1OGEzNjg4ODc3NmIxNzc4ZTRkY2Q5ZDhhOTBjMDIwNmFlYTgu
LmVkZWUzMTJiY2UyM2MxYWYwM2JlMGFmMGI2MmJkMjYzYmY1MzBjMDUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAuY3BwCkBAIC03MCw3ICs3MCw2
IEBAIHB1YmxpYzoKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fZmxhZ3M7IH0KICAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHsgUGxhdGZvcm1TYW1wbGU6Ok5vbmUsIHsgbnVsbHB0ciB9IH07IH0KICAg
ICBQbGF0Zm9ybVNhbXBsZTo6VHlwZSBwbGF0Zm9ybVNhbXBsZVR5cGUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBQbGF0Zm9ybVNhbXBsZTo6Tm9uZTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJh
bmdlPiBieXRlUmFuZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsIHsgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454108</attachid>
            <date>2022-03-08 05:16:21 -0800</date>
            <delta_ts>2022-03-08 16:35:32 -0800</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>bug-237594-20220309001619.patch</filename>
            <type>text/plain</type>
            <size>185719</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwOTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMThlNGYwMWJmM2ZlY2Yw
ZWMyMDkyMDE1NmM1YjQxYWQ2MGZkNTNjYS4uNmFhMTUyMGM5ZmIzMWExZmRiMmRlNmQ3YzQwODc0
OTNiN2Q1NTNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyMSBAQAorMjAyMi0wMy0wOCAgSmVh
bi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIEhhdmUgTWVkaWFGb3Jt
YXRSZWFkZXIgcGx1Z2luIHVzZSBXZWJNUGFyc2VyIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1OTQKKyAgICAgICAgcmRhcjovLzg5
OTYwMzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL01lZGlhU2Ft
cGxlLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZTo6Ynl0ZVJhbmdlIGNvbnN0KTog
SGF2ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL1ZpZGVvRnJh
bWUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1ZpZGVvRnJhbWUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQVZGT2JqQ1NhbXBsZTo6Ynl0ZVJhbmdlRm9y
QXR0YWNobWVudCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmg6IEV4cG9ydCBzeW1ib2xzLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Y3JlYXRlQnl0ZVJhbmdlU2FtcGxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPblRyYWNrRW50cnkpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFt
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cHJvdmlkZU1lZGlhRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cmV0dXJuU2Ft
cGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBl
bmRpbmdBdWRpb1NhbXBsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1Nv
dXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRy
YWNrRGF0YTo6Y3JlYXRlQnl0ZVJhbmdlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJN
UGFyc2VyOjpUcmFja0RhdGE6OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5oOgorICAgICAgICAq
IHBsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgor
CisyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3BsaXQgU291cmNlQnVmZmVyUGFyc2VyV2ViTSBhbmQgaGF2ZSBwbGF0Zm9ybSBhZ25vc3Rp
YyBXZWJNUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzc0NzIKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODk4MTA5NjkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdCByYXcgV2ViTVBhcnNl
ciBmcm9tIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gYW5kIGludHJvZHVjZSBwbGF0Zm9ybQorICAg
ICAgICBhZ25vc3RpYyBNZWRpYVNhbXBsZXNCbG9jayBvYmplY3RzIGFuZCBUcmFja0luZm8KKwor
ICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBsYXRmb3JtL01lZGlhU2FtcGxlLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZTo6
ZHVtcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0luZm86OmlzQXVkaW8gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjppc1ZpZGVvIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRyYWNrSW5mbzo6dHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFj
a0luZm86Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjpv
cGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrSW5mbzo6VHJhY2tJbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvSW5mbzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlZpZGVvSW5mbzo6VmlkZW9JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvSW5mbzo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvSW5mbzo6QXVkaW9JbmZvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpzZXRJbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjppbmZvIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU2FtcGxlc0Jsb2NrOjppc1ZpZGVvIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U2FtcGxlc0Jsb2NrOjppc0F1ZGlvIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Ft
cGxlc0Jsb2NrOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Js
b2NrOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2s6OnNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2s6OmlzRW1wdHkgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2s6OmNsZWFyKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjp0YWtlU2FtcGxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6Zmlyc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTYW1wbGVzQmxvY2s6Omxhc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTYW1wbGVzQmxvY2s6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Ft
cGxlc0Jsb2NrOjplbmQgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0ZpbGVSZWFkZXJDb2NvYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0ZpbGVSZWFkZXI6OmRlbXV4V2ViTURhdGEgY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3MuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVNhbXBsZUFWRk9iakMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW06CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLmguCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMubW06IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojpjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRU
b0NNVHJhbnNmZXJGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVlDYkNS
TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRy
YWNrSW5mbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVy
UGFyc2VyV2ViTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZWdtZW50UmVhZEVycm9yVG9XZWJt
U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OldlYk1QYXJzZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6fldlYk1QYXJzZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViTVBhcnNlcjo6cmVzZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2Vy
OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpwYXJzZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJNUGFyc2VyOjpzZXRMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
TVBhcnNlcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjp0cmFj
a0RhdGFGb3JUcmFja051bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkVs
ZW1lbnRCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkVsZW1lbnRFbmQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FYm1sKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYk1QYXJzZXI6Ok9uU2VnbWVudEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6Ok9uSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkNsdXN0ZXJC
ZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPblRyYWNrRW50cnkpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25CbG9ja0JlZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tFbmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6T25TaW1wbGVCbG9ja0JlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9u
U2ltcGxlQmxvY2tFbmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25CbG9ja0dy
b3VwQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25CbG9ja0dyb3VwRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZl
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OnJlYWRG
cmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6
OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFt
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6aXNTdXBwb3J0ZWRWaWRlb0Nv
ZGVjKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OmlzU3VwcG9ydGVkQXVkaW9Db2Rl
Yyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OmlzV2ViTUZvcm1hdFJlYWRlckF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJNUGFyc2VyOjpwcm92aWRlTWVkaWFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnBhcnNlZEluaXRpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cmV0dXJuU2FtcGxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRUcmltbWluZ0RhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y29udGVudEtleVJlcXVl
c3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ01lZGlhRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRTaG91bGRQcm92aWRl
TWVkaWFEYXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpzaG91bGRQcm92aWRlTWVkaWFkYXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldExvZ2dlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2Vi
TS5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OnBhcnNlZFRyaW1t
aW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpDYWxsYmFjazo6Y2FuRGVj
cnlwdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpDYWxsYmFjazo6Y29u
dGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYk1QYXJzZXI6OmxvZ2dlclB0ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJNUGFyc2VyOjpsb2dJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6
OlRyYWNrRGF0YTo6VHJhY2tEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRy
YWNrRGF0YTo6dHJhY2tUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6
OlRyYWNrRGF0YTo6Zm9ybWF0RGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpzZXRGb3JtYXREZXNjcmlwdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OnBhcnNlciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNrRGF0YTo6ZHJhaW5QZW5k
aW5nU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0
YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRh
OjpWaWRlb1RyYWNrRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1Ry
YWNrRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OkF1ZGlvVHJh
Y2tEYXRhOjpBdWRpb1RyYWNrRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OmFwcGVuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6c2V0RGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpsb2dnZXJQdHIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6bG9nSWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0
aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRp
bGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9QbGF0Zm9ybVZpZGVv
Q29sb3JQcmltYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUGxhdGZvcm1WaWRl
b1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1Bs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
VmlkZW9JbmZvRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZVZpZGVvSW5mb0Zyb21WUDlIZWFkZXJQYXJzZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlVmlkZW9JbmZvRnJvbVZQOEhlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUF1ZGlvSW5mb0ZvckZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZU9wdXNQcml2YXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcHVzQXVkaW9JbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZvcmJpc0F1ZGlvSW5mbyk6CisKKzIwMjItMDIt
MjMgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBIYXZlIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0gdXNlIFNoYXJlZEJ1ZmZlciBpbnRlcm5hbGx5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzcwNzgKKyAgICAgICAg
cmRhcjovLzg5MzQ4NzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBpcyBhIHJlZmFjdG9yIHRvIGFsbG93IFNvdXJjZUJ1ZmZlclBhcnNlciB0
byByZXR1cm4gU2hhcmVkQnVmZmVyCisgICAgICAgIHJhdGhlciB0aGFuIENNQmxvY2tCdWZmZXIu
CisKKyAgICAgICAgTm8gY2hhbmdlIGluIG9ic2VydmFibGUgYmVoYXZpb3Vycy4KKyAgICAgICAg
Q292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UHJpdmF0ZTo6cmVlbnF1ZXVlTWVkaWFGb3JUaW1lKTogRmx5LWJ5IGZpeDogdHlwby4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6OmRpZFJlY2VpdmVTYW1wbGUpOiBGbHkt
YnkgZml4LCAgZXhpdCBlYXJseQorICAgICAgICBpZiBlbmQgdGltZSBpcyBsb3dlciB0aGFuIHN0
YXJ0IHRpbWUgd2hpY2ggY2FuIGhhcHBlbiBpZiB0aGUgZHVyYXRpb24gaXMKKyAgICAgICAgc21h
bGxlciB0aGFuIGNvbnRpZ3VvdXNGcmFtZVRvbGVyYW5jZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRl
QmxvY2tCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpyZXNl
dENvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpW
aWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cG9zdFByb2Nlc3MpOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OnJlc2V0
Q29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1
ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZXNldENvbXBs
ZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0Rh
dGE6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRy
YWNrRGF0YTo6ZHJhaW5QZW5kaW5nU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnBvc3RQcm9jZXNzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6cGFyc2VWUDhGcmFtZUhlYWRlcik6IE1ha2UgbWV0aG9kcyBjb25zdC4KKwogMjAyMi0wMi0y
MyAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhYmls
aXR5IHRvIGNvbnZlcnQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciB0byBDTUJsb2NrQnVmZmVyCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
UEFML0NoYW5nZUxvZwppbmRleCA3ODEzNWRkZDAzNzUwZjk4ZTIzZWNlMTYzNGI2YjcyMTU3Mzdj
MmRkLi4yNjk4NjRmZDM1OGFmMTc4OWQ2ZGMxNGExYTMyMzk2NjI0NDM4ZjVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMi0wMy0wNCAgSmVhbi1ZdmVzIEF2ZW5hcmQg
IDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0g
YW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAgICAgIHJkYXI6Ly9wcm9i
bGVtLzg5ODEwOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwOgorICAgICAgICAqIHBhbC9jZi9D
b3JlTWVkaWFTb2Z0TGluay5oOiBNZXRob2QgQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSB3YXNu
J3Qgc29mdC1saW5rZWQuCisKIDIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFw
cGxlLmNvbT4KIAogICAgICAgICBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkgY29udmVyc2lvbiB0
byBDTVRpbWUgaW5jb3JyZWN0bHkgY3JlYXRlcyBhIHZhbGlkIHRpbWUuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDU3
MTA5ZGIwN2E1Nzk5N2VmZmRkNTY1ZDA0OTA5ZGQwNjFkODk3ZmIuLjVkNjkwNzdmNWZiZTEzZDFm
MzFjYzUwMWJhMDZlMzdkNTcwYjE1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjIt
MDMtMDQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxp
dCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGljIFdlYk1Q
YXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NzQ3MgorICAgICAgICByZGFyOi8vcHJvYmxlbS84OTgxMDk2OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJl
YWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2Ft
cGxlQnl0ZVJhbmdlOjpNZWRpYVNhbXBsZUJ5dGVSYW5nZSk6CisgICAgICAgICogU2hhcmVkL21h
Yy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oOiBNZWRpYVNhbXBsZUJ5
dGVSYW5nZS5oCisgICAgICAgIGRpZG4ndCBuZWVkIHRvIGluaGVyaXQgZnJvbSBNZWRpYVNhbXBs
ZUFWRk9iakMuIAorCiAyMDIyLTAzLTA4ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGQgYSBwcmVmZXJlbmNlIHRvIG11dGUgdmlkZW8gY2FwdHVyZSBpbiBj
YXNlIGF1ZGlvIGNhcHR1cmUgZ2V0cyBpbnRlcnJ1cHRlZApAQCAtNzgxLDcgKzc5NCw4IEBACiAg
ICAgICAgICogU2NyaXB0cy91cGRhdGUtZHlsZC1lbnZpcm9ubWVudC1sb2FkLWNvbW1hbmQ6IEFk
ZGVkLgogICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHk6IEFkZGVkLgogICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbWFjaF9vLnB5OiBBZGRlZC4KLSAgICAgICAgKF91dGY4X2J5dGVzX3RvX3N0
cik6CisgICAgICAgIAorICAgICAgICAoX3V0ZjhfYnl0ZXNfdG9fc3RyKTogdW5mb3J0dW5hdGVs
eSBkb2Vzbid0IGFsbG93IHRvIHNraXAgYSBnaXZlbiBudW1iZXIKICAgICAgICAgKF9tYWNoX29f
aW50X2ZpZWxkKToKICAgICAgICAgKF9tYWNoX29faW50X2ZpZWxkLl9nZXRfbWFjaF9vX2ludF9m
aWVsZCk6CiAgICAgICAgIChfbWFjaF9vX2ludF9maWVsZC5fc2V0X21hY2hfb19pbnRfZmllbGQp
OgpAQCAtODM0LDcgKzg0OCw4IEBACiAgICAgICAgIChNYWNoT0hlYWRlcjY0TEUuX19pbml0X18p
OgogICAgICAgICAoTWFjaE9GaWxlKToKICAgICAgICAgKE1hY2hPRmlsZS5fX2luaXRfXyk6Ci0g
ICAgICAgIChpc19tYWNob19ieXRlcyk6CisgICAgICAgIAorICAgICAgICAoaXNfbWFjaG9fYnl0
ZXMpOiB1bmZvcnR1bmF0ZWx5IGRvZXNuJ3QgYWxsb3cgdG8gc2tpcCBhIGdpdmVuIG51bWJlcgog
ICAgICAgICAoaXNfbWFjaG9fZmlsZSk6CiAgICAgICAgIChlbnVtZXJhdGVfbWFjaG9fZmlsZXMp
OgogICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgpAQCAtMjU3OCw3
ICsyNTkzLDggQEAKICAgICAgICAgVXBkYXRlIGNvZGUgYmFzZSB0byByZWZsZWN0IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSBBUEkgY2hhbmdlcy4KIAogICAgICAgICAqIFNoYXJlZC9BUEkvQVBJU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmg6Ci0gICAgICAgIChBUEk6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyk6CisgICAgICAgIChBUEk6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZQorICAgICAgICA6OmNyZWF0ZUZyb21XaXJlQnl0ZXMpOiB1bmZvcnR1bmF0ZWx5IGRvZXNu
J3QgYWxsb3cgdG8gc2tpcCBhIGdpdmVuIG51bWJlcgogICAgICAgICAoQVBJOjpTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmRhdGFSZWZlcmVuY2UgY29uc3QpOgogICAgICAgICAoQVBJOjpTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmFkb3B0KTogRGVsZXRlZC4KICAgICAgICAgKiBTaGFyZWQvU2Vzc2lv
blN0YXRlLmNwcDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1l
ZGlhU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0
TGluay5jcHAKaW5kZXggODdiNTYyMDdlODRkZjNmNDk5OWIzNmY1NWYyZGY2ZjhjOTlkNTc2Yi4u
ZDc0YjhkNWI2YzMzODVmM2Q4M2M5M2RmMjMxMGY3Y2RhMmIyNjUzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5jcHAKQEAgLTE2OSw2ICsxNjks
NyBAQCBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQQUwsIENvcmVN
ZWRpYSwgQ01UaW1lYmFzZVJlbW92ZVRpbWVyRAogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VS
Q0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENNVGltZWJhc2VTZXRUaW1lckRpc3BhdGNo
U291cmNlTmV4dEZpcmVUaW1lLCBPU1N0YXR1cywgKENNVGltZWJhc2VSZWYgdGltZWJhc2UsIGRp
c3BhdGNoX3NvdXJjZV90IHRpbWVyU291cmNlLCBDTVRpbWUgZmlyZVRpbWUsIHVpbnQzMl90IGZs
YWdzKSwgKHRpbWViYXNlLCB0aW1lclNvdXJjZSwgZmlyZVRpbWUsIGZsYWdzKSwgUEFMX0VYUE9S
VCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1l
ZGlhLCBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJjZVRvRmlyZUltbWVkaWF0ZWx5LCBP
U1N0YXR1cywgKENNVGltZWJhc2VSZWYgdGltZWJhc2UsIGRpc3BhdGNoX3NvdXJjZV90IHRpbWVy
U291cmNlKSwgKHRpbWViYXNlLCB0aW1lclNvdXJjZSksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktf
RlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01UaW1lQ29w
eUFzRGljdGlvbmFyeSwgQ0ZEaWN0aW9uYXJ5UmVmLCAoQ01UaW1lIHRpbWUsIENGQWxsb2NhdG9y
UmVmIGFsbG9jYXRvciksICh0aW1lLCBhbGxvY2F0b3IpLCBQQUxfRVhQT1JUKQorU09GVF9MSU5L
X0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENNVmlkZW9G
b3JtYXREZXNjcmlwdGlvbkNyZWF0ZSwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0
b3IsIENNVmlkZW9Db2RlY1R5cGUgY29kZWNUeXBlLCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhl
aWdodCwgQ0ZEaWN0aW9uYXJ5UmVmIGV4dGVuc2lvbnMsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlv
blJlZiogZm9ybWF0RGVzY3JpcHRpb25PdXQpLCAoYWxsb2NhdG9yLCBjb2RlY1R5cGUsIHdpZHRo
LCBoZWlnaHQsIGV4dGVuc2lvbnMsIGZvcm1hdERlc2NyaXB0aW9uT3V0KSwgUEFMX0VYUE9SVCkK
IFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlh
LCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlciwgT1NTdGF0dXMs
IChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENWSW1hZ2VCdWZmZXJSZWYgaW1hZ2VCdWZmZXIs
IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogb3V0RGVzYyksIChhbGxvY2F0b3IsIGltYWdl
QnVmZmVyLCBvdXREZXNjKSwgUEFMX0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09V
UkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25H
ZXREaW1lbnNpb25zLCBDTVZpZGVvRGltZW5zaW9ucywgKENNVmlkZW9Gb3JtYXREZXNjcmlwdGlv
blJlZiB2aWRlb0Rlc2MpLCAodmlkZW9EZXNjKSwgUEFMX0VYUE9SVCkKIFNPRlRfTElOS19GVU5D
VElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0
RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zLCBDR1NpemUsIChDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNjLCBCb29sZWFuIHVzZVBpeGVsQXNwZWN0UmF0aW8s
IEJvb2xlYW4gdXNlQ2xlYW5BcGVydHVyZSksICh2aWRlb0Rlc2MsIHVzZVBpeGVsQXNwZWN0UmF0
aW8sIHVzZUNsZWFuQXBlcnR1cmUpLCBQQUxfRVhQT1JUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oCmluZGV4IDU3MGE2YTk4NTNjNDQ4MTY4Yjk5MDIy
MDQyMzAwOTZkZmU4ZmViMDEuLjMzY2ExYjI2ZjNkMzdlNTkyNWEyNWI2YWNmYmQxNThhNDMyZTdh
YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1lZGlhU29mdExp
bmsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmgK
QEAgLTI2Myw2ICsyNjMsOCBAQCBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQQUwsIENv
cmVNZWRpYSwgQ01UaW1lYmFzZVNldFRpbWVyRGlzcGF0Y2hTb3VyY2VUbwogI2RlZmluZSBDTVRp
bWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJjZVRvRmlyZUltbWVkaWF0ZWx5IHNvZnRMaW5rX0Nv
cmVNZWRpYV9DTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJjZVRvRmlyZUltbWVkaWF0ZWx5
CiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQQUwsIENvcmVNZWRpYSwgQ01UaW1lQ29w
eUFzRGljdGlvbmFyeSwgQ0ZEaWN0aW9uYXJ5UmVmLCAoQ01UaW1lIHRpbWUsIENGQWxsb2NhdG9y
UmVmIGFsbG9jYXRvciksICh0aW1lLCBhbGxvY2F0b3IpKQogI2RlZmluZSBDTVRpbWVDb3B5QXNE
aWN0aW9uYXJ5IHNvZnRMaW5rX0NvcmVNZWRpYV9DTVRpbWVDb3B5QXNEaWN0aW9uYXJ5CitTT0ZU
X0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQQUwsIENvcmVNZWRpYSwgQ01WaWRlb0Zvcm1hdERl
c2NyaXB0aW9uQ3JlYXRlLCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ01W
aWRlb0NvZGVjVHlwZSBjb2RlY1R5cGUsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0LCBD
RkRpY3Rpb25hcnlSZWYgZXh0ZW5zaW9ucywgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmKiBm
b3JtYXREZXNjcmlwdGlvbk91dCksIChhbGxvY2F0b3IsIGNvZGVjVHlwZSwgd2lkdGgsIGhlaWdo
dCwgZXh0ZW5zaW9ucywgZm9ybWF0RGVzY3JpcHRpb25PdXQpKQorI2RlZmluZSBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25DcmVhdGUgc29mdExpbmtfQ29yZU1lZGlhX0NNVmlkZW9Gb3JtYXREZXNj
cmlwdGlvbkNyZWF0ZQogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVk
aWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyLCBPU1N0YXR1
cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ1ZJbWFnZUJ1ZmZlclJlZiBpbWFnZUJ1ZmZl
ciwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmKiBvdXREZXNjKSwgKGFsbG9jYXRvciwgaW1h
Z2VCdWZmZXIsIG91dERlc2MpKQogI2RlZmluZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVh
dGVGb3JJbWFnZUJ1ZmZlciBzb2Z0TGlua19Db3JlTWVkaWFfQ01WaWRlb0Zvcm1hdERlc2NyaXB0
aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFBB
TCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNpb25zLCBDTVZp
ZGVvRGltZW5zaW9ucywgKENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiB2aWRlb0Rlc2MpLCAo
dmlkZW9EZXNjKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggOThiMDM1NzkxYTZlYmIw
ZDlmMTU3MWE1N2E0MmVjZDVmMTU1Y2ZiOS4uNWRlZTc1NDA1MzU3OWY1NWI1NWYyZmU0YWQwZGQw
YTY5ZGViZmQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTMxMiw2ICszMTIsNyBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9U
cmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJl
Z2lzdHJ5LmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMubW0K
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9GbG9hdFJlY3RDb2NvYS5tbQogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EuY3BwCkBAIC02NDksNiArNjUwLDcgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
VVRJUmVnaXN0cnkuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CmluZGV4IGFhNDRmNWY1MzE2N2I5YmMwZjE0MjNmMjdiZmMyNGQ3MTdlYmFjZmEuLmY5
ZTBhYmFmNGI5MjJiODkzNzJmOWJhOTcyNTQwOWZiYzdiN2Y4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dApAQCAtMzgxLDYgKzM4MSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdl
Q2FjaGVXaXRoVGltZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1h
dHJpeENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9BdWRpb1RyYWNrUHJpdmF0ZVdlYk0uY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9DTVV0aWxpdGllcy5tbSBAbm8tdW5pZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0NvbG9yQ29jb2EubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zsb2F0UmVjdENvY29h
Lm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2
ODMyNDA1Y2U3OTc4ODQ5NDljYjM0MzAyM2I5MDAxYWJlZWI2M2Y1Li4xMzE2MjFiNDc0MjViNGM3
YWQ2YWNhMzdjNWNjNWNiMmIyNzM2NzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTgwLDYgKzE1ODAsOCBAQAogCQk1MTRD
NzY3QjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NjYwQ0U5MjNBMTAw
N0VGM0NEIC8qIFJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCAqLzsgfTsKIAkJNTE0Qzc2N0QwQ0U5
MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjY4MENFOTIzQTEwMDdFRjNDRCAvKiBS
ZXNvdXJjZVJlcXVlc3RCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2N0YwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9u
c2VCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTUwQjVERDI3Q0RG
MkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTBCNURDMjdDREYyRTAwMDRGQzgxRSAvKiBDTVV0aWxpdGll
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUx
NTBCNURGMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTBCNURFMjdDREY0OTkwMDRGQzgxRSAv
KiBDTVV0aWxpdGllcy5tbSAqLzsgfTsKIAkJNTE1MUYwN0UyNjE1NDM1QTAwRkRCMkI0IC8qIE1l
ZGlhVW5pcXVlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE1MUYwN0IyNjE1MzYzRjAwRkRCMkI0IC8qIE1lZGlhVW5pcXVlSWRlbnRp
Zmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUxNUJFMTkwMUQ1NEY1RkIwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92aWRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1QkUxODkxRDU0RjVG
NjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVyLmggKi87IH07CiAJCTUxNUJFMTkyMUQ1
NEY1RkIwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMThCMUQ1NEY1RjYwMEREN0M2OCAvKiBHYW1l
cGFkUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtOTc3OSw2ICs5NzgxLDggQEAKIAkJNTE0Qzc2NjgwQ0U5MjNBMTAwN0VGM0NEIC8q
IFJlc291cmNlUmVxdWVzdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVzb3VyY2VSZXF1ZXN0QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRD
NzY2OTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyog
UmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVzb3VyY2VSZXNwb25zZUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1
MEI1REMyN0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENN
VXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNTBCNURFMjdDREY0
OTkwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENNVXRp
bGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTUxRjA3QjI2MTUzNjNG
MDBGREIyQjQgLyogTWVkaWFVbmlxdWVJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1lZGlhVW5pcXVlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTVCRTE4ODFENTRGNUY2MDBERDdDNjggLyogRW1wdHlHYW1lcGFkUHJvdmlk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRW1wdHlHYW1lcGFk
UHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTVCRTE4OTFENTRG
NUY2MDBERDdDNjggLyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRW1wdHlHYW1lcGFkUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI5MjkwLDYgKzI5Mjk0LDggQEAKIAkJCQk3QkNENDJEQzI3MDVDOTQ5MDBF
QjIxMjcgLyogQU5HTEVVdGlsaXRpZXNDb2NvYS5oICovLAogCQkJCUNERjk5NTAxMjRDMjgxNDkw
MDJFQTA2MiAvKiBBdWRpb1RyYWNrUHJpdmF0ZVdlYk0uY3BwICovLAogCQkJCUNERjk5NTAwMjRD
MjgxNDkwMDJFQTA2MiAvKiBBdWRpb1RyYWNrUHJpdmF0ZVdlYk0uaCAqLywKKwkJCQk1MTUwQjVE
QzI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMuaCAqLywKKwkJCQk1MTUwQjVERTI3Q0RG
NDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gKi8sCiAJCQkJRjQ4RDJBQTMyMTU5NzQwRDAw
QzY3NTJCIC8qIENvbG9yQ29jb2EuaCAqLywKIAkJCQlGNDhEMkFBNDIxNTk3NDBEMDBDNjc1MkIg
LyogQ29sb3JDb2NvYS5tbSAqLywKIAkJCQlCMjc1MzU0QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRSZWN0Q29jb2EubW0gKi8sCkBAIC0zMzg5Nyw2ICszMzkwMyw3IEBACiAJCQkJRjREMDc1NTky
MzREODIzMzAwODgxRTczIC8qIENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0YVNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTgwMzcxNjIxQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxMzE0RkEwOUQ1MDA3NDU3QUUgLyogQ2xvc2VFdmVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE1MEI1REQyN0NERjJFMDAwNEZDODFFIC8qIENNVXRp
bGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMEMwNTRDQjExMThDOEU0MDBDRTI2MzYgLyog
Q29kZUdlbmVyYXRvci5wbSBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNURGMEU4MUI5QUIwMEIy
NTk2NSAvKiBDb2xsYXBzZWRCb3JkZXJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQyNUE0
OUExODI5MkI4NDAwMjBDRkNGIC8qIENvbGxlY3Rpb25JbmRleENhY2hlLmggaW4gSGVhZGVycyAq
LywKQEAgLTM4ODA0LDYgKzM4ODExLDcgQEAKIAkJCQlDREY0QjcxNTFFMDBCN0U1MDBFMjM1QTIg
LyogQ0RNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQjcwNDVCMUY3NDY1QTEwMDM5MjNERiAv
KiBDRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREMyMjQyODFG
NzU2OTY2MDA1RjA3N0IgLyogQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0g
aW4gU291cmNlcyAqLywKKwkJCQk1MTUwQjVERjI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRp
ZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQwOTBGQjFBQTUxRTFEMDA5MTE5MUEgLyogQ29u
dGVudEZpbHRlclVuYmxvY2tIYW5kbGVyQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk0NkM2
OTZDQzFFNzIwNUZDMDA1OTc5MzcgLyogQ1BVTW9uaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQUJBNzZDQTExRDIwRTUwMDA0QzIwMUMgLyogQ1NTUHJvcGVydHlOYW1lcy5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCmluZGV4IDBhNmYyOGEy
MDEzMTM1NTM1OGI2ZTdmOWNkYzEyNmE0ZDVjMGU2YWMuLmFkNmY4NTZlZGFmZGZkOTIxNzM0ZDMz
NzE4MTA3Y2NjNzM1ODY0MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01l
ZGlhU2FtcGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUuaApA
QCAtMjYsNyArMjYsMTEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgi
CisjaW5jbHVkZSAiRm91ckNDLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1WaWRlb0NvbG9yU3BhY2Uu
aCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9U
eXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0VudW1U
cmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CkBAIC00MCw4ICs0NCwxMSBAQCB0eXBlZGVmIGNvbnN0IHN0cnVj
dCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uICpDTUZvcm1hdERlc2NyaXB0aW9uUmVmOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI7CiBjbGFz
cyBNb2NrU2FtcGxlQm94OwogY2xhc3MgUHJvY2Vzc0lkZW50aXR5OworY2xhc3MgU2hhcmVkQnVm
ZmVyOworc3RydWN0IFRyYWNrSW5mbzsKIAogc3RydWN0IFBsYXRmb3JtU2FtcGxlIHsKICAgICBl
bnVtIFR5cGUgewpAQCAtNTYsNyArNjMsNyBAQCBzdHJ1Y3QgUGxhdGZvcm1TYW1wbGUgewogICAg
ICAgICBjb25zdCBNb2NrU2FtcGxlQm94KiBtb2NrU2FtcGxlQm94OwogICAgICAgICBDTVNhbXBs
ZUJ1ZmZlclJlZiBjbVNhbXBsZUJ1ZmZlcjsKICAgICAgICAgR3N0U2FtcGxlKiBnc3RTYW1wbGU7
Ci0gICAgICAgIHN0ZDo6cGFpcjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWYsIENNRm9ybWF0RGVzY3Jp
cHRpb25SZWY+IGJ5dGVSYW5nZVNhbXBsZTsKKyAgICAgICAgc3RkOjpwYWlyPE1UUGx1Z2luQnl0
ZVNvdXJjZVJlZiwgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25zdCBUcmFja0luZm8+PiBieXRl
UmFuZ2VTYW1wbGU7CiAgICAgfSBzYW1wbGU7CiB9OwogCkBAIC03MiwxMyArNzksMTcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgRmxvYXRTaXplIHByZXNlbnRhdGlvblNpemUoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29u
c3QgTWVkaWFUaW1lJikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0RpdmlzYWJsZSgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNEaXZpc2FibGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfTsKICAgICBlbnVtIERpdmlkZUZsYWdzIHsgQmVmb3JlUHJlc2VudGF0aW9uVGltZSwgQWZ0
ZXJQcmVzZW50YXRpb25UaW1lIH07CiAgICAgZW51bSBjbGFzcyBVc2VFbmRUaW1lIDogYm9vbCB7
CiAgICAgICAgIERvTm90VXNlLAogICAgICAgICBVc2UsCiAgICAgfTsKLSAgICB2aXJ0dWFsIHN0
ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1wbGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUo
Y29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBVc2VFbmRUaW1lID0gVXNlRW5kVGlt
ZTo6RG9Ob3RVc2UpID0gMDsKKyAgICB2aXJ0dWFsIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1w
bGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiwgVXNlRW5k
VGltZSA9IFVzZUVuZFRpbWU6OkRvTm90VXNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG51bGxwdHIgfTsKKyAgICB9CiAg
ICAgdmlydHVhbCBSZWY8TWVkaWFTYW1wbGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29u
c3QgPSAwOwogCiAgICAgdmlydHVhbCBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gZ2V0
UkdCQUltYWdlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KQEAgLTk4LDcgKzEwOSw3
IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IGJ5dGVPZmZzZXQgeyAwIH07CiAgICAgICAgIHNp
emVfdCBieXRlTGVuZ3RoIHsgMCB9OwogICAgIH07Ci0gICAgdmlydHVhbCBzdGQ6Om9wdGlvbmFs
PEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgc3RkOjpvcHRp
b25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsg
fQogCiAgICAgZW51bSBjbGFzcyBWaWRlb1JvdGF0aW9uIHsKICAgICAgICAgTm9uZSA9IDAsCkBA
IC0xMTksNyArMTMwLDExIEBAIHB1YmxpYzoKICAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyBy
ZXR1cm4gZmxhZ3MoKSAmIEhhc0FscGhhOyB9CiAgICAgYm9vbCBoYXNTeW5jSW5mbygpIGNvbnN0
IHsgcmV0dXJuIGZsYWdzKCkgJiBIYXNTeW5jSW5mbzsgfQogCi0gICAgdmlydHVhbCB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludCgie1BUUygiLCBwcmVz
ZW50YXRpb25UaW1lKCksICIpLCBEVFMoIiwgZGVjb2RlVGltZSgpLCAiKSwgZHVyYXRpb24oIiwg
ZHVyYXRpb24oKSwgIiksIGZsYWdzKCIsIChpbnQpZmxhZ3MoKSwgIiksIHByZXNlbnRhdGlvblNp
emUoIiwgcHJlc2VudGF0aW9uU2l6ZSgpLndpZHRoKCksICJ4IiwgcHJlc2VudGF0aW9uU2l6ZSgp
LmhlaWdodCgpLCAiKX0iKTsKKyAgICB9CisKICAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29u
c3QKICAgICB7CiAgICAgICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
QEAgLTEzNCw4ICsxNDksMTI4IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCitzdHJ1Y3QgQXVkaW9J
bmZvOworc3RydWN0IFZpZGVvSW5mbzsKKworc3RydWN0IFRyYWNrSW5mbyA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxUcmFja0luZm8+IHsKKyAgICBlbnVtIGNsYXNzIFRyYWNrVHlwZSB7
IFVua25vd24sIEF1ZGlvLCBWaWRlbyB9OworCisgICAgYm9vbCBpc0F1ZGlvKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZSgpID09IFRyYWNrVHlwZTo6QXVkaW87IH0KKyAgICBib29sIGlzVmlkZW8oKSBj
b25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHJhY2tUeXBlOjpWaWRlbzsgfQorCisgICAgVHJhY2tU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBUcmFja0luZm8mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHR5cGUo
KSAhPSBvdGhlci50eXBlKCkgfHwgY29kZWNOYW1lICE9IG90aGVyLmNvZGVjTmFtZSB8fCB0cmFj
a0lEICE9IG90aGVyLnRyYWNrSUQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBlcXVhbFRvKG90aGVyKTsKKyAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFRyYWNrSW5mbyYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisK
KyAgICBGb3VyQ0MgY29kZWNOYW1lOworICAgIHVpbnQ2NF90IHRyYWNrSUQgeyAwIH07CisKKyAg
ICB2aXJ0dWFsIH5UcmFja0luZm8oKSA9IGRlZmF1bHQ7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIGJvb2wgZXF1YWxUbyhjb25zdCBUcmFja0luZm8mIG90aGVyKSBjb25zdCA9IDA7CisgICAg
VHJhY2tJbmZvKFRyYWNrVHlwZSB0eXBlKQorICAgICAgICA6IG1fdHlwZSh0eXBlKSB7IH0KKwor
cHJpdmF0ZToKKyAgICBjb25zdCBUcmFja1R5cGUgbV90eXBlIHsgVHJhY2tUeXBlOjpVbmtub3du
IH07Cit9OworCitzdHJ1Y3QgVmlkZW9JbmZvIDogcHVibGljIFRyYWNrSW5mbyB7CisgICAgc3Rh
dGljIFJlZjxWaWRlb0luZm8+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9J
bmZvKCkpOyB9CisKKyAgICBGbG9hdFNpemUgc2l6ZTsKKyAgICAvLyBTaXplIGluIHBpeGVscyBh
dCB3aGljaCB0aGUgdmlkZW8gaXMgcmVuZGVyZWQuIFRoaXMgaXMgYWZ0ZXIgaXQgaGFzCisgICAg
Ly8gYmVlbiBzY2FsZWQgYnkgaXRzIGFzcGVjdCByYXRpby4KKyAgICBGbG9hdFNpemUgZGlzcGxh
eVNpemU7CisgICAgdWludDhfdCBiaXREZXB0aCB7IDggfTsKKyAgICBQbGF0Zm9ybVZpZGVvQ29s
b3JTcGFjZSBjb2xvclNwYWNlOworICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0
aW9uIHsgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmUgfTsKKworICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IGF0b21EYXRhOworCitwcml2YXRlOgorICAgIFZpZGVvSW5mbygpCisgICAg
ICAgIDogVHJhY2tJbmZvKFRyYWNrVHlwZTo6VmlkZW8pIHsgfQorICAgIGJvb2wgZXF1YWxUbyhj
b25zdCBUcmFja0luZm8mIG90aGVyVmlkZW9JbmZvKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAg
ICAgYXV0byYgb3RoZXIgPSBkb3duY2FzdDxjb25zdCBWaWRlb0luZm8+KG90aGVyVmlkZW9JbmZv
KTsKKyAgICAgICAgcmV0dXJuIHNpemUgPT0gb3RoZXIuc2l6ZSAmJiBkaXNwbGF5U2l6ZSA9PSBv
dGhlci5kaXNwbGF5U2l6ZSAmJiBiaXREZXB0aCA9PSBvdGhlci5iaXREZXB0aCAmJiBjb2xvclNw
YWNlID09IG90aGVyLmNvbG9yU3BhY2UgJiYgcm90YXRpb24gPT0gb3RoZXIucm90YXRpb24gJiYg
KCghYXRvbURhdGEgJiYgIW90aGVyLmF0b21EYXRhKSB8fCAoYXRvbURhdGEgJiYgb3RoZXIuYXRv
bURhdGEgJiYgKmF0b21EYXRhID09ICpvdGhlci5hdG9tRGF0YSkpOworICAgIH0KK307CisKK3N0
cnVjdCBBdWRpb0luZm8gOiBwdWJsaWMgVHJhY2tJbmZvIHsKKyAgICBzdGF0aWMgUmVmPEF1ZGlv
SW5mbz4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBBdWRpb0luZm8oKSk7IH0KKwor
ICAgIHVpbnQzMl90IHJhdGUgeyAwIH07CisgICAgdWludDMyX3QgY2hhbm5lbHMgeyAwIH07Cisg
ICAgdWludDMyX3QgZnJhbWVzUGVyUGFja2V0IHsgMCB9OworICAgIHVpbnQzMl90IGJpdERlcHRo
IHsgMTYgfTsKKyAgICBpbnQ4X3QgcHJvZmlsZSB7IDAgfTsKKyAgICBpbnQ4X3QgZXh0ZW5kZWRQ
cm9maWxlIHsgMCB9OworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY29va2llRGF0YTsKKwor
cHJpdmF0ZToKKyAgICBBdWRpb0luZm8oKQorICAgICAgICA6IFRyYWNrSW5mbyhUcmFja1R5cGU6
OkF1ZGlvKSB7IH0KKyAgICBib29sIGVxdWFsVG8oY29uc3QgVHJhY2tJbmZvJiBvdGhlckF1ZGlv
SW5mbykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIGF1dG8mIG90aGVyID0gZG93bmNhc3Q8
Y29uc3QgQXVkaW9JbmZvPihvdGhlckF1ZGlvSW5mbyk7CisgICAgICAgIHJldHVybiByYXRlID09
IG90aGVyLnJhdGUgJiYgY2hhbm5lbHMgPT0gb3RoZXIuY2hhbm5lbHMgJiYgYml0RGVwdGggPT0g
b3RoZXIuYml0RGVwdGggJiYgZnJhbWVzUGVyUGFja2V0ID09IG90aGVyLmZyYW1lc1BlclBhY2tl
dCAmJiBwcm9maWxlID09IG90aGVyLnByb2ZpbGUgJiYgZXh0ZW5kZWRQcm9maWxlID09IG90aGVy
LmV4dGVuZGVkUHJvZmlsZSAmJiAoKCFjb29raWVEYXRhICYmICFvdGhlci5jb29raWVEYXRhKSB8
fCAoY29va2llRGF0YSAmJiBvdGhlci5jb29raWVEYXRhICYmICpjb29raWVEYXRhID09ICpvdGhl
ci5jb29raWVEYXRhKSk7CisgICAgfQorfTsKKworY2xhc3MgTWVkaWFTYW1wbGVzQmxvY2sgewor
cHVibGljOgorICAgIHN0cnVjdCBNZWRpYVNhbXBsZUl0ZW0geworICAgICAgICBNZWRpYVRpbWUg
cHJlc2VudGF0aW9uVGltZTsKKyAgICAgICAgTWVkaWFUaW1lIGRlY29kZVRpbWU7CisgICAgICAg
IE1lZGlhVGltZSBkdXJhdGlvbjsKKyAgICAgICAgc3RkOjp2YXJpYW50PE1lZGlhU2FtcGxlOjpC
eXRlUmFuZ2UsIFJlZjxjb25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyPj4gZGF0YTsKKyAgICAg
ICAgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzIGZsYWdzOworICAgIH07CisKKyAgICB2b2lkIHNl
dEluZm8oUmVmUHRyPGNvbnN0IFRyYWNrSW5mbz4mJiBpbmZvKSB7IG1faW5mbyA9IFdURk1vdmUo
aW5mbyk7IH0KKyAgICBjb25zdCBUcmFja0luZm8qIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2lu
Zm8uZ2V0KCk7IH0KKyAgICBib29sIGlzVmlkZW8oKSBjb25zdCB7IHJldHVybiBtX2luZm8gJiYg
bV9pbmZvLT5pc1ZpZGVvKCk7IH0KKyAgICBib29sIGlzQXVkaW8oKSBjb25zdCB7IHJldHVybiBt
X2luZm8gJiYgbV9pbmZvLT5pc0F1ZGlvKCk7IH0KKyAgICBUcmFja0luZm86OlRyYWNrVHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvID8gbV9pbmZvLT50eXBlKCkgOiBUcmFja0luZm86
OlRyYWNrVHlwZTo6VW5rbm93bjsgfQorICAgIHZvaWQgYXBwZW5kKE1lZGlhU2FtcGxlSXRlbSYm
IGl0ZW0pIHsgbV9zYW1wbGVzLmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsgfQorICAgIHZvaWQgYXBw
ZW5kKE1lZGlhU2FtcGxlc0Jsb2NrJiYgYmxvY2spIHsgbV9zYW1wbGVzLmFwcGVuZFZlY3Rvcihz
dGQ6OmV4Y2hhbmdlKGJsb2NrLm1fc2FtcGxlcywgeyB9KSk7IH0KKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5zaXplKCk7IH07CisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmlzRW1wdHkoKTsgfQorICAgIHZvaWQgY2xlYXIoKSB7
IG1fc2FtcGxlcy5jbGVhcigpOyB9CisgICAgdXNpbmcgU2FtcGxlc1ZlY3RvciA9IFZlY3RvcjxN
ZWRpYVNhbXBsZUl0ZW0+OworICAgIFNhbXBsZXNWZWN0b3IgdGFrZVNhbXBsZXMoKSB7IHJldHVy
biBzdGQ6OmV4Y2hhbmdlKG1fc2FtcGxlcywgeyB9KTsgfQorCisgICAgY29uc3QgTWVkaWFTYW1w
bGVJdGVtJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVz
W2luZGV4XTsgfQorICAgIGNvbnN0IE1lZGlhU2FtcGxlSXRlbSYgZmlyc3QoKSBjb25zdCB7IHJl
dHVybiBtX3NhbXBsZXMuZmlyc3QoKTsgfQorICAgIGNvbnN0IE1lZGlhU2FtcGxlSXRlbSYgbGFz
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5sYXN0KCk7IH0KKyAgICBTYW1wbGVzVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5iZWdpbigp
OyB9CisgICAgU2FtcGxlc1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbV9zYW1wbGVzLmVuZCgpOyB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPGNvbnN0IFRyYWNr
SW5mbz4gbV9pbmZvOworICAgIFNhbXBsZXNWZWN0b3IgbV9zYW1wbGVzOworfTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OlZpZGVvSW5mbykKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6VHJhY2tJ
bmZvJiBpbmZvKSB7IHJldHVybiBpbmZvLmlzVmlkZW8oKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkF1ZGlv
SW5mbykKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6VHJhY2tJbmZvJiBp
bmZvKSB7IHJldHVybiBpbmZvLmlzQXVkaW8oKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19F
TkQoKQorCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxX
ZWJDb3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbj4gewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9WaWRlb0ZyYW1lLmNwcAppbmRleCBhNTQ5YzFhNWM0OGViMjNkNjRiYTNmZDM1Mzg0MDhiZDE1
NTIzNGYwLi4xNGNiNzBkMTcwYTA3MjFjMTdlYmYzZjE4ZDZkNDg0MTU3Zjc4NzFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcApAQCAtOTgsMTggKzk4LDYgQEAgdm9pZCBW
aWRlb0ZyYW1lOjpzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGlt
ZSYpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWJvb2wgVmlkZW9GcmFtZTo6aXNE
aXZpc2FibGUoKSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotc3RkOjpwYWlyPFJlZlB0cjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4sIFJl
ZlB0cjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4+IFZpZGVvRnJhbWU6OmRpdmlkZShjb25zdCBNZWRp
YVRpbWUmLCBVc2VFbmRUaW1lKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiB7IG51bGxwdHIsIG51bGxwdHIgfTsKLX0KLQogUmVmPFdlYkNvcmU6Ok1lZGlhU2FtcGxl
PiBWaWRlb0ZyYW1lOjpjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0CiB7CiAgICAgQ1JB
U0goKTsKQEAgLTEyMCwxMyArMTA4LDYgQEAgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzIFZpZGVv
RnJhbWU6OmZsYWdzKCkgY29uc3QKICAgICByZXR1cm4gTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdz
OjpOb25lOwogfQogCi1zdGQ6Om9wdGlvbmFsPE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2U+IFZpZGVv
RnJhbWU6OmJ5dGVSYW5nZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFJlbW92ZSBmcm9tIHRo
ZSBiYXNlIGNsYXNzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci19Ci0KIHZvaWQgVmlkZW9GcmFtZTo6ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
CiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmgKaW5kZXggNjQxMWRmN2Q2NDBj
Y2RlZDFkMWUzZTExZmQxYTQyOGEyOTFiMzFlZC4uZDk2NzRjZTc0MDU0YmNkNzQ4OGVhZWRkMmYx
MjgyMjI4NDZiMWU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9G
cmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaApAQCAtNzIs
MTEgKzcyLDggQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3Qgc2l6ZUluQnl0
ZXMoKSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG9mZnNldFRpbWVzdGFt
cHNCeShjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJikgZmluYWw7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0RpdmlzYWJsZSgpIGNvbnN0IGZpbmFsOwotICAgIFdF
QkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1wbGU+LCBSZWZQdHI8TWVkaWFT
YW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBVc2VFbmRU
aW1lID0gVXNlRW5kVGltZTo6RG9Ob3RVc2UpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkoKSBjb25zdCBm
aW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IGZpbmFs
OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2Uo
KSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdCBmaW5hbDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcAppbmRleCBiNzAzY2Zl
Y2QzMTZjNjI3YzY5NGU2NGI4ZTY5NzYyMDY4NjdmN2FiLi5iZDg3ZTQ2OGY4ZjBkZmYwYjM0YzY4
YTVmNDliNDZlM2RiMDBjNTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9jb2NvYS9BdWRpb0ZpbGVSZWFkZXJDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxlUmVhZGVyQ29jb2EuY3BwCkBAIC0yMTksNyAr
MjE5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRmlsZVJlYWRlcldlYk1EYXRhPiBBdWRpb0Zp
bGVSZWFkZXI6OmRlbXV4V2ViTURhdGEoY29uc3QgdWkKICAgICBwYXJzZXItPmFwcGVuZERhdGEo
V1RGTW92ZShzZWdtZW50KSk7CiAgICAgaWYgKCF0cmFjaykKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcGFyc2VyLT5mbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKTsKKyAgICBwYXJzZXIt
PmZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOwogICAgIHJldHVybiBtYWtlVW5pcXVlPEF1ZGlv
RmlsZVJlYWRlcldlYk1EYXRhPihBdWRpb0ZpbGVSZWFkZXJXZWJNRGF0YSB7IFdURk1vdmUoYnVm
ZmVyKSwgdHJhY2sucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShkdXJhdGlvbiksIFdURk1vdmUo
c2FtcGxlcykgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLmgKaW5kZXggMDg0NGIx
ZThkY2FjZmNhNjA2ZDAxYWZkYzljNmY3MjBlMzM5NDQ1Yy4uYWZjMzEyNTRlYjU0ZmFkZjNmMTIx
OTk2NWU4MjVlZDMyNjNkNGJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLmgKQEAgLTMz
LDYgKzMzLDE1IEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzIDogdWlu
dDhfdCB7CiAgICAgQnQ3MDksCiAgICAgQnQ0NzBiZywKICAgICBTbXB0ZTE3MG0sCisgICAgQnQ0
NzBtLAorICAgIFNtcHRlMjQwbSwKKyAgICBGaWxtLAorICAgIEJ0MjAyMCwKKyAgICBTbXB0ZVN0
NDI4MSwKKyAgICBTbXB0ZVJwNDMxLAorICAgIFNtcHRlRWc0MzIsCisgICAgSmVkZWNQMjJQaG9z
cGhvcnMsCisgICAgVW5zcGVjaWZpZWQsCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkBA
IC00NCw3ICs1MywxNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllcz4gewogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZp
ZGVvQ29sb3JQcmltYXJpZXMsCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclBy
aW1hcmllczo6QnQ3MDksCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1h
cmllczo6QnQ0NzBiZywKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFy
aWVzOjpTbXB0ZTE3MG0KKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFy
aWVzOjpTbXB0ZTE3MG0sCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1h
cmllczo6QnQ0NzBtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJp
ZXM6OlNtcHRlMjQwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFy
aWVzOjpGaWxtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6
OkJ0MjAyMCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpT
bXB0ZVN0NDI4MSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVz
OjpTbXB0ZVJwNDMxLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJp
ZXM6OlNtcHRlRWc0MzIsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1h
cmllczo6SmVkZWNQMjJQaG9zcGhvcnMsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9D
b2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQKICAgICA+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNp
ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb01h
dHJpeENvZWZmaWNpZW50cy5oCmluZGV4IGU5MDczNWM4OGQ3ZmU1MWYzNzc1NWJkOGMwNzQ0ZmE2
YjUzYzZmZTkuLjM5MWFkZWNhZDIyY2E2ZDkxMWViMDA4Yjc1NmM4ZGVhNzc0ZjIyYjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9NYXRy
aXhDb2VmZmljaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmgKQEAgLTM0LDYgKzM0LDEyIEBAIGVudW0g
Y2xhc3MgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cyA6IHVpbnQ4X3QgewogICAgIEJ0
NzA5LAogICAgIEJ0NDcwYmcsCiAgICAgU21wdGUxNzBtLAorICAgIFNtcHRlMjQwbSwKKyAgICBG
Y2MsCisgICAgWUNnQ28sCisgICAgQnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2UsCisgICAgQnQy
MDIwQ29uc3RhbnRMdW1pbmFuY2UsCisgICAgVW5zcGVjaWZpZWQsCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkBAIC00Niw3ICs1MiwxMyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM+IHsKICAgICAgICAg
V2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6UmdiLAogICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDcwOSwKICAgICAgICAg
V2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQ0NzBiZywKLSAgICAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6U21wdGUxNzBtCisg
ICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlNtcHRlMTcw
bSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6U21w
dGUyNDBtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRz
OjpGY2MsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6
OllDZ0NvLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRz
OjpCdDIwMjBOb25jb25zdGFudEx1bWluYW5jZSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1W
aWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQyMDIwQ29uc3RhbnRMdW1pbmFuY2UsCisgICAgICAg
IFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlVuc3BlY2lmaWVkCiAg
ICAgPjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmgK
aW5kZXggY2M3ZjFlYTIxNGU0YTlhYjVlYzFlNjJhYjI0NDYyODhhODQwZDRlYi4uYmIxODNjMDMw
NjMwMWIzNzA3OGZkY2Q1NDAyM2ZmZTc0M2JjMmFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1Ry
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmgKQEAgLTMzLDYgKzMzLDIwIEBAIGVudW0gY2xhc3MgUGxh
dGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzIDogdWludDhfdCB7CiAgICAgQnQ3MDks
CiAgICAgU21wdGUxNzBtLAogICAgIEllYzYxOTY2MjEsCisgICAgR2FtbWEyMmN1cnZlLAorICAg
IEdhbW1hMjhjdXJ2ZSwKKyAgICBTbXB0ZTI0MG0sCisgICAgTGluZWFyLAorICAgIExvZywKKyAg
ICBMb2dTcXJ0LAorICAgIEllYzYxOTY2MjQsCisgICAgQnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11
dCwKKyAgICBCdDIwMjBfMTBiaXQsCisgICAgQnQyMDIwXzEyYml0LAorICAgIFNtcHRlU3QyMDg0
LAorICAgIFNtcHRlU3Q0MjgxLAorICAgIEFyaWJTdGRCNjdIbGcsCisgICAgVW5zcGVjaWZpZWQK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTQ0LDcgKzU4LDIxIEBAIHRlbXBsYXRl
PD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzPiB7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljcywKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpCdDcwOSwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTE3MG0sCi0gICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyMQorICAgICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2MjEsCisgICAgICAg
IFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6R2FtbWEyMmN1
cnZlLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkdhbW1hMjhjdXJ2ZSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTI0MG0sCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyLAorICAgICAgICBXZWJDb3JlOjpQbGF0
Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZywKKyAgICAgICAgV2ViQ29yZTo6
UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dTcXJ0LAorICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2MjQs
CisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
QnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTBiaXQsCisgICAgICAgIFdlYkNvcmU6
OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQyMDIwXzEyYml0LAorICAg
ICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRl
U3QyMDg0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OlNtcHRlU3Q0MjgxLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkFyaWJTdGRCNjdIbGcsCisgICAgICAgIFdlYkNvcmU6OlBsYXRm
b3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQKICAgICA+OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVm
ZmVyUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VC
dWZmZXJQcml2YXRlLmNwcAppbmRleCAwNGNiZTRkMjdmMTkwYjdiMjdiOWNhN2U5OGE5YzQ3MTcz
ZDJmODliLi5iZjQ3ZmNlYmI1NmUyZjlkZTU0YTQyMGRlMmQyMTZhNDdlY2EyZjc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQ
cml2YXRlLmNwcApAQCAtMzk4LDcgKzM5OCw3IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6
cmVlbnF1ZXVlTWVkaWFGb3JUaW1lKFRyYWNrQnVmZmVyJiB0cmFja0J1ZmZlciwgY29uc3QKICAg
ICAgICAgfHwgKGN1cnJlbnRTYW1wbGVQVFNJdGVyYXRvci0+Zmlyc3QgLSB0aW1lKSA+IHRpbWVG
dWRnZUZhY3RvcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBTZWFjaCBiYWNrd2FyZCBm
b3IgdGhlIHByZXZpb3VzIHN5bmMgc2FtcGxlLgorICAgIC8vIFNlYXJjaCBiYWNrd2FyZCBmb3Ig
dGhlIHByZXZpb3VzIHN5bmMgc2FtcGxlLgogICAgIERlY29kZU9yZGVyU2FtcGxlTWFwOjpLZXlU
eXBlIGRlY29kZUtleShjdXJyZW50U2FtcGxlUFRTSXRlcmF0b3ItPnNlY29uZC0+ZGVjb2RlVGlt
ZSgpLCBjdXJyZW50U2FtcGxlUFRTSXRlcmF0b3ItPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgp
KTsKICAgICBhdXRvIGN1cnJlbnRTYW1wbGVEVFNJdGVyYXRvciA9IHRyYWNrQnVmZmVyLnNhbXBs
ZXMuZGVjb2RlT3JkZXIoKS5maW5kU2FtcGxlV2l0aERlY29kZUtleShkZWNvZGVLZXkpOwogICAg
IEFTU0VSVChjdXJyZW50U2FtcGxlRFRTSXRlcmF0b3IgIT0gdHJhY2tCdWZmZXIuc2FtcGxlcy5k
ZWNvZGVPcmRlcigpLmVuZCgpKTsKQEAgLTExNzEsNiArMTE3MSw5IEBAIHZvaWQgU291cmNlQnVm
ZmVyUHJpdmF0ZTo6ZGlkUmVjZWl2ZVNhbXBsZShSZWY8TWVkaWFTYW1wbGU+JiYgb3JpZ2luYWxT
YW1wbGUpCiAgICAgICAgICAgICAgICAgTWVkaWFUaW1lIGVyYXNlQmVnaW5UaW1lID0gdHJhY2tC
dWZmZXIuaGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcDsKICAgICAgICAgICAgICAgICBNZWRp
YVRpbWUgZXJhc2VFbmRUaW1lID0gZnJhbWVFbmRUaW1lc3RhbXAgLSBjb250aWd1b3VzRnJhbWVU
b2xlcmFuY2U7CiAKKyAgICAgICAgICAgICAgICBpZiAoZXJhc2VFbmRUaW1lIDw9IGVyYXNlQmVn
aW5UaW1lKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIFBy
ZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjppdGVyYXRvcl9yYW5nZSByYW5nZTsKICAgICAgICAg
ICAgICAgICBpZiAoaGlnaGVzdEJ1ZmZlcmVkVGltZSAtIHRyYWNrQnVmZmVyLmhpZ2hlc3RQcmVz
ZW50YXRpb25UaW1lc3RhbXAgPCB0cmFja0J1ZmZlci5sYXN0RnJhbWVEdXJhdGlvbikgewogICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbmV3IGZyYW1lIGlzIGF0IHRoZSBlbmQgb2YgdGhl
IGJ1ZmZlcmVkIHJhbmdlcywgcGVyZm9ybSBhIHNlcXVlbnRpYWwgc2NhbiBmcm9tIGVuZCAoTygx
KSkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbQppbmRl
eCBhZDdmNDUxMDFjMDZhMTg4OGMwMDhmYWVkNGE5MTkwNTYxMzgyOTNiLi42MjBhM2JlNjJhYjg0
NTBmN2UzODY0NDg0NmY3OTg5MTIzODgxZjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L0ltYWdlRGVjb2RlckFWRk9iakMubW0KQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgPHd0Zi9N
ZWRpYVRpbWUuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3Rm
L1ZlY3Rvci5oPgorI2ltcG9ydCA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CiAKICNpbXBvcnQgIkNv
cmVWaWRlb1NvZnRMaW5rLmgiCiAjaW1wb3J0ICJWaWRlb1Rvb2xib3hTb2Z0TGluay5oIgpAQCAt
MjcyLDYgKzI3MywyNiBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKKyAgICBzdGQ6Om9wdGlv
bmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlRm9yQXR0YWNobWVudChDRlN0cmluZ1JlZiBrZXkpIGNv
bnN0CisgICAgeworICAgICAgICBhdXRvIGJ5dGVPZmZzZXRDRiA9IGR5bmFtaWNfY2ZfY2FzdDxD
Rk51bWJlclJlZj4oUEFMOjpDTUdldEF0dGFjaG1lbnQobV9zYW1wbGUuZ2V0KCksIGtleSwgbnVs
bHB0cikpOworICAgICAgICBpZiAoIWJ5dGVPZmZzZXRDRikKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICAgICAgaW50NjRfdCBieXRlT2Zmc2V0ID0gMDsKKyAgICAgICAg
aWYgKCFDRk51bWJlckdldFZhbHVlKGJ5dGVPZmZzZXRDRiwga0NGTnVtYmVyU0ludDY0VHlwZSwg
JmJ5dGVPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAg
ICBDTUl0ZW1Db3VudCBzaXplQXJyYXlFbnRyaWVzID0gMDsKKyAgICAgICAgUEFMOjpDTVNhbXBs
ZUJ1ZmZlckdldFNhbXBsZVNpemVBcnJheShtX3NhbXBsZS5nZXQoKSwgMCwgbnVsbHB0ciwgJnNp
emVBcnJheUVudHJpZXMpOworICAgICAgICBpZiAoc2l6ZUFycmF5RW50cmllcyAhPSAxKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBzaXplX3Qgc2luZ2xlU2l6
ZUVudHJ5ID0gMDsKKyAgICAgICAgUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVNpemVBcnJh
eShtX3NhbXBsZS5nZXQoKSwgMSwgJnNpbmdsZVNpemVFbnRyeSwgbnVsbHB0cik7CisgICAgICAg
IHJldHVybiB7IHsgQ2hlY2tlZFNpemUoYnl0ZU9mZnNldCksIHNpbmdsZVNpemVFbnRyeSB9IH07
CisgICAgfQorCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1faW1hZ2U7CiAgICAgYm9vbCBt
X2hhc0FscGhhIHsgZmFsc2UgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2Ft
cGxlQVZGT2JqQy5oCmluZGV4IDZjY2ZmYjBkNmE5MmVmMDZhZTc2Zjg4YTBiMjg1Njk3NWRhM2Iy
ZjcuLjg3ZmFjODUxM2Y2NDVjYzBkMTI1ZmFhZjQzNmZjNjljYjAwZWY5MzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
U2FtcGxlQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oCkBAIC02NCw4ICs2NCw2IEBAIHB1
YmxpYzoKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IG92ZXJyaWRlOwogICAgIFBsYXRm
b3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUGxhdGZvcm1T
YW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
UGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlwZTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8
Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIG9mZnNl
dFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFRp
bWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJpZGU7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0RpdmlzYWJsZSgpIGNvbnN0IG92ZXJyaWRlOwpAQCAt
ODMsOCArODEsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0hvbW9nZW5lb3VzKCkgY29uc3Q7CiAg
ICAgVmVjdG9yPFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+PiBkaXZpZGVJbnRvSG9tb2dlbmVvdXNT
YW1wbGVzKCk7CiAKLSAgICB2b2lkIHNldEJ5dGVSYW5nZU9mZnNldChzaXplX3QpOwotCiAjaWYg
RU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgJiYgSEFWRShBVkNPTlRFTlRLRVlTRVNTSU9OKQogICAg
IHVzaW5nIEtleUlEcyA9IFZlY3RvcjxSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+OwogICAg
IHZvaWQgc2V0S2V5SURzKEtleUlEcyYmIGtleUlEcykgeyBtX2tleUlEcyA9IFdURk1vdmUoa2V5
SURzKTsgfQpAQCAtMTAyLDggKzk4LDYgQEAgcHJvdGVjdGVkOgogICAgIFdFQkNPUkVfRVhQT1JU
IE1lZGlhU2FtcGxlQVZGT2JqQyhDTVNhbXBsZUJ1ZmZlclJlZiwgVmlkZW9Sb3RhdGlvbiwgYm9v
bCBtaXJyb3JlZCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+TWVkaWFTYW1wbGVBVkZP
YmpDKCk7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2U+IGJ5dGVS
YW5nZUZvckF0dGFjaG1lbnQoQ0ZTdHJpbmdSZWYga2V5KSBjb25zdDsKLQogICAgIFJldGFpblB0
cjxDTVNhbXBsZUJ1ZmZlclJlZj4gbV9zYW1wbGU7CiAgICAgQXRvbVN0cmluZyBtX2lkOwogICAg
IFZpZGVvUm90YXRpb24gbV9yb3RhdGlvbiB7IFZpZGVvUm90YXRpb246Ok5vbmUgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhU2FtcGxlQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQppbmRleCBlODM4ZWNlMzE3
ZTkwNDRiYmFjOWVjNzcwYjg5MWZjOWFkMzFjZGYwLi41ZDY2YTA0MjZiMDRhYWVjZDY1NzdkZWNj
MzQ2Yjc3MDcwZGZlZjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVB
VkZPYmpDLm1tCkBAIC0yNDUsMTEgKzI0NSw2IEBAIEZsb2F0U2l6ZSBNZWRpYVNhbXBsZUFWRk9i
akM6OnByZXNlbnRhdGlvblNpemUoKSBjb25zdAogICAgIHJldHVybiBGbG9hdFNpemUoUEFMOjpD
TVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zKGZvcm1hdERl
c2NyaXB0aW9uLCB0cnVlLCB0cnVlKSk7CiB9CiAKLXZvaWQgTWVkaWFTYW1wbGVBVkZPYmpDOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KCJ7UFRTKCIsIHBy
ZXNlbnRhdGlvblRpbWUoKSwgIiksIERUUygiLCBkZWNvZGVUaW1lKCksICIpLCBkdXJhdGlvbigi
LCBkdXJhdGlvbigpLCAiKSwgZmxhZ3MoIiwgKGludClmbGFncygpLCAiKSwgcHJlc2VudGF0aW9u
U2l6ZSgiLCBwcmVzZW50YXRpb25TaXplKCkud2lkdGgoKSwgIngiLCBwcmVzZW50YXRpb25TaXpl
KCkuaGVpZ2h0KCksICIpfSIpOwotfQotCiB2b2lkIE1lZGlhU2FtcGxlQVZGT2JqQzo6b2Zmc2V0
VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYgb2Zmc2V0KQogewogICAgIENNSXRlbUNvdW50
IGl0ZW1Db3VudCA9IDA7CkBAIC01MTAsNDQgKzUwNSw2IEBAIFJldGFpblB0cjxDTVNhbXBsZUJ1
ZmZlclJlZj4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjbG9uZVNhbXBsZUJ1ZmZlckFuZFNldEFzRGlz
cGxhCiAgICAgcmV0dXJuIGFkb3B0Q0YobmV3U2FtcGxlQnVmZmVyKTsKIH0KIAotc3RhdGljIENG
U3RyaW5nUmVmIGJ5dGVSYW5nZU9mZnNldEF0dGFjaG1lbnRLZXkoKQotewotICAgIHN0YXRpYyBD
RlN0cmluZ1JlZiBrZXkgPSBDRlNUUigiV2ViS2l0TWVkaWFTYW1wbGVCeXRlUmFuZ2VPZmZzZXQi
KTsKLSAgICByZXR1cm4ga2V5OwotfQotCi1zdGQ6Om9wdGlvbmFsPE1lZGlhU2FtcGxlOjpCeXRl
UmFuZ2U+IE1lZGlhU2FtcGxlQVZGT2JqQzo6Ynl0ZVJhbmdlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gYnl0ZVJhbmdlRm9yQXR0YWNobWVudChieXRlUmFuZ2VPZmZzZXRBdHRhY2htZW50S2V5KCkp
OwotfQotCi12b2lkIE1lZGlhU2FtcGxlQVZGT2JqQzo6c2V0Qnl0ZVJhbmdlT2Zmc2V0KHNpemVf
dCBieXRlT2Zmc2V0KQotewotICAgIGludDY0X3QgY2hlY2tlZE9mZnNldCA9IENoZWNrZWRJbnQ2
NChieXRlT2Zmc2V0KTsKLSAgICBhdXRvIG9mZnNldE51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDY0VHlwZSwgJmNoZWNrZWRP
ZmZzZXQpKTsKLSAgICBQQUw6OkNNU2V0QXR0YWNobWVudChtX3NhbXBsZS5nZXQoKSwgYnl0ZVJh
bmdlT2Zmc2V0QXR0YWNobWVudEtleSgpLCBvZmZzZXROdW1iZXIuZ2V0KCksIGtDTUF0dGFjaG1l
bnRNb2RlX1Nob3VsZFByb3BhZ2F0ZSk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8TWVkaWFTYW1wbGU6
OkJ5dGVSYW5nZT4gTWVkaWFTYW1wbGVBVkZPYmpDOjpieXRlUmFuZ2VGb3JBdHRhY2htZW50KENG
U3RyaW5nUmVmIGtleSkgY29uc3QKLXsKLSAgICBhdXRvIGJ5dGVPZmZzZXRDRiA9IGR5bmFtaWNf
Y2ZfY2FzdDxDRk51bWJlclJlZj4oUEFMOjpDTUdldEF0dGFjaG1lbnQobV9zYW1wbGUuZ2V0KCks
IGtleSwgbnVsbHB0cikpOwotICAgIGlmICghYnl0ZU9mZnNldENGKQotICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotCi0gICAgaW50NjRfdCBieXRlT2Zmc2V0ID0gMDsKLSAgICBpZiAoIUNG
TnVtYmVyR2V0VmFsdWUoYnl0ZU9mZnNldENGLCBrQ0ZOdW1iZXJTSW50NjRUeXBlLCAmYnl0ZU9m
ZnNldCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBDTUl0ZW1Db3VudCBz
aXplQXJyYXlFbnRyaWVzID0gMDsKLSAgICBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlU2l6
ZUFycmF5KG1fc2FtcGxlLmdldCgpLCAwLCBudWxscHRyLCAmc2l6ZUFycmF5RW50cmllcyk7Ci0g
ICAgaWYgKHNpemVBcnJheUVudHJpZXMgIT0gMSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLQotICAgIHNpemVfdCBzaW5nbGVTaXplRW50cnkgPSAwOwotICAgIFBBTDo6Q01TYW1wbGVC
dWZmZXJHZXRTYW1wbGVTaXplQXJyYXkobV9zYW1wbGUuZ2V0KCksIDEsICZzaW5nbGVTaXplRW50
cnksIG51bGxwdHIpOwotICAgIHJldHVybiB7IHsgQ2hlY2tlZFNpemUoYnl0ZU9mZnNldCksIHNp
bmdsZVNpemVFbnRyeSB9IH07Ci19Ci0KIENWUGl4ZWxCdWZmZXJSZWYgTWVkaWFTYW1wbGVBVkZP
YmpDOjpwaXhlbEJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENWUGl4
ZWxCdWZmZXJSZWY+KFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihtX3NhbXBsZS5n
ZXQoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvQ01VdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0NNVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWI3MWI4N2ZmNjNlZDMzOGQ5NWZjZGY2YjJkZDI0
ZjQ4Mzc3MDMxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK3R5cGVkZWYgY29uc3Qgc3Ry
dWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7Cit0
eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciogQ01TYW1wbGVCdWZmZXJSZWY7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFTYW1wbGVzQmxvY2s7CitzdHJ1Y3Qg
VHJhY2tJbmZvOworCitXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlv
blJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKGNvbnN0IFRyYWNrSW5m
byYpOworLy8gQ29udmVydCBNZWRpYVNhbXBsZXNCbG9jayB0byB0aGUgZXF1aXZhbGVudCBDTVNh
bXBsZUJ1ZmZlclJlZi4gSWYgQ01Gb3JtYXREZXNjcmlwdGlvblJlZgorLy8gaXMgc2V0IGl0IHdp
bGwgYmUgdXNlZCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY3JlYXRlZCBmcm9tIHRoZSBNZWRpYVNh
bXBsZXNCbG9jaydzIFRyYWNrSW5mby4KK1dFQkNPUkVfRVhQT1JUIEV4cGVjdGVkPFJldGFpblB0
cjxDTVNhbXBsZUJ1ZmZlclJlZj4sIENTdHJpbmc+IHRvQ01TYW1wbGVCdWZmZXIoTWVkaWFTYW1w
bGVzQmxvY2smJiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiA9IG51bGxwdHIpOworCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Q01VdGlsaXRpZXMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9D
TVV0aWxpdGllcy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTgyYzA0YjdiZDgxNzg2MDFlODExZDQ5YWQwNzVm
ODUyZWUyMzlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvQ01VdGlsaXRpZXMubW0KQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiQ01VdGlsaXRpZXMuaCIKKworI2lm
IFBMQVRGT1JNKENPQ09BKQorCisjaW1wb3J0ICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIK
KyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhU2FtcGxlLmgiCisjaW1wb3J0ICJN
ZWRpYVV0aWxpdGllcy5oIgorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCisjaW1wb3J0ICJXZWJN
QXVkaW9VdGlsaXRpZXNDb2NvYS5oIgorI2ltcG9ydCA8Q29yZU1lZGlhL0NNRm9ybWF0RGVzY3Jp
cHRpb24uaD4KKyNpbXBvcnQgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9u
Lmg+CisjaW1wb3J0IDx3dGYvU2NvcGUuaD4KKyNpbXBvcnQgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5o
PgorCisjaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgorI2ltcG9ydCAiVmlkZW9Ub29sYm94
U29mdExpbmsuaCIKKyNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGluay5oPgor
I2ltcG9ydCA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisjaW1wb3J0IDxwYWwvY2YvQXVk
aW9Ub29sYm94U29mdExpbmsuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFC
TEUoT1BVUykgfHwgRU5BQkxFKFZPUkJJUykKKworc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERl
c2NyaXB0aW9uUmVmPiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvSW5m
byYgaW5mbykKK3sKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gYXNiZCB7IH07Cisg
ICAgYXNiZC5tRm9ybWF0SUQgPSBpbmZvLmNvZGVjTmFtZS52YWx1ZTsKKyAgICBVSW50MzIgc2l6
ZSA9IHNpemVvZihhc2JkKTsKKyAgICBhdXRvIGVycm9yID0gUEFMOjpBdWRpb0Zvcm1hdEdldFBy
b3BlcnR5KGtBdWRpb0Zvcm1hdFByb3BlcnR5X0Zvcm1hdEluZm8sIGluZm8uY29va2llRGF0YS0+
c2l6ZSgpLCBpbmZvLmNvb2tpZURhdGEtPmRhdGEoKSwgJnNpemUsICZhc2JkKTsKKyAgICBpZiAo
ZXJyb3IpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTWVkaWEsICJjcmVhdGVBdWRpb0Zv
cm1hdERlc2NyaXB0aW9uIGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIsIGVycm9yLCAoY2hh
ciAqKSZlcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVy
biBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihh
c2JkKSwgaW5mby5jb29raWVEYXRhLT5zaXplKCksIGluZm8uY29va2llRGF0YS0+ZGF0YSgpKTsK
K30KKworI2VuZGlmCisKK3N0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTUNvbG9yUHJpbWFy
aWVzKFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcyBwcmltYXJpZXMpCit7CisgICAgc3dpdGNo
IChwcmltYXJpZXMpIHsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQ3
MDk6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0lUVV9SXzcw
OV8yOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpKZWRlY1AyMlBob3Nw
aG9yczoKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfRUJVXzMy
MTM7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlMTcwbToKKyAg
ICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGUyNDBtOgorICAgICAgICBy
ZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19TTVBURV9DOworICAgIGNhc2UgUGxh
dGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVJwNDMxOgorICAgICAgICByZXR1cm4gUEFM
OjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0RDSV9QMzsKKyAgICBjYXNlIFBs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGVFZzQzMjoKKyAgICAgICAgcmV0dXJuIFBB
TDo6a0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19QM19ENjU7CisgICAgY2FzZSBQ
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0MjAyMDoKKyAgICAgICAgcmV0dXJuIFBBTDo6
a0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19JVFVfUl8yMDIwOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworCitzdGF0aWMgQ0ZTdHJp
bmdSZWYgY29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNo
YXJhY3RlcmlzdGljcyBjaGFyYWN0ZXJpc3RpY3MpCit7CisgICAgc3dpdGNoIChjaGFyYWN0ZXJp
c3RpY3MpIHsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
QnQ3MDk6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVuY3Rpb25fSVRV
X1JfNzA5XzI7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OlNtcHRlMjQwbToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlv
bl9TTVBURV8yNDBNXzE5OTU7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OlNtcHRlU3QyMDg0OgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNj
cmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfMjA4NF9QUTsKKyAgICBjYXNlIFBsYXRm
b3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQyMDIwXzEwYml0OgorICAgIGNhc2Ug
UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTJiaXQ6CisgICAg
ICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVf
Ul8yMDIwOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpT
bXB0ZVN0NDI4MToKKyAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFu
c2ZlckZ1bmN0aW9uX1NNUFRFX1NUXzQyOF8xOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpBcmliU3RkQjY3SGxnOgorICAgICAgICByZXR1cm4gUEFMOjpr
Q01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fSVRVX1JfMjEwMF9ITEc7CisgICAg
Y2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2MjE6Cisg
ICAgICAgIHJldHVybiBQQUw6OmNhbkxvYWRfQ29yZU1lZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9u
VHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgPyBQQUw6OmdldF9Db3JlTWVkaWFfa0NNRm9ybWF0RGVz
Y3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA6IG51bGxwdHI7CisgICAgY2FzZSBQbGF0
Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVhcjoKKyAgICAgICAgcmV0dXJu
IFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX0xpbmVhcjsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK3N0YXRpYyBDRlN0
cmluZ1JlZiBjb252ZXJ0VG9DTVlDYkNSTWF0cml4KFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmlj
aWVudHMgY29lZmZpY2llbnRzKQoreworICAgIHN3aXRjaCAoY29lZmZpY2llbnRzKSB7CisgICAg
Y2FzZSBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDIwMjBOb25jb25zdGFudEx1
bWluYW5jZToKKyAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25ZQ2JDck1h
dHJpeF9JVFVfUl8yMDIwOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50
czo6QnQ0NzBiZzoKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlNt
cHRlMTcwbToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1Jf
NjAxXzQ7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDcwOToK
KyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNzA5XzI7Cisg
ICAgY2FzZSBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpTbXB0ZTI0MG06CisgICAg
ICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK1JldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFj
a0luZm8oY29uc3QgVHJhY2tJbmZvJiBpbmZvKQoreworICAgIEFTU0VSVChpbmZvLmlzVmlkZW8o
KSB8fCBpbmZvLmlzQXVkaW8oKSk7CisKKyAgICBpZiAoaW5mby5pc0F1ZGlvKCkpIHsKKyAgICAg
ICAgYXV0byYgYXVkaW9JbmZvID0gZG93bmNhc3Q8Y29uc3QgQXVkaW9JbmZvPihpbmZvKTsKKyAg
ICAgICAgaWYgKCFhdWRpb0luZm8uY29va2llRGF0YSB8fCAhYXVkaW9JbmZvLmNvb2tpZURhdGEt
PnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHN3aXRjaCAo
YXVkaW9JbmZvLmNvZGVjTmFtZS52YWx1ZSkgeworI2lmIEVOQUJMRShPUFVTKQorICAgICAgICBj
YXNlICdvcHVzJzoKKyAgICAgICAgICAgIGlmICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oYXVkaW9JbmZvKTsKKyNlbmRpZgorI2lmIEVOQUJMRShW
T1JCSVMpCisgICAgICAgIGNhc2UgJ3ZvcmInOgorICAgICAgICAgICAgaWYgKCFpc1ZvcmJpc0Rl
Y29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGF1ZGlvSW5mbyk7Cisj
ZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisgICAgfQorCisgICAgYXV0byYgdmlkZW9JbmZvID0gZG93bmNhc3Q8Y29uc3QgVmlk
ZW9JbmZvPihpbmZvKTsKKworICAgIGF1dG8gZGF0YSA9IHZpZGVvSW5mby5hdG9tRGF0YS0+Y3Jl
YXRlQ0ZEYXRhKCk7CisgICAgQVNTRVJUKHZpZGVvSW5mby5jb2RlY05hbWUgPT0gJ3ZwMDknIHx8
IHZpZGVvSW5mby5jb2RlY05hbWUgPT0gJ3ZwMDgnKTsKKyAgICBDRlR5cGVSZWYgY29uZmlndXJh
dGlvbktleXNbXSA9IHsgQ0ZTVFIoInZwY0MiKSB9OworICAgIENGVHlwZVJlZiBjb25maWd1cmF0
aW9uVmFsdWVzW10gPSB7IGRhdGEuZ2V0KCkgfTsKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb25EaWN0
ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29uZmln
dXJhdGlvbktleXMsIGNvbmZpZ3VyYXRpb25WYWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoY29uZmln
dXJhdGlvbktleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAgICBWZWN0b3I8Q0ZUeXBlUmVmPiBleHRlbnNp
b25zS2V5cyB7IFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fU2FtcGxlRGVzY3Jp
cHRpb25FeHRlbnNpb25BdG9tcyB9OworICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNW
YWx1ZXMgPSB7IGNvbmZpZ3VyYXRpb25EaWN0LmdldCgpIH07CisKKyAgICBpZiAodmlkZW9JbmZv
LmNvbG9yU3BhY2UuZnVsbFJhbmdlICYmICp2aWRlb0luZm8uY29sb3JTcGFjZS5mdWxsUmFuZ2Up
IHsKKyAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRp
b25FeHRlbnNpb25fRnVsbFJhbmdlVmlkZW8pOworICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFw
cGVuZChrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgfQorCisgICAgaWYgKHZpZGVvSW5mby5jb2xvclNw
YWNlLnByaW1hcmllcykgeworICAgICAgICBpZiAoYXV0byBjbUNvbG9yUHJpbWFyaWVzID0gY29u
dmVydFRvQ01Db2xvclByaW1hcmllcygqdmlkZW9JbmZvLmNvbG9yU3BhY2UucHJpbWFyaWVzKSkg
eworICAgICAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyQ29sb3JQ
cmltYXJpZXNLZXkpOworICAgICAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21Db2xv
clByaW1hcmllcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHZpZGVvSW5mby5jb2xvclNw
YWNlLnRyYW5zZmVyKSB7CisgICAgICAgIGlmIChhdXRvIGNtVHJhbnNmZXJGdW5jdGlvbiA9IGNv
bnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbigqdmlkZW9JbmZvLmNvbG9yU3BhY2UudHJhbnNmZXIp
KSB7CisgICAgICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJUcmFu
c2ZlckZ1bmN0aW9uS2V5KTsKKyAgICAgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNt
VHJhbnNmZXJGdW5jdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodmlkZW9JbmZv
LmNvbG9yU3BhY2UubWF0cml4KSB7CisgICAgICAgIGlmIChhdXRvIGNtTWF0cml4ID0gY29udmVy
dFRvQ01ZQ2JDUk1hdHJpeCgqdmlkZW9JbmZvLmNvbG9yU3BhY2UubWF0cml4KSkgeworICAgICAg
ICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhLZXkp
OworICAgICAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21NYXRyaXgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgYXV0byBleHRlbnNpb25zID0gYWRvcHRDRihDRkRpY3Rpb25hcnlD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXh0ZW5zaW9uc0tleXMuZGF0YSgpLCBleHRlbnNp
b25zVmFsdWVzLmRhdGEoKSwgZXh0ZW5zaW9uc0tleXMuc2l6ZSgpLCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAg
ICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRy
OworICAgIENNVmlkZW9Db2RlY1R5cGUgY29kZWMgPSB2aWRlb0luZm8uY29kZWNOYW1lID09ICJ2
cDA5IiA/IGtDTVZpZGVvQ29kZWNUeXBlX1ZQOSA6ICd2cDA4JzsKKyAgICBpZiAobm9FcnIgIT0g
UEFMOjpDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
Y29kZWMsIHZpZGVvSW5mby5zaXplLndpZHRoKCksIHZpZGVvSW5mby5zaXplLmhlaWdodCgpLCBl
eHRlbnNpb25zLmdldCgpLCAmZm9ybWF0RGVzY3JpcHRpb24pKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKK30KKworRXhw
ZWN0ZWQ8UmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiwgQ1N0cmluZz4gdG9DTVNhbXBsZUJ1
ZmZlcihNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZXMsIENNRm9ybWF0RGVzY3JpcHRpb25SZWYg
Zm9ybWF0RGVzY3JpcHRpb24pCit7CisgICAgaWYgKCFzYW1wbGVzLmluZm8oKSkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJObyBUcmFja0luZm8gZm91bmQiKTsKKworICAgIGF1dG8g
c2NvcGVFeGl0ID0gbWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBzYW1wbGVzLmNsZWFyKCk7
CisgICAgfSk7CisKKyAgICBhdXRvIGZvcm1hdCA9IGZvcm1hdERlc2NyaXB0aW9uID8gcmV0YWlu
UHRyKGZvcm1hdERlc2NyaXB0aW9uKSA6IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRyYWNr
SW5mbygqc2FtcGxlcy5pbmZvKCkpOworICAgIGlmICghZm9ybWF0KQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIk5vIENNRm9ybWF0RGVzY3JpcHRpb24gYXZhaWxhYmxlIik7CisKKyAg
ICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gY29tcGxldGVCbG9ja0J1ZmZlcnM7CisgICAg
aWYgKHNhbXBsZXMuc2l6ZSgpID4gMSkgeworICAgICAgICAvLyBPcHRpbWlzYXRpb24gc28gdGhh
dCB3ZSBhbGxvY2F0ZSB0aGUgZW50aXJlIENNQmxvY2tCdWZmZXIgYXQgb25jZSBpZiB3ZSBoYXZl
IG1vcmUgdGhhbiBvbmUgdG8gcmV0dXJuLgorICAgICAgICBDTUJsb2NrQnVmZmVyUmVmIHJhd0Js
b2NrQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZm
ZXJDcmVhdGVFbXB0eShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzYW1wbGVzLnNpemUoKSwgMCwgJnJh
d0Jsb2NrQnVmZmVyKTsKKyAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyIHx8
ICFyYXdCbG9ja0J1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ01C
bG9ja0J1ZmZlckNyZWF0ZUVtcHR5IGZhaWxlZCIpOworICAgICAgICBjb21wbGV0ZUJsb2NrQnVm
ZmVycyA9IHJhd0Jsb2NrQnVmZmVyOworICAgIH0KKworICAgIFZlY3RvcjxDTVNhbXBsZVRpbWlu
Z0luZm8+IHBhY2tldFRpbWluZ3M7CisgICAgcGFja2V0VGltaW5ncy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHNhbXBsZXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8c2l6ZV90PiBwYWNrZXRTaXplczsK
KyAgICBwYWNrZXRTaXplcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNhbXBsZXMuc2l6ZSgpKTsK
KyAgICBmb3IgKGF1dG8mIHNhbXBsZSA6IHNhbXBsZXMpIHsKKyAgICAgICAgaWYgKCFzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyPj4oc2FtcGxl
LmRhdGEpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnZhbGlkIE1lZGlh
U2FtcGxlc0Jsb2NrIHR5cGUiKTsKKyAgICAgICAgYXV0byYgZGF0YSA9IHN0ZDo6Z2V0PFJlZjxj
b25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyPj4oc2FtcGxlLmRhdGEpOworICAgICAgICBhdXRv
IGJsb2NrQnVmZmVyID0gZGF0YS0+Y3JlYXRlQ01CbG9ja0J1ZmZlcigpOworICAgICAgICBpZiAo
IWJsb2NrQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZG4n
dCBjcmVhdGUgQ01CbG9ja0J1ZmZlciIpOworCisgICAgICAgIGlmICghY29tcGxldGVCbG9ja0J1
ZmZlcnMpCisgICAgICAgICAgICBjb21wbGV0ZUJsb2NrQnVmZmVycyA9IFdURk1vdmUoYmxvY2tC
dWZmZXIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJs
b2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlKGNvbXBsZXRlQmxvY2tCdWZmZXJzLmdldCgp
LCBibG9ja0J1ZmZlci5nZXQoKSwgMCwgMCwgMCk7CisgICAgICAgICAgICBpZiAoZXJyICE9IGtD
TUJsb2NrQnVmZmVyTm9FcnIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlIGZhaWxlZCIpOworICAgICAgICB9
CisgICAgICAgIHBhY2tldFRpbWluZ3MuYXBwZW5kKHsgUEFMOjp0b0NNVGltZShzYW1wbGUuZHVy
YXRpb24pLCBQQUw6OnRvQ01UaW1lKHNhbXBsZS5wcmVzZW50YXRpb25UaW1lKSwgUEFMOjp0b0NN
VGltZShzYW1wbGUuZGVjb2RlVGltZSkgfSk7CisgICAgICAgIHBhY2tldFNpemVzLmFwcGVuZChk
YXRhLT5zaXplKCkpOworICAgIH0KKworICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1
ZmZlciA9IG51bGxwdHI7CisgICAgaWYgKGF1dG8gZXJyID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckNy
ZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbXBsZXRlQmxvY2tCdWZmZXJzLmdldCgp
LCBmb3JtYXQuZ2V0KCksIHBhY2tldFNpemVzLnNpemUoKSwgcGFja2V0VGltaW5ncy5zaXplKCks
IHBhY2tldFRpbWluZ3MuZGF0YSgpLCBwYWNrZXRTaXplcy5zaXplKCksIHBhY2tldFNpemVzLmRh
dGEoKSwgJnJhd1NhbXBsZUJ1ZmZlcikpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Q01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSBmYWlsZWQ6IE9PTSIpOworCisgICAgaWYgKHNhbXBs
ZXMuaXNWaWRlbygpICYmIHNhbXBsZXMuc2l6ZSgpKSB7CisgICAgICAgIGF1dG8gYXR0YWNobWVu
dHNBcnJheSA9IFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHJh
d1NhbXBsZUJ1ZmZlciwgdHJ1ZSk7CisgICAgICAgIEFTU0VSVChhdHRhY2htZW50c0FycmF5KTsK
KyAgICAgICAgaWYgKCFhdHRhY2htZW50c0FycmF5KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJObyBzYW1wbGUgYXR0YWNobWVudCBmb3VuZCIpOworICAgICAgICBBU1NFUlQo
c2l6ZV90KENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KSkgPT0gc2FtcGxlcy5zaXpl
KCkpOworICAgICAgICBmb3IgKENGSW5kZXggaSA9IDAsIGNvdW50ID0gQ0ZBcnJheUdldENvdW50
KGF0dGFjaG1lbnRzQXJyYXkpOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgQ0ZNdXRh
YmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IGNoZWNrZWRfY2ZfY2FzdDxDRk11dGFibGVE
aWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkp
KTsKKyAgICAgICAgICAgIGlmICghKHNhbXBsZXNbaV0uZmxhZ3MgJiBNZWRpYVNhbXBsZTo6U2Ft
cGxlRmxhZ3M6OklzU3luYykpCisgICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUo
YXR0YWNobWVudHMsIFBBTDo6a0NNU2FtcGxlQXR0YWNobWVudEtleV9Ob3RTeW5jLCBrQ0ZCb29s
ZWFuVHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYWRvcHRDRihyYXdTYW1w
bGVCdWZmZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFU
Rk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKaW5kZXggYWUxNjQx
NGYyMWM2ODQ2YzE4OTc3MDllMTQyNGU0YTZhNGI3NjFhMC4uZTFhNjQ3Y2FhYTBkNGNlNjZlNDc0
MzNkN2YxNzk2MWIyOGY5NDI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAK
QEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCiAjaW5jbHVkZSAi
QXVkaW9UcmFja1ByaXZhdGVXZWJNLmgiCisjaW5jbHVkZSAiQ01VdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJDb250ZW50VHlwZS5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGUuaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCkBAIC0zNiwyNSArMzcsMTggQEAKICNpbmNsdWRlICJNZWRp
YVNhbXBsZUFWRk9iakMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgogI2luY2x1ZGUgIlZQOVV0aWxpdGllc0NvY29hLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1By
aXZhdGVXZWJNLmgiCiAjaW5jbHVkZSAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9EYXRhVmlldy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaD4KICNpbmNsdWRlIDx3ZWJtL3dlYm1fcGFy
c2VyLmg+CiAjaW5jbHVkZSA8d3RmL0FsZ29yaXRobXMuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2Vy
SGVscGVyLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaXN0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L2NmL1R5cGVDYXN0c0NGLmg+CiAjaW5jbHVkZSA8d3RmL2Rhcndpbi9XZWFrTGlua2luZy5oPgog
I2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2luL09TVmFyaWFudFNQSS5oPgogCiAjaW5jbHVkZSAiQ29y
ZVZpZGVvU29mdExpbmsuaCIKLSNpbmNsdWRlICJWaWRlb1Rvb2xib3hTb2Z0TGluay5oIgotI2lu
Y2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgogCiBXVEZfV0VBS19MSU5LX0ZPUkNF
X0lNUE9SVCh3ZWJtOjpzd2FwKTsKIApAQCAtMjM1LDI1ICsyMjksNiBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBMb2dBcmd1bWVudDx3ZWJtOjpJZD4gewogICAgIH0KIH07CiAKLXRlbXBsYXRlPD4gc3Ry
dWN0IExvZ0FyZ3VtZW50PFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlPiB7
Ci0gICAgc3RhdGljIEFTQ0lJTGl0ZXJhbCB0b1N0cmluZyhXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpTdGF0ZSBzdGF0ZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUpIHsK
LSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6Tm9u
ZTogcmV0dXJuICJOb25lIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OlN0YXRlOjpSZWFkaW5nRWJtbDogcmV0dXJuICJSZWFkaW5nRWJtbCJfczsKLSAg
ICAgICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZEVi
bWw6IHJldHVybiAiUmVhZEVibWwiX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRpbmdTZWdtZW50OiByZXR1cm4gIlJlYWRpbmdTZWdt
ZW50Il9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0
YXRlOjpSZWFkaW5nSW5mbzogcmV0dXJuICJSZWFkaW5nSW5mbyJfczsKLSAgICAgICAgY2FzZSBX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZEluZm86IHJldHVybiAi
UmVhZEluZm8iX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6U3RhdGU6OlJlYWRpbmdUcmFja3M6IHJldHVybiAiUmVhZGluZ1RyYWNrcyJfczsKLSAgICAg
ICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ1Ry
YWNrOiByZXR1cm4gIlJlYWRpbmdUcmFjayJfczsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZFRyYWNrOiByZXR1cm4gIlJlYWRUcmFjayJf
czsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6
UmVhZGluZ0NsdXN0ZXI6IHJldHVybiAiUmVhZGluZ0NsdXN0ZXIiX3M7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuICJVbmtub3duIl9zOwotICAgIH0KLX07Ci0KIH0gLy8gbmFtZXNwYWNlIFdU
RgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yNzcsMTQgKzI1MiwxNCBAQCBzdGF0aWMgU3Rh
dHVzIHNlZ21lbnRSZWFkRXJyb3JUb1dlYm1TdGF0dXMoU291cmNlQnVmZmVyUGFyc2VyOjpTZWdt
ZW50OjpSZWFkRXJybwogewogICAgIHN3aXRjaCAoZXJyb3IpIHsKICAgICBjYXNlIFNvdXJjZUJ1
ZmZlclBhcnNlcjo6U2VnbWVudDo6UmVhZEVycm9yOjpFbmRPZkZpbGU6IHJldHVybiBTdGF0dXMo
U3RhdHVzOjprRW5kT2ZGaWxlKTsKLSAgICBjYXNlIFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVu
dDo6UmVhZEVycm9yOjpGYXRhbEVycm9yOiByZXR1cm4gU3RhdHVzKFN0YXR1czo6Q29kZShTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpFcnJvckNvZGU6OlJlYWRlckZhaWxlZCkpOworICAgIGNhc2Ug
U291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50OjpSZWFkRXJyb3I6OkZhdGFsRXJyb3I6IHJldHVy
biBTdGF0dXMoU3RhdHVzOjpDb2RlKFdlYk1QYXJzZXI6OkVycm9yQ29kZTo6UmVhZGVyRmFpbGVk
KSk7CiAgICAgfQogfQogCi1jbGFzcyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTZWdtZW50UmVh
ZGVyIGZpbmFsIDogcHVibGljIHdlYm06OlJlYWRlciB7CitjbGFzcyBXZWJNUGFyc2VyOjpTZWdt
ZW50UmVhZGVyIGZpbmFsIDogcHVibGljIHdlYm06OlJlYWRlciB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgdm9pZCBhcHBlbmRTZWdtZW50KFNlZ21lbnQmJiBz
ZWdtZW50KQorICAgIHZvaWQgYXBwZW5kU2VnbWVudChTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21l
bnQmJiBzZWdtZW50KQogICAgIHsKICAgICAgICAgbV9kYXRhLnB1c2hfYmFjayhXVEZNb3ZlKHNl
Z21lbnQpKTsKICAgICAgICAgaWYgKG1fY3VycmVudFNlZ21lbnQgPT0gbV9kYXRhLmVuZCgpKQpA
QCAtMzY1LDIxICszNDAsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1
czo6a1dvdWxkQmxvY2spOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIEZyZWVTaGFyZWRCdWZm
ZXIodm9pZCogcmVmY29uLCB2b2lkKiwgc2l6ZV90KQotICAgIHsKLSAgICAgICAgYXV0byogYnVm
ZmVyID0gcmVpbnRlcnByZXRfY2FzdDxTaGFyZWRCdWZmZXIqPihyZWZjb24pOwotICAgICAgICBi
dWZmZXItPmRlcmVmKCk7Ci0gICAgfQotCi0gICAgU3RhdHVzIFJlYWRJbnRvKHN0ZDo6c2l6ZV90
IG51bVRvUmVhZCwgQ01CbG9ja0J1ZmZlclJlZiBvdXRwdXRCdWZmZXIsIHVpbnQ2NF90KiBudW1B
Y3R1YWxseVJlYWQpCisgICAgU3RhdHVzIFJlYWRJbnRvKHN0ZDo6c2l6ZV90IG51bVRvUmVhZCwg
U2hhcmVkQnVmZmVyQnVpbGRlciYgb3V0cHV0QnVmZmVyLCB1aW50NjRfdCogbnVtQWN0dWFsbHlS
ZWFkKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG91dHB1dEJ1ZmZlciAmJiBudW1BY3R1YWxseVJl
YWQpOworICAgICAgICBBU1NFUlQobnVtQWN0dWFsbHlSZWFkKTsKICAgICAgICAgaWYgKCFudW1B
Y3R1YWxseVJlYWQpCiAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3Vn
aE1lbW9yeSk7CiAKICAgICAgICAgKm51bUFjdHVhbGx5UmVhZCA9IDA7Ci0gICAgICAgIGlmICgh
b3V0cHV0QnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91
Z2hNZW1vcnkpOwogCiAgICAgICAgIHdoaWxlIChudW1Ub1JlYWQgJiYgbV9jdXJyZW50U2VnbWVu
dCAhPSBtX2RhdGEuZW5kKCkpIHsKICAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRTZWdtZW50ID0g
Km1fY3VycmVudFNlZ21lbnQ7CkBAIC0zODksNDQgKzM1NiwyMiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBzaGFyZWRCdWZmZXIgPSBjdXJyZW50U2VnbWVudC5nZXRTaGFyZWRCdWZmZXIo
KTsKLSAgICAgICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxscHRy
OwotICAgICAgICAgICAgdWludDY0X3QgbGFzdFJlYWQgPSAwOworICAgICAgICAgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gcmF3QmxvY2tCdWZmZXI7CiAgICAgICAgICAgICBpZiAoIXNoYXJlZEJ1
ZmZlcikgewogICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IGFsbG9jYXRl
IG1vcmUgbWVtb3J5IHRoYW4gbmVlZGVkIGlmIHRoZSByZWFkIGlzIHBhcnRpYWwuCi0gICAgICAg
ICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5Qmxv
Y2soa0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgbnVtVG9SZWFkLCBrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBudWxscHRyLCAwLCBudW1Ub1JlYWQsIGtDTUJsb2NrQnVmZmVyQXNzdXJlTWVtb3J5
Tm93RmxhZywgJnJhd0Jsb2NrQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IGtD
TUJsb2NrQnVmZmVyTm9FcnIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3Rh
dHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAgICAgICAgICAgICAgICB1aW50OF90KiBibG9ja0J1
ZmZlckRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIHNpemVfdCBzZWdtZW50U2l6ZUF0
UG9zaXRpb24gPSAwOwotICAgICAgICAgICAgICAgIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdl
dERhdGFQb2ludGVyKHJhd0Jsb2NrQnVmZmVyLCAwLCAmc2VnbWVudFNpemVBdFBvc2l0aW9uLCBu
dWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOwotICAgICAgICAgICAgICAgIGlmIChl
cnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikKKyAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhf
dD4gYnVmZmVyOworICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLnRyeVJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobnVtVG9SZWFkKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhT
dGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwotICAgICAgICAgICAgICAgIGF1dG8gcmVhZFJlc3Vs
dCA9IGN1cnJlbnRTZWdtZW50LnJlYWQobV9wb3NpdGlvbldpdGhpblNlZ21lbnQsIG51bVRvUmVh
ZCwgYmxvY2tCdWZmZXJEYXRhKTsKKyAgICAgICAgICAgICAgICBidWZmZXIucmVzaXplKG51bVRv
UmVhZCk7CisgICAgICAgICAgICAgICAgYXV0byByZWFkUmVzdWx0ID0gY3VycmVudFNlZ21lbnQu
cmVhZChtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCwgbnVtVG9SZWFkLCBidWZmZXIuZGF0YSgpKTsK
ICAgICAgICAgICAgICAgICBpZiAoIXJlYWRSZXN1bHQuaGFzX3ZhbHVlKCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzZWdtZW50UmVhZEVycm9yVG9XZWJtU3RhdHVzKHJlYWRSZXN1bHQu
ZXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgbGFzdFJlYWQgPSByZWFkUmVzdWx0LnZhbHVlKCk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFRPRE86IGNvdWxkIHdl
IG9ubHkgY3JlYXRlIGEgbmV3IENNQmxvY2tCdWZmZXIgaWYgdGhlIGJhY2tlbmQgbWVtb3J5IGNo
YW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIG9uZT8KLSAgICAgICAgICAgICAgICBzaXplX3QgY2Fu
UmVhZCA9IHN0ZDo6bWluPHNpemVfdD4obnVtVG9SZWFkLCBzaGFyZWRCdWZmZXItPnNpemUoKSAt
IG1fcG9zaXRpb25XaXRoaW5TZWdtZW50KTsKLSAgICAgICAgICAgICAgICAvLyBGcm9tIENNQmxv
Y2tCdWZmZXJDdXN0b21CbG9ja1NvdXJjZSBkb2N1bWVudGF0aW9uOgotICAgICAgICAgICAgICAg
IC8vIE5vdGUgdGhhdCBmb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMsIHRoaXMgc3RydWN0IGNvbnRh
aW5zIG1pc2FsaWduZWQgZnVuY3Rpb24gcG9pbnRlcnMuCi0gICAgICAgICAgICAgICAgLy8gVG8g
YXZvaWQgbGluay10aW1lIGlzc3VlcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBjbGllbnRzIGZp
bGwgQ01CbG9ja0J1ZmZlckN1c3RvbUJsb2NrU291cmNlJ3MgZnVuY3Rpb24gcG9pbnRlciBmaWVs
ZHMKLSAgICAgICAgICAgICAgICAvLyBieSB1c2luZyBhc3NpZ25tZW50IHN0YXRlbWVudHMsIHJh
dGhlciB0aGFuIGRlY2xhcmluZyB0aGVtIGFzIGdsb2JhbCBvciBzdGF0aWMgc3RydWN0cy4KLSAg
ICAgICAgICAgICAgICBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxvY2tTb3VyY2UgYWxsb2NhdG9yOwot
ICAgICAgICAgICAgICAgIGFsbG9jYXRvci52ZXJzaW9uID0gMDsKLSAgICAgICAgICAgICAgICBh
bGxvY2F0b3IuQWxsb2NhdGVCbG9jayA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgYWxsb2Nh
dG9yLkZyZWVCbG9jayA9IEZyZWVTaGFyZWRCdWZmZXI7Ci0gICAgICAgICAgICAgICAgYWxsb2Nh
dG9yLnJlZkNvbiA9IHNoYXJlZEJ1ZmZlci5nZXQoKTsKLSAgICAgICAgICAgICAgICBzaGFyZWRC
dWZmZXItPnJlZigpOwotICAgICAgICAgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVm
ZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2NrKG51bGxwdHIsIHN0YXRpY19jYXN0PHZvaWQqPihjb25z
dF9jYXN0PHVpbnQ4X3QqPihzaGFyZWRCdWZmZXItPmRhdGEoKSkpLCBzaGFyZWRCdWZmZXItPnNp
emUoKSwgbnVsbHB0ciwgJmFsbG9jYXRvciwgbV9wb3NpdGlvbldpdGhpblNlZ21lbnQsIGNhblJl
YWQsIDAsICZyYXdCbG9ja0J1ZmZlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBrQ01C
bG9ja0J1ZmZlck5vRXJyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1
czo6a05vdEVub3VnaE1lbW9yeSk7Ci0gICAgICAgICAgICAgICAgbGFzdFJlYWQgPSBjYW5SZWFk
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0byBibG9ja0J1ZmZlciA9IGFkb3B0Q0Yo
cmF3QmxvY2tCdWZmZXIpOwotICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZm
ZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2Uob3V0cHV0QnVmZmVyLCByYXdCbG9ja0J1ZmZlciwgMCwg
MCwgMCk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOworICAg
ICAgICAgICAgICAgIGJ1ZmZlci5yZXNpemUocmVhZFJlc3VsdC52YWx1ZSgpKTsKKyAgICAgICAg
ICAgICAgICByYXdCbG9ja0J1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVm
ZmVyKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByYXdCbG9ja0J1ZmZl
ciA9IHNoYXJlZEJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEobV9wb3NpdGlvbldpdGhpblNlZ21l
bnQsIG51bVRvUmVhZCk7CisgICAgICAgICAgICBhdXRvIGxhc3RSZWFkID0gcmF3QmxvY2tCdWZm
ZXItPnNpemUoKTsKKyAgICAgICAgICAgIG91dHB1dEJ1ZmZlci5hcHBlbmQoKnJhd0Jsb2NrQnVm
ZmVyKTsKICAgICAgICAgICAgIG1fcG9zaXRpb24gKz0gbGFzdFJlYWQ7CiAgICAgICAgICAgICAq
bnVtQWN0dWFsbHlSZWFkICs9IGxhc3RSZWFkOwogICAgICAgICAgICAgbV9wb3NpdGlvbldpdGhp
blNlZ21lbnQgKz0gbGFzdFJlYWQ7CkBAIC00OTEsOCArNDM2LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgbV9wb3NpdGlvbldpdGhpblNlZ21lbnQgPSAwOwogICAgIH0KIAotICAgIFN0ZExpc3Q8U2Vn
bWVudD4gbV9kYXRhOwotICAgIFN0ZExpc3Q8U2VnbWVudD46Oml0ZXJhdG9yIG1fY3VycmVudFNl
Z21lbnQgeyBtX2RhdGEuZW5kKCkgfTsKKyAgICBTdGRMaXN0PFNvdXJjZUJ1ZmZlclBhcnNlcjo6
U2VnbWVudD4gbV9kYXRhOworICAgIFN0ZExpc3Q8U291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50
Pjo6aXRlcmF0b3IgbV9jdXJyZW50U2VnbWVudCB7IG1fZGF0YS5lbmQoKSB9OwogICAgIHNpemVf
dCBtX3Bvc2l0aW9uIHsgMCB9OwogICAgIHNpemVfdCBtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCB7
IDAgfTsKIH07CkBAIC01ODQsMTM5ICs1MjksNTQgQEAgc3RhdGljIGJvb2wgY2FuTG9hZEZvcm1h
dFJlYWRlcigpCiAjZW5kaWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCiB9CiAKLWJvb2wg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNXZWJNRm9ybWF0UmVhZGVyQXZhaWxhYmxlKCkKK1dl
Yk1QYXJzZXI6OldlYk1QYXJzZXIoQ2FsbGJhY2smIGNhbGxiYWNrKQorICAgIDogbV9wYXJzZXIo
bWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8V2VibVBhcnNlcj4oKSkKKyAgICAsIG1f
cmVhZGVyKG1ha2VVbmlxdWVSZWY8U2VnbWVudFJlYWRlcj4oKSkKKyAgICAsIG1fY2FsbGJhY2so
Y2FsbGJhY2spCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6d2Vi
TUZvcm1hdFJlYWRlckVuYWJsZWQoKSAmJiBjYW5Mb2FkRm9ybWF0UmVhZGVyKCkgJiYgaXNXZWJt
UGFyc2VyQXZhaWxhYmxlKCk7CiB9CiAKLU1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvbnN0IENvbnRl
bnRUeXBlJiB0eXBlKQotewotI2lmIEVOQUJMRShWUDkpIHx8IEVOQUJMRShWT1JCSVMpIHx8IEVO
QUJMRShPUFVTKQotICAgIGlmICghaXNXZWJtUGFyc2VyQXZhaWxhYmxlKCkpCi0gICAgICAgIHJl
dHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotCi0g
ICAgYXV0byBjb250YWluZXJUeXBlID0gdHlwZS5jb250YWluZXJUeXBlKCk7Ci0gICAgYm9vbCBp
c0F1ZGlvQ29udGFpbmVyVHlwZSA9IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29udGFpbmVyVHlw
ZSwgImF1ZGlvL3dlYm0iKTsKLSAgICBib29sIGlzVmlkZW9Db250YWluZXJUeXBlID0gZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShjb250YWluZXJUeXBlLCAidmlkZW8vd2VibSIpOwotICAgIGlmICgh
aXNBdWRpb0NvbnRhaW5lclR5cGUgJiYgIWlzVmlkZW9Db250YWluZXJUeXBlKQotICAgICAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLSAg
ICAKLSAgICBib29sIGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSA9IGZhbHNlOwotI2lmIEVOQUJM
RShWT1JCSVMpCi0gICAgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlIHw9IGlzVm9yYmlzRGVjb2Rl
ckF2YWlsYWJsZSgpOwotI2VuZGlmCi0jaWYgRU5BQkxFKE9QVVMpCi0gICAgaXNBbnlBdWRpb0Nv
ZGVjQXZhaWxhYmxlIHw9IGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKTsKLSNlbmRpZgotCi0gICAg
aWYgKGlzQXVkaW9Db250YWluZXJUeXBlICYmICFpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGUpCi0g
ICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9y
dGVkOwotCi0gICAgYm9vbCBpc0FueUNvZGVjQXZhaWxhYmxlID0gaXNBbnlBdWRpb0NvZGVjQXZh
aWxhYmxlOwotI2lmIEVOQUJMRShWUDkpCi0gICAgaXNBbnlDb2RlY0F2YWlsYWJsZSB8PSBpc1ZQ
OURlY29kZXJBdmFpbGFibGUoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFpc0FueUNvZGVjQXZhaWxh
YmxlKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05v
dFN1cHBvcnRlZDsKLQotICAgIGF1dG8gY29kZWNzID0gdHlwZS5jb2RlY3MoKTsKLSAgICBpZiAo
Y29kZWNzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBv
cnRzVHlwZTo6TWF5QmVTdXBwb3J0ZWQ7Ci0KLSAgICBmb3IgKGF1dG8mIGNvZGVjIDogY29kZWNz
KSB7Ci0jaWYgRU5BQkxFKFZQOSkKLSAgICAgICAgaWYgKGNvZGVjLnN0YXJ0c1dpdGgoInZwMDki
KSB8fCBjb2RlYy5zdGFydHNXaXRoKCJ2cDA4IikgfHwgZXF1YWwoY29kZWMsICJ2cDgiKSB8fCBl
cXVhbChjb2RlYywgInZwOSIpKSB7CitXZWJNUGFyc2VyOjp+V2ViTVBhcnNlcigpID0gZGVmYXVs
dDsKIAotICAgICAgICAgICAgaWYgKCFpc1ZQOURlY29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBv
cnRlZDsKLQotICAgICAgICAgICAgYXV0byBjb2RlY1BhcmFtZXRlcnMgPSBwYXJzZVZQQ29kZWNQ
YXJhbWV0ZXJzKGNvZGVjKTsKLSAgICAgICAgICAgIGlmICghY29kZWNQYXJhbWV0ZXJzKQotICAg
ICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90
U3VwcG9ydGVkOwotCi0gICAgICAgICAgICBpZiAoIWlzVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNv
cmRTdXBwb3J0ZWQoKmNvZGVjUGFyYW1ldGVycykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZQOSkKLQotI2lmIEVO
QUJMRShWT1JCSVMpCi0gICAgICAgIGlmIChjb2RlYyA9PSAidm9yYmlzIikgewotICAgICAgICAg
ICAgaWYgKCFpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoVk9SQklTKQot
Ci0jaWYgRU5BQkxFKE9QVVMpCi0gICAgICAgIGlmIChjb2RlYyA9PSAib3B1cyIpIHsKLSAgICAg
ICAgICAgIGlmICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShPUFVTKQot
Ci0gICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3Vw
cG9ydGVkOwotICAgIH0KLQotICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5
cGU6OklzU3VwcG9ydGVkOwotCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLQotICAg
IHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwot
I2VuZGlmIC8vIEVOQUJMRShWUDkpIHx8IEVOQUJMRShWT1JCSVMpIHx8IEVOQUJMRShPUFVTKQot
fQotCi1SZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2ViTT4gU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6Y3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJiB0eXBlKQordm9pZCBXZWJNUGFyc2VyOjpyZXNl
dFN0YXRlKCkKIHsKLSAgICBpZiAoaXNDb250ZW50VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBNZWRp
YVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkKQotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKSk7Ci0gICAgcmV0dXJuIG51
bGxwdHI7CisgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CisgICAgaWYg
KG1fcGFyc2VyKQorICAgICAgICBtX3BhcnNlci0+RGlkU2VlaygpOworICAgIG1fcmVhZGVyLT5y
ZXNldCgpOworICAgIG1fc3RhdGUgPSBtX2luaXRpYWxpemF0aW9uU2VnbWVudFByb2Nlc3NlZCA/
IFN0YXRlOjpSZWFkaW5nU2VnbWVudCA6IFN0YXRlOjpOb25lOworICAgIG1faW5pdGlhbGl6YXRp
b25TZWdtZW50ID0gbnVsbHB0cjsKKyAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudEVuY291bnRl
cmVkID0gZmFsc2U7CisgICAgbV9jdXJyZW50QmxvY2sucmVzZXQoKTsKKyAgICBmb3IgKGF1dG8m
IHRyYWNrIDogbV90cmFja3MpCisgICAgICAgIHRyYWNrLT5yZXNldCgpOwogfQogCi1Tb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCkKLSAgICA6IG1fcmVhZGVy
KG1ha2VVbmlxdWVSZWY8U2VnbWVudFJlYWRlcj4oKSkKK3ZvaWQgV2ViTVBhcnNlcjo6cmVzZXQo
KQogewotICAgIGlmIChpc1dlYm1QYXJzZXJBdmFpbGFibGUoKSkKLSAgICAgICAgbV9wYXJzZXIg
PSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxXZWJtUGFyc2VyPigpOworICAgIG1f
cmVhZGVyLT5yZXNldCgpOworICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7CiB9CiAKLVNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06On5Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCkKK3ZvaWQgV2ViTVBhcnNl
cjo6Y3JlYXRlQnl0ZVJhbmdlU2FtcGxlcygpCiB7CisgICAgZm9yIChhdXRvJiB0cmFjayA6IG1f
dHJhY2tzKQorICAgICAgICB0cmFjay0+Y3JlYXRlQnl0ZVJhbmdlU2FtcGxlcygpOworICAgIG1f
Y3JlYXRlQnl0ZVJhbmdlU2FtcGxlcyA9IHRydWU7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6YXBwZW5kRGF0YShTZWdtZW50JiYgc2VnbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBBcHBlbmRGbGFncyBhcHBlbmRGbGFncykKK0V4
Y2VwdGlvbk9yPGludD4gV2ViTVBhcnNlcjo6cGFyc2UoU291cmNlQnVmZmVyUGFyc2VyOjpTZWdt
ZW50JiYgc2VnbWVudCkKIHsKLSAgICBpZiAoIW1fcGFyc2VyKSB7Ci0gICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJTkZPX0xPR19JRl9Q
T1NTSUJMRShMT0dJREVOVElGSUVSLCAiZmxhZ3MoIiwgYXBwZW5kRmxhZ3MgPT0gQXBwZW5kRmxh
Z3M6OkRpc2NvbnRpbnVpdHkgPyAiRGlzY29udGludWl0eSIgOiAiIiwgIiksIHNpemUoIiwgc2Vn
bWVudC5zaXplKCksICIpIik7CisgICAgaWYgKCFtX3BhcnNlcikKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKLSAgICBpZiAoYXBwZW5kRmxhZ3MgPT0g
QXBwZW5kRmxhZ3M6OkRpc2NvbnRpbnVpdHkpIHsKLSAgICAgICAgbV9yZWFkZXItPnJlc2V0KCk7
Ci0gICAgICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7Ci0gICAgfQogICAgIG1fcmVhZGVyLT5hcHBl
bmRTZWdtZW50KFdURk1vdmUoc2VnbWVudCkpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg
ICAgbV9zdGF0dXMgPSBtX3BhcnNlci0+RmVlZCh0aGlzLCAmbV9yZWFkZXIpOwogICAgICAgICBp
ZiAobV9zdGF0dXMub2soKSB8fCBtX3N0YXR1cy5jb2RlID09IFN0YXR1czo6a0VuZE9mRmlsZSB8
fCBtX3N0YXR1cy5jb2RlID09IFN0YXR1czo6a1dvdWxkQmxvY2spIHsKICAgICAgICAgICAgIG1f
cmVhZGVyLT5yZWNsYWltU2VnbWVudHMoKTsKLQotICAgICAgICAgICAgLy8gQXVkaW8gdHJhY2tz
IGFyZSBncm91cGVkIGludG8gbWV0YS1zYW1wbGVzIG9mIGEgZHVyYXRpb24gbm8gbW9yZSB0aGFu
IG1fbWluaW11bVNhbXBsZUR1cmF0aW9uLgotICAgICAgICAgICAgLy8gQnV0IGF0IHRoZSBlbmQg
b2YgYSBmaWxlLCBubyBtb3JlIGF1ZGlvIGRhdGEgbWF5IGJlIGluY29taW5nLCBzbyBmbHVzaCBh
bmQgZW1pdCBhbnkgcGVuZGluZwotICAgICAgICAgICAgLy8gYXVkaW8gYnVmZmVycy4KLSAgICAg
ICAgICAgIGZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpOwotCi0gICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobV9zdGF0dXMuY29kZSAhPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihFcnJvckNvZGU6OlJlY2VpdmVkRWJtbEluc2lkZVNlZ21lbnQpKQpAQCAtNzQxLDYx
ICs2MDEsMjQgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmREYXRhKFNlZ21l
bnQmJiBzZWdtZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2kKICAgICAgICAgY29udGludWU7CiAg
ICAgfQogCi0gICAgRVJST1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJzdGF0dXMu
Y29kZSgiLCBtX3N0YXR1cy5jb2RlLCAiKSIpOwotICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2Fs
bGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBjb2RlID0gbV9zdGF0
dXMuY29kZV0gewotICAgICAgICBpZiAobV9kaWRFbmNvdW50ZXJFcnJvckR1cmluZ1BhcnNpbmdD
YWxsYmFjaykKLSAgICAgICAgICAgIG1fZGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2Fs
bGJhY2soY29kZSk7Ci0gICAgfSk7Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotfQotCi12
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ01lZGlhRGF0YSgpCi17Ci19
Ci0KLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0
YUZvclRyYWNrSUQoYm9vbCwgdWludDY0X3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotYm9vbCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzaG91bGRQcm92aWRlTWVkaWFkYXRhRm9y
VHJhY2tJRCh1aW50NjRfdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbV9zdGF0dXMuY29kZTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpyZXNldFBhcnNlclN0YXRlKCkKK3ZvaWQgV2ViTVBhcnNlcjo6c2V0TG9nZ2Vy
KGNvbnN0IExvZ2dlciYgbG9nZ2VyLCBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKQogewotICAg
IElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwotICAgIGlmIChtX3BhcnNlcikK
LSAgICAgICAgbV9wYXJzZXItPkRpZFNlZWsoKTsKLSAgICBtX3JlYWRlci0+cmVzZXQoKTsKLSAg
ICBtX3N0YXRlID0gbV9pbml0aWFsaXphdGlvblNlZ21lbnRQcm9jZXNzZWQgPyBTdGF0ZTo6UmVh
ZGluZ1NlZ21lbnQgOiBTdGF0ZTo6Tm9uZTsKLSAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudCA9
IG51bGxwdHI7Ci0gICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnRFbmNvdW50ZXJlZCA9IGZhbHNl
OwotICAgIG1fY3VycmVudEJsb2NrLnJlc2V0KCk7Ci0gICAgZm9yIChhdXRvJiB0cmFjayA6IG1f
dHJhY2tzKQotICAgICAgICB0cmFjay0+cmVzZXQoKTsKKyAgICBtX2xvZ2dlciA9ICZsb2dnZXI7
CisgICAgbV9sb2dJZGVudGlmaWVyID0gbG9nSWRlbnRpZmllcjsKIH0KIAotdm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjppbnZhbGlkYXRlKCkKK3ZvaWQgV2ViTVBhcnNlcjo6aW52YWxpZGF0
ZSgpCiB7Ci0gICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7Ci0KICAgICBt
X3BhcnNlciA9IG51bGxwdHI7CiAgICAgbV90cmFja3MuY2xlYXIoKTsKICAgICBtX2luaXRpYWxp
emF0aW9uU2VnbWVudCA9IG51bGxwdHI7CiAgICAgbV9jdXJyZW50QmxvY2sucmVzZXQoKTsKIH0K
IAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiBs
b2dnZXIsIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIpCi17Ci0gICAgbV9sb2dnZXIgPSAmbG9n
Z2VyOwotICAgIG1fbG9nSWRlbnRpZmllciA9IGxvZ0lkZW50aWZpZXI7Ci19Ci0KLWF1dG8gU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodWludDY0X3QgdHJh
Y2tOdW1iZXIpIC0+IFRyYWNrRGF0YSoKK2F1dG8gV2ViTVBhcnNlcjo6dHJhY2tEYXRhRm9yVHJh
Y2tOdW1iZXIodWludDY0X3QgdHJhY2tOdW1iZXIpIC0+IFRyYWNrRGF0YSoKIHsKICAgICBmb3Ig
KGF1dG8mIHRyYWNrIDogbV90cmFja3MpIHsKICAgICAgICAgaWYgKHRyYWNrLT50cmFjaygpLnRy
YWNrX251bWJlci5pc19wcmVzZW50KCkgJiYgdHJhY2stPnRyYWNrKCkudHJhY2tfbnVtYmVyLnZh
bHVlKCkgPT0gdHJhY2tOdW1iZXIpCkBAIC04MDQsNyArNjI3LDcgQEAgYXV0byBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjp0cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCB0cmFja051bWJl
cikgLT4gVHIKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06Ok9uRWxlbWVudEJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEs
IEFjdGlvbiogYWN0aW9uKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uRWxlbWVudEJlZ2luKGNvbnN0
IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEsIEFjdGlvbiogYWN0aW9uKQogewogICAgIEFTU0VS
VChhY3Rpb24pOwogICAgIGlmICghYWN0aW9uKQpAQCAtODc2LDcgKzY5OSw3IEBAIFN0YXR1cyBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0YWRh
dGEmIG1ldGFkYXRhLCBBCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7
CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRFbmQoY29uc3Qg
RWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSkKK1N0YXR1cyBXZWJNUGFyc2VyOjpPbkVsZW1lbnRF
bmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSkKIHsKICAgICBJTkZPX0xPR19JRl9Q
T1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtODkyLDI0ICs3MTUsMjAgQEAgU3RhdHVzIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWxlbWVudEVuZChjb25zdCBFbGVtZW50TWV0YWRhdGEm
IG1ldGFkYXRhKQogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJzdGF0
ZSgiLCBvbGRTdGF0ZSwgIi0+IiwgbV9zdGF0ZSwgIiksIGlkKCIsIG1ldGFkYXRhLmlkLCAiKSwg
c2l6ZSgiLCBtZXRhZGF0YS5zaXplLCAiKSIpOwogCiAgICAgaWYgKG1ldGFkYXRhLmlkID09IElk
OjprVHJhY2tzKSB7Ci0gICAgICAgIGlmICghbV9rZXlJZHMuaXNFbXB0eSgpICYmICFtX2RpZFBy
b3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSURDYWxsYmFj
aykgeworICAgICAgICBpZiAoIW1fa2V5SWRzLmlzRW1wdHkoKSAmJiAhbV9jYWxsYmFjay5jYW5E
ZWNyeXB0KCkpIHsKICAgICAgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElG
SUVSLCAiRW5jb3VudGVyZWQgZW5jcnlwdGVkIGNvbnRlbnQgd2l0aG91dCBhbiBrZXkgcmVxdWVz
dCBjYWxsYmFjayIpOwogICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OkNvZGUoRXJy
b3JDb2RlOjpDb250ZW50RW5jcnlwdGVkKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9p
bml0aWFsaXphdGlvblNlZ21lbnRFbmNvdW50ZXJlZCkgewotICAgICAgICAgICAgbV9jYWxsT25D
bGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0s
IGluaXRpYWxpemF0aW9uU2VnbWVudCA9IFdURk1vdmUoKm1faW5pdGlhbGl6YXRpb25TZWdtZW50
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBpZiAobV9kaWRQYXJzZUluaXRpYWxpemF0
aW9uRGF0YUNhbGxiYWNrKQotICAgICAgICAgICAgICAgICAgICBtX2RpZFBhcnNlSW5pdGlhbGl6
YXRpb25EYXRhQ2FsbGJhY2soV1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9CisgICAgICAgIGlmIChtX2luaXRpYWxpemF0aW9uU2VnbWVu
dEVuY291bnRlcmVkKQorICAgICAgICAgICAgbV9jYWxsYmFjay5wYXJzZWRJbml0aWFsaXphdGlv
bkRhdGEoV1RGTW92ZSgqbV9pbml0aWFsaXphdGlvblNlZ21lbnQpKTsKICAgICAgICAgbV9pbml0
aWFsaXphdGlvblNlZ21lbnRFbmNvdW50ZXJlZCA9IGZhbHNlOwogICAgICAgICBtX2luaXRpYWxp
emF0aW9uU2VnbWVudCA9IG51bGxwdHI7CiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50
UHJvY2Vzc2VkID0gdHJ1ZTsKIAogICAgICAgICBpZiAoIW1fa2V5SWRzLmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgZm9yIChhdXRvJiBrZXlJZFBhaXIgOiBtX2tleUlkcykKLSAgICAgICAgICAg
ICAgICBtX2RpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRy
YWNrSURDYWxsYmFjayhXVEZNb3ZlKGtleUlkUGFpci5zZWNvbmQpLCBrZXlJZFBhaXIuZmlyc3Qp
OworICAgICAgICAgICAgICAgIG1fY2FsbGJhY2suY29udGVudEtleVJlcXVlc3RJbml0aWFsaXph
dGlvbkRhdGFGb3JUcmFja0lEKFdURk1vdmUoa2V5SWRQYWlyLnNlY29uZCksIGtleUlkUGFpci5m
aXJzdCk7CiAgICAgICAgIH0KICAgICAgICAgbV9rZXlJZHMuY2xlYXIoKTsKICAgICB9CkBAIC05
MTcsNyArNzM2LDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWxlbWVudEVu
ZChjb25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhKQogICAgIHJldHVybiBTdGF0dXMoU3Rh
dHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
T25FYm1sKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEVibWwmIGVibWwpCitTdGF0dXMg
V2ViTVBhcnNlcjo6T25FYm1sKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEVibWwmIGVi
bWwpCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTky
NSw3ICs3NDQsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25FYm1sKGNvbnN0
IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEVibWwmIGVibWwpCiAgICAgICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjpDb2RlKEVycm9yQ29kZTo6SW52YWxpZERvY1R5cGUpKTsKIAogICAgIG1faW5p
dGlhbGl6YXRpb25TZWdtZW50RW5jb3VudGVyZWQgPSB0cnVlOwotICAgIG1faW5pdGlhbGl6YXRp
b25TZWdtZW50ID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8SW5pdGlhbGl6YXRp
b25TZWdtZW50PigpOworICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50ID0gbWFrZVVuaXF1ZVdp
dGhvdXRGYXN0TWFsbG9jQ2hlY2s8U291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNl
Z21lbnQ+KCk7CiAgICAgLy8gVE9ETzogU2V0dGluZyB0aGlzIHRvIGZhbHNlIGhlcmUsIHdpbGwg
cHJldmVudCBhZGRpbmcgYSBuZXcgbWVkaWEgc2VnbWVudCBzaG91bGQgYQogICAgIC8vIHBhcnRp
YWwgaW5pdCBzZWdtZW50IGJlIGVuY291bnRlcmVkIGFmdGVyIGEgY2FsbCB0byBzb3VyY2VCdWZm
ZXIuYWJvcnQoKS4KICAgICAvLyBJdCdzIHByb2JhYmx5IGZpbmUgYXMgbm8tb25lIGluIHRoZWly
IHJpZ2h0IG1pbmQgc2hvdWxkIHNlbmQgcGFydGlhbCBpbml0IHNlZ21lbnQgb25seQpAQCAtOTM2
LDcgKzc1NSw3IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVibWwoY29uc3Qg
RWxlbWVudE1ldGFkYXRhJiwgY29uc3QgRWJtbCYgZWJtbCkKICAgICByZXR1cm4gU3RhdHVzKFN0
YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
Ok9uU2VnbWVudEJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIEFjdGlvbiogYWN0aW9uKQor
U3RhdHVzIFdlYk1QYXJzZXI6Ok9uU2VnbWVudEJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYs
IEFjdGlvbiogYWN0aW9uKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJ
RVIpOwogCkBAIC05NTMsNyArNzcyLDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
Ok9uU2VnbWVudEJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIEFjdGlvbiogYWMKICAgICBy
ZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06Ok9uSW5mbyhjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBJbmZv
JiBpbmZvKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uSW5mbyhjb25zdCBFbGVtZW50TWV0YWRhdGEm
LCBjb25zdCBJbmZvJiBpbmZvKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5U
SUZJRVIpOwogCkBAIC05NjksNyArNzg4LDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06Ok9uSW5mbyhjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBJbmZvJiBpbmZvKQogICAg
IHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6T25DbHVzdGVyQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwg
Y29uc3QgQ2x1c3RlciYgY2x1c3RlciwgQWN0aW9uKiBhY3Rpb24pCitTdGF0dXMgV2ViTVBhcnNl
cjo6T25DbHVzdGVyQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQ2x1c3RlciYg
Y2x1c3RlciwgQWN0aW9uKiBhY3Rpb24pCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9H
SURFTlRJRklFUik7CiAKQEAgLTk4NSw3ICs4MDQsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6T25DbHVzdGVyQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQ2x1
cwogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25UcmFja0VudHJ5KGNvbnN0IEVsZW1lbnRNZXRhZGF0
YSYsIGNvbnN0IFRyYWNrRW50cnkmIHRyYWNrRW50cnkpCitTdGF0dXMgV2ViTVBhcnNlcjo6T25U
cmFja0VudHJ5KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IFRyYWNrRW50cnkmIHRyYWNr
RW50cnkpCiB7CiAgICAgaWYgKCF0cmFja0VudHJ5LnRyYWNrX3R5cGUuaXNfcHJlc2VudCgpIHx8
ICF0cmFja0VudHJ5LmNvZGVjX2lkLmlzX3ByZXNlbnQoKSkKICAgICAgICAgcmV0dXJuIFN0YXR1
cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CkBAIC0xMDM3LDM2ICs4NTYsMzQgQEAgU3RhdHVzIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tFbnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEm
LCBjb25zdCBUcmFja0UKICAgICB9CiAKICAgICBTdHJpbmdWaWV3IGNvZGVjU3RyaW5nIHsgdHJh
Y2tFbnRyeS5jb2RlY19pZC52YWx1ZSgpLmRhdGEoKSwgKHVuc2lnbmVkKXRyYWNrRW50cnkuY29k
ZWNfaWQudmFsdWUoKS5sZW5ndGgoKSB9OworICAgIGF1dG8gdHJhY2sgPSBbJl0oKSAtPiBVbmlx
dWVSZWY8VHJhY2tEYXRhPiB7CiAjaWYgRU5BQkxFKFZQOSkKLSAgICBpZiAoY29kZWNTdHJpbmcg
PT0gIlZfVlA5IiAmJiBpc1ZQOURlY29kZXJBdmFpbGFibGUoKSkgewotICAgICAgICBtX3RyYWNr
cy5hcHBlbmQoVmlkZW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZQOSwgdHJhY2tFbnRy
eSwgKnRoaXMpKTsKLSAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7
Ci0gICAgfQotICAgIGlmIChjb2RlY1N0cmluZyA9PSAiVl9WUDgiICYmIGlzVlA4RGVjb2RlckF2
YWlsYWJsZSgpKSB7Ci0gICAgICAgIG1fdHJhY2tzLmFwcGVuZChWaWRlb1RyYWNrRGF0YTo6Y3Jl
YXRlKENvZGVjVHlwZTo6VlA4LCB0cmFja0VudHJ5LCAqdGhpcykpOwotICAgICAgICByZXR1cm4g
U3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKLSAgICB9CisgICAgICAgIGlmIChjb2RlY1N0
cmluZyA9PSAiVl9WUDkiICYmIGlzVlA5RGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAg
cmV0dXJuIFZpZGVvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpWUDksIHRyYWNrRW50cnks
ICp0aGlzKTsKKyAgICAgICAgaWYgKGNvZGVjU3RyaW5nID09ICJWX1ZQOCIgJiYgaXNWUDhEZWNv
ZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gVmlkZW9UcmFja0RhdGE6OmNyZWF0
ZShDb2RlY1R5cGU6OlZQOCwgdHJhY2tFbnRyeSwgKnRoaXMpOwogI2VuZGlmCiAKICNpZiBFTkFC
TEUoVk9SQklTKQotICAgIGlmIChjb2RlY1N0cmluZyA9PSAiQV9WT1JCSVMiICYmIGlzVm9yYmlz
RGVjb2RlckF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNr
RGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6Vm9yYmlzLCB0cmFja0VudHJ5LCAqdGhpcywgbV9taW5p
bXVtQXVkaW9TYW1wbGVEdXJhdGlvbikpOwotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6
a09rQ29tcGxldGVkKTsKLSAgICB9CisgICAgICAgIGlmIChjb2RlY1N0cmluZyA9PSAiQV9WT1JC
SVMiICYmIGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIEF1
ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpWb3JiaXMsIHRyYWNrRW50cnksICp0aGlz
KTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QVVMpCi0gICAgaWYgKGNvZGVjU3RyaW5nID09ICJB
X09QVVMiICYmIGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkgewotICAgICAgICBtX3RyYWNrcy5h
cHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6Ok9wdXMsIHRyYWNrRW50cnks
ICp0aGlzLCBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKSk7Ci0gICAgICAgIHJldHVybiBT
dGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwotICAgIH0KKyAgICAgICAgaWYgKGNvZGVjU3Ry
aW5nID09ICJBX09QVVMiICYmIGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAg
IHJldHVybiBBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6T3B1cywgdHJhY2tFbnRy
eSwgKnRoaXMpOwogI2VuZGlmCisgICAgICAgIHJldHVybiBUcmFja0RhdGE6OmNyZWF0ZShDb2Rl
Y1R5cGU6OlVuc3VwcG9ydGVkLCB0cmFja0VudHJ5LCAqdGhpcyk7CisgICAgfSgpOworCisgICAg
aWYgKG1fY3JlYXRlQnl0ZVJhbmdlU2FtcGxlcykKKyAgICAgICAgdHJhY2stPmNyZWF0ZUJ5dGVS
YW5nZVNhbXBsZXMoKTsKIAotICAgIG1fdHJhY2tzLmFwcGVuZChUcmFja0RhdGE6OmNyZWF0ZShD
b2RlY1R5cGU6OlVuc3VwcG9ydGVkLCB0cmFja0VudHJ5LCAqdGhpcykpOworICAgIG1fdHJhY2tz
LmFwcGVuZChXVEZNb3ZlKHRyYWNrKSk7CiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0Nv
bXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJs
b2NrQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQmxvY2smIGJsb2NrLCBBY3Rp
b24qIGFjdGlvbikKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPbkJsb2NrQmVnaW4oY29uc3Qg
RWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQmxvY2smIGJsb2NrLCBBY3Rpb24qIGFjdGlvbikKIHsK
ICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtMTA4MSw3ICs4
OTgsNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0JlZ2lu
KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0CiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6
OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpPbkJsb2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEJsb2NrJikKK3dlYm06
OlN0YXR1cyBXZWJNUGFyc2VyOjpPbkJsb2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNv
bnN0IEJsb2NrJikKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsK
IApAQCAtMTA5MCw3ICs5MDcsNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6T25CbG9ja0VuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBCbAogICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6T25TaW1wbGVCbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0
YSYsIGNvbnN0IFNpbXBsZUJsb2NrJiBibG9jaywgQWN0aW9uKiBhY3Rpb24pCit3ZWJtOjpTdGF0
dXMgV2ViTVBhcnNlcjo6T25TaW1wbGVCbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYs
IGNvbnN0IFNpbXBsZUJsb2NrJiBibG9jaywgQWN0aW9uKiBhY3Rpb24pCiB7CiAgICAgSU5GT19M
T0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTExMDUsNyArOTIyLDcgQEAgd2Vi
bTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uU2ltcGxlQmxvY2tCZWdpbihjb25z
dCBFbGVtZW50TWV0YWRhdGEmLAogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0
ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25TaW1wbGVC
bG9ja0VuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBTaW1wbGVCbG9jayYpCit3ZWJt
OjpTdGF0dXMgV2ViTVBhcnNlcjo6T25TaW1wbGVCbG9ja0VuZChjb25zdCBFbGVtZW50TWV0YWRh
dGEmLCBjb25zdCBTaW1wbGVCbG9jayYpCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9H
SURFTlRJRklFUik7CiAKQEAgLTExMTQsNyArOTMxLDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06Ok9uU2ltcGxlQmxvY2tFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwg
Y28KICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6
U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tHcm91cEJlZ2luKGNvbnN0IHdl
Ym06OkVsZW1lbnRNZXRhZGF0YSYsIHdlYm06OkFjdGlvbiogYWN0aW9uKQord2VibTo6U3RhdHVz
IFdlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEJlZ2luKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0
YSYsIHdlYm06OkFjdGlvbiogYWN0aW9uKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExP
R0lERU5USUZJRVIpOwogCkBAIC0xMTI2LDcgKzk0Myw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrR3JvdXBCZWdpbihjb25zdCB3ZWJtOjpFbGVtZW50TWV0
YWRhCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdlYm06
OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrR3JvdXBFbmQoY29uc3Qgd2Vi
bTo6RWxlbWVudE1ldGFkYXRhJiwgY29uc3Qgd2VibTo6QmxvY2tHcm91cCYgYmxvY2tHcm91cCkK
K3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPbkJsb2NrR3JvdXBFbmQoY29uc3Qgd2VibTo6RWxl
bWVudE1ldGFkYXRhJiwgY29uc3Qgd2VibTo6QmxvY2tHcm91cCYgYmxvY2tHcm91cCkKIHsKICAg
ICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKICAgICBpZiAoYmxvY2tHcm91
cC5ibG9jay5pc19wcmVzZW50KCkgJiYgYmxvY2tHcm91cC5kaXNjYXJkX3BhZGRpbmcuaXNfcHJl
c2VudCgpKSB7CkBAIC0xMTM2LDE3ICs5NTMsMTMgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06Ok9uQmxvY2tHcm91cEVuZChjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEK
ICAgICAgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiSWdub3Jp
bmcgdW5rbm93biB0cmFjayBudW1iZXIgIiwgdHJhY2tOdW1iZXIpOwogICAgICAgICAgICAgcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KHRyYWNrRGF0YS0+dHJhY2soKS50cmFja191aWQuaXNfcHJlc2VudCgpICYmIGJsb2NrR3JvdXAu
ZGlzY2FyZF9wYWRkaW5nLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgICAgICBtX2NhbGxPbkNsaWVu
dFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdHJh
Y2tJRCA9IHRyYWNrRGF0YS0+dHJhY2soKS50cmFja191aWQudmFsdWUoKSwgcGFkZGluZyA9IE1l
ZGlhVGltZShibG9ja0dyb3VwLmRpc2NhcmRfcGFkZGluZy52YWx1ZSgpLCBrX3VzX2luX3NlY29u
ZHMpXSgpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxi
YWNrKQotICAgICAgICAgICAgICAgICAgICBtX2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2so
dHJhY2tJRCwgcGFkZGluZyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAodHJhY2tEYXRhLT50cmFjaygpLnRyYWNrX3VpZC5pc19wcmVzZW50KCkgJiYgYmxvY2tHcm91
cC5kaXNjYXJkX3BhZGRpbmcudmFsdWUoKSA+IDApCisgICAgICAgICAgICBtX2NhbGxiYWNrLnBh
cnNlZFRyaW1taW5nRGF0YSh0cmFja0RhdGEtPnRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCksIE1l
ZGlhVGltZShibG9ja0dyb3VwLmRpc2NhcmRfcGFkZGluZy52YWx1ZSgpLCBrX3VzX2luX3NlY29u
ZHMpKTsKICAgICB9CiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9
CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkZyYW1lKGNvbnN0IEZy
YW1lTWV0YWRhdGEmIG1ldGFkYXRhLCBSZWFkZXIqIHJlYWRlciwgdWludDY0X3QqIGJ5dGVzUmVt
YWluaW5nKQord2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9uRnJhbWUoY29uc3QgRnJhbWVNZXRh
ZGF0YSYgbWV0YWRhdGEsIFJlYWRlciogcmVhZGVyLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcp
CiB7CiAgICAgQVNTRVJUKHJlYWRlcik7CiAgICAgaWYgKCFyZWFkZXIpCkBAIC0xMTgzLDM3ICs5
OTYsMjAgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRnJhbWUoY29u
c3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIFJlYWQKICAgICAgICAgcmV0dXJuIFNraXAocmVh
ZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRyYWNrRGF0YS0+Y29u
c3VtZUZyYW1lRGF0YSgqcmVhZGVyLCBtZXRhZGF0YSwgYnl0ZXNSZW1haW5pbmcsIFBBTDo6Q01U
aW1lTWFrZShibG9jay0+dGltZWNvZGUgKyBtX2N1cnJlbnRUaW1lY29kZSwgbV90aW1lc2NhbGUp
LCBibG9jay0+bnVtX2ZyYW1lcyk7CisgICAgcmV0dXJuIHRyYWNrRGF0YS0+Y29uc3VtZUZyYW1l
RGF0YSgqcmVhZGVyLCBtZXRhZGF0YSwgYnl0ZXNSZW1haW5pbmcsIE1lZGlhVGltZShibG9jay0+
dGltZWNvZGUgKyBtX2N1cnJlbnRUaW1lY29kZSwgbV90aW1lc2NhbGUpLCBibG9jay0+bnVtX2Zy
YW1lcyk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cHJvdmlkZU1lZGlhRGF0
YShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBsZUJ1ZmZlciwgdWludDY0X3QgdHJh
Y2tJRCwgc3RkOjpvcHRpb25hbDxzaXplX3Q+IGJ5dGVSYW5nZU9mZnNldCkKLXsKLSAgICBtX2Nh
bGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRo
aXMgfSwgc2FtcGxlQnVmZmVyID0gV1RGTW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lELCBieXRl
UmFuZ2VPZmZzZXRdICgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fZGlkUHJvdmlkZU1lZGlh
RGF0YUNhbGxiYWNrKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8gbWVkaWFT
YW1wbGUgPSBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIHRy
YWNrSUQpOwotICAgICAgICBpZiAoYnl0ZVJhbmdlT2Zmc2V0KQotICAgICAgICAgICAgbWVkaWFT
YW1wbGUtPnNldEJ5dGVSYW5nZU9mZnNldCgqYnl0ZVJhbmdlT2Zmc2V0KTsKLSAgICAgICAgbV9k
aWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2soV1RGTW92ZShtZWRpYVNhbXBsZSksIHRyYWNrSUQs
IGVtcHR5U3RyaW5nKCkpOwotICAgIH0pOwotfQogCiAjZGVmaW5lIFBBUlNFUl9MT0dfRVJST1Jf
SUZfUE9TU0lCTEUoLi4uKSBpZiAocGFyc2VyKCkubG9nZ2VyUHRyKCkpIHBhcnNlcigpLmxvZ2dl
clB0cigpLT5lcnJvcihsb2dDaGFubmVsKCksIExvZ2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIobG9n
Q2xhc3NOYW1lKCksIF9fZnVuY19fLCBwYXJzZXIoKS5sb2dJZGVudGlmaWVyKCkpLCBfX1ZBX0FS
R1NfXykKIAotUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNl
dCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdlYk1QYXJzZXI6
OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwg
c2l6ZV90IGxlbmd0aCkgY29uc3QKIHsKLSAgICBpZiAoIW9mZnNldCAmJiAhbGVuZ3RoICYmIFBB
TDo6Q01CbG9ja0J1ZmZlcklzUmFuZ2VDb250aWd1b3VzKG1fY29tcGxldGVCbG9ja0J1ZmZlci5n
ZXQoKSwgMCwgMCkpCi0gICAgICAgIHJldHVybiBtX2NvbXBsZXRlQmxvY2tCdWZmZXI7Ci0gICAg
Q01CbG9ja0J1ZmZlclJlZiByYXdDb250aWd1b3VzQnVmZmVyID0gbnVsbHB0cjsKLSAgICBpZiAo
UEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlQ29udGlndW91cyhudWxscHRyLCBtX2NvbXBsZXRlQmxv
Y2tCdWZmZXIuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIG9mZnNldCwgbGVuZ3RoLCAwLCAmcmF3
Q29udGlndW91c0J1ZmZlcikgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikgewotICAgICAgICBSRUxF
QVNFX0xPR19GQVVMVChXZWJBdWRpbywgImZhaWxlZCB0byBjcmVhdGUgY29udGlndW91cyBibG9j
ayBidWZmZXIiKTsKKyAgICBpZiAob2Zmc2V0ICsgbGVuZ3RoID4gbV9jb21wbGV0ZUJsb2NrQnVm
ZmVyLT5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4g
YWRvcHRDRihyYXdDb250aWd1b3VzQnVmZmVyKTsKKyAgICByZXR1cm4gbV9jb21wbGV0ZUJsb2Nr
QnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YShvZmZzZXQsIGxlbmd0aCk7CiB9CiAKLXdlYm06OlN0
YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2Vi
bTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1
aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6VHJhY2tE
YXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCB3ZWJtOjpGcmFt
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQogewogICAgIGlm
IChtX2NvbXBsZXRlUGFja2V0U2l6ZSAmJiAqbV9jb21wbGV0ZVBhY2tldFNpemUgIT0gbWV0YWRh
dGEuc2l6ZSkgewogICAgICAgICAvLyBUaGUgcGFja2V0J3MgbWV0YWRhdGEgZG9lc24ndCBtYXRj
aCB0aGUgY3VycmVudGx5IHBlbmRpbmcgY29tcGxldGUgcGFja2V0OyByZXN0YXJ0LgpAQCAtMTIy
NCwyMCArMTAyMCw5IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFj
a0RhdGE6OnJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkCiAgICAgaWYgKCFtX2NvbXBs
ZXRlUGFja2V0U2l6ZSkKICAgICAgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBtZXRhZGF0YS5z
aXplOwogCi0gICAgaWYgKCFtX2N1cnJlbnRCbG9ja0J1ZmZlcikgewotICAgICAgICBBU1NFUlQo
IW1fcGFydGlhbEJ5dGVzUmVhZCk7Ci0gICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tC
dWZmZXIgPSBudWxscHRyOwotICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNy
ZWF0ZUVtcHR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1NYXhCbG9ja0J1ZmZlckNhcGFjaXR5LCAw
LCAmcmF3QmxvY2tCdWZmZXIpOwotICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9F
cnIgfHwgIXJhd0Jsb2NrQnVmZmVyKSB7Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lG
X1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkgZmFpbGVkIHdpdGggZXJyb3IiLCBl
cnIpOwotICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwot
ICAgICAgICB9Ci0gICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0gYWRvcHRDRihyYXdCbG9j
a0J1ZmZlcik7Ci0gICAgfQotCiAgICAgd2hpbGUgKCpieXRlc1JlbWFpbmluZykgewogICAgICAg
ICB1aW50NjRfdCBieXRlc1JlYWQ7Ci0gICAgICAgIGF1dG8gc3RhdHVzID0gc3RhdGljX2Nhc3Q8
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U2VnbWVudFJlYWRlciY+KHJlYWRlcikuUmVhZEludG8o
KmJ5dGVzUmVtYWluaW5nLCBtX2N1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwgJmJ5dGVzUmVhZCk7
CisgICAgICAgIGF1dG8gc3RhdHVzID0gc3RhdGljX2Nhc3Q8V2ViTVBhcnNlcjo6U2VnbWVudFJl
YWRlciY+KHJlYWRlcikuUmVhZEludG8oKmJ5dGVzUmVtYWluaW5nLCBtX2N1cnJlbnRCbG9ja0J1
ZmZlciwgJmJ5dGVzUmVhZCk7CiAgICAgICAgICpieXRlc1JlbWFpbmluZyAtPSBieXRlc1JlYWQ7
CiAgICAgICAgIG1fcGFydGlhbEJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7CiAKQEAgLTEyNDksMTgx
ICsxMDM0LDExMCBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tE
YXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZAogICAgIGlmIChtX3BhcnRpYWxC
eXRlc1JlYWQgPCAqbV9jb21wbGV0ZVBhY2tldFNpemUpCiAgICAgICAgIHJldHVybiB3ZWJtOjpT
dGF0dXMod2VibTo6U3RhdHVzOjprT2tQYXJ0aWFsKTsKIAotICAgIGlmICghbV9jb21wbGV0ZUJs
b2NrQnVmZmVyKQotICAgICAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXIgPSBXVEZNb3ZlKG1fY3Vy
cmVudEJsb2NrQnVmZmVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNN
QmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UobV9jb21wbGV0ZUJsb2NrQnVmZmVyLmdl
dCgpLCBtX2N1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwgMCwgMCwgMCk7Ci0gICAgICAgIGlmIChl
cnIpIHsKLSAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tC
dWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UgdG8gY29tcGxldGUgYmxvY2sgZmFpbGVkIHdpdGgg
ZXJyb3IiLCBlcnIpOwotICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91
Z2hNZW1vcnkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0gbnVs
bHB0cjsKLSAgICB9CisgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVyID0gbV9jdXJyZW50QmxvY2tC
dWZmZXIudGFrZSgpOworICAgIG1fY29tcGxldGVQYWNrZXRTaXplID0gc3RkOjpudWxsb3B0Owog
ICAgIG1fcGFydGlhbEJ5dGVzUmVhZCA9IDA7CiAKICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdl
Ym06OlN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRl
ciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVz
UmVtYWluaW5nLCBjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCBzYW1wbGVDb3Vu
dCkKK3ZvaWQgV2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVz
U3RhdGUoKQoreworICAgIG1fa2V5RnJhbWVzLmNsZWFyKCk7CisgICAgVHJhY2tEYXRhOjpyZXNl
dENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7Cit9CisKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpW
aWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29u
c3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29u
c3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQpCiB7CiAjaWYgRU5BQkxFKFZQOSkK
ICAgICBhdXRvIHN0YXR1cyA9IHJlYWRGcmFtZURhdGEocmVhZGVyLCBtZXRhZGF0YSwgYnl0ZXNS
ZW1haW5pbmcpOwogICAgIGlmICghc3RhdHVzLmNvbXBsZXRlZF9vaygpKQogICAgICAgICByZXR1
cm4gc3RhdHVzOwogCi0gICAgY3JlYXRlU2FtcGxlQnVmZmVyKHByZXNlbnRhdGlvblRpbWUsIHNh
bXBsZUNvdW50LCBtZXRhZGF0YSk7Ci0gICAgcmVzZXQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKG1ldGFkYXRhKTsKLSAgICBVTlVTRURfUEFSQU0ocHJlc2VudGF0aW9uVGltZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHNhbXBsZUNvdW50KTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIFNraXAoJnJl
YWRlciwgYnl0ZXNSZW1haW5pbmcpOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIoY29uc3QgQ01UaW1lJiBwcmVzZW50
YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmIG1l
dGFkYXRhKQotewotI2lmIEVOQUJMRShWUDkpCi0gICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRh
ID0gbnVsbHB0cjsKICAgICBjb25zdGV4cHIgc2l6ZV90IG1heEhlYWRlclNpemUgPSAzMjsgLy8g
VGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgVlA5IHVuY29tcHJlc3NlZCBoZWFkZXIgaXMgMTQ0IGJp
dHMgYW5kIDExIGJ5dGVzIGZvciBWUDguIFJvdW5kIGhpZ2guCi0gICAgc2l6ZV90IHNlZ21lbnRI
ZWFkZXJMZW5ndGggPSBzdGQ6Om1pbihtYXhIZWFkZXJTaXplLCAqbV9jb21wbGV0ZVBhY2tldFNp
emUpOworICAgIHNpemVfdCBzZWdtZW50SGVhZGVyTGVuZ3RoID0gc3RkOjptaW4obWF4SGVhZGVy
U2l6ZSwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLT5zaXplKCkpOwogICAgIGF1dG8gY29udGlndW91
c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKDAsIHNlZ21lbnRIZWFkZXJM
ZW5ndGgpOwogICAgIGlmICghY29udGlndW91c0J1ZmZlcikgewotICAgICAgICBQQVJTRVJfTE9H
X0VSUk9SX0lGX1BPU1NJQkxFKCJWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyIGZh
aWxlZCB0byBjcmVhdGUgY29udGlndW91cyBkYXRhIGJsb2NrIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihj
b250aWd1b3VzQnVmZmVyLmdldCgpLCAwLCBudWxscHRyLCBudWxscHRyLCAoY2hhcioqKSZibG9j
a0J1ZmZlckRhdGEpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9J
Rl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9y
IiwgZXJyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJWaWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSBmYWlsZWQgdG8gY3JlYXRl
IGNvbnRpZ3VvdXMgZGF0YSBibG9jayIpOworICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBi
eXRlc1JlbWFpbmluZyk7CiAgICAgfQorICAgIGNvbnN0IHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0
YSA9IGNvbnRpZ3VvdXNCdWZmZXItPmRhdGEoKTsKIAogICAgIGJvb2wgaXNLZXkgPSBmYWxzZTsK
LSAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gZm9ybWF0RGVzY3JpcHRpb247
CiAgICAgaWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpWUDkpIHsKICAgICAgICAgaWYgKCFtX2hl
YWRlclBhcnNlci5QYXJzZVVuY29tcHJlc3NlZEhlYWRlcihibG9ja0J1ZmZlckRhdGEsIHNlZ21l
bnRIZWFkZXJMZW5ndGgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJu
IFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogCiAgICAgICAgIGlmIChtX2hlYWRlclBh
cnNlci5rZXkoKSkgewogICAgICAgICAgICAgaXNLZXkgPSB0cnVlOwotICAgICAgICAgICAgYXV0
byBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRl
clBhcnNlcihtX2hlYWRlclBhcnNlciwgdHJhY2soKS52aWRlby52YWx1ZSgpLmNvbG91cik7Ci0g
ICAgICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgUEFS
U0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiZmFpbGVkIHRvIGNyZWF0ZSBmb3JtYXQgZGVzY3Jp
cHRpb24gZnJvbSBWUFggaGVhZGVyIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oV1RGTW92ZShmb3JtYXRE
ZXNjcmlwdGlvbikpOworICAgICAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oY3JlYXRlVmlk
ZW9JbmZvRnJvbVZQOUhlYWRlclBhcnNlcihtX2hlYWRlclBhcnNlciwgdHJhY2soKS52aWRlby52
YWx1ZSgpLmNvbG91cikpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChjb2RlYygpID09IENv
ZGVjVHlwZTo6VlA4KSB7CiAgICAgICAgIGF1dG8gaGVhZGVyID0gcGFyc2VWUDhGcmFtZUhlYWRl
cihibG9ja0J1ZmZlckRhdGEsIHNlZ21lbnRIZWFkZXJMZW5ndGgpOwogICAgICAgICBpZiAoaGVh
ZGVyICYmIGhlYWRlci0+a2V5ZnJhbWUpIHsKICAgICAgICAgICAgIGlzS2V5ID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGF1dG8gZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlv
bkZyb21WUDhIZWFkZXIoKmhlYWRlciwgdHJhY2soKS52aWRlby52YWx1ZSgpLmNvbG91cik7Ci0g
ICAgICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgUEFS
U0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiZmFpbGVkIHRvIGNyZWF0ZSBmb3JtYXQgZGVzY3Jp
cHRpb24gZnJvbSBWUFggaGVhZGVyIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oV1RGTW92ZShmb3JtYXRE
ZXNjcmlwdGlvbikpOworICAgICAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oY3JlYXRlVmlk
ZW9JbmZvRnJvbVZQOEhlYWRlcigqaGVhZGVyLCB0cmFjaygpLnZpZGVvLnZhbHVlKCkuY29sb3Vy
KSk7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIW1fY29tcGxldGVNZWRpYVNhbXBsZXMu
aW5mbygpKQorICAgICAgICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLnNldEluZm8oZm9ybWF0RGVz
Y3JpcHRpb24oKSk7CisgICAgZWxzZSBpZiAoZm9ybWF0RGVzY3JpcHRpb24oKSAmJiAqZm9ybWF0
RGVzY3JpcHRpb24oKSAhPSAqbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5pbmZvKCkpCisgICAgICAg
IGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKKwogICAgIGF1dG8gdHJhY2sgPSB0aGlzLT50cmFjaygp
OwotICAgIC8vIEZJWE1FOiBBIGJsb2NrIG1pZ2h0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBmcmFt
ZSwgYnV0IG9ubHkgdGhpcyBmcmFtZSBoYXMgYmVlbiByZWFkIGludG8gYGNvbXBsZXRlQmxvY2tC
dWZmZXJgLgotICAgIC8vIEJlbG93IHdlIGNyZWF0ZSBzYW1wbGUgYnVmZmVycyBmb3IgZWFjaCBm
cmFtZSwgZWFjaCB3aXRoIHRoZSBibG9jaydzIHRpbWVjb2RlIGFuZCBgbnVtX2ZyYW1lc2AgdmFs
dWUuCi0gICAgLy8gU2hvdWxkbid0IHdlIGNyZWF0ZSBqdXN0IG9uZSBzYW1wbGUgYnVmZmVyIG9u
Y2UgYWxsIHRoZSBibG9jaydzIGZyYW1lcyBoYXZlIGJlZW4gcmVhZCBpbnRvIGBjdXJyZW50Qmxv
Y2tCdWZmZXJgPwogCiAgICAgdWludDY0X3QgZHVyYXRpb24gPSAwOwogICAgIGlmICh0cmFjay5k
ZWZhdWx0X2R1cmF0aW9uLmlzX3ByZXNlbnQoKSkKLSAgICAgICAgZHVyYXRpb24gPSB0cmFjay5k
ZWZhdWx0X2R1cmF0aW9uLnZhbHVlKCkgKiBwcmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSAvIGtf
dXNfaW5fc2Vjb25kczsKKyAgICAgICAgZHVyYXRpb24gPSB0cmFjay5kZWZhdWx0X2R1cmF0aW9u
LnZhbHVlKCkgKiBwcmVzZW50YXRpb25UaW1lLnRpbWVTY2FsZSgpIC8ga191c19pbl9zZWNvbmRz
OwogCi0gICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKLSAg
ICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nID0geyBQQUw6OkNNVGltZU1ha2UoZHVyYXRpb24s
IHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxlKSwgcHJlc2VudGF0aW9uVGltZSwgcHJlc2VudGF0
aW9uVGltZSB9OwotICAgIGVyciA9IFBBTDo6Q01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIuZ2V0KCksIHRoaXMtPmZvcm1h
dERlc2NyaXB0aW9uKCkuZ2V0KCksIHNhbXBsZUNvdW50LCAxLCAmdGltaW5nLCAxLCAmKm1fY29t
cGxldGVQYWNrZXRTaXplLCAmcmF3U2FtcGxlQnVmZmVyKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAg
ICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVh
ZHkgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGF1dG8gc2FtcGxlQnVmZmVyID0gYWRvcHRDRihyYXdTYW1wbGVCdWZmZXIpOwotCi0gICAgYXV0
byBhdHRhY2htZW50c0FycmF5ID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1l
bnRzQXJyYXkoc2FtcGxlQnVmZmVyLmdldCgpLCB0cnVlKTsKLSAgICBBU1NFUlQoYXR0YWNobWVu
dHNBcnJheSk7Ci0gICAgaWYgKCFhdHRhY2htZW50c0FycmF5KSB7Ci0gICAgICAgIFBBUlNFUl9M
T0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNB
cnJheSByZXR1cm5lZCBOVUxMIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1f
dXNlQnl0ZVJhbmdlKQorICAgICAgICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmFwcGVuZCh7IHBy
ZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUsIE1lZGlhVGltZShkdXJhdGlvbiwgcHJl
c2VudGF0aW9uVGltZS50aW1lU2NhbGUoKSksIE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2UgeyBtZXRh
ZGF0YS5wb3NpdGlvbiwgbWV0YWRhdGEuc2l6ZSB9LCBpc0tleSA/IE1lZGlhU2FtcGxlOjpTYW1w
bGVGbGFnczo6SXNTeW5jIDogTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpOb25lIH0pOworICAg
IGVsc2UKKyAgICAgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5hcHBlbmQoeyBwcmVzZW50YXRp
b25UaW1lLCBwcmVzZW50YXRpb25UaW1lLCBNZWRpYVRpbWUoZHVyYXRpb24sIHByZXNlbnRhdGlv
blRpbWUudGltZVNjYWxlKCkpLCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIucmVsZWFzZU5vbk51bGwo
KSwgaXNLZXkgPyBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyA6IE1lZGlhU2FtcGxl
OjpTYW1wbGVGbGFnczo6Tm9uZSB9KTsKIAotICAgIGlmICghaXNLZXkpIHsKLSAgICAgICAgZm9y
IChDRkluZGV4IGkgPSAwLCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5
KTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYg
YXR0YWNobWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZB
cnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKSk7Ci0gICAgICAgICAgICBD
RkRpY3Rpb25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywgUEFMOjprQ01TYW1wbGVBdHRhY2htZW50
S2V5X05vdFN5bmMsIGtDRkJvb2xlYW5UcnVlKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBkcmFp
blBlbmRpbmdTYW1wbGVzKCk7CiAKLSAgICBhdXRvIHRyYWNrSUQgPSB0cmFjay50cmFja191aWQu
dmFsdWUoKTsKLSAgICBwYXJzZXIoKS5wcm92aWRlTWVkaWFEYXRhKFdURk1vdmUoc2FtcGxlQnVm
ZmVyKSwgdHJhY2tJRCwgbWV0YWRhdGEucG9zaXRpb24pOworICAgIEFTU0VSVCghKmJ5dGVzUmVt
YWluaW5nKTsKKyAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rQ29tcGxl
dGVkKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHByZXNlbnRhdGlvblRpbWUpOwogICAgIFVO
VVNFRF9QQVJBTShzYW1wbGVDb3VudCk7CiAgICAgVU5VU0VEX1BBUkFNKG1ldGFkYXRhKTsKLSNl
bmRpZiAvLyBFTkFCTEUoVlA5KQorICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWlu
aW5nKTsKKyNlbmRpZgogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJh
Y2tEYXRhOjpyZXNldENvbXBsZXRlZCgpCit2b2lkIFdlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRh
OjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkKIHsKICAgICBtTnVtRnJhbWVzSW5Db21wbGV0
ZUJsb2NrID0gMDsKLSAgICBtX3BhY2tldFNpemVzLmNsZWFyKCk7Ci0gICAgbV9wYWNrZXRUaW1p
bmdzLmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCA9IDA7Ci0gICAgVHJh
Y2tEYXRhOjpyZXNldENvbXBsZXRlZCgpOworICAgIFRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRG
cmFtZXNTdGF0ZSgpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNv
bnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNv
bnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50KQord2VibTo6U3Rh
dHVzIFdlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJl
YWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5
dGVzUmVtYWluaW5nLCBjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCkKIHsK
LSAgICBpZiAobV9wYWNrZXRUaW1pbmdzLnNpemUoKSkgewotICAgICAgICBhdXRvJiBsYXN0VGlt
aW5nID0gbV9wYWNrZXRUaW1pbmdzLmxhc3QoKTsKLSAgICAgICAgaWYgKFBBTDo6Q01UaW1lQ29t
cGFyZShQQUw6OkNNVGltZUFkZChsYXN0VGltaW5nLmR1cmF0aW9uLCBsYXN0VGltaW5nLnByZXNl
bnRhdGlvblRpbWVTdGFtcCksIHByZXNlbnRhdGlvblRpbWUpKSB7Ci0gICAgICAgICAgICAvLyBE
aXNjb250aW51aXR5IGVuY291bnRlcmVkLCBlbWl0IHRoZSBwcmV2aW91c2x5IGRlbXV4ZWQgc2Ft
cGxlcy4KLSAgICAgICAgICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihtZXRhZGF0YS5wb3NpdGlvbik7
Ci0gICAgICAgICAgICByZXNldCgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgYXV0byBzdGF0
dXMgPSByZWFkRnJhbWVEYXRhKHJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5nKTsKICAg
ICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKICAgICAgICAgcmV0dXJuIHN0YXR1czsKIAot
ICAgIC8vIEF0dGVtcHRzIHRvIG1pbmltaXNlIHRoZSBhbW91bnQgb2YgbWVtb3J5IGFsbG9jYXRp
b25zIGR1ZSB0byByZXBldGl0dmUgQ01CbG9ja0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZSBj
YWxscyBpbiByZWFkRnJhbWVEYXRhLgotICAgIG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2srKzsK
LSAgICBpZiAobU51bUZyYW1lc0luQ29tcGxldGVCbG9jayA+IG1NYXhCbG9ja0J1ZmZlckNhcGFj
aXR5KQotICAgICAgICBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0eSA9IG1OdW1GcmFtZXNJbkNvbXBs
ZXRlQmxvY2s7Ci0KLSAgICBpZiAobV9wYWNrZXRTaXplcy5pc0VtcHR5KCkpCi0gICAgICAgIG1f
c2FtcGxlUHJlc2VudGF0aW9uVGltZSA9IHByZXNlbnRhdGlvblRpbWU7Ci0KICAgICBpZiAoIWZv
cm1hdERlc2NyaXB0aW9uKCkpIHsKICAgICAgICAgaWYgKCF0cmFjaygpLmNvZGVjX3ByaXZhdGUu
aXNfcHJlc2VudCgpKSB7CiAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxF
KCJBdWRpbyB0cmFjayBtaXNzaW5nIG1hZ2ljIGNvb2tpZSIpOwogICAgICAgICAgICAgcmV0dXJu
IFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgICAgICB9CiAKLSAgICAgICAgUmV0
YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOworICAgICAg
ICBSZWZQdHI8QXVkaW9JbmZvPiBmb3JtYXREZXNjcmlwdGlvbjsKICAgICAgICAgYXV0byYgcHJp
dmF0ZURhdGEgPSB0cmFjaygpLmNvZGVjX3ByaXZhdGUudmFsdWUoKTsKICAgICAgICAgaWYgKGNv
ZGVjKCkgPT0gQ29kZWNUeXBlOjpWb3JiaXMpCi0gICAgICAgICAgICBmb3JtYXREZXNjcmlwdGlv
biA9IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24ocHJpdmF0ZURhdGEuc2l6ZSgp
LCBwcml2YXRlRGF0YS5kYXRhKCkpOworICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBj
cmVhdGVWb3JiaXNBdWRpb0luZm8ocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRh
KCkpOwogICAgICAgICBlbHNlIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6T3B1cykgewotICAg
ICAgICAgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tC
dWZmZXIobV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCwgKm1fY29tcGxldGVQYWNrZXRTaXplKTsK
KyAgICAgICAgICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJs
b2NrQnVmZmVyKDAsIGtPcHVzTWluaW11bUZyYW1lRGF0YVNpemUpOwogICAgICAgICAgICAgaWYg
KCFjb250aWd1b3VzQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9J
Rl9QT1NTSUJMRSgiQXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGE6IHVuYWJsZSB0byBj
cmVhdGUgY29udGlndW91cyBkYXRhIGJsb2NrIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNr
aXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
dWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGF1dG8gZXJy
ID0gUEFMOjpDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIoY29udGlndW91c0J1ZmZlci5nZXQo
KSwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJEYXRhKTsKLSAgICAg
ICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIgZmFpbGVkIHdpdGggZXJyb3IiLCBl
cnIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5n
KTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIE9wdXNDb29raWVDb250ZW50cyBjb29raWVD
b250ZW50czsKLSAgICAgICAgICAgIGlmICghcGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURh
dGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCksICptX2NvbXBsZXRlUGFja2V0U2l6ZSwgYmxv
Y2tCdWZmZXJEYXRhLCBjb29raWVDb250ZW50cykpIHsKKyAgICAgICAgICAgIGlmICghcGFyc2VP
cHVzUHJpdmF0ZURhdGEocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCksIGNv
bnRpZ3VvdXNCdWZmZXItPnNpemUoKSwgY29udGlndW91c0J1ZmZlci0+ZGF0YSgpLCBjb29raWVD
b250ZW50cykpIHsKICAgICAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxF
KCJGYWlsZWQgdG8gcGFyc2UgT3B1cyBwcml2YXRlIGRhdGEiKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAgICAgICB9CkBAIC0x
NDMzLDQwICsxMTQ3LDI5IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpB
dWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBtX2ZyYW1lc1BlclBhY2tldCA9IGNvb2tpZUNvbnRlbnRzLmZyYW1lc1Bl
clBhY2tldDsKICAgICAgICAgICAgIG1fZnJhbWVEdXJhdGlvbiA9IGNvb2tpZUNvbnRlbnRzLmZy
YW1lRHVyYXRpb247Ci0gICAgICAgICAgICBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZU9wdXNB
dWRpb0Zvcm1hdERlc2NyaXB0aW9uKGNvb2tpZUNvbnRlbnRzKTsKKyAgICAgICAgICAgIGZvcm1h
dERlc2NyaXB0aW9uID0gY3JlYXRlT3B1c0F1ZGlvSW5mbyhjb29raWVDb250ZW50cyk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICBQ
QVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJGYWlsZWQgdG8gY3JlYXRlIGZvcm1hdCBkZXNj
cmlwdGlvbiBmcm9tIGF1ZGlvIHRyYWNrIGhlYWRlciIpOworICAgICAgICAgICAgUEFSU0VSX0xP
R19FUlJPUl9JRl9QT1NTSUJMRSgiRmFpbGVkIHRvIGNyZWF0ZSBBdWRpb0luZm8gZnJvbSBhdWRp
byB0cmFjayBoZWFkZXIiKTsKICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVz
UmVtYWluaW5nKTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gc3RyZWFtRGVzY3JpcHRpb24g
PSBQQUw6OkNNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRpb24o
Zm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkpOwotICAgICAgICBpZiAoIXN0cmVhbURlc2NyaXB0aW9u
KSB7Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUF1ZGlvRm9y
bWF0RGVzY3JpcHRpb25HZXRTdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGZhaWxlZCIpOwotICAgICAg
ICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICB9Ci0g
ICAgICAgIG1fcGFja2V0RHVyYXRpb24gPSBQQUw6OkNNVGltZU1ha2Uoc3RyZWFtRGVzY3JpcHRp
b24tPm1GcmFtZXNQZXJQYWNrZXQsIHN0cmVhbURlc2NyaXB0aW9uLT5tU2FtcGxlUmF0ZSk7Cisg
ICAgICAgIG1fcGFja2V0RHVyYXRpb24gPSBNZWRpYVRpbWUoZm9ybWF0RGVzY3JpcHRpb24tPmZy
YW1lc1BlclBhY2tldCwgZm9ybWF0RGVzY3JpcHRpb24tPnJhdGUpOwogCi0gICAgICAgIHNldEZv
cm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRpb24pKTsKKyAgICAgICAgc2V0
Rm9ybWF0RGVzY3JpcHRpb24oZm9ybWF0RGVzY3JpcHRpb24ucmVsZWFzZU5vbk51bGwoKSk7CiAg
ICAgfSBlbHNlIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6T3B1cykgewogICAgICAgICAvLyBP
cHVzIHRlY2huaWNhbGx5IGFsbG93cyB0aGUgZnJhbWUgZHVyYXRpb24gYW5kIGZyYW1lcy1wZXIt
cGFja2V0IHZhbHVlcyB0byBjaGFuZ2UgZnJvbSBwYWNrZXQgdG8gcGFja2V0LgogICAgICAgICAv
LyBDb3JlQXVkaW8gZG9lc24ndCBzdXBwb3J0IEFTQkQgdmFsdWVzIGxpa2UgdGhlc2UgdG8gY2hh
bmdlIG9uIGEgcGVyLXBhY2tldCBiYXNpcywgc28gdGhyb3cgYW4gZXJyb3Igd2hlbgogICAgICAg
ICAvLyB0aGF0IGtpbmQgb2YgdmFyaWFiaWxpdHkgaXMgZW5jb3VudGVyZWQuCiAgICAgICAgIE9w
dXNDb29raWVDb250ZW50cyBjb29raWVDb250ZW50czsKICAgICAgICAgYXV0byYgcHJpdmF0ZURh
dGEgPSB0cmFjaygpLmNvZGVjX3ByaXZhdGUudmFsdWUoKTsKLSAgICAgICAgYXV0byBjb250aWd1
b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIobV9jdXJyZW50UGFja2V0
Qnl0ZU9mZnNldCwgKm1fY29tcGxldGVQYWNrZXRTaXplKTsKKyAgICAgICAgYXV0byBjb250aWd1
b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoMCwga09wdXNNaW5pbXVt
RnJhbWVEYXRhU2l6ZSk7CiAgICAgICAgIGlmICghY29udGlndW91c0J1ZmZlcikgewogICAgICAg
ICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQXVkaW9UcmFja0RhdGE6OmNvbnN1
bWVGcmFtZURhdGE6IHVuYWJsZSB0byBjcmVhdGUgY29udGlndW91cyBkYXRhIGJsb2NrIik7CiAg
ICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAg
IH0KLSAgICAgICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsKLSAgICAgICAg
YXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihjb250aWd1b3VzQnVm
ZmVyLmdldCgpLCAwLCBudWxscHRyLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEp
OwotICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIgZmFpbGVkIHdpdGggZXJyb3IiLCBl
cnIpOwotICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICghcGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURhdGEu
c2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCksICptX2NvbXBsZXRlUGFja2V0U2l6ZSwgYmxvY2tC
dWZmZXJEYXRhLCBjb29raWVDb250ZW50cykKKyAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRl
RGF0YShwcml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSwgY29udGlndW91c0J1
ZmZlci0+c2l6ZSgpLCBjb250aWd1b3VzQnVmZmVyLT5kYXRhKCksIGNvb2tpZUNvbnRlbnRzKQog
ICAgICAgICAgICAgfHwgY29va2llQ29udGVudHMuZnJhbWVzUGVyUGFja2V0ICE9IG1fZnJhbWVz
UGVyUGFja2V0CiAgICAgICAgICAgICB8fCBjb29raWVDb250ZW50cy5mcmFtZUR1cmF0aW9uICE9
IG1fZnJhbWVEdXJhdGlvbikgewogICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NT
SUJMRSgiT3B1cyBmcmFtZXMtcGVyLXBhY2tldCBjaGFuZ2VkIHdpdGhpbiBhIHRyYWNrOyBlcnJv
ciIpOwpAQCAtMTQ3NCw2MyArMTE3NywyOTQgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAg
ICAgICAgfQogICAgIH0KIAotICAgIG1fcGFja2V0U2l6ZXMuYXBwZW5kKCptX2NvbXBsZXRlUGFj
a2V0U2l6ZSk7Ci0gICAgbV9wYWNrZXRUaW1pbmdzLmFwcGVuZCh7IG1fcGFja2V0RHVyYXRpb24s
IHByZXNlbnRhdGlvblRpbWUsIFBBTDo6a0NNVGltZUludmFsaWQgfSk7Ci0gICAgbV9jdXJyZW50
UGFja2V0Qnl0ZU9mZnNldCArPSAqbV9jb21wbGV0ZVBhY2tldFNpemU7Ci0gICAgbV9jb21wbGV0
ZVBhY2tldFNpemUgPSBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFtX2NvbXBsZXRlTWVkaWFTYW1w
bGVzLmluZm8oKSkKKyAgICAgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5zZXRJbmZvKGZvcm1h
dERlc2NyaXB0aW9uKCkpOworICAgIGVsc2UgaWYgKGZvcm1hdERlc2NyaXB0aW9uKCkgJiYgKmZv
cm1hdERlc2NyaXB0aW9uKCkgIT0gKm1fY29tcGxldGVNZWRpYVNhbXBsZXMuaW5mbygpKQorICAg
ICAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7CiAKLSAgICBhdXRvIHNhbXBsZUR1cmF0aW9uID0g
UEFMOjpDTVRpbWVHZXRTZWNvbmRzKFBBTDo6Q01UaW1lU3VidHJhY3QocHJlc2VudGF0aW9uVGlt
ZSwgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1lKSkgKyBQQUw6OkNNVGltZUdldFNlY29uZHMobV9w
YWNrZXREdXJhdGlvbikgKiBzYW1wbGVDb3VudDsKKyAgICBpZiAobV91c2VCeXRlUmFuZ2UpCisg
ICAgICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMuYXBwZW5kKHsgcHJlc2VudGF0aW9uVGltZSwg
TWVkaWFUaW1lOjppbnZhbGlkVGltZSgpLCBtX3BhY2tldER1cmF0aW9uLCBNZWRpYVNhbXBsZTo6
Qnl0ZVJhbmdlIHsgbWV0YWRhdGEucG9zaXRpb24sIG1ldGFkYXRhLnNpemUgfSwgTWVkaWFTYW1w
bGU6OlNhbXBsZUZsYWdzOjpJc1N5bmMgfSk7CisgICAgZWxzZQorICAgICAgICBtX2NvbXBsZXRl
TWVkaWFTYW1wbGVzLmFwcGVuZCh7IHByZXNlbnRhdGlvblRpbWUsIE1lZGlhVGltZTo6aW52YWxp
ZFRpbWUoKSwgbV9wYWNrZXREdXJhdGlvbiwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLnJlbGVhc2VO
b25OdWxsKCksIE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jIH0pOwogCi0gICAgaWYg
KHNhbXBsZUR1cmF0aW9uID49IG1fbWluaW11bVNhbXBsZUR1cmF0aW9uKSB7Ci0gICAgICAgIGNy
ZWF0ZVNhbXBsZUJ1ZmZlcihtZXRhZGF0YS5wb3NpdGlvbik7Ci0gICAgICAgIHJlc2V0KCk7Ci0g
ICAgfQorICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKIAogICAgIEFTU0VSVCghKmJ5dGVzUmVt
YWluaW5nKTsKICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rQ29tcGxl
dGVkKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6
Y3JlYXRlU2FtcGxlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFuZ2VP
ZmZzZXQpCisKK2Jvb2wgV2ViTVBhcnNlcjo6aXNTdXBwb3J0ZWRWaWRlb0NvZGVjKFN0cmluZ1Zp
ZXcgbmFtZSkKK3sKKyAgICByZXR1cm4gbmFtZSA9PSAiVl9WUDgiIHx8IG5hbWUgPT0gIlZfVlA5
IjsKK30KKworYm9vbCBXZWJNUGFyc2VyOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMoU3RyaW5nVmll
dyBuYW1lKQoreworICAgIHJldHVybiBuYW1lID09ICJBX1ZPUkJJUyIgfHwgbmFtZSA9PSAiQV9P
UFVTIjsKK30KKworU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFyc2VyV2Vi
TSgpCisgICAgOiBtX3BhcnNlcigqdGhpcykKK3sKK30KKworYm9vbCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjppc1dlYk1Gb3JtYXRSZWFkZXJBdmFpbGFibGUoKQoreworICAgIHJldHVybiBQbGF0
Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OndlYk1Gb3JtYXRSZWFkZXJFbmFibGVkKCkgJiYgY2Fu
TG9hZEZvcm1hdFJlYWRlcigpICYmIGlzV2VibVBhcnNlckF2YWlsYWJsZSgpOworfQorCitNZWRp
YVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGUgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNDb250
ZW50VHlwZVN1cHBvcnRlZChjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKK3sKKyNpZiBFTkFCTEUo
VlA5KSB8fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykKKyAgICBpZiAoIWlzV2VibVBh
cnNlckF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9y
dHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgIGF1dG8gY29udGFpbmVyVHlwZSA9IHR5cGUu
Y29udGFpbmVyVHlwZSgpOworICAgIGJvb2wgaXNBdWRpb0NvbnRhaW5lclR5cGUgPSBlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGNvbnRhaW5lclR5cGUsICJhdWRpby93ZWJtIik7CisgICAgYm9vbCBp
c1ZpZGVvQ29udGFpbmVyVHlwZSA9IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29udGFpbmVyVHlw
ZSwgInZpZGVvL3dlYm0iKTsKKyAgICBpZiAoIWlzQXVkaW9Db250YWluZXJUeXBlICYmICFpc1Zp
ZGVvQ29udGFpbmVyVHlwZSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBv
cnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBib29sIGlzQW55QXVkaW9Db2RlY0F2YWls
YWJsZSA9IGZhbHNlOworI2lmIEVOQUJMRShWT1JCSVMpCisgICAgaXNBbnlBdWRpb0NvZGVjQXZh
aWxhYmxlIHw9IGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpOworI2VuZGlmCisjaWYgRU5BQkxF
KE9QVVMpCisgICAgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlIHw9IGlzT3B1c0RlY29kZXJBdmFp
bGFibGUoKTsKKyNlbmRpZgorCisgICAgaWYgKGlzQXVkaW9Db250YWluZXJUeXBlICYmICFpc0Fu
eUF1ZGlvQ29kZWNBdmFpbGFibGUpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpT
dXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgYm9vbCBpc0FueUNvZGVjQXZhaWxh
YmxlID0gaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlOworI2lmIEVOQUJMRShWUDkpCisgICAgaXNB
bnlDb2RlY0F2YWlsYWJsZSB8PSBpc1ZQOURlY29kZXJBdmFpbGFibGUoKTsKKyNlbmRpZgorCisg
ICAgaWYgKCFpc0FueUNvZGVjQXZhaWxhYmxlKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJF
bnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgIGF1dG8gY29kZWNzID0g
dHlwZS5jb2RlY3MoKTsKKyAgICBpZiAoY29kZWNzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6TWF5QmVTdXBwb3J0ZWQ7CisKKyAgICBm
b3IgKGF1dG8mIGNvZGVjIDogY29kZWNzKSB7CisjaWYgRU5BQkxFKFZQOSkKKyAgICAgICAgaWYg
KGNvZGVjLnN0YXJ0c1dpdGgoInZwMDkiKSB8fCBjb2RlYy5zdGFydHNXaXRoKCJ2cDA4IikgfHwg
ZXF1YWwoY29kZWMsICJ2cDgiKSB8fCBlcXVhbChjb2RlYywgInZwOSIpKSB7CisKKyAgICAgICAg
ICAgIGlmICghaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAg
ICAgICAgIGF1dG8gY29kZWNQYXJhbWV0ZXJzID0gcGFyc2VWUENvZGVjUGFyYW1ldGVycyhjb2Rl
Yyk7CisgICAgICAgICAgICBpZiAoIWNvZGVjUGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKwor
ICAgICAgICAgICAgaWYgKCFpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKCpj
b2RlY1BhcmFtZXRlcnMpKQorICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1z
OjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShWUDkpCisKKyNpZiBFTkFCTEUoVk9SQklTKQor
ICAgICAgICBpZiAoY29kZWMgPT0gInZvcmJpcyIpIHsKKyAgICAgICAgICAgIGlmICghaXNWb3Ji
aXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVy
RW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKKworI2lmIEVOQUJMRShP
UFVTKQorICAgICAgICBpZiAoY29kZWMgPT0gIm9wdXMiKSB7CisgICAgICAgICAgICBpZiAoIWlz
T3B1c0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5
ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoT1BVUykKKworICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKyAgICB9
CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc1N1cHBvcnRl
ZDsKKworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisKKyAgICByZXR1cm4gTWVkaWFQ
bGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKyNlbmRpZiAvLyBFTkFC
TEUoVlA5KSB8fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykKK30KKworUmVmUHRyPFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZShjb25z
dCBDb250ZW50VHlwZSYgdHlwZSkKK3sKKyAgICBpZiAoaXNDb250ZW50VHlwZVN1cHBvcnRlZCh0
eXBlKSAhPSBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkKQor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKSk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViTVBhcnNlcjo6cHJvdmlkZU1lZGlhRGF0
YShNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZXMpCit7CisgICAgbV9jYWxsYmFjay5wYXJzZWRN
ZWRpYURhdGEoV1RGTW92ZShzYW1wbGVzKSk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6cGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKEluaXRpYWxpemF0aW9uU2VnbWVudCYmIGlu
aXRpYWxpemF0aW9uU2VnbWVudCkKK3sKKyAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNr
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgaW5pdGlhbGl6YXRpb25TZWdt
ZW50ID0gV1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpXSgpIG11dGFibGUgeworICAgICAg
ICBpZiAobV9kaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNrKQorICAgICAgICAgICAg
bV9kaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNrKFdURk1vdmUoaW5pdGlhbGl6YXRp
b25TZWdtZW50KSk7CisgICAgfSk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
cGFyc2VkTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlc0Jsb2NrKQogewotICAg
IGlmIChtX3BhY2tldFNpemVzLmlzRW1wdHkoKSkKKyAgICBpZiAoIXNhbXBsZXNCbG9jay5pbmZv
KCkpIHsKKyAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJObyBU
cmFja0luZm8gc2V0Iik7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBDTVNhbXBsZUJ1
ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOwotICAgIGF1dG8gZXJyID0gUEFMOjpD
TVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1fY29tcGxldGVC
bG9ja0J1ZmZlci5nZXQoKSwgZm9ybWF0RGVzY3JpcHRpb24oKS5nZXQoKSwgbV9wYWNrZXRTaXpl
cy5zaXplKCksIG1fcGFja2V0VGltaW5ncy5zaXplKCksIG1fcGFja2V0VGltaW5ncy5kYXRhKCks
IG1fcGFja2V0U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFNpemVzLmRhdGEoKSwgJnJhd1NhbXBsZUJ1
ZmZlcik7Ci0gICAgaWYgKGVycikgewotICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJ
QkxFKCJDTUF1ZGlvU2FtcGxlQnVmZmVyQ3JlYXRlV2l0aFBhY2tldERlc2NyaXB0aW9ucyBmYWls
ZWQgd2l0aCAlZCIsIGVycik7CisgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+
IGZvcm1hdERlc2NyaXB0aW9uOworICAgIGlmIChzYW1wbGVzQmxvY2suaXNWaWRlbygpKSB7Cisg
ICAgICAgIGlmIChtX3ZpZGVvSW5mbyAhPSBzYW1wbGVzQmxvY2suaW5mbygpKSB7CisgICAgICAg
ICAgICBtX3ZpZGVvSW5mbyA9IHNhbXBsZXNCbG9jay5pbmZvKCk7CisgICAgICAgICAgICBtX3Zp
ZGVvRm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0lu
Zm8oKnNhbXBsZXNCbG9jay5pbmZvKCkpOworICAgICAgICB9CisgICAgICAgIGZvcm1hdERlc2Ny
aXB0aW9uID0gbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uOworICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChtX2F1ZGlvSW5mbyAhPSBzYW1wbGVzQmxvY2suaW5mbygpKSB7CisgICAgICAgICAgICBm
bHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoKTsKKyAgICAgICAgICAgIG1fYXVkaW9Gb3JtYXREZXNj
cmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRyYWNrSW5mbygqc2FtcGxlc0Js
b2NrLmluZm8oKSk7CisgICAgICAgICAgICBtX2F1ZGlvSW5mbyA9IHNhbXBsZXNCbG9jay5pbmZv
KCk7CisgICAgICAgIH0KKyAgICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBtX2F1ZGlvRm9ybWF0
RGVzY3JpcHRpb247CisgICAgfQorCisgICAgaWYgKHNhbXBsZXNCbG9jay5pc1ZpZGVvKCkpIHsK
KyAgICAgICAgcmV0dXJuU2FtcGxlcyhXVEZNb3ZlKHNhbXBsZXNCbG9jayksIG1fdmlkZW9Gb3Jt
YXREZXNjcmlwdGlvbi5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYXV0byBz
YW1wbGVCdWZmZXIgPSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlcik7CiAKLSAgICBhdXRvIHRyYWNr
SUQgPSB0cmFjaygpLnRyYWNrX3VpZC52YWx1ZSgpOwotICAgIHBhcnNlcigpLnByb3ZpZGVNZWRp
YURhdGEoV1RGTW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lELCBsYXRlc3RCeXRlUmFuZ2VPZmZz
ZXQpOworICAgIC8vIFBhY2sgYXVkaW8gaWYgbmVlZGVkLgorICAgIGlmIChtX3F1ZXVlZEF1ZGlv
U2FtcGxlcy5zaXplKCkpIHsKKyAgICAgICAgYXV0byYgbGFzdFNhbXBsZSA9IG1fcXVldWVkQXVk
aW9TYW1wbGVzLmxhc3QoKTsKKyAgICAgICAgaWYgKGxhc3RTYW1wbGUuZHVyYXRpb24gKyBsYXN0
U2FtcGxlLnByZXNlbnRhdGlvblRpbWUgIT0gc2FtcGxlc0Jsb2NrLmZpcnN0KCkucHJlc2VudGF0
aW9uVGltZSkKKyAgICAgICAgICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOworICAgIH0K
KyAgICBmb3IgKGF1dG8mIHNhbXBsZSA6IHNhbXBsZXNCbG9jaykKKyAgICAgICAgbV9xdWV1ZWRB
dWRpb0R1cmF0aW9uICs9IHNhbXBsZS5kdXJhdGlvbjsKKyAgICBtX3F1ZXVlZEF1ZGlvU2FtcGxl
cy5hcHBlbmQoV1RGTW92ZShzYW1wbGVzQmxvY2spKTsKKyAgICBpZiAobV9xdWV1ZWRBdWRpb0R1
cmF0aW9uIDwgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbikKKyAgICAgICAgcmV0dXJuOwor
ICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpCit2b2lkIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OnJldHVyblNhbXBsZXMoTWVkaWFTYW1wbGVzQmxvY2smJiBibG9jaywgQ01Gb3Jt
YXREZXNjcmlwdGlvblJlZiBkZXNjcmlwdGlvbikKIHsKLSAgICBmb3IgKGF1dG8mIHRyYWNrIDog
bV90cmFja3MpIHsKLSAgICAgICAgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlvKSB7Ci0gICAgICAgICAgICBBdWRp
b1RyYWNrRGF0YSYgYXVkaW9UcmFjayA9IGRvd25jYXN0PEF1ZGlvVHJhY2tEYXRhPih0cmFjay5n
ZXQoKSk7Ci0gICAgICAgICAgICBhdWRpb1RyYWNrLmNyZWF0ZVNhbXBsZUJ1ZmZlcigpOwotICAg
ICAgICAgICAgYXVkaW9UcmFjay5yZXNldENvbXBsZXRlZCgpOwotICAgICAgICB9CisgICAgaWYg
KGJsb2NrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBleHBlY3RlZEJ1
ZmZlciA9IHRvQ01TYW1wbGVCdWZmZXIoV1RGTW92ZShibG9jayksIGRlc2NyaXB0aW9uKTsKKyAg
ICBpZiAoIWV4cGVjdGVkQnVmZmVyKSB7CisgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShM
T0dJREVOVElGSUVSLCAidG9DTVNhbXBsZUJ1ZmZlciBlcnJvcjoiLCBleHBlY3RlZEJ1ZmZlci5l
cnJvcigpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBtX2NhbGxPbkNs
aWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwg
dHJhY2tJRCA9IGJsb2NrLmluZm8oKS0+dHJhY2tJRCwgc2FtcGxlQnVmZmVyID0gV1RGTW92ZShl
eHBlY3RlZEJ1ZmZlci52YWx1ZSgpKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9kaWRQ
cm92aWRlTWVkaWFEYXRhQ2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
YXV0byBtZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZl
ci5nZXQoKSwgdHJhY2tJRCk7CisKKyAgICAgICAgbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJh
Y2soV1RGTW92ZShtZWRpYVNhbXBsZSksIHRyYWNrSUQsIGVtcHR5U3RyaW5nKCkpOworICAgIH0p
OwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldE1pbmltdW1BdWRpb1NhbXBs
ZUR1cmF0aW9uKGZsb2F0IGR1cmF0aW9uKQordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpw
YXJzZWRUcmltbWluZ0RhdGEodWludDY0X3QgdHJhY2tJRCwgY29uc3QgTWVkaWFUaW1lJiBwYWRk
aW5nKQogewotICAgIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24gPSBkdXJhdGlvbjsKKyAg
ICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVm
IHsgKnRoaXMgfSwgdHJhY2tJRCwgcGFkZGluZ10gKCkgeworICAgICAgICBpZiAobV9kaWRQYXJz
ZVRyaW1taW5nRGF0YUNhbGxiYWNrKQorICAgICAgICAgICAgbV9kaWRQYXJzZVRyaW1taW5nRGF0
YUNhbGxiYWNrKHRyYWNrSUQsIHBhZGRpbmcpOworICAgIH0pOwogfQogCi1ib29sIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyhTdHJpbmdWaWV3IG5hbWUpCit2
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRp
b25EYXRhRm9yVHJhY2tJRChSZWY8U2hhcmVkQnVmZmVyPiYmIGtleUlELCB1aW50NjRfdCB0cmFj
a0lEKQogewotICAgIHJldHVybiBuYW1lID09ICJWX1ZQOCIgfHwgbmFtZSA9PSAiVl9WUDkiOwor
ICAgIGlmIChtX2RpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZv
clRyYWNrSURDYWxsYmFjaykKKyAgICAgICAgbV9kaWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJ
bml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2soV1RGTW92ZShrZXlJRCksIHRyYWNr
SUQpOwogfQogCi1ib29sIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzU3VwcG9ydGVkQXVkaW9D
b2RlYyhTdHJpbmdWaWV3IG5hbWUpCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNo
UGVuZGluZ0F1ZGlvU2FtcGxlcygpCiB7Ci0gICAgcmV0dXJuIG5hbWUgPT0gIkFfVk9SQklTIiB8
fCBuYW1lID09ICJBX09QVVMiOworICAgIGlmICghbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uKQor
ICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fYXVkaW9JbmZvKTsKKyAgICBtX3F1ZXVlZEF1
ZGlvU2FtcGxlcy5zZXRJbmZvKG1fYXVkaW9JbmZvLmNvcHlSZWYoKSk7CisgICAgcmV0dXJuU2Ft
cGxlcyhXVEZNb3ZlKG1fcXVldWVkQXVkaW9TYW1wbGVzKSwgbV9hdWRpb0Zvcm1hdERlc2NyaXB0
aW9uLmdldCgpKTsKKworICAgIG1fcXVldWVkQXVkaW9TYW1wbGVzID0geyB9OworICAgIG1fcXVl
dWVkQXVkaW9EdXJhdGlvbiA9IHsgfTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjphcHBlbmREYXRhKFNlZ21lbnQmJiBzZWdtZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIsIEFwcGVuZEZsYWdzIGFwcGVuZEZsYWdzKQoreworICAgIElO
Rk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJmbGFncygiLCBhcHBlbmRGbGFncyA9
PSBBcHBlbmRGbGFnczo6RGlzY29udGludWl0eSA/ICJEaXNjb250aW51aXR5IiA6ICIiLCAiKSwg
c2l6ZSgiLCBzZWdtZW50LnNpemUoKSwgIikiKTsKKworICAgIGlmIChhcHBlbmRGbGFncyA9PSBB
cHBlbmRGbGFnczo6RGlzY29udGludWl0eSkKKyAgICAgICAgbV9wYXJzZXIucmVzZXQoKTsKKwor
ICAgIGF1dG8gcmVzdWx0ID0gbV9wYXJzZXIucGFyc2UoV1RGTW92ZShzZWdtZW50KSk7CisgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHJlc3VsdC5yZXR1cm5WYWx1ZSgp
KSB7CisgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAic3RhdHVz
LmNvZGUoIiwgcmVzdWx0LnJldHVyblZhbHVlKCksICIpIik7CisKKyAgICAgICAgbV9jYWxsT25D
bGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0s
IGNvZGUgPSByZXN1bHQucmV0dXJuVmFsdWUoKV0geworICAgICAgICAgICAgaWYgKG1fZGlkRW5j
b3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2spCisgICAgICAgICAgICAgICAgbV9kaWRF
bmNvdW50ZXJFcnJvckR1cmluZ1BhcnNpbmdDYWxsYmFjayhjb2RlKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgLy8gQXVkaW8gdHJhY2tzIGFyZSBncm91cGVkIGludG8gbWV0YS1zYW1wbGVz
IG9mIGEgZHVyYXRpb24gbm8gbW9yZSB0aGFuIG1fbWluaW11bVNhbXBsZUR1cmF0aW9uLgorICAg
IC8vIEJ1dCBhdCB0aGUgZW5kIG9mIGEgZmlsZSwgbm8gbW9yZSBhdWRpbyBkYXRhIG1heSBiZSBp
bmNvbWluZywgc28gZmx1c2ggYW5kIGVtaXQgYW55IHBlbmRpbmcKKyAgICAvLyBhdWRpbyBidWZm
ZXJzLgorICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOworCisgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdN
ZWRpYURhdGEoKQoreworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldFNob3Vs
ZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEKGJvb2wsIHVpbnQ2NF90KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJv
dmlkZU1lZGlhZGF0YUZvclRyYWNrSUQodWludDY0X3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
aW52YWxpZGF0ZSgpCit7CisgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7
CisgICAgbV9wYXJzZXIuaW52YWxpZGF0ZSgpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OnNldExvZ2dlcihjb25zdCBMb2dnZXImIGxvZ2dlciwgY29uc3Qgdm9pZCogbG9nSWRl
bnRpZmllcikKK3sKKyAgICBtX3BhcnNlci5zZXRMb2dnZXIobG9nZ2VyLCBsb2dJZGVudGlmaWVy
KTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRNaW5pbXVtQXVkaW9TYW1w
bGVEdXJhdGlvbihmbG9hdCBkdXJhdGlvbikKK3sKKyAgICBtX21pbmltdW1BdWRpb1NhbXBsZUR1
cmF0aW9uID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRmxvYXQoZHVyYXRpb24pOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VC
dWZmZXJQYXJzZXJXZWJNLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKaW5kZXggZTg3NmFiNDE0YTRhYmIzM2Q1MThjMzdi
NDFmZTVhMTQ3NzZhYjQ5Ni4uODdhOTQwM2E4ZjNmYzUwYjY4YWFkZTgxNTc5NWEyOTNmNTc3NjFh
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaApAQCAtMjcsMTkgKzI3LDIxIEBACiAK
ICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCisjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKKyNp
bmNsdWRlICJNZWRpYVNhbXBsZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1
ZGUgIlNvdXJjZUJ1ZmZlclBhcnNlci5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9U
eXBlcy5oPgotI2luY2x1ZGUgPENvcmVNZWRpYS9DTVRpbWUuaD4KICNpbmNsdWRlIDxwYWwvc3Bp
L2NmL0NvcmVNZWRpYVNQSS5oPgogI2luY2x1ZGUgPHZhcmlhbnQ+CiAjaW5jbHVkZSA8d2VibS9j
YWxsYmFjay5oPgogI2luY2x1ZGUgPHdlYm0vc3RhdHVzLmg+CiAjaW5jbHVkZSA8d2VibS92cDlf
aGVhZGVyX3BhcnNlci5oPgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KICNpbmNsdWRlIDx3
dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiB0eXBlZGVmIGNvbnN0
IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0aW9uUmVm
OwotdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ01CbG9ja0J1ZmZlciAqQ01CbG9ja0J1ZmZlclJlZjsK
IAogbmFtZXNwYWNlIHdlYm0gewogY2xhc3MgV2VibVBhcnNlcjsKQEAgLTQ3LDQyICs0OSwzNiBA
QCBjbGFzcyBXZWJtUGFyc2VyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk0gOiBwdWJsaWMgU291cmNlQnVmZmVyUGFyc2VyLCBwcml2YXRlIHdl
Ym06OkNhbGxiYWNrIHsKK2NsYXNzIFdlYk1QYXJzZXIgOiBwcml2YXRlIHdlYm06OkNhbGxiYWNr
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBjbGFzcyBTZWdt
ZW50UmVhZGVyOwotCi0gICAgc3RhdGljIGJvb2wgaXNXZWJNRm9ybWF0UmVhZGVyQXZhaWxhYmxl
KCk7Ci0gICAgc3RhdGljIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBpc0NvbnRlbnRU
eXBlU3VwcG9ydGVkKGNvbnN0IENvbnRlbnRUeXBlJik7Ci0gICAgc3RhdGljIFNwYW48Y29uc3Qg
QVNDSUlMaXRlcmFsPiBzdXBwb3J0ZWRNSU1FVHlwZXMoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IGNyZWF0ZShjb25zdCBDb250ZW50
VHlwZSYpOworICAgIGNsYXNzIENhbGxiYWNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1
YWwgdm9pZCBwYXJzZWRUcmltbWluZ0RhdGEodWludDY0X3QsIGNvbnN0IE1lZGlhVGltZSYpIHsg
fQorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFNvdXJjZUJ1
ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYpID0gMDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmKSA9IDA7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBjYW5EZWNyeXB0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJh
Y2tJRChSZWY8U2hhcmVkQnVmZmVyPiYmLCB1aW50NjRfdCkgeyB9CisgICAgICAgIHZpcnR1YWwg
fkNhbGxiYWNrKCkgPSBkZWZhdWx0OworICAgIH07CiAKLSAgICBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNKCk7Ci0gICAgflNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBXZWJNUGFyc2VyKENhbGxiYWNrJik7CisgICAgV0VCQ09SRV9FWFBPUlQgfldlYk1QYXJzZXIo
KTsKIAotICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisgICAgY2xhc3MgU2VnbWVudFJl
YWRlcjsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY3JlYXRlQnl0ZVJhbmdlU2FtcGxlcygp
OworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPGludD4gcGFyc2UoU291cmNlQnVmZmVy
UGFyc2VyOjpTZWdtZW50JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXRTdGF0ZSgp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGludmFsaWRhdGUoKTsKICAgICBjb25zdCB3ZWJtOjpTdGF0dXMmIHN0YXR1cygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAKLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBU
eXBlOjpXZWJNOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBlbmREYXRhKFNlZ21lbnQm
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0gW10geyB9LCBBcHBlbmRGbGFncyA9IEFw
cGVuZEZsYWdzOjpOb25lKSBmaW5hbDsKLSAgICB2b2lkIGZsdXNoUGVuZGluZ01lZGlhRGF0YSgp
IGZpbmFsOwotICAgIHZvaWQgc2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNrSUQoYm9v
bCwgdWludDY0X3QpIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRy
YWNrSUQodWludDY0X3QpIGZpbmFsOwotICAgIHZvaWQgcmVzZXRQYXJzZXJTdGF0ZSgpIGZpbmFs
OwotICAgIHZvaWQgaW52YWxpZGF0ZSgpIGZpbmFsOwotCi0gICAgdm9pZCBmbHVzaFBlbmRpbmdB
dWRpb0J1ZmZlcnMoKTsKLSAgICB2b2lkIHNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKGZs
b2F0KTsKLSAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvZ2dlcihjb25zdCBMb2dn
ZXImLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKSBmaW5hbDsKKyAgICB2b2lkIHByb3ZpZGVNZWRp
YURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJik7CiAKLSAgICB2b2lkIHByb3ZpZGVNZWRpYURhdGEo
UmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiwgdWludDY0X3QsIHN0ZDo6b3B0aW9uYWw8c2l6
ZV90PiBieXRlUmFuZ2VPZmZzZXQpOwotICAgIHVzaW5nIERpZFBhcnNlVHJpbW1pbmdEYXRhQ2Fs
bGJhY2sgPSBGdW5jdGlvbjx2b2lkKHVpbnQ2NF90IHRyYWNrSUQsIGNvbnN0IE1lZGlhVGltZSYg
ZGlzY2FyZFBhZGRpbmcpPjsKLSAgICB2b2lkIHNldERpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJh
Y2soRGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQotICAgIHsKLSAgICAg
ICAgbV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7Ci0g
ICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYsIGNv
bnN0IHZvaWQqIGlkZW50aWZpZXIpOworICAgIGNvbnN0IExvZ2dlciogbG9nZ2VyUHRyKCkgY29u
c3QgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlm
aWVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9CiAKICAgICBlbnVtIGNsYXNz
IEVycm9yQ29kZSA6IGludDMyX3QgewogICAgICAgICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNRXJy
b3JDb2RlU3RhcnQgPSAyMDAwLApAQCAtOTQsNiArOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIENv
bnRlbnRFbmNyeXB0ZWQsCiAgICAgICAgIFZhcmlhYmxlRnJhbWVEdXJhdGlvbiwKICAgICAgICAg
UmVhZGVyRmFpbGVkLAorICAgICAgICBQYXJzZXJTaHV0ZG93biwKICAgICB9OwogCiAgICAgZW51
bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgewpAQCAtMTIwLDE4ICsxMTcsMTIgQEAgcHVibGljOgog
ICAgIGNsYXNzIFRyYWNrRGF0YSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5
cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk0mIHBhcnNlcikgLT4gVW5pcXVlUmVmPFRyYWNrRGF0YT4KKyAgICAgICAgc3RhdGljIGF1
dG8gY3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRy
YWNrRW50cnksIFdlYk1QYXJzZXImIHBhcnNlcikgLT4gVW5pcXVlUmVmPFRyYWNrRGF0YT4KICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VHJhY2tEYXRhPihjb2Rl
Y1R5cGUsIHRyYWNrRW50cnksIFR5cGU6OlVua25vd24sIHBhcnNlcik7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZVJlZjxUcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHJh
Y2tJbmZvOjpUcmFja1R5cGU6OlVua25vd24sIHBhcnNlcik7CiAgICAgICAgIH0KIAotICAgICAg
ICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICAgICAgVW5rbm93biwKLSAgICAgICAgICAgIEF1
ZGlvLAotICAgICAgICAgICAgVmlkZW8sCi0gICAgICAgIH07Ci0KLSAgICAgICAgVHJhY2tEYXRh
KENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnks
IFR5cGUgdHJhY2tUeXBlLCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpCisgICAgICAg
IFRyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0
cmFja0VudHJ5LCBUcmFja0luZm86OlRyYWNrVHlwZSB0cmFja1R5cGUsIFdlYk1QYXJzZXImIHBh
cnNlcikKICAgICAgICAgICAgIDogbV9jb2RlYyB7IGNvZGVjVHlwZSB9CiAgICAgICAgICAgICAs
IG1fdHJhY2sgeyB3ZWJtOjpUcmFja0VudHJ5IHsgdHJhY2tFbnRyeSB9IH0KICAgICAgICAgICAg
ICwgbV90cmFja1R5cGUgeyB0cmFja1R5cGUgfQpAQCAtMTQyLDExMyArMTMzLDExNCBAQCBwdWJs
aWM6CiAKICAgICAgICAgQ29kZWNUeXBlIGNvZGVjKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlYzsg
fQogICAgICAgICB3ZWJtOjpUcmFja0VudHJ5JiB0cmFjaygpIHsgcmV0dXJuIG1fdHJhY2s7IH0K
LSAgICAgICAgVHlwZSB0cmFja1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrVHlwZTsgfQor
ICAgICAgICBUcmFja0luZm86OlRyYWNrVHlwZSB0cmFja1R5cGUoKSBjb25zdCB7IHJldHVybiBt
X3RyYWNrVHlwZTsgfQogCi0gICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVm
PiBmb3JtYXREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fZm9ybWF0RGVzY3JpcHRpb247IH0KLSAg
ICAgICAgdm9pZCBzZXRGb3JtYXREZXNjcmlwdGlvbihSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlw
dGlvblJlZj4mJiBkZXNjcmlwdGlvbikgeyBtX2Zvcm1hdERlc2NyaXB0aW9uID0gV1RGTW92ZShk
ZXNjcmlwdGlvbik7IH0KKyAgICAgICAgdm9pZCBjcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKCkgeyBt
X3VzZUJ5dGVSYW5nZSA9IHRydWU7IH0KKworICAgICAgICBSZWZQdHI8VHJhY2tJbmZvPiBmb3Jt
YXREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0RGVzY3JpcHRpb24uY29weVJl
ZigpOyB9CisgICAgICAgIHZvaWQgc2V0Rm9ybWF0RGVzY3JpcHRpb24oUmVmPFRyYWNrSW5mbz4m
JiBkZXNjcmlwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlv
biA9IFdURk1vdmUoZGVzY3JpcHRpb24pOworICAgICAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlv
bi0+dHJhY2tJRCA9IHRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCk7CisgICAgICAgIH0KIAotICAg
ICAgICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIoKSBjb25zdCB7IHJldHVybiBtX3Bh
cnNlcjsgfQorICAgICAgICBXZWJNUGFyc2VyJiBwYXJzZXIoKSBjb25zdCB7IHJldHVybiBtX3Bh
cnNlcjsgfQogCi0gICAgICAgIHZpcnR1YWwgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEo
d2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29u
c3QgQ01UaW1lJiwgaW50KQorICAgICAgICB2aXJ0dWFsIHdlYm06OlN0YXR1cyBjb25zdW1lRnJh
bWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRf
dCosIGNvbnN0IE1lZGlhVGltZSYsIGludCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0
YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2
b2lkIHJlc2V0Q29tcGxldGVkKCkKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0Q29tcGxldGVk
RnJhbWVzU3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2NvbXBsZXRlQmxvY2tCdWZm
ZXIgPSBudWxscHRyOworICAgICAgICAgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcyA9IHsgfTsK
ICAgICAgICAgfQorCiAgICAgICAgIHZvaWQgcmVzZXQoKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXNldENvbXBsZXRlZCgpOworICAgICAgICAgICAgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0
ZSgpOwogICAgICAgICAgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBzdGQ6Om51bGxvcHQ7CiAg
ICAgICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgPSAwOwotICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIu
cmVzZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHJhaW5QZW5kaW5nU2FtcGxlcygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5zaXpl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9wYXJzZXIucHJvdmlk
ZU1lZGlhRGF0YShXVEZNb3ZlKG1fY29tcGxldGVNZWRpYVNhbXBsZXMpKTsKKyAgICAgICAgICAg
IHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVk
OgotICAgICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gY29udGlndW91c0NvbXBsZXRl
QmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29uc3Q7CisgICAgICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVf
dCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0OwogICAgICAgICB3ZWJtOjpTdGF0dXMgcmVh
ZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWlu
dDY0X3QqIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJS
ZWY+IG1fY29tcGxldGVCbG9ja0J1ZmZlcjsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+
IG1fY29tcGxldGVQYWNrZXRTaXplOwotICAgICAgICAvLyBJbml0aWFsIGFsbG9jYXRpb24gc2l6
ZSBvZiBlbXB0eSBDTUJsb2NrQnVmZmVyLgotICAgICAgICBzaXplX3QgbU1heEJsb2NrQnVmZmVy
Q2FwYWNpdHkgeyAwIH07CisgICAgICAgIFJlZlB0cjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPiBt
X2NvbXBsZXRlQmxvY2tCdWZmZXI7CisgICAgICAgIE1lZGlhU2FtcGxlc0Jsb2NrIG1fY29tcGxl
dGVNZWRpYVNhbXBsZXM7CisgICAgICAgIGJvb2wgbV91c2VCeXRlUmFuZ2UgeyBmYWxzZSB9Owog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29kZWNUeXBlIG1fY29kZWM7CiAgICAgICAgIHdlYm06
OlRyYWNrRW50cnkgbV90cmFjazsKLSAgICAgICAgVHlwZSBtX3RyYWNrVHlwZTsKLSAgICAgICAg
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fZm9ybWF0RGVzY3JpcHRpb247Ci0g
ICAgICAgIFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBtX2N1cnJlbnRCbG9ja0J1ZmZlcjsK
LSAgICAgICAgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgbV9wYXJzZXI7CisgICAgICAgIGNvbnN0
IFRyYWNrSW5mbzo6VHJhY2tUeXBlIG1fdHJhY2tUeXBlOworICAgICAgICBSZWZQdHI8VHJhY2tJ
bmZvPiBtX2Zvcm1hdERlc2NyaXB0aW9uOworICAgICAgICBTaGFyZWRCdWZmZXJCdWlsZGVyIG1f
Y3VycmVudEJsb2NrQnVmZmVyOworICAgICAgICBXZWJNUGFyc2VyJiBtX3BhcnNlcjsKKyAgICAg
ICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IG1fY29tcGxldGVQYWNrZXRTaXplOwogICAgICAgICAv
LyBTaXplIG9mIHRoZSBjdXJyZW50bHkgaW5jb21wbGV0ZSBwYXJzZWQgcGFja2V0LgogICAgICAg
ICBzaXplX3QgbV9wYXJ0aWFsQnl0ZXNSZWFkIHsgMCB9OwogICAgIH07CiAKICAgICBjbGFzcyBW
aWRlb1RyYWNrRGF0YSA6IHB1YmxpYyBUcmFja0RhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNr
RW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcikgLT4gVW5p
cXVlUmVmPFZpZGVvVHJhY2tEYXRhPgorICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNU
eXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgV2ViTVBh
cnNlciYgcGFyc2VyKSAtPiBVbmlxdWVSZWY8VmlkZW9UcmFja0RhdGE+CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFZpZGVvVHJhY2tEYXRhPihjb2RlY1R5cGUs
IHRyYWNrRW50cnksIHBhcnNlcik7CiAgICAgICAgIH0KIAotICAgICAgICBWaWRlb1RyYWNrRGF0
YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5
LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpCi0gICAgICAgICAgICA6IFRyYWNrRGF0
YShjb2RlY1R5cGUsIHRyYWNrRW50cnksIFR5cGU6OlZpZGVvLCBwYXJzZXIpCisgICAgICAgIFZp
ZGVvVHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkm
IHRyYWNrRW50cnksIFdlYk1QYXJzZXImIHBhcnNlcikKKyAgICAgICAgICAgIDogVHJhY2tEYXRh
KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHJhY2tJbmZvOjpUcmFja1R5cGU6OlZpZGVvLCBwYXJz
ZXIpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHdlYm06OlN0YXR1cyBjb25zdW1l
RnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50
NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkgZmluYWw7Ci0KICAgICBwcml2YXRlOgotICAgICAg
ICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25zdCBDTVRpbWUmLCBpbnQsIGNvbnN0IHdlYm06
OkZyYW1lTWV0YWRhdGEmKTsKICAgICAgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29u
c3QgeyByZXR1cm4gIlZpZGVvVHJhY2tEYXRhIjsgfQorICAgICAgICB3ZWJtOjpTdGF0dXMgY29u
c3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwg
dWludDY0X3QqLCBjb25zdCBNZWRpYVRpbWUmLCBpbnQpIGZpbmFsOworICAgICAgICB2b2lkIHJl
c2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKSBmaW5hbDsKIAogI2lmIEVOQUJMRShWUDkpCiAgICAg
ICAgIHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciBtX2hlYWRlclBhcnNlcjsKKyAgICAgICAg
VmVjdG9yPGJvb2w+IG1fa2V5RnJhbWVzOwogI2VuZGlmCiAgICAgfTsKIAogICAgIGNsYXNzIEF1
ZGlvVHJhY2tEYXRhIDogcHVibGljIFRyYWNrRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBz
dGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tF
bnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBt
aW5pbXVtU2FtcGxlRHVyYXRpb24pIC0+IFVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4KKyAgICAg
ICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRy
YWNrRW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJzZXImIHBhcnNlcikgLT4gVW5pcXVlUmVmPEF1
ZGlvVHJhY2tEYXRhPgogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJl
ZjxBdWRpb1RyYWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0VudHJ5LCBwYXJzZXIsIG1pbmltdW1T
YW1wbGVEdXJhdGlvbik7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBdWRpb1Ry
YWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0VudHJ5LCBwYXJzZXIpOwogICAgICAgICB9CiAKLSAg
ICAgICAgQXVkaW9UcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJh
Y2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9h
dCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pCi0gICAgICAgICAgICA6IFRyYWNrRGF0YSB7IGNvZGVj
VHlwZSwgdHJhY2tFbnRyeSwgVHlwZTo6QXVkaW8sIHBhcnNlciB9Ci0gICAgICAgICAgICAsIG1f
bWluaW11bVNhbXBsZUR1cmF0aW9uIHsgbWluaW11bVNhbXBsZUR1cmF0aW9uIH0KKyAgICAgICAg
QXVkaW9UcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRy
eSYgdHJhY2tFbnRyeSwgV2ViTVBhcnNlciYgcGFyc2VyKQorICAgICAgICAgICAgOiBUcmFja0Rh
dGEgeyBjb2RlY1R5cGUsIHRyYWNrRW50cnksIFRyYWNrSW5mbzo6VHJhY2tUeXBlOjpBdWRpbywg
cGFyc2VyIH0KICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgd2VibTo6U3RhdHVzIGNv
bnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYs
IHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKLSAgICAgICAgdm9pZCByZXNl
dENvbXBsZXRlZCgpIGZpbmFsOwotICAgICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZlcihzdGQ6
Om9wdGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0ID0gc3RkOjpudWxsb3B0KTsK
LQogICAgIHByaXZhdGU6CisgICAgICAgIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdl
Ym06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0
IE1lZGlhVGltZSYsIGludCkgZmluYWw7CisgICAgICAgIHZvaWQgcmVzZXRDb21wbGV0ZWRGcmFt
ZXNTdGF0ZSgpIGZpbmFsOwogICAgICAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25z
dCB7IHJldHVybiAiQXVkaW9UcmFja0RhdGEiOyB9CiAKLSAgICAgICAgQ01UaW1lIG1fc2FtcGxl
UHJlc2VudGF0aW9uVGltZTsKLSAgICAgICAgQ01UaW1lIG1fcGFja2V0RHVyYXRpb247Ci0gICAg
ICAgIHNpemVfdCBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0IHsgMCB9OworICAgICAgICBNZWRp
YVRpbWUgbV9wYWNrZXREdXJhdGlvbjsKICAgICAgICAgdWludDhfdCBtX2ZyYW1lc1BlclBhY2tl
dCB7IDAgfTsKICAgICAgICAgU2Vjb25kcyBtX2ZyYW1lRHVyYXRpb24geyAwX3MgfTsKLSAgICAg
ICAgVmVjdG9yPHNpemVfdD4gbV9wYWNrZXRTaXplczsKLSAgICAgICAgVmVjdG9yPENNU2FtcGxl
VGltaW5nSW5mbz4gbV9wYWNrZXRUaW1pbmdzOwogICAgICAgICBzaXplX3QgbU51bUZyYW1lc0lu
Q29tcGxldGVCbG9jayB7IDAgfTsKLSAgICAgICAgLy8gRklYTUU6IDAuNSAtIDEuMCBzZWNvbmRz
IGlzIGEgYmV0dGVyIGR1cmF0aW9uIHBlciBzYW1wbGUgYnVmZmVyLCBidXQgdXNlIDIgc2Vjb25k
cyBzbyBhdCBsZWFzdCB0aGUgZmlyc3QKLSAgICAgICAgLy8gc2FtcGxlIGJ1ZmZlciB3aWxsIHBs
YXkgdW50aWwgd2UgZml4IE1lZGlhU2FtcGxlQ3Vyc29yOjpjcmVhdGVTYW1wbGVCdWZmZXIgdG8g
ZGVhbCB3aXRoIGBlbmRDdXJzb3JgLgotICAgICAgICBmbG9hdCBtX21pbmltdW1TYW1wbGVEdXJh
dGlvbiB7IDIgfTsKICAgICB9OwogCi0gICAgY29uc3QgTG9nZ2VyKiBsb2dnZXJQdHIoKSBjb25z
dCB7IHJldHVybiBtX2xvZ2dlci5nZXQoKTsgfQotICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KLQogcHJpdmF0ZToKLQogICAg
IFRyYWNrRGF0YSogdHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodWludDY0X3QpOwotCiAgICAgc3Rh
dGljIGJvb2wgaXNTdXBwb3J0ZWRWaWRlb0NvZGVjKFN0cmluZ1ZpZXcpOwogICAgIHN0YXRpYyBi
b29sIGlzU3VwcG9ydGVkQXVkaW9Db2RlYyhTdHJpbmdWaWV3KTsKIApAQCAtMjY4LDcgKzI2MCw3
IEBAIHByaXZhdGU6CiAgICAgd2VibTo6U3RhdHVzIE9uQmxvY2tHcm91cEVuZChjb25zdCB3ZWJt
OjpFbGVtZW50TWV0YWRhdGEmLCBjb25zdCB3ZWJtOjpCbG9ja0dyb3VwJik7CiAgICAgd2VibTo6
U3RhdHVzIE9uRnJhbWUoY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHdlYm06OlJlYWRlcios
IHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykgZmluYWw7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW5pdGlhbGl6YXRpb25TZWdtZW50PiBtX2luaXRpYWxpemF0aW9uU2VnbWVudDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8U291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQ+IG1f
aW5pdGlhbGl6YXRpb25TZWdtZW50OwogICAgIFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFJl
ZjxTaGFyZWRCdWZmZXI+Pj4gbV9rZXlJZHM7CiAgICAgd2VibTo6U3RhdHVzIG1fc3RhdHVzOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjx3ZWJtOjpXZWJtUGFyc2VyPiBtX3BhcnNlcjsKQEAgLTI4NSwx
MiArMjc3LDY5IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgQmxvY2tWYXJpYW50ID0gc3RkOjp2YXJp
YW50PHdlYm06OkJsb2NrLCB3ZWJtOjpTaW1wbGVCbG9jaz47CiAgICAgc3RkOjpvcHRpb25hbDxC
bG9ja1ZhcmlhbnQ+IG1fY3VycmVudEJsb2NrOwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+
IG1fcmV3aW5kVG9Qb3NpdGlvbjsKLSAgICBmbG9hdCBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0
aW9uIHsgMiB9OwogCiAgICAgUmVmUHRyPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7CiAgICAgY29u
c3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyIHsgbnVsbHB0ciB9OwogICAgIHVpbnQ2NF90IG1fbmV4
dENoaWxkSWRlbnRpZmllciB7IDAgfTsKKyAgICBDYWxsYmFjayYgbV9jYWxsYmFjazsKKyAgICBi
b29sIG1fY3JlYXRlQnl0ZVJhbmdlU2FtcGxlcyB7IGZhbHNlIH07Cit9OworCitjbGFzcyBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNIDogcHVibGljIFNvdXJjZUJ1ZmZlclBhcnNlciwgV2ViTVBhcnNl
cjo6Q2FsbGJhY2sgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IHN0YXRpYyBib29sIGlzV2ViTUZvcm1hdFJlYWRlckF2YWlsYWJsZSgpOworICAgIHN0YXRpYyBN
ZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGUgaXNDb250ZW50VHlwZVN1cHBvcnRlZChjb25z
dCBDb250ZW50VHlwZSYpOworICAgIHN0YXRpYyBTcGFuPGNvbnN0IEFTQ0lJTGl0ZXJhbD4gc3Vw
cG9ydGVkTUlNRVR5cGVzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNPiBjcmVhdGUoY29uc3QgQ29udGVudFR5cGUmKTsKKworICAgIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0oKTsKKyAgICB+U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpID0g
ZGVmYXVsdDsKKworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAgICBUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBUeXBlOjpXZWJNOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhcHBlbmREYXRhKFNlZ21lbnQmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0gW10g
eyB9LCBBcHBlbmRGbGFncyA9IEFwcGVuZEZsYWdzOjpOb25lKSBmaW5hbDsKKyAgICB2b2lkIGZs
dXNoUGVuZGluZ01lZGlhRGF0YSgpIGZpbmFsOworICAgIHZvaWQgc2V0U2hvdWxkUHJvdmlkZU1l
ZGlhRGF0YUZvclRyYWNrSUQoYm9vbCwgdWludDY0X3QpIGZpbmFsOworICAgIGJvb2wgc2hvdWxk
UHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQodWludDY0X3QpIGZpbmFsOworICAgIHZvaWQgcmVz
ZXRQYXJzZXJTdGF0ZSgpIGZpbmFsIHsgbV9wYXJzZXIucmVzZXRTdGF0ZSgpOyB9CisgICAgdm9p
ZCBpbnZhbGlkYXRlKCkgZmluYWw7CisKKyAgICB1c2luZyBEaWRQYXJzZVRyaW1taW5nRGF0YUNh
bGxiYWNrID0gRnVuY3Rpb248dm9pZCh1aW50NjRfdCB0cmFja0lELCBjb25zdCBNZWRpYVRpbWUm
IGRpc2NhcmRQYWRkaW5nKT47CisgICAgdm9pZCBzZXREaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxi
YWNrKERpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKKyAgICB7CisgICAg
ICAgIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwor
ICAgIH0KKworICAgIHZvaWQgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKCk7CisgICAgdm9pZCBz
ZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbihmbG9hdCk7CisgICAgCisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmll
cikgZmluYWw7CisgICAgY29uc3QgTG9nZ2VyKiBsb2dnZXJQdHIoKSBjb25zdCB7IHJldHVybiBt
X2xvZ2dlci5nZXQoKTsgfQorICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KKworcHJpdmF0ZToKKyAgICAvLyBXZWJNUGFyc2Vy
OjpDYWxsYmFjaworICAgIHZvaWQgcGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFNvdXJjZUJ1ZmZl
clBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYpIGZpbmFsOworICAgIHZvaWQgcGFyc2Vk
TWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYpIGZpbmFsOworICAgIGJvb2wgY2FuRGVjcnlw
dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICEhbV9kaWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJ
bml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2s7IH0KKyAgICB2b2lkIGNvbnRlbnRL
ZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRChSZWY8U2hhcmVkQnVmZmVyPiYm
LCB1aW50NjRfdCkgZmluYWw7CisgICAgdm9pZCBwYXJzZWRUcmltbWluZ0RhdGEodWludDY0X3Qs
IGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOworCisgICAgdm9pZCByZXR1cm5TYW1wbGVzKE1lZGlh
U2FtcGxlc0Jsb2NrJiYsIENNRm9ybWF0RGVzY3JpcHRpb25SZWYpOworCiAgICAgRGlkUGFyc2VU
cmltbWluZ0RhdGFDYWxsYmFjayBtX2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2s7CisgICAg
V2ViTVBhcnNlciBtX3BhcnNlcjsKKyAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJl
Zj4gbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uOworICAgIFJlZlB0cjxjb25zdCBUcmFja0luZm8+
IG1fYXVkaW9JbmZvOworICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBtX3Zp
ZGVvRm9ybWF0RGVzY3JpcHRpb247CisgICAgUmVmUHRyPGNvbnN0IFRyYWNrSW5mbz4gbV92aWRl
b0luZm87CisgICAgTWVkaWFUaW1lIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24geyA5NjAw
MCwgNDgwMDAgfTsKKyAgICBNZWRpYVNhbXBsZXNCbG9jayBtX3F1ZXVlZEF1ZGlvU2FtcGxlczsK
KyAgICBNZWRpYVRpbWUgbV9xdWV1ZWRBdWRpb0R1cmF0aW9uOworICAgIFJlZlB0cjxjb25zdCBM
b2dnZXI+IG1fbG9nZ2VyOworICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxw
dHIgfTsKIH07CiAKIH0KQEAgLTI5OSwxMiArMzQ4LDEyIEBAIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQkVHSU4oV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSkKICAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyJiBwYXJzZXIpIHsgcmV0
dXJuIHBhcnNlci50eXBlKCkgPT0gV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyOjpUeXBlOjpX
ZWJNOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0Rh
dGEpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OlRyYWNrRGF0YSYgdHJhY2tEYXRhKSB7IHJldHVybiB0cmFja0RhdGEudHJhY2tU
eXBlKCkgPT0gV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBl
OjpWaWRlbzsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXZWJNUGFy
c2VyOjpWaWRlb1RyYWNrRGF0YSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0YS50
cmFja1R5cGUoKSA9PSBXZWJDb3JlOjpUcmFja0luZm86OlRyYWNrVHlwZTo6VmlkZW87IH0KIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJ
TihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YSkKLSAgICBz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0YS50cmFja1R5cGUoKSA9PSBX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlvOyB9
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OldlYk1QYXJzZXI6OkF1ZGlv
VHJhY2tEYXRhKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpXZWJNUGFy
c2VyOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRyYWNrVHlwZSgp
ID09IFdlYkNvcmU6OlRyYWNrSW5mbzo6VHJhY2tUeXBlOjpBdWRpbzsgfQogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NPVVJDRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGll
c0NvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGls
aXRpZXNDb2NvYS5oCmluZGV4IDc2MzYxNjcwODkzMGI0ZGQzNWIyYmJiMjdhMDRhNmEzNTlkMDc5
NzMuLjIzZjZhNDYwNjNlM2QxZDFiMWE0M2NiYjUyYzRiOTZhMGMxMDE4OWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29h
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0
aWVzQ29jb2EuaApAQCAtMzAsOCArMzAsNiBAQAogI2luY2x1ZGUgIlZQOVV0aWxpdGllcy5oIgog
I2luY2x1ZGUgPHdlYm0vZG9tX3R5cGVzLmg+CiAKLXR5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1
ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7Ci0KIG5hbWVzcGFj
ZSB2cDlfcGFyc2VyIHsKIGNsYXNzIFZwOUhlYWRlclBhcnNlcjsKIH0KQEAgLTQwLDYgKzM4LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgTWVkaWFDYXBhYmlsaXRpZXNJbmZvOwog
c3RydWN0IFZpZGVvQ29uZmlndXJhdGlvbjsKK3N0cnVjdCBWaWRlb0luZm87CiAKIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVnaXN0ZXJXZWJLaXRWUDlEZWNvZGVyKCk7CiBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlZ2lzdGVyV2ViS2l0VlA4RGVjb2RlcigpOwpAQCAtNTIsNyArNTEsNyBAQCBzdGQ6Om9w
dGlvbmFsPE1lZGlhQ2FwYWJpbGl0aWVzSW5mbz4gdmFsaWRhdGVWUFBhcmFtZXRlcnMoY29uc3Qg
VlBDb2RlY0NvbmZpZ3VyYQogc3RkOjpvcHRpb25hbDxNZWRpYUNhcGFiaWxpdGllc0luZm8+IGNv
bXB1dGVWUFBhcmFtZXRlcnMoY29uc3QgVmlkZW9Db25maWd1cmF0aW9uJik7CiBib29sIGlzVlBT
b2Z0d2FyZURlY29kZXJTbW9vdGgoY29uc3QgVmlkZW9Db25maWd1cmF0aW9uJik7CiAKLVJldGFp
blB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21W
UDlIZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyJiwgY29uc3Qg
d2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7CitSZWY8VmlkZW9JbmZvPiBjcmVhdGVWaWRl
b0luZm9Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNl
ciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOwogCiBzdHJ1Y3QgVlA4RnJh
bWVIZWFkZXIgewogICAgIGJvb2wga2V5ZnJhbWUgeyBmYWxzZSB9OwpAQCAtNjcsOCArNjYsOCBA
QCBzdHJ1Y3QgVlA4RnJhbWVIZWFkZXIgewogICAgIGJvb2wgbmVlZHNDbGFtcGluZyB7IGZhbHNl
IH07CiB9OwogCi1zdGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVh
ZGVyKHVpbnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSk7Ci1SZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA4SGVhZGVy
KGNvbnN0IFZQOEZyYW1lSGVhZGVyJiwgY29uc3Qgd2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+
Jik7CitzdGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKGNv
bnN0IHVpbnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSk7CitSZWY8VmlkZW9JbmZv
PiBjcmVhdGVWaWRlb0luZm9Gcm9tVlA4SGVhZGVyKGNvbnN0IFZQOEZyYW1lSGVhZGVyJiwgY29u
c3Qgd2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7CiAKIGNsYXNzIFdFQkNPUkVfRVhQT1JU
IFZQOVRlc3RpbmdPdmVycmlkZXMgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQppbmRl
eCBjYjJjOTdmYjAwNjJhMGE2YWE3OGE1NjFkMjkwY2NjYmQwZTFlODA5Li44NDIyMTBiMzcxMjdm
ZThlZWVlOWFjYzIzY2NjOTZjMDRkOGM1N2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQpAQCAt
MzEsMTEgKzMxLDEyIEBACiAjaW1wb3J0ICJGb3VyQ0MuaCIKICNpbXBvcnQgIkxpYldlYlJUQ1By
b3ZpZGVyLmgiCiAjaW1wb3J0ICJNZWRpYUNhcGFiaWxpdGllc0luZm8uaCIKKyNpbXBvcnQgIk1l
ZGlhU2FtcGxlLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCAiU2NyZWVu
UHJvcGVydGllcy5oIgorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJTeXN0ZW1C
YXR0ZXJ5LmgiCiAjaW1wb3J0ICJWaWRlb0NvbmZpZ3VyYXRpb24uaCIKLSNpbXBvcnQgPENvcmVN
ZWRpYS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9EYXRh
Vmlldy5oPgogI2ltcG9ydCA8d2VibS92cDlfaGVhZGVyX3BhcnNlci5oPgogI2ltcG9ydCA8d3Rm
L3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgpAQCAtMzYwLDI1ICszNjEsMzUgQEAg
c3RhdGljIHVpbnQ4X3QgY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29uc3QgUHJpbWFyaWVzJiBj
b2VmZmljaWVudHMpCiAgICAgfQogfQogCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01D
b2xvclByaW1hcmllcyh1aW50OF90IHByaW1hcmllcykKK3N0YXRpYyBQbGF0Zm9ybVZpZGVvQ29s
b3JQcmltYXJpZXMgY29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKHVpbnQ4X3Qg
cHJpbWFyaWVzKQogewogICAgIHN3aXRjaCAocHJpbWFyaWVzKSB7CiAgICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNzA5XzY6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFn
ZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0lUVV9SXzcwOV8yOwotICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OkVCVV9UZWNoXzMyMTNfRToKLSAgICAgICAgcmV0dXJuIGtDVklt
YWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfRUJVXzMyMTM7CisgICAgICAgIHJldHVybiBQbGF0Zm9y
bVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0NzA5OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29s
b3JQcmltYXJpZXM6OkJUXzQ3MF82X006CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29s
b3JQcmltYXJpZXM6OkJ0NDcwbTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFy
aWVzOjpCVF80NzBfN19CRzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1h
cmllczo6QnQ0NzBiZzsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpC
VF82MDFfNzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21w
dGUxNzBtOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NU
XzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfU01QVEVf
QzsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGUyNDBt
OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkZpbG06CisgICAgICAg
IHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkZpbG07CisgICAgY2FzZSBWUENv
bmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6
CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0MjAyMDsKKyAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF80MjhfMToKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGVTdDQyODE7CiAg
ICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfUlBfNDMxXzI6Ci0g
ICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJ
X1AzOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVJw
NDMxOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQz
Ml8xOgotICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFy
aWVzX1AzX0Q2NTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8y
MDIwX05vbmNvbnN0YW50X0x1bWluYW5jZToKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0
RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19JVFVfUl8yMDIwOworICAgICAgICByZXR1cm4gUGxh
dGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZUVnNDMyOworICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uQ29sb3JQcmltYXJpZXM6OkVCVV9UZWNoXzMyMTNfRToKKyAgICAgICAgcmV0dXJuIFBs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6SmVkZWNQMjJQaG9zcGhvcnM7CisgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQ6CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQ7
CiAgICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyB1aW50OF90IGNvbnZl
cnRUb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
JiBjaGFyYWN0ZXJpc3RpY3MpCkBAIC00MjEsMjkgKzQzMiw0NSBAQCBzdGF0aWMgdWludDhfdCBj
b252ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyhjb25zdCBUcmFuc2ZlckNoYXJhY3Rlcmlz
dGljcyYgYwogICAgIH0KIH0KIAotc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNVHJhbnNm
ZXJGdW5jdGlvbih1aW50OF90IGNoYXJhY3RlcmlzdGljcykKK3N0YXRpYyBQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgY29udmVydFRvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzKHVpbnQ4X3QgY2hhcmFjdGVyaXN0aWNzKQogewogICAgIHN3aXRjaCAoY2hh
cmFjdGVyaXN0aWNzKSB7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6QlRfNzA5XzY6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVy
RnVuY3Rpb25fSVRVX1JfNzA5XzI7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0NzA5OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzQ3MF82X006CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZp
ZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkdhbW1hMjJjdXJ2ZTsKKyAgICBjYXNlIFZQQ29u
ZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF80NzBfN19CRzoKKyAgICAgICAg
cmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6R2FtbWEyOGN1cnZl
OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzYw
MV83OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpTbXB0ZTE3MG07CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6U01QVEVfU1RfMjQwOgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJUcmFuc2Zl
ckZ1bmN0aW9uX1NNUFRFXzI0ME1fMTk5NTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yMDg0OgotICAgICAgICByZXR1cm4gUEFMOjpr
Q01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfMjA4NF9QUTsKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGUy
NDBtOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6Okxp
bmVhcjoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6TGluZWFyOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkxvZ3JpdGhtaWM6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkxvZzsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpMb2dyaXRobWljX1NxcnQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZ1NxcnQ7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SUVDXzYxOTY2XzJfNDoKKyAgICAgICAgcmV0dXJu
IFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyNDsKKyAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8xMzYxXzA6Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MTM2
MUV4dGVuZGVkQ29sb3VyR2FtdXQ7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6SUVDXzYxOTY2XzJfMToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlk
ZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyMTsKICAgICBjYXNlIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OgorICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTBiaXQ7
CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjAy
MF8xMmJpdDoKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2Zl
ckZ1bmN0aW9uX0lUVV9SXzIwMjA7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAyMF8xMmJpdDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yMDg0OgorICAgICAgICByZXR1cm4g
UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZVN0MjA4NDsKICAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF80Mjhf
MToKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0
aW9uX1NNUFRFX1NUXzQyOF8xOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpTbXB0ZVN0NDI4MTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRy
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hMRzoKLSAgICAgICAgcmV0dXJuIFBBTDo6
a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzIxMDBfSExHOwotICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8y
XzE6Ci0gICAgICAgIHJldHVybiBQQUw6OmNhbkxvYWRfQ29yZU1lZGlhX2tDTUZvcm1hdERlc2Ny
aXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgPyBQQUw6OmdldF9Db3JlTWVkaWFfa0NNRm9y
bWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA6IG51bGxwdHI7Ci0gICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyOgotICAgICAg
ICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFy
OworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpB
cmliU3RkQjY3SGxnOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OlVuc3BlY2lmaWVkOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9y
bVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOwogICAgIH0KLQotICAg
IHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9NYXRyaXhDb2Vm
ZmljaWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudHMpCkBAIC00NzIs
MjEgKzQ5OSwzMSBAQCBzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9NYXRyaXhDb2VmZmljaWVudHMo
Y29uc3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudAogICAgIH0KIH0KIAotc3RhdGlj
IENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgodWludDhfdCBjb2VmZmljaWVudHMp
CitzdGF0aWMgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cyBjb252ZXJ0VG9QbGF0Zm9y
bVZpZGVvTWF0cml4Q29lZmZpY2llbnRzKHVpbnQ4X3QgY29lZmZpY2llbnRzKQogewogICAgIHN3
aXRjaCAoY29lZmZpY2llbnRzKSB7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2Vm
ZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgotICAgICAgICByZXR1cm4g
UEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbllDYkNyTWF0cml4X0lUVV9SXzIwMjA7CisgICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OklkZW50aXR5OgorICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6UmdiOworICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF83MDlfNjoKKyAgICAgICAgcmV0dXJu
IFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0NzA5OworICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpGQ0M6CisgICAgICAgIHJldHVybiBQbGF0Zm9y
bVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpGY2M7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25N
YXRyaXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1W
aWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQ0NzBiZzsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlv
bk1hdHJpeENvZWZmaWNpZW50czo6QlRfNjAxXzc6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1
ZmZlcllDYkNyTWF0cml4X0lUVV9SXzYwMV80OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0
cml4Q29lZmZpY2llbnRzOjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVy
WUNiQ3JNYXRyaXhfSVRVX1JfNzA5XzI7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0
cml4Q29lZmZpY2llbnRzOjpTbXB0ZTE3MG07CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRy
aXhDb2VmZmljaWVudHM6OlNNUFRFX1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVm
ZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1OworICAgICAgICByZXR1cm4gUGxhdGZvcm1W
aWRlb01hdHJpeENvZWZmaWNpZW50czo6U21wdGUyNDBtOworICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uTWF0cml4Q29lZmZpY2llbnRzOjpZQ2dDbzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlk
ZW9NYXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0
cml4Q29lZmZpY2llbnRzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZToKKyAgICAgICAg
cmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyME5vbmNvbnN0YW50
THVtaW5hbmNlOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpC
VF8yMDIwX0NvbnN0YW50X0x1bWluYW5jZToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9N
YXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyMENvbnN0YW50THVtaW5hbmNlOworICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpVbnNwZWNpZmllZDoKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6VW5zcGVj
aWZpZWQ7CiAgICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyB1aW50OF90
IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4LCB1aW50
NjRfdCB5KQpAQCAtNTAxLDcgKzUzOCw3IEBAIHN0YXRpYyB1aW50OF90IGNvbnZlcnRTdWJzYW1w
bGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4LCB1aW50NjRfdCB5KQogICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIwX0Nv
bG9jYXRlZDsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBj
cmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChjb25z
dCBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgcmVjb3JkLCBpbnQzMl90IHdpZHRoLCBpbnQz
Ml90IGhlaWdodCkKK3N0YXRpYyBSZWY8VmlkZW9JbmZvPiBjcmVhdGVWaWRlb0luZm9Gcm9tVlBD
b2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQoY29uc3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQm
IHJlY29yZCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQpCiB7CiAgICAgLy8gUmVmOiAi
VlAgQ29kZWMgSVNPIE1lZGlhIEZpbGUgRm9ybWF0IEJpbmRpbmcsIHYxLjAsIDIwMTctMDMtMzEi
CiAgICAgLy8gPGh0dHBzOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy92cDkvbXA0Lz4KQEAgLTUzMCwx
MiArNTY3LDE0IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3Jl
YXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpCiAgICAgLy8gRklYTUU6IENvbnZl
cnQgZXhpc3Rpbmcgc3RydWN0IHRvIGFuIElTT0JveCBhbmQgcmVwbGFjZSB0aGUgd3JpdGluZyBj
b2RlIGJlbG93CiAgICAgLy8gd2l0aCBhIHN1YmNsYXNzIG9mIElTT0Z1bGxCb3guCiAKKyAgICBh
dXRvIHZpZGVvSW5mbyA9IFZpZGVvSW5mbzo6Y3JlYXRlKCk7CisgICAgdmlkZW9JbmZvLT5zaXpl
ID0gdmlkZW9JbmZvLT5kaXNwbGF5U2l6ZSA9IHsgZmxvYXQod2lkdGgpLCBmbG9hdChoZWlnaHQp
IH07CisKICAgICBjb25zdGV4cHIgc2l6ZV90IFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNT
aXplID0gMTI7CiAKICAgICB1aW50MzJfdCB2ZXJzaW9uQW5kRmxhZ3MgPSAxIDw8IDI0OwogICAg
IHVpbnQ4X3QgYml0RGVwdGhDaHJvbWFBbmRSYW5nZSA9ICgweEYgJiByZWNvcmQuYml0RGVwdGgp
IDw8IDQgfCAoMHg3ICYgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nKSA8PCAxIHwgKDB4MSAmIHJl
Y29yZC52aWRlb0Z1bGxSYW5nZUZsYWcpOwogICAgIHVpbnQxNl90IGNvZGVjSW50aWFsaXphdGlv
bkRhdGFTaXplID0gMDsKLQogICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShB
cnJheUJ1ZmZlcjo6Y3JlYXRlKFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplLCAxKSwg
MCwgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUpOwogICAgIHZpZXctPnNldCgwLCB2
ZXJzaW9uQW5kRmxhZ3MsIGZhbHNlKTsKICAgICB2aWV3LT5zZXQoNCwgcmVjb3JkLnByb2ZpbGUs
IGZhbHNlKTsKQEAgLTU0NSw0NiArNTg0LDE2IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXRE
ZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpCiAg
ICAgdmlldy0+c2V0KDgsIHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcywgZmFsc2UpOwog
ICAgIHZpZXctPnNldCg5LCByZWNvcmQubWF0cml4Q29lZmZpY2llbnRzLCBmYWxzZSk7CiAgICAg
dmlldy0+c2V0KDEwLCBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZSwgZmFsc2UpOwotCi0gICAg
YXV0byBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNv
bnN0IFVJbnQ4ICopdmlldy0+ZGF0YSgpLCB2aWV3LT5ieXRlTGVuZ3RoKCkpKTsKLQotICAgIENG
VHlwZVJlZiBjb25maWd1cmF0aW9uS2V5c1tdID0geyBDRlNUUigidnBjQyIpIH07Ci0gICAgQ0ZU
eXBlUmVmIGNvbmZpZ3VyYXRpb25WYWx1ZXNbXSA9IHsgZGF0YS5nZXQoKSB9OwotICAgIGF1dG8g
Y29uZmlndXJhdGlvbkRpY3QgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywgV1RGX0FS
UkFZX0xFTkdUSChjb25maWd1cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxC
YWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLQotICAgIFZlY3RvcjxD
RlR5cGVSZWY+IGV4dGVuc2lvbnNLZXlzIHsgUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVu
c2lvbl9TYW1wbGVEZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21zIH07Ci0gICAgVmVjdG9yPENGVHlw
ZVJlZj4gZXh0ZW5zaW9uc1ZhbHVlcyA9IHsgY29uZmlndXJhdGlvbkRpY3QuZ2V0KCkgfTsKLQot
ICAgIGlmIChyZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID09IFZQQ29uZmlndXJhdGlvblJhbmdl
OjpGdWxsUmFuZ2UpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKFBBTDo6a0NNRm9y
bWF0RGVzY3JpcHRpb25FeHRlbnNpb25fRnVsbFJhbmdlVmlkZW8pOwotICAgICAgICBleHRlbnNp
b25zVmFsdWVzLmFwcGVuZChrQ0ZCb29sZWFuVHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8g
Y21Db2xvclByaW1hcmllcyA9IGNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMocmVjb3JkLmNvbG9y
UHJpbWFyaWVzKSkgewotICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZm
ZXJDb2xvclByaW1hcmllc0tleSk7Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNt
Q29sb3JQcmltYXJpZXMpOwotICAgIH0KLQotICAgIGlmIChhdXRvIGNtVHJhbnNmZXJGdW5jdGlv
biA9IGNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbihyZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3MpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlclRy
YW5zZmVyRnVuY3Rpb25LZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbVRy
YW5zZmVyRnVuY3Rpb24pOwotICAgIH0KLQotICAgIGlmIChhdXRvIGNtTWF0cml4ID0gY29udmVy
dFRvQ01ZQ2JDUk1hdHJpeChyZWNvcmQubWF0cml4Q29lZmZpY2llbnRzKSkgewotICAgICAgICBl
eHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeEtleSk7Ci0gICAg
ICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtTWF0cml4KTsKLSAgICB9Ci0KLSAgICBhdXRv
IGV4dGVuc2lvbnMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBleHRlbnNpb25zS2V5cy5kYXRhKCksIGV4dGVuc2lvbnNWYWx1ZXMuZGF0YSgpLCBleHRl
bnNpb25zS2V5cy5zaXplKCksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5
cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLQotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlw
dGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgQ01WaWRlb0NvZGVjVHlw
ZSBjb2RlYyA9IHJlY29yZC5jb2RlY05hbWUgPT0gInZwMDkiID8ga0NNVmlkZW9Db2RlY1R5cGVf
VlA5IDogJ3ZwMDgnOwotICAgIGlmIChub0VyciAhPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25D
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGV4dGVuc2lv
bnMuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICB2aWRlb0luZm8tPmF0
b21EYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dWludDhfdCo+KHZpZXct
PmRhdGEoKSksIHZpZXctPmJ5dGVMZW5ndGgoKSk7CisgICAgdmlkZW9JbmZvLT5jb2xvclNwYWNl
LmZ1bGxSYW5nZSA9IHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcgPT0gVlBDb25maWd1cmF0aW9u
UmFuZ2U6OkZ1bGxSYW5nZTsKKyAgICB2aWRlb0luZm8tPmNvbG9yU3BhY2UucHJpbWFyaWVzID0g
Y29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKHJlY29yZC5jb2xvclByaW1hcmll
cyk7CisgICAgdmlkZW9JbmZvLT5jb2xvclNwYWNlLnRyYW5zZmVyID0gY29udmVydFRvUGxhdGZv
cm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKHJlY29yZC50cmFuc2ZlckNoYXJhY3Rlcmlz
dGljcyk7CisgICAgdmlkZW9JbmZvLT5jb2xvclNwYWNlLm1hdHJpeCA9IGNvbnZlcnRUb1BsYXRm
b3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMocmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cyk7Cisg
ICAgdmlkZW9JbmZvLT5jb2RlY05hbWUgPSByZWNvcmQuY29kZWNOYW1lID09ICJ2cDA5IiA/ICd2
cDA5JyA6ICd2cDA4JzsKKyAgICByZXR1cm4gdmlkZW9JbmZvOwogfQogCi1SZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVy
UGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYgcGFyc2VyLCBjb25zdCB3
ZWJtOjpFbGVtZW50PENvbG91cj4mIGNvbG9yKQorUmVmPFZpZGVvSW5mbz4gY3JlYXRlVmlkZW9J
bmZvRnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXIm
IHBhcnNlciwgY29uc3Qgd2VibTo6RWxlbWVudDxDb2xvdXI+JiBjb2xvcikKIHsKICAgICBWUENv
ZGVjQ29uZmlndXJhdGlvblJlY29yZCByZWNvcmQ7CiAKQEAgLTYxNiwxMCArNjI1LDEwIEBAIFJl
dGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZy
b21WUDlIZWFkZXJQYXJzZXIoY29uCiAgICAgICAgICAgICByZWNvcmQuY29sb3JQcmltYXJpZXMg
PSBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb2xvclZhbHVlLnByaW1hcmllcy52YWx1ZSgpKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0Nv
bmZpZ3VyYXRpb25SZWNvcmQocmVjb3JkLCBwYXJzZXIud2lkdGgoKSwgcGFyc2VyLmhlaWdodCgp
KTsKKyAgICByZXR1cm4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVj
b3JkKHJlY29yZCwgcGFyc2VyLndpZHRoKCksIHBhcnNlci5oZWlnaHQoKSk7CiB9CiAKLXN0ZDo6
b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIodWludDhfdCogZnJh
bWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKQorc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4g
cGFyc2VWUDhGcmFtZUhlYWRlcihjb25zdCB1aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFt
ZVNpemUpCiB7CiAgICAgLy8gVlA4IGZyYW1lIGhlYWRlcnMgYXJlIGRlZmluZWQgaW4gUkZDIDYz
ODY6IDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjM4Nj4uCiAKQEAgLTY4MSw3ICs2
OTAsNyBAQCBzdGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVy
KHVpbnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYQogICAgIHJldHVybiBoZWFkZXI7CiB9CiAK
LVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlv
bkZyb21WUDhIZWFkZXIoY29uc3QgVlA4RnJhbWVIZWFkZXImIGhlYWRlciwgY29uc3Qgd2VibTo6
RWxlbWVudDxDb2xvdXI+JiBjb2xvcikKK1JlZjxWaWRlb0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zy
b21WUDhIZWFkZXIoY29uc3QgVlA4RnJhbWVIZWFkZXImIGhlYWRlciwgY29uc3Qgd2VibTo6RWxl
bWVudDxDb2xvdXI+JiBjb2xvcikKIHsKICAgICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCBy
ZWNvcmQ7CiAgICAgcmVjb3JkLmNvZGVjTmFtZSA9ICJ2cDA4IjsKQEAgLTcxMSw3ICs3MjAsNyBA
QCBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRp
b25Gcm9tVlA4SGVhZGVyKGNvbnN0IFZQOAogICAgICAgICAgICAgcmVjb3JkLmNvbG9yUHJpbWFy
aWVzID0gY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29sb3JWYWx1ZS5wcmltYXJpZXMudmFsdWUo
KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29k
ZWNDb25maWd1cmF0aW9uUmVjb3JkKHJlY29yZCwgaGVhZGVyLndpZHRoLCBoZWFkZXIuaGVpZ2h0
KTsKKyAgICByZXR1cm4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVj
b3JkKHJlY29yZCwgaGVhZGVyLndpZHRoLCBoZWFkZXIuaGVpZ2h0KTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRp
bGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
Yk1BdWRpb1V0aWxpdGllc0NvY29hLmgKaW5kZXggODcxMDRkOGI3YjM1N2MxNjBiNmRjY2M0MWJm
ZTFmODllMGE2YzI3MS4uYTk4MDk4YzVhMzlmY2I0NTBiMmZmOWM3NjEwZDk3NGU4MjQ2ZDRkNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1
ZGlvVXRpbGl0aWVzQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oCkBAIC0yNywxNiArMjcsMTcgQEAKIAog
I2lmIFBMQVRGT1JNKENPQ09BKQogCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogY2xhc3MgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKLXR5cGVk
ZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3Jp
cHRpb25SZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEF1ZGlvSW5mbzsKKwog
V0VCQ09SRV9FWFBPUlQgYm9vbCBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKTsKIFdFQkNPUkVf
RVhQT1JUIGJvb2wgcmVnaXN0ZXJWb3JiaXNEZWNvZGVySWZOZWVkZWQoKTsKLVJldGFpblB0cjxD
TUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9u
KHNpemVfdCwgY29uc3Qgdm9pZCopOworUmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlVm9yYmlzQXVk
aW9JbmZvKHNpemVfdCwgY29uc3Qgdm9pZCopOwogCiBzdHJ1Y3QgT3B1c0Nvb2tpZUNvbnRlbnRz
IHsKICAgICB1aW50OF90IHZlcnNpb24geyAwIH07CkBAIC01NSw4ICs1NiwxMCBAQCBzdHJ1Y3Qg
T3B1c0Nvb2tpZUNvbnRlbnRzIHsKIAogV0VCQ09SRV9FWFBPUlQgYm9vbCBpc09wdXNEZWNvZGVy
QXZhaWxhYmxlKCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIHJlZ2lzdGVyT3B1c0RlY29kZXJJZk5l
ZWRlZCgpOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga09wdXNIZWFkZXJTaXplID0gMTk7Citz
dGF0aWMgY29uc3RleHByIHNpemVfdCBrT3B1c01pbmltdW1GcmFtZURhdGFTaXplID0gMjsKIGJv
b2wgcGFyc2VPcHVzUHJpdmF0ZURhdGEoc2l6ZV90IHByaXZhdGVEYXRhU2l6ZSwgY29uc3Qgdm9p
ZCogcHJpdmF0ZURhdGEsIHNpemVfdCBmcmFtZURhdGFTaXplLCBjb25zdCB2b2lkKiBmcmFtZURh
dGEsIE9wdXNDb29raWVDb250ZW50cyYpOwotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25S
ZWY+IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGNvbnN0IE9wdXNDb29raWVDb250
ZW50cyYpOworUmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlT3B1c0F1ZGlvSW5mbyhjb25zdCBPcHVz
Q29va2llQ29udGVudHMmKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1t
CmluZGV4IDdlMGFmYjI5MGRkODVhNzdmOWJlZmZmNDk0N2E0N2I3NTM1ZWIyZjQuLjY2MDlmNGFl
YjY3YTJkZjY0MWYwNzJlNTgxNjBmOWFmNWQzNmRmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxp
dGllc0NvY29hLm1tCkBAIC0zMCwxMiArMzAsMTMgQEAKIAogI2ltcG9ydCAiQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVNhbXBs
ZS5oIgogI2ltcG9ydCAiTWVkaWFVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlBsYXRmb3JtTWVkaWFT
ZXNzaW9uTWFuYWdlci5oIgorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0IDxBdWRp
b1Rvb2xib3gvQXVkaW9Db2RlYy5oPgogI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvQ29tcG9u
ZW50Lmg+CiAjaW1wb3J0IDxBdWRpb1Rvb2xib3gvQXVkaW9Gb3JtYXQuaD4KLSNpbXBvcnQgPENv
cmVNZWRpYS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CiAjaW1wb3J0IDxkbGZjbi5oPgogI2ltcG9y
dCA8d3RmL0ZsaXBCeXRlcy5oPgogI2ltcG9ydCA8d3RmL1NlY29uZHMuaD4KQEAgLTc2LDcgKzc3
LDcgQEAgc3RhdGljIGJvb2wgcmVnaXN0ZXJEZWNvZGVyRmFjdG9yeShjb25zdCBjaGFyKiBkZWNv
ZGVyTmFtZSwgT1NUeXBlIGRlY29kZXJUeXBlKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBSZXRhaW5Q
dHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZv
ckZvcm1hdChPU1R5cGUgZm9ybWF0SUQsIFZlY3Rvcjx1aW50OF90PiYmIG1hZ2ljQ29va2llKQor
c3RhdGljIFJlZlB0cjxBdWRpb0luZm8+IGNyZWF0ZUF1ZGlvSW5mb0ZvckZvcm1hdChPU1R5cGUg
Zm9ybWF0SUQsIFZlY3Rvcjx1aW50OF90PiYmIG1hZ2ljQ29va2llKQogewogICAgIEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbiBhc2JkIHsgfTsKICAgICBhc2JkLm1Gb3JtYXRJRCA9IGZvcm1h
dElEOwpAQCAtODcsOCArODgsMTYgQEAgc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0
aW9uUmVmPiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KE8KICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVz
Y3JpcHRpb24oQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGFzYmQpLCBtYWdpY0Nvb2tpZS5zaXpl
KCksIG1hZ2ljQ29va2llLmRhdGEoKSk7CisgICAgYXV0byBhdWRpb0luZm8gPSBBdWRpb0luZm86
OmNyZWF0ZSgpOworICAgIGF1ZGlvSW5mby0+Y29kZWNOYW1lID0gZm9ybWF0SUQ7CisgICAgYXVk
aW9JbmZvLT5yYXRlID0gYXNiZC5tU2FtcGxlUmF0ZTsKKyAgICBhdWRpb0luZm8tPmNoYW5uZWxz
ID0gYXNiZC5tQ2hhbm5lbHNQZXJGcmFtZTsKKyAgICBhdWRpb0luZm8tPmZyYW1lc1BlclBhY2tl
dCA9IGFzYmQubUZyYW1lc1BlclBhY2tldDsKKyAgICBhdWRpb0luZm8tPmJpdERlcHRoID0gMTY7
CisgICAgYXVkaW9JbmZvLT5jb29raWVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92
ZShtYWdpY0Nvb2tpZSkpOworICAgIHJldHVybiBhdWRpb0luZm87CiB9CisKICNlbmRpZiAvLyBF
TkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykKIAogI2lmIEVOQUJMRShPUFVTKQpAQCAtMjAw
LDcgKzIwOSw3IEBAIGJvb2wgcGFyc2VPcHVzUHJpdmF0ZURhdGEoc2l6ZV90IGNvZGVjUHJpdmF0
ZVNpemUsIGNvbnN0IHZvaWQqIGNvZGVjUHJpdmF0ZURhdGEsCiAKICAgICBhdXRvKiBwcml2YXRl
RGF0YVB0ciA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihjb2RlY1ByaXZhdGVEYXRhKTsK
IAotICAgIGlmIChjb2RlY1ByaXZhdGVTaXplIDwgMTkpCisgICAgaWYgKGNvZGVjUHJpdmF0ZVNp
emUgPCBrT3B1c0hlYWRlclNpemUpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyAxLiBN
YWdpYyBTaWduYXR1cmU6CkBAIC0zNjIsNyArMzcxLDcgQEAgYm9vbCByZWdpc3Rlck9wdXNEZWNv
ZGVySWZOZWVkZWQoKQogI2VuZGlmCiB9CiAKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9u
UmVmPiBjcmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBPcHVzQ29va2llQ29u
dGVudHMmIGNvb2tpZUNvbnRlbnRzKQorUmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlT3B1c0F1ZGlv
SW5mbyhjb25zdCBPcHVzQ29va2llQ29udGVudHMmIGNvb2tpZUNvbnRlbnRzKQogewogI2lmIEVO
QUJMRShPUFVTKQogICAgIGlmICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQpAQCAtMzcyLDcg
KzM4MSw3IEBAIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVPcHVzQXVk
aW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBPcHVzQ29vCiAgICAgaWYgKCFjb29raWVEYXRhLnNp
emUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gY3JlYXRlQXVkaW9G
b3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdCgnb3B1cycsIFdURk1vdmUoY29va2llRGF0YSkpOwor
ICAgIHJldHVybiBjcmVhdGVBdWRpb0luZm9Gb3JGb3JtYXQoJ29wdXMnLCBXVEZNb3ZlKGNvb2tp
ZURhdGEpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvb2tpZUNvbnRlbnRzKTsKICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTQ2NSw3ICs0NzQsNyBAQCBib29sIHJlZ2lzdGVyVm9yYmlzRGVj
b2RlcklmTmVlZGVkKCkKICNlbmRpZgogfQogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlv
blJlZj4gY3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXplX3QgcHJpdmF0ZURh
dGFTaXplLCBjb25zdCB2b2lkKiBwcml2YXRlRGF0YSkKK1JlZlB0cjxBdWRpb0luZm8+IGNyZWF0
ZVZvcmJpc0F1ZGlvSW5mbyhzaXplX3QgcHJpdmF0ZURhdGFTaXplLCBjb25zdCB2b2lkKiBwcml2
YXRlRGF0YSkKIHsKICNpZiBFTkFCTEUoVk9SQklTKQogICAgIGlmICghaXNWb3JiaXNEZWNvZGVy
QXZhaWxhYmxlKCkpCkBAIC00NzUsNyArNDg0LDcgQEAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3Jp
cHRpb25SZWY+IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90IHByaXYK
ICAgICBpZiAoIWNvb2tpZURhdGEuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KCd2b3JiJywg
V1RGTW92ZShjb29raWVEYXRhKSk7CisgICAgcmV0dXJuIGNyZWF0ZUF1ZGlvSW5mb0ZvckZvcm1h
dCgndm9yYicsIFdURk1vdmUoY29va2llRGF0YSkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
cHJpdmF0ZURhdGFTaXplKTsKICAgICBVTlVTRURfUEFSQU0ocHJpdmF0ZURhdGEpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2Ft
cGxlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuaAppbmRleCBmZjhjMWE4YjQ4MWQ3ZjMzY2MyNDdiNjRk
ZjFiOGZhYzcwY2JkZGQyLi5iZTRhMGZlM2MzYzk5N2E4ZGJlMTJmYjZmNGZmOWQxYWVjOGFkZGU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFTYW1wbGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuaApAQCAtNTcsMTMgKzU3LDEwIEBA
IHB1YmxpYzoKICAgICBGbG9hdFNpemUgcHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fcHJlc2VudGF0aW9uU2l6ZTsgfQogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1w
c0J5KGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0VGltZXN0YW1wcyhj
b25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKLSAgICBib29sIGlz
RGl2aXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBzdGQ6OnBh
aXI8UmVmUHRyPE1lZGlhU2FtcGxlPiwgUmVmUHRyPE1lZGlhU2FtcGxlPj4gZGl2aWRlKGNvbnN0
IE1lZGlhVGltZSYsIFVzZUVuZFRpbWUpIG92ZXJyaWRlICB7IHJldHVybiB7IG51bGxwdHIsIG51
bGxwdHIgfTsgfQogICAgIFJlZjxNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHko
KSBjb25zdCBvdmVycmlkZTsKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fZmxhZ3M7IH0KICAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgp
IGNvbnN0IG92ZXJyaWRlOwogICAgIFBsYXRmb3JtU2FtcGxlOjpUeXBlIHBsYXRmb3JtU2FtcGxl
VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRmb3JtU2FtcGxlOjpHU3RyZWFtZXJT
YW1wbGVUeXBlOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXRSR0JBSW1hZ2VEYXRhKCkgY29uc3QgZmluYWw7CiAgICAgVmlkZW9Sb3RhdGlvbiB2
aWRlb1JvdGF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV92aWRlb1JvdGF0aW9uOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01v
Y2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
bWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCmluZGV4IDBhOTRhY2YxYTFl
MTM2NmY2YTU3MjU4OGI3NzA0MWU0YzNjNjQ3MzIuLmQ0Y2ZlNDE4ZDVjNjEyMDY1N2RlMGQwYmMw
MjAzNmZiMTBhODIwZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
bWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3Bw
CkBAIC02MiwxMyArNjIsMTAgQEAgcHJpdmF0ZToKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNv
bnN0IG92ZXJyaWRlOwogICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgUGxhdGZvcm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZvcm1TYW1wbGU6Ok1vY2tTYW1wbGVCb3hUeXBl
OyB9Ci0gICAgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIEZsb2F0U2l6ZSBwcmVzZW50YXRpb25T
aXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRTaXplKCk7IH0KICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIG9mZnNldFRpbWVzdGFt
cHNCeShjb25zdCBNZWRpYVRpbWUmIG9mZnNldCkgb3ZlcnJpZGUgeyBtX2JveC5vZmZzZXRUaW1l
c3RhbXBzQnkob2Zmc2V0KTsgfQogICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRp
bWUmIHByZXNlbnRhdGlvblRpbWVzdGFtcCwgY29uc3QgTWVkaWFUaW1lJiBkZWNvZGVUaW1lc3Rh
bXApIG92ZXJyaWRlIHsgbV9ib3guc2V0VGltZXN0YW1wcyhwcmVzZW50YXRpb25UaW1lc3RhbXAs
IGRlY29kZVRpbWVzdGFtcCk7IH0KLSAgICBib29sIGlzRGl2aXNhYmxlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBzdGQ6OnBhaXI8UmVmUHRyPE1lZGlhU2FtcGxlPiwg
UmVmUHRyPE1lZGlhU2FtcGxlPj4gZGl2aWRlKGNvbnN0IE1lZGlhVGltZSYsIFVzZUVuZFRpbWUp
IG92ZXJyaWRlIHsgcmV0dXJuIHtudWxscHRyLCBudWxscHRyfTsgfQogICAgIFJlZjxNZWRpYVNh
bXBsZT4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHVu
c2lnbmVkIGdlbmVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2JveC5nZW5lcmF0aW9uKCk7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYUZvcm1hdFJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3Jt
YXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCmluZGV4IDFjMzM4YzZhM2U4Y2JlZmI0YzZl
NGJhZjUwMjFiMTU1MjU0OGZiZmIuLjBjMmU1ZGFkOWM2Zjg3N2ZmM2U2Mjg4OTJlZjM5MDkyYmYy
ZDgyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJl
YWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcApAQCAtMTMyLDQwICsxMzIs
MTIgQEAgdm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6cGFyc2VCeXRlU291cmNlKFJldGFpblB0cjxN
VFBsdWdpbkJ5dGVTb3VyY2VSZWY+JiYgYnl0ZVMKIHsKICAgICBBU1NFUlQoaXNNYWluUnVuTG9v
cCgpKTsKIAotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb250ZW50VHlwZT4gY29udGVudFR5
cGUoInZpZGVvL3dlYm0iX3MpOwotICAgIGF1dG8gcGFyc2VyID0gU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6Y3JlYXRlKGNvbnRlbnRUeXBlKTsKLSAgICBpZiAoIXBhcnNlcikgewotICAgICAgICBM
b2NrZXIgbG9ja2VyIHsgbV9wYXJzZVRyYWNrc0xvY2sgfTsKLSAgICAgICAgbV9wYXJzZVRyYWNr
c1N0YXR1cyA9IGtNVFBsdWdpbkZvcm1hdFJlYWRlckVycm9yX0FsbG9jYXRpb25GYWlsdXJlOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKCFtX2xvZ2dlcikgewogICAgICAgICBt
X2xvZ2dlciA9ICZEb2N1bWVudDo6c2hhcmVkTG9nZ2VyKCk7CiAgICAgICAgIG1fbG9nSWRlbnRp
ZmllciA9IG5leHRMb2dJZGVudGlmaWVyKCk7CiAgICAgfQogCiAgICAgQUxXQVlTX0xPR19JRl9Q
T1NTSUJMRShMT0dJREVOVElGSUVSKTsKLSAgICBwYXJzZXItPnNldExvZ2dlcigqbV9sb2dnZXIs
IG1fbG9nSWRlbnRpZmllcik7Ci0KLSAgICAvLyBTZXQgYSBtaW5pbXVtIGF1ZGlvIHNhbXBsZSBk
dXJhdGlvbiBvZiAwIHNvIHRoZSBwYXJzZXIgY3JlYXRlcyBpbmRpdmlzaWJsZSBzYW1wbGVzIHdp
dGggYnl0ZSBzb3VyY2UgcmFuZ2VzLgotICAgIHBhcnNlci0+c2V0TWluaW11bUF1ZGlvU2FtcGxl
RHVyYXRpb24oMCk7Ci0KLSAgICBwYXJzZXItPnNldENhbGxPbkNsaWVudFRocmVhZENhbGxiYWNr
KFtdKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikgewotICAgICAgICBNZWRpYVRyYWNrUmVh
ZGVyOjpzdG9yYWdlUXVldWUoKS5kaXNwYXRjaChXVEZNb3ZlKGZ1bmN0aW9uKSk7Ci0gICAgfSk7
Ci0KLSAgICBwYXJzZXItPnNldERpZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2soW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XShTb3VyY2VCdWZmZXJQYXJzZXI6Oklu
aXRpYWxpemF0aW9uU2VnbWVudCYmIGluaXRpYWxpemF0aW9uU2VnbWVudCkgewotICAgICAgICBk
aWRQYXJzZVRyYWNrcyhXVEZNb3ZlKGluaXRpYWxpemF0aW9uU2VnbWVudCksIG5vRXJyKTsKLSAg
ICB9KTsKLQotICAgIHBhcnNlci0+c2V0RGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2Fs
bGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSh1aW50NjRfdCBlcnJv
ckNvZGUpIHsKLSAgICAgICAgZGlkUGFyc2VUcmFja3MoeyB9LCBlcnJvckNvZGUpOwotICAgIH0p
OwotCi0gICAgcGFyc2VyLT5zZXREaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2soW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XShSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiYmIG1l
ZGlhU2FtcGxlLCB1aW50NjRfdCB0cmFja0lELCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSkgewot
ICAgICAgICBkaWRQcm92aWRlTWVkaWFEYXRhKFdURk1vdmUobWVkaWFTYW1wbGUpLCB0cmFja0lE
LCBtZWRpYVR5cGUpOwotICAgIH0pOwogCiAgICAgTG9ja2VyIGxvY2tlciB7IG1fcGFyc2VUcmFj
a3NMb2NrIH07CiAgICAgbV9ieXRlU291cmNlID0gV1RGTW92ZShieXRlU291cmNlKTsKQEAgLTE3
MywxNCArMTQ1LDM0IEBAIHZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OnBhcnNlQnl0ZVNvdXJjZShS
ZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiYmIGJ5dGVTCiAgICAgbV9kdXJhdGlvbiA9
IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKICAgICBtX3RyYWNrUmVhZGVycy5jbGVhcigpOwog
Ci0gICAgcmVhZGVyUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7
ICp0aGlzIH0sIGJ5dGVTb3VyY2UgPSBtX2J5dGVTb3VyY2UsIHBhcnNlciA9IHBhcnNlci5yZWxl
YXNlTm9uTnVsbCgpXSgpIG11dGFibGUgewotICAgICAgICBwYXJzZXItPmFwcGVuZERhdGEoV1RG
TW92ZShieXRlU291cmNlKSk7Ci0gICAgICAgIE1lZGlhVHJhY2tSZWFkZXI6OnN0b3JhZ2VRdWV1
ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgcGFyc2Vy
ID0gV1RGTW92ZShwYXJzZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgZmluaXNoUGFyc2lu
ZyhXVEZNb3ZlKHBhcnNlcikpOworICAgIC8vIFRPRE86IHdoeSBkbyB3ZSBuZWVkIGEgc3RvcmFn
ZSBxdWV1ZSBkaWZmZXJlbnQgdG8gcmVhZGVyJ3MgcXVldWU/CisgICAgcmVhZGVyUXVldWUoKS5k
aXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGJ5dGVTb3VyY2Ug
PSBtX2J5dGVTb3VyY2VdKCkgbXV0YWJsZSB7CisgICAgICAgIFdlYk1QYXJzZXIgcGFyc2VyKCp0
aGlzKTsKKyAgICAgICAgcGFyc2VyLnNldExvZ2dlcigqbV9sb2dnZXIsIG1fbG9nSWRlbnRpZmll
cik7CisgICAgICAgIHBhcnNlci5jcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKCk7CisgICAgICAgIGF1
dG8gcmVzdWx0ID0gcGFyc2VyLnBhcnNlKFdURk1vdmUoYnl0ZVNvdXJjZSkpOworICAgICAgICBN
ZWRpYVRyYWNrUmVhZGVyOjpzdG9yYWdlUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IFJlZiB7ICp0aGlzIH0sIHJlc3VsdF0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBp
ZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmV0dXJuVmFsdWUoKSkKKyAgICAg
ICAgICAgICAgICBkaWRQYXJzZVRyYWNrcyh7IH0sIHJlc3VsdC5yZXR1cm5WYWx1ZSgpKTsKKyAg
ICAgICAgICAgIGZpbmlzaFBhcnNpbmcoKTsKICAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKK3Zv
aWQgTWVkaWFGb3JtYXRSZWFkZXI6OnBhcnNlZEluaXRpYWxpemF0aW9uRGF0YShTb3VyY2VCdWZm
ZXJQYXJzZXI6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmIGluaXRpYWxpemF0aW9uU2VnbWVudCkK
K3sKKyAgICBNZWRpYVRyYWNrUmVhZGVyOjpzdG9yYWdlUXVldWUoKS5kaXNwYXRjaChbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGluaXRpYWxpemF0aW9uU2VnbWVudCA9IFdU
Rk1vdmUoaW5pdGlhbGl6YXRpb25TZWdtZW50KV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGRpZFBh
cnNlVHJhY2tzKFdURk1vdmUoaW5pdGlhbGl6YXRpb25TZWdtZW50KSwgbm9FcnIpOworICAgIH0p
OworfQorCit2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1w
bGVzQmxvY2smJiBtZWRpYVNhbXBsZXMpCit7CisgICAgTWVkaWFUcmFja1JlYWRlcjo6c3RvcmFn
ZVF1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBt
ZWRpYVNhbXBsZXMgPSBXVEZNb3ZlKG1lZGlhU2FtcGxlcyldICgpIG11dGFibGUgeworICAgICAg
ICBkaWRQcm92aWRlTWVkaWFEYXRhKFdURk1vdmUobWVkaWFTYW1wbGVzKSk7CisgICAgfSk7Cit9
CisKIHZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OmRpZFBhcnNlVHJhY2tzKFNvdXJjZUJ1ZmZlclBy
aXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmIHNlZ21lbnQsIHVpbnQ2NF90IGVy
cm9yQ29kZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CkBAIC0yMjUsMjAgKzIx
NywyMCBAQCB2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpkaWRQYXJzZVRyYWNrcyhTb3VyY2VCdWZm
ZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvbgogICAgIG1faW5pdCA9IHRydWU7CiB9CiAK
LXZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OmRpZFByb3ZpZGVNZWRpYURhdGEoUmVmPE1lZGlhU2Ft
cGxlQVZGT2JqQz4mJiBtZWRpYVNhbXBsZSwgdWludDY0X3QgdHJhY2tJRCwgY29uc3QgU3RyaW5n
JikKK3ZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OmRpZFByb3ZpZGVNZWRpYURhdGEoTWVkaWFTYW1w
bGVzQmxvY2smJiBtZWRpYVNhbXBsZXMpCiB7CiAgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkp
OwogCiAgICAgTG9ja2VyIGxvY2tlciB7IG1fcGFyc2VUcmFja3NMb2NrIH07CiAgICAgYXV0byB0
cmFja0luZGV4ID0gbV90cmFja1JlYWRlcnMuZmluZElmKFsmXShhdXRvJiB0cmFjaykgewotICAg
ICAgICByZXR1cm4gdHJhY2stPnRyYWNrSUQoKSA9PSB0cmFja0lEOworICAgICAgICByZXR1cm4g
dHJhY2stPnRyYWNrSUQoKSA9PSBtZWRpYVNhbXBsZXMuaW5mbygpLT50cmFja0lEOwogICAgIH0p
OwogCiAgICAgaWYgKHRyYWNrSW5kZXggIT0gbm90Rm91bmQpCi0gICAgICAgIG1fdHJhY2tSZWFk
ZXJzW3RyYWNrSW5kZXhdLT5hZGRTYW1wbGUoV1RGTW92ZShtZWRpYVNhbXBsZSksIG1fYnl0ZVNv
dXJjZS5nZXQoKSk7CisgICAgICAgIG1fdHJhY2tSZWFkZXJzW3RyYWNrSW5kZXhdLT5hZGRTYW1w
bGUoV1RGTW92ZShtZWRpYVNhbXBsZXMpLCBtX2J5dGVTb3VyY2UuZ2V0KCkpOwogfQogCi12b2lk
IE1lZGlhRm9ybWF0UmVhZGVyOjpmaW5pc2hQYXJzaW5nKFJlZjxTb3VyY2VCdWZmZXJQYXJzZXI+
JiYgcGFyc2VyKQordm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6ZmluaXNoUGFyc2luZygpCiB7CiAg
ICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOwogICAgIEFMV0FZU19MT0dfSUZfUE9TU0lCTEUo
TE9HSURFTlRJRklFUik7CkBAIC0yNTgsMTEgKzI1MCw2IEBAIHZvaWQgTWVkaWFGb3JtYXRSZWFk
ZXI6OmZpbmlzaFBhcnNpbmcoUmVmPFNvdXJjZUJ1ZmZlclBhcnNlcj4mJiBwYXJzZXIpCiAgICAg
ICAgIGlmIChncmVhdGVzdFByZXNlbnRhdGlvblRpbWUuaXNWYWxpZCgpKQogICAgICAgICAgICAg
bV9kdXJhdGlvbiA9IGdyZWF0ZXN0UHJlc2VudGF0aW9uVGltZTsKICAgICB9Ci0KLSAgICBwYXJz
ZXItPnNldERpZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2sobnVsbHB0cik7Ci0gICAg
cGFyc2VyLT5zZXREaWRFbmNvdW50ZXJFcnJvckR1cmluZ1BhcnNpbmdDYWxsYmFjayhudWxscHRy
KTsKLSAgICBwYXJzZXItPnNldERpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjayhudWxscHRyKTsK
LSAgICBwYXJzZXItPnJlc2V0UGFyc2VyU3RhdGUoKTsKIH0KIAogT1NTdGF0dXMgTWVkaWFGb3Jt
YXRSZWFkZXI6OmNvcHlQcm9wZXJ0eShDRlN0cmluZ1JlZiBrZXksIENGQWxsb2NhdG9yUmVmIGFs
bG9jYXRvciwgdm9pZCogdmFsdWVDb3B5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuaAppbmRl
eCAxNWQ1NTczNjMzODE3NDYwYzJlNjIwNDQxOTAxMDIzY2Y4NmI0YTkzLi4xYTQ4YzE2ODBlODc1
ZGM2MjUyMjg3NDE1ZjU0ODhjOTJjNTg4MDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIu
aApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCiAKICNp
bmNsdWRlICJDb3JlTWVkaWFXcmFwcGVkLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Tb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Tb3VyY2VCdWZmZXJQcml2YXRlQ2xp
ZW50Lmg+CiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CkBAIC0zNiwxNSArMzcsMTUgQEAKIERFQ0xBUkVfQ09SRV9NRURJQV9UUkFJVFMoRm9ybWF0UmVh
ZGVyKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTWVkaWFTYW1wbGVBVkZPYmpDOwot
Y2xhc3MgU291cmNlQnVmZmVyUGFyc2VyOworY2xhc3MgTWVkaWFTYW1wbGVzQmxvY2s7CitjbGFz
cyBXZWJNUGFyc2VyOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTWVkaWFUcmFj
a1JlYWRlcjsKIAotY2xhc3MgTWVkaWFGb3JtYXRSZWFkZXIgZmluYWwgOiBwdWJsaWMgQ29yZU1l
ZGlhV3JhcHBlZDxNZWRpYUZvcm1hdFJlYWRlcj4geworY2xhc3MgTWVkaWFGb3JtYXRSZWFkZXIg
ZmluYWwgOiBwdWJsaWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYUZvcm1hdFJlYWRlcj4gLCBwdWJs
aWMgV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2sgewogcHVibGljOgogICAgIHVzaW5nIENv
cmVNZWRpYVdyYXBwZWQ8TWVkaWFGb3JtYXRSZWFkZXI+Ojp1bndyYXA7CiAKQEAgLTY0LDEyICs2
NSwxNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE1lZGlhRm9ybWF0UmVhZGVy
KEFsbG9jYXRvciYmKTsKIAorICAgIC8vIFdlYk1QYXJzZXI6OkNhbGxiYWNrCisgICAgdm9pZCBw
YXJzZWRJbml0aWFsaXphdGlvbkRhdGEoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyOjpJbml0
aWFsaXphdGlvblNlZ21lbnQmJikgZmluYWw7CisgICAgdm9pZCBwYXJzZWRNZWRpYURhdGEoV2Vi
Q29yZTo6TWVkaWFTYW1wbGVzQmxvY2smJikgZmluYWw7CisKICAgICB2b2lkIHBhcnNlQnl0ZVNv
dXJjZShSZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiYmKTsKICAgICB2b2lkIGRpZFBh
cnNlVHJhY2tzKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0
aW9uU2VnbWVudCYmLCB1aW50NjRfdCBlcnJvckNvZGUpOwogICAgIHZvaWQgZGlkU2VsZWN0Vmlk
ZW9UcmFjayhXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZSYsIGJvb2wpIHsgfQogICAgIHZvaWQg
ZGlkRW5hYmxlQXVkaW9UcmFjayhXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZSYsIGJvb2wpIHsg
fQotICAgIHZvaWQgZGlkUHJvdmlkZU1lZGlhRGF0YShSZWY8V2ViQ29yZTo6TWVkaWFTYW1wbGVB
VkZPYmpDPiYmLCB1aW50NjRfdCwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBmaW5pc2hQYXJz
aW5nKFJlZjxXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXI+JiYpOworICAgIHZvaWQgZGlkUHJv
dmlkZU1lZGlhRGF0YShXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jayYmKTsKKyAgICB2b2lkIGZp
bmlzaFBhcnNpbmcoKTsKIAogICAgIC8vIENNQmFzZUNsYXNzCiAgICAgU3RyaW5nIGRlYnVnRGVz
Y3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiAiV2ViS2l0OjpNZWRpYUZvcm1hdFJlYWRl
ciJfczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0
UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAKaW5kZXggNzhmNzMx
MzRjZTZhN2EyMTRjZGM5ZGUwNWM0NzUzNzJlMTdjOWEzZC4uNzU2MjUyYzQyMWY3NzQwMmRjYWUz
MzViNjJjOTU3Y2YwMmMxYTQ0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2Uu
Y3BwCkBAIC0zMyw1NiArMzMsNzMgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCi1NZWRpYVNhbXBsZUJ5dGVSYW5nZTo6TWVkaWFTYW1wbGVCeXRlUmFu
Z2UoTWVkaWFTYW1wbGUmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2Us
IHVpbnQ2NF90IHRyYWNrSUQpCi0gICAgOiBNZWRpYVNhbXBsZUFWRk9iakMobnVsbHB0cikKLSAg
ICAsIG1fcHJlc2VudGF0aW9uVGltZShzYW1wbGUucHJlc2VudGF0aW9uVGltZSgpKQotICAgICwg
bV9kZWNvZGVUaW1lKHNhbXBsZS5kZWNvZGVUaW1lKCkpCi0gICAgLCBtX2R1cmF0aW9uKHNhbXBs
ZS5kdXJhdGlvbigpKQotICAgICwgbV9ieXRlUmFuZ2UoKnNhbXBsZS5ieXRlUmFuZ2UoKSkKLSAg
ICAsIG1fdHJhY2tJRCh0cmFja0lEKQotICAgICwgbV9zaXplSW5CeXRlcyhzYW1wbGUuc2l6ZUlu
Qnl0ZXMoKSkKLSAgICAsIG1fcHJlc2VudGF0aW9uU2l6ZShzYW1wbGUucHJlc2VudGF0aW9uU2l6
ZSgpKQorTWVkaWFTYW1wbGVCeXRlUmFuZ2U6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlKE1lZGlhU2Ft
cGxlc0Jsb2NrJiYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSkKKyAg
ICA6IG1fYmxvY2soV1RGTW92ZShzYW1wbGUpKQogICAgICwgbV9ieXRlU291cmNlKGJ5dGVTb3Vy
Y2UpCi0gICAgLCBtX2ZsYWdzKHNhbXBsZS5mbGFncygpKQogewotICAgIEFTU0VSVCghaXNNYWlu
UnVuTG9vcCgpKTsKLSAgICBBU1NFUlQobV9kZWNvZGVUaW1lID09IG1fcHJlc2VudGF0aW9uVGlt
ZSB8fCBtX2RlY29kZVRpbWUgPT0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKTsKLSAgICBhdXRv
IHBsYXRmb3JtU2FtcGxlID0gc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCk7Ci0gICAgc3dpdGNoIChw
bGF0Zm9ybVNhbXBsZS50eXBlKSB7Ci0gICAgY2FzZSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVC
dWZmZXJUeXBlOgotICAgICAgICBtX2Zvcm1hdERlc2NyaXB0aW9uID0gUEFMOjpDTVNhbXBsZUJ1
ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHBsYXRmb3JtU2FtcGxlLnNhbXBsZS5jbVNhbXBsZUJ1
ZmZlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5n
ZVNhbXBsZVR5cGU6Ci0gICAgICAgIG1fZm9ybWF0RGVzY3JpcHRpb24gPSBwbGF0Zm9ybVNhbXBs
ZS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29uZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KKyAgICBBU1NFUlQoIW1fYmxvY2suaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxNZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlPihtX2Jsb2NrLmxhc3QoKS5kYXRh
KSk7CiB9CiAKIEF0b21TdHJpbmcgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnRyYWNrSUQoKSBjb25z
dAogewotICAgIHJldHVybiBBdG9tU3RyaW5nOjpudW1iZXIobV90cmFja0lEKTsKKyAgICByZXR1
cm4gQXRvbVN0cmluZzo6bnVtYmVyKG1fYmxvY2suaW5mbygpLT50cmFja0lEKTsKIH0KIAogUGxh
dGZvcm1TYW1wbGUgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnBsYXRmb3JtU2FtcGxlKCkgY29uc3QK
IHsKKyAgICBBU1NFUlQobV9ibG9jay5pbmZvKCkpOwogICAgIHJldHVybiB7CiAgICAgICAgIFBs
YXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlLAotICAgICAgICB7IC5ieXRlUmFuZ2VT
YW1wbGUgPSBzdGQ6Om1ha2VfcGFpcihtX2J5dGVTb3VyY2UuZ2V0KCksIG1fZm9ybWF0RGVzY3Jp
cHRpb24uZ2V0KCkpIH0sCisgICAgICAgIHsgLmJ5dGVSYW5nZVNhbXBsZSA9IHN0ZDo6bWFrZV9w
YWlyKG1fYnl0ZVNvdXJjZS5nZXQoKSwgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcigqbV9ibG9jay5p
bmZvKCkpKSB9LAogICAgIH07CiB9CiAKLXZvaWQgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6Om9mZnNl
dFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmIG9mZnNldCkKK01lZGlhVGltZSBNZWRpYVNh
bXBsZUJ5dGVSYW5nZTo6cHJlc2VudGF0aW9uVGltZSgpIGNvbnN0CiB7Ci0gICAgc2V0VGltZXN0
YW1wcyhwcmVzZW50YXRpb25UaW1lKCkgKyBvZmZzZXQsIGRlY29kZVRpbWUoKSArIG9mZnNldCk7
CisgICAgcmV0dXJuIG1fYmxvY2subGFzdCgpLnByZXNlbnRhdGlvblRpbWU7CiB9CiAKLXZvaWQg
TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiBwcmVz
ZW50YXRpb25UaW1lLCBjb25zdCBNZWRpYVRpbWUmIGRlY29kZVRpbWUpCitNZWRpYVRpbWUgTWVk
aWFTYW1wbGVCeXRlUmFuZ2U6OmRlY29kZVRpbWUoKSBjb25zdAogewotICAgIG1fcHJlc2VudGF0
aW9uVGltZSA9IHByZXNlbnRhdGlvblRpbWU7Ci0gICAgbV9kZWNvZGVUaW1lID0gZGVjb2RlVGlt
ZTsKKyAgICByZXR1cm4gbV9ibG9jay5sYXN0KCkuZGVjb2RlVGltZTsKK30KKworTWVkaWFUaW1l
IE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
YmxvY2subGFzdCgpLmR1cmF0aW9uOworfQorCitzaXplX3QgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6
OnNpemVJbkJ5dGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjpnZXQ8TWVkaWFTYW1wbGU6
OkJ5dGVSYW5nZT4obV9ibG9jay5sYXN0KCkuZGF0YSkuYnl0ZUxlbmd0aDsKK30KKworV2ViQ29y
ZTo6RmxvYXRTaXplIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpwcmVzZW50YXRpb25TaXplKCkgY29u
c3QKK3sKKyAgICBpZiAobV9ibG9jay5pc1ZpZGVvKCkpCisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxjb25zdCBWaWRlb0luZm8+KG1fYmxvY2suaW5mbygpKS0+ZGlzcGxheVNpemU7CisgICAgcmV0
dXJuIHsgfTsKK30KKworTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OlNhbXBsZUZsYWdzIE1lZGlhU2Ft
cGxlQnl0ZVJhbmdlOjpmbGFncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNhbXBsZUZsYWdzKHVp
bnQzMl90KG1fYmxvY2subGFzdCgpLmZsYWdzKSB8IE1lZGlhU2FtcGxlOjpIYXNTeW5jSW5mbyk7
Cit9CisKK3N0ZDo6b3B0aW9uYWw8TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OkJ5dGVSYW5nZT4gTWVk
aWFTYW1wbGVCeXRlUmFuZ2U6OmJ5dGVSYW5nZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6
Z2V0PE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2U+KG1fYmxvY2subGFzdCgpLmRhdGEpOworfQorCit2
b2lkIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFU
aW1lJikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBNZWRpYVNhbXBs
ZUJ5dGVSYW5nZTo6c2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRp
bWUmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJl
YWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmgKaW5kZXggYjY2ZjNhMzVhOTZm
N2I1ZDVmOTdhYmQ2ZWRhMDAyNjE1ODI2ZTFlMi4uMjI1Yjk0NDJhNzkyMjQ2ZjRlN2Y4NDgwNmRh
MTNiYTUzYjFhZGNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmgKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmgKQEAgLTI3
LDQ3ICsyNywzNyBAQAogCiAjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKIAotI2luY2x1
ZGUgPFdlYkNvcmUvTWVkaWFTYW1wbGVBVkZPYmpDLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2Nv
YS9NZWRpYVRvb2xib3hTUEkuaD4KLSNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFTYW1wbGUuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIE1lZGlhU2FtcGxlQnl0ZVJhbmdlIGZpbmFsIDog
cHVibGljIFdlYkNvcmU6Ok1lZGlhU2FtcGxlQVZGT2JqQyB7CitjbGFzcyBNZWRpYVNhbXBsZUJ5
dGVSYW5nZSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpNZWRpYVNhbXBsZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUJ5dGVSYW5nZT4gY3JlYXRlKFdlYkNvcmU6Ok1lZGlh
U2FtcGxlJiBzYW1wbGUsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291cmNlLCB1aW50NjRf
dCB0cmFja0lEKQorICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVCeXRlUmFuZ2U+IGNyZWF0ZShX
ZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNlUmVm
IGJ5dGVTb3VyY2UpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNh
bXBsZUJ5dGVSYW5nZShzYW1wbGUsIGJ5dGVTb3VyY2UsIHRyYWNrSUQpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVCeXRlUmFuZ2UoV1RGTW92ZShzYW1wbGUpLCBi
eXRlU291cmNlKSk7CiAgICAgfQogCi0gICAgTWVkaWFUaW1lIHByZXNlbnRhdGlvblRpbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3ByZXNlbnRhdGlvblRpbWU7IH0KLSAgICBNZWRpYVRpbWUg
ZGVjb2RlVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGVjb2RlVGltZTsgfQotICAgIE1l
ZGlhVGltZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAg
ICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NpemVJbkJ5dGVz
OyB9Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIHByZXNlbnRhdGlvblNpemUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3ByZXNlbnRhdGlvblNpemU7IH0KLSAgICBTYW1wbGVGbGFncyBmbGFncygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmxhZ3M7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPEJ5dGVS
YW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9ieXRlUmFuZ2U7IH0KKyAg
ICBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZSgpIGNvbnN0IGZpbmFsOworICAgIE1lZGlhVGlt
ZSBkZWNvZGVUaW1lKCkgY29uc3QgZmluYWw7CisgICAgTWVkaWFUaW1lIGR1cmF0aW9uKCkgY29u
c3QgZmluYWw7CisgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3QgZmluYWw7CisgICAgV2Vi
Q29yZTo6RmxvYXRTaXplIHByZXNlbnRhdGlvblNpemUoKSBjb25zdCBmaW5hbDsKKyAgICBTYW1w
bGVGbGFncyBmbGFncygpIGNvbnN0IGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdl
PiBieXRlUmFuZ2UoKSBjb25zdCBmaW5hbDsKIAogICAgIEF0b21TdHJpbmcgdHJhY2tJRCgpIGNv
bnN0IGZpbmFsOwogICAgIFdlYkNvcmU6OlBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkg
Y29uc3QgZmluYWw7CiAgICAgV2ViQ29yZTo6UGxhdGZvcm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1T
YW1wbGVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gV2ViQ29yZTo6UGxhdGZvcm1TYW1wbGU6
OkJ5dGVSYW5nZVNhbXBsZVR5cGU7IH0KICAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25z
dCBNZWRpYVRpbWUmKSBmaW5hbDsKICAgICB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFU
aW1lJiwgY29uc3QgTWVkaWFUaW1lJikgZmluYWw7CisgICAgUmVmPE1lZGlhU2FtcGxlPiBjcmVh
dGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0IHsgcmV0dXJuICpjb25zdF9jYXN0PE1lZGlhU2Ft
cGxlQnl0ZVJhbmdlKj4odGhpcyk7IH0KIAogcHJpdmF0ZToKLSAgICBNZWRpYVNhbXBsZUJ5dGVS
YW5nZShNZWRpYVNhbXBsZSYsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiwgdWludDY0X3QgdHJhY2tJ
RCk7CisgICAgTWVkaWFTYW1wbGVCeXRlUmFuZ2UoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2sm
JiwgTVRQbHVnaW5CeXRlU291cmNlUmVmKTsKIAotICAgIE1lZGlhVGltZSBtX3ByZXNlbnRhdGlv
blRpbWU7Ci0gICAgTWVkaWFUaW1lIG1fZGVjb2RlVGltZTsKLSAgICBNZWRpYVRpbWUgbV9kdXJh
dGlvbjsKLSAgICBCeXRlUmFuZ2UgbV9ieXRlUmFuZ2U7Ci0gICAgdWludDY0X3QgbV90cmFja0lE
OwotICAgIHNpemVfdCBtX3NpemVJbkJ5dGVzOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3By
ZXNlbnRhdGlvblNpemU7CisgICAgY29uc3QgV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2sgbV9i
bG9jazsKICAgICBSZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiBtX2J5dGVTb3VyY2U7
Ci0gICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fZm9ybWF0RGVzY3JpcHRp
b247Ci0gICAgU2FtcGxlRmxhZ3MgbV9mbGFnczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVy
L01lZGlhU2FtcGxlQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5jcHAKaW5kZXggNmFhMDIzYzY2NTYzNDMyNWI3
NDhiYjNkNzU1ODYwZDA5NDdlMGI0ZS4uNGQ5ZDA5NjViZTQ0ODA0MTBlMTZiMTdjZTRmNjVmZmYy
NGU3OGRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0
UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3BwCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFUcmFja1JlYWRlci5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvQ01VdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01l
ZGlhU2FtcGxlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TYW1wbGVNYXAuaD4KICNpbmNsdWRlIDxw
YWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgpAQCAtMzY3LDcgKzM2OCw3
IEBAIE9TU3RhdHVzIE1lZGlhU2FtcGxlQ3Vyc29yOjpjb3B5Rm9ybWF0RGVzY3JpcHRpb24oQ01G
b3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0CiB7CiAgICAgcmV0dXJuIGdldE1lZGlhU2FtcGxl
KFsmXShNZWRpYVNhbXBsZSYgc2FtcGxlKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0
Zm9ybVNhbXBsZTo6Qnl0ZVJhbmdlU2FtcGxlVHlwZSk7Ci0gICAgICAgICpmb3JtYXREZXNjcmlw
dGlvbk91dCA9IHJldGFpblB0cihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuYnl0ZVJh
bmdlU2FtcGxlLnNlY29uZCkubGVha1JlZigpOworICAgICAgICAqZm9ybWF0RGVzY3JpcHRpb25P
dXQgPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8oc2FtcGxlLnBsYXRmb3Jt
U2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5zZWNvbmQpLmxlYWtSZWYoKTsKICAgICB9
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0
UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuY3BwCmluZGV4IGYwNGM1OTA2ZjFhMTZm
YjNkZjc4YmQ0MzgyOGMwZGM2ZDhkZWI2MWEuLjQ3MjRlYzhkYTNmZDIzMDdjYjY1NzllYzBlMDVh
MTQ2OTkwNjZlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5jcHAKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJNZWRpYVNhbXBsZUJ5dGVSYW5nZS5oIgogI2luY2x1ZGUgIk1lZGlh
U2FtcGxlQ3Vyc29yLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BdWRpb1RyYWNrUHJpdmF0ZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvQ01VdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0luYmFu
ZFRleHRUcmFja1ByaXZhdGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhRGVzY3JpcHRpb24u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NhbXBsZU1hcC5oPgpAQCAtOTcsMTUgKzk4LDE3IEBAIE1l
ZGlhVGltZSBNZWRpYVRyYWNrUmVhZGVyOjpncmVhdGVzdFByZXNlbnRhdGlvblRpbWUoKSBjb25z
dAogICAgIHJldHVybiBsYXN0U2FtcGxlLnByZXNlbnRhdGlvblRpbWUoKSArIGxhc3RTYW1wbGUu
ZHVyYXRpb24oKTsKIH0KIAotdm9pZCBNZWRpYVRyYWNrUmVhZGVyOjphZGRTYW1wbGUoUmVmPE1l
ZGlhU2FtcGxlPiYmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCit2
b2lkIE1lZGlhVHJhY2tSZWFkZXI6OmFkZFNhbXBsZShNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBs
ZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCiB7CiAgICAgQVNTRVJUKCFpc01h
aW5SdW5Mb29wKCkpOwogICAgIExvY2tlciBsb2NrZXIgeyBtX3NhbXBsZVN0b3JhZ2VMb2NrIH07
CiAgICAgaWYgKCFtX3NhbXBsZVN0b3JhZ2UpCiAgICAgICAgIG1fc2FtcGxlU3RvcmFnZSA9IG1h
a2VVbmlxdWU8U2FtcGxlU3RvcmFnZT4oKTsKIAotICAgIEFTU0VSVCghc2FtcGxlLT5pc0Rpdmlz
YWJsZSgpICYmIHNhbXBsZS0+Ynl0ZVJhbmdlKCkpOwotICAgIGF1dG8gc2FtcGxlVG9BZGQgPSBN
ZWRpYVNhbXBsZUJ5dGVSYW5nZTo6Y3JlYXRlKHNhbXBsZS5nZXQoKSwgYnl0ZVNvdXJjZSwgbV90
cmFja0lEKTsKKyAgICBBU1NFUlQoIXNhbXBsZS5pc0VtcHR5KCkpOworICAgIEFTU0VSVChzdGQ6
OmhvbGRzX2FsdGVybmF0aXZlPE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2U+KHNhbXBsZS5sYXN0KCku
ZGF0YSkpOworCisgICAgYXV0byBzYW1wbGVUb0FkZCA9IE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpj
cmVhdGUoV1RGTW92ZShzYW1wbGUpLCBieXRlU291cmNlKTsKIAogICAgIC8vIEZJWE1FOiBFdmVu
IHRob3VnaCBXZWJNIG11eGVyIGd1aWRlbGluZXMgc2F5IHRoaXMgbXVzdCBub3QgaGFwcGVuLCBz
b21lIHZpZGVvIHRyYWNrcyBoYXZlIHR3bwogICAgIC8vIGNvbnNlY3V0aXZlIGZyYW1lcyB3aXRo
IHRoZSBzYW1lIHByZXNlbnRhdGlvbiB0aW1lLiBTYW1wbGVNYXAgd2lsbCBub3Qgc3RvcmUgdGhl
IHNlY29uZCBmcmFtZQpAQCAtMTg1LDcgKzE4OCwxNSBAQCBPU1N0YXR1cyBNZWRpYVRyYWNrUmVh
ZGVyOjpjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYga2V5LCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0
bwogCiAgICAgaWYgKENGRXF1YWwoa2V5LCBQQUw6OmdldF9NZWRpYVRvb2xib3hfa01UUGx1Z2lu
VHJhY2tSZWFkZXJQcm9wZXJ0eV9Gb3JtYXREZXNjcmlwdGlvbkFycmF5KCkpKSB7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obGFzdFNhbXBsZS5wbGF0
Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGUp
OwotICAgICAgICBjb25zdCB2b2lkKiBkZXNjcmlwdGlvbnNbMV0gPSB7IGxhc3RTYW1wbGUucGxh
dGZvcm1TYW1wbGUoKS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29uZCB9OworICAgICAgICBj
b25zdCBUcmFja0luZm8mIHRyYWNrSW5mbyA9IGxhc3RTYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5z
YW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29uZDsKKyAgICAgICAgaWYgKCFtX3RyYWNrSW5mbykg
eworICAgICAgICAgICAgbV90cmFja0luZm8gPSAmbGFzdFNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgp
LnNhbXBsZS5ieXRlUmFuZ2VTYW1wbGUuc2Vjb25kLmdldCgpOworICAgICAgICAgICAgbV9mb3Jt
YXREZXNjcmlwdGlvbiA9IFdlYkNvcmU6OmNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRyYWNr
SW5mbygqbV90cmFja0luZm8pOworICAgICAgICB9IGVsc2UgaWYgKCptX3RyYWNrSW5mbyAhPSB0
cmFja0luZm8pIHsKKyAgICAgICAgICAgIG1fdHJhY2tJbmZvID0gJnRyYWNrSW5mbzsKKyAgICAg
ICAgICAgIG1fZm9ybWF0RGVzY3JpcHRpb24gPSBXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlw
dGlvbkZyb21UcmFja0luZm8oKm1fdHJhY2tJbmZvKTsKKyAgICAgICAgfQorICAgICAgICBjb25z
dCB2b2lkKiBkZXNjcmlwdGlvbnNbMV0gPSB7IG1fZm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkgfTsK
ICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Q0ZBcnJheVJlZio+KGNvcGllZFZhbHVlKSA9IGFk
b3B0Q0YoQ0ZBcnJheUNyZWF0ZShhbGxvY2F0b3IsIGRlc2NyaXB0aW9ucywgMSwgJmtDRlR5cGVB
cnJheUNhbGxCYWNrcykpLmxlYWtSZWYoKTsKICAgICAgICAgcmV0dXJuIG5vRXJyOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVRyYWNrUmVhZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRS
ZWFkZXIvTWVkaWFUcmFja1JlYWRlci5oCmluZGV4IDEyMDViYzI2ZGFmZWU3ZGQ0ZmRjYTdjODY2
MzgxOGZkOGY4OTc0MmMuLmRkMjVmYzNkYjcyY2U4NmY4ZWU3NGUxYzRkY2M4ZDllOGM0NzJmMjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVRyYWNrUmVhZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9y
bWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuaApAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBXb3Jr
UXVldWU7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdWRpb1RyYWNrUHJpdmF0ZTsKIGNs
YXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGU7Ci1jbGFzcyBNZWRpYVNhbXBsZTsKK2NsYXNzIE1l
ZGlhU2FtcGxlc0Jsb2NrOwogY2xhc3MgVHJhY2tQcml2YXRlQmFzZTsKIGNsYXNzIFZpZGVvVHJh
Y2tQcml2YXRlOwogfQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgTWVkaWFUaW1lIGdy
ZWF0ZXN0UHJlc2VudGF0aW9uVGltZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRFbmFibGVkKGJv
b2wgZW5hYmxlZCkgeyBtX2lzRW5hYmxlZCA9IGVuYWJsZWQgPyBFbmFibGVkOjpUcnVlIDogRW5h
YmxlZDo6RmFsc2U7IH0KLSAgICB2b2lkIGFkZFNhbXBsZShSZWY8V2ViQ29yZTo6TWVkaWFTYW1w
bGU+JiYsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZik7CisgICAgdm9pZCBhZGRTYW1wbGUoV2ViQ29y
ZTo6TWVkaWFTYW1wbGVzQmxvY2smJiwgTVRQbHVnaW5CeXRlU291cmNlUmVmKTsKICAgICB2b2lk
IHdhaXRGb3JTYW1wbGUoRnVuY3Rpb248Ym9vbChXZWJDb3JlOjpTYW1wbGVNYXAmLCBib29sKT4m
JikgY29uc3Q7CiAgICAgdm9pZCBmaW5pc2hQYXJzaW5nKCk7CiAKQEAgLTExMSw2ICsxMTEsOCBA
QCBwcml2YXRlOgogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFNhbXBsZVN0b3JhZ2U+IG1f
c2FtcGxlU3RvcmFnZSBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fc2FtcGxlU3RvcmFnZUxvY2spOwog
ICAgIFJlZjxjb25zdCBMb2dnZXI+IG1fbG9nZ2VyOwogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRl
bnRpZmllcjsKKyAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9mb3JtYXRE
ZXNjcmlwdGlvbjsKKyAgICBSZWZQdHI8Y29uc3QgV2ViQ29yZTo6VHJhY2tJbmZvPiBtX3RyYWNr
SW5mbzsKIH07CiAKIGNvbnN0ZXhwciBNZWRpYVRyYWNrUmVhZGVyOjpXcmFwcGVyQ2xhc3MgTWVk
aWFUcmFja1JlYWRlcjo6d3JhcHBlckNsYXNzKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4MmY1NzlmN2ZmYjk3ODkxM2Y4MjRkMDFjMzlkOGJi
YTk2MzU2ZmM1Li44NThmYTU0YTk5ODEzZGRjMjYwNmQ3ZDIyZjk1NmFhY2NkOGNhNDA0IDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMjItMDMtMDggIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKwor
ICAgICAgICBIYXZlIE1lZGlhRm9ybWF0UmVhZGVyIHBsdWdpbiB1c2UgV2ViTVBhcnNlciBkaXJl
Y3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3
NTk0CisgICAgICAgIHJkYXI6Ly84OTk2MDMwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBs
ZU1hcC5jcHA6CisKKzIwMjItMDMtMDUgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNv
bT4KKworICAgICAgICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIGFuZCBoYXZlIHBsYXRm
b3JtIGFnbm9zdGljIFdlYk1QYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNzQ3MgorICAgICAgICByZGFyOi8vcHJvYmxlbS84OTgxMDk2OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBsZU1hcC5jcHA6IFVwZGF0ZSBmb2xsb3dpbmcgYmFz
ZSBjbGFzcyBkZWZpbml0aW9uIGNoYW5nZS4KKwogMjAyMi0wMi0yMyAgSmVhbi1ZdmVzIEF2ZW5h
cmQgIDxqeWFAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhYmlsaXR5IHRvIGNvbnZlcnQgRnJh
Z21lbnRlZFNoYXJlZEJ1ZmZlciB0byBDTUJsb2NrQnVmZmVyCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAuY3BwCmluZGV4IDVhNjUzNTgzMDE1ZDI4OGRl
ZjQ3YmNiNDc5MmMyNGM4ZDJmOWE3ZWYuLmVkZWUzMTJiY2UyM2MxYWYwM2JlMGFmMGI2MmJkMjYz
YmY1MzBjMDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9T
YW1wbGVNYXAuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1w
bGVNYXAuY3BwCkBAIC02NCwxNSArNjQsMTIgQEAgcHVibGljOgogICAgICAgICBtX3ByZXNlbnRh
dGlvblRpbWUgPSBwcmVzZW50YXRpb25UaW1lOwogICAgICAgICBtX2RlY29kZVRpbWUgPSBkZWNv
ZGVUaW1lOwogICAgIH07Ci0gICAgYm9vbCBpc0RpdmlzYWJsZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgc3RkOjpwYWlyPFJlZlB0cjxNZWRpYVNhbXBsZT4sIFJlZlB0cjxN
ZWRpYVNhbXBsZT4+IGRpdmlkZShjb25zdCBNZWRpYVRpbWUmLCBVc2VFbmRUaW1lKSBmaW5hbCB7
IHJldHVybiB7IH07IH0KICAgICBSZWY8TWVkaWFTYW1wbGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdD
b3B5KCkgY29uc3QgZmluYWwgewogICAgICAgICByZXR1cm4gY3JlYXRlKG1fcHJlc2VudGF0aW9u
VGltZSwgbV9kZWNvZGVUaW1lLCBtX2R1cmF0aW9uLCBzdGF0aWNfY2FzdDxTYW1wbGVGbGFncz4o
bV9mbGFncyB8IElzTm9uRGlzcGxheWluZykpOwogICAgIH0KICAgICBTYW1wbGVGbGFncyBmbGFn
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmxhZ3M7IH0KICAgICBQbGF0Zm9ybVNhbXBsZSBw
bGF0Zm9ybVNhbXBsZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgUGxhdGZvcm1TYW1wbGU6Ok5v
bmUsIHsgbnVsbHB0ciB9IH07IH0KICAgICBQbGF0Zm9ybVNhbXBsZTo6VHlwZSBwbGF0Zm9ybVNh
bXBsZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBQbGF0Zm9ybVNhbXBsZTo6Tm9uZTsgfQot
ICAgIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBzdGQ6Om51bGxvcHQ7IH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
IGZpbmFsIHsgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454173</attachid>
            <date>2022-03-08 16:35:36 -0800</date>
            <delta_ts>2022-03-08 21:57:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237594-20220309113535.patch</filename>
            <type>text/plain</type>
            <size>49289</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMDIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjI4M2U3ZDZhYWFkNDU0
ZWVhYmRhYjg1Y2FkZDVlNmI2YTEzZDMzZS4uMDIzZGRmYjY1OTVjYTA4YzgyMjEzZjczNjA0ZmJj
Y2NmMjhjYmExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIyLTAzLTA4ICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBNZWRpYUZvcm1h
dFJlYWRlciBwbHVnaW4gdXNlIFdlYk1QYXJzZXIgZGlyZWN0bHkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzU5NAorICAgICAgICByZGFyOi8vODk5
NjAzMDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
b3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1w
bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpieXRlUmFuZ2UgY29uc3QpOiBI
YXZlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uCisgICAgICAgICogcGxhdGZvcm0vVmlkZW9GcmFt
ZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vVmlkZW9GcmFtZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJBVkZPYmpDU2FtcGxlOjpieXRlUmFuZ2VGb3JB
dHRhY2htZW50IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW06CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaDogRXhwb3J0IHN5bWJvbHMuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpjcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uVHJhY2tFbnRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1l
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpwcm92aWRlTWVkaWFEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZE1lZGlhRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpyZXR1cm5TYW1w
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVu
ZGluZ0F1ZGlvU2FtcGxlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJh
Y2tEYXRhOjpjcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6ZHJhaW5QZW5kaW5nU2FtcGxlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHA6CisK
IDIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGlj
IFdlYk1QYXJzZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2Ft
cGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCmluZGV4IGExMjgy
NzNhNTc2ZjgzYmZhZTE3YjU3MjgwODE1MjRmNmRiYTUyMzMuLmFkNmY4NTZlZGFmZGZkOTIxNzM0
ZDMzNzE4MTA3Y2NjNzM1ODY0MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L01lZGlhU2FtcGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUu
aApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtVmlkZW9Db2xvclNwYWNlLmgi
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlw
ZWRBcnJheXMuaD4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJh
aXRzLmg+CiAjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
YWZlUmVmQ291bnRlZC5oPgpAQCAtNDcsNiArNDgsNyBAQCBjbGFzcyBGcmFnbWVudGVkU2hhcmVk
QnVmZmVyOwogY2xhc3MgTW9ja1NhbXBsZUJveDsKIGNsYXNzIFByb2Nlc3NJZGVudGl0eTsKIGNs
YXNzIFNoYXJlZEJ1ZmZlcjsKK3N0cnVjdCBUcmFja0luZm87CiAKIHN0cnVjdCBQbGF0Zm9ybVNh
bXBsZSB7CiAgICAgZW51bSBUeXBlIHsKQEAgLTYxLDcgKzYzLDcgQEAgc3RydWN0IFBsYXRmb3Jt
U2FtcGxlIHsKICAgICAgICAgY29uc3QgTW9ja1NhbXBsZUJveCogbW9ja1NhbXBsZUJveDsKICAg
ICAgICAgQ01TYW1wbGVCdWZmZXJSZWYgY21TYW1wbGVCdWZmZXI7CiAgICAgICAgIEdzdFNhbXBs
ZSogZ3N0U2FtcGxlOwotICAgICAgICBzdGQ6OnBhaXI8TVRQbHVnaW5CeXRlU291cmNlUmVmLCBD
TUZvcm1hdERlc2NyaXB0aW9uUmVmPiBieXRlUmFuZ2VTYW1wbGU7CisgICAgICAgIHN0ZDo6cGFp
cjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWYsIHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgVHJh
Y2tJbmZvPj4gYnl0ZVJhbmdlU2FtcGxlOwogICAgIH0gc2FtcGxlOwogfTsKIApAQCAtMTA3LDcg
KzEwOSw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IGJ5dGVPZmZzZXQgeyAwIH07CiAgICAg
ICAgIHNpemVfdCBieXRlTGVuZ3RoIHsgMCB9OwogICAgIH07Ci0gICAgdmlydHVhbCBzdGQ6Om9w
dGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgc3Rk
OjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsgfQogCiAgICAgZW51bSBjbGFzcyBWaWRlb1JvdGF0aW9uIHsKICAgICAgICAgTm9uZSA9
IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuY3BwCmluZGV4IGEyMjE4YzVkZDc0
MWZmYzQ2ODg1NzcxZWRkNTE5NGJjMzEyYTdmZGMuLjE0Y2I3MGQxNzBhMDcyMWMxN2ViZjNmMThk
NmQ0ODQxNTdmNzg3MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVv
RnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuY3BwCkBA
IC0xMDgsMTMgKzEwOCw2IEBAIE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFncyBWaWRlb0ZyYW1lOjpm
bGFncygpIGNvbnN0CiAgICAgcmV0dXJuIE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6Tm9uZTsK
IH0KIAotc3RkOjpvcHRpb25hbDxNZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlPiBWaWRlb0ZyYW1lOjpi
eXRlUmFuZ2UoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBSZW1vdmUgZnJvbSB0aGUgYmFzZSBj
bGFzcy4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotfQotCiB2b2lkIFZpZGVvRnJhbWU6OmR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdAogewogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5oCmluZGV4IDIyODVlOGFjN2JmMDIxNDJmOTJh
OTFmNzgwZTc1OTEwMjQyYWE2YjEuLmQ5Njc0Y2U3NDA1NGJjZDc0ODhlYWVkZDJmMTI4MjIyODQ2
YjFlOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmgKQEAgLTc0LDcgKzc0LDYg
QEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3Qg
TWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQg
UmVmPFdlYkNvcmU6Ok1lZGlhU2FtcGxlPiBjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0
IGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIFNhbXBsZUZsYWdzIGZsYWdzKCkgY29uc3QgZmlu
YWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5n
ZSgpIGNvbnN0IGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0IGZpbmFsOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVj
b2RlckFWRk9iakMubW0KaW5kZXggYWQ3ZjQ1MTAxYzA2YTE4ODhjMDA4ZmFlZDRhOTE5MDU2MTM4
MjkzYi4uNjIwYTNiZTYyYWI4NDUwZjdlMzg2NDQ4NDZmNzk4OTEyMzg4MWYxMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1h
Z2VEZWNvZGVyQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tCkBAIC01Myw2ICs1Myw3
IEBACiAjaW1wb3J0IDx3dGYvTWVkaWFUaW1lLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KKyNpbXBvcnQgPHd0Zi9jZi9UeXBlQ2FzdHND
Ri5oPgogCiAjaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgogI2ltcG9ydCAiVmlkZW9Ub29s
Ym94U29mdExpbmsuaCIKQEAgLTI3Miw2ICsyNzMsMjYgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
fQogCisgICAgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZUZvckF0dGFjaG1lbnQo
Q0ZTdHJpbmdSZWYga2V5KSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBieXRlT2Zmc2V0Q0Yg
PSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KFBBTDo6Q01HZXRBdHRhY2htZW50KG1fc2Ft
cGxlLmdldCgpLCBrZXksIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFieXRlT2Zmc2V0Q0YpCisg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgIGludDY0X3QgYnl0ZU9m
ZnNldCA9IDA7CisgICAgICAgIGlmICghQ0ZOdW1iZXJHZXRWYWx1ZShieXRlT2Zmc2V0Q0YsIGtD
Rk51bWJlclNJbnQ2NFR5cGUsICZieXRlT2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICAgICAgQ01JdGVtQ291bnQgc2l6ZUFycmF5RW50cmllcyA9IDA7Cisg
ICAgICAgIFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVTaXplQXJyYXkobV9zYW1wbGUuZ2V0
KCksIDAsIG51bGxwdHIsICZzaXplQXJyYXlFbnRyaWVzKTsKKyAgICAgICAgaWYgKHNpemVBcnJh
eUVudHJpZXMgIT0gMSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICAg
ICAgc2l6ZV90IHNpbmdsZVNpemVFbnRyeSA9IDA7CisgICAgICAgIFBBTDo6Q01TYW1wbGVCdWZm
ZXJHZXRTYW1wbGVTaXplQXJyYXkobV9zYW1wbGUuZ2V0KCksIDEsICZzaW5nbGVTaXplRW50cnks
IG51bGxwdHIpOworICAgICAgICByZXR1cm4geyB7IENoZWNrZWRTaXplKGJ5dGVPZmZzZXQpLCBz
aW5nbGVTaXplRW50cnkgfSB9OworICAgIH0KKwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBt
X2ltYWdlOwogICAgIGJvb2wgbV9oYXNBbHBoYSB7IGZhbHNlIH07CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFT
YW1wbGVBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaAppbmRleCAwMjVkMGQzNDRmM2FlYTQyOGE2
ZWQ4NzY4Njg4Y2NhYmZkMzdhMzJkLi44N2ZhYzg1MTNmNjQ1Y2MwZDEyNWZhYWY0MzZmYzY5Y2Iw
MGVmOTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaApA
QCAtNjQsNyArNjQsNiBAQCBwdWJsaWM6CiAgICAgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBv
dmVycmlkZTsKICAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIFBsYXRmb3JtU2FtcGxlOjpUeXBlIHBsYXRmb3JtU2FtcGxlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZlclR5cGU7IH0K
LSAgICBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdm9pZCBvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGlt
ZSYpIG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNEaXZpc2FibGUoKSBjb25z
dCBvdmVycmlkZTsKQEAgLTgyLDggKzgxLDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNIb21vZ2Vu
ZW91cygpIGNvbnN0OwogICAgIFZlY3RvcjxSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPj4gZGl2aWRl
SW50b0hvbW9nZW5lb3VzU2FtcGxlcygpOwogCi0gICAgdm9pZCBzZXRCeXRlUmFuZ2VPZmZzZXQo
c2l6ZV90KTsKLQogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpICYmIEhBVkUoQVZDT05URU5U
S0VZU0VTU0lPTikKICAgICB1c2luZyBLZXlJRHMgPSBWZWN0b3I8UmVmPEZyYWdtZW50ZWRTaGFy
ZWRCdWZmZXI+PjsKICAgICB2b2lkIHNldEtleUlEcyhLZXlJRHMmJiBrZXlJRHMpIHsgbV9rZXlJ
RHMgPSBXVEZNb3ZlKGtleUlEcyk7IH0KQEAgLTEwMSw4ICs5OCw2IEBAIHByb3RlY3RlZDoKICAg
ICBXRUJDT1JFX0VYUE9SVCBNZWRpYVNhbXBsZUFWRk9iakMoQ01TYW1wbGVCdWZmZXJSZWYsIFZp
ZGVvUm90YXRpb24sIGJvb2wgbWlycm9yZWQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fk1lZGlhU2FtcGxlQVZGT2JqQygpOwogCi0gICAgc3RkOjpvcHRpb25hbDxNZWRpYVNhbXBsZTo6
Qnl0ZVJhbmdlPiBieXRlUmFuZ2VGb3JBdHRhY2htZW50KENGU3RyaW5nUmVmIGtleSkgY29uc3Q7
Ci0KICAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IG1fc2FtcGxlOwogICAgIEF0b21T
dHJpbmcgbV9pZDsKICAgICBWaWRlb1JvdGF0aW9uIG1fcm90YXRpb24geyBWaWRlb1JvdGF0aW9u
OjpOb25lIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0K
aW5kZXggOWNhZDg5ZDFjNzZjOWNjMTE4YjQ3MTIyYTU2Y2JkNTdhMTMxMmQ0ZS4uNWQ2NmEwNDI2
YjA0YWFlY2Q2NTc3ZGVjYzM0NmI3NzA3MGRmZWY1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQpAQCAtNTA1LDQ0ICs1MDUsNiBAQCBSZXRhaW5QdHI8
Q01TYW1wbGVCdWZmZXJSZWY+IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y2xvbmVTYW1wbGVCdWZmZXJB
bmRTZXRBc0Rpc3BsYQogICAgIHJldHVybiBhZG9wdENGKG5ld1NhbXBsZUJ1ZmZlcik7CiB9CiAK
LXN0YXRpYyBDRlN0cmluZ1JlZiBieXRlUmFuZ2VPZmZzZXRBdHRhY2htZW50S2V5KCkKLXsKLSAg
ICBzdGF0aWMgQ0ZTdHJpbmdSZWYga2V5ID0gQ0ZTVFIoIldlYktpdE1lZGlhU2FtcGxlQnl0ZVJh
bmdlT2Zmc2V0Iik7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotc3RkOjpvcHRpb25hbDxNZWRpYVNh
bXBsZTo6Qnl0ZVJhbmdlPiBNZWRpYVNhbXBsZUFWRk9iakM6OmJ5dGVSYW5nZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGJ5dGVSYW5nZUZvckF0dGFjaG1lbnQoYnl0ZVJhbmdlT2Zmc2V0QXR0YWNo
bWVudEtleSgpKTsKLX0KLQotdm9pZCBNZWRpYVNhbXBsZUFWRk9iakM6OnNldEJ5dGVSYW5nZU9m
ZnNldChzaXplX3QgYnl0ZU9mZnNldCkKLXsKLSAgICBpbnQ2NF90IGNoZWNrZWRPZmZzZXQgPSBD
aGVja2VkSW50NjQoYnl0ZU9mZnNldCk7Ci0gICAgYXV0byBvZmZzZXROdW1iZXIgPSBhZG9wdENG
KENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlclNJbnQ2NFR5cGUs
ICZjaGVja2VkT2Zmc2V0KSk7Ci0gICAgUEFMOjpDTVNldEF0dGFjaG1lbnQobV9zYW1wbGUuZ2V0
KCksIGJ5dGVSYW5nZU9mZnNldEF0dGFjaG1lbnRLZXkoKSwgb2Zmc2V0TnVtYmVyLmdldCgpLCBr
Q01BdHRhY2htZW50TW9kZV9TaG91bGRQcm9wYWdhdGUpOwotfQotCi1zdGQ6Om9wdGlvbmFsPE1l
ZGlhU2FtcGxlOjpCeXRlUmFuZ2U+IE1lZGlhU2FtcGxlQVZGT2JqQzo6Ynl0ZVJhbmdlRm9yQXR0
YWNobWVudChDRlN0cmluZ1JlZiBrZXkpIGNvbnN0Ci17Ci0gICAgYXV0byBieXRlT2Zmc2V0Q0Yg
PSBkeW5hbWljX2NmX2Nhc3Q8Q0ZOdW1iZXJSZWY+KFBBTDo6Q01HZXRBdHRhY2htZW50KG1fc2Ft
cGxlLmdldCgpLCBrZXksIG51bGxwdHIpKTsKLSAgICBpZiAoIWJ5dGVPZmZzZXRDRikKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIGludDY0X3QgYnl0ZU9mZnNldCA9IDA7Ci0g
ICAgaWYgKCFDRk51bWJlckdldFZhbHVlKGJ5dGVPZmZzZXRDRiwga0NGTnVtYmVyU0ludDY0VHlw
ZSwgJmJ5dGVPZmZzZXQpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgQ01J
dGVtQ291bnQgc2l6ZUFycmF5RW50cmllcyA9IDA7Ci0gICAgUEFMOjpDTVNhbXBsZUJ1ZmZlckdl
dFNhbXBsZVNpemVBcnJheShtX3NhbXBsZS5nZXQoKSwgMCwgbnVsbHB0ciwgJnNpemVBcnJheUVu
dHJpZXMpOwotICAgIGlmIChzaXplQXJyYXlFbnRyaWVzICE9IDEpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0KLSAgICBzaXplX3Qgc2luZ2xlU2l6ZUVudHJ5ID0gMDsKLSAgICBQQUw6
OkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlU2l6ZUFycmF5KG1fc2FtcGxlLmdldCgpLCAxLCAmc2lu
Z2xlU2l6ZUVudHJ5LCBudWxscHRyKTsKLSAgICByZXR1cm4geyB7IENoZWNrZWRTaXplKGJ5dGVP
ZmZzZXQpLCBzaW5nbGVTaXplRW50cnkgfSB9OwotfQotCiBDVlBpeGVsQnVmZmVyUmVmIE1lZGlh
U2FtcGxlQVZGT2JqQzo6cGl4ZWxCdWZmZXIoKSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDVlBpeGVsQnVmZmVyUmVmPihQQUw6OkNNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIo
bV9zYW1wbGUuZ2V0KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9DTVV0aWxpdGllcy5oCmluZGV4IGFlMzkzZTBiMmQwMTdjZDRjOWFkZDdkNTRi
ZWJmNWIyOWM0YzJkZWYuLmFiNzFiODdmZjYzZWQzMzhkOTVmY2RmNmIyZGQyNGY0ODM3NzAzMWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRp
bGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01V
dGlsaXRpZXMuaApAQCAtNDEsNyArNDEsNyBAQCBzdHJ1Y3QgVHJhY2tJbmZvOwogV0VCQ09SRV9F
WFBPUlQgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2Ny
aXB0aW9uRnJvbVRyYWNrSW5mbyhjb25zdCBUcmFja0luZm8mKTsKIC8vIENvbnZlcnQgTWVkaWFT
YW1wbGVzQmxvY2sgdG8gdGhlIGVxdWl2YWxlbnQgQ01TYW1wbGVCdWZmZXJSZWYuIElmIENNRm9y
bWF0RGVzY3JpcHRpb25SZWYKIC8vIGlzIHNldCBpdCB3aWxsIGJlIHVzZWQsIG90aGVyd2lzZSBp
dCB3aWxsIGJlIGNyZWF0ZWQgZnJvbSB0aGUgTWVkaWFTYW1wbGVzQmxvY2sncyBUcmFja0luZm8u
Ci1XRUJDT1JFX0VYUE9SVCBFeHBlY3RlZDxSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+LCBD
U3RyaW5nPiB0b0NNU2FtcGxlQnVmZmVyKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIENNRm9ybWF0RGVz
Y3JpcHRpb25SZWYpOworV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8UmV0YWluUHRyPENNU2FtcGxl
QnVmZmVyUmVmPiwgQ1N0cmluZz4gdG9DTVNhbXBsZUJ1ZmZlcihNZWRpYVNhbXBsZXNCbG9jayYm
LCBDTUZvcm1hdERlc2NyaXB0aW9uUmVmID0gbnVsbHB0cik7CiAKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2Vy
V2ViTS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VC
dWZmZXJQYXJzZXJXZWJNLmNwcAppbmRleCA5NGJiMmVkNmM1NmU3ODQ1MTBkMmY0MWUyNzhiOGNh
Mzk5OGYzYjBmLi5lMWE2NDdjYWFhMGQ0Y2U2NmU0NzQzM2Q3ZjE3OTYxYjI4Zjk0MjdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcApAQCAtNTM2LDkgKzUzNiw3IEBAIFdlYk1Q
YXJzZXI6OldlYk1QYXJzZXIoQ2FsbGJhY2smIGNhbGxiYWNrKQogewogfQogCi1XZWJNUGFyc2Vy
Ojp+V2ViTVBhcnNlcigpCi17Ci19CitXZWJNUGFyc2VyOjp+V2ViTVBhcnNlcigpID0gZGVmYXVs
dDsKIAogdm9pZCBXZWJNUGFyc2VyOjpyZXNldFN0YXRlKCkKIHsKQEAgLTU2MCw2ICs1NTgsMTMg
QEAgdm9pZCBXZWJNUGFyc2VyOjpyZXNldCgpCiAgICAgbV9wYXJzZXItPkRpZFNlZWsoKTsKIH0K
IAordm9pZCBXZWJNUGFyc2VyOjpjcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKCkKK3sKKyAgICBmb3Ig
KGF1dG8mIHRyYWNrIDogbV90cmFja3MpCisgICAgICAgIHRyYWNrLT5jcmVhdGVCeXRlUmFuZ2VT
YW1wbGVzKCk7CisgICAgbV9jcmVhdGVCeXRlUmFuZ2VTYW1wbGVzID0gdHJ1ZTsKK30KKwogRXhj
ZXB0aW9uT3I8aW50PiBXZWJNUGFyc2VyOjpwYXJzZShTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21l
bnQmJiBzZWdtZW50KQogewogICAgIGlmICghbV9wYXJzZXIpCkBAIC04NTEsMzIgKzg1NiwzMCBA
QCBTdGF0dXMgV2ViTVBhcnNlcjo6T25UcmFja0VudHJ5KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYs
IGNvbnN0IFRyYWNrRW50cnkmIHRyYWNrRQogICAgIH0KIAogICAgIFN0cmluZ1ZpZXcgY29kZWNT
dHJpbmcgeyB0cmFja0VudHJ5LmNvZGVjX2lkLnZhbHVlKCkuZGF0YSgpLCAodW5zaWduZWQpdHJh
Y2tFbnRyeS5jb2RlY19pZC52YWx1ZSgpLmxlbmd0aCgpIH07CisgICAgYXV0byB0cmFjayA9IFsm
XSgpIC0+IFVuaXF1ZVJlZjxUcmFja0RhdGE+IHsKICNpZiBFTkFCTEUoVlA5KQotICAgIGlmIChj
b2RlY1N0cmluZyA9PSAiVl9WUDkiICYmIGlzVlA5RGVjb2RlckF2YWlsYWJsZSgpKSB7Ci0gICAg
ICAgIG1fdHJhY2tzLmFwcGVuZChWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6VlA5
LCB0cmFja0VudHJ5LCAqdGhpcykpOwotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09r
Q29tcGxldGVkKTsKLSAgICB9Ci0gICAgaWYgKGNvZGVjU3RyaW5nID09ICJWX1ZQOCIgJiYgaXNW
UDhEZWNvZGVyQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgbV90cmFja3MuYXBwZW5kKFZpZGVvVHJh
Y2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpWUDgsIHRyYWNrRW50cnksICp0aGlzKSk7Ci0gICAg
ICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwotICAgIH0KKyAgICAgICAg
aWYgKGNvZGVjU3RyaW5nID09ICJWX1ZQOSIgJiYgaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpCisg
ICAgICAgICAgICByZXR1cm4gVmlkZW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZQOSwg
dHJhY2tFbnRyeSwgKnRoaXMpOworICAgICAgICBpZiAoY29kZWNTdHJpbmcgPT0gIlZfVlA4IiAm
JiBpc1ZQOERlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBWaWRlb1RyYWNr
RGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6VlA4LCB0cmFja0VudHJ5LCAqdGhpcyk7CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShWT1JCSVMpCi0gICAgaWYgKGNvZGVjU3RyaW5nID09ICJBX1ZPUkJJUyIg
JiYgaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgbV90cmFja3MuYXBwZW5k
KEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpWb3JiaXMsIHRyYWNrRW50cnksICp0
aGlzKSk7Ci0gICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwotICAg
IH0KKyAgICAgICAgaWYgKGNvZGVjU3RyaW5nID09ICJBX1ZPUkJJUyIgJiYgaXNWb3JiaXNEZWNv
ZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gQXVkaW9UcmFja0RhdGE6OmNyZWF0
ZShDb2RlY1R5cGU6OlZvcmJpcywgdHJhY2tFbnRyeSwgKnRoaXMpOwogI2VuZGlmCiAKICNpZiBF
TkFCTEUoT1BVUykKLSAgICBpZiAoY29kZWNTdHJpbmcgPT0gIkFfT1BVUyIgJiYgaXNPcHVzRGVj
b2RlckF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0
YTo6Y3JlYXRlKENvZGVjVHlwZTo6T3B1cywgdHJhY2tFbnRyeSwgKnRoaXMpKTsKLSAgICAgICAg
cmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7Ci0gICAgfQorICAgICAgICBpZiAo
Y29kZWNTdHJpbmcgPT0gIkFfT1BVUyIgJiYgaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpPcHVzLCB0
cmFja0VudHJ5LCAqdGhpcyk7CiAjZW5kaWYKKyAgICAgICAgcmV0dXJuIFRyYWNrRGF0YTo6Y3Jl
YXRlKENvZGVjVHlwZTo6VW5zdXBwb3J0ZWQsIHRyYWNrRW50cnksICp0aGlzKTsKKyAgICB9KCk7
CisKKyAgICBpZiAobV9jcmVhdGVCeXRlUmFuZ2VTYW1wbGVzKQorICAgICAgICB0cmFjay0+Y3Jl
YXRlQnl0ZVJhbmdlU2FtcGxlcygpOwogCi0gICAgbV90cmFja3MuYXBwZW5kKFRyYWNrRGF0YTo6
Y3JlYXRlKENvZGVjVHlwZTo6VW5zdXBwb3J0ZWQsIHRyYWNrRW50cnksICp0aGlzKSk7CisgICAg
bV90cmFja3MuYXBwZW5kKFdURk1vdmUodHJhY2spKTsKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1
czo6a09rQ29tcGxldGVkKTsKIH0KIApAQCAtMTA1MSw4ICsxMDU0LDYgQEAgd2VibTo6U3RhdHVz
IFdlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRl
ciYgcmVhZGVyLAogICAgIGlmICghc3RhdHVzLmNvbXBsZXRlZF9vaygpKQogICAgICAgICByZXR1
cm4gc3RhdHVzOwogCi0gICAgbV9sYXN0UG9zaXRpb24gPSBtZXRhZGF0YS5wb3NpdGlvbjsKLQog
ICAgIGNvbnN0ZXhwciBzaXplX3QgbWF4SGVhZGVyU2l6ZSA9IDMyOyAvLyBUaGUgbWF4aW11bSBs
ZW5ndGggb2YgYSBWUDkgdW5jb21wcmVzc2VkIGhlYWRlciBpcyAxNDQgYml0cyBhbmQgMTEgYnl0
ZXMgZm9yIFZQOC4gUm91bmQgaGlnaC4KICAgICBzaXplX3Qgc2VnbWVudEhlYWRlckxlbmd0aCA9
IHN0ZDo6bWluKG1heEhlYWRlclNpemUsIG1fY29tcGxldGVCbG9ja0J1ZmZlci0+c2l6ZSgpKTsK
ICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIgPSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZl
cigwLCBzZWdtZW50SGVhZGVyTGVuZ3RoKTsKQEAgLTEwOTAsNyArMTA5MSwxMCBAQCB3ZWJtOjpT
dGF0dXMgV2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6
UmVhZGVyJiByZWFkZXIsCiAgICAgaWYgKHRyYWNrLmRlZmF1bHRfZHVyYXRpb24uaXNfcHJlc2Vu
dCgpKQogICAgICAgICBkdXJhdGlvbiA9IHRyYWNrLmRlZmF1bHRfZHVyYXRpb24udmFsdWUoKSAq
IHByZXNlbnRhdGlvblRpbWUudGltZVNjYWxlKCkgLyBrX3VzX2luX3NlY29uZHM7CiAKLSAgICBt
X2NvbXBsZXRlTWVkaWFTYW1wbGVzLmFwcGVuZCh7IHByZXNlbnRhdGlvblRpbWUsIHByZXNlbnRh
dGlvblRpbWUsIE1lZGlhVGltZShkdXJhdGlvbiwgcHJlc2VudGF0aW9uVGltZS50aW1lU2NhbGUo
KSksIG1fY29tcGxldGVCbG9ja0J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBpc0tleSA/IE1lZGlh
U2FtcGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jIDogTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpO
b25lIH0pOworICAgIGlmIChtX3VzZUJ5dGVSYW5nZSkKKyAgICAgICAgbV9jb21wbGV0ZU1lZGlh
U2FtcGxlcy5hcHBlbmQoeyBwcmVzZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1lLCBNZWRp
YVRpbWUoZHVyYXRpb24sIHByZXNlbnRhdGlvblRpbWUudGltZVNjYWxlKCkpLCBNZWRpYVNhbXBs
ZTo6Qnl0ZVJhbmdlIHsgbWV0YWRhdGEucG9zaXRpb24sIG1ldGFkYXRhLnNpemUgfSwgaXNLZXkg
PyBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyA6IE1lZGlhU2FtcGxlOjpTYW1wbGVG
bGFnczo6Tm9uZSB9KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMu
YXBwZW5kKHsgcHJlc2VudGF0aW9uVGltZSwgcHJlc2VudGF0aW9uVGltZSwgTWVkaWFUaW1lKGR1
cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLnRpbWVTY2FsZSgpKSwgbV9jb21wbGV0ZUJsb2NrQnVm
ZmVyLnJlbGVhc2VOb25OdWxsKCksIGlzS2V5ID8gTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpJ
c1N5bmMgOiBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6Ok5vbmUgfSk7CiAKICAgICBkcmFpblBl
bmRpbmdTYW1wbGVzKCk7CiAKQEAgLTExMTYsOCArMTEyMCw2IEBAIHdlYm06OlN0YXR1cyBXZWJN
UGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJl
YWRlciwKICAgICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKICAgICAgICAgcmV0dXJuIHN0
YXR1czsKIAotICAgIG1fbGFzdFBvc2l0aW9uID0gbWV0YWRhdGEucG9zaXRpb247Ci0KICAgICBp
ZiAoIWZvcm1hdERlc2NyaXB0aW9uKCkpIHsKICAgICAgICAgaWYgKCF0cmFjaygpLmNvZGVjX3By
aXZhdGUuaXNfcHJlc2VudCgpKSB7CiAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJBdWRpbyB0cmFjayBtaXNzaW5nIG1hZ2ljIGNvb2tpZSIpOwpAQCAtMTE4MCw3ICsx
MTgyLDEwIEBAIHdlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3Vt
ZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwKICAgICBlbHNlIGlmIChmb3JtYXREZXNj
cmlwdGlvbigpICYmICpmb3JtYXREZXNjcmlwdGlvbigpICE9ICptX2NvbXBsZXRlTWVkaWFTYW1w
bGVzLmluZm8oKSkKICAgICAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCi0gICAgbV9jb21w
bGV0ZU1lZGlhU2FtcGxlcy5hcHBlbmQoeyBwcmVzZW50YXRpb25UaW1lLCBNZWRpYVRpbWU6Omlu
dmFsaWRUaW1lKCksIG1fcGFja2V0RHVyYXRpb24sIG1fY29tcGxldGVCbG9ja0J1ZmZlci5yZWxl
YXNlTm9uTnVsbCgpLCBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyB9KTsKKyAgICBp
ZiAobV91c2VCeXRlUmFuZ2UpCisgICAgICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMuYXBwZW5k
KHsgcHJlc2VudGF0aW9uVGltZSwgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpLCBtX3BhY2tldER1
cmF0aW9uLCBNZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlIHsgbWV0YWRhdGEucG9zaXRpb24sIG1ldGFk
YXRhLnNpemUgfSwgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpJc1N5bmMgfSk7CisgICAgZWxz
ZQorICAgICAgICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmFwcGVuZCh7IHByZXNlbnRhdGlvblRp
bWUsIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSwgbV9wYWNrZXREdXJhdGlvbiwgbV9jb21wbGV0
ZUJsb2NrQnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6
SXNTeW5jIH0pOwogCiAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCkBAIC0xMjk5LDkgKzEz
MDQsOSBAQCBSZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2ViTT4gU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6Y3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJgogICAgIHJldHVybiBudWxscHRyOwogfQog
Ci12b2lkIFdlYk1QYXJzZXI6OnByb3ZpZGVNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBz
YW1wbGVzLCB1aW50NjRfdCBwb3NpdGlvbikKK3ZvaWQgV2ViTVBhcnNlcjo6cHJvdmlkZU1lZGlh
RGF0YShNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZXMpCiB7Ci0gICAgbV9jYWxsYmFjay5wYXJz
ZWRNZWRpYURhdGEoV1RGTW92ZShzYW1wbGVzKSwgcG9zaXRpb24pOworICAgIG1fY2FsbGJhY2su
cGFyc2VkTWVkaWFEYXRhKFdURk1vdmUoc2FtcGxlcykpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OnBhcnNlZEluaXRpYWxpemF0aW9uRGF0YShJbml0aWFsaXphdGlvblNlZ21l
bnQmJiBpbml0aWFsaXphdGlvblNlZ21lbnQpCkBAIC0xMzEyLDcgKzEzMTcsNyBAQCB2b2lkIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZEluaXRpYWxpemF0aW9uRGF0YShJbml0aWFsaXph
dGlvblNlZ21lbnQmJiBpbgogICAgIH0pOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OnBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZXNCbG9jaywgdWlu
dDY0X3QgcG9zaXRpb24pCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZE1lZGlh
RGF0YShNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZXNCbG9jaykKIHsKICAgICBpZiAoIXNhbXBs
ZXNCbG9jay5pbmZvKCkpIHsKICAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5U
SUZJRVIsICJObyBUcmFja0luZm8gc2V0Iik7CkBAIC0xMzM2LDcgKzEzNDEsNyBAQCB2b2lkIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYm
IHNhbXBsZXNCbG9jaywgdQogICAgIH0KIAogICAgIGlmIChzYW1wbGVzQmxvY2suaXNWaWRlbygp
KSB7Ci0gICAgICAgIHJldHVyblNhbXBsZXMoV1RGTW92ZShzYW1wbGVzQmxvY2spLCBtX3ZpZGVv
Rm9ybWF0RGVzY3JpcHRpb24uZ2V0KCksIHBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuU2FtcGxl
cyhXVEZNb3ZlKHNhbXBsZXNCbG9jayksIG1fdmlkZW9Gb3JtYXREZXNjcmlwdGlvbi5nZXQoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzNDQsMTcgKzEzNDksMTcgQEAgdm9pZCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2sm
JiBzYW1wbGVzQmxvY2ssIHUKICAgICBpZiAobV9xdWV1ZWRBdWRpb1NhbXBsZXMuc2l6ZSgpKSB7
CiAgICAgICAgIGF1dG8mIGxhc3RTYW1wbGUgPSBtX3F1ZXVlZEF1ZGlvU2FtcGxlcy5sYXN0KCk7
CiAgICAgICAgIGlmIChsYXN0U2FtcGxlLmR1cmF0aW9uICsgbGFzdFNhbXBsZS5wcmVzZW50YXRp
b25UaW1lICE9IHNhbXBsZXNCbG9jay5maXJzdCgpLnByZXNlbnRhdGlvblRpbWUpCi0gICAgICAg
ICAgICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMocG9zaXRpb24pOworICAgICAgICAgICAgZmx1
c2hQZW5kaW5nQXVkaW9TYW1wbGVzKCk7CiAgICAgfQogICAgIGZvciAoYXV0byYgc2FtcGxlIDog
c2FtcGxlc0Jsb2NrKQogICAgICAgICBtX3F1ZXVlZEF1ZGlvRHVyYXRpb24gKz0gc2FtcGxlLmR1
cmF0aW9uOwogICAgIG1fcXVldWVkQXVkaW9TYW1wbGVzLmFwcGVuZChXVEZNb3ZlKHNhbXBsZXNC
bG9jaykpOwogICAgIGlmIChtX3F1ZXVlZEF1ZGlvRHVyYXRpb24gPCBtX21pbmltdW1BdWRpb1Nh
bXBsZUR1cmF0aW9uKQogICAgICAgICByZXR1cm47Ci0gICAgZmx1c2hQZW5kaW5nQXVkaW9TYW1w
bGVzKHBvc2l0aW9uKTsKKyAgICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoKTsKIH0KIAotdm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpyZXR1cm5TYW1wbGVzKE1lZGlhU2FtcGxlc0Jsb2Nr
JiYgYmxvY2ssIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZGVzY3JpcHRpb24sIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IHBvc2l0aW9uKQordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpyZXR1
cm5TYW1wbGVzKE1lZGlhU2FtcGxlc0Jsb2NrJiYgYmxvY2ssIENNRm9ybWF0RGVzY3JpcHRpb25S
ZWYgZGVzY3JpcHRpb24pCiB7CiAgICAgaWYgKGJsb2NrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTM2NSwxMyArMTM3MCwxMSBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OnJldHVyblNhbXBsZXMoTWVkaWFTYW1wbGVzQmxvY2smJiBibG9jaywgQ01Gb3JtYXREZQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRyYWNrSUQgPSBibG9jay5pbmZv
KCktPnRyYWNrSUQsIHNhbXBsZUJ1ZmZlciA9IFdURk1vdmUoZXhwZWN0ZWRCdWZmZXIudmFsdWUo
KSksIHBvc2l0aW9uXSAoKSBtdXRhYmxlIHsKKyAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxi
YWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdHJhY2tJRCA9IGJsb2Nr
LmluZm8oKS0+dHJhY2tJRCwgc2FtcGxlQnVmZmVyID0gV1RGTW92ZShleHBlY3RlZEJ1ZmZlci52
YWx1ZSgpKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghbV9kaWRQcm92aWRlTWVkaWFEYXRh
Q2FsbGJhY2spCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0byBtZWRpYVNhbXBs
ZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJhY2tJ
RCk7Ci0gICAgICAgIGlmIChwb3NpdGlvbikKLSAgICAgICAgICAgIG1lZGlhU2FtcGxlLT5zZXRC
eXRlUmFuZ2VPZmZzZXQoKnBvc2l0aW9uKTsKIAogICAgICAgICBtX2RpZFByb3ZpZGVNZWRpYURh
dGFDYWxsYmFjayhXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwgZW1wdHlTdHJpbmcoKSk7
CiAgICAgfSk7CkBAIC0xMzkxLDEzICsxMzk0LDEzIEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6Y29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKFJlZjxT
CiAgICAgICAgIG1fZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRh
Rm9yVHJhY2tJRENhbGxiYWNrKFdURk1vdmUoa2V5SUQpLCB0cmFja0lEKTsKIH0KIAotdm9pZCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gcG9zaXRpb24pCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZs
dXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpCiB7CiAgICAgaWYgKCFtX2F1ZGlvRm9ybWF0RGVzY3Jp
cHRpb24pCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9hdWRpb0luZm8pOwogICAgIG1f
cXVldWVkQXVkaW9TYW1wbGVzLnNldEluZm8obV9hdWRpb0luZm8uY29weVJlZigpKTsKLSAgICBy
ZXR1cm5TYW1wbGVzKFdURk1vdmUobV9xdWV1ZWRBdWRpb1NhbXBsZXMpLCBtX2F1ZGlvRm9ybWF0
RGVzY3JpcHRpb24uZ2V0KCksIHBvc2l0aW9uKTsKKyAgICByZXR1cm5TYW1wbGVzKFdURk1vdmUo
bV9xdWV1ZWRBdWRpb1NhbXBsZXMpLCBtX2F1ZGlvRm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkpOwog
CiAgICAgbV9xdWV1ZWRBdWRpb1NhbXBsZXMgPSB7IH07CiAgICAgbV9xdWV1ZWRBdWRpb0R1cmF0
aW9uID0geyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IGZmY2VkMzQyNWQ2
ZTUyNTQyYTBhZmZhYWU4NzcwZjVjMmM2MTA4YzEuLjg3YTk0MDNhOGYzZmM1MGI2OGFhZGU4MTU3
OTVhMjkzZjU3NzYxYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAgLTI4LDYg
KzI4LDcgQEAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCiAjaW5jbHVkZSAiRXhjZXB0aW9u
T3IuaCIKKyNpbmNsdWRlICJNZWRpYVNhbXBsZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclBhcnNlci5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9D
b3JlQXVkaW9UeXBlcy5oPgpAQCAtNTIsMzAgKzUzLDMwIEBAIGNsYXNzIFdlYk1QYXJzZXIgOiBw
cml2YXRlIHdlYm06OkNhbGxiYWNrIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICBjbGFzcyBDYWxsYmFjayB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlZFRyaW1taW5nRGF0
YSh1aW50NjRfdCwgY29uc3QgTWVkaWFUaW1lJikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBw
YXJzZWRJbml0aWFsaXphdGlvbkRhdGEoU291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlv
blNlZ21lbnQmJikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VkTWVkaWFEYXRhKE1l
ZGlhU2FtcGxlc0Jsb2NrJiYsIHVpbnQ2NF90KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBw
YXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJikgPSAwOwogICAgICAgICB2aXJ0dWFs
IGJvb2wgY2FuRGVjcnlwdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBjb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoUmVm
PFNoYXJlZEJ1ZmZlcj4mJiwgdWludDY0X3QpIHsgfQogICAgICAgICB2aXJ0dWFsIH5DYWxsYmFj
aygpID0gZGVmYXVsdDsKICAgICB9OwogCi0gICAgV2ViTVBhcnNlcihDYWxsYmFjayYpOwotICAg
IH5XZWJNUGFyc2VyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgV2ViTVBhcnNlcihDYWxsYmFjayYp
OworICAgIFdFQkNPUkVfRVhQT1JUIH5XZWJNUGFyc2VyKCk7CiAKICAgICBjbGFzcyBTZWdtZW50
UmVhZGVyOwogCi0gICAgRXhjZXB0aW9uT3I8aW50PiBwYXJzZShTb3VyY2VCdWZmZXJQYXJzZXI6
OlNlZ21lbnQmJik7Ci0gICAgdm9pZCByZXNldFN0YXRlKCk7Ci0gICAgdm9pZCByZXNldCgpOwot
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY3JlYXRlQnl0
ZVJhbmdlU2FtcGxlcygpOworICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPGludD4gcGFy
c2UoU291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVzZXRTdGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKTsKICAgICBjb25zdCB3ZWJtOjpTdGF0dXMm
IHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAKLSAgICB2b2lkIHByb3ZpZGVN
ZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiwgdWludDY0X3QpOworICAgIHZvaWQgcHJvdmlk
ZU1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmKTsKIAotICAgIHZvaWQgc2V0TG9nZ2VyKGNv
bnN0IExvZ2dlciYsIGNvbnN0IHZvaWQqIGlkZW50aWZpZXIpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYsIGNvbnN0IHZvaWQqIGlkZW50aWZpZXIpOwog
ICAgIGNvbnN0IExvZ2dlciogbG9nZ2VyUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dnZXIuZ2V0
KCk7IH0KICAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9s
b2dJZGVudGlmaWVyOyB9CiAKQEAgLTEzNCw2ICsxMzUsOCBAQCBwdWJsaWM6CiAgICAgICAgIHdl
Ym06OlRyYWNrRW50cnkmIHRyYWNrKCkgeyByZXR1cm4gbV90cmFjazsgfQogICAgICAgICBUcmFj
a0luZm86OlRyYWNrVHlwZSB0cmFja1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrVHlwZTsg
fQogCisgICAgICAgIHZvaWQgY3JlYXRlQnl0ZVJhbmdlU2FtcGxlcygpIHsgbV91c2VCeXRlUmFu
Z2UgPSB0cnVlOyB9CisKICAgICAgICAgUmVmUHRyPFRyYWNrSW5mbz4gZm9ybWF0RGVzY3JpcHRp
b24oKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdERlc2NyaXB0aW9uLmNvcHlSZWYoKTsgfQogICAg
ICAgICB2b2lkIHNldEZvcm1hdERlc2NyaXB0aW9uKFJlZjxUcmFja0luZm8+JiYgZGVzY3JpcHRp
b24pCiAgICAgICAgIHsKQEAgLTE2Nyw3ICsxNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAg
ICAgICAgICAgIGlmICghbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5zaXplKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbV9wYXJzZXIucHJvdmlkZU1lZGlhRGF0YShXVEZN
b3ZlKG1fY29tcGxldGVNZWRpYVNhbXBsZXMpLCBtX2xhc3RQb3NpdGlvbik7CisgICAgICAgICAg
ICBtX3BhcnNlci5wcm92aWRlTWVkaWFEYXRhKFdURk1vdmUobV9jb21wbGV0ZU1lZGlhU2FtcGxl
cykpOwogICAgICAgICAgICAgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOwogICAgICAgICB9
CiAKQEAgLTE3Niw3ICsxNzksNyBAQCBwdWJsaWM6CiAgICAgICAgIHdlYm06OlN0YXR1cyByZWFk
RnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50
NjRfdCogYnl0ZXNSZW1haW5pbmcpOwogICAgICAgICBSZWZQdHI8RnJhZ21lbnRlZFNoYXJlZEJ1
ZmZlcj4gbV9jb21wbGV0ZUJsb2NrQnVmZmVyOwogICAgICAgICBNZWRpYVNhbXBsZXNCbG9jayBt
X2NvbXBsZXRlTWVkaWFTYW1wbGVzOwotICAgICAgICB1aW50NjRfdCBtX2xhc3RQb3NpdGlvbiB7
IDAgfTsKKyAgICAgICAgYm9vbCBtX3VzZUJ5dGVSYW5nZSB7IGZhbHNlIH07CiAKICAgICBwcml2
YXRlOgogICAgICAgICBDb2RlY1R5cGUgbV9jb2RlYzsKQEAgLTI3OSw2ICsyODIsNyBAQCBwcml2
YXRlOgogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKICAgICB1
aW50NjRfdCBtX25leHRDaGlsZElkZW50aWZpZXIgeyAwIH07CiAgICAgQ2FsbGJhY2smIG1fY2Fs
bGJhY2s7CisgICAgYm9vbCBtX2NyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMgeyBmYWxzZSB9OwogfTsK
IAogY2xhc3MgU291cmNlQnVmZmVyUGFyc2VyV2ViTSA6IHB1YmxpYyBTb3VyY2VCdWZmZXJQYXJz
ZXIsIFdlYk1QYXJzZXI6OkNhbGxiYWNrIHsKQEAgLTMwOCw3ICszMTIsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
OwogICAgIH0KIAotICAgIHZvaWQgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGZsdXNoUGVuZGluZ0F1ZGlv
U2FtcGxlcygpOwogICAgIHZvaWQgc2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQp
OwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYs
IGNvbnN0IHZvaWQqIGlkZW50aWZpZXIpIGZpbmFsOwpAQCAtMzE4LDEyICszMjIsMTIgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICAvLyBXZWJNUGFyc2VyOjpDYWxsYmFjawogICAgIHZvaWQgcGFy
c2VkSW5pdGlhbGl6YXRpb25EYXRhKFNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25T
ZWdtZW50JiYpIGZpbmFsOwotICAgIHZvaWQgcGFyc2VkTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Js
b2NrJiYsIHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2b2lkIHBhcnNlZE1lZGlhRGF0YShNZWRpYVNh
bXBsZXNCbG9jayYmKSBmaW5hbDsKICAgICBib29sIGNhbkRlY3J5cHQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAhIW1fZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRh
Rm9yVHJhY2tJRENhbGxiYWNrOyB9CiAgICAgdm9pZCBjb250ZW50S2V5UmVxdWVzdEluaXRpYWxp
emF0aW9uRGF0YUZvclRyYWNrSUQoUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgdWludDY0X3QpIGZpbmFs
OwogICAgIHZvaWQgcGFyc2VkVHJpbW1pbmdEYXRhKHVpbnQ2NF90LCBjb25zdCBNZWRpYVRpbWUm
KSBmaW5hbDsKLSAgICAKLSAgICB2b2lkIHJldHVyblNhbXBsZXMoTWVkaWFTYW1wbGVzQmxvY2sm
JiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4pOworCisg
ICAgdm9pZCByZXR1cm5TYW1wbGVzKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIENNRm9ybWF0RGVzY3Jp
cHRpb25SZWYpOwogCiAgICAgRGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayBtX2RpZFBhcnNl
VHJpbW1pbmdEYXRhQ2FsbGJhY2s7CiAgICAgV2ViTVBhcnNlciBtX3BhcnNlcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBs
ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhU2FtcGxlR1N0cmVhbWVyLmgKaW5kZXggMmI3ZGQ0NDRjNTNkMmQ2YmQwN2E5YjgzOGQ2
NzliNjRiMzc0OWFmNy4uYmU0YTBmZTNjM2M5OTdhOGRiZTEyZmI2ZjRmZjlkMWFlYzhhZGRlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhU2FtcGxlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmgKQEAgLTYxLDcgKzYxLDYgQEAgcHVi
bGljOgogICAgIFNhbXBsZUZsYWdzIGZsYWdzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9m
bGFnczsgfQogICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgUGxhdGZvcm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZvcm1TYW1wbGU6OkdTdHJlYW1lclNhbXBsZVR5cGU7IH0K
LSAgICBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IGdldFJHQkFJ
bWFnZURhdGEoKSBjb25zdCBmaW5hbDsKICAgICBWaWRlb1JvdGF0aW9uIHZpZGVvUm90YXRpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ZpZGVvUm90YXRpb247IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZl
clByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9N
b2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKaW5kZXggM2NmN2VlNjUzZWM4MTNkZmJhZTMzZWY5
M2EwYzMzZmUyYzYzOTRlMC4uZDRjZmU0MThkNWM2MTIwNjU3ZGUwZDBiYzAyMDM2ZmIxMGE4MjBm
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9N
b2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKQEAgLTYyLDcgKzYy
LDYgQEAgcHJpdmF0ZToKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
UGxhdGZvcm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gUGxhdGZvcm1TYW1wbGU6Ok1vY2tTYW1wbGVCb3hUeXBlOyB9Ci0gICAgc3RkOjpv
cHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsgfQogICAgIEZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXplKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gRmxvYXRTaXplKCk7IH0KICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRp
YVRpbWUmIG9mZnNldCkgb3ZlcnJpZGUgeyBtX2JveC5vZmZzZXRUaW1lc3RhbXBzQnkob2Zmc2V0
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRp
YUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAKaW5kZXggMWMzMzhjNmEzZThjYmVm
YjRjNmU0YmFmNTAyMWIxNTUyNTQ4ZmJmYi4uMGMyZTVkYWQ5YzZmODc3ZmYzZTYyODg5MmVmMzkw
OTJiZjJkODJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9y
bWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCkBAIC0xMzIsNDAg
KzEzMiwxMiBAQCB2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpwYXJzZUJ5dGVTb3VyY2UoUmV0YWlu
UHRyPE1UUGx1Z2luQnl0ZVNvdXJjZVJlZj4mJiBieXRlUwogewogICAgIEFTU0VSVChpc01haW5S
dW5Mb29wKCkpOwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbnRlbnRUeXBlPiBjb250
ZW50VHlwZSgidmlkZW8vd2VibSJfcyk7Ci0gICAgYXV0byBwYXJzZXIgPSBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpjcmVhdGUoY29udGVudFR5cGUpOwotICAgIGlmICghcGFyc2VyKSB7Ci0gICAg
ICAgIExvY2tlciBsb2NrZXIgeyBtX3BhcnNlVHJhY2tzTG9jayB9OwotICAgICAgICBtX3BhcnNl
VHJhY2tzU3RhdHVzID0ga01UUGx1Z2luRm9ybWF0UmVhZGVyRXJyb3JfQWxsb2NhdGlvbkZhaWx1
cmU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoIW1fbG9nZ2VyKSB7CiAgICAg
ICAgIG1fbG9nZ2VyID0gJkRvY3VtZW50OjpzaGFyZWRMb2dnZXIoKTsKICAgICAgICAgbV9sb2dJ
ZGVudGlmaWVyID0gbmV4dExvZ0lkZW50aWZpZXIoKTsKICAgICB9CiAKICAgICBBTFdBWVNfTE9H
X0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwotICAgIHBhcnNlci0+c2V0TG9nZ2VyKCptX2xv
Z2dlciwgbV9sb2dJZGVudGlmaWVyKTsKLQotICAgIC8vIFNldCBhIG1pbmltdW0gYXVkaW8gc2Ft
cGxlIGR1cmF0aW9uIG9mIDAgc28gdGhlIHBhcnNlciBjcmVhdGVzIGluZGl2aXNpYmxlIHNhbXBs
ZXMgd2l0aCBieXRlIHNvdXJjZSByYW5nZXMuCi0gICAgcGFyc2VyLT5zZXRNaW5pbXVtQXVkaW9T
YW1wbGVEdXJhdGlvbigwKTsKLQotICAgIHBhcnNlci0+c2V0Q2FsbE9uQ2xpZW50VGhyZWFkQ2Fs
bGJhY2soW10oRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKSB7Ci0gICAgICAgIE1lZGlhVHJh
Y2tSZWFkZXI6OnN0b3JhZ2VRdWV1ZSgpLmRpc3BhdGNoKFdURk1vdmUoZnVuY3Rpb24pKTsKLSAg
ICB9KTsKLQotICAgIHBhcnNlci0+c2V0RGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxsYmFj
ayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dKFNvdXJjZUJ1ZmZlclBhcnNl
cjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdtZW50KSB7Ci0gICAg
ICAgIGRpZFBhcnNlVHJhY2tzKFdURk1vdmUoaW5pdGlhbGl6YXRpb25TZWdtZW50KSwgbm9FcnIp
OwotICAgIH0pOwotCi0gICAgcGFyc2VyLT5zZXREaWRFbmNvdW50ZXJFcnJvckR1cmluZ1BhcnNp
bmdDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dKHVpbnQ2NF90
IGVycm9yQ29kZSkgewotICAgICAgICBkaWRQYXJzZVRyYWNrcyh7IH0sIGVycm9yQ29kZSk7Ci0g
ICAgfSk7Ci0KLSAgICBwYXJzZXItPnNldERpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjayhbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dKFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+
JiYgbWVkaWFTYW1wbGUsIHVpbnQ2NF90IHRyYWNrSUQsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBl
KSB7Ci0gICAgICAgIGRpZFByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShtZWRpYVNhbXBsZSksIHRy
YWNrSUQsIG1lZGlhVHlwZSk7Ci0gICAgfSk7CiAKICAgICBMb2NrZXIgbG9ja2VyIHsgbV9wYXJz
ZVRyYWNrc0xvY2sgfTsKICAgICBtX2J5dGVTb3VyY2UgPSBXVEZNb3ZlKGJ5dGVTb3VyY2UpOwpA
QCAtMTczLDE0ICsxNDUsMzQgQEAgdm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6cGFyc2VCeXRlU291
cmNlKFJldGFpblB0cjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWY+JiYgYnl0ZVMKICAgICBtX2R1cmF0
aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwogICAgIG1fdHJhY2tSZWFkZXJzLmNsZWFy
KCk7CiAKLSAgICByZWFkZXJRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
UmVmIHsgKnRoaXMgfSwgYnl0ZVNvdXJjZSA9IG1fYnl0ZVNvdXJjZSwgcGFyc2VyID0gcGFyc2Vy
LnJlbGVhc2VOb25OdWxsKCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIHBhcnNlci0+YXBwZW5kRGF0
YShXVEZNb3ZlKGJ5dGVTb3VyY2UpKTsKLSAgICAgICAgTWVkaWFUcmFja1JlYWRlcjo6c3RvcmFn
ZVF1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBw
YXJzZXIgPSBXVEZNb3ZlKHBhcnNlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBmaW5pc2hQ
YXJzaW5nKFdURk1vdmUocGFyc2VyKSk7CisgICAgLy8gVE9ETzogd2h5IGRvIHdlIG5lZWQgYSBz
dG9yYWdlIHF1ZXVlIGRpZmZlcmVudCB0byByZWFkZXIncyBxdWV1ZT8KKyAgICByZWFkZXJRdWV1
ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgYnl0ZVNv
dXJjZSA9IG1fYnl0ZVNvdXJjZV0oKSBtdXRhYmxlIHsKKyAgICAgICAgV2ViTVBhcnNlciBwYXJz
ZXIoKnRoaXMpOworICAgICAgICBwYXJzZXIuc2V0TG9nZ2VyKCptX2xvZ2dlciwgbV9sb2dJZGVu
dGlmaWVyKTsKKyAgICAgICAgcGFyc2VyLmNyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMoKTsKKyAgICAg
ICAgYXV0byByZXN1bHQgPSBwYXJzZXIucGFyc2UoV1RGTW92ZShieXRlU291cmNlKSk7CisgICAg
ICAgIE1lZGlhVHJhY2tSZWFkZXI6OnN0b3JhZ2VRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZXR1cm5WYWx1ZSgpKQor
ICAgICAgICAgICAgICAgIGRpZFBhcnNlVHJhY2tzKHsgfSwgcmVzdWx0LnJldHVyblZhbHVlKCkp
OworICAgICAgICAgICAgZmluaXNoUGFyc2luZygpOwogICAgICAgICB9KTsKICAgICB9KTsKIH0K
IAordm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6cGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFNvdXJj
ZUJ1ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdt
ZW50KQoreworICAgIE1lZGlhVHJhY2tSZWFkZXI6OnN0b3JhZ2VRdWV1ZSgpLmRpc3BhdGNoKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgaW5pdGlhbGl6YXRpb25TZWdtZW50
ID0gV1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAg
ZGlkUGFyc2VUcmFja3MoV1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpLCBub0Vycik7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OnBhcnNlZE1lZGlhRGF0YShNZWRp
YVNhbXBsZXNCbG9jayYmIG1lZGlhU2FtcGxlcykKK3sKKyAgICBNZWRpYVRyYWNrUmVhZGVyOjpz
dG9yYWdlUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlz
IH0sIG1lZGlhU2FtcGxlcyA9IFdURk1vdmUobWVkaWFTYW1wbGVzKV0gKCkgbXV0YWJsZSB7Cisg
ICAgICAgIGRpZFByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShtZWRpYVNhbXBsZXMpKTsKKyAgICB9
KTsKK30KKwogdm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6ZGlkUGFyc2VUcmFja3MoU291cmNlQnVm
ZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYgc2VnbWVudCwgdWludDY0
X3QgZXJyb3JDb2RlKQogewogICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKQEAgLTIyNSwy
MCArMjE3LDIwIEBAIHZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OmRpZFBhcnNlVHJhY2tzKFNvdXJj
ZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uCiAgICAgbV9pbml0ID0gdHJ1ZTsK
IH0KIAotdm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6ZGlkUHJvdmlkZU1lZGlhRGF0YShSZWY8TWVk
aWFTYW1wbGVBVkZPYmpDPiYmIG1lZGlhU2FtcGxlLCB1aW50NjRfdCB0cmFja0lELCBjb25zdCBT
dHJpbmcmKQordm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6ZGlkUHJvdmlkZU1lZGlhRGF0YShNZWRp
YVNhbXBsZXNCbG9jayYmIG1lZGlhU2FtcGxlcykKIHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxv
b3AoKSk7CiAKICAgICBMb2NrZXIgbG9ja2VyIHsgbV9wYXJzZVRyYWNrc0xvY2sgfTsKICAgICBh
dXRvIHRyYWNrSW5kZXggPSBtX3RyYWNrUmVhZGVycy5maW5kSWYoWyZdKGF1dG8mIHRyYWNrKSB7
Ci0gICAgICAgIHJldHVybiB0cmFjay0+dHJhY2tJRCgpID09IHRyYWNrSUQ7CisgICAgICAgIHJl
dHVybiB0cmFjay0+dHJhY2tJRCgpID09IG1lZGlhU2FtcGxlcy5pbmZvKCktPnRyYWNrSUQ7CiAg
ICAgfSk7CiAKICAgICBpZiAodHJhY2tJbmRleCAhPSBub3RGb3VuZCkKLSAgICAgICAgbV90cmFj
a1JlYWRlcnNbdHJhY2tJbmRleF0tPmFkZFNhbXBsZShXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgbV9i
eXRlU291cmNlLmdldCgpKTsKKyAgICAgICAgbV90cmFja1JlYWRlcnNbdHJhY2tJbmRleF0tPmFk
ZFNhbXBsZShXVEZNb3ZlKG1lZGlhU2FtcGxlcyksIG1fYnl0ZVNvdXJjZS5nZXQoKSk7CiB9CiAK
LXZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OmZpbmlzaFBhcnNpbmcoUmVmPFNvdXJjZUJ1ZmZlclBh
cnNlcj4mJiBwYXJzZXIpCit2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpmaW5pc2hQYXJzaW5nKCkK
IHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAgICAgQUxXQVlTX0xPR19JRl9QT1NT
SUJMRShMT0dJREVOVElGSUVSKTsKQEAgLTI1OCwxMSArMjUwLDYgQEAgdm9pZCBNZWRpYUZvcm1h
dFJlYWRlcjo6ZmluaXNoUGFyc2luZyhSZWY8U291cmNlQnVmZmVyUGFyc2VyPiYmIHBhcnNlcikK
ICAgICAgICAgaWYgKGdyZWF0ZXN0UHJlc2VudGF0aW9uVGltZS5pc1ZhbGlkKCkpCiAgICAgICAg
ICAgICBtX2R1cmF0aW9uID0gZ3JlYXRlc3RQcmVzZW50YXRpb25UaW1lOwogICAgIH0KLQotICAg
IHBhcnNlci0+c2V0RGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxsYmFjayhudWxscHRyKTsK
LSAgICBwYXJzZXItPnNldERpZEVuY291bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNrKG51
bGxwdHIpOwotICAgIHBhcnNlci0+c2V0RGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKG51bGxw
dHIpOwotICAgIHBhcnNlci0+cmVzZXRQYXJzZXJTdGF0ZSgpOwogfQogCiBPU1N0YXR1cyBNZWRp
YUZvcm1hdFJlYWRlcjo6Y29weVByb3BlcnR5KENGU3RyaW5nUmVmIGtleSwgQ0ZBbGxvY2F0b3JS
ZWYgYWxsb2NhdG9yLCB2b2lkKiB2YWx1ZUNvcHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5o
CmluZGV4IDE1ZDU1NzM2MzM4MTc0NjBjMmU2MjA0NDE5MDEwMjNjZjg2YjRhOTMuLjFhNDhjMTY4
MGU4NzVkYzYyNTIyODc0MTVmNTQ4OGM5MmM1ODgwMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJl
YWRlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikK
IAogI2luY2x1ZGUgIkNvcmVNZWRpYVdyYXBwZWQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NvdXJj
ZUJ1ZmZlclBhcnNlcldlYk0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NvdXJjZUJ1ZmZlclByaXZh
dGVDbGllbnQuaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KQEAgLTM2LDE1ICszNywxNSBAQAogREVDTEFSRV9DT1JFX01FRElBX1RSQUlUUyhGb3Jt
YXRSZWFkZXIpOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBNZWRpYVNhbXBsZUFWRk9i
akM7Ci1jbGFzcyBTb3VyY2VCdWZmZXJQYXJzZXI7CitjbGFzcyBNZWRpYVNhbXBsZXNCbG9jazsK
K2NsYXNzIFdlYk1QYXJzZXI7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBNZWRp
YVRyYWNrUmVhZGVyOwogCi1jbGFzcyBNZWRpYUZvcm1hdFJlYWRlciBmaW5hbCA6IHB1YmxpYyBD
b3JlTWVkaWFXcmFwcGVkPE1lZGlhRm9ybWF0UmVhZGVyPiB7CitjbGFzcyBNZWRpYUZvcm1hdFJl
YWRlciBmaW5hbCA6IHB1YmxpYyBDb3JlTWVkaWFXcmFwcGVkPE1lZGlhRm9ybWF0UmVhZGVyPiAs
IHB1YmxpYyBXZWJDb3JlOjpXZWJNUGFyc2VyOjpDYWxsYmFjayB7CiBwdWJsaWM6CiAgICAgdXNp
bmcgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYUZvcm1hdFJlYWRlcj46OnVud3JhcDsKIApAQCAtNjQs
MTIgKzY1LDE2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTWVkaWFGb3JtYXRS
ZWFkZXIoQWxsb2NhdG9yJiYpOwogCisgICAgLy8gV2ViTVBhcnNlcjo6Q2FsbGJhY2sKKyAgICB2
b2lkIHBhcnNlZEluaXRpYWxpemF0aW9uRGF0YShXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXI6
OkluaXRpYWxpemF0aW9uU2VnbWVudCYmKSBmaW5hbDsKKyAgICB2b2lkIHBhcnNlZE1lZGlhRGF0
YShXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jayYmKSBmaW5hbDsKKwogICAgIHZvaWQgcGFyc2VC
eXRlU291cmNlKFJldGFpblB0cjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWY+JiYpOwogICAgIHZvaWQg
ZGlkUGFyc2VUcmFja3MoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlh
bGl6YXRpb25TZWdtZW50JiYsIHVpbnQ2NF90IGVycm9yQ29kZSk7CiAgICAgdm9pZCBkaWRTZWxl
Y3RWaWRlb1RyYWNrKFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlJiwgYm9vbCkgeyB9CiAgICAg
dm9pZCBkaWRFbmFibGVBdWRpb1RyYWNrKFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlJiwgYm9v
bCkgeyB9Ci0gICAgdm9pZCBkaWRQcm92aWRlTWVkaWFEYXRhKFJlZjxXZWJDb3JlOjpNZWRpYVNh
bXBsZUFWRk9iakM+JiYsIHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGZpbmlz
aFBhcnNpbmcoUmVmPFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcj4mJik7CisgICAgdm9pZCBk
aWRQcm92aWRlTWVkaWFEYXRhKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrJiYpOworICAgIHZv
aWQgZmluaXNoUGFyc2luZygpOwogCiAgICAgLy8gQ01CYXNlQ2xhc3MKICAgICBTdHJpbmcgZGVi
dWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJXZWJLaXQ6Ok1lZGlhRm9ybWF0
UmVhZGVyIl9zOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcAppbmRleCA4
OWM3OTJmZTVkNDVlNDU5ODg0MTQzZjU0NDI5MDE2ZDY3MmM0ZTc1Li5jOTRhZTJmOGU4OTEwY2Zl
MjI4Y2U1NjUyOWUxNGVlODFkMTAyM2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVS
YW5nZS5jcHAKQEAgLTMzLDU1ICszMyw3MyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKLU1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpNZWRpYVNhbXBsZUJ5
dGVSYW5nZShNZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNv
dXJjZSwgdWludDY0X3QgdHJhY2tJRCkKLSAgICA6IG1fcHJlc2VudGF0aW9uVGltZShzYW1wbGUu
cHJlc2VudGF0aW9uVGltZSgpKQotICAgICwgbV9kZWNvZGVUaW1lKHNhbXBsZS5kZWNvZGVUaW1l
KCkpCi0gICAgLCBtX2R1cmF0aW9uKHNhbXBsZS5kdXJhdGlvbigpKQotICAgICwgbV9ieXRlUmFu
Z2UoKnNhbXBsZS5ieXRlUmFuZ2UoKSkKLSAgICAsIG1fdHJhY2tJRCh0cmFja0lEKQotICAgICwg
bV9zaXplSW5CeXRlcyhzYW1wbGUuc2l6ZUluQnl0ZXMoKSkKLSAgICAsIG1fcHJlc2VudGF0aW9u
U2l6ZShzYW1wbGUucHJlc2VudGF0aW9uU2l6ZSgpKQorTWVkaWFTYW1wbGVCeXRlUmFuZ2U6Ok1l
ZGlhU2FtcGxlQnl0ZVJhbmdlKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlLCBNVFBsdWdpbkJ5
dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSkKKyAgICA6IG1fYmxvY2soV1RGTW92ZShzYW1wbGUpKQog
ICAgICwgbV9ieXRlU291cmNlKGJ5dGVTb3VyY2UpCi0gICAgLCBtX2ZsYWdzKHNhbXBsZS5mbGFn
cygpKQogewotICAgIEFTU0VSVCghaXNNYWluUnVuTG9vcCgpKTsKLSAgICBBU1NFUlQobV9kZWNv
ZGVUaW1lID09IG1fcHJlc2VudGF0aW9uVGltZSB8fCBtX2RlY29kZVRpbWUgPT0gTWVkaWFUaW1l
OjppbnZhbGlkVGltZSgpKTsKLSAgICBhdXRvIHBsYXRmb3JtU2FtcGxlID0gc2FtcGxlLnBsYXRm
b3JtU2FtcGxlKCk7Ci0gICAgc3dpdGNoIChwbGF0Zm9ybVNhbXBsZS50eXBlKSB7Ci0gICAgY2Fz
ZSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlOgotICAgICAgICBtX2Zvcm1hdERl
c2NyaXB0aW9uID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHBsYXRm
b3JtU2FtcGxlLnNhbXBsZS5jbVNhbXBsZUJ1ZmZlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGU6Ci0gICAgICAgIG1fZm9ybWF0
RGVzY3JpcHRpb24gPSBwbGF0Zm9ybVNhbXBsZS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29u
ZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBBU1NFUlQoIW1fYmxvY2suaXNFbXB0
eSgpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxNZWRpYVNhbXBsZTo6Qnl0
ZVJhbmdlPihtX2Jsb2NrLmxhc3QoKS5kYXRhKSk7CiB9CiAKIEF0b21TdHJpbmcgTWVkaWFTYW1w
bGVCeXRlUmFuZ2U6OnRyYWNrSUQoKSBjb25zdAogewotICAgIHJldHVybiBBdG9tU3RyaW5nOjpu
dW1iZXIobV90cmFja0lEKTsKKyAgICByZXR1cm4gQXRvbVN0cmluZzo6bnVtYmVyKG1fYmxvY2su
aW5mbygpLT50cmFja0lEKTsKIH0KIAogUGxhdGZvcm1TYW1wbGUgTWVkaWFTYW1wbGVCeXRlUmFu
Z2U6OnBsYXRmb3JtU2FtcGxlKCkgY29uc3QKIHsKKyAgICBBU1NFUlQobV9ibG9jay5pbmZvKCkp
OwogICAgIHJldHVybiB7CiAgICAgICAgIFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVU
eXBlLAotICAgICAgICB7IC5ieXRlUmFuZ2VTYW1wbGUgPSBzdGQ6Om1ha2VfcGFpcihtX2J5dGVT
b3VyY2UuZ2V0KCksIG1fZm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkpIH0sCisgICAgICAgIHsgLmJ5
dGVSYW5nZVNhbXBsZSA9IHN0ZDo6bWFrZV9wYWlyKG1fYnl0ZVNvdXJjZS5nZXQoKSwgc3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcigqbV9ibG9jay5pbmZvKCkpKSB9LAogICAgIH07CiB9CiAKLXZvaWQg
TWVkaWFTYW1wbGVCeXRlUmFuZ2U6Om9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUm
IG9mZnNldCkKK01lZGlhVGltZSBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6cHJlc2VudGF0aW9uVGlt
ZSgpIGNvbnN0CiB7Ci0gICAgc2V0VGltZXN0YW1wcyhwcmVzZW50YXRpb25UaW1lKCkgKyBvZmZz
ZXQsIGRlY29kZVRpbWUoKSArIG9mZnNldCk7CisgICAgcmV0dXJuIG1fYmxvY2subGFzdCgpLnBy
ZXNlbnRhdGlvblRpbWU7CiB9CiAKLXZvaWQgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnNldFRpbWVz
dGFtcHMoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBjb25zdCBNZWRpYVRpbWUm
IGRlY29kZVRpbWUpCitNZWRpYVRpbWUgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmRlY29kZVRpbWUo
KSBjb25zdAogewotICAgIG1fcHJlc2VudGF0aW9uVGltZSA9IHByZXNlbnRhdGlvblRpbWU7Ci0g
ICAgbV9kZWNvZGVUaW1lID0gZGVjb2RlVGltZTsKKyAgICByZXR1cm4gbV9ibG9jay5sYXN0KCku
ZGVjb2RlVGltZTsKK30KKworTWVkaWFUaW1lIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpkdXJhdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmxvY2subGFzdCgpLmR1cmF0aW9uOworfQorCitz
aXplX3QgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnNpemVJbkJ5dGVzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc3RkOjpnZXQ8TWVkaWFTYW1wbGU6OkJ5dGVSYW5nZT4obV9ibG9jay5sYXN0KCkuZGF0
YSkuYnl0ZUxlbmd0aDsKK30KKworV2ViQ29yZTo6RmxvYXRTaXplIE1lZGlhU2FtcGxlQnl0ZVJh
bmdlOjpwcmVzZW50YXRpb25TaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9ibG9jay5pc1ZpZGVv
KCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxjb25zdCBWaWRlb0luZm8+KG1fYmxvY2suaW5m
bygpKS0+ZGlzcGxheVNpemU7CisgICAgcmV0dXJuIHsgfTsKK30KKworTWVkaWFTYW1wbGVCeXRl
UmFuZ2U6OlNhbXBsZUZsYWdzIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpmbGFncygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fYmxvY2subGFzdCgpLmZsYWdzOworfQorCitzdGQ6Om9wdGlvbmFsPE1l
ZGlhU2FtcGxlQnl0ZVJhbmdlOjpCeXRlUmFuZ2U+IE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpieXRl
UmFuZ2UoKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6OmdldDxNZWRpYVNhbXBsZTo6Qnl0ZVJh
bmdlPihtX2Jsb2NrLmxhc3QoKS5kYXRhKTsKK30KKwordm9pZCBNZWRpYVNhbXBsZUJ5dGVSYW5n
ZTo6b2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnNldFRpbWVzdGFt
cHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJikKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFu
Z2UuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNh
bXBsZUJ5dGVSYW5nZS5oCmluZGV4IDVkYTI4ODVkNDVkMTc4ODgzNjIyOTE3ZTVlNGFjYjk3Zjhl
Y2FlMDcuLmE0YjE3NDY1MDFhYjhiZTFjNzVlYjlmNjBiY2Q2NTU1MDY0ZjdjNzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBs
ZUJ5dGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJl
YWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCkBAIC0yNyw0OCArMjcsMzcgQEAKIAogI2lmIEVO
QUJMRShXRUJNX0ZPUk1BVF9SRUFERVIpCiAKLSNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2FtcGxl
QVZGT2JqQy5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvTWVkaWFUb29sYm94U1BJLmg+Ci0j
aW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL01lZGlhU2FtcGxlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBj
bGFzcyBNZWRpYVNhbXBsZUJ5dGVSYW5nZSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpNZWRpYVNh
bXBsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUJ5dGVSYW5nZT4gY3Jl
YXRlKFdlYkNvcmU6Ok1lZGlhU2FtcGxlJiBzYW1wbGUsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBi
eXRlU291cmNlLCB1aW50NjRfdCB0cmFja0lEKQorICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVC
eXRlUmFuZ2U+IGNyZWF0ZShXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZSwgTVRQ
bHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBNZWRpYVNhbXBsZUJ5dGVSYW5nZShzYW1wbGUsIGJ5dGVTb3VyY2UsIHRyYWNr
SUQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVCeXRlUmFuZ2Uo
V1RGTW92ZShzYW1wbGUpLCBieXRlU291cmNlKSk7CiAgICAgfQogCi0gICAgTWVkaWFUaW1lIHBy
ZXNlbnRhdGlvblRpbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ByZXNlbnRhdGlvblRpbWU7
IH0KLSAgICBNZWRpYVRpbWUgZGVjb2RlVGltZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZGVj
b2RlVGltZTsgfQotICAgIE1lZGlhVGltZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fZHVyYXRpb247IH0KLSAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIHByZXNlbnRhdGlv
blNpemUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ByZXNlbnRhdGlvblNpemU7IH0KLSAgICBT
YW1wbGVGbGFncyBmbGFncygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZmxhZ3M7IH0KLSAgICBz
dGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9ieXRlUmFuZ2U7IH0KKyAgICBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZSgpIGNvbnN0IGZp
bmFsOworICAgIE1lZGlhVGltZSBkZWNvZGVUaW1lKCkgY29uc3QgZmluYWw7CisgICAgTWVkaWFU
aW1lIGR1cmF0aW9uKCkgY29uc3QgZmluYWw7CisgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29u
c3QgZmluYWw7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIHByZXNlbnRhdGlvblNpemUoKSBjb25z
dCBmaW5hbDsKKyAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IGZpbmFsOworICAgIHN0ZDo6
b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBmaW5hbDsKIAogICAgIEF0b21T
dHJpbmcgdHJhY2tJRCgpIGNvbnN0IGZpbmFsOwogICAgIFdlYkNvcmU6OlBsYXRmb3JtU2FtcGxl
IHBsYXRmb3JtU2FtcGxlKCkgY29uc3QgZmluYWw7CiAgICAgV2ViQ29yZTo6UGxhdGZvcm1TYW1w
bGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gV2ViQ29y
ZTo6UGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGU7IH0KICAgICB2b2lkIG9mZnNl
dFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKICAgICB2b2lkIHNldFRpbWVz
dGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJikgZmluYWw7Ci0gICAgUmVm
PE1lZGlhU2FtcGxlPiBjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0IHsgcmV0dXJuICpj
b25zdF9jYXN0PE1lZGlhU2FtcGxlQnl0ZVJhbmdlKj4odGhpcyk7IH0KKyAgICBSZWY8TWVkaWFT
YW1wbGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gKmNv
bnN0X2Nhc3Q8TWVkaWFTYW1wbGVCeXRlUmFuZ2UqPih0aGlzKTsgfQogCiBwcml2YXRlOgotICAg
IE1lZGlhU2FtcGxlQnl0ZVJhbmdlKE1lZGlhU2FtcGxlJiwgTVRQbHVnaW5CeXRlU291cmNlUmVm
LCB1aW50NjRfdCB0cmFja0lEKTsKKyAgICBNZWRpYVNhbXBsZUJ5dGVSYW5nZShXZWJDb3JlOjpN
ZWRpYVNhbXBsZXNCbG9jayYmLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYpOwogCi0gICAgTWVkaWFU
aW1lIG1fcHJlc2VudGF0aW9uVGltZTsKLSAgICBNZWRpYVRpbWUgbV9kZWNvZGVUaW1lOwotICAg
IE1lZGlhVGltZSBtX2R1cmF0aW9uOwotICAgIEJ5dGVSYW5nZSBtX2J5dGVSYW5nZTsKLSAgICB1
aW50NjRfdCBtX3RyYWNrSUQ7Ci0gICAgc2l6ZV90IG1fc2l6ZUluQnl0ZXM7Ci0gICAgV2ViQ29y
ZTo6RmxvYXRTaXplIG1fcHJlc2VudGF0aW9uU2l6ZTsKKyAgICBjb25zdCBXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jayBtX2Jsb2NrOwogICAgIFJldGFpblB0cjxNVFBsdWdpbkJ5dGVTb3VyY2VS
ZWY+IG1fYnl0ZVNvdXJjZTsKLSAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4g
bV9mb3JtYXREZXNjcmlwdGlvbjsKLSAgICBTYW1wbGVGbGFncyBtX2ZsYWdzOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMv
TWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3BwIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcAppbmRleCA2
YWEwMjNjNjY1NjM0MzI1Yjc0OGJiM2Q3NTU4NjBkMDk0N2UwYjRlLi5mYzlkZTdmNTY1YmNjNGFh
N2QyNTljNzllOWY5Nzc1NTkzMzA4ZmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJzb3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5j
cHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJN
ZWRpYVRyYWNrUmVhZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DTVV0aWxpdGllcy5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTWVkaWFTYW1wbGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NhbXBsZU1h
cC5oPgogI2luY2x1ZGUgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+
CkBAIC0zNDgsMjYgKzM0OSwxOCBAQCBPU1N0YXR1cyBNZWRpYVNhbXBsZUN1cnNvcjo6Z2V0U2Ft
cGxlVGltaW5nKENNU2FtcGxlVGltaW5nSW5mbyogc2FtcGxlVGltaW5nKSBjbwogCiBPU1N0YXR1
cyBNZWRpYVNhbXBsZUN1cnNvcjo6Z2V0U3luY0luZm8oTVRQbHVnaW5TYW1wbGVDdXJzb3JTeW5j
SW5mbyogc3luY0luZm8pIGNvbnN0CiB7Ci0gICAgT1NTdGF0dXMgc3luY0luZm9TdGF0dXMgPSBu
b0VycjsKLSAgICBhdXRvIGdldFNhbXBsZVN0YXR1cyA9IGdldE1lZGlhU2FtcGxlKFsmXShNZWRp
YVNhbXBsZSYgc2FtcGxlKSB7Ci0gICAgICAgIGlmIChzYW1wbGUuaGFzU3luY0luZm8oKSkgewot
ICAgICAgICAgICAgKnN5bmNJbmZvID0gewotICAgICAgICAgICAgICAgIC5mdWxsU3luYyA9IHNh
bXBsZS5pc1N5bmMoKQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBzeW5jSW5mb1N0YXR1cyA9IGtDTUJhc2VPYmplY3RFcnJvcl9WYWx1ZU5v
dEF2YWlsYWJsZTsKKyAgICByZXR1cm4gZ2V0TWVkaWFTYW1wbGUoWyZdKE1lZGlhU2FtcGxlJiBz
YW1wbGUpIHsKKyAgICAgICAgKnN5bmNJbmZvID0geworICAgICAgICAgICAgLmZ1bGxTeW5jID0g
c2FtcGxlLmlzU3luYygpCisgICAgICAgIH07CiAgICAgfSk7Ci0gICAgaWYgKHN5bmNJbmZvU3Rh
dHVzICE9IG5vRXJyKQotICAgICAgICByZXR1cm4gc3luY0luZm9TdGF0dXM7Ci0gICAgcmV0dXJu
IGdldFNhbXBsZVN0YXR1czsKIH0KIAogT1NTdGF0dXMgTWVkaWFTYW1wbGVDdXJzb3I6OmNvcHlG
b3JtYXREZXNjcmlwdGlvbihDTUZvcm1hdERlc2NyaXB0aW9uUmVmKiBmb3JtYXREZXNjcmlwdGlv
bk91dCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0TWVkaWFTYW1wbGUoWyZdKE1lZGlhU2FtcGxl
JiBzYW1wbGUpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpCeXRl
UmFuZ2VTYW1wbGVUeXBlKTsKLSAgICAgICAgKmZvcm1hdERlc2NyaXB0aW9uT3V0ID0gcmV0YWlu
UHRyKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5ieXRlUmFuZ2VTYW1wbGUuc2Vjb25k
KS5sZWFrUmVmKCk7CisgICAgICAgICpmb3JtYXREZXNjcmlwdGlvbk91dCA9IGNyZWF0ZUZvcm1h
dERlc2NyaXB0aW9uRnJvbVRyYWNrSW5mbyhzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUu
Ynl0ZVJhbmdlU2FtcGxlLnNlY29uZCkubGVha1JlZigpOwogICAgIH0pOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFj
a1JlYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFUcmFja1JlYWRlci5jcHAKaW5kZXggZjA0YzU5MDZmMWExNmZiM2RmNzhiZDQzODI4YzBk
YzZkOGRlYjYxYS4uNDcyNGVjOGRhM2ZkMjMwN2NiNjU3OWVjMGUwNWExNDY5OTA2NmVhZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlh
VHJhY2tSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1h
dFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
Ik1lZGlhU2FtcGxlQnl0ZVJhbmdlLmgiCiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVDdXJzb3IuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0F1ZGlvVHJhY2tQcml2YXRlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9DTVV0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFEZXNjcmlwdGlvbi5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU2FtcGxlTWFwLmg+CkBAIC05NywxNSArOTgsMTcgQEAgTWVkaWFUaW1lIE1lZGlhVHJh
Y2tSZWFkZXI6OmdyZWF0ZXN0UHJlc2VudGF0aW9uVGltZSgpIGNvbnN0CiAgICAgcmV0dXJuIGxh
c3RTYW1wbGUucHJlc2VudGF0aW9uVGltZSgpICsgbGFzdFNhbXBsZS5kdXJhdGlvbigpOwogfQog
Ci12b2lkIE1lZGlhVHJhY2tSZWFkZXI6OmFkZFNhbXBsZShSZWY8TWVkaWFTYW1wbGU+JiYgc2Ft
cGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSkKK3ZvaWQgTWVkaWFUcmFja1Jl
YWRlcjo6YWRkU2FtcGxlKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVT
b3VyY2VSZWYgYnl0ZVNvdXJjZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7CiAg
ICAgTG9ja2VyIGxvY2tlciB7IG1fc2FtcGxlU3RvcmFnZUxvY2sgfTsKICAgICBpZiAoIW1fc2Ft
cGxlU3RvcmFnZSkKICAgICAgICAgbV9zYW1wbGVTdG9yYWdlID0gbWFrZVVuaXF1ZTxTYW1wbGVT
dG9yYWdlPigpOwogCi0gICAgQVNTRVJUKCFzYW1wbGUtPmlzRGl2aXNhYmxlKCkgJiYgc2FtcGxl
LT5ieXRlUmFuZ2UoKSk7Ci0gICAgYXV0byBzYW1wbGVUb0FkZCA9IE1lZGlhU2FtcGxlQnl0ZVJh
bmdlOjpjcmVhdGUoc2FtcGxlLmdldCgpLCBieXRlU291cmNlLCBtX3RyYWNrSUQpOworICAgIEFT
U0VSVCghc2FtcGxlLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8TWVkaWFTYW1wbGU6OkJ5dGVSYW5nZT4oc2FtcGxlLmxhc3QoKS5kYXRhKSk7CisKKyAgICBh
dXRvIHNhbXBsZVRvQWRkID0gTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmNyZWF0ZShXVEZNb3ZlKHNh
bXBsZSksIGJ5dGVTb3VyY2UpOwogCiAgICAgLy8gRklYTUU6IEV2ZW4gdGhvdWdoIFdlYk0gbXV4
ZXIgZ3VpZGVsaW5lcyBzYXkgdGhpcyBtdXN0IG5vdCBoYXBwZW4sIHNvbWUgdmlkZW8gdHJhY2tz
IGhhdmUgdHdvCiAgICAgLy8gY29uc2VjdXRpdmUgZnJhbWVzIHdpdGggdGhlIHNhbWUgcHJlc2Vu
dGF0aW9uIHRpbWUuIFNhbXBsZU1hcCB3aWxsIG5vdCBzdG9yZSB0aGUgc2Vjb25kIGZyYW1lCkBA
IC0xODUsNyArMTg4LDE1IEBAIE9TU3RhdHVzIE1lZGlhVHJhY2tSZWFkZXI6OmNvcHlQcm9wZXJ0
eShDRlN0cmluZ1JlZiBrZXksIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvCiAKICAgICBpZiAoQ0ZF
cXVhbChrZXksIFBBTDo6Z2V0X01lZGlhVG9vbGJveF9rTVRQbHVnaW5UcmFja1JlYWRlclByb3Bl
cnR5X0Zvcm1hdERlc2NyaXB0aW9uQXJyYXkoKSkpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihsYXN0U2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlw
ZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Qnl0ZVJhbmdlU2FtcGxlVHlwZSk7Ci0gICAgICAgIGNvbnN0
IHZvaWQqIGRlc2NyaXB0aW9uc1sxXSA9IHsgbGFzdFNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNh
bXBsZS5ieXRlUmFuZ2VTYW1wbGUuc2Vjb25kIH07CisgICAgICAgIGNvbnN0IFRyYWNrSW5mbyYg
dHJhY2tJbmZvID0gbGFzdFNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5ieXRlUmFuZ2VT
YW1wbGUuc2Vjb25kOworICAgICAgICBpZiAoIW1fdHJhY2tJbmZvKSB7CisgICAgICAgICAgICBt
X3RyYWNrSW5mbyA9ICZsYXN0U2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkuc2FtcGxlLmJ5dGVSYW5n
ZVNhbXBsZS5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBtX2Zvcm1hdERlc2NyaXB0aW9uID0g
V2ViQ29yZTo6Y3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKCptX3RyYWNrSW5m
byk7CisgICAgICAgIH0gZWxzZSBpZiAoKm1fdHJhY2tJbmZvICE9IHRyYWNrSW5mbykgeworICAg
ICAgICAgICAgbV90cmFja0luZm8gPSAmdHJhY2tJbmZvOworICAgICAgICAgICAgbV9mb3JtYXRE
ZXNjcmlwdGlvbiA9IFdlYkNvcmU6OmNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRyYWNrSW5m
bygqbV90cmFja0luZm8pOworICAgICAgICB9CisgICAgICAgIGNvbnN0IHZvaWQqIGRlc2NyaXB0
aW9uc1sxXSA9IHsgbV9mb3JtYXREZXNjcmlwdGlvbi5nZXQoKSB9OwogICAgICAgICAqcmVpbnRl
cnByZXRfY2FzdDxDRkFycmF5UmVmKj4oY29waWVkVmFsdWUpID0gYWRvcHRDRihDRkFycmF5Q3Jl
YXRlKGFsbG9jYXRvciwgZGVzY3JpcHRpb25zLCAxLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSku
bGVha1JlZigpOwogICAgICAgICByZXR1cm4gbm9FcnI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIu
aCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNr
UmVhZGVyLmgKaW5kZXggMTIwNWJjMjZkYWZlZTdkZDRmZGNhN2M4NjYzODE4ZmQ4Zjg5NzQyYy4u
ZGQyNWZjM2RiNzJjZTg2ZjhlZTc0ZTFjNGRjYzhkOWU4YzQ3MmYyMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFU
cmFja1JlYWRlci5oCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFdvcmtRdWV1ZTsKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIEF1ZGlvVHJhY2tQcml2YXRlOwogY2xhc3MgSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZTsKLWNsYXNzIE1lZGlhU2FtcGxlOworY2xhc3MgTWVkaWFTYW1wbGVzQmxvY2s7
CiBjbGFzcyBUcmFja1ByaXZhdGVCYXNlOwogY2xhc3MgVmlkZW9UcmFja1ByaXZhdGU7CiB9CkBA
IC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBNZWRpYVRpbWUgZ3JlYXRlc3RQcmVzZW50YXRp
b25UaW1lKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1f
aXNFbmFibGVkID0gZW5hYmxlZCA/IEVuYWJsZWQ6OlRydWUgOiBFbmFibGVkOjpGYWxzZTsgfQot
ICAgIHZvaWQgYWRkU2FtcGxlKFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4mJiwgTVRQbHVnaW5C
eXRlU291cmNlUmVmKTsKKyAgICB2b2lkIGFkZFNhbXBsZShXZWJDb3JlOjpNZWRpYVNhbXBsZXNC
bG9jayYmLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYpOwogICAgIHZvaWQgd2FpdEZvclNhbXBsZShG
dW5jdGlvbjxib29sKFdlYkNvcmU6OlNhbXBsZU1hcCYsIGJvb2wpPiYmKSBjb25zdDsKICAgICB2
b2lkIGZpbmlzaFBhcnNpbmcoKTsKIApAQCAtMTExLDYgKzExMSw4IEBAIHByaXZhdGU6CiAgICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8U2FtcGxlU3RvcmFnZT4gbV9zYW1wbGVTdG9yYWdlIFdU
Rl9HVUFSREVEX0JZX0xPQ0sobV9zYW1wbGVTdG9yYWdlTG9jayk7CiAgICAgUmVmPGNvbnN0IExv
Z2dlcj4gbV9sb2dnZXI7CiAgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyOworICAgIFJl
dGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBtX2Zvcm1hdERlc2NyaXB0aW9uOworICAg
IFJlZlB0cjxjb25zdCBXZWJDb3JlOjpUcmFja0luZm8+IG1fdHJhY2tJbmZvOwogfTsKIAogY29u
c3RleHByIE1lZGlhVHJhY2tSZWFkZXI6OldyYXBwZXJDbGFzcyBNZWRpYVRyYWNrUmVhZGVyOjp3
cmFwcGVyQ2xhc3MoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDVkMzZiNTkxZjZhZjBmODM4NzgwNzdhNTVkZTFjMTM1OWMxMzY5NjAuLjMzM2Q4
Y2UwNDFjMGU1NDU4MWU5YWYyYWVjYmJlZDEwMjY5YmE1MTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0wMy0w
OCAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIEhhdmUgTWVk
aWFGb3JtYXRSZWFkZXIgcGx1Z2luIHVzZSBXZWJNUGFyc2VyIGRpcmVjdGx5CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc1OTQKKyAgICAgICAgcmRh
cjovLzg5OTYwMzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNwcDoKKwogMjAy
Mi0wMy0wNSAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgogCiAgICAgICAgIFNw
bGl0IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2Vi
TVBhcnNlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1Nh
bXBsZU1hcC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFw
LmNwcAppbmRleCA3MTIwNThhMzY4ODg3NzZiMTc3OGU0ZGNkOWQ4YTkwYzAyMDZhZWE4Li5lZGVl
MzEyYmNlMjNjMWFmMDNiZTBhZjBiNjJiZDI2M2JmNTMwYzA1IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNwcApAQCAtNzAsNyArNzAsNiBAQCBw
dWJsaWM6CiAgICAgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Zs
YWdzOyB9CiAgICAgUGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiB7IFBsYXRmb3JtU2FtcGxlOjpOb25lLCB7IG51bGxwdHIgfSB9OyB9CiAgICAgUGxh
dGZvcm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gUGxhdGZvcm1TYW1wbGU6Ok5vbmU7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4g
Ynl0ZVJhbmdlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBmaW5hbCB7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454193</attachid>
            <date>2022-03-08 21:57:36 -0800</date>
            <delta_ts>2022-03-08 23:40:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237594-20220309165734.patch</filename>
            <type>text/plain</type>
            <size>53401</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMDI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjI1ODQ4NWY2ZGU1NGYx
MDUzYmRmODA2MzE5ZDY4ZTU0OWVjMmQzOS4uNjQxYmI4OTgxYTdmYWFmNmM0Y2FmYzYwYTc2OGNk
ZmFjNTU4MDUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIyLTAzLTA4ICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgSGF2ZSBNZWRpYUZvcm1h
dFJlYWRlciBwbHVnaW4gdXNlIFdlYk1QYXJzZXIgZGlyZWN0bHkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzU5NAorICAgICAgICByZGFyOi8vODk5
NjAzMDcKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24uCisKKyAgICAgICAgQ292
ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL01lZGlhU2FtcGxl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZTo6Ynl0ZVJhbmdlIGNvbnN0KTogSGF2
ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL1ZpZGVvRnJhbWUu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL1ZpZGVvRnJhbWUuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFnZURlY29kZXJBVkZPYmpDLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyQVZGT2JqQ1NhbXBsZTo6Ynl0ZVJhbmdlRm9yQXR0
YWNobWVudCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmg6IEV4cG9ydCBzeW1ib2xzLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Y3JlYXRlQnl0ZVJhbmdlU2FtcGxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPblRyYWNrRW50cnkpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cHJvdmlkZU1lZGlhRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cmV0dXJuU2FtcGxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRp
bmdBdWRpb1NhbXBsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJj
ZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNr
RGF0YTo6Y3JlYXRlQnl0ZVJhbmdlU2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFy
c2VyOjpUcmFja0RhdGE6OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5oOgorICAgICAgICAqIHBs
YXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorCiAy
MDIyLTAzLTA4ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtDb2NvYV0gbWV0YWRhdGEgY3VlIGVuZFRpbWUgbWF5IG5vdCBiZSB1cGRhdGVkCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IGU3ZjhiNmJhM2FhY2VhMGZjMTk4ZmUyOGU0YThjZDM4YjUzYzkxOWQuLjM5Y2U0MjFl
ZmY0Y2I1OTc5MGY1ZWRkNGQ2Zjg0MDI4Njg1Y2Q0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMjItMDMtMDggIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAg
ICAgICBIYXZlIE1lZGlhRm9ybWF0UmVhZGVyIHBsdWdpbiB1c2UgV2ViTVBhcnNlciBkaXJlY3Rs
eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NTk0
CisgICAgICAgIHJkYXI6Ly84OTk2MDMwNworCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2Fy
bHNvbi4KKworICAgICAgICBEaXJlY3RseSBidWlsZCB0aGUgc2FtcGxlIHRhYmxlcyBmcm9tIHRo
ZSBzYW1wbGUncyBvZmZzZXQvc2l6ZSB3aXRob3V0CisgICAgICAgIGZpcnN0IGJ1aWxkIE1lZGlh
U2FtcGxlQVZGT2JqQyBvYmplY3RzLgorICAgICAgICBUaGUgTVRQbHVnaW5CeXRlU291cmNlUmVm
IGludGVyZmFjZSB1bmZvcnR1bmF0ZWx5IGRvZXNuJ3QgYWxsb3cgdG8gc2tpcCBhCisgICAgICAg
IGdpdmVuIG51bWJlciBvZiBieXRlcywgYW5kIHlvdSBtdXN0IHJlYWQgdGhlIGNvbnRlbnQgaW50
byBhIGJ1ZmZlciB0byBiZQorICAgICAgICBhYmxlIHRvIGNvbnRpbnVlIHJlYWRpbmcgdGhlIHJl
c291cmNlLgorICAgICAgICBBcyBzdWNoLCB3ZSBjb250aW51ZSB0byBoYXZlIHRvIGNyZWF0ZSBT
aGFyZWRCdWZmZXIgb2JqZWN0cyBmb3IgZWFjaCBzYW1wbGUuCisgICAgICAgIEhvd2V2ZXIsIHRo
b3NlIG9iamVjdHMgYXJlIG5vdyBtdWNoIHNob3J0ZXIgbGl2ZWQgYW5kIG5vdCBkaXNwYXRjaGVk
IHRvCisgICAgICAgIG90aGVyIHdvcmsgcXVldWVzLiBTbyB0aGUgcGVhayBtZW1vcnkgdXNhZ2Ug
d2hlbiBwbGF5aW5nIGEgd2VibSBpcworICAgICAgICBzaWduaWZpY2FudGx5IHJlZHVjZWQ6IGEg
NTAlIG1lbW9yeSByZWR1Y3Rpb24gKGZyb20gNDQwTUIgdG8gMjAyTUIgd2l0aCBhIHNhbXBsZSB2
aWRlbykKKworICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3Jt
YXRSZWFkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpNZWRpYUZvcm1hdFJlYWRlcjo6cGFyc2VC
eXRlU291cmNlKToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFGb3JtYXRSZWFkZXI6OnBhcnNlZElu
aXRpYWxpemF0aW9uRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhRm9ybWF0UmVhZGVyOjpw
YXJzZWRNZWRpYURhdGEpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYUZvcm1hdFJlYWRlcjo6ZGlk
UHJvdmlkZU1lZGlhRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhRm9ybWF0UmVhZGVyOjpm
aW5pc2hQYXJzaW5nKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01l
ZGlhRm9ybWF0UmVhZGVyLmg6CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRl
ci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxl
Qnl0ZVJhbmdlOjpNZWRpYVNhbXBsZUJ5dGVSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlh
U2FtcGxlQnl0ZVJhbmdlOjp0cmFja0lEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFT
YW1wbGVCeXRlUmFuZ2U6OnBsYXRmb3JtU2FtcGxlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnByZXNlbnRhdGlvblRpbWUgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6ZGVjb2RlVGltZSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpkdXJhdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpzaXplSW5CeXRlcyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpwcmVzZW50YXRpb25TaXplIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmZsYWdzIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6TWVkaWFTYW1wbGVCeXRlUmFuZ2U6OmJ5dGVSYW5nZSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpvZmZzZXRUaW1lc3RhbXBz
QnkpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6c2V0VGltZXN0YW1w
cyk6CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5
dGVSYW5nZS5oOgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFT
YW1wbGVDdXJzb3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUN1cnNvcjo6Y29w
eUZvcm1hdERlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlhRm9y
bWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVRy
YWNrUmVhZGVyOjphZGRTYW1wbGUpOgorICAgICAgICAoV2ViS2l0OjpNZWRpYVRyYWNrUmVhZGVy
Ojpjb3B5UHJvcGVydHkpOgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFUcmFja1JlYWRlci5oOgorCiAyMDIyLTAzLTA4ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5
YUBhcHBsZS5jb20+CiAKICAgICAgICAgU3BsaXQgU291cmNlQnVmZmVyUGFyc2VyV2ViTSBhbmQg
aGF2ZSBwbGF0Zm9ybSBhZ25vc3RpYyBXZWJNUGFyc2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVk
aWFTYW1wbGUuaAppbmRleCBhMTI4MjczYTU3NmY4M2JmYWUxN2I1NzI4MDgxNTI0ZjZkYmE1MjMz
Li4zODM0ZWY1ZTVjZWM0OWQ1ZDFhODllOTgwY2U2NGFlN2JiN2I2YzU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJQbGF0
Zm9ybVZpZGVvQ29sb3JTcGFjZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4K
ICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4K
ICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KQEAgLTQ3LDYgKzQ4LDcgQEAg
Y2xhc3MgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIE1vY2tTYW1wbGVCb3g7CiBjbGFz
cyBQcm9jZXNzSWRlbnRpdHk7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CitzdHJ1Y3QgVHJhY2tJbmZv
OwogCiBzdHJ1Y3QgUGxhdGZvcm1TYW1wbGUgewogICAgIGVudW0gVHlwZSB7CkBAIC02MSw3ICs2
Myw3IEBAIHN0cnVjdCBQbGF0Zm9ybVNhbXBsZSB7CiAgICAgICAgIGNvbnN0IE1vY2tTYW1wbGVC
b3gqIG1vY2tTYW1wbGVCb3g7CiAgICAgICAgIENNU2FtcGxlQnVmZmVyUmVmIGNtU2FtcGxlQnVm
ZmVyOwogICAgICAgICBHc3RTYW1wbGUqIGdzdFNhbXBsZTsKLSAgICAgICAgc3RkOjpwYWlyPE1U
UGx1Z2luQnl0ZVNvdXJjZVJlZiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZj4gYnl0ZVJhbmdlU2Ft
cGxlOworICAgICAgICBzdGQ6OnBhaXI8TVRQbHVnaW5CeXRlU291cmNlUmVmLCBzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPGNvbnN0IFRyYWNrSW5mbz4+IGJ5dGVSYW5nZVNhbXBsZTsKICAgICB9IHNh
bXBsZTsKIH07CiAKQEAgLTEwNyw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBi
eXRlT2Zmc2V0IHsgMCB9OwogICAgICAgICBzaXplX3QgYnl0ZUxlbmd0aCB7IDAgfTsKICAgICB9
OwotICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBj
b25zdCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0KIAogICAgIGVudW0gY2xhc3MgVmlkZW9Sb3Rh
dGlvbiB7CiAgICAgICAgIE5vbmUgPSAwLApAQCAtMjI3LDExICsyMjksMTMgQEAgcHJpdmF0ZToK
IAogY2xhc3MgTWVkaWFTYW1wbGVzQmxvY2sgewogcHVibGljOgorICAgIHVzaW5nIE1lZGlhU2Ft
cGxlRGF0YVR5cGUgPSBzdGQ6OnZhcmlhbnQ8TWVkaWFTYW1wbGU6OkJ5dGVSYW5nZSwgUmVmPGNv
bnN0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+PjsKICAgICBzdHJ1Y3QgTWVkaWFTYW1wbGVJdGVt
IHsKKyAgICAgICAgdXNpbmcgTWVkaWFTYW1wbGVEYXRhVHlwZSA9IE1lZGlhU2FtcGxlc0Jsb2Nr
OjpNZWRpYVNhbXBsZURhdGFUeXBlOwogICAgICAgICBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGlt
ZTsKICAgICAgICAgTWVkaWFUaW1lIGRlY29kZVRpbWU7CiAgICAgICAgIE1lZGlhVGltZSBkdXJh
dGlvbjsKLSAgICAgICAgc3RkOjp2YXJpYW50PE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2UsIFJlZjxj
b25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyPj4gZGF0YTsKKyAgICAgICAgTWVkaWFTYW1wbGVE
YXRhVHlwZSBkYXRhOwogICAgICAgICBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3MgZmxhZ3M7CiAg
ICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcAppbmRleCBhMjIxOGM1
ZGQ3NDFmZmM0Njg4NTc3MWVkZDUxOTRiYzMxMmE3ZmRjLi4xNGNiNzBkMTcwYTA3MjFjMTdlYmYz
ZjE4ZDZkNDg0MTU3Zjc4NzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9W
aWRlb0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmNw
cApAQCAtMTA4LDEzICsxMDgsNiBAQCBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3MgVmlkZW9GcmFt
ZTo6ZmxhZ3MoKSBjb25zdAogICAgIHJldHVybiBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6Ok5v
bmU7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8TWVkaWFTYW1wbGU6OkJ5dGVSYW5nZT4gVmlkZW9GcmFt
ZTo6Ynl0ZVJhbmdlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIGZyb20gdGhlIGJh
c2UgY2xhc3MuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLX0KLQogdm9pZCBWaWRlb0ZyYW1lOjpkdW1wKFByaW50U3RyZWFtJikgY29uc3QKIHsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaAppbmRleCAyMjg1ZThhYzdiZjAyMTQy
ZjkyYTkxZjc4MGU3NTkxMDI0MmFhNmIxLi5kOTY3NGNlNzQwNTRiY2Q3NDg4ZWFlZGQyZjEyODIy
Mjg0NmIxZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1l
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5oCkBAIC03NCw3ICs3
NCw2IEBAIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUaW1lc3RhbXBzKGNv
bnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOwogICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkoKSBj
b25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0
IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRl
UmFuZ2UoKSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdCBmaW5hbDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0ltYWdlRGVjb2RlckFWRk9iakMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9JbWFn
ZURlY29kZXJBVkZPYmpDLm1tCmluZGV4IGFkN2Y0NTEwMWMwNmExODg4YzAwOGZhZWQ0YTkxOTA1
NjEzODI5M2IuLjYyMGEzYmU2MmFiODQ1MGY3ZTM4NjQ0ODQ2Zjc5ODkxMjM4ODFmMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L0ltYWdlRGVjb2RlckFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvSW1hZ2VEZWNvZGVyQVZGT2JqQy5tbQpAQCAtNTMsNiAr
NTMsNyBAQAogI2ltcG9ydCA8d3RmL01lZGlhVGltZS5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CisjaW1wb3J0IDx3dGYvY2YvVHlwZUNh
c3RzQ0YuaD4KIAogI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsuaCIKICNpbXBvcnQgIlZpZGVv
VG9vbGJveFNvZnRMaW5rLmgiCkBAIC0yNzIsNiArMjczLDI2IEBAIHByaXZhdGU6CiAgICAgewog
ICAgIH0KIAorICAgIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2VGb3JBdHRhY2ht
ZW50KENGU3RyaW5nUmVmIGtleSkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gYnl0ZU9mZnNl
dENGID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihQQUw6OkNNR2V0QXR0YWNobWVudCht
X3NhbXBsZS5nZXQoKSwga2V5LCBudWxscHRyKSk7CisgICAgICAgIGlmICghYnl0ZU9mZnNldENG
KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICBpbnQ2NF90IGJ5
dGVPZmZzZXQgPSAwOworICAgICAgICBpZiAoIUNGTnVtYmVyR2V0VmFsdWUoYnl0ZU9mZnNldENG
LCBrQ0ZOdW1iZXJTSW50NjRUeXBlLCAmYnl0ZU9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgICAgIENNSXRlbUNvdW50IHNpemVBcnJheUVudHJpZXMgPSAw
OworICAgICAgICBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlU2l6ZUFycmF5KG1fc2FtcGxl
LmdldCgpLCAwLCBudWxscHRyLCAmc2l6ZUFycmF5RW50cmllcyk7CisgICAgICAgIGlmIChzaXpl
QXJyYXlFbnRyaWVzICE9IDEpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisg
ICAgICAgIHNpemVfdCBzaW5nbGVTaXplRW50cnkgPSAwOworICAgICAgICBQQUw6OkNNU2FtcGxl
QnVmZmVyR2V0U2FtcGxlU2l6ZUFycmF5KG1fc2FtcGxlLmdldCgpLCAxLCAmc2luZ2xlU2l6ZUVu
dHJ5LCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIHsgeyBDaGVja2VkU2l6ZShieXRlT2Zmc2V0
KSwgc2luZ2xlU2l6ZUVudHJ5IH0gfTsKKyAgICB9CisKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gbV9pbWFnZTsKICAgICBib29sIG1faGFzQWxwaGEgeyBmYWxzZSB9OwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhU2FtcGxlQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmgKaW5kZXggMDI1ZDBkMzQ0ZjNhZWE0
MjhhNmVkODc2ODY4OGNjYWJmZDM3YTMyZC4uODdmYWM4NTEzZjY0NWNjMGQxMjVmYWFmNDM2ZmM2
OWNiMDBlZjkzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
LmgKQEAgLTY0LDcgKzY0LDYgQEAgcHVibGljOgogICAgIFNhbXBsZUZsYWdzIGZsYWdzKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgUGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBjb25zdCBv
dmVycmlkZTsKICAgICBQbGF0Zm9ybVNhbXBsZTo6VHlwZSBwbGF0Zm9ybVNhbXBsZVR5cGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBl
OyB9Ci0gICAgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYpIG92ZXJy
aWRlOwogICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRp
YVRpbWUmKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRGl2aXNhYmxlKCkg
Y29uc3Qgb3ZlcnJpZGU7CkBAIC04Miw4ICs4MSw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzSG9t
b2dlbmVvdXMoKSBjb25zdDsKICAgICBWZWN0b3I8UmVmPE1lZGlhU2FtcGxlQVZGT2JqQz4+IGRp
dmlkZUludG9Ib21vZ2VuZW91c1NhbXBsZXMoKTsKIAotICAgIHZvaWQgc2V0Qnl0ZVJhbmdlT2Zm
c2V0KHNpemVfdCk7Ci0KICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKSAmJiBIQVZFKEFWQ09O
VEVOVEtFWVNFU1NJT04pCiAgICAgdXNpbmcgS2V5SURzID0gVmVjdG9yPFJlZjxGcmFnbWVudGVk
U2hhcmVkQnVmZmVyPj47CiAgICAgdm9pZCBzZXRLZXlJRHMoS2V5SURzJiYga2V5SURzKSB7IG1f
a2V5SURzID0gV1RGTW92ZShrZXlJRHMpOyB9CkBAIC0xMDEsOCArOTgsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgV0VCQ09SRV9FWFBPUlQgTWVkaWFTYW1wbGVBVkZPYmpDKENNU2FtcGxlQnVmZmVyUmVm
LCBWaWRlb1JvdGF0aW9uLCBib29sIG1pcnJvcmVkKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5NZWRpYVNhbXBsZUFWRk9iakMoKTsKIAotICAgIHN0ZDo6b3B0aW9uYWw8TWVkaWFTYW1w
bGU6OkJ5dGVSYW5nZT4gYnl0ZVJhbmdlRm9yQXR0YWNobWVudChDRlN0cmluZ1JlZiBrZXkpIGNv
bnN0OwotCiAgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX3NhbXBsZTsKICAgICBB
dG9tU3RyaW5nIG1faWQ7CiAgICAgVmlkZW9Sb3RhdGlvbiBtX3JvdGF0aW9uIHsgVmlkZW9Sb3Rh
dGlvbjo6Tm9uZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lm1tCmluZGV4IDljYWQ4OWQxYzc2YzljYzExOGI0NzEyMmE1NmNiZDU3YTEzMTJkNGUuLjVkNjZh
MDQyNmIwNGFhZWNkNjU3N2RlY2MzNDZiNzcwNzBkZmVmNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZG
T2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KQEAgLTUwNSw0NCArNTA1LDYgQEAgUmV0YWlu
UHRyPENNU2FtcGxlQnVmZmVyUmVmPiBNZWRpYVNhbXBsZUFWRk9iakM6OmNsb25lU2FtcGxlQnVm
ZmVyQW5kU2V0QXNEaXNwbGEKICAgICByZXR1cm4gYWRvcHRDRihuZXdTYW1wbGVCdWZmZXIpOwog
fQogCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgYnl0ZVJhbmdlT2Zmc2V0QXR0YWNobWVudEtleSgpCi17
Ci0gICAgc3RhdGljIENGU3RyaW5nUmVmIGtleSA9IENGU1RSKCJXZWJLaXRNZWRpYVNhbXBsZUJ5
dGVSYW5nZU9mZnNldCIpOwotICAgIHJldHVybiBrZXk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8TWVk
aWFTYW1wbGU6OkJ5dGVSYW5nZT4gTWVkaWFTYW1wbGVBVkZPYmpDOjpieXRlUmFuZ2UoKSBjb25z
dAotewotICAgIHJldHVybiBieXRlUmFuZ2VGb3JBdHRhY2htZW50KGJ5dGVSYW5nZU9mZnNldEF0
dGFjaG1lbnRLZXkoKSk7Ci19Ci0KLXZvaWQgTWVkaWFTYW1wbGVBVkZPYmpDOjpzZXRCeXRlUmFu
Z2VPZmZzZXQoc2l6ZV90IGJ5dGVPZmZzZXQpCi17Ci0gICAgaW50NjRfdCBjaGVja2VkT2Zmc2V0
ID0gQ2hlY2tlZEludDY0KGJ5dGVPZmZzZXQpOwotICAgIGF1dG8gb2Zmc2V0TnVtYmVyID0gYWRv
cHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJTSW50NjRU
eXBlLCAmY2hlY2tlZE9mZnNldCkpOwotICAgIFBBTDo6Q01TZXRBdHRhY2htZW50KG1fc2FtcGxl
LmdldCgpLCBieXRlUmFuZ2VPZmZzZXRBdHRhY2htZW50S2V5KCksIG9mZnNldE51bWJlci5nZXQo
KSwga0NNQXR0YWNobWVudE1vZGVfU2hvdWxkUHJvcGFnYXRlKTsKLX0KLQotc3RkOjpvcHRpb25h
bDxNZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlPiBNZWRpYVNhbXBsZUFWRk9iakM6OmJ5dGVSYW5nZUZv
ckF0dGFjaG1lbnQoQ0ZTdHJpbmdSZWYga2V5KSBjb25zdAotewotICAgIGF1dG8gYnl0ZU9mZnNl
dENGID0gZHluYW1pY19jZl9jYXN0PENGTnVtYmVyUmVmPihQQUw6OkNNR2V0QXR0YWNobWVudCht
X3NhbXBsZS5nZXQoKSwga2V5LCBudWxscHRyKSk7Ci0gICAgaWYgKCFieXRlT2Zmc2V0Q0YpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBpbnQ2NF90IGJ5dGVPZmZzZXQgPSAw
OwotICAgIGlmICghQ0ZOdW1iZXJHZXRWYWx1ZShieXRlT2Zmc2V0Q0YsIGtDRk51bWJlclNJbnQ2
NFR5cGUsICZieXRlT2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAg
IENNSXRlbUNvdW50IHNpemVBcnJheUVudHJpZXMgPSAwOwotICAgIFBBTDo6Q01TYW1wbGVCdWZm
ZXJHZXRTYW1wbGVTaXplQXJyYXkobV9zYW1wbGUuZ2V0KCksIDAsIG51bGxwdHIsICZzaXplQXJy
YXlFbnRyaWVzKTsKLSAgICBpZiAoc2l6ZUFycmF5RW50cmllcyAhPSAxKQotICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotCi0gICAgc2l6ZV90IHNpbmdsZVNpemVFbnRyeSA9IDA7Ci0gICAg
UEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVNpemVBcnJheShtX3NhbXBsZS5nZXQoKSwgMSwg
JnNpbmdsZVNpemVFbnRyeSwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIHsgeyBDaGVja2VkU2l6ZShi
eXRlT2Zmc2V0KSwgc2luZ2xlU2l6ZUVudHJ5IH0gfTsKLX0KLQogQ1ZQaXhlbEJ1ZmZlclJlZiBN
ZWRpYVNhbXBsZUFWRk9iakM6OnBpeGVsQnVmZmVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oUEFMOjpDTVNhbXBsZUJ1ZmZlckdldEltYWdlQnVm
ZmVyKG1fc2FtcGxlLmdldCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaAppbmRleCBhZTM5M2UwYjJkMDE3Y2Q0YzlhZGQ3
ZDU0YmViZjViMjljNGMyZGVmLi5hYjcxYjg3ZmY2M2VkMzM4ZDk1ZmNkZjZiMmRkMjRmNDgzNzcw
MzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9D
TVV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0NNVXRpbGl0aWVzLmgKQEAgLTQxLDcgKzQxLDcgQEAgc3RydWN0IFRyYWNrSW5mbzsKIFdFQkNP
UkVfRVhQT1JUIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXRE
ZXNjcmlwdGlvbkZyb21UcmFja0luZm8oY29uc3QgVHJhY2tJbmZvJik7CiAvLyBDb252ZXJ0IE1l
ZGlhU2FtcGxlc0Jsb2NrIHRvIHRoZSBlcXVpdmFsZW50IENNU2FtcGxlQnVmZmVyUmVmLiBJZiBD
TUZvcm1hdERlc2NyaXB0aW9uUmVmCiAvLyBpcyBzZXQgaXQgd2lsbCBiZSB1c2VkLCBvdGhlcndp
c2UgaXQgd2lsbCBiZSBjcmVhdGVkIGZyb20gdGhlIE1lZGlhU2FtcGxlc0Jsb2NrJ3MgVHJhY2tJ
bmZvLgotV0VCQ09SRV9FWFBPUlQgRXhwZWN0ZWQ8UmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVm
PiwgQ1N0cmluZz4gdG9DTVNhbXBsZUJ1ZmZlcihNZWRpYVNhbXBsZXNCbG9jayYmLCBDTUZvcm1h
dERlc2NyaXB0aW9uUmVmKTsKK1dFQkNPUkVfRVhQT1JUIEV4cGVjdGVkPFJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4sIENTdHJpbmc+IHRvQ01TYW1wbGVCdWZmZXIoTWVkaWFTYW1wbGVzQmxv
Y2smJiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiA9IG51bGxwdHIpOwogCiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBh
cnNlcldlYk0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKaW5kZXggOTRiYjJlZDZjNTZlNzg0NTEwZDJmNDFlMjc4
YjhjYTM5OThmM2IwZi4uMWU5OGFjMmNjYTU4MTFjOTBjMmFhNjFlMmNkOGNiZjVjNzdlYjZhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNl
QnVmZmVyUGFyc2VyV2ViTS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKQEAgLTUzNiw5ICs1MzYsNyBAQCBX
ZWJNUGFyc2VyOjpXZWJNUGFyc2VyKENhbGxiYWNrJiBjYWxsYmFjaykKIHsKIH0KIAotV2ViTVBh
cnNlcjo6fldlYk1QYXJzZXIoKQotewotfQorV2ViTVBhcnNlcjo6fldlYk1QYXJzZXIoKSA9IGRl
ZmF1bHQ7CiAKIHZvaWQgV2ViTVBhcnNlcjo6cmVzZXRTdGF0ZSgpCiB7CkBAIC01NjAsNiArNTU4
LDEzIEBAIHZvaWQgV2ViTVBhcnNlcjo6cmVzZXQoKQogICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7
CiB9CiAKK3ZvaWQgV2ViTVBhcnNlcjo6Y3JlYXRlQnl0ZVJhbmdlU2FtcGxlcygpCit7CisgICAg
Zm9yIChhdXRvJiB0cmFjayA6IG1fdHJhY2tzKQorICAgICAgICB0cmFjay0+Y3JlYXRlQnl0ZVJh
bmdlU2FtcGxlcygpOworICAgIG1fY3JlYXRlQnl0ZVJhbmdlU2FtcGxlcyA9IHRydWU7Cit9CisK
IEV4Y2VwdGlvbk9yPGludD4gV2ViTVBhcnNlcjo6cGFyc2UoU291cmNlQnVmZmVyUGFyc2VyOjpT
ZWdtZW50JiYgc2VnbWVudCkKIHsKICAgICBpZiAoIW1fcGFyc2VyKQpAQCAtODUxLDMyICs4NTYs
MzAgQEAgU3RhdHVzIFdlYk1QYXJzZXI6Ok9uVHJhY2tFbnRyeShjb25zdCBFbGVtZW50TWV0YWRh
dGEmLCBjb25zdCBUcmFja0VudHJ5JiB0cmFja0UKICAgICB9CiAKICAgICBTdHJpbmdWaWV3IGNv
ZGVjU3RyaW5nIHsgdHJhY2tFbnRyeS5jb2RlY19pZC52YWx1ZSgpLmRhdGEoKSwgKHVuc2lnbmVk
KXRyYWNrRW50cnkuY29kZWNfaWQudmFsdWUoKS5sZW5ndGgoKSB9OworICAgIGF1dG8gdHJhY2sg
PSBbJl0oKSAtPiBVbmlxdWVSZWY8VHJhY2tEYXRhPiB7CiAjaWYgRU5BQkxFKFZQOSkKLSAgICBp
ZiAoY29kZWNTdHJpbmcgPT0gIlZfVlA5IiAmJiBpc1ZQOURlY29kZXJBdmFpbGFibGUoKSkgewot
ICAgICAgICBtX3RyYWNrcy5hcHBlbmQoVmlkZW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6
OlZQOSwgdHJhY2tFbnRyeSwgKnRoaXMpKTsKLSAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6
OmtPa0NvbXBsZXRlZCk7Ci0gICAgfQotICAgIGlmIChjb2RlY1N0cmluZyA9PSAiVl9WUDgiICYm
IGlzVlA4RGVjb2RlckF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIG1fdHJhY2tzLmFwcGVuZChWaWRl
b1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6VlA4LCB0cmFja0VudHJ5LCAqdGhpcykpOwot
ICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKLSAgICB9CisgICAg
ICAgIGlmIChjb2RlY1N0cmluZyA9PSAiVl9WUDkiICYmIGlzVlA5RGVjb2RlckF2YWlsYWJsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIFZpZGVvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpW
UDksIHRyYWNrRW50cnksICp0aGlzKTsKKyAgICAgICAgaWYgKGNvZGVjU3RyaW5nID09ICJWX1ZQ
OCIgJiYgaXNWUDhEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gVmlkZW9U
cmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZQOCwgdHJhY2tFbnRyeSwgKnRoaXMpOwogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoVk9SQklTKQotICAgIGlmIChjb2RlY1N0cmluZyA9PSAiQV9WT1JC
SVMiICYmIGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIG1fdHJhY2tzLmFw
cGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6Vm9yYmlzLCB0cmFja0VudHJ5
LCAqdGhpcykpOwotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsK
LSAgICB9CisgICAgICAgIGlmIChjb2RlY1N0cmluZyA9PSAiQV9WT1JCSVMiICYmIGlzVm9yYmlz
RGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIEF1ZGlvVHJhY2tEYXRhOjpj
cmVhdGUoQ29kZWNUeXBlOjpWb3JiaXMsIHRyYWNrRW50cnksICp0aGlzKTsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKE9QVVMpCi0gICAgaWYgKGNvZGVjU3RyaW5nID09ICJBX09QVVMiICYmIGlzT3B1
c0RlY29kZXJBdmFpbGFibGUoKSkgewotICAgICAgICBtX3RyYWNrcy5hcHBlbmQoQXVkaW9UcmFj
a0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6Ok9wdXMsIHRyYWNrRW50cnksICp0aGlzKSk7Ci0gICAg
ICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwotICAgIH0KKyAgICAgICAg
aWYgKGNvZGVjU3RyaW5nID09ICJBX09QVVMiICYmIGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkK
KyAgICAgICAgICAgIHJldHVybiBBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6T3B1
cywgdHJhY2tFbnRyeSwgKnRoaXMpOwogI2VuZGlmCisgICAgICAgIHJldHVybiBUcmFja0RhdGE6
OmNyZWF0ZShDb2RlY1R5cGU6OlVuc3VwcG9ydGVkLCB0cmFja0VudHJ5LCAqdGhpcyk7CisgICAg
fSgpOworCisgICAgaWYgKG1fY3JlYXRlQnl0ZVJhbmdlU2FtcGxlcykKKyAgICAgICAgdHJhY2st
PmNyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMoKTsKIAotICAgIG1fdHJhY2tzLmFwcGVuZChUcmFja0Rh
dGE6OmNyZWF0ZShDb2RlY1R5cGU6OlVuc3VwcG9ydGVkLCB0cmFja0VudHJ5LCAqdGhpcykpOwor
ICAgIG1fdHJhY2tzLmFwcGVuZChXVEZNb3ZlKHRyYWNrKSk7CiAgICAgcmV0dXJuIFN0YXR1cyhT
dGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKQEAgLTEwMzIsNiArMTAzNSwxMSBAQCB3ZWJtOjpT
dGF0dXMgV2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYg
cmVhZGVyLCBjb25zdCB3ZQogICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1
czo6a09rUGFydGlhbCk7CiAKICAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXIgPSBtX2N1cnJlbnRC
bG9ja0J1ZmZlci50YWtlKCk7CisgICAgaWYgKG1fdXNlQnl0ZVJhbmdlKQorICAgICAgICBtX2Nv
bXBsZXRlRnJhbWVEYXRhID0gTWVkaWFTYW1wbGU6OkJ5dGVSYW5nZSB7IG1ldGFkYXRhLnBvc2l0
aW9uLCBtZXRhZGF0YS5zaXplIH07CisgICAgZWxzZQorICAgICAgICBtX2NvbXBsZXRlRnJhbWVE
YXRhID0gUmVmIHsgKm1fY29tcGxldGVCbG9ja0J1ZmZlciB9OworCiAgICAgbV9jb21wbGV0ZVBh
Y2tldFNpemUgPSBzdGQ6Om51bGxvcHQ7CiAgICAgbV9wYXJ0aWFsQnl0ZXNSZWFkID0gMDsKIApA
QCAtMTA1MSwxMCArMTA1OSw4IEBAIHdlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpWaWRlb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwKICAgICBpZiAoIXN0
YXR1cy5jb21wbGV0ZWRfb2soKSkKICAgICAgICAgcmV0dXJuIHN0YXR1czsKIAotICAgIG1fbGFz
dFBvc2l0aW9uID0gbWV0YWRhdGEucG9zaXRpb247Ci0KICAgICBjb25zdGV4cHIgc2l6ZV90IG1h
eEhlYWRlclNpemUgPSAzMjsgLy8gVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgVlA5IHVuY29tcHJl
c3NlZCBoZWFkZXIgaXMgMTQ0IGJpdHMgYW5kIDExIGJ5dGVzIGZvciBWUDguIFJvdW5kIGhpZ2gu
Ci0gICAgc2l6ZV90IHNlZ21lbnRIZWFkZXJMZW5ndGggPSBzdGQ6Om1pbihtYXhIZWFkZXJTaXpl
LCBtX2NvbXBsZXRlQmxvY2tCdWZmZXItPnNpemUoKSk7CisgICAgc2l6ZV90IHNlZ21lbnRIZWFk
ZXJMZW5ndGggPSBzdGQ6Om1pbjxzaXplX3Q+KG1heEhlYWRlclNpemUsIG1ldGFkYXRhLnNpemUp
OwogICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVm
ZmVyKDAsIHNlZ21lbnRIZWFkZXJMZW5ndGgpOwogICAgIGlmICghY29udGlndW91c0J1ZmZlcikg
ewogICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJWaWRlb1RyYWNrRGF0YTo6
Y29uc3VtZUZyYW1lRGF0YSBmYWlsZWQgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBibG9jayIp
OwpAQCAtMTA5MCw3ICsxMDk2LDcgQEAgd2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6OlZpZGVvVHJh
Y2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLAogICAgIGlmICh0
cmFjay5kZWZhdWx0X2R1cmF0aW9uLmlzX3ByZXNlbnQoKSkKICAgICAgICAgZHVyYXRpb24gPSB0
cmFjay5kZWZhdWx0X2R1cmF0aW9uLnZhbHVlKCkgKiBwcmVzZW50YXRpb25UaW1lLnRpbWVTY2Fs
ZSgpIC8ga191c19pbl9zZWNvbmRzOwogCi0gICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5hcHBl
bmQoeyBwcmVzZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1lLCBNZWRpYVRpbWUoZHVyYXRp
b24sIHByZXNlbnRhdGlvblRpbWUudGltZVNjYWxlKCkpLCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIu
cmVsZWFzZU5vbk51bGwoKSwgaXNLZXkgPyBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3lu
YyA6IE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6Tm9uZSB9KTsKKyAgICBtX2NvbXBsZXRlTWVk
aWFTYW1wbGVzLmFwcGVuZCh7IHByZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUsIE1l
ZGlhVGltZShkdXJhdGlvbiwgcHJlc2VudGF0aW9uVGltZS50aW1lU2NhbGUoKSksIFdURk1vdmUo
bV9jb21wbGV0ZUZyYW1lRGF0YSksIGlzS2V5ID8gTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpJ
c1N5bmMgOiBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6Ok5vbmUgfSk7CiAKICAgICBkcmFpblBl
bmRpbmdTYW1wbGVzKCk7CiAKQEAgLTExMTYsOCArMTEyMiw2IEBAIHdlYm06OlN0YXR1cyBXZWJN
UGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJl
YWRlciwKICAgICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKICAgICAgICAgcmV0dXJuIHN0
YXR1czsKIAotICAgIG1fbGFzdFBvc2l0aW9uID0gbWV0YWRhdGEucG9zaXRpb247Ci0KICAgICBp
ZiAoIWZvcm1hdERlc2NyaXB0aW9uKCkpIHsKICAgICAgICAgaWYgKCF0cmFjaygpLmNvZGVjX3By
aXZhdGUuaXNfcHJlc2VudCgpKSB7CiAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJBdWRpbyB0cmFjayBtaXNzaW5nIG1hZ2ljIGNvb2tpZSIpOwpAQCAtMTE4MCw3ICsx
MTg0LDcgQEAgd2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1l
RnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLAogICAgIGVsc2UgaWYgKGZvcm1hdERlc2Ny
aXB0aW9uKCkgJiYgKmZvcm1hdERlc2NyaXB0aW9uKCkgIT0gKm1fY29tcGxldGVNZWRpYVNhbXBs
ZXMuaW5mbygpKQogICAgICAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7CiAKLSAgICBtX2NvbXBs
ZXRlTWVkaWFTYW1wbGVzLmFwcGVuZCh7IHByZXNlbnRhdGlvblRpbWUsIE1lZGlhVGltZTo6aW52
YWxpZFRpbWUoKSwgbV9wYWNrZXREdXJhdGlvbiwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLnJlbGVh
c2VOb25OdWxsKCksIE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jIH0pOworICAgIG1f
Y29tcGxldGVNZWRpYVNhbXBsZXMuYXBwZW5kKHsgcHJlc2VudGF0aW9uVGltZSwgTWVkaWFUaW1l
OjppbnZhbGlkVGltZSgpLCBtX3BhY2tldER1cmF0aW9uLCBXVEZNb3ZlKG1fY29tcGxldGVGcmFt
ZURhdGEpLCBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyB9KTsKIAogICAgIGRyYWlu
UGVuZGluZ1NhbXBsZXMoKTsKIApAQCAtMTI5OSw5ICsxMzAzLDkgQEAgUmVmUHRyPFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZShjb25zdCBDb250
ZW50VHlwZSYKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotdm9pZCBXZWJNUGFyc2VyOjpwcm92
aWRlTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlcywgdWludDY0X3QgcG9zaXRp
b24pCit2b2lkIFdlYk1QYXJzZXI6OnByb3ZpZGVNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2sm
JiBzYW1wbGVzKQogewotICAgIG1fY2FsbGJhY2sucGFyc2VkTWVkaWFEYXRhKFdURk1vdmUoc2Ft
cGxlcyksIHBvc2l0aW9uKTsKKyAgICBtX2NhbGxiYWNrLnBhcnNlZE1lZGlhRGF0YShXVEZNb3Zl
KHNhbXBsZXMpKTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRJbml0
aWFsaXphdGlvbkRhdGEoSW5pdGlhbGl6YXRpb25TZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdt
ZW50KQpAQCAtMTMxMiw3ICsxMzE2LDcgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpw
YXJzZWRJbml0aWFsaXphdGlvbkRhdGEoSW5pdGlhbGl6YXRpb25TZWdtZW50JiYgaW4KICAgICB9
KTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURhdGEoTWVk
aWFTYW1wbGVzQmxvY2smJiBzYW1wbGVzQmxvY2ssIHVpbnQ2NF90IHBvc2l0aW9uKQordm9pZCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2sm
JiBzYW1wbGVzQmxvY2spCiB7CiAgICAgaWYgKCFzYW1wbGVzQmxvY2suaW5mbygpKSB7CiAgICAg
ICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiTm8gVHJhY2tJbmZvIHNl
dCIpOwpAQCAtMTMzNiw3ICsxMzQwLDcgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpw
YXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGVzQmxvY2ssIHUKICAgICB9
CiAKICAgICBpZiAoc2FtcGxlc0Jsb2NrLmlzVmlkZW8oKSkgewotICAgICAgICByZXR1cm5TYW1w
bGVzKFdURk1vdmUoc2FtcGxlc0Jsb2NrKSwgbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uLmdldCgp
LCBwb3NpdGlvbik7CisgICAgICAgIHJldHVyblNhbXBsZXMoV1RGTW92ZShzYW1wbGVzQmxvY2sp
LCBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xMzQ0LDE3ICsxMzQ4LDE3IEBAIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
cGFyc2VkTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlc0Jsb2NrLCB1CiAgICAg
aWYgKG1fcXVldWVkQXVkaW9TYW1wbGVzLnNpemUoKSkgewogICAgICAgICBhdXRvJiBsYXN0U2Ft
cGxlID0gbV9xdWV1ZWRBdWRpb1NhbXBsZXMubGFzdCgpOwogICAgICAgICBpZiAobGFzdFNhbXBs
ZS5kdXJhdGlvbiArIGxhc3RTYW1wbGUucHJlc2VudGF0aW9uVGltZSAhPSBzYW1wbGVzQmxvY2su
Zmlyc3QoKS5wcmVzZW50YXRpb25UaW1lKQotICAgICAgICAgICAgZmx1c2hQZW5kaW5nQXVkaW9T
YW1wbGVzKHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygp
OwogICAgIH0KICAgICBmb3IgKGF1dG8mIHNhbXBsZSA6IHNhbXBsZXNCbG9jaykKICAgICAgICAg
bV9xdWV1ZWRBdWRpb0R1cmF0aW9uICs9IHNhbXBsZS5kdXJhdGlvbjsKICAgICBtX3F1ZXVlZEF1
ZGlvU2FtcGxlcy5hcHBlbmQoV1RGTW92ZShzYW1wbGVzQmxvY2spKTsKICAgICBpZiAobV9xdWV1
ZWRBdWRpb0R1cmF0aW9uIDwgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbikKICAgICAgICAg
cmV0dXJuOwotICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcyhwb3NpdGlvbik7CisgICAgZmx1
c2hQZW5kaW5nQXVkaW9TYW1wbGVzKCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6cmV0dXJuU2FtcGxlcyhNZWRpYVNhbXBsZXNCbG9jayYmIGJsb2NrLCBDTUZvcm1hdERlc2Ny
aXB0aW9uUmVmIGRlc2NyaXB0aW9uLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwb3NpdGlvbikK
K3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cmV0dXJuU2FtcGxlcyhNZWRpYVNhbXBsZXNC
bG9jayYmIGJsb2NrLCBDTUZvcm1hdERlc2NyaXB0aW9uUmVmIGRlc2NyaXB0aW9uKQogewogICAg
IGlmIChibG9jay5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEzNjUsMTMgKzEzNjks
MTEgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpyZXR1cm5TYW1wbGVzKE1lZGlhU2Ft
cGxlc0Jsb2NrJiYgYmxvY2ssIENNRm9ybWF0RGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBS
ZWYgeyAqdGhpcyB9LCB0cmFja0lEID0gYmxvY2suaW5mbygpLT50cmFja0lELCBzYW1wbGVCdWZm
ZXIgPSBXVEZNb3ZlKGV4cGVjdGVkQnVmZmVyLnZhbHVlKCkpLCBwb3NpdGlvbl0gKCkgbXV0YWJs
ZSB7CisgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFJlZiB7ICp0aGlzIH0sIHRyYWNrSUQgPSBibG9jay5pbmZvKCktPnRyYWNrSUQsIHNhbXBs
ZUJ1ZmZlciA9IFdURk1vdmUoZXhwZWN0ZWRCdWZmZXIudmFsdWUoKSldICgpIG11dGFibGUgewog
ICAgICAgICBpZiAoIW1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRpYVNhbXBsZUFWRk9iakM6
OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIHRyYWNrSUQpOwotICAgICAgICBpZiAocG9zaXRp
b24pCi0gICAgICAgICAgICBtZWRpYVNhbXBsZS0+c2V0Qnl0ZVJhbmdlT2Zmc2V0KCpwb3NpdGlv
bik7CiAKICAgICAgICAgbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2soV1RGTW92ZShtZWRp
YVNhbXBsZSksIHRyYWNrSUQsIGVtcHR5U3RyaW5nKCkpOwogICAgIH0pOwpAQCAtMTM5MSwxMyAr
MTM5MywxMyBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0
SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRChSZWY8UwogICAgICAgICBtX2RpZFByb3ZpZGVD
b250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSURDYWxsYmFjayhXVEZN
b3ZlKGtleUlEKSwgdHJhY2tJRCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
Zmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBvc2l0aW9u
KQordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMo
KQogewogICAgIGlmICghbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uKQogICAgICAgICByZXR1cm47
CiAgICAgQVNTRVJUKG1fYXVkaW9JbmZvKTsKICAgICBtX3F1ZXVlZEF1ZGlvU2FtcGxlcy5zZXRJ
bmZvKG1fYXVkaW9JbmZvLmNvcHlSZWYoKSk7Ci0gICAgcmV0dXJuU2FtcGxlcyhXVEZNb3ZlKG1f
cXVldWVkQXVkaW9TYW1wbGVzKSwgbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uLmdldCgpLCBwb3Np
dGlvbik7CisgICAgcmV0dXJuU2FtcGxlcyhXVEZNb3ZlKG1fcXVldWVkQXVkaW9TYW1wbGVzKSwg
bV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uLmdldCgpKTsKIAogICAgIG1fcXVldWVkQXVkaW9TYW1w
bGVzID0geyB9OwogICAgIG1fcXVldWVkQXVkaW9EdXJhdGlvbiA9IHsgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNl
cldlYk0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1
ZmZlclBhcnNlcldlYk0uaAppbmRleCBmZmNlZDM0MjVkNmU1MjU0MmEwYWZmYWFlODc3MGY1YzJj
NjEwOGMxLi41N2Q3NGJjOGQ4NTQ2ODQwNTFmZGI2ZmM4MTMwOTg0ZjllY2FlMjg0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKE1F
RElBX1NPVVJDRSkKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCisjaW5jbHVkZSAiTWVkaWFT
YW1wbGUuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZm
ZXJQYXJzZXIuaCIKICNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KQEAgLTUy
LDMwICs1MywzMCBAQCBjbGFzcyBXZWJNUGFyc2VyIDogcHJpdmF0ZSB3ZWJtOjpDYWxsYmFjayB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgY2xhc3MgQ2FsbGJh
Y2sgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZWRUcmltbWluZ0RhdGEodWludDY0X3QsIGNvbnN0IE1lZGlh
VGltZSYpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VkSW5pdGlhbGl6YXRpb25EYXRh
KFNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYpID0gMDsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmLCB1aW50
NjRfdCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VkTWVkaWFEYXRhKE1lZGlhU2Ft
cGxlc0Jsb2NrJiYpID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkRlY3J5cHQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGVudEtleVJlcXVl
c3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKFJlZjxTaGFyZWRCdWZmZXI+JiYsIHVpbnQ2
NF90KSB7IH0KICAgICAgICAgdmlydHVhbCB+Q2FsbGJhY2soKSA9IGRlZmF1bHQ7CiAgICAgfTsK
IAotICAgIFdlYk1QYXJzZXIoQ2FsbGJhY2smKTsKLSAgICB+V2ViTVBhcnNlcigpOworICAgIFdF
QkNPUkVfRVhQT1JUIFdlYk1QYXJzZXIoQ2FsbGJhY2smKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+
V2ViTVBhcnNlcigpOwogCiAgICAgY2xhc3MgU2VnbWVudFJlYWRlcjsKIAotICAgIEV4Y2VwdGlv
bk9yPGludD4gcGFyc2UoU291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50JiYpOwotICAgIHZvaWQg
cmVzZXRTdGF0ZSgpOwotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGludmFsaWRhdGUoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxpbnQ+IHBhcnNlKFNvdXJjZUJ1ZmZlclBhcnNlcjo6
U2VnbWVudCYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0U3RhdGUoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZh
bGlkYXRlKCk7CiAgICAgY29uc3Qgd2VibTo6U3RhdHVzJiBzdGF0dXMoKSBjb25zdCB7IHJldHVy
biBtX3N0YXR1czsgfQogCi0gICAgdm9pZCBwcm92aWRlTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Js
b2NrJiYsIHVpbnQ2NF90KTsKKyAgICB2b2lkIHByb3ZpZGVNZWRpYURhdGEoTWVkaWFTYW1wbGVz
QmxvY2smJik7CiAKLSAgICB2b2lkIHNldExvZ2dlcihjb25zdCBMb2dnZXImLCBjb25zdCB2b2lk
KiBpZGVudGlmaWVyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvZ2dlcihjb25zdCBM
b2dnZXImLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKTsKICAgICBjb25zdCBMb2dnZXIqIGxvZ2dl
clB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9CiAgICAgY29uc3Qgdm9pZCog
bG9nSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQogCkBAIC0x
MzQsNiArMTM1LDggQEAgcHVibGljOgogICAgICAgICB3ZWJtOjpUcmFja0VudHJ5JiB0cmFjaygp
IHsgcmV0dXJuIG1fdHJhY2s7IH0KICAgICAgICAgVHJhY2tJbmZvOjpUcmFja1R5cGUgdHJhY2tU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90cmFja1R5cGU7IH0KIAorICAgICAgICB2b2lkIGNyZWF0
ZUJ5dGVSYW5nZVNhbXBsZXMoKSB7IG1fdXNlQnl0ZVJhbmdlID0gdHJ1ZTsgfQorCiAgICAgICAg
IFJlZlB0cjxUcmFja0luZm8+IGZvcm1hdERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
b3JtYXREZXNjcmlwdGlvbi5jb3B5UmVmKCk7IH0KICAgICAgICAgdm9pZCBzZXRGb3JtYXREZXNj
cmlwdGlvbihSZWY8VHJhY2tJbmZvPiYmIGRlc2NyaXB0aW9uKQogICAgICAgICB7CkBAIC0xNjcs
MTYgKzE3MCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jb21w
bGV0ZU1lZGlhU2FtcGxlcy5zaXplKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgbV9wYXJzZXIucHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKG1fY29tcGxldGVNZWRpYVNh
bXBsZXMpLCBtX2xhc3RQb3NpdGlvbik7CisgICAgICAgICAgICBtX3BhcnNlci5wcm92aWRlTWVk
aWFEYXRhKFdURk1vdmUobV9jb21wbGV0ZU1lZGlhU2FtcGxlcykpOwogICAgICAgICAgICAgcmVz
ZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVy
KHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0OwogICAgICAgICB3ZWJtOjpTdGF0
dXMgcmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRh
JiwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgUmVmUHRyPEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI+IG1fY29tcGxldGVCbG9ja0J1ZmZlcjsKICAgICAgICAgTWVkaWFTYW1wbGVz
QmxvY2sgbV9jb21wbGV0ZU1lZGlhU2FtcGxlczsKLSAgICAgICAgdWludDY0X3QgbV9sYXN0UG9z
aXRpb24geyAwIH07CisgICAgICAgIGJvb2wgbV91c2VCeXRlUmFuZ2UgeyBmYWxzZSB9OworICAg
ICAgICBNZWRpYVNhbXBsZXNCbG9jazo6TWVkaWFTYW1wbGVEYXRhVHlwZSBtX2NvbXBsZXRlRnJh
bWVEYXRhOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29kZWNUeXBlIG1fY29kZWM7CkBAIC0x
ODQsNiArMTg3LDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBUcmFja0luZm86OlRyYWNrVHlw
ZSBtX3RyYWNrVHlwZTsKICAgICAgICAgUmVmUHRyPFRyYWNrSW5mbz4gbV9mb3JtYXREZXNjcmlw
dGlvbjsKICAgICAgICAgU2hhcmVkQnVmZmVyQnVpbGRlciBtX2N1cnJlbnRCbG9ja0J1ZmZlcjsK
KyAgICAgICAgUmVmUHRyPGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+IG1fY29tcGxldGVC
bG9ja0J1ZmZlcjsKICAgICAgICAgV2ViTVBhcnNlciYgbV9wYXJzZXI7CiAgICAgICAgIHN0ZDo6
b3B0aW9uYWw8c2l6ZV90PiBtX2NvbXBsZXRlUGFja2V0U2l6ZTsKICAgICAgICAgLy8gU2l6ZSBv
ZiB0aGUgY3VycmVudGx5IGluY29tcGxldGUgcGFyc2VkIHBhY2tldC4KQEAgLTI3OSw2ICsyODMs
NyBAQCBwcml2YXRlOgogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIg
fTsKICAgICB1aW50NjRfdCBtX25leHRDaGlsZElkZW50aWZpZXIgeyAwIH07CiAgICAgQ2FsbGJh
Y2smIG1fY2FsbGJhY2s7CisgICAgYm9vbCBtX2NyZWF0ZUJ5dGVSYW5nZVNhbXBsZXMgeyBmYWxz
ZSB9OwogfTsKIAogY2xhc3MgU291cmNlQnVmZmVyUGFyc2VyV2ViTSA6IHB1YmxpYyBTb3VyY2VC
dWZmZXJQYXJzZXIsIFdlYk1QYXJzZXI6OkNhbGxiYWNrIHsKQEAgLTMwOCw3ICszMTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spOwogICAgIH0KIAotICAgIHZvaWQgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHN0
ZDo6b3B0aW9uYWw8dWludDY0X3Q+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIGZsdXNoUGVu
ZGluZ0F1ZGlvU2FtcGxlcygpOwogICAgIHZvaWQgc2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRp
b24oZmxvYXQpOwogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TG9nZ2VyKGNvbnN0
IExvZ2dlciYsIGNvbnN0IHZvaWQqIGlkZW50aWZpZXIpIGZpbmFsOwpAQCAtMzE4LDEyICszMjMs
MTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICAvLyBXZWJNUGFyc2VyOjpDYWxsYmFjawogICAg
IHZvaWQgcGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5pdGlh
bGl6YXRpb25TZWdtZW50JiYpIGZpbmFsOwotICAgIHZvaWQgcGFyc2VkTWVkaWFEYXRhKE1lZGlh
U2FtcGxlc0Jsb2NrJiYsIHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2b2lkIHBhcnNlZE1lZGlhRGF0
YShNZWRpYVNhbXBsZXNCbG9jayYmKSBmaW5hbDsKICAgICBib29sIGNhbkRlY3J5cHQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiAhIW1fZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6
YXRpb25EYXRhRm9yVHJhY2tJRENhbGxiYWNrOyB9CiAgICAgdm9pZCBjb250ZW50S2V5UmVxdWVz
dEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgdWludDY0
X3QpIGZpbmFsOwogICAgIHZvaWQgcGFyc2VkVHJpbW1pbmdEYXRhKHVpbnQ2NF90LCBjb25zdCBN
ZWRpYVRpbWUmKSBmaW5hbDsKLSAgICAKLSAgICB2b2lkIHJldHVyblNhbXBsZXMoTWVkaWFTYW1w
bGVzQmxvY2smJiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiwgc3RkOjpvcHRpb25hbDx1aW50NjRf
dD4pOworCisgICAgdm9pZCByZXR1cm5TYW1wbGVzKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIENNRm9y
bWF0RGVzY3JpcHRpb25SZWYpOwogCiAgICAgRGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayBt
X2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2s7CiAgICAgV2ViTVBhcnNlciBtX3BhcnNlcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVNhbXBsZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmgKaW5kZXggMmI3ZGQ0NDRjNTNkMmQ2YmQw
N2E5YjgzOGQ2NzliNjRiMzc0OWFmNy4uYmU0YTBmZTNjM2M5OTdhOGRiZTEyZmI2ZjRmZjlkMWFl
YzhhZGRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmgKQEAgLTYxLDcgKzYx
LDYgQEAgcHVibGljOgogICAgIFNhbXBsZUZsYWdzIGZsYWdzKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9mbGFnczsgfQogICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgUGxhdGZvcm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZvcm1TYW1wbGU6OkdTdHJlYW1lclNhbXBs
ZVR5cGU7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gc3RkOjpudWxsb3B0OyB9CiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+
IGdldFJHQkFJbWFnZURhdGEoKSBjb25zdCBmaW5hbDsKICAgICBWaWRlb1JvdGF0aW9uIHZpZGVv
Um90YXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ZpZGVvUm90YXRpb247IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1Nv
dXJjZUJ1ZmZlclByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRp
YXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKaW5kZXggM2NmN2VlNjUzZWM4MTNk
ZmJhZTMzZWY5M2EwYzMzZmUyYzYzOTRlMC4uZDRjZmU0MThkNWM2MTIwNjU3ZGUwZDBiYzAyMDM2
ZmIxMGE4MjBmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRp
YXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKQEAg
LTYyLDcgKzYyLDYgQEAgcHJpdmF0ZToKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IG92
ZXJyaWRlOwogICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgUGxhdGZvcm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZvcm1TYW1wbGU6Ok1vY2tTYW1wbGVCb3hUeXBlOyB9Ci0g
ICAgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsgfQogICAgIEZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXplKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRTaXplKCk7IH0KICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShj
b25zdCBNZWRpYVRpbWUmIG9mZnNldCkgb3ZlcnJpZGUgeyBtX2JveC5vZmZzZXRUaW1lc3RhbXBz
Qnkob2Zmc2V0KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZvcm1hdFJlYWRlci5jcHAKaW5kZXggMWMzMzhj
NmEzZThjYmVmYjRjNmU0YmFmNTAyMWIxNTUyNTQ4ZmJmYi4uYTNmYmI3NjBlNzc2MDQwNzhkOGU1
MGMxNGNkZDdkN2NlYTZlYjZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFj
L01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCkBA
IC0xMzIsNDAgKzEzMiwxMiBAQCB2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpwYXJzZUJ5dGVTb3Vy
Y2UoUmV0YWluUHRyPE1UUGx1Z2luQnl0ZVNvdXJjZVJlZj4mJiBieXRlUwogewogICAgIEFTU0VS
VChpc01haW5SdW5Mb29wKCkpOwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbnRlbnRU
eXBlPiBjb250ZW50VHlwZSgidmlkZW8vd2VibSJfcyk7Ci0gICAgYXV0byBwYXJzZXIgPSBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpjcmVhdGUoY29udGVudFR5cGUpOwotICAgIGlmICghcGFyc2Vy
KSB7Ci0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX3BhcnNlVHJhY2tzTG9jayB9OwotICAgICAg
ICBtX3BhcnNlVHJhY2tzU3RhdHVzID0ga01UUGx1Z2luRm9ybWF0UmVhZGVyRXJyb3JfQWxsb2Nh
dGlvbkZhaWx1cmU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoIW1fbG9nZ2Vy
KSB7CiAgICAgICAgIG1fbG9nZ2VyID0gJkRvY3VtZW50OjpzaGFyZWRMb2dnZXIoKTsKICAgICAg
ICAgbV9sb2dJZGVudGlmaWVyID0gbmV4dExvZ0lkZW50aWZpZXIoKTsKICAgICB9CiAKICAgICBB
TFdBWVNfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwotICAgIHBhcnNlci0+c2V0TG9n
Z2VyKCptX2xvZ2dlciwgbV9sb2dJZGVudGlmaWVyKTsKLQotICAgIC8vIFNldCBhIG1pbmltdW0g
YXVkaW8gc2FtcGxlIGR1cmF0aW9uIG9mIDAgc28gdGhlIHBhcnNlciBjcmVhdGVzIGluZGl2aXNp
YmxlIHNhbXBsZXMgd2l0aCBieXRlIHNvdXJjZSByYW5nZXMuCi0gICAgcGFyc2VyLT5zZXRNaW5p
bXVtQXVkaW9TYW1wbGVEdXJhdGlvbigwKTsKLQotICAgIHBhcnNlci0+c2V0Q2FsbE9uQ2xpZW50
VGhyZWFkQ2FsbGJhY2soW10oRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKSB7Ci0gICAgICAg
IE1lZGlhVHJhY2tSZWFkZXI6OnN0b3JhZ2VRdWV1ZSgpLmRpc3BhdGNoKFdURk1vdmUoZnVuY3Rp
b24pKTsKLSAgICB9KTsKLQotICAgIHBhcnNlci0+c2V0RGlkUGFyc2VJbml0aWFsaXphdGlvbkRh
dGFDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dKFNvdXJjZUJ1
ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdtZW50
KSB7Ci0gICAgICAgIGRpZFBhcnNlVHJhY2tzKFdURk1vdmUoaW5pdGlhbGl6YXRpb25TZWdtZW50
KSwgbm9FcnIpOwotICAgIH0pOwotCi0gICAgcGFyc2VyLT5zZXREaWRFbmNvdW50ZXJFcnJvckR1
cmluZ1BhcnNpbmdDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1d
KHVpbnQ2NF90IGVycm9yQ29kZSkgewotICAgICAgICBkaWRQYXJzZVRyYWNrcyh7IH0sIGVycm9y
Q29kZSk7Ci0gICAgfSk7Ci0KLSAgICBwYXJzZXItPnNldERpZFByb3ZpZGVNZWRpYURhdGFDYWxs
YmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dKFJlZjxNZWRpYVNhbXBs
ZUFWRk9iakM+JiYgbWVkaWFTYW1wbGUsIHVpbnQ2NF90IHRyYWNrSUQsIGNvbnN0IFN0cmluZyYg
bWVkaWFUeXBlKSB7Ci0gICAgICAgIGRpZFByb3ZpZGVNZWRpYURhdGEoV1RGTW92ZShtZWRpYVNh
bXBsZSksIHRyYWNrSUQsIG1lZGlhVHlwZSk7Ci0gICAgfSk7CiAKICAgICBMb2NrZXIgbG9ja2Vy
IHsgbV9wYXJzZVRyYWNrc0xvY2sgfTsKICAgICBtX2J5dGVTb3VyY2UgPSBXVEZNb3ZlKGJ5dGVT
b3VyY2UpOwpAQCAtMTczLDE0ICsxNDUsMzQgQEAgdm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6cGFy
c2VCeXRlU291cmNlKFJldGFpblB0cjxNVFBsdWdpbkJ5dGVTb3VyY2VSZWY+JiYgYnl0ZVMKICAg
ICBtX2R1cmF0aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwogICAgIG1fdHJhY2tSZWFk
ZXJzLmNsZWFyKCk7CiAKLSAgICByZWFkZXJRdWV1ZSgpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgYnl0ZVNvdXJjZSA9IG1fYnl0ZVNvdXJjZSwgcGFyc2Vy
ID0gcGFyc2VyLnJlbGVhc2VOb25OdWxsKCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIHBhcnNlci0+
YXBwZW5kRGF0YShXVEZNb3ZlKGJ5dGVTb3VyY2UpKTsKLSAgICAgICAgTWVkaWFUcmFja1JlYWRl
cjo6c3RvcmFnZVF1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAq
dGhpcyB9LCBwYXJzZXIgPSBXVEZNb3ZlKHBhcnNlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICBmaW5pc2hQYXJzaW5nKFdURk1vdmUocGFyc2VyKSk7CisgICAgLy8gRklYTUU6IHdoeSBkbyB3
ZSBuZWVkIGEgc3RvcmFnZSBxdWV1ZSBkaWZmZXJlbnQgdG8gcmVhZGVyJ3MgcXVldWU/CisgICAg
cmVhZGVyUXVldWUoKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlz
IH0sIGJ5dGVTb3VyY2UgPSBtX2J5dGVTb3VyY2VdKCkgbXV0YWJsZSB7CisgICAgICAgIFdlYk1Q
YXJzZXIgcGFyc2VyKCp0aGlzKTsKKyAgICAgICAgcGFyc2VyLnNldExvZ2dlcigqbV9sb2dnZXIs
IG1fbG9nSWRlbnRpZmllcik7CisgICAgICAgIHBhcnNlci5jcmVhdGVCeXRlUmFuZ2VTYW1wbGVz
KCk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VyLnBhcnNlKFdURk1vdmUoYnl0ZVNvdXJj
ZSkpOworICAgICAgICBNZWRpYVRyYWNrUmVhZGVyOjpzdG9yYWdlUXVldWUoKS5kaXNwYXRjaChb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHJlc3VsdF0gKCkgbXV0YWJsZSB7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmV0dXJu
VmFsdWUoKSkKKyAgICAgICAgICAgICAgICBkaWRQYXJzZVRyYWNrcyh7IH0sIHJlc3VsdC5yZXR1
cm5WYWx1ZSgpKTsKKyAgICAgICAgICAgIGZpbmlzaFBhcnNpbmcoKTsKICAgICAgICAgfSk7CiAg
ICAgfSk7CiB9CiAKK3ZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OnBhcnNlZEluaXRpYWxpemF0aW9u
RGF0YShTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmIGluaXRpYWxp
emF0aW9uU2VnbWVudCkKK3sKKyAgICBNZWRpYVRyYWNrUmVhZGVyOjpzdG9yYWdlUXVldWUoKS5k
aXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGluaXRpYWxpemF0
aW9uU2VnbWVudCA9IFdURk1vdmUoaW5pdGlhbGl6YXRpb25TZWdtZW50KV0gKCkgbXV0YWJsZSB7
CisgICAgICAgIGRpZFBhcnNlVHJhY2tzKFdURk1vdmUoaW5pdGlhbGl6YXRpb25TZWdtZW50KSwg
bm9FcnIpOworICAgIH0pOworfQorCit2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpwYXJzZWRNZWRp
YURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBtZWRpYVNhbXBsZXMpCit7CisgICAgTWVkaWFUcmFj
a1JlYWRlcjo6c3RvcmFnZVF1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBS
ZWYgeyAqdGhpcyB9LCBtZWRpYVNhbXBsZXMgPSBXVEZNb3ZlKG1lZGlhU2FtcGxlcyldICgpIG11
dGFibGUgeworICAgICAgICBkaWRQcm92aWRlTWVkaWFEYXRhKFdURk1vdmUobWVkaWFTYW1wbGVz
KSk7CisgICAgfSk7Cit9CisKIHZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OmRpZFBhcnNlVHJhY2tz
KFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmIHNlZ21l
bnQsIHVpbnQ2NF90IGVycm9yQ29kZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7
CkBAIC0yMjUsMjAgKzIxNywyMCBAQCB2b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpkaWRQYXJzZVRy
YWNrcyhTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvbgogICAgIG1faW5p
dCA9IHRydWU7CiB9CiAKLXZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OmRpZFByb3ZpZGVNZWRpYURh
dGEoUmVmPE1lZGlhU2FtcGxlQVZGT2JqQz4mJiBtZWRpYVNhbXBsZSwgdWludDY0X3QgdHJhY2tJ
RCwgY29uc3QgU3RyaW5nJikKK3ZvaWQgTWVkaWFGb3JtYXRSZWFkZXI6OmRpZFByb3ZpZGVNZWRp
YURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBtZWRpYVNhbXBsZXMpCiB7CiAgICAgQVNTRVJUKCFp
c01haW5SdW5Mb29wKCkpOwogCiAgICAgTG9ja2VyIGxvY2tlciB7IG1fcGFyc2VUcmFja3NMb2Nr
IH07CiAgICAgYXV0byB0cmFja0luZGV4ID0gbV90cmFja1JlYWRlcnMuZmluZElmKFsmXShhdXRv
JiB0cmFjaykgewotICAgICAgICByZXR1cm4gdHJhY2stPnRyYWNrSUQoKSA9PSB0cmFja0lEOwor
ICAgICAgICByZXR1cm4gdHJhY2stPnRyYWNrSUQoKSA9PSBtZWRpYVNhbXBsZXMuaW5mbygpLT50
cmFja0lEOwogICAgIH0pOwogCiAgICAgaWYgKHRyYWNrSW5kZXggIT0gbm90Rm91bmQpCi0gICAg
ICAgIG1fdHJhY2tSZWFkZXJzW3RyYWNrSW5kZXhdLT5hZGRTYW1wbGUoV1RGTW92ZShtZWRpYVNh
bXBsZSksIG1fYnl0ZVNvdXJjZS5nZXQoKSk7CisgICAgICAgIG1fdHJhY2tSZWFkZXJzW3RyYWNr
SW5kZXhdLT5hZGRTYW1wbGUoV1RGTW92ZShtZWRpYVNhbXBsZXMpLCBtX2J5dGVTb3VyY2UuZ2V0
KCkpOwogfQogCi12b2lkIE1lZGlhRm9ybWF0UmVhZGVyOjpmaW5pc2hQYXJzaW5nKFJlZjxTb3Vy
Y2VCdWZmZXJQYXJzZXI+JiYgcGFyc2VyKQordm9pZCBNZWRpYUZvcm1hdFJlYWRlcjo6ZmluaXNo
UGFyc2luZygpCiB7CiAgICAgQVNTRVJUKCFpc01haW5SdW5Mb29wKCkpOwogICAgIEFMV0FZU19M
T0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CkBAIC0yNTgsMTEgKzI1MCw2IEBAIHZvaWQg
TWVkaWFGb3JtYXRSZWFkZXI6OmZpbmlzaFBhcnNpbmcoUmVmPFNvdXJjZUJ1ZmZlclBhcnNlcj4m
JiBwYXJzZXIpCiAgICAgICAgIGlmIChncmVhdGVzdFByZXNlbnRhdGlvblRpbWUuaXNWYWxpZCgp
KQogICAgICAgICAgICAgbV9kdXJhdGlvbiA9IGdyZWF0ZXN0UHJlc2VudGF0aW9uVGltZTsKICAg
ICB9Ci0KLSAgICBwYXJzZXItPnNldERpZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2so
bnVsbHB0cik7Ci0gICAgcGFyc2VyLT5zZXREaWRFbmNvdW50ZXJFcnJvckR1cmluZ1BhcnNpbmdD
YWxsYmFjayhudWxscHRyKTsKLSAgICBwYXJzZXItPnNldERpZFByb3ZpZGVNZWRpYURhdGFDYWxs
YmFjayhudWxscHRyKTsKLSAgICBwYXJzZXItPnJlc2V0UGFyc2VyU3RhdGUoKTsKIH0KIAogT1NT
dGF0dXMgTWVkaWFGb3JtYXRSZWFkZXI6OmNvcHlQcm9wZXJ0eShDRlN0cmluZ1JlZiBrZXksIENG
QWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgdm9pZCogdmFsdWVDb3B5KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVy
LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3Jt
YXRSZWFkZXIuaAppbmRleCAxNWQ1NTczNjMzODE3NDYwYzJlNjIwNDQxOTAxMDIzY2Y4NmI0YTkz
Li4xYTQ4YzE2ODBlODc1ZGM2MjUyMjg3NDE1ZjU0ODhjOTJjNTg4MDJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFk
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVk
aWFGb3JtYXRSZWFkZXIuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJNX0ZPUk1B
VF9SRUFERVIpCiAKICNpbmNsdWRlICJDb3JlTWVkaWFXcmFwcGVkLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Tb3VyY2VC
dWZmZXJQcml2YXRlQ2xpZW50Lmg+CiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CkBAIC0zNiwxNSArMzcsMTUgQEAKIERFQ0xBUkVfQ09SRV9NRURJQV9U
UkFJVFMoRm9ybWF0UmVhZGVyKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTWVkaWFT
YW1wbGVBVkZPYmpDOwotY2xhc3MgU291cmNlQnVmZmVyUGFyc2VyOworY2xhc3MgTWVkaWFTYW1w
bGVzQmxvY2s7CitjbGFzcyBXZWJNUGFyc2VyOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgTWVkaWFUcmFja1JlYWRlcjsKIAotY2xhc3MgTWVkaWFGb3JtYXRSZWFkZXIgZmluYWwg
OiBwdWJsaWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYUZvcm1hdFJlYWRlcj4geworY2xhc3MgTWVk
aWFGb3JtYXRSZWFkZXIgZmluYWwgOiBwdWJsaWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYUZvcm1h
dFJlYWRlcj4gLCBwdWJsaWMgV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2sgewogcHVibGlj
OgogICAgIHVzaW5nIENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFGb3JtYXRSZWFkZXI+Ojp1bndyYXA7
CiAKQEAgLTY0LDEyICs2NSwxNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE1l
ZGlhRm9ybWF0UmVhZGVyKEFsbG9jYXRvciYmKTsKIAorICAgIC8vIFdlYk1QYXJzZXI6OkNhbGxi
YWNrCisgICAgdm9pZCBwYXJzZWRJbml0aWFsaXphdGlvbkRhdGEoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQmJikgZmluYWw7CisgICAgdm9pZCBwYXJz
ZWRNZWRpYURhdGEoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2smJikgZmluYWw7CisKICAgICB2
b2lkIHBhcnNlQnl0ZVNvdXJjZShSZXRhaW5QdHI8TVRQbHVnaW5CeXRlU291cmNlUmVmPiYmKTsK
ICAgICB2b2lkIGRpZFBhcnNlVHJhY2tzKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVDbGll
bnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmLCB1aW50NjRfdCBlcnJvckNvZGUpOwogICAgIHZv
aWQgZGlkU2VsZWN0VmlkZW9UcmFjayhXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZSYsIGJvb2wp
IHsgfQogICAgIHZvaWQgZGlkRW5hYmxlQXVkaW9UcmFjayhXZWJDb3JlOjpBdWRpb1RyYWNrUHJp
dmF0ZSYsIGJvb2wpIHsgfQotICAgIHZvaWQgZGlkUHJvdmlkZU1lZGlhRGF0YShSZWY8V2ViQ29y
ZTo6TWVkaWFTYW1wbGVBVkZPYmpDPiYmLCB1aW50NjRfdCwgY29uc3QgU3RyaW5nJik7Ci0gICAg
dm9pZCBmaW5pc2hQYXJzaW5nKFJlZjxXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXI+JiYpOwor
ICAgIHZvaWQgZGlkUHJvdmlkZU1lZGlhRGF0YShXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jayYm
KTsKKyAgICB2b2lkIGZpbmlzaFBhcnNpbmcoKTsKIAogICAgIC8vIENNQmFzZUNsYXNzCiAgICAg
U3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiAiV2ViS2l0OjpN
ZWRpYUZvcm1hdFJlYWRlciJfczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5j
cHAKaW5kZXggODljNzkyZmU1ZDQ1ZTQ1OTg4NDE0M2Y1NDQyOTAxNmQ2NzJjNGU3NS4uYzk0YWUy
ZjhlODkxMGNmZTIyOGNlNTY1MjllMTRlZTgxZDEwMjNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFT
YW1wbGVCeXRlUmFuZ2UuY3BwCkBAIC0zMyw1NSArMzMsNzMgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1NZWRpYVNhbXBsZUJ5dGVSYW5nZTo6TWVk
aWFTYW1wbGVCeXRlUmFuZ2UoTWVkaWFTYW1wbGUmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNl
UmVmIGJ5dGVTb3VyY2UsIHVpbnQ2NF90IHRyYWNrSUQpCi0gICAgOiBtX3ByZXNlbnRhdGlvblRp
bWUoc2FtcGxlLnByZXNlbnRhdGlvblRpbWUoKSkKLSAgICAsIG1fZGVjb2RlVGltZShzYW1wbGUu
ZGVjb2RlVGltZSgpKQotICAgICwgbV9kdXJhdGlvbihzYW1wbGUuZHVyYXRpb24oKSkKLSAgICAs
IG1fYnl0ZVJhbmdlKCpzYW1wbGUuYnl0ZVJhbmdlKCkpCi0gICAgLCBtX3RyYWNrSUQodHJhY2tJ
RCkKLSAgICAsIG1fc2l6ZUluQnl0ZXMoc2FtcGxlLnNpemVJbkJ5dGVzKCkpCi0gICAgLCBtX3By
ZXNlbnRhdGlvblNpemUoc2FtcGxlLnByZXNlbnRhdGlvblNpemUoKSkKK01lZGlhU2FtcGxlQnl0
ZVJhbmdlOjpNZWRpYVNhbXBsZUJ5dGVSYW5nZShNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZSwg
TVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCisgICAgOiBtX2Jsb2NrKFdURk1vdmUo
c2FtcGxlKSkKICAgICAsIG1fYnl0ZVNvdXJjZShieXRlU291cmNlKQotICAgICwgbV9mbGFncyhz
YW1wbGUuZmxhZ3MoKSkKIHsKLSAgICBBU1NFUlQoIWlzTWFpblJ1bkxvb3AoKSk7Ci0gICAgQVNT
RVJUKG1fZGVjb2RlVGltZSA9PSBtX3ByZXNlbnRhdGlvblRpbWUgfHwgbV9kZWNvZGVUaW1lID09
IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSk7Ci0gICAgYXV0byBwbGF0Zm9ybVNhbXBsZSA9IHNh
bXBsZS5wbGF0Zm9ybVNhbXBsZSgpOwotICAgIHN3aXRjaCAocGxhdGZvcm1TYW1wbGUudHlwZSkg
ewotICAgIGNhc2UgUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlwZToKLSAgICAgICAg
bV9mb3JtYXREZXNjcmlwdGlvbiA9IFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlw
dGlvbihwbGF0Zm9ybVNhbXBsZS5zYW1wbGUuY21TYW1wbGVCdWZmZXIpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlOgotICAgICAg
ICBtX2Zvcm1hdERlc2NyaXB0aW9uID0gcGxhdGZvcm1TYW1wbGUuc2FtcGxlLmJ5dGVSYW5nZVNh
bXBsZS5zZWNvbmQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgQVNTRVJUKCFtX2Js
b2NrLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8TWVkaWFT
YW1wbGU6OkJ5dGVSYW5nZT4obV9ibG9jay5sYXN0KCkuZGF0YSkpOwogfQogCiBBdG9tU3RyaW5n
IE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjp0cmFja0lEKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQXRv
bVN0cmluZzo6bnVtYmVyKG1fdHJhY2tJRCk7CisgICAgcmV0dXJuIEF0b21TdHJpbmc6Om51bWJl
cihtX2Jsb2NrLmluZm8oKS0+dHJhY2tJRCk7CiB9CiAKIFBsYXRmb3JtU2FtcGxlIE1lZGlhU2Ft
cGxlQnl0ZVJhbmdlOjpwbGF0Zm9ybVNhbXBsZSgpIGNvbnN0CiB7CisgICAgQVNTRVJUKG1fYmxv
Y2suaW5mbygpKTsKICAgICByZXR1cm4gewogICAgICAgICBQbGF0Zm9ybVNhbXBsZTo6Qnl0ZVJh
bmdlU2FtcGxlVHlwZSwKLSAgICAgICAgeyAuYnl0ZVJhbmdlU2FtcGxlID0gc3RkOjptYWtlX3Bh
aXIobV9ieXRlU291cmNlLmdldCgpLCBtX2Zvcm1hdERlc2NyaXB0aW9uLmdldCgpKSB9LAorICAg
ICAgICB7IC5ieXRlUmFuZ2VTYW1wbGUgPSBzdGQ6Om1ha2VfcGFpcihtX2J5dGVTb3VyY2UuZ2V0
KCksIHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXIoKm1fYmxvY2suaW5mbygpKSkgfSwKICAgICB9Owog
fQogCi12b2lkIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3Qg
TWVkaWFUaW1lJiBvZmZzZXQpCitNZWRpYVRpbWUgTWVkaWFTYW1wbGVCeXRlUmFuZ2U6OnByZXNl
bnRhdGlvblRpbWUoKSBjb25zdAogewotICAgIHNldFRpbWVzdGFtcHMocHJlc2VudGF0aW9uVGlt
ZSgpICsgb2Zmc2V0LCBkZWNvZGVUaW1lKCkgKyBvZmZzZXQpOworICAgIHJldHVybiBtX2Jsb2Nr
Lmxhc3QoKS5wcmVzZW50YXRpb25UaW1lOwogfQogCi12b2lkIE1lZGlhU2FtcGxlQnl0ZVJhbmdl
OjpzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSwgY29uc3Qg
TWVkaWFUaW1lJiBkZWNvZGVUaW1lKQorTWVkaWFUaW1lIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpk
ZWNvZGVUaW1lKCkgY29uc3QKIHsKLSAgICBtX3ByZXNlbnRhdGlvblRpbWUgPSBwcmVzZW50YXRp
b25UaW1lOwotICAgIG1fZGVjb2RlVGltZSA9IGRlY29kZVRpbWU7CisgICAgcmV0dXJuIG1fYmxv
Y2subGFzdCgpLmRlY29kZVRpbWU7Cit9CisKK01lZGlhVGltZSBNZWRpYVNhbXBsZUJ5dGVSYW5n
ZTo6ZHVyYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2Jsb2NrLmxhc3QoKS5kdXJhdGlv
bjsKK30KKworc2l6ZV90IE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpzaXplSW5CeXRlcygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2U+KG1fYmxvY2su
bGFzdCgpLmRhdGEpLmJ5dGVMZW5ndGg7Cit9CisKK1dlYkNvcmU6OkZsb2F0U2l6ZSBNZWRpYVNh
bXBsZUJ5dGVSYW5nZTo6cHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fYmxv
Y2suaXNWaWRlbygpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Y29uc3QgVmlkZW9JbmZvPiht
X2Jsb2NrLmluZm8oKSktPmRpc3BsYXlTaXplOworICAgIHJldHVybiB7IH07Cit9CisKK01lZGlh
U2FtcGxlQnl0ZVJhbmdlOjpTYW1wbGVGbGFncyBNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6ZmxhZ3Mo
KSBjb25zdAoreworICAgIHJldHVybiBtX2Jsb2NrLmxhc3QoKS5mbGFnczsKK30KKworc3RkOjpv
cHRpb25hbDxNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6Qnl0ZVJhbmdlPiBNZWRpYVNhbXBsZUJ5dGVS
YW5nZTo6Ynl0ZVJhbmdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjpnZXQ8TWVkaWFTYW1w
bGU6OkJ5dGVSYW5nZT4obV9ibG9jay5sYXN0KCkuZGF0YSk7Cit9CisKK3ZvaWQgTWVkaWFTYW1w
bGVCeXRlUmFuZ2U6Om9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKQoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpz
ZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpCit7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2Ft
cGxlQnl0ZVJhbmdlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFk
ZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaAppbmRleCA1ZGEyODg1ZDQ1ZDE3ODg4MzYyMjkxN2U1
ZTRhY2I5N2Y4ZWNhZTA3Li5hNGIxNzQ2NTAxYWI4YmUxYzc1ZWI5ZjYwYmNkNjU1NTA2NGY3Yzc5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFTYW1wbGVCeXRlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVk
aWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaApAQCAtMjcsNDggKzI3LDM3IEBA
CiAKICNpZiBFTkFCTEUoV0VCTV9GT1JNQVRfUkVBREVSKQogCi0jaW5jbHVkZSA8V2ViQ29yZS9N
ZWRpYVNhbXBsZUFWRk9iakMuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL01lZGlhVG9vbGJv
eFNQSS5oPgotI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVNhbXBsZS5oPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgTWVkaWFTYW1wbGVCeXRlUmFuZ2UgZmluYWwgOiBwdWJsaWMgV2ViQ29y
ZTo6TWVkaWFTYW1wbGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVCeXRl
UmFuZ2U+IGNyZWF0ZShXZWJDb3JlOjpNZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVT
b3VyY2VSZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKKyAgICBzdGF0aWMgUmVmPE1l
ZGlhU2FtcGxlQnl0ZVJhbmdlPiBjcmVhdGUoV2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2smJiBz
YW1wbGUsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291cmNlKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVCeXRlUmFuZ2Uoc2FtcGxlLCBieXRlU291
cmNlLCB0cmFja0lEKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhU2FtcGxl
Qnl0ZVJhbmdlKFdURk1vdmUoc2FtcGxlKSwgYnl0ZVNvdXJjZSkpOwogICAgIH0KIAotICAgIE1l
ZGlhVGltZSBwcmVzZW50YXRpb25UaW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcmVzZW50
YXRpb25UaW1lOyB9Ci0gICAgTWVkaWFUaW1lIGRlY29kZVRpbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2RlY29kZVRpbWU7IH0KLSAgICBNZWRpYVRpbWUgZHVyYXRpb24oKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBw
cmVzZW50YXRpb25TaXplKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wcmVzZW50YXRpb25TaXpl
OyB9Ci0gICAgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2ZsYWdz
OyB9Ci0gICAgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fYnl0ZVJhbmdlOyB9CisgICAgTWVkaWFUaW1lIHByZXNlbnRhdGlvblRpbWUo
KSBjb25zdCBmaW5hbDsKKyAgICBNZWRpYVRpbWUgZGVjb2RlVGltZSgpIGNvbnN0IGZpbmFsOwor
ICAgIE1lZGlhVGltZSBkdXJhdGlvbigpIGNvbnN0IGZpbmFsOworICAgIHNpemVfdCBzaXplSW5C
eXRlcygpIGNvbnN0IGZpbmFsOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBwcmVzZW50YXRpb25T
aXplKCkgY29uc3QgZmluYWw7CisgICAgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbDsK
KyAgICBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgZmluYWw7CiAK
ICAgICBBdG9tU3RyaW5nIHRyYWNrSUQoKSBjb25zdCBmaW5hbDsKICAgICBXZWJDb3JlOjpQbGF0
Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgpIGNvbnN0IGZpbmFsOwogICAgIFdlYkNvcmU6OlBs
YXRmb3JtU2FtcGxlOjpUeXBlIHBsYXRmb3JtU2FtcGxlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIFdlYkNvcmU6OlBsYXRmb3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlOyB9CiAgICAg
dm9pZCBvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJikgZmluYWw7CiAgICAgdm9p
ZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIGZpbmFs
OwotICAgIFJlZjxNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkoKSBjb25zdCB7
IHJldHVybiAqY29uc3RfY2FzdDxNZWRpYVNhbXBsZUJ5dGVSYW5nZSo+KHRoaXMpOyB9CisgICAg
UmVmPE1lZGlhU2FtcGxlPiBjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICpjb25zdF9jYXN0PE1lZGlhU2FtcGxlQnl0ZVJhbmdlKj4odGhpcyk7IH0KIAogcHJp
dmF0ZToKLSAgICBNZWRpYVNhbXBsZUJ5dGVSYW5nZShNZWRpYVNhbXBsZSYsIE1UUGx1Z2luQnl0
ZVNvdXJjZVJlZiwgdWludDY0X3QgdHJhY2tJRCk7CisgICAgTWVkaWFTYW1wbGVCeXRlUmFuZ2Uo
V2ViQ29yZTo6TWVkaWFTYW1wbGVzQmxvY2smJiwgTVRQbHVnaW5CeXRlU291cmNlUmVmKTsKIAot
ICAgIE1lZGlhVGltZSBtX3ByZXNlbnRhdGlvblRpbWU7Ci0gICAgTWVkaWFUaW1lIG1fZGVjb2Rl
VGltZTsKLSAgICBNZWRpYVRpbWUgbV9kdXJhdGlvbjsKLSAgICBCeXRlUmFuZ2UgbV9ieXRlUmFu
Z2U7Ci0gICAgdWludDY0X3QgbV90cmFja0lEOwotICAgIHNpemVfdCBtX3NpemVJbkJ5dGVzOwot
ICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX3ByZXNlbnRhdGlvblNpemU7CisgICAgY29uc3QgV2Vi
Q29yZTo6TWVkaWFTYW1wbGVzQmxvY2sgbV9ibG9jazsKICAgICBSZXRhaW5QdHI8TVRQbHVnaW5C
eXRlU291cmNlUmVmPiBtX2J5dGVTb3VyY2U7Ci0gICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3Jp
cHRpb25SZWY+IG1fZm9ybWF0RGVzY3JpcHRpb247Ci0gICAgU2FtcGxlRmxhZ3MgbV9mbGFnczsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5j
cHAKaW5kZXggNmFhMDIzYzY2NTYzNDMyNWI3NDhiYjNkNzU1ODYwZDA5NDdlMGI0ZS4uZmM5ZGU3
ZjU2NWJjYzRhYTdkMjU5Yzc5ZTlmOTc3NTU5MzMwOGZhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1w
bGVDdXJzb3IuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiTWVkaWFUcmFja1JlYWRlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ01VdGlsaXRp
ZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhU2FtcGxlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9TYW1wbGVNYXAuaD4KICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFWRm91
bmRhdGlvbi5oPgpAQCAtMzQ4LDI2ICszNDksMTggQEAgT1NTdGF0dXMgTWVkaWFTYW1wbGVDdXJz
b3I6OmdldFNhbXBsZVRpbWluZyhDTVNhbXBsZVRpbWluZ0luZm8qIHNhbXBsZVRpbWluZykgY28K
IAogT1NTdGF0dXMgTWVkaWFTYW1wbGVDdXJzb3I6OmdldFN5bmNJbmZvKE1UUGx1Z2luU2FtcGxl
Q3Vyc29yU3luY0luZm8qIHN5bmNJbmZvKSBjb25zdAogewotICAgIE9TU3RhdHVzIHN5bmNJbmZv
U3RhdHVzID0gbm9FcnI7Ci0gICAgYXV0byBnZXRTYW1wbGVTdGF0dXMgPSBnZXRNZWRpYVNhbXBs
ZShbJl0oTWVkaWFTYW1wbGUmIHNhbXBsZSkgewotICAgICAgICBpZiAoc2FtcGxlLmhhc1N5bmNJ
bmZvKCkpIHsKLSAgICAgICAgICAgICpzeW5jSW5mbyA9IHsKLSAgICAgICAgICAgICAgICAuZnVs
bFN5bmMgPSBzYW1wbGUuaXNTeW5jKCkKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgc3luY0luZm9TdGF0dXMgPSBrQ01CYXNlT2JqZWN0RXJy
b3JfVmFsdWVOb3RBdmFpbGFibGU7CisgICAgcmV0dXJuIGdldE1lZGlhU2FtcGxlKFsmXShNZWRp
YVNhbXBsZSYgc2FtcGxlKSB7CisgICAgICAgICpzeW5jSW5mbyA9IHsKKyAgICAgICAgICAgIC5m
dWxsU3luYyA9IHNhbXBsZS5pc1N5bmMoKQorICAgICAgICB9OwogICAgIH0pOwotICAgIGlmIChz
eW5jSW5mb1N0YXR1cyAhPSBub0VycikKLSAgICAgICAgcmV0dXJuIHN5bmNJbmZvU3RhdHVzOwot
ICAgIHJldHVybiBnZXRTYW1wbGVTdGF0dXM7CiB9CiAKIE9TU3RhdHVzIE1lZGlhU2FtcGxlQ3Vy
c29yOjpjb3B5Rm9ybWF0RGVzY3JpcHRpb24oQ01Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0
RGVzY3JpcHRpb25PdXQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldE1lZGlhU2FtcGxlKFsmXShN
ZWRpYVNhbXBsZSYgc2FtcGxlKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oc2FtcGxlLnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNh
bXBsZTo6Qnl0ZVJhbmdlU2FtcGxlVHlwZSk7Ci0gICAgICAgICpmb3JtYXREZXNjcmlwdGlvbk91
dCA9IHJldGFpblB0cihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuYnl0ZVJhbmdlU2Ft
cGxlLnNlY29uZCkubGVha1JlZigpOworICAgICAgICAqZm9ybWF0RGVzY3JpcHRpb25PdXQgPSBj
cmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8oc2FtcGxlLnBsYXRmb3JtU2FtcGxl
KCkuc2FtcGxlLmJ5dGVSYW5nZVNhbXBsZS5zZWNvbmQpLmxlYWtSZWYoKTsKICAgICB9KTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVy
L01lZGlhVHJhY2tSZWFkZXIuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9y
bWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuY3BwCmluZGV4IGYwNGM1OTA2ZjFhMTZmYjNkZjc4
YmQ0MzgyOGMwZGM2ZDhkZWI2MWEuLjQ3MjRlYzhkYTNmZDIzMDdjYjY1NzllYzBlMDVhMTQ2OTkw
NjZlYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJl
YWRlci9NZWRpYVRyYWNrUmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMv
TWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJNZWRpYVNhbXBsZUJ5dGVSYW5nZS5oIgogI2luY2x1ZGUgIk1lZGlhU2FtcGxl
Q3Vyc29yLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BdWRpb1RyYWNrUHJpdmF0ZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvQ01VdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0luYmFuZFRleHRU
cmFja1ByaXZhdGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhRGVzY3JpcHRpb24uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1NhbXBsZU1hcC5oPgpAQCAtOTcsMTUgKzk4LDE3IEBAIE1lZGlhVGlt
ZSBNZWRpYVRyYWNrUmVhZGVyOjpncmVhdGVzdFByZXNlbnRhdGlvblRpbWUoKSBjb25zdAogICAg
IHJldHVybiBsYXN0U2FtcGxlLnByZXNlbnRhdGlvblRpbWUoKSArIGxhc3RTYW1wbGUuZHVyYXRp
b24oKTsKIH0KIAotdm9pZCBNZWRpYVRyYWNrUmVhZGVyOjphZGRTYW1wbGUoUmVmPE1lZGlhU2Ft
cGxlPiYmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCit2b2lkIE1l
ZGlhVHJhY2tSZWFkZXI6OmFkZFNhbXBsZShNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZSwgTVRQ
bHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UpCiB7CiAgICAgQVNTRVJUKCFpc01haW5SdW5M
b29wKCkpOwogICAgIExvY2tlciBsb2NrZXIgeyBtX3NhbXBsZVN0b3JhZ2VMb2NrIH07CiAgICAg
aWYgKCFtX3NhbXBsZVN0b3JhZ2UpCiAgICAgICAgIG1fc2FtcGxlU3RvcmFnZSA9IG1ha2VVbmlx
dWU8U2FtcGxlU3RvcmFnZT4oKTsKIAotICAgIEFTU0VSVCghc2FtcGxlLT5pc0RpdmlzYWJsZSgp
ICYmIHNhbXBsZS0+Ynl0ZVJhbmdlKCkpOwotICAgIGF1dG8gc2FtcGxlVG9BZGQgPSBNZWRpYVNh
bXBsZUJ5dGVSYW5nZTo6Y3JlYXRlKHNhbXBsZS5nZXQoKSwgYnl0ZVNvdXJjZSwgbV90cmFja0lE
KTsKKyAgICBBU1NFUlQoIXNhbXBsZS5pc0VtcHR5KCkpOworICAgIEFTU0VSVChzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2U+KHNhbXBsZS5sYXN0KCkuZGF0YSkp
OworCisgICAgYXV0byBzYW1wbGVUb0FkZCA9IE1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpjcmVhdGUo
V1RGTW92ZShzYW1wbGUpLCBieXRlU291cmNlKTsKIAogICAgIC8vIEZJWE1FOiBFdmVuIHRob3Vn
aCBXZWJNIG11eGVyIGd1aWRlbGluZXMgc2F5IHRoaXMgbXVzdCBub3QgaGFwcGVuLCBzb21lIHZp
ZGVvIHRyYWNrcyBoYXZlIHR3bwogICAgIC8vIGNvbnNlY3V0aXZlIGZyYW1lcyB3aXRoIHRoZSBz
YW1lIHByZXNlbnRhdGlvbiB0aW1lLiBTYW1wbGVNYXAgd2lsbCBub3Qgc3RvcmUgdGhlIHNlY29u
ZCBmcmFtZQpAQCAtMTg1LDcgKzE4OCwxNSBAQCBPU1N0YXR1cyBNZWRpYVRyYWNrUmVhZGVyOjpj
b3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYga2V5LCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0bwogCiAg
ICAgaWYgKENGRXF1YWwoa2V5LCBQQUw6OmdldF9NZWRpYVRvb2xib3hfa01UUGx1Z2luVHJhY2tS
ZWFkZXJQcm9wZXJ0eV9Gb3JtYXREZXNjcmlwdGlvbkFycmF5KCkpKSB7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obGFzdFNhbXBsZS5wbGF0Zm9ybVNh
bXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkJ5dGVSYW5nZVNhbXBsZVR5cGUpOwotICAg
ICAgICBjb25zdCB2b2lkKiBkZXNjcmlwdGlvbnNbMV0gPSB7IGxhc3RTYW1wbGUucGxhdGZvcm1T
YW1wbGUoKS5zYW1wbGUuYnl0ZVJhbmdlU2FtcGxlLnNlY29uZCB9OworICAgICAgICBjb25zdCBU
cmFja0luZm8mIHRyYWNrSW5mbyA9IGxhc3RTYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUu
Ynl0ZVJhbmdlU2FtcGxlLnNlY29uZDsKKyAgICAgICAgaWYgKCFtX3RyYWNrSW5mbykgeworICAg
ICAgICAgICAgbV90cmFja0luZm8gPSAmbGFzdFNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBs
ZS5ieXRlUmFuZ2VTYW1wbGUuc2Vjb25kLmdldCgpOworICAgICAgICAgICAgbV9mb3JtYXREZXNj
cmlwdGlvbiA9IFdlYkNvcmU6OmNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRyYWNrSW5mbygq
bV90cmFja0luZm8pOworICAgICAgICB9IGVsc2UgaWYgKCptX3RyYWNrSW5mbyAhPSB0cmFja0lu
Zm8pIHsKKyAgICAgICAgICAgIG1fdHJhY2tJbmZvID0gJnRyYWNrSW5mbzsKKyAgICAgICAgICAg
IG1fZm9ybWF0RGVzY3JpcHRpb24gPSBXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZy
b21UcmFja0luZm8oKm1fdHJhY2tJbmZvKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCB2b2lk
KiBkZXNjcmlwdGlvbnNbMV0gPSB7IG1fZm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkgfTsKICAgICAg
ICAgKnJlaW50ZXJwcmV0X2Nhc3Q8Q0ZBcnJheVJlZio+KGNvcGllZFZhbHVlKSA9IGFkb3B0Q0Yo
Q0ZBcnJheUNyZWF0ZShhbGxvY2F0b3IsIGRlc2NyaXB0aW9ucywgMSwgJmtDRlR5cGVBcnJheUNh
bGxCYWNrcykpLmxlYWtSZWYoKTsKICAgICAgICAgcmV0dXJuIG5vRXJyOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRy
YWNrUmVhZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFUcmFja1JlYWRlci5oCmluZGV4IDEyMDViYzI2ZGFmZWU3ZGQ0ZmRjYTdjODY2MzgxOGZk
OGY4OTc0MmMuLmRkMjVmYzNkYjcyY2U4NmY4ZWU3NGUxYzRkY2M4ZDllOGM0NzJmMjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRy
YWNrUmVhZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL01lZGlhVHJhY2tSZWFkZXIuaApAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBXb3JrUXVldWU7
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdWRpb1RyYWNrUHJpdmF0ZTsKIGNsYXNzIElu
YmFuZFRleHRUcmFja1ByaXZhdGU7Ci1jbGFzcyBNZWRpYVNhbXBsZTsKK2NsYXNzIE1lZGlhU2Ft
cGxlc0Jsb2NrOwogY2xhc3MgVHJhY2tQcml2YXRlQmFzZTsKIGNsYXNzIFZpZGVvVHJhY2tQcml2
YXRlOwogfQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgTWVkaWFUaW1lIGdyZWF0ZXN0
UHJlc2VudGF0aW9uVGltZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wgZW5h
YmxlZCkgeyBtX2lzRW5hYmxlZCA9IGVuYWJsZWQgPyBFbmFibGVkOjpUcnVlIDogRW5hYmxlZDo6
RmFsc2U7IH0KLSAgICB2b2lkIGFkZFNhbXBsZShSZWY8V2ViQ29yZTo6TWVkaWFTYW1wbGU+JiYs
IE1UUGx1Z2luQnl0ZVNvdXJjZVJlZik7CisgICAgdm9pZCBhZGRTYW1wbGUoV2ViQ29yZTo6TWVk
aWFTYW1wbGVzQmxvY2smJiwgTVRQbHVnaW5CeXRlU291cmNlUmVmKTsKICAgICB2b2lkIHdhaXRG
b3JTYW1wbGUoRnVuY3Rpb248Ym9vbChXZWJDb3JlOjpTYW1wbGVNYXAmLCBib29sKT4mJikgY29u
c3Q7CiAgICAgdm9pZCBmaW5pc2hQYXJzaW5nKCk7CiAKQEAgLTExMSw2ICsxMTEsOCBAQCBwcml2
YXRlOgogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFNhbXBsZVN0b3JhZ2U+IG1fc2FtcGxl
U3RvcmFnZSBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fc2FtcGxlU3RvcmFnZUxvY2spOwogICAgIFJl
Zjxjb25zdCBMb2dnZXI+IG1fbG9nZ2VyOwogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmll
cjsKKyAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9mb3JtYXREZXNjcmlw
dGlvbjsKKyAgICBSZWZQdHI8Y29uc3QgV2ViQ29yZTo6VHJhY2tJbmZvPiBtX3RyYWNrSW5mbzsK
IH07CiAKIGNvbnN0ZXhwciBNZWRpYVRyYWNrUmVhZGVyOjpXcmFwcGVyQ2xhc3MgTWVkaWFUcmFj
a1JlYWRlcjo6d3JhcHBlckNsYXNzKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA0YTQ3ZWZhMmVlYTk0NThkNWJjYWNhZjBlYmRjNjBhZWZiYjgz
NDMwLi4wMDU2ZGRiNmZiNzU0YjYzMWRjODI1ZTVlNjc3OTFlZTJkZGI0MjdkIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMjItMDMtMDggIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAg
ICBIYXZlIE1lZGlhRm9ybWF0UmVhZGVyIHBsdWdpbiB1c2UgV2ViTVBhcnNlciBkaXJlY3RseQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NTk0Cisg
ICAgICAgIHJkYXI6Ly84OTk2MDMwNworCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNv
bi4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAuY3Bw
OgorCiAyMDIyLTAzLTA4ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAg
ICAgICAgU3BsaXQgU291cmNlQnVmZmVyUGFyc2VyV2ViTSBhbmQgaGF2ZSBwbGF0Zm9ybSBhZ25v
c3RpYyBXZWJNUGFyc2VyCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvU2FtcGxlTWFwLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9T
YW1wbGVNYXAuY3BwCmluZGV4IDcxMjA1OGEzNjg4ODc3NmIxNzc4ZTRkY2Q5ZDhhOTBjMDIwNmFl
YTguLmVkZWUzMTJiY2UyM2MxYWYwM2JlMGFmMGI2MmJkMjYzYmY1MzBjMDUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAuY3BwCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAuY3BwCkBAIC03MCw3ICs3
MCw2IEBAIHB1YmxpYzoKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fZmxhZ3M7IH0KICAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHsgUGxhdGZvcm1TYW1wbGU6Ok5vbmUsIHsgbnVsbHB0ciB9IH07IH0K
ICAgICBQbGF0Zm9ybVNhbXBsZTo6VHlwZSBwbGF0Zm9ybVNhbXBsZVR5cGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBQbGF0Zm9ybVNhbXBsZTo6Tm9uZTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8Qnl0
ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBzdGQ6Om51bGxvcHQ7IH0K
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IGZpbmFsIHsgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>