<?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>114532</bug_id>
          
          <creation_ts>2013-04-12 13:29:30 -0700</creation_ts>
          <short_desc>Rename StyleBuilder to DeprecatedStyleBuilder</short_desc>
          <delta_ts>2013-04-13 10:58:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>114508</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Dirk Schulze">krit</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>874929</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-04-12 13:29:30 -0700</bug_when>
    <thetext>Rename StyleBuilder to DeprecatedStyleBuilder to clarify that new properties should not go into the template handling system.

Note that the discussion is still ongoing on webkit-dev. The bug might be invalid at the end of the discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874948</commentid>
    <comment_count>1</comment_count>
      <attachid>197884</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-04-12 14:15:46 -0700</bug_when>
    <thetext>Created attachment 197884
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874950</commentid>
    <comment_count>2</comment_count>
      <attachid>197884</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-12 14:18:26 -0700</bug_when>
    <thetext>Comment on attachment 197884
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        The StyleBuilder code is hard to read and maintain. People sould

sould -&gt; should</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874952</commentid>
    <comment_count>3</comment_count>
      <attachid>197884</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-12 14:19:22 -0700</bug_when>
    <thetext>Comment on attachment 197884
Patch

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

&gt; Source/WebCore/css/DeprecatedStyleBuilder.cpp:2
&gt; + * Copyright (C) 2011 Google Inc. All rights reserved.

I think someone messed up with the copyright at some point.
Most of that code was moved, not authored by google.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874953</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-12 14:20:57 -0700</bug_when>
    <thetext>Attachment 197884 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/WebCore.vcproj/WebCore.vcproj&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/css/CSSAllInOne.cpp&apos;, u&apos;Source/WebCore/css/DeprecatedStyleBuilder.cpp&apos;, u&apos;Source/WebCore/css/DeprecatedStyleBuilder.h&apos;, u&apos;Source/WebCore/css/StyleBuilder.cpp&apos;, u&apos;Source/WebCore/css/StyleBuilder.h&apos;, u&apos;Source/WebCore/css/StyleResolver.cpp&apos;, u&apos;Source/WebCore/css/StyleResolver.h&apos;, u&apos;Source/WebCore/rendering/style/RenderStyle.h&apos;]&quot; exit_code: 1
Source/WebCore/css/DeprecatedStyleBuilder.cpp:277:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:278:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:279:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:280:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:281:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:347:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:348:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:349:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:350:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:351:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:352:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:353:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:494:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:495:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:496:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:497:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:498:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:499:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:500:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:501:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:502:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:503:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:549:  Omit int when using unsigned  [runtime/unsigned] [1]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:577:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:578:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:579:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:580:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:581:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:582:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:866:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1010:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1011:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1012:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1132:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1134:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1173:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1175:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1633:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1634:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1635:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1636:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1637:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1638:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1639:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1640:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:1930:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:2230:  Omit int when using unsigned  [runtime/unsigned] [1]
Source/WebCore/css/DeprecatedStyleBuilder.cpp:2232:  Omit int when using unsigned  [runtime/unsigned] [1]
Total errors found: 48 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875062</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-04-12 17:12:03 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 197884 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=197884&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/DeprecatedStyleBuilder.cpp:2
&gt; &gt; + * Copyright (C) 2011 Google Inc. All rights reserved.
&gt; 
&gt; I think someone messed up with the copyright at some point.
&gt; Most of that code was moved, not authored by google.

That might be. I&apos;ll hold on on landing this patch. It seems like Antti and rniwa have some more ideas and I want to check that first. See bug 114508</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875194</commentid>
    <comment_count>6</comment_count>
      <attachid>197949</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-04-13 10:27:37 -0700</bug_when>
    <thetext>Created attachment 197949
Patch for landing.

Land patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875205</commentid>
    <comment_count>7</comment_count>
      <attachid>197949</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-13 10:58:56 -0700</bug_when>
    <thetext>Comment on attachment 197949
Patch for landing.

Clearing flags on attachment: 197949

Committed r148363: &lt;http://trac.webkit.org/changeset/148363&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875206</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-13 10:58:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197884</attachid>
            <date>2013-04-12 14:15:46 -0700</date>
            <delta_ts>2013-04-13 10:27:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114532-20130412141526.patch</filename>
            <type>text/plain</type>
            <size>344039</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ4Mjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2Q3MGVjMTg0OTBlYjk2
YzViOWFlNmVkZWNjODBlOWZiN2Y1OWRhNC4uN2M3ZGY3YjlmZjFlNTVjY2IzNmFmMjgyYTA0YzNl
MzJkYTY0MWNlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEzLTA0LTEyICBEaXJr
IFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVuYW1lIFN0eWxlQnVpbGRl
ciB0byBEZXByZWNhdGVkU3R5bGVCdWlsZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ1MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGUgU3R5bGVCdWlsZGVyIGNvZGUgaXMgaGFyZCB0byByZWFk
IGFuZCBtYWludGFpbi4gUGVvcGxlIHNvdWxkCisgICAgICAgIG5vdCBhZGQgbmV3IHByb3BlcnRp
ZXMgdG8gdGhpcyBjbGFzcy4gVG8gbWFrZSB0aGlzIGNsZWFyLCB0aGlzCisgICAgICAgIHBhdGNo
IHJlbmFtZXMgdGhlIGNsYXNzIHRvIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuCisKKyAgICAgICAg
UHVyZSByZWZhY3RvcmluZywgbm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3Mv
Q1NTQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGNzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwLgorICAg
ICAgICAqIGNzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmguCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisKIDIwMTMtMDQtMTIgIEFsYmVydG8gR2Fy
Y2lhICA8YWdhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBVcHN0cmVh
bSB0aGUgZmlsZXN5c3RlbSBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDU2MmI0NTZmOTFj
ZWE0Nzg3NDRhZTU5ZWE5NWQ0NzY4MjczMDhiMmYuLjFkNWUxZTUwMTBiMjM0NGRiN2JkYzI2MTdl
OTA5OGY0MTljYjNmNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDY0LDYgKzEwNjQsNyBA
QCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL0NTU1ZhbHVlTGlzdC5jcHAKICAgICBjc3Mv
Q1NTVmFsdWVQb29sLmNwcAogICAgIGNzcy9ET01XaW5kb3dDU1MuY3BwCisgICAgY3NzL0RlcHJl
Y2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCiAgICAgY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCiAgICAg
Y3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAogICAgIGNzcy9Gb250RmVhdHVyZVZhbHVlLmNw
cApAQCAtMTA5MCw3ICsxMDkxLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9TZWxl
Y3RvckNoZWNrZXJGYXN0UGF0aC5jcHAKICAgICBjc3MvU2VsZWN0b3JGaWx0ZXIuY3BwCiAgICAg
Y3NzL1NoYWRvd1ZhbHVlLmNwcAotICAgIGNzcy9TdHlsZUJ1aWxkZXIuY3BwCiAgICAgY3NzL1N0
eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCiAgICAgY3NzL1N0eWxlTWVkaWEuY3BwCiAgICAg
Y3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRl
eCA3MWM2MTJhYzhkY2QwNjI5OGY2M2ExNTA0NWVhMDUyNjkyNWE4YTc3Li40ZTE4NDM4NTA1OWRj
Y2IwYWNmMThiZDBhNjU1NTZkNDQ2MWM2N2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KQEAgLTI2NzcsNiArMjY3Nyw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvY3NzL0RPTVdpbmRvd0NTUy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9ET01XaW5k
b3dDU1MuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0Rhc2hib2FyZFJlZ2lvbi5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9E
b2N1bWVudFJ1bGVTZXRzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNl
dHMuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcCBcCkBA
IC0yNzI4LDggKzI3MzAsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L2Nzcy9TaGFkb3dWYWx1ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TaGFkb3dWYWx1ZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaCBcCi0J
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZUJ1aWxkZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFs
eXNpcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
aW5kZXggMjZiZWVkNGEwNDJjODFlMTExZmNmNTk5NGZlNjAzZDRiZmYwOTEzZS4uMTY4M2JiNzA5
ZGFjODQ4NzllNTE4MDI0NmI0MjM5MzdhZTRhNjI0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zMDYsNiAr
MzA2LDcgQEAgU09VUkNFUyArPSBcCiAgICAgY3NzL0NTU1ZhbHVlTGlzdC5jcHAgXAogICAgIGNz
cy9DU1NWYWx1ZVBvb2wuY3BwIFwKICAgICBjc3MvRE9NV2luZG93Q1NTLmNwcCBcCisgICAgY3Nz
L0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwIFwKICAgICBjc3MvRG9jdW1lbnRSdWxlU2V0cy5j
cHAgXAogICAgIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAgXAogICAgIGNzcy9Gb250RmVh
dHVyZVZhbHVlLmNwcCBcCkBAIC0zMzAsNyArMzMxLDYgQEAgU09VUkNFUyArPSBcCiAgICAgY3Nz
L1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmNwcCBcCiAgICAgY3NzL1NlbGVjdG9yRmlsdGVyLmNw
cCBcCiAgICAgY3NzL1NoYWRvd1ZhbHVlLmNwcCBcCi0gICAgY3NzL1N0eWxlQnVpbGRlci5jcHAg
XAogICAgIGNzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCBcCiAgICAgY3NzL1N0eWxl
TWVkaWEuY3BwIFwKICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAgXApAQCAtMTU1NCw2ICsx
NTU0LDcgQEAgSEVBREVSUyArPSBcCiAgICAgY3NzL0NTU1ZhbHVlTGlzdC5oIFwKICAgICBjc3Mv
Q1NTVmFsdWVQb29sLmggXAogICAgIGNzcy9DU1NWYXJpYWJsZVZhbHVlLmggXAorICAgIGNzcy9E
ZXByZWNhdGVkU3R5bGVCdWlsZGVyLmggXAogICAgIGNzcy9ET01XaW5kb3dDU1MuaCBcCiAgICAg
Y3NzL0ZvbnRGZWF0dXJlVmFsdWUuaCBcCiAgICAgY3NzL0ZvbnRMb2FkZXIuaCBcCkBAIC0xNTcy
LDcgKzE1NzMsNiBAQCBIRUFERVJTICs9IFwKICAgICBjc3MvU2hhZG93VmFsdWUuaCBcCiAgICAg
Y3NzL1NpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVzLmggXAogICAgIGNzcy9TdHlsZU1lZGlhLmgg
XAotICAgIGNzcy9TdHlsZUJ1aWxkZXIuaCBcCiAgICAgY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5h
bHlzaXMuaCBcCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTZXQuaCBcCiAgICAgY3NzL1N0eWxlUHJv
cGVydHlTaG9ydGhhbmQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCmluZGV4IGVkYTFmNjBjMzA1NTAwYjc5NGM1ZGQxMzRhNjAyMzlhZDZmNTQ0NWQu
LjRhZDVlZTRkNzlmY2E3NzNmMjgxMTkwNzYxNTk0YjY2NmI3ZmRhOGEgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0zODMxOSw2ICszODMxOSw2
MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxj
c3NcRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
KwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJ
CS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJ
CQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xEZXByZWNhdGVkU3R5bGVCdWls
ZGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGNzc1xGb250RmVhdHVyZVZhbHVlLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0zODY0Nyw2
MiArMzg3MDMsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxjc3NcU3R5bGVCdWlsZGVyLmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0
aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJ
CQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgot
CQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
LQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJ
Lz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJ
CQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0
aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCi0JCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVD
b25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFN0eWxlQnVpbGRlci5oIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcU3R5bGVJ
bnZhbGlkYXRpb25BbmFseXNpcy5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCmlu
ZGV4IDVjNzBmODE2NDVmMTZiNTg0YWQwMjgwODZjNTEwNDdkNDdjN2M1MjkuLjFlNmE1Nzk1Y2Ey
YzlhMzAzZWYwNWQ1MTlkNzAxNmVjZWZkZWY5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTM2OTMsNiAr
MzY5Myw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjc3NcQ1NTVmFsdWVQb29sLmNw
cCI+CiAgICAgICA8RmlsdGVyPmNzczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cY3NzXERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwIj4KKyAg
ICAgIDxGaWx0ZXI+Y3NzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxjc3NcRm9udEZlYXR1cmVWYWx1ZS5jcHAiPgogICAgICAgPEZpbHRlcj5j
c3M8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTM3NDQsOSArMzc0Nyw2IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjc3NcU2hhZG93VmFsdWUuY3BwIj4KICAgICAgIDxGaWx0
ZXI+Y3NzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxjc3NcU3R5bGVCdWlsZGVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPmNzczwvRmlsdGVyPgot
ICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cY3NzXFN0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXMuY3BwIj4KICAgICAgIDxGaWx0ZXI+Y3NzPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+CkBAIC0xMDQ3OSw2ICsxMDQ3OSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxjc3NcRGFzaGJvYXJkUmVnaW9uLmgiPgogICAgICAgPEZpbHRlcj5jc3M8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xEZXBy
ZWNhdGVkU3R5bGVCdWlsZGVyLmgiPgorICAgICAgPEZpbHRlcj5jc3M8L0ZpbHRlcj4KKyAgICA8
L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xGb250RmVhdHVyZVZh
bHVlLmgiPgogICAgICAgPEZpbHRlcj5jc3M8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAg
LTEwNTM2LDkgKzEwNTM5LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xTaWJs
aW5nVHJhdmVyc2FsU3RyYXRlZ2llcy5oIj4KICAgICAgIDxGaWx0ZXI+Y3NzPC9GaWx0ZXI+CiAg
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjc3NcU3R5bGVCdWls
ZGVyLmgiPgotICAgICAgPEZpbHRlcj5jc3M8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgi
PgogICAgICAgPEZpbHRlcj5jc3M8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3MDQ4
OTYyMzFlNDc5NTlkM2MzMDQxY2EzOGYxZDIxMmI2YjgwYzkwLi40YWMxMmU2N2I4NmZmNzgyY2Fm
MWFjNjMwZDU3YmM4OWY2OGI4NDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MzUwLDggKzUzNTAsOCBAQAogCQlFMEZFRjM3
MkIyN0M1M0VBQzFDMUZCRUUgLyogRXZlbnRTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTBGRUYzNzFCMjdDNTNFQUMxQzFGQkVFIC8qIEV2
ZW50U291cmNlLmNwcCAqLzsgfTsKIAkJRTBGRUYzNzJCMzdDNTNFQUMxQzFGQkVFIC8qIEpTRXZl
bnRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUwRkVGMzcxQjM3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlLmggKi87IH07CiAJCUUw
RkVGMzcyQjQ3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUwRkVGMzcxQjQ3QzUzRUFDMUMxRkJF
RSAvKiBKU0V2ZW50U291cmNlLmNwcCAqLzsgfTsKLQkJRTEwMEVFNzUxNTQ2RUFDMTAwQkExMUQx
IC8qIFN0eWxlQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTAwRUU3MzE1NDZFQUMxMDBCQTExRDEgLyogU3R5bGVCdWlsZGVyLmNwcCAq
LzsgfTsKLQkJRTEwMEVFNzYxNTQ2RUFDMTAwQkExMUQxIC8qIFN0eWxlQnVpbGRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEwMEVFNzQxNTQ2RUFD
MTAwQkExMUQxIC8qIFN0eWxlQnVpbGRlci5oICovOyB9OworCQlFMTAwRUU3NTE1NDZFQUMxMDBC
QTExRDEgLyogRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTAwRUU3MzE1NDZFQUMxMDBCQTExRDEgLyogRGVw
cmVjYXRlZFN0eWxlQnVpbGRlci5jcHAgKi87IH07CisJCUUxMDBFRTc2MTU0NkVBQzEwMEJBMTFE
MSAvKiBEZXByZWNhdGVkU3R5bGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMTAwRUU3NDE1NDZFQUMxMDBCQTExRDEgLyogRGVwcmVjYXRl
ZFN0eWxlQnVpbGRlci5oICovOyB9OwogCQlFMTA3NDAwRDBFNzdCREMwMDAzM0FGMjQgLyogSlNN
ZXNzYWdlQ2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTA3NDAwQjBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5jcHAg
Ki87IH07CiAJCUUxMDc0MDBFMEU3N0JEQzAwMDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA3NDAwQzBF
NzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5oICovOyB9OwogCQlFMTBCOTM3QzBC
NzNDMDBBMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMEI5MzdCMEI3M0MwMEEwMDNFRDg5
MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oICovOyB9OwpAQCAtMTIxMjYsOCArMTIxMjYs
OCBAQAogCQlFMEZFRjM3MUIyN0M1M0VBQzFDMUZCRUUgLyogRXZlbnRTb3VyY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRTb3VyY2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMEZFRjM3MUIzN0M1M0VBQzFDMUZCRUUgLyogSlNFdmVu
dFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V2ZW50U291cmNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUwRkVGMzcxQjQ3QzUzRUFDMUMxRkJF
RSAvKiBKU0V2ZW50U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTRXZlbnRTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTAw
RUU3MzE1NDZFQUMxMDBCQTExRDEgLyogU3R5bGVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUUxMDBFRTc0MTU0NkVBQzEwMEJBMTFEMSAvKiBTdHlsZUJ1aWxkZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVCdWlsZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMDBFRTczMTU0NkVBQzEwMEJBMTFEMSAvKiBEZXByZWNh
dGVkU3R5bGVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFMTAwRUU3NDE1NDZFQUMxMDBCQTExRDEgLyogRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXByZWNhdGVkU3R5bGVCdWlsZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMDc0MDBCMEU3N0JEQzAwMDMzQUYyNCAv
KiBKU01lc3NhZ2VDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTTWVzc2FnZUNoYW5uZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MTA3NDAwQzBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU01lc3NhZ2VDaGFubmVsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUxMEI5MzdCMEI3M0MwMEEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQYXRo
TlNSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk3NzAsNiAr
MTk3NzAsOCBAQAogCQkJCUU0OUJEOUY5MTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NWYWx1ZVBvb2wu
aCAqLywKIAkJCQlDQUU5RjkwRTE0NjQ0MUYwMDBDMjQ1QjEgLyogQ1NTVmFyaWFibGVWYWx1ZS5o
ICovLAogCQkJCUE4MEU2Q0UxMEExOTg5Q0EwMDdGQjhDNSAvKiBEYXNoYm9hcmRSZWdpb24uaCAq
LywKKwkJCQlFMTAwRUU3MzE1NDZFQUMxMDBCQTExRDEgLyogRGVwcmVjYXRlZFN0eWxlQnVpbGRl
ci5jcHAgKi8sCisJCQkJRTEwMEVFNzQxNTQ2RUFDMTAwQkExMUQxIC8qIERlcHJlY2F0ZWRTdHls
ZUJ1aWxkZXIuaCAqLywKIAkJCQk0QTRGNDhBNzE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRS
dWxlU2V0cy5jcHAgKi8sCiAJCQkJNEE0RjQ4QTgxNkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50
UnVsZVNldHMuaCAqLywKIAkJCQlGQzlBMEY3MjE2NDA5NENGMDAzRDZCOEQgLyogRE9NV2luZG93
Q1NTLmggKi8sCkBAIC0xOTgzOSw4ICsxOTg0MSw2IEBACiAJCQkJQTgwRTZDQ0EwQTE5ODlDQTAw
N0ZCOEM1IC8qIFNoYWRvd1ZhbHVlLmNwcCAqLywKIAkJCQlBODBFNkNCRTBBMTk4OUNBMDA3RkI4
QzUgLyogU2hhZG93VmFsdWUuaCAqLywKIAkJCQk1NzI4QkQ5RDE2MjUzNjk2MDBDNDBCNTYgLyog
U2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaCAqLywKLQkJCQlFMTAwRUU3MzE1NDZFQUMxMDBC
QTExRDEgLyogU3R5bGVCdWlsZGVyLmNwcCAqLywKLQkJCQlFMTAwRUU3NDE1NDZFQUMxMDBCQTEx
RDEgLyogU3R5bGVCdWlsZGVyLmggKi8sCiAJCQkJRTQ3QTk3Q0UxNjMwNTlGQzAwNURDRDk5IC8q
IFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwICovLAogCQkJCUU0N0E5N0NGMTYzMDU5RkMw
MDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmggKi8sCiAJCQkJMEZGNTAyNkUx
MDJCQTk2NjAwNjZGMzlBIC8qIFN0eWxlTWVkaWEuY3BwICovLApAQCAtMjM0ODIsNyArMjM0ODIs
NyBAQAogCQkJCTg0OUY3Nzc2MEVGRUM2MjAwMDkwODQ5RCAvKiBTdHJva2VTdHlsZUFwcGxpZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNkEzMEU4MURDNEYwMEIyNTk2NSAvKiBTdHlsZUJh
Y2tncm91bmREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjY3QjBFODFEM0JFMDBCMjU5
NjUgLyogU3R5bGVCb3hEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQlFMTAwRUU3NjE1NDZFQUMx
MDBCQTExRDEgLyogU3R5bGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTAwRUU3NjE1
NDZFQUMxMDBCQTExRDEgLyogRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNFRjQ0NEQwRTY3NDYyODAwMUMxMjg3IC8qIFN0eWxlQ2FjaGVkSW1hZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzOTNFNjA1MTUxQTlBMTgwMDA2NkYwNiAvKiBTdHlsZUNhY2hlZElt
YWdlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MDM4QkUzMDE0NzJBRDIzMDA5NUUwRDEgLyog
U3R5bGVDYWNoZWRTaGFkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjY1MzksNyArMjY1MzksNyBA
QAogCQkJCUIyMzU0MEYyMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI2QTIwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dy
b3VuZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI2N0QwRTgxRDQyMDAwQjI1OTY1
IC8qIFN0eWxlQm94RGF0YS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMTAwRUU3NTE1NDZFQUMx
MDBCQTExRDEgLyogU3R5bGVCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxMDBFRTc1
MTU0NkVBQzEwMEJBMTFEMSAvKiBEZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDRUY0NDdBMEU2NzQ3RDAwMDFDMTI4NyAvKiBTdHlsZUNhY2hlZEltYWdlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTNFNjA0MTUxQTlBMTgwMDA2NkYwNiAvKiBTdHlsZUNh
Y2hlZEltYWdlU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwMzhCRTJGMTQ3MkFEMjMwMDk1
RTBEMSAvKiBTdHlsZUNhY2hlZFNoYWRlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQWxsSW5PbmUuY3BwCmluZGV4IDc4ZTc1MjAyOTA4Yzc0OGFlMDkzYjdkN2E2YTg4ODU4NDkw
OThlNjAuLjAyMmEzNDkyZGI2MGZmMjBkNTNmYzVlOTdiNjkxMWY4OWYwYjg3Y2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0FsbEluT25lLmNwcApAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUgIkNTU1Zh
bHVlTGlzdC5jcHAiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmNwcCIKICNpbmNsdWRlICJET01X
aW5kb3dDU1MuY3BwIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwIgogI2lu
Y2x1ZGUgIkRvY3VtZW50UnVsZVNldHMuY3BwIgogI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVj
dG9yLmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNwcCIKQEAgLTc4LDcg
Kzc5LDYgQEAKICNpbmNsdWRlICJSdWxlU2V0LmNwcCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNr
ZXJGYXN0UGF0aC5jcHAiCiAjaW5jbHVkZSAiU2VsZWN0b3JGaWx0ZXIuY3BwIgotI2luY2x1ZGUg
IlN0eWxlQnVpbGRlci5jcHAiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5jcHAiCiAjaW5j
bHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVp
bGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjdiYmJiZGVmNDc1Y2QwMjMxNDkxYjFkMDBiMDAzMzU4MGY2OWMwNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVy
LmNwcApAQCAtMCwwICsxLDIzNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3R5bGVCdWlsZGVyLmgiCisKKyNpbmNsdWRlICJCYXNp
Y1NoYXBlRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiQmFzaWNTaGFwZXMuaCIKKyNpbmNsdWRlICJD
U1NBc3BlY3RSYXRpb1ZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgor
I2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVW
YWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgorI2luY2x1ZGUgIkNT
U1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIkNsaXBQYXRoT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAi
Q3Vyc29yTGlzdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5o
IgorI2luY2x1ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5o
PgorCisjaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQorI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBl
VmFsdWUuaCIKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2VudW0gRXhwYW5kVmFsdWVCZWhhdmlvciB7U3VwcHJlc3NWYWx1ZSA9IDAsIEV4
cGFuZFZhbHVlfTsKK3RlbXBsYXRlIDxFeHBhbmRWYWx1ZUJlaGF2aW9yIGV4cGFuZFZhbHVlLCBD
U1NQcm9wZXJ0eUlEIG9uZSA9IENTU1Byb3BlcnR5SW52YWxpZCwgQ1NTUHJvcGVydHlJRCB0d28g
PSBDU1NQcm9wZXJ0eUludmFsaWQsIENTU1Byb3BlcnR5SUQgdGhyZWUgPSBDU1NQcm9wZXJ0eUlu
dmFsaWQsIENTU1Byb3BlcnR5SUQgZm91ciA9IENTU1Byb3BlcnR5SW52YWxpZCwgQ1NTUHJvcGVy
dHlJRCBmaXZlID0gQ1NTUHJvcGVydHlJbnZhbGlkPgorY2xhc3MgQXBwbHlQcm9wZXJ0eUV4cGFu
ZGluZyB7CitwdWJsaWM6CisKKyAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZD4KKyAgICBz
dGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgaWYgKGlk
ID09IENTU1Byb3BlcnR5SW52YWxpZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBj
b25zdCBEZXByZWNhdGVkU3R5bGVCdWlsZGVyJiB0YWJsZSA9IERlcHJlY2F0ZWRTdHlsZUJ1aWxk
ZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpOworICAgICAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXIm
IGhhbmRsZXIgPSB0YWJsZS5wcm9wZXJ0eUhhbmRsZXIoaWQpOworICAgICAgICBpZiAoaGFuZGxl
ci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlcikKKyAgICB7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPG9uZT4ocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHR3bz4ocHJvcGVy
dHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHRocmVlPihw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zm91
cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVl
PGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgIH0KKworICAgIHRlbXBsYXRl
IDxDU1NQcm9wZXJ0eUlEIGlkPgorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUluaXRpYWxW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCisgICAgeworICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0IERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXImIHRh
YmxlID0gRGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7CisgICAg
ICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3BlcnR5SGFuZGxl
cihpZCk7CisgICAgICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGhhbmRs
ZXIuYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgYXBwbHlJ
bml0aWFsVmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBw
bHlJbml0aWFsVmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAg
YXBwbHlJbml0aWFsVmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAg
ICAgICBhcHBseUluaXRpYWxWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsK
KyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZl
cik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+CisgICAgc3RhdGlj
IGlubGluZSB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNvbnN0IERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXImIHRhYmxlID0gRGVwcmVjYXRlZFN0eWxl
QnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7CisgICAgICAgIGNvbnN0IFByb3BlcnR5SGFu
ZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3BlcnR5SGFuZGxlcihpZCk7CisgICAgICAgIGlmICho
YW5kbGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShwcm9wZXJ0
eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghZXhwYW5kVmFsdWUp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXBwbHlWYWx1ZTxvbmU+KHByb3BlcnR5
SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZTx0d28+KHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZTx0aHJlZT4o
cHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICBhcHBseVZhbHVlPGZv
dXI+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1
ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgfQorICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFu
ZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUp
OyB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgR2V0dGVyVHlwZSwgR2V0dGVyVHlwZSAoUmVu
ZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdHlwZW5hbWUgU2V0dGVyVHlwZSwg
dm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoU2V0dGVyVHlwZSksIHR5cGVuYW1l
IEluaXRpYWxUeXBlLCBJbml0aWFsVHlwZSAoKmluaXRpYWxGdW5jdGlvbikoKT4KK2NsYXNzIEFw
cGx5UHJvcGVydHlEZWZhdWx0QmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgc2V0VmFs
dWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNldHRl
ckZ1bmN0aW9uKSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgR2V0dGVyVHlwZSB2YWx1ZShSZW5kZXJT
dHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmdldHRlckZ1bmN0aW9uKSgpOyB9CisgICAg
c3RhdGljIEluaXRpYWxUeXBlIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRpYWxGdW5jdGlvbiko
KTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgdmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOyB9CisgICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikgeyBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbml0aWFsKCkp
OyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiwgQ1NTVmFsdWUqKSB7IH0KKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhh
bmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBw
bHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1l
IEdldHRlclR5cGUsIEdldHRlclR5cGUgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkg
Y29uc3QsIHR5cGVuYW1lIFNldHRlclR5cGUsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVu
Y3Rpb24pKFNldHRlclR5cGUpLCB0eXBlbmFtZSBJbml0aWFsVHlwZSwgSW5pdGlhbFR5cGUgKCpp
bml0aWFsRnVuY3Rpb24pKCk+CitjbGFzcyBBcHBseVByb3BlcnR5RGVmYXVsdCB7CitwdWJsaWM6
CisgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBl
IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
KnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpKTsKKyAgICB9CisgICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIFByb3Bl
cnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEdldHRlclR5cGUs
IGdldHRlckZ1bmN0aW9uLCBTZXR0ZXJUeXBlLCBzZXR0ZXJGdW5jdGlvbiwgSW5pdGlhbFR5cGUs
IGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3Bl
cnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5j
dGlvbigpLCAmYXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIE51
bWJlclR5cGUsIE51bWJlclR5cGUgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKE51bWJlclR5cGUpLCBOdW1i
ZXJUeXBlICgqaW5pdGlhbEZ1bmN0aW9uKSgpLCBpbnQgaWRNYXBzVG9NaW51c09uZSA9IENTU1Zh
bHVlQXV0bz4KK2NsYXNzIEFwcGx5UHJvcGVydHlOdW1iZXIgeworcHVibGljOgorICAgIHN0YXRp
YyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTnVtYmVyVHlwZSB2YWx1ZSkgeyAo
c3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBpZE1hcHNUb01pbnVzT25lKQor
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgLTEpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmlt
aXRpdmVWYWx1ZS0+Z2V0VmFsdWU8TnVtYmVyVHlwZT4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpKTsKKyAgICB9CisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0
eURlZmF1bHRCYXNlPE51bWJlclR5cGUsIGdldHRlckZ1bmN0aW9uLCBOdW1iZXJUeXBlLCBzZXR0
ZXJGdW5jdGlvbiwgTnVtYmVyVHlwZSwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigp
OworICAgICAgICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9u
KCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZSA8U3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxGdW5jdGlvbikoKSwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eT4KK2NsYXNzIEFwcGx5UHJvcGVydHlTdHlsZUltYWdlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1
ZSkpOyB9CisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7
CisgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRC
YXNlPFN0eWxlSW1hZ2UqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiwg
c2V0dGVyRnVuY3Rpb24sIFN0eWxlSW1hZ2UqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5k
bGVyKCk7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVu
Y3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOworICAgIH0K
K307CisKK2VudW0gQXV0b1ZhbHVlVHlwZSB7TnVtYmVyID0gMCwgQ29tcHV0ZUxlbmd0aH07Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBj
b25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoVCksIGJvb2wgKFJlbmRl
clN0eWxlOjoqaGFzQXV0b0Z1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dEF1dG9GdW5jdGlvbikoKSwgQXV0b1ZhbHVlVHlwZSB2YWx1ZVR5cGUgPSBOdW1iZXIsIGludCBh
dXRvSWRlbnRpdHkgPSBDU1NWYWx1ZUF1dG8+CitjbGFzcyBBcHBseVByb3BlcnR5QXV0byB7Citw
dWJsaWM6CisgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBUIHZh
bHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgVCB2
YWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmdldHRlckZ1bmN0aW9u
KSgpOyB9CisgICAgc3RhdGljIGJvb2wgaGFzQXV0byhSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0
dXJuIChzdHlsZS0+Kmhhc0F1dG9GdW5jdGlvbikoKTsgfQorICAgIHN0YXRpYyB2b2lkIHNldEF1
dG8oUmVuZGVyU3R5bGUqIHN0eWxlKSB7IChzdHlsZS0+KnNldEF1dG9GdW5jdGlvbikoKTsgfQor
CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIGlmIChoYXNBdXRvKHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKQorICAgICAgICAgICAgc2V0QXV0byhzdHlsZVJlc29s
dmVyLT5zdHlsZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgdmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0QXV0byhzdHlsZVJlc29sdmVyLT5z
dHlsZSgpKTsgfQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBhdXRvSWRlbnRpdHkpCisgICAgICAgICAgICBzZXRBdXRvKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gTnVtYmVy
KQorICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnByaW1pdGl2
ZVZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVUeXBlID09IENvbXB1dGVMZW5ndGgpCisg
ICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1
ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVy
LT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSkpOworICAgIH0KKworICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUlu
aXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9Cit9OworCitjbGFzcyBBcHBseVByb3BlcnR5Q2xp
cCB7Citwcml2YXRlOgorICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNp
b24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IEF1dG9Db252ZXJz
aW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgfQor
cHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCk7
CisgICAgICAgIGlmICghcGFyZW50U3R5bGUtPmhhc0NsaXAoKSkKKyAgICAgICAgICAgIHJldHVy
biBhcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcChwYXJlbnRTdHlsZS0+Y2xpcFRvcCgpLCBw
YXJlbnRTdHlsZS0+Y2xpcFJpZ2h0KCksIHBhcmVudFN0eWxlLT5jbGlwQm90dG9tKCksIHBhcmVu
dFN0eWxlLT5jbGlwTGVmdCgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
SGFzQ2xpcCh0cnVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCks
IExlbmd0aCgpLCBMZW5ndGgoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEhhc0NsaXAoZmFsc2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworCisgICAgICAgIGlm
IChSZWN0KiByZWN0ID0gcHJpbWl0aXZlVmFsdWUtPmdldFJlY3RWYWx1ZSgpKSB7CisgICAgICAg
ICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPnRv
cCgpKTsKKyAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJl
c29sdmVyLCByZWN0LT5yaWdodCgpKTsKKyAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252
ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+Ym90dG9tKCkpOworICAgICAgICAgICAg
TGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+bGVmdCgp
KTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAodG9wLCByaWdo
dCwgYm90dG9tLCBsZWZ0KTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEhhc0NsaXAodHJ1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVBdXRvKSB7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKKyAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOworICAg
ICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5p
dGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KK307CisKK2VudW0gQ29sb3JJbmhlcml0IHtOb0lu
aGVyaXRGcm9tUGFyZW50ID0gMCwgSW5oZXJpdEZyb21QYXJlbnR9OworQ29sb3IgZGVmYXVsdElu
aXRpYWxDb2xvcigpOworQ29sb3IgZGVmYXVsdEluaXRpYWxDb2xvcigpIHsgcmV0dXJuIENvbG9y
KCk7IH0KK3RlbXBsYXRlIDxDb2xvckluaGVyaXQgaW5oZXJpdENvbG9yRnJvbVBhcmVudCwKKyAg
ICAgICAgICBDb2xvciAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwKKyAg
ICAgICAgICB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShjb25zdCBDb2xvciYp
LAorICAgICAgICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlv
bikoY29uc3QgQ29sb3ImKSwKKyAgICAgICAgICBDb2xvciAoUmVuZGVyU3R5bGU6OipkZWZhdWx0
RnVuY3Rpb24pKCkgY29uc3QsCisgICAgICAgICAgQ29sb3IgKCppbml0aWFsRnVuY3Rpb24pKCkg
PSAmZGVmYXVsdEluaXRpYWxDb2xvcj4KK2NsYXNzIEFwcGx5UHJvcGVydHlDb2xvciB7CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIC8vIFZpc2l0ZWQgbGlu
ayBzdHlsZSBjYW4gbmV2ZXIgZXhwbGljaXRseSBpbmhlcml0IGZyb20gcGFyZW50IHZpc2l0ZWQg
bGluayBzdHlsZSBzbyBubyBzZXBhcmF0ZSBnZXR0ZXJzIGFyZSBuZWVkZWQuCisgICAgICAgIENv
bG9yIGNvbG9yID0gKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipnZXR0ZXJGdW5jdGlv
bikoKTsKKyAgICAgICAgYXBwbHlDb2xvclZhbHVlKHN0eWxlUmVzb2x2ZXIsIGNvbG9yLmlzVmFs
aWQoKSA/IGNvbG9yIDogKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipkZWZhdWx0RnVu
Y3Rpb24pKCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAgICAg
ICBhcHBseUNvbG9yVmFsdWUoc3R5bGVSZXNvbHZlciwgaW5pdGlhbEZ1bmN0aW9uKCkpOworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIGlmIChpbmhlcml0Q29s
b3JGcm9tUGFyZW50ICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ3Vy
cmVudGNvbG9yKQorICAgICAgICAgICAgYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2
ZXItPmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIChzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKSk7CisgICAgICAgICAgICBpZiAoc3R5
bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQorICAgICAgICAg
ICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlv
bikoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUs
IC8qIGZvclZpc2l0ZWRMaW5rICovIHRydWUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIGFwcGx5Q29sb3JWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBj
b25zdCBDb2xvciYgY29sb3IpCisgICAgeworICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+YXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCisgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShjb2xvcik7CisgICAgICAgIGlmIChzdHlsZVJlc29s
dmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCisgICAgICAgICAgICAoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKGNvbG9yKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJl
dHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFs
dWUsICZhcHBseVZhbHVlKTsgfQorfTsKKwordGVtcGxhdGUgPFRleHREaXJlY3Rpb24gKFJlbmRl
clN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0
dGVyRnVuY3Rpb24pKFRleHREaXJlY3Rpb24pLCBUZXh0RGlyZWN0aW9uICgqaW5pdGlhbEZ1bmN0
aW9uKSgpPgorY2xhc3MgQXBwbHlQcm9wZXJ0eURpcmVjdGlvbiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFwcGx5
UHJvcGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24sIGdldHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0
aW9uLCBzZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgaW5pdGlhbEZ1bmN0aW9uPjo6YXBw
bHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBzdHlsZVJlc29sdmVyLT5lbGVtZW50KCk7CisgICAgICAgIGlmIChlbGVt
ZW50ICYmIHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnNldERp
cmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOworICAgIH0KKworICAgIHN0YXRpYyBQ
cm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCisgICAgeworICAgICAgICBQcm9wZXJ0eUhh
bmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24sIGdldHRl
ckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9uLCBzZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwg
aW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOworICAgICAgICByZXR1cm4gUHJvcGVy
dHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0
aW9uKCksICZhcHBseVZhbHVlKTsKKyAgICB9Cit9OworCitlbnVtIExlbmd0aEF1dG8geyBBdXRv
RGlzYWJsZWQgPSAwLCBBdXRvRW5hYmxlZCB9OworZW51bSBMZW5ndGhMZWdhY3lJbnRyaW5zaWMg
eyBMZWdhY3lJbnRyaW5zaWNEaXNhYmxlZCA9IDAsIExlZ2FjeUludHJpbnNpY0VuYWJsZWQgfTsK
K2VudW0gTGVuZ3RoSW50cmluc2ljIHsgSW50cmluc2ljRGlzYWJsZWQgPSAwLCBJbnRyaW5zaWNF
bmFibGVkIH07CitlbnVtIExlbmd0aE5vbmUgeyBOb25lRGlzYWJsZWQgPSAwLCBOb25lRW5hYmxl
ZCB9OworZW51bSBMZW5ndGhVbmRlZmluZWQgeyBVbmRlZmluZWREaXNhYmxlZCA9IDAsIFVuZGVm
aW5lZEVuYWJsZWQgfTsKK3RlbXBsYXRlIDxMZW5ndGggKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVu
Y3Rpb24pKCkgY29uc3QsCisgICAgICAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5j
dGlvbikoTGVuZ3RoKSwKKyAgICAgICAgICBMZW5ndGggKCppbml0aWFsRnVuY3Rpb24pKCksCisg
ICAgICAgICAgTGVuZ3RoQXV0byBhdXRvRW5hYmxlZCA9IEF1dG9EaXNhYmxlZCwKKyAgICAgICAg
ICBMZW5ndGhMZWdhY3lJbnRyaW5zaWMgbGVnYWN5SW50cmluc2ljRW5hYmxlZCA9IExlZ2FjeUlu
dHJpbnNpY0Rpc2FibGVkLAorICAgICAgICAgIExlbmd0aEludHJpbnNpYyBpbnRyaW5zaWNFbmFi
bGVkID0gSW50cmluc2ljRGlzYWJsZWQsCisgICAgICAgICAgTGVuZ3RoTm9uZSBub25lRW5hYmxl
ZCA9IE5vbmVEaXNhYmxlZCwKKyAgICAgICAgICBMZW5ndGhVbmRlZmluZWQgbm9uZVVuZGVmaW5l
ZCA9IFVuZGVmaW5lZERpc2FibGVkPgorY2xhc3MgQXBwbHlQcm9wZXJ0eUxlbmd0aCB7CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBMZW5ndGgg
dmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpOworICAgICAgICBpZiAobm9uZUVuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAgICAgICAgICBpZiAobm9uZVVuZGVmaW5lZCkKKyAg
ICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoVW5k
ZWZpbmVkKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChs
ZWdhY3lJbnRyaW5zaWNFbmFibGVkKSB7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpCisgICAgICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEludHJpbnNpYykpOworICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVNaW5JbnRy
aW5zaWMpCisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
TGVuZ3RoKE1pbkludHJpbnNpYykpOworICAgICAgICB9CisgICAgICAgIGlmIChpbnRyaW5zaWNF
bmFibGVkKSB7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVXZWJraXRNaW5Db250ZW50KQorICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5Db250ZW50KSk7CisgICAgICAgICAgICBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRl
bnQpCisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVu
Z3RoKE1heENvbnRlbnQpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlV2Via2l0RmlsbEF2YWlsYWJsZSkKKyAgICAgICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkp
OworICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVXZWJraXRGaXRDb250ZW50KQorICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIExlbmd0aChGaXRDb250ZW50KSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoYXV0b0VuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVBdXRvKQorICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVu
Z3RoKCkpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewor
ICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3Ro
PExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAg
ICAgICAgICAgbGVuZ3RoLnNldFF1aXJrKHByaW1pdGl2ZVZhbHVlLT5pc1F1aXJrVmFsdWUoKSk7
CisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBsZW5ndGgpOwor
ICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCkpOworICAgICAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKKyAgICAgICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1
ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0
eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpKSkpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNW
aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgo
KSk7CisgICAgfQorCisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
KyAgICB7CisgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURl
ZmF1bHRCYXNlPExlbmd0aCwgZ2V0dGVyRnVuY3Rpb24sIExlbmd0aCwgc2V0dGVyRnVuY3Rpb24s
IExlbmd0aCwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOworICAgICAgICByZXR1
cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5p
dGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKKyAgICB9Cit9OworCitlbnVtIFN0cmluZ0lk
ZW50QmVoYXZpb3IgeyBOb3RoaW5nTWFwc1RvTnVsbCA9IDAsIE1hcE5vbmVUb051bGwsIE1hcEF1
dG9Ub051bGwgfTsKK3RlbXBsYXRlIDxTdHJpbmdJZGVudEJlaGF2aW9yIGlkZW50QmVoYXZpb3Is
IGNvbnN0IEF0b21pY1N0cmluZyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKGNvbnN0IEF0b21pY1N0cmlu
ZyYpLCBjb25zdCBBdG9taWNTdHJpbmcmICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgorY2xhc3MgQXBw
bHlQcm9wZXJ0eVN0cmluZyB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IChzdHlsZS0+KnNl
dHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIGlmICgoaWRl
bnRCZWhhdmlvciA9PSBNYXBOb25lVG9OdWxsICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIHx8IChpZGVudEJlaGF2aW9yID09IE1hcEF1
dG9Ub051bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKSkK
KyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIG51bGxBdG9tKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgIH0KKyAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlI
YW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8Y29uc3QgQXRvbWljU3Ry
aW5nJiwgZ2V0dGVyRnVuY3Rpb24sIGNvbnN0IEF0b21pY1N0cmluZyYsIHNldHRlckZ1bmN0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7
CisgICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rpb24o
KSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlIDxMZW5ndGhTaXplIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShMZW5ndGhTaXplKSwgTGVu
Z3RoU2l6ZSAoKmluaXRpYWxGdW5jdGlvbikoKT4KK2NsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJS
YWRpdXMgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBz
dHlsZSwgTGVuZ3RoU2l6ZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUp
OyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIFBhaXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1
ZS0+Z2V0UGFpclZhbHVlKCk7CisgICAgICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8
fCAhcGFpci0+c2Vjb25kKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTGVuZ3Ro
IHJhZGl1c1dpZHRoOworICAgICAgICBMZW5ndGggcmFkaXVzSGVpZ2h0OworICAgICAgICBpZiAo
cGFpci0+Zmlyc3QoKS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgICAgICByYWRpdXNXaWR0aCA9
IExlbmd0aChwYWlyLT5maXJzdCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICAg
ICAgZWxzZSBpZiAocGFpci0+Zmlyc3QoKS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkK
KyAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+dmlld3BvcnRQZXJjZW50
YWdlTGVuZ3RoKCk7CisgICAgICAgIGVsc2UgaWYgKHBhaXItPmZpcnN0KCktPmlzQ2FsY3VsYXRl
ZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCisgICAgICAgICAgICByYWRpdXNXaWR0aCA9IExlbmd0
aCgocGFpci0+Zmlyc3QoKS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByYWRpdXNXaWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCks
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIGlmIChw
YWlyLT5zZWNvbmQoKS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgICAgICByYWRpdXNIZWlnaHQg
PSBMZW5ndGgocGFpci0+c2Vjb25kKCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOworICAg
ICAgICBlbHNlIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgo
KSkKKyAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT52aWV3cG9ydFBl
cmNlbnRhZ2VMZW5ndGgoKTsKKyAgICAgICAgZWxzZSBpZiAocGFpci0+c2Vjb25kKCktPmlzQ2Fs
Y3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCisgICAgICAgICAgICByYWRpdXNIZWlnaHQg
PSBMZW5ndGgoKHBhaXItPnNlY29uZCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT5jb21wdXRlTGVuZ3Ro
PExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAg
ICAgICBpbnQgd2lkdGggPSByYWRpdXNXaWR0aC52YWx1ZSgpOworICAgICAgICBpbnQgaGVpZ2h0
ID0gcmFkaXVzSGVpZ2h0LnZhbHVlKCk7CisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0
IDwgMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCF3aWR0aCkKKyAgICAgICAg
ICAgIHJhZGl1c0hlaWdodCA9IHJhZGl1c1dpZHRoOyAvLyBOdWxsIG91dCB0aGUgb3RoZXIgdmFs
dWUuCisgICAgICAgIGVsc2UgaWYgKCFoZWlnaHQpCisgICAgICAgICAgICByYWRpdXNXaWR0aCA9
IHJhZGl1c0hlaWdodDsgLy8gTnVsbCBvdXQgdGhlIG90aGVyIHZhbHVlLgorCisgICAgICAgIExl
bmd0aFNpemUgc2l6ZShyYWRpdXNXaWR0aCwgcmFkaXVzSGVpZ2h0KTsKKyAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc2l6ZSk7CisgICAgfQorICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCisgICAgeworICAgICAgICBQcm9wZXJ0eUhhbmRs
ZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxMZW5ndGhTaXplLCBnZXR0ZXJG
dW5jdGlvbiwgTGVuZ3RoU2l6ZSwgc2V0dGVyRnVuY3Rpb24sIExlbmd0aFNpemUsIGluaXRpYWxG
dW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxl
cihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAm
YXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
RmlsbExheWVyQWNjZXNzb3JUeXBlcyB7CisgICAgdHlwZWRlZiBUIFNldHRlcjsKKyAgICB0eXBl
ZGVmIFQgR2V0dGVyOworfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBGaWxsTGF5ZXJBY2Nlc3Nv
clR5cGVzPFN0eWxlSW1hZ2UqPiB7CisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IFNldHRlcjsKKyAgICB0eXBlZGVmIFN0eWxlSW1hZ2UqIEdldHRlcjsKK307CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULAorICAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwKKyAgICAg
ICAgICBFRmlsbExheWVyVHlwZSBmaWxsTGF5ZXJUeXBlLAorICAgICAgICAgIEZpbGxMYXllciog
KFJlbmRlclN0eWxlOjoqYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCksCisgICAgICAgICAgY29uc3Qg
RmlsbExheWVyKiAoUmVuZGVyU3R5bGU6OipsYXllcnNGdW5jdGlvbikoKSBjb25zdCwKKyAgICAg
ICAgICBib29sIChGaWxsTGF5ZXI6Oip0ZXN0RnVuY3Rpb24pKCkgY29uc3QsCisgICAgICAgICAg
dHlwZW5hbWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxUPjo6R2V0dGVyIChGaWxsTGF5ZXI6Oipn
ZXRGdW5jdGlvbikoKSBjb25zdCwKKyAgICAgICAgICB2b2lkIChGaWxsTGF5ZXI6OipzZXRGdW5j
dGlvbikodHlwZW5hbWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxUPjo6U2V0dGVyKSwKKyAgICAg
ICAgICB2b2lkIChGaWxsTGF5ZXI6OipjbGVhckZ1bmN0aW9uKSgpLAorICAgICAgICAgIHR5cGVu
YW1lIEZpbGxMYXllckFjY2Vzc29yVHlwZXM8VD46OkdldHRlciAoKmluaXRpYWxGdW5jdGlvbiko
RUZpbGxMYXllclR5cGUpLAorICAgICAgICAgIHZvaWQgKENTU1RvU3R5bGVNYXA6OiptYXBGaWxs
RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik+CitjbGFzcyBB
cHBseVByb3BlcnR5RmlsbExheWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
ICAgIHsKKyAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBGaWxsTGF5ZXIqIHByZXZD
aGlsZCA9IDA7CisgICAgICAgIGNvbnN0IEZpbGxMYXllciogY3VyclBhcmVudCA9IChzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT4qbGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIHdoaWxl
IChjdXJyUGFyZW50ICYmIChjdXJyUGFyZW50LT4qdGVzdEZ1bmN0aW9uKSgpKSB7CisgICAgICAg
ICAgICBpZiAoIWN1cnJDaGlsZCkgeworICAgICAgICAgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBh
IG5ldyBsYXllci4qLworICAgICAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBGaWxsTGF5ZXIo
ZmlsbExheWVyVHlwZSk7CisgICAgICAgICAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJD
aGlsZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAoY3VyckNoaWxkLT4qc2V0RnVuY3Rp
b24pKChjdXJyUGFyZW50LT4qZ2V0RnVuY3Rpb24pKCkpOworICAgICAgICAgICAgcHJldkNoaWxk
ID0gY3VyckNoaWxkOworICAgICAgICAgICAgY3VyckNoaWxkID0gcHJldkNoaWxkLT5uZXh0KCk7
CisgICAgICAgICAgICBjdXJyUGFyZW50ID0gY3VyclBhcmVudC0+bmV4dCgpOworICAgICAgICB9
CisKKyAgICAgICAgd2hpbGUgKGN1cnJDaGlsZCkgeworICAgICAgICAgICAgLyogUmVzZXQgYW55
IHJlbWFpbmluZyBsYXllcnMgdG8gbm90IGhhdmUgdGhlIHByb3BlcnR5IHNldC4gKi8KKyAgICAg
ICAgICAgIChjdXJyQ2hpbGQtPipjbGVhckZ1bmN0aW9uKSgpOworICAgICAgICAgICAgY3VyckNo
aWxkID0gY3VyckNoaWxkLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICAoY3Vy
ckNoaWxkLT4qc2V0RnVuY3Rpb24pKCgqaW5pdGlhbEZ1bmN0aW9uKShmaWxsTGF5ZXJUeXBlKSk7
CisgICAgICAgIGZvciAoY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7IGN1cnJDaGlsZDsg
Y3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCkpCisgICAgICAgICAgICAoY3VyckNoaWxkLT4q
Y2xlYXJGdW5jdGlvbikoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKKyAgICAgICAgRmlsbExheWVyKiBw
cmV2Q2hpbGQgPSAwOworICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkKKyNpZiBFTkFC
TEUoQ1NTX0lNQUdFX1NFVCkKKyAgICAgICAgJiYgIXZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKQor
I2VuZGlmCisgICAgICAgICkgeworICAgICAgICAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBw
dXQgaXQgaW50byBhIGxheWVyLCBjcmVhdGluZyBuZXcgbGF5ZXJzIGFzIG5lZWRlZC4gKi8KKyAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVM
aXN0Kj4odmFsdWUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB2
YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIWN1cnJDaGls
ZCkgeworICAgICAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIG1ha2UgYSBuZXcgbGF5ZXIgdG8g
aG9sZCB0aGlzIHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBG
aWxsTGF5ZXIoZmlsbExheWVyVHlwZSk7CisgICAgICAgICAgICAgICAgICAgIHByZXZDaGlsZC0+
c2V0TmV4dChjdXJyQ2hpbGQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAo
c3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1hcEZpbGxGdW5jdGlvbikocHJvcGVydHlJZCwg
Y3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAg
ICAgICAgICAgIHByZXZDaGlsZCA9IGN1cnJDaGlsZDsKKyAgICAgICAgICAgICAgICBjdXJyQ2hp
bGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRmlsbEZ1bmN0aW9u
KShwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlKTsKKyAgICAgICAgICAgIGN1cnJDaGlsZCA9
IGN1cnJDaGlsZC0+bmV4dCgpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChjdXJyQ2hpbGQp
IHsKKyAgICAgICAgICAgIC8qIFJlc2V0IGFsbCByZW1haW5pbmcgbGF5ZXJzIHRvIG5vdCBoYXZl
IHRoZSBwcm9wZXJ0eSBzZXQuICovCisgICAgICAgICAgICAoY3VyckNoaWxkLT4qY2xlYXJGdW5j
dGlvbikoKTsKKyAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5p
dGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KK307CisKK2VudW0gQ29tcHV0ZUxlbmd0aE5vcm1h
bCB7Tm9ybWFsRGlzYWJsZWQgPSAwLCBOb3JtYWxFbmFibGVkfTsKK2VudW0gQ29tcHV0ZUxlbmd0
aFRoaWNrbmVzcyB7VGhpY2tuZXNzRGlzYWJsZWQgPSAwLCBUaGlja25lc3NFbmFibGVkfTsKK2Vu
dW0gQ29tcHV0ZUxlbmd0aFNWR1pvb20ge1NWR1pvb21EaXNhYmxlZCA9IDAsIFNWR1pvb21FbmFi
bGVkfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULAorICAgICAgICAgIFQgKFJlbmRlclN0eWxlOjoq
Z2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsCisgICAgICAgICAgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXJGdW5jdGlvbikoVCksCisgICAgICAgICAgVCAoKmluaXRpYWxGdW5jdGlvbikoKSwKKyAg
ICAgICAgICBDb21wdXRlTGVuZ3RoTm9ybWFsIG5vcm1hbEVuYWJsZWQgPSBOb3JtYWxEaXNhYmxl
ZCwKKyAgICAgICAgICBDb21wdXRlTGVuZ3RoVGhpY2tuZXNzIHRoaWNrbmVzc0VuYWJsZWQgPSBU
aGlja25lc3NEaXNhYmxlZCwKKyAgICAgICAgICBDb21wdXRlTGVuZ3RoU1ZHWm9vbSBzdmdab29t
RW5hYmxlZCA9IFNWR1pvb21EaXNhYmxlZD4KK2NsYXNzIEFwcGx5UHJvcGVydHlDb21wdXRlTGVu
Z3RoIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5
bGUsIFQgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gbm90ZTogQ1NTUHJv
cGVydHlMZXR0ZXIvV29yZFNwYWNpbmcgcmlnaHQgbm93IHNldHMgdG8gemVybyBpZiBpdCdzIG5v
dCBhIHByaW1pdGl2ZSB2YWx1ZSBmb3Igc29tZSByZWFzb24uLi4KKyAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOworCisgICAgICAgIGludCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpOworICAgICAgICBUIGxlbmd0aDsKKyAgICAgICAgaWYgKG5vcm1hbEVuYWJsZWQg
JiYgaWRlbnQgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IDA7Cisg
ICAgICAgIH0gZWxzZSBpZiAodGhpY2tuZXNzRW5hYmxlZCAmJiBpZGVudCA9PSBDU1NWYWx1ZVRo
aW4pIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAodGhpY2tu
ZXNzRW5hYmxlZCAmJiBpZGVudCA9PSBDU1NWYWx1ZU1lZGl1bSkgeworICAgICAgICAgICAgbGVu
Z3RoID0gMzsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlja25lc3NFbmFibGVkICYmIGlkZW50ID09
IENTU1ZhbHVlVGhpY2spIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IDU7CisgICAgICAgIH0gZWxz
ZSBpZiAoaWRlbnQgPT0gQ1NTVmFsdWVJbnZhbGlkKSB7CisgICAgICAgICAgICBmbG9hdCB6b29t
ID0gKHN2Z1pvb21FbmFibGVkICYmIHN0eWxlUmVzb2x2ZXItPnVzZVNWR1pvb21SdWxlcygpKSA/
IDEuMGYgOiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisKKyAgICAg
ICAgICAgIC8vIEFueSBvcmlnaW5hbCByZXN1bHQgdGhhdCB3YXMgPj0gMSBzaG91bGQgbm90IGJl
IGFsbG93ZWQgdG8gZmFsbCBiZWxvdyAxLgorICAgICAgICAgICAgLy8gVGhpcyBrZWVwcyBib3Jk
ZXIgbGluZXMgZnJvbSB2YW5pc2hpbmcuCisgICAgICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29s
dmVyLT5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOworICAgICAgICAgICAgaWYgKHpvb20gPCAx
LjBmICYmIGxlbmd0aCA8IDEuMCkgeworICAgICAgICAgICAgICAgIFQgb3JpZ2luYWxMZW5ndGgg
PSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIDEuMCk7CisgICAgICAgICAgICAg
ICAgaWYgKG9yaWdpbmFsTGVuZ3RoID49IDEuMCkKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3Ro
ID0gMS4wOworICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIH0K
KworICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBsZW5ndGgpOworICAg
IH0KKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAgIHsKKyAg
ICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8
VCwgZ2V0dGVyRnVuY3Rpb24sIFQsIHNldHRlckZ1bmN0aW9uLCBULCBpbml0aWFsRnVuY3Rpb24+
OjpjcmVhdGVIYW5kbGVyKCk7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxl
ci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBUIChGb250RGVzY3JpcHRp
b246OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoRm9udERlc2NyaXB0aW9uOjoqc2V0
dGVyRnVuY3Rpb24pKFQpLCBUIGluaXRpYWxWYWx1ZT4KK2NsYXNzIEFwcGx5UHJvcGVydHlGb250
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlv
bigpOworICAgICAgICAoZm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKHN0eWxlUmVz
b2x2ZXItPnBhcmVudEZvbnREZXNjcmlwdGlvbigpLipnZXR0ZXJGdW5jdGlvbikoKSk7CisgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKShpbml0aWFsVmFsdWUp
OworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAg
ICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKCpwcmltaXRpdmVWYWx1ZSk7Cisg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OworICAgIH0KKworICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsg
cmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxW
YWx1ZSwgJmFwcGx5VmFsdWUpOyB9Cit9OworCitjbGFzcyBBcHBseVByb3BlcnR5Rm9udEZhbWls
eSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlw
dGlvbiA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICAKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50
Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkpOworICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0SXNTcGVjaWZpZWRGb250KHBhcmVudEZvbnREZXNjcmlwdGlv
bi5pc1NwZWNpZmllZEZvbnQoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50
IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlIHRvIG5vbi1tb25v
c3BhY2UuCisgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250
RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQorICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6
ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsg
Zm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOworICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShpbml0aWFsRGVzYy5nZW5lcmljRmFtaWx5KCkp
OworICAgICAgICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuZmFtaWx5SXNFbXB0eSgp
KQorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShpbml0aWFsRGVzYy5maXJz
dEZhbWlseSgpKTsKKworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0
RmFtaWx5KCk7CisgICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOworCisgICAgICAg
IC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3ZSBzaG91
bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgorICAgICAgICBib29sIG9sZEZhbWlseVVzZWRG
aXhlZERlZmF1bHRTaXplID0gZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKTsK
KyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9u
OjpOb0ZhbWlseSk7CisKKyAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFs
dWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAgICAgQ1NTVmFsdWUqIGl0
ZW0gPSBpLnZhbHVlKCk7CisgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0p
OworICAgICAgICAgICAgQXRvbWljU3RyaW5nIGZhY2U7CisgICAgICAgICAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgICAg
ICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBmYWNl
ID0gY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAgZWxzZSBpZiAo
c2V0dGluZ3MpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0SWRl
bnQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5OgorICAgICAg
ICAgICAgICAgICAgICBmYWNlID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseSgpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2Vy
aWY6CisgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzZXJpZkZhbWlseTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9u
OjpTZXJpZkZhbWlseSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6CisgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBz
YW5zU2VyaWZGYW1pbHk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRH
ZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5KTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6
CisgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBjdXJzaXZlRmFtaWx5OworICAgICAgICAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246
OkN1cnNpdmVGYW1pbHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKKyAgICAgICAgICAgICAgICAgICAgZmFjZSA9IGZh
bnRhc3lGYW1pbHk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5l
cmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6RmFudGFzeUZhbWlseSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6Cisg
ICAgICAgICAgICAgICAgICAgIGZhY2UgPSBtb25vc3BhY2VGYW1pbHk7CisgICAgICAgICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6
TW9ub3NwYWNlRmFtaWx5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3JhcGg6CisgICAgICAgICAgICAgICAgICAg
IGZhY2UgPSBwaWN0b2dyYXBoRmFtaWx5OworICAgICAgICAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlBpY3RvZ3JhcGhGYW1pbHkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghZmFjZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIWN1cnJGYW1pbHkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlsbGluZyBp
biB0aGUgZmlyc3QgZmFtaWx5LgorICAgICAgICAgICAgICAgICAgICBmaXJzdEZhbWlseS5zZXRG
YW1pbHkoZmFjZSk7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0RmFtaWx5LmFwcGVuZEZhbWls
eSgwKTsgLy8gUmVtb3ZlIGFueSBpbmhlcml0ZWQgZmFtaWx5LWZhbGxiYWNrIGxpc3QuCisgICAg
ICAgICAgICAgICAgICAgIGN1cnJGYW1pbHkgPSAmZmlyc3RGYW1pbHk7CisgICAgICAgICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQoZm9udERlc2NyaXB0aW9u
LmdlbmVyaWNGYW1pbHkoKSA9PSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZh
bWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7CisgICAgICAgICAg
ICAgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KGZhY2UpOworICAgICAgICAgICAgICAgICAg
ICBjdXJyRmFtaWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsKKyAgICAgICAgICAgICAgICAg
ICAgY3VyckZhbWlseSA9IG5ld0ZhbWlseS5nZXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBjYW4ndCBjYWxsIHVzZUZpeGVk
RGVmYXVsdFNpemUoKSB1bnRpbCBhbGwgbmV3IGZvbnQgZmFtaWxpZXMgaGF2ZSBiZWVuIGFkZGVk
CisgICAgICAgIC8vIElmIGN1cnJGYW1pbHkgaXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQgYXQgbGVh
c3Qgb25lIGZhbWlseSBvbiB0aGlzIGRlc2NyaXB0aW9uLgorICAgICAgICBpZiAoY3VyckZhbWls
eSkgeworICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZv
bnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVk
RGVmYXVsdFNpemUpCisgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUo
Zm9udERlc2NyaXB0aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVS
ZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtl
eXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKKworICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBw
bHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9Cit9Owor
CitjbGFzcyBBcHBseVByb3BlcnR5Rm9udFNpemUgeworcHJpdmF0ZToKKyAgICAvLyBXaGVuIHRo
ZSBDU1Mga2V5d29yZCAibGFyZ2VyIiBpcyB1c2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYXR0ZW1w
dCB0byBtYXRjaCB3aXRoaW4gdGhlIGtleXdvcmQKKyAgICAvLyB0YWJsZSwgYW5kIGZhaWxpbmcg
dGhhdCwgd2lsbCBzaW1wbHkgbXVsdGlwbHkgYnkgMS4yLgorICAgIHN0YXRpYyBmbG9hdCBsYXJn
ZXJGb250U2l6ZShmbG9hdCBzaXplKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBv
dXQgd2hlcmUgd2UgZmFsbCBpbiB0aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRvIHh4eC1sYXJn
ZSkgYW5kIHNjYWxlIHVwIHRvCisgICAgICAgIC8vIHRoZSBuZXh0IHNpemUgbGV2ZWwuCisgICAg
ICAgIHJldHVybiBzaXplICogMS4yZjsKKyAgICB9CisKKyAgICAvLyBMaWtlIHRoZSBwcmV2aW91
cyBmdW5jdGlvbiwgYnV0IGZvciB0aGUga2V5d29yZCAic21hbGxlciIuCisgICAgc3RhdGljIGZs
b2F0IHNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXplKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IEZpZ3VyZSBvdXQgd2hlcmUgd2UgZmFsbCBpbiB0aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRv
IHh4eC1sYXJnZSkgYW5kIHNjYWxlIGRvd24gdG8KKyAgICAgICAgLy8gdGhlIG5leHQgc2l6ZSBs
ZXZlbC4KKyAgICAgICAgcmV0dXJuIHNpemUgLyAxLjJmOworICAgIH0KK3B1YmxpYzoKKyAgICBz
dGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKwor
ICAgICAgICBpZiAoc2l6ZSA8IDApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUo
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNp
emUoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlv
biwgc2l6ZSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKKyAgICB7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZmxvYXQg
c2l6ZSA9IHN0eWxlUmVzb2x2ZXItPmZvbnRTaXplRm9yS2V5d29yZChzdHlsZVJlc29sdmVyLT5k
b2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVs
dFNpemUoKSk7CisKKyAgICAgICAgaWYgKHNpemUgPCAwKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAt
IENTU1ZhbHVlWHhTbWFsbCArIDEpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6
ZShmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOworCisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKDApOworICAgICAgICBmbG9hdCBwYXJlbnRT
aXplID0gMDsKKyAgICAgICAgYm9vbCBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNlOworICAg
ICAgICBmbG9hdCBzaXplID0gMDsKKworICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKSkgeworICAgICAgICAgICAgcGFyZW50U2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAgICAgICAgICAg
IHBhcmVudElzQWJzb2x1dGVTaXplID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9u
dERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChpbnQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgeworICAgICAgICAgICAg
Ly8gS2V5d29yZHMgYXJlIGJlaW5nIHVzZWQuCisgICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7
CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWHhTbWFsbDoKKyAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVYU21hbGw6CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGw6CisgICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlTWVkaXVtOgorICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlOgor
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVYeExhcmdlOgorICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgorICAg
ICAgICAgICAgICAgIHNpemUgPSBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5
bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERl
ZmF1bHRTaXplKCkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3Jk
U2l6ZShpZGVudCAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKKyAgICAgICAgICAgICAgICBzaXpl
ID0gbGFyZ2VyRm9udFNpemUocGFyZW50U2l6ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGxlcjoKKyAgICAgICAgICAgICAgICBzaXplID0g
c21hbGxlckZvbnRTaXplKHBhcmVudFNpemUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJ
c0Fic29sdXRlU2l6ZSAmJiAoaWRlbnQgPT0gQ1NTVmFsdWVMYXJnZXIgfHwgaWRlbnQgPT0gQ1NT
VmFsdWVTbWFsbGVyKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhKHByaW1pdGl2ZVZhbHVlLT5p
c1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS0+aXNGb250UmVsYXRpdmVMZW5ndGgoKSkp
OworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQorICAgICAgICAg
ICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGVS
ZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
LCAxLjAsIHRydWUpOworICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVy
Y2VudGFnZSgpKQorICAgICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUtPmdldEZs
b2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOworICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCisgICAg
ICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxj
VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpKS0+ZXZhbHVhdGUocGFyZW50U2l6ZSk7CisgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKKyAgICAgICAg
ICAgICAgICBzaXplID0gdmFsdWVGb3JMZW5ndGgocHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVy
Y2VudGFnZUxlbmd0aCgpLCAwLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3
KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzaXplIDwgMCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAvLyBPdmVybHkgbGFyZ2UgZm9udCBzaXplcyB3aWxsIGNhdXNlIGNyYXNoZXMgb24gc29tZSBw
bGF0Zm9ybXMgKHN1Y2ggYXMgV2luZG93cykuCisgICAgICAgIC8vIENhcCBmb250IHNpemUgaGVy
ZSB0byBtYWtlIHN1cmUgdGhhdCBkb2Vzbid0IGhhcHBlbi4KKyAgICAgICAgc2l6ZSA9IG1pbiht
YXhpbXVtQWxsb3dlZEZvbnRTaXplLCBzaXplKTsKKworICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgICAgICBzdHlsZVJlc29sdmVy
LT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0
dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1
ZSwgJmFwcGx5VmFsdWUpOyB9Cit9OworCitjbGFzcyBBcHBseVByb3BlcnR5Rm9udFdlaWdodCB7
CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIHN3
aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZUludmFsaWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlQm9sZGVyOgorICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFdlaWdodChmb250RGVzY3JpcHRpb24uYm9sZGVyV2VpZ2h0KCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVMaWdodGVyOgorICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChmb250RGVzY3JpcHRpb24ubGlnaHRlcldlaWdo
dCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICB9Cisg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OworICAgIH0KKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAg
IHsKKyAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5Rm9udDxG
b250V2VpZ2h0LCAmRm9udERlc2NyaXB0aW9uOjp3ZWlnaHQsICZGb250RGVzY3JpcHRpb246OnNl
dFdlaWdodCwgRm9udFdlaWdodE5vcm1hbD46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0
dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmlu
aXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKworY2xhc3MgQXBwbHlQ
cm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsKKyAgICAg
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnRE
ZXNjcmlwdGlvbigpOworCisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVy
ZXNTdGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSk7Cisg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUocGFy
ZW50Rm9udERlc2NyaXB0aW9uLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpKTsKKyAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShwYXJlbnRGb250
RGVzY3JpcHRpb24uaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKCkpOworCisgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7CisKKyAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlv
bjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RGlz
Y3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVz
U3RhdGUpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0dXJlc1N0
YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOworCisgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgRm9udERl
c2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNj
cmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6
TGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0
aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uOjpMaWdh
dHVyZXNTdGF0ZSBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246Ok5v
cm1hbExpZ2F0dXJlc1N0YXRlOworCisgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkg
eworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NW
YWx1ZUxpc3QqPih2YWx1ZSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZh
bHVlTGlzdC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVt
ID0gdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgICAg
IEFTU0VSVChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIGlmIChp
dGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
PihpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9Db21tb25MaWdh
dHVyZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZv
bnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ29tbW9uTGln
YXR1cmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBG
b250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9EaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3JldGlvbmFyeUxp
Z2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVEaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgorICAgICAgICAgICAgICAgICAgICAgICAg
ZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpFbmFibGVkTGln
YXR1cmVzU3RhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vSGlzdG9yaWNhbExpZ2F0dXJlczoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6
RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlSGlzdG9yaWNhbExpZ2F0dXJlczoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNj
cmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpOworICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKTsKKyAgICAgICAgfQor
I2VuZGlmCisKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
UmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
Q29tbW9uTGlnYXR1cmVzU3RhdGUoY29tbW9uTGlnYXR1cmVzU3RhdGUpOworICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKGRpc2NyZXRpb25hcnlM
aWdhdHVyZXNTdGF0ZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0b3JpY2FsTGln
YXR1cmVzU3RhdGUoaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKTsKKyAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgfQorCisgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFs
dWUsICZhcHBseVZhbHVlKTsKKyAgICB9Cit9OworCitlbnVtIEJvcmRlckltYWdlVHlwZSB7IEJv
cmRlckltYWdlID0gMCwgQm9yZGVyTWFzayB9OwordGVtcGxhdGUgPEJvcmRlckltYWdlVHlwZSBi
b3JkZXJJbWFnZVR5cGUsCisgICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwKKyAgICAg
ICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24p
KCkgY29uc3QsCisgICAgICAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbiko
Y29uc3QgTmluZVBpZWNlSW1hZ2UmKT4KK2NsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAg
ICBOaW5lUGllY2VJbWFnZSBpbWFnZTsKKyAgICAgICAgaWYgKGJvcmRlckltYWdlVHlwZSA9PSBC
b3JkZXJNYXNrKQorICAgICAgICAgICAgaW1hZ2Uuc2V0TWFza0RlZmF1bHRzKCk7CisgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCB2
YWx1ZSwgaW1hZ2UpOworICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1
bmN0aW9uKShpbWFnZSk7CisgICAgfQorCisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBw
bHlQcm9wZXJ0eURlZmF1bHRCYXNlPGNvbnN0IE5pbmVQaWVjZUltYWdlJiwgZ2V0dGVyRnVuY3Rp
b24sIGNvbnN0IE5pbmVQaWVjZUltYWdlJiwgc2V0dGVyRnVuY3Rpb24sIE5pbmVQaWVjZUltYWdl
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxOaW5lUGllY2VJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKTsK
KyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigp
LCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKwor
ZW51bSBCb3JkZXJJbWFnZU1vZGlmaWVyVHlwZSB7IE91dHNldCwgUmVwZWF0LCBTbGljZSwgV2lk
dGggfTsKK3RlbXBsYXRlIDxCb3JkZXJJbWFnZVR5cGUgdHlwZSwgQm9yZGVySW1hZ2VNb2RpZmll
clR5cGUgbW9kaWZpZXI+CitjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllciB7
Citwcml2YXRlOgorICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZh
bHVlKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0
eWxlLT5ib3JkZXJJbWFnZSgpIDogc3R5bGUtPm1hc2tCb3hJbWFnZSgpOyB9CisgICAgc3RhdGlj
IGlubGluZSB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgTmluZVBpZWNl
SW1hZ2UmIHZhbHVlKSB7IHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUtPnNldEJv
cmRlckltYWdlKHZhbHVlKSA6IHN0eWxlLT5zZXRNYXNrQm94SW1hZ2UodmFsdWUpOyB9CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIE5pbmVQaWVjZUltYWdl
IGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAgICAgICAgc3dpdGNo
IChtb2RpZmllcikgeworICAgICAgICBjYXNlIE91dHNldDoKKyAgICAgICAgICAgIGltYWdlLmNv
cHlPdXRzZXRGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlcGVhdDoKKyAgICAgICAgICAgIGltYWdl
LmNvcHlSZXBlYXRGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNsaWNlOgorICAgICAgICAgICAgaW1h
Z2UuY29weUltYWdlU2xpY2VzRnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHls
ZSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXaWR0aDoKKyAgICAgICAg
ICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSkpOworICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7
CisgICAgICAgIGNhc2UgT3V0c2V0OgorICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KExlbmd0
aEJveCgwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZXBlYXQ6CisgICAg
ICAgICAgICBpbWFnZS5zZXRIb3Jpem9udGFsUnVsZShTdHJldGNoSW1hZ2VSdWxlKTsKKyAgICAg
ICAgICAgIGltYWdlLnNldFZlcnRpY2FsUnVsZShTdHJldGNoSW1hZ2VSdWxlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFNsaWNlOgorICAgICAgICAgICAgLy8gTWFza3MgaGF2
ZSBhIGRpZmZlcmVudCBpbml0aWFsIHZhbHVlIGZvciBzbGljZXMuIFByZXNlcnZlIHRoZSB2YWx1
ZSBvZiAwIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICAgIGltYWdlLnNl
dEltYWdlU2xpY2VzKHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBMZW5ndGhCb3goTGVuZ3RoKDEwMCwg
UGVyY2VudCksIExlbmd0aCgxMDAsIFBlcmNlbnQpLCBMZW5ndGgoMTAwLCBQZXJjZW50KSwgTGVu
Z3RoKDEwMCwgUGVyY2VudCkpIDogTGVuZ3RoQm94KCkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0
RmlsbChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXaWR0aDoKKyAg
ICAgICAgICAgIC8vIE1hc2tzIGhhdmUgYSBkaWZmZXJlbnQgaW5pdGlhbCB2YWx1ZSBmb3Igd2lk
dGhzLiBUaGV5IHVzZSBhbiAnYXV0bycgdmFsdWUgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGZpdCB0
byB0aGUgYm9yZGVyLgorICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHR5cGUgPT0g
Qm9yZGVySW1hZ2UgPyBMZW5ndGhCb3goTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJl
bGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSkgOiBMZW5n
dGhCb3goKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbWFnZSk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShn
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpKSk7CisgICAgICAgIHN3aXRjaCAobW9kaWZp
ZXIpIHsKKyAgICAgICAgY2FzZSBPdXRzZXQ6CisgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQo
c3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZXBlYXQ6CisgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVJlcGVhdCh2YWx1ZSwg
aW1hZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2xpY2U6CisgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVNsaWNlKHZh
bHVlLCBpbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXaWR0aDoKKyAg
ICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgp
LT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJl
dHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFs
dWUsICZhcHBseVZhbHVlKTsgfQorfTsKKwordGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQsIFN0
eWxlSW1hZ2UqIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChS
ZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+KSwgU3R5
bGVJbWFnZSogKCppbml0aWFsRnVuY3Rpb24pKCk+CitjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVy
SW1hZ2VTb3VyY2UgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSB7
IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlSW1hZ2UoaWQsIHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNy
ZWF0ZUhhbmRsZXIoKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBB
cHBseVByb3BlcnR5RGVmYXVsdEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1bmN0aW9uLCBQYXNz
UmVmUHRyPFN0eWxlSW1hZ2U+LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFnZSosIGluaXRpYWxG
dW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxl
cihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAm
YXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKworZW51bSBDb3VudGVyQmVoYXZpb3Ige0luY3JlbWVu
dCA9IDAsIFJlc2V0fTsKK3RlbXBsYXRlIDxDb3VudGVyQmVoYXZpb3IgY291bnRlckJlaGF2aW9y
PgorY2xhc3MgQXBwbHlQcm9wZXJ0eUNvdW50ZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lk
IGVtcHR5RnVuY3Rpb24oQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsgfQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAg
PSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworICAg
ICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBwYXJlbnRNYXAgPSBzdHlsZVJlc29sdmVyLT5wYXJl
bnRTdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworCisgICAgICAgIHR5cGVkZWYg
Q291bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7CisgICAgICAgIEl0ZXJhdG9y
IGVuZCA9IHBhcmVudE1hcC5lbmQoKTsKKyAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHBhcmVu
dE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIENvdW50ZXJEaXJl
Y3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpdC0+a2V5LCBDb3VudGVyRGlyZWN0aXZlcygp
KS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJl
c2V0KSB7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhlcml0UmVzZXQoaXQtPnZhbHVl
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhl
cml0SW5jcmVtZW50KGl0LT52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBib29sIHNl
dENvdW50ZXJJbmNyZW1lbnRUb05vbmUgPSBjb3VudGVyQmVoYXZpb3IgPT0gSW5jcmVtZW50ICYm
IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSktPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lOworCisgICAgICAgIGlmICgh
dmFsdWUtPmlzVmFsdWVMaXN0KCkgJiYgIXNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICAgICAg
dHlwZWRlZiBDb3VudGVyRGlyZWN0aXZlTWFwOjppdGVyYXRvciBJdGVyYXRvcjsKKworICAgICAg
ICBJdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CisgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBt
YXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhh
dmlvciA9PSBSZXNldCkKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUuY2xlYXJSZXNldCgpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5jbGVhckluY3JlbWVu
dCgpOworICAgICAgICAKKyAgICAgICAgaWYgKHNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3Qg
PSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CisgICAgICAgIGludCBsZW5ndGgg
PSBsaXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gbGlzdC0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIFBhaXIqIHBhaXIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1
ZSktPmdldFBhaXJWYWx1ZSgpOworICAgICAgICAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJz
dCgpIHx8ICFwYWlyLT5zZWNvbmQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgQXRvbWljU3RyaW5nIGlkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHBhaXItPmZpcnN0KCkpLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAg
aW50IHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWlyLT5zZWNvbmQo
KSktPmdldEludFZhbHVlKCk7CisgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0
aXZlcyA9IG1hcC5hZGQoaWRlbnRpZmllciwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3It
PnZhbHVlOworICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkgeworICAg
ICAgICAgICAgICAgIGRpcmVjdGl2ZXMuc2V0UmVzZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMuYWRkSW5jcmVtZW50VmFsdWUo
dmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBw
bHlJbmhlcml0VmFsdWUsICZlbXB0eUZ1bmN0aW9uLCAmYXBwbHlWYWx1ZSk7IH0KK307CisKKwor
Y2xhc3MgQXBwbHlQcm9wZXJ0eUN1cnNvciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKKyAgICB7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihzdHls
ZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5jdXJzb3IoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEN1cnNvckxpc3Qoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+
Y3Vyc29ycygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7CisgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNv
cigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOworICAgICAg
ICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCog
bGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKKyAgICAgICAgICAgIGlu
dCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldEN1cnNvcihDVVJTT1JfQVVUTyk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBsaXN0LT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0N1
cnNvckltYWdlVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBDU1NDdXJzb3JJbWFnZVZh
bHVlKiBpbWFnZSA9IHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdlVmFsdWUqPihpdGVtKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT51cGRhdGVJZlNWR0N1cnNvcklzVXNlZChzdHls
ZVJlc29sdmVyLT5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFyZSBu
b3QgYWxsb3dlZCB0byBzaGFyZSBzdHlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShD
U1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90U3BvdCgpKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOworICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzSWRlbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKSB7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpICYmIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmN1
cnNvcigpICE9IEVDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKSkKKyAgICAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsg
cmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxW
YWx1ZSwgJmFwcGx5VmFsdWUpOyB9Cit9OworCitjbGFzcyBBcHBseVByb3BlcnR5VGV4dEFsaWdu
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKworICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgIT0gQ1NTVmFsdWVXZWJraXRNYXRjaFBhcmVudCkKKyAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbigqcHJpbWl0aXZlVmFsdWUpOwor
ICAgICAgICBlbHNlIGlmIChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24o
KSA9PSBUQVNUQVJUKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IExFRlQgOiBSSUdIVCk7CisgICAgICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCktPnRleHRBbGlnbigpID09IFRBRU5EKQorICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFJJR0hUIDogTEVGVCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSk7CisgICAgfQorICAgIHN0YXRpYyBQ
cm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCisgICAgeworICAgICAgICBQcm9wZXJ0eUhh
bmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFVGV4dEFsaWduLCAmUmVu
ZGVyU3R5bGU6OnRleHRBbGlnbiwgRVRleHRBbGlnbiwgJlJlbmRlclN0eWxlOjpzZXRUZXh0QWxp
Z24sIEVUZXh0QWxpZ24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRBbGlnbj46OmNyZWF0ZUhh
bmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRG
dW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7CisgICAg
fQorfTsKKworY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEVUZXh0RGVjb3Jh
dGlvbiB0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbigpOworICAgICAgICBm
b3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkodmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNl
KCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOworICAgICAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXRlbS0+aXNQcmltaXRpdmVWYWx1
ZSgpKTsKKyAgICAgICAgICAgIHQgfD0gKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
aXRlbSk7CisgICAgICAgIH0KKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dERlY29yYXRpb24odCk7CisgICAgfQorICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRl
SGFuZGxlcigpCisgICAgeworICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTxFVGV4dERlY29yYXRpb24sICZSZW5kZXJTdHlsZTo6dGV4dERl
Y29yYXRpb24sIEVUZXh0RGVjb3JhdGlvbiwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlv
biwgRVRleHREZWNvcmF0aW9uLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbj46
OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVy
LmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1
ZSk7CisgICAgfQorfTsKKworY2xhc3MgQXBwbHlQcm9wZXJ0eU1hcnF1ZWVJbmNyZW1lbnQgewor
cHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKKyAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhl
ZCkpOyAvLyAxcHguCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENT
U1ZhbHVlTm9ybWFsOgorICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRl
ZmF1bHQuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
TGFyZ2U6CisgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVl
ZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMZW5n
dGggbWFycXVlZUxlbmd0aCA9IHN0eWxlUmVzb2x2ZXItPmNvbnZlcnRUb0ludExlbmd0aChwcmlt
aXRpdmVWYWx1ZSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIGlmICghbWFycXVlZUxlbmd0aC5pc1VuZGVmaW5l
ZCgpKQorICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVJ
bmNyZW1lbnQobWFycXVlZUxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5SGFu
ZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6Om1hcnF1ZWVJ
bmNyZW1lbnQsICZSZW5kZXJTdHlsZTo6c2V0TWFycXVlZUluY3JlbWVudCwgJlJlbmRlclN0eWxl
Ojppbml0aWFsTWFycXVlZUluY3JlbWVudD46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0
dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmlu
aXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKworY2xhc3MgQXBwbHlQ
cm9wZXJ0eU1hcnF1ZWVSZXBldGl0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5maW5pdGUp
CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50
KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCisgICAgICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc051bWJlcigpKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7Cisg
ICAgfQorICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCisgICAgewor
ICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0PGlu
dCwgJlJlbmRlclN0eWxlOjptYXJxdWVlTG9vcENvdW50LCBpbnQsICZSZW5kZXJTdHlsZTo6c2V0
TWFycXVlZUxvb3BDb3VudCwgaW50LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNYXJxdWVlTG9vcENv
dW50Pjo6Y3JlYXRlSGFuZGxlcigpOworICAgICAgICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhh
bmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBs
eVZhbHVlKTsKKyAgICB9Cit9OworCitjbGFzcyBBcHBseVByb3BlcnR5TWFycXVlZVNwZWVkIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgaWYgKGludCBpZGVudCA9IHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7Cisg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2xvdzoKKyAgICAgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgorICAgICAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCg4NSk7IC8v
IDg1bXNlYy4gVGhlIFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlRmFzdDoKKyAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3QuCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENT
U1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOworICAgICAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgLy8gRm9yIHNjcm9sbGFtb3VudCBzdXBwb3J0LgorICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2
ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKKyAgICB9CisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxl
ciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVy
ID0gQXBwbHlQcm9wZXJ0eURlZmF1bHQ8aW50LCAmUmVuZGVyU3R5bGU6Om1hcnF1ZWVTcGVlZCwg
aW50LCAmUmVuZGVyU3R5bGU6OnNldE1hcnF1ZWVTcGVlZCwgaW50LCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxNYXJxdWVlU3BlZWQ+OjpjcmVhdGVIYW5kbGVyKCk7CisgICAgICAgIHJldHVybiBQcm9w
ZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVu
Y3Rpb24oKSwgJmFwcGx5VmFsdWUpOworICAgIH0KK307CisKKyNpZiBFTkFCTEUoQ1NTM19URVhU
KQorY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRVbmRlcmxpbmVQb3NpdGlvbiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICAvLyBUaGlzIGlz
IHRydWUgaWYgdmFsdWUgaXMgJ2F1dG8nIG9yICdhbHBoYWJldGljJy4KKyAgICAgICAgaWYgKHZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3Np
dGlvbiB0ID0gKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dFVuZGVybGluZVBvc2l0aW9uKHQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgdCA9
IDA7CisgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGkuaGFzTW9y
ZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVl
KCk7CisgICAgICAgICAgICBBU1NFUlQoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKKyAgICAg
ICAgICAgIFRleHRVbmRlcmxpbmVQb3NpdGlvbiB0MiA9ICpzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KGl0ZW0pOworICAgICAgICAgICAgdCB8PSB0MjsKKyAgICAgICAgfQorICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24oc3RhdGlj
X2Nhc3Q8VGV4dFVuZGVybGluZVBvc2l0aW9uPih0KSk7CisgICAgfQorICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCisgICAgeworICAgICAgICBQcm9wZXJ0eUhhbmRs
ZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxUZXh0VW5kZXJsaW5lUG9zaXRp
b24sICZSZW5kZXJTdHlsZTo6dGV4dFVuZGVybGluZVBvc2l0aW9uLCBUZXh0VW5kZXJsaW5lUG9z
aXRpb24sICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZVBvc2l0aW9uLCBUZXh0VW5kZXJs
aW5lUG9zaXRpb24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRVbmRlcmxpbmVQb3NpdGlvbj46
OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVy
LmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1
ZSk7CisgICAgfQorfTsKKyNlbmRpZiAvLyBDU1MzX1RFWFQKKworY2xhc3MgQXBwbHlQcm9wZXJ0
eUxpbmVIZWlnaHQgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBMZW5ndGgg
bGluZUhlaWdodDsKKworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVOb3JtYWwpCisgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gUmVuZGVyU3R5bGU6Omlu
aXRpYWxMaW5lSGVpZ2h0KCk7CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xl
bmd0aCgpKSB7CisgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAgICAgICAgIG11
bHRpcGxpZXIgKj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CisgICAgICAgICAgICBsaW5lSGVp
Z2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIG11bHRpcGxpZXIp
OworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IHBlcmNlbnRhZ2Ugc2hvdWxkIG5vdCBiZSByZXN0cmljdGVk
IHRvIGFuIGludGVnZXIgaGVyZS4KKyAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50
VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IG51bWJlciBhbmQgcGVyY2Vu
dGFnZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdHlwZSBvZiBMZW5ndGggKGllLiBG
aXhlZCBvciBQZXJjZW50KS4KKyAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0
aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCkgKiAxMDAuMCwgUGVyY2VudCk7CisgICAgICAgIH0g
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCisg
ICAgICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFn
ZUxlbmd0aCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldExpbmVIZWlnaHQobGluZUhlaWdodCk7CisgICAgfQor
ICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCisgICAgeworICAgICAg
ICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxMZW5n
dGgsICZSZW5kZXJTdHlsZTo6c3BlY2lmaWVkTGluZUhlaWdodCwgTGVuZ3RoLCAmUmVuZGVyU3R5
bGU6OnNldExpbmVIZWlnaHQsIExlbmd0aCwgJlJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdo
dD46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5k
bGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlW
YWx1ZSk7CisgICAgfQorfTsKKworY2xhc3MgQXBwbHlQcm9wZXJ0eVBhZ2VTaXplIHsKK3ByaXZh
dGU6CisgICAgc3RhdGljIExlbmd0aCBtbUxlbmd0aChkb3VibGUgbW0pIHsgcmV0dXJuIENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUobW0sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU0pLT5jb21w
dXRlTGVuZ3RoPExlbmd0aD4oMCwgMCk7IH0KKyAgICBzdGF0aWMgTGVuZ3RoIGluY2hMZW5ndGgo
ZG91YmxlIGluY2gpIHsgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoaW5jaCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19JTiktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPigwLCAwKTsgfQor
ICAgIHN0YXRpYyBib29sIGdldFBhZ2VTaXplRnJvbU5hbWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHBh
Z2VTaXplTmFtZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VPcmllbnRhdGlvbiwgTGVuZ3RoJiB3
aWR0aCwgTGVuZ3RoJiBoZWlnaHQpCisgICAgeworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KExlbmd0aCwgYTVXaWR0aCwgKG1tTGVuZ3RoKDE0OCkpKTsKKyAgICAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChMZW5ndGgsIGE1SGVpZ2h0LCAobW1MZW5ndGgoMjEwKSkpOworICAgICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgYTRXaWR0aCwgKG1tTGVuZ3RoKDIxMCkpKTsKKyAgICAg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5ndGgsIGE0SGVpZ2h0LCAobW1MZW5ndGgoMjk3KSkp
OworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgYTNXaWR0aCwgKG1tTGVuZ3Ro
KDI5NykpKTsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5ndGgsIGEzSGVpZ2h0LCAo
bW1MZW5ndGgoNDIwKSkpOworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgYjVX
aWR0aCwgKG1tTGVuZ3RoKDE3NikpKTsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5n
dGgsIGI1SGVpZ2h0LCAobW1MZW5ndGgoMjUwKSkpOworICAgICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKExlbmd0aCwgYjRXaWR0aCwgKG1tTGVuZ3RoKDI1MCkpKTsKKyAgICAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChMZW5ndGgsIGI0SGVpZ2h0LCAobW1MZW5ndGgoMzUzKSkpOworICAgICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgbGV0dGVyV2lkdGgsIChpbmNoTGVuZ3RoKDguNSkp
KTsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5ndGgsIGxldHRlckhlaWdodCwgKGlu
Y2hMZW5ndGgoMTEpKSk7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGVuZ3RoLCBsZWdh
bFdpZHRoLCAoaW5jaExlbmd0aCg4LjUpKSk7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwo
TGVuZ3RoLCBsZWdhbEhlaWdodCwgKGluY2hMZW5ndGgoMTQpKSk7CisgICAgICAgIERFRklORV9T
VEFUSUNfTE9DQUwoTGVuZ3RoLCBsZWRnZXJXaWR0aCwgKGluY2hMZW5ndGgoMTEpKSk7CisgICAg
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGVuZ3RoLCBsZWRnZXJIZWlnaHQsIChpbmNoTGVuZ3Ro
KDE3KSkpOworCisgICAgICAgIGlmICghcGFnZVNpemVOYW1lKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIHN3aXRjaCAocGFnZVNpemVOYW1lLT5nZXRJZGVudCgpKSB7Cisg
ICAgICAgIGNhc2UgQ1NTVmFsdWVBNToKKyAgICAgICAgICAgIHdpZHRoID0gYTVXaWR0aDsKKyAg
ICAgICAgICAgIGhlaWdodCA9IGE1SGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ1NTVmFsdWVBNDoKKyAgICAgICAgICAgIHdpZHRoID0gYTRXaWR0aDsKKyAgICAgICAg
ICAgIGhlaWdodCA9IGE0SGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q1NTVmFsdWVBMzoKKyAgICAgICAgICAgIHdpZHRoID0gYTNXaWR0aDsKKyAgICAgICAgICAgIGhl
aWdodCA9IGEzSGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFs
dWVCNToKKyAgICAgICAgICAgIHdpZHRoID0gYjVXaWR0aDsKKyAgICAgICAgICAgIGhlaWdodCA9
IGI1SGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVCNDoK
KyAgICAgICAgICAgIHdpZHRoID0gYjRXaWR0aDsKKyAgICAgICAgICAgIGhlaWdodCA9IGI0SGVp
Z2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVMZXR0ZXI6Cisg
ICAgICAgICAgICB3aWR0aCA9IGxldHRlcldpZHRoOworICAgICAgICAgICAgaGVpZ2h0ID0gbGV0
dGVySGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVMZWdh
bDoKKyAgICAgICAgICAgIHdpZHRoID0gbGVnYWxXaWR0aDsKKyAgICAgICAgICAgIGhlaWdodCA9
IGxlZ2FsSGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVM
ZWRnZXI6CisgICAgICAgICAgICB3aWR0aCA9IGxlZGdlcldpZHRoOworICAgICAgICAgICAgaGVp
Z2h0ID0gbGVkZ2VySGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFn
ZU9yaWVudGF0aW9uKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHBhZ2VPcmllbnRhdGlvbi0+Z2V0
SWRlbnQoKSkgeworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhbmRzY2FwZToKKyAgICAgICAg
ICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlUG9ydHJhaXQ6CisgICAgICAgICAgICAgICAgLy8g
Tm90aGluZyB0byBkby4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikgeyB9Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciopIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKKyAgICAgICAg
TGVuZ3RoIHdpZHRoOworICAgICAgICBMZW5ndGggaGVpZ2h0OworICAgICAgICBQYWdlU2l6ZVR5
cGUgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE87CisgICAgICAgIENTU1ZhbHVlTGlzdElu
c3BlY3RvciBpbnNwZWN0b3IodmFsdWUpOworICAgICAgICBzd2l0Y2ggKGluc3BlY3Rvci5sZW5n
dGgoKSkgeworICAgICAgICBjYXNlIDI6IHsKKyAgICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9IHwg
PHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgorICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3IuZmly
c3QoKS0+aXNQcmltaXRpdmVWYWx1ZSgpIHx8ICFpbnNwZWN0b3Iuc2Vjb25kKCktPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogZmlyc3QgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGluc3Bl
Y3Rvci5maXJzdCgpKTsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGluc3BlY3Rvci5zZWNvbmQoKSk7CisgICAg
ICAgICAgICBpZiAoZmlyc3QtPmlzTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAvLyA8bGVu
Z3RoPnsyfQorICAgICAgICAgICAgICAgIGlmICghc2Vjb25kLT5pc0xlbmd0aCgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgd2lkdGggPSBmaXJzdC0+Y29t
cHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXIt
PnJvb3RFbGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5j
b21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgorICAgICAgICAgICAgICAgIC8vIFRo
ZSB2YWx1ZSBvcmRlciBpcyBndWFyYW50ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJh
bWV0ZXIuCisgICAgICAgICAgICAgICAgaWYgKCFnZXRQYWdlU2l6ZUZyb21OYW1lKGZpcnN0LCBz
ZWNvbmQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDE6IHsKKyAgICAg
ICAgICAgIC8vIDxsZW5ndGg+IHwgYXV0byB8IDxwYWdlLXNpemU+IHwgWyBwb3J0cmFpdCB8IGxh
bmRzY2FwZV0KKyAgICAgICAgICAgIGlmICghaW5zcGVjdG9yLmZpcnN0KCktPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KGluc3BlY3Rvci5maXJzdCgpKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNM
ZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+CisgICAgICAgICAgICAgICAg
cGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOworICAgICAgICAgICAgICAgIHdpZHRo
ID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86CisgICAgICAg
ICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlUG9ydHJhaXQ6Cisg
ICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPX1BPUlRSQUlU
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlTGFuZHNjYXBlOgorICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJ
WkVfQVVUT19MQU5EU0NBUEU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIC8vIDxwYWdlLXNpemU+CisgICAg
ICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFnZXRQYWdlU2l6ZUZyb21OYW1lKHByaW1pdGl2ZVZhbHVlLCAw
LCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFBhZ2VTaXplVHlwZShwYWdlU2l6ZVR5cGUp
OworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRQYWdlU2l6ZShMZW5ndGhTaXpl
KHdpZHRoLCBoZWlnaHQpKTsKKyAgICB9CisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwg
JmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KK307CisKK2NsYXNzIEFwcGx5UHJv
cGVydHlUZXh0RW1waGFzaXNTdHlsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
KyAgICB7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0Zp
bGwoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKKyAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNNYXJrKCkpOworICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldFRleHRFbXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNG
aWxsKCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNN
YXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKKyAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHls
ZTo6aW5pdGlhbFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVM
aXN0KCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENT
U1ZhbHVlTGlzdCo+KHZhbHVlKTsKKyAgICAgICAgICAgIEFTU0VSVChsaXN0LT5sZW5ndGgoKSA9
PSAyKTsKKyAgICAgICAgICAgIGlmIChsaXN0LT5sZW5ndGgoKSAhPSAyKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyOyArK2kp
IHsKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihp
dGVtKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVG
aWxsZWQgfHwgdmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKQorICAgICAgICAgICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCp2YWx1
ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKCp2YWx1ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0
b21NYXJrKG51bGxBdG9tKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOworICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJr
Q3VzdG9tKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc0N1c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7CisKKyAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlT3BlbikgeworICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqcHJpbWl0aXZlVmFsdWUpOworICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0
RW1waGFzaXNNYXJrQXV0byk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxs
ZWQpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lz
TWFyaygqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZh
cHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KK307
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULAorICAgICAgICAgIFQgKEFuaW1hdGlvbjo6KmdldHRl
ckZ1bmN0aW9uKSgpIGNvbnN0LAorICAgICAgICAgIHZvaWQgKEFuaW1hdGlvbjo6KnNldHRlckZ1
bmN0aW9uKShUKSwKKyAgICAgICAgICBib29sIChBbmltYXRpb246Oip0ZXN0RnVuY3Rpb24pKCkg
Y29uc3QsCisgICAgICAgICAgdm9pZCAoQW5pbWF0aW9uOjoqY2xlYXJGdW5jdGlvbikoKSwKKyAg
ICAgICAgICBUICgqaW5pdGlhbEZ1bmN0aW9uKSgpLAorICAgICAgICAgIHZvaWQgKENTU1RvU3R5
bGVNYXA6OiptYXBGdW5jdGlvbikoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKSwKKyAgICAgICAgICBB
bmltYXRpb25MaXN0KiAoUmVuZGVyU3R5bGU6OiphbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKSwK
KyAgICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiAoUmVuZGVyU3R5bGU6OippbW11dGFibGVB
bmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKSBjb25zdD4KK2NsYXNzIEFwcGx5UHJvcGVydHlBbmlt
YXRpb24geworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKEFuaW1hdGlvbiogYW5p
bWF0aW9uLCBUIHZhbHVlKSB7IChhbmltYXRpb24tPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9
CisgICAgc3RhdGljIFQgdmFsdWUoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24pIHsgcmV0dXJu
IChhbmltYXRpb24tPipnZXR0ZXJGdW5jdGlvbikoKTsgfQorICAgIHN0YXRpYyBib29sIHRlc3Qo
Y29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24pIHsgcmV0dXJuIChhbmltYXRpb24tPip0ZXN0RnVu
Y3Rpb24pKCk7IH0KKyAgICBzdGF0aWMgdm9pZCBjbGVhcihBbmltYXRpb24qIGFuaW1hdGlvbikg
eyAoYW5pbWF0aW9uLT4qY2xlYXJGdW5jdGlvbikoKTsgfQorICAgIHN0YXRpYyBUIGluaXRpYWwo
KSB7IHJldHVybiAoKmluaXRpYWxGdW5jdGlvbikoKTsgfQorICAgIHN0YXRpYyB2b2lkIG1hcChT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFs
dWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRnVuY3Rpb24pKGFu
aW1hdGlvbiwgdmFsdWUpOyB9CisgICAgc3RhdGljIEFuaW1hdGlvbkxpc3QqIGFjY2Vzc0FuaW1h
dGlvbnMoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPiphbmltYXRpb25HZXR0
ZXJGdW5jdGlvbikoKTsgfQorICAgIHN0YXRpYyBjb25zdCBBbmltYXRpb25MaXN0KiBhbmltYXRp
b25zKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qaW1tdXRhYmxlQW5pbWF0
aW9uR2V0dGVyRnVuY3Rpb24pKCk7IH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgewor
ICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29s
dmVyLT5zdHlsZSgpKTsKKyAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50TGlzdCA9
IGFuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSk7CisgICAgICAgIHNpemVf
dCBpID0gMCwgcGFyZW50U2l6ZSA9IHBhcmVudExpc3QgPyBwYXJlbnRMaXN0LT5zaXplKCkgOiAw
OworICAgICAgICBmb3IgKCA7IGkgPCBwYXJlbnRTaXplICYmIHRlc3QocGFyZW50TGlzdC0+YW5p
bWF0aW9uKGkpKTsgKytpKSB7CisgICAgICAgICAgICBpZiAobGlzdC0+c2l6ZSgpIDw9IGkpCisg
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOworICAgICAg
ICAgICAgc2V0VmFsdWUobGlzdC0+YW5pbWF0aW9uKGkpLCB2YWx1ZShwYXJlbnRMaXN0LT5hbmlt
YXRpb24oaSkpKTsKKyAgICAgICAgICAgIGxpc3QtPmFuaW1hdGlvbihpKS0+c2V0QW5pbWF0aW9u
TW9kZShwYXJlbnRMaXN0LT5hbmltYXRpb24oaSktPmFuaW1hdGlvbk1vZGUoKSk7CisgICAgICAg
IH0KKworICAgICAgICAvKiBSZXNldCBhbnkgcmVtYWluaW5nIGFuaW1hdGlvbnMgdG8gbm90IGhh
dmUgdGhlIHByb3BlcnR5IHNldC4gKi8KKyAgICAgICAgZm9yICggOyBpIDwgbGlzdC0+c2l6ZSgp
OyArK2kpCisgICAgICAgICAgICBjbGVhcihsaXN0LT5hbmltYXRpb24oaSkpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIEFuaW1hdGlv
bkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOwor
ICAgICAgICBpZiAobGlzdC0+aXNFbXB0eSgpKQorICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFu
aW1hdGlvbjo6Y3JlYXRlKCkpOworICAgICAgICBzZXRWYWx1ZShsaXN0LT5hbmltYXRpb24oMCks
IGluaXRpYWwoKSk7CisgICAgICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0
VHJhbnNpdGlvblByb3BlcnR5KQorICAgICAgICAgICAgbGlzdC0+YW5pbWF0aW9uKDApLT5zZXRB
bmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZUFsbCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAxOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjbGVhcihsaXN0LT5h
bmltYXRpb24oaSkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAgIHNpemVfdCBjaGlsZEluZGV4ID0gMDsKKyAg
ICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CisgICAgICAgICAgICAvKiBXYWxrIGVh
Y2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGFuIGFuaW1hdGlvbiwgY3JlYXRpbmcgbmV3IGFuaW1h
dGlvbnMgYXMgbmVlZGVkLiAqLworICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRv
ciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAgICAgICAg
IGlmIChjaGlsZEluZGV4IDw9IGxpc3QtPnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOworICAgICAgICAgICAgICAgIG1hcChzdHls
ZVJlc29sdmVyLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIGkudmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgKytjaGlsZEluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7CisgICAgICAgICAgICBtYXAoc3R5bGVSZXNv
bHZlciwgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZSk7CisgICAgICAgICAgICBj
aGlsZEluZGV4ID0gMTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKCA7IGNoaWxkSW5kZXggPCBs
aXN0LT5zaXplKCk7ICsrY2hpbGRJbmRleCkgeworICAgICAgICAgICAgLyogUmVzZXQgYWxsIHJl
bWFpbmluZyBhbmltYXRpb25zIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovCisgICAg
ICAgICAgICBjbGVhcihsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1
cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVl
LCAmYXBwbHlWYWx1ZSk7IH0KK307CisKK2NsYXNzIEFwcGx5UHJvcGVydHlPdXRsaW5lU3R5bGUg
eworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAg
ICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6
Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRs
aW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxp
bmVTdHlsZUlzQXV0bz46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVu
ZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91
dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHls
ZT46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIEFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVT
dHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJ
c0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlz
QXV0bz46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAg
ICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6
Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHls
ZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5
SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBBcHBs
eVByb3BlcnR5RGVmYXVsdDxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHls
ZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1
dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0
bz46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGlu
ZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9y
ZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZh
cHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KK307
CisKK2NsYXNzIEFwcGx5UHJvcGVydHlSZXNpemUgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUp
OworCisgICAgICAgIEVSZXNpemUgciA9IFJFU0laRV9OT05FOworICAgICAgICBzd2l0Y2ggKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86CisgICAgICAgICAgICBpZiAoU2V0
dGluZ3MqIHNldHRpbmdzID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkK
KyAgICAgICAgICAgICAgICByID0gc2V0dGluZ3MtPnRleHRBcmVhc0FyZVJlc2l6YWJsZSgpID8g
UkVTSVpFX0JPVEggOiBSRVNJWkVfTk9ORTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgciA9ICpwcmltaXRpdmVWYWx1ZTsKKyAgICAgICAgfQorICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRSZXNpemUocik7CisgICAgfQorCisgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIFBy
b3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVSZXNpemUs
ICZSZW5kZXJTdHlsZTo6cmVzaXplLCBFUmVzaXplLCAmUmVuZGVyU3R5bGU6OnNldFJlc2l6ZSwg
RVJlc2l6ZSwgJlJlbmRlclN0eWxlOjppbml0aWFsUmVzaXplPjo6Y3JlYXRlSGFuZGxlcigpOwor
ICAgICAgICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCks
IGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKKyAgICB9Cit9OworCitj
bGFzcyBBcHBseVByb3BlcnR5VmVydGljYWxBbGlnbiB7CitwdWJsaWM6CisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSk7CisKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24oKnByaW1p
dGl2ZVZhbHVlKTsKKworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNh
bEFsaWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2Vy
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBW
aWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSkpOworICAgIH0KKworICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3Jl
YXRlSGFuZGxlcigpCisgICAgeworICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFw
cGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFVmVydGljYWxBbGlnbiwgJlJlbmRlclN0eWxlOjp2ZXJ0
aWNhbEFsaWduLCBFVmVydGljYWxBbGlnbiwgJlJlbmRlclN0eWxlOjpzZXRWZXJ0aWNhbEFsaWdu
LCBFVmVydGljYWxBbGlnbiwgJlJlbmRlclN0eWxlOjppbml0aWFsVmVydGljYWxBbGlnbj46OmNy
ZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmlu
aGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7
CisgICAgfQorfTsKKworY2xhc3MgQXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgaWYgKCFzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpLT5oYXNBc3BlY3RSYXRpbygpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsK
KyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRv
cihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkp
OworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRv
cihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oUmVuZGVyU3R5bGU6OmluaXRpYWxIYXNB
c3BlY3RSYXRpbygpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0
UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVub21pbmF0
b3IoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVt
ZXJhdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAo
IXZhbHVlLT5pc0FzcGVjdFJhdGlvVmFsdWUoKSkgeworICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oZmFsc2UpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVjdFJhdGlvVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVlKj4odmFsdWUpOworICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RS
YXRpb1ZhbHVlLT5kZW5vbWluYXRvclZhbHVlKCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5udW1lcmF0
b3JWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhh
bmRsZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhl
cml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOworICAgIH0KK307CisK
K2NsYXNzIEFwcGx5UHJvcGVydHlab29tIHsKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgcmVz
ZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAg
ICAgICAvLyBSZXNldCB0aGUgem9vbSBpbiBlZmZlY3QuIFRoaXMgYWxsb3dzIHRoZSBzZXRab29t
IG1ldGhvZCB0byBhY2N1cmF0ZWx5IGNvbXB1dGUgYSBuZXcgem9vbSBpbiBlZmZlY3QuCisgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKSA/IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSA6
IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVz
b2x2ZXIpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCktPnpvb20oKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAg
ICB7CisgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsK
KyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7CisgICAgICAgICAgICByZXNldEVmZmVj
dGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRa
b29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7CisgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgp
KTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRp
YWxab29tKCkpOworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVu
dFN0eWxlKCktPnpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpOworICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c2V0RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKKyAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnNldFpvb20oZG9jWm9vbSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7CisgICAgICAgICAgICByZXNldEVmZmVjdGl2
ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBpZiAoZmxvYXQgcGVyY2VudCA9IHBy
aW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCisgICAgICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Wm9vbShwZXJjZW50IC8gMTAwLjBmKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29t
KHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgaWYgKGZsb2F0IG51bWJlciA9IHByaW1pdGl2
ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCisgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c2V0Wm9vbShudW1iZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFByb3BlcnR5
SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eUhh
bmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVl
KTsKKyAgICB9Cit9OworCitjbGFzcyBBcHBseVByb3BlcnR5RGlzcGxheSB7Citwcml2YXRlOgor
ICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkRGlzcGxheVZhbHVlKFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIEVEaXNwbGF5IGRpc3BsYXlQcm9wZXJ0eVZhbHVlKQorICAgIHsKKyNp
ZiBFTkFCTEUoU1ZHKQorICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpICYmIHN0
eWxlUmVzb2x2ZXItPmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCisgICAgICAgICAgICByZXR1cm4gKGRp
c3BsYXlQcm9wZXJ0eVZhbHVlID09IElOTElORSB8fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBC
TE9DSyB8fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBOT05FKTsKKyNlbHNlCisgICAgICAgIFVO
VVNFRF9QQVJBTShzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlQ
cm9wZXJ0eVZhbHVlKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIEVEaXNwbGF5IGRpc3Bs
YXkgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5kaXNwbGF5KCk7CisgICAgICAgIGlm
ICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShk
aXNwbGF5KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShSZW5kZXJTdHlsZTo6aW5pdGlhbERp
c3BsYXkoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
eworICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9ICpzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKTsKKworICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUo
c3R5bGVSZXNvbHZlciwgZGlzcGxheSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxW
YWx1ZSwgJmFwcGx5VmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlIDxDbGlwUGF0aE9wZXJh
dGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+KSwg
Q2xpcFBhdGhPcGVyYXRpb24qICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgorY2xhc3MgQXBwbHlQcm9w
ZXJ0eUNsaXBQYXRoIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJT
dHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IHZhbHVlKSB7IChzdHls
ZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Cisg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7CisgICAgICAgICAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJhc2ljU2hh
cGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgp
KSkpOworICAgICAgICAgICAgfQorI2lmIEVOQUJMRShTVkcpCisgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGNzc1VSTFZhbHVlID0gcHJpbWl0aXZl
VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBzdHls
ZVJlc29sdmVyLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChjc3NVUkxWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IEl0IGRvZXNuJ3Qgd29yayB3aXRoIGZvcndhcmQgb3IgZXh0ZXJu
YWwgU1ZHIHJlZmVyZW5jZXMgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTA0MDUpCisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgUmVmZXJlbmNlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShjc3NVUkxWYWx1ZSwgdXJs
LmZyYWdtZW50SWRlbnRpZmllcigpKSk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAg
fQorICAgIH0KKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAg
IHsKKyAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVs
dEJhc2U8Q2xpcFBhdGhPcGVyYXRpb24qLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxDbGlw
UGF0aE9wZXJhdGlvbj4sIHNldHRlckZ1bmN0aW9uLCBDbGlwUGF0aE9wZXJhdGlvbiosIGluaXRp
YWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFu
ZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigp
LCAmYXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKworI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykK
K3RlbXBsYXRlIDxFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5j
dGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFzc1Jl
ZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiksIEV4Y2x1c2lvblNoYXBlVmFsdWUqICgqaW5pdGlh
bEZ1bmN0aW9uKSgpPgorY2xhc3MgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNoYXBlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQ
dHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24p
KHZhbHVlKTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpOworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlQXV0bykKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCAwKTsKKyAgICAgICAgICAgIC8vIEZJWE1FIEJ1ZyAxMDI1NzE6IExheW91dCBmb3Ig
dGhlIHZhbHVlICdvdXRzaWRlLXNoYXBlJyBpcyBub3QgeWV0IGltcGxlbWVudGVkCisgICAgICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU91dHNp
ZGVTaGFwZSkKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSk7CisgICAgICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7CisgICAgICAgICAgICAgICAg
UmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6
Y3JlYXRlU2hhcGVWYWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlciwgcHJpbWl0
aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0
eURlZmF1bHRCYXNlPEV4Y2x1c2lvblNoYXBlVmFsdWUqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1Jl
ZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiwgc2V0dGVyRnVuY3Rpb24sIEV4Y2x1c2lvblNoYXBl
VmFsdWUqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7CisgICAgICAgIHJldHVy
biBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0
aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOworICAgIH0KK307CisjZW5kaWYKKworI2lmIEVO
QUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKK2NsYXNzIEFwcGx5UHJvcGVydHlJbWFnZVJlc29s
dXRpb24geworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7
CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25Tb3VyY2Us
ICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3Vy
Y2UsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRp
b25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZT46OmFw
cGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBBcHBs
eVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpp
bWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNl
dEltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlE
LCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0
LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0
SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0
aW9uPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgQXBw
bHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxl
OjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0
eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJl
bmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbml0aWFsVmFs
dWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZh
dWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlv
blNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0
aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VS
ZXNvbHV0aW9uU25hcD46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHls
ZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRp
b24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBseUlu
aXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIENTU1ZhbHVlTGlzdCogdmFs
dWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOworICAgICAgICBJbWFn
ZVJlc29sdXRpb25Tb3VyY2Ugc291cmNlID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29s
dXRpb25Tb3VyY2UoKTsKKyAgICAgICAgSW1hZ2VSZXNvbHV0aW9uU25hcCBzbmFwID0gUmVuZGVy
U3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwKCk7CisgICAgICAgIGRvdWJsZSByZXNv
bHV0aW9uID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24oKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAg
ICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KGkpOworICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOworICAgICAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRnJvbUltYWdl
KQorICAgICAgICAgICAgICAgIHNvdXJjZSA9IEltYWdlUmVzb2x1dGlvbkZyb21JbWFnZTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
U25hcCkKKyAgICAgICAgICAgICAgICBzbmFwID0gSW1hZ2VSZXNvbHV0aW9uU25hcFBpeGVsczsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXNvbHV0aW9uID0gcHJpbWl0aXZl
VmFsdWUtPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCk7CisgICAg
ICAgIH0KKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9u
U291cmNlKHNvdXJjZSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEltYWdl
UmVzb2x1dGlvblNuYXAoc25hcCk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEltYWdlUmVzb2x1dGlvbihyZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUHJvcGVy
dHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5
SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFs
dWUpOworICAgIH0KK307CisjZW5kaWYKKworY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRJbmRlbnQg
eworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0SW5kZW50KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxl
KCktPnRleHRJbmRlbnQoKSk7CisjaWYgRU5BQkxFKENTUzNfVEVYVCkKKyAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEluZGVudExpbmUoc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKS0+dGV4dEluZGVudExpbmUoKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dEluZGVudChSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRlbnQoKSk7CisjaWYgRU5BQkxFKENT
UzNfVEVYVCkKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEluZGVudExp
bmUoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50TGluZSgpKTsKKyNlbmRpZgorICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2
YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBb
IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IF0gLXdlYmtpdC1lYWNoLWxpbmUKKyAgICAgICAgLy8g
VGhlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJzZXI6OnBhcnNlVGV4dEluZGVudC4K
KyAgICAgICAgLy8gVGhlIHNlY29uZCB2YWx1ZSwgLXdlYmtpdC1lYWNoLWxpbmUgaXMgaGFuZGxl
ZCBvbmx5IHdoZW4gQ1NTM19URVhUIGlzIGVuYWJsZWQuCisKKyAgICAgICAgQ1NTVmFsdWVMaXN0
KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CisgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKKyAgICAg
ICAgTGVuZ3RoIGxlbmd0aE9yUGVyY2VudGFnZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZl
cnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBD
YWxjdWxhdGVkQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgQVNTRVJUKCFs
ZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZS5pc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dEluZGVudChsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZSk7CisK
KyNpZiBFTkFCTEUoQ1NTM19URVhUKQorICAgICAgICBBU1NFUlQodmFsdWVMaXN0LT5sZW5ndGgo
KSA8PSAyKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGVhY2hMaW5lVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlTGlzdC0+aXRlbSgxKSk7CisgICAgICAg
IGlmIChlYWNoTGluZVZhbHVlKSB7CisgICAgICAgICAgICBBU1NFUlQoZWFjaExpbmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdEVhY2hMaW5lKTsKKyAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRJbmRlbnRMaW5lKFRleHRJbmRlbnRFYWNoTGluZSk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
VGV4dEluZGVudExpbmUoVGV4dEluZGVudEZpcnN0TGluZSk7CisjZW5kaWYKKyAgICB9CisKKyAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxW
YWx1ZSwgJmFwcGx5VmFsdWUpOworICAgIH0KK307CisKK2NvbnN0IERlcHJlY2F0ZWRTdHlsZUJ1
aWxkZXImIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChEZXByZWNhdGVkU3R5bGVCdWlsZGVyLCBzdHlsZUJ1aWxk
ZXJJbnN0YW5jZSwgKCkpOworICAgIHJldHVybiBzdHlsZUJ1aWxkZXJJbnN0YW5jZTsKK30KKwor
RGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcigpCit7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCisgICAgICAgIG1fcHJv
cGVydHlNYXBbaV0gPSBQcm9wZXJ0eUhhbmRsZXIoKTsKKworICAgIC8vIFBsZWFzZSBrZWVwIENT
UyBwcm9wZXJ0eSBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRlci4KKyAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudCwgQXBwbHlQcm9wZXJ0eUZpbGxM
YXllcjxFRmlsbEF0dGFjaG1lbnQsIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsIEJh
Y2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywg
JlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjppc0F0dGFjaG1lbnRT
ZXQsICZGaWxsTGF5ZXI6OmF0dGFjaG1lbnQsICZGaWxsTGF5ZXI6OnNldEF0dGFjaG1lbnQsICZG
aWxsTGF5ZXI6OmNsZWFyQXR0YWNobWVudCwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxBdHRhY2ht
ZW50LCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQ+OjpjcmVhdGVIYW5kbGVyKCkp
OworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwLCBBcHBs
eVByb3BlcnR5RmlsbExheWVyPEVGaWxsQm94LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwLCBC
YWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMs
ICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNDbGlwU2V0LCAm
RmlsbExheWVyOjpjbGlwLCAmRmlsbExheWVyOjpzZXRDbGlwLCAmRmlsbExheWVyOjpjbGVhckNs
aXAsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ2xpcCwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxD
bGlwPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IsIEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50
LCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZ3Jv
dW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IsICZS
ZW5kZXJTdHlsZTo6aW52YWxpZENvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsIEFwcGx5UHJvcGVydHlGaWxs
TGF5ZXI8U3R5bGVJbWFnZSosIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCBCYWNrZ3JvdW5k
RmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJT
dHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNJbWFnZVNldCwgJkZpbGxMYXll
cjo6aW1hZ2UsICZGaWxsTGF5ZXI6OnNldEltYWdlLCAmRmlsbExheWVyOjpjbGVhckltYWdlLCAm
RmlsbExheWVyOjppbml0aWFsRmlsbEltYWdlLCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEltYWdl
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kT3JpZ2luLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEVGaWxsQm94LCBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRPcmlnaW4sIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6
YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAm
RmlsbExheWVyOjppc09yaWdpblNldCwgJkZpbGxMYXllcjo6b3JpZ2luLCAmRmlsbExheWVyOjpz
ZXRPcmlnaW4sICZGaWxsTGF5ZXI6OmNsZWFyT3JpZ2luLCAmRmlsbExheWVyOjppbml0aWFsRmls
bE9yaWdpbiwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmlnaW4+OjpjcmVhdGVIYW5kbGVyKCkp
OworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgs
IEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8TGVuZ3RoLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3Np
dGlvblgsIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3Vu
ZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjppc1hQ
b3NpdGlvblNldCwgJkZpbGxMYXllcjo6eFBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRYUG9zaXRp
b24sICZGaWxsTGF5ZXI6OmNsZWFyWFBvc2l0aW9uLCAmRmlsbExheWVyOjppbml0aWFsRmlsbFhQ
b3NpdGlvbiwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24+OjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlv
blksIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8TGVuZ3RoLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRQ
b3NpdGlvblksIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dy
b3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjpp
c1lQb3NpdGlvblNldCwgJkZpbGxMYXllcjo6eVBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRZUG9z
aXRpb24sICZGaWxsTGF5ZXI6OmNsZWFyWVBvc2l0aW9uLCAmRmlsbExheWVyOjppbml0aWFsRmls
bFlQb3NpdGlvbiwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxZUG9zaXRpb24+OjpjcmVhdGVIYW5k
bGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBl
YXRYLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEVGaWxsUmVwZWF0LCBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRSZXBlYXRYLCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0Jh
Y2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXll
cjo6aXNSZXBlYXRYU2V0LCAmRmlsbExheWVyOjpyZXBlYXRYLCAmRmlsbExheWVyOjpzZXRSZXBl
YXRYLCAmRmlsbExheWVyOjpjbGVhclJlcGVhdFgsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVw
ZWF0WCwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRYPjo6Y3JlYXRlSGFuZGxlcigpKTsK
KyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WSwgQXBw
bHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbFJlcGVhdCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVw
ZWF0WSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5k
TGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzUmVw
ZWF0WVNldCwgJkZpbGxMYXllcjo6cmVwZWF0WSwgJkZpbGxMYXllcjo6c2V0UmVwZWF0WSwgJkZp
bGxMYXllcjo6Y2xlYXJSZXBlYXRZLCAmRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFksICZD
U1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsIEFwcGx5UHJvcGVydHlG
aWxsTGF5ZXI8RmlsbFNpemUsIENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsIEJhY2tncm91bmRG
aWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0
eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjppc1NpemVTZXQsICZGaWxsTGF5ZXI6
OnNpemUsICZGaWxsTGF5ZXI6OnNldFNpemUsICZGaWxsTGF5ZXI6OmNsZWFyU2l6ZSwgJkZpbGxM
YXllcjo6aW5pdGlhbEZpbGxTaXplLCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemU+OjpjcmVh
dGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbUNvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwgJlJlbmRl
clN0eWxlOjpib3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21D
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yLCAmUmVu
ZGVyU3R5bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21MZWZ0UmFkaXVzLCBBcHBseVByb3BlcnR5Qm9yZGVy
UmFkaXVzPCZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxl
OjpzZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJS
YWRpdXM+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCBBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVzPCZS
ZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9y
ZGVyQm90dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclJhZGl1cz46
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9y
ZGVyQm90dG9tU3R5bGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVCb3JkZXJTdHlsZSwgJlJlbmRl
clN0eWxlOjpib3JkZXJCb3R0b21TdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNl
dEJvcmRlckJvdHRvbVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJv
cmRlclN0eWxlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg8dW5z
aWduZWQsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0
Qm9yZGVyQm90dG9tV2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlcldpZHRoLCBOb3Jt
YWxEaXNhYmxlZCwgVGhpY2tuZXNzRW5hYmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyQ29sbGFwc2UsIEFwcGx5UHJvcGVydHlE
ZWZhdWx0PEVCb3JkZXJDb2xsYXBzZSwgJlJlbmRlclN0eWxlOjpib3JkZXJDb2xsYXBzZSwgRUJv
cmRlckNvbGxhcHNlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckNvbGxhcHNlLCBFQm9yZGVyQ29s
bGFwc2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlckNvbGxhcHNlPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91dHNl
dCwgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8Qm9yZGVySW1hZ2UsIE91dHNldD46
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9y
ZGVySW1hZ2VSZXBlYXQsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPEJvcmRlcklt
YWdlLCBSZXBlYXQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2UsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlm
aWVyPEJvcmRlckltYWdlLCBTbGljZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2UsIEFwcGx5UHJvcGVydHlCb3Jk
ZXJJbWFnZVNvdXJjZTxDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6
OmJvcmRlckltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlU291cmNlLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJJbWFnZVNvdXJjZT46OmNyZWF0ZUhhbmRsZXIoKSk7
CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aCwgQXBw
bHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8Qm9yZGVySW1hZ2UsIFdpZHRoPjo6Y3JlYXRl
SGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0
Q29sb3IsIEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50LCAmUmVuZGVyU3R5
bGU6OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6
Y29sb3I+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eUJvcmRlckxlZnRTdHlsZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJvcmRlclN0eWxlLCAm
UmVuZGVyU3R5bGU6OmJvcmRlckxlZnRTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6
OnNldEJvcmRlckxlZnRTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxC
b3JkZXJTdHlsZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoLCBBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDx1bnNp
Z25lZCwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9y
ZGVyTGVmdFdpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJXaWR0aCwgTm9ybWFsRGlz
YWJsZWQsIFRoaWNrbmVzc0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsIEFwcGx5UHJvcGVydHlDb2xv
cjxOb0luaGVyaXRGcm9tUGFyZW50LCAmUmVuZGVyU3R5bGU6OmJvcmRlclJpZ2h0Q29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVk
TGlua0JvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3I+OjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGUs
IEFwcGx5UHJvcGVydHlEZWZhdWx0PEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpib3JkZXJS
aWdodFN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRTdHls
ZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyUmln
aHRXaWR0aCwgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg8dW5zaWduZWQsICZSZW5kZXJTdHls
ZTo6Ym9yZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodFdpZHRoLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJXaWR0aCwgTm9ybWFsRGlzYWJsZWQsIFRoaWNrbmVz
c0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eUJvcmRlclRvcENvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBh
cmVudCwgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3Jk
ZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlclRvcENvbG9yLCAm
UmVuZGVyU3R5bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzLCBBcHBseVByb3BlcnR5Qm9yZGVy
UmFkaXVzPCZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpz
ZXRCb3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJSYWRpdXM+
OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJv
cmRlclRvcFJpZ2h0UmFkaXVzLCBBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVzPCZSZW5kZXJTdHls
ZTo6Ym9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wUmlnaHRS
YWRpdXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclJhZGl1cz46OmNyZWF0ZUhhbmRsZXIo
KSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGUsIEFw
cGx5UHJvcGVydHlEZWZhdWx0PEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BT
dHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcFN0eWxlLCBFQm9y
ZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwg
QXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg8dW5zaWduZWQsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
VG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEJvcmRlcldpZHRoLCBOb3JtYWxEaXNhYmxlZCwgVGhpY2tuZXNzRW5hYmxlZD46OmNy
ZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm90dG9t
LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6Ym90dG9tLCAmUmVuZGVyU3R5bGU6
OnNldEJvdHRvbSwgJlJlbmRlclN0eWxlOjppbml0aWFsT2Zmc2V0LCBBdXRvRW5hYmxlZD46OmNy
ZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm94U2l6
aW5nLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm94U2l6aW5nLCAmUmVuZGVyU3R5bGU6OmJveFNp
emluZywgRUJveFNpemluZywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaXppbmcsIEVCb3hTaXppbmcs
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFNpemluZz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Q2FwdGlvblNpZGUsIEFwcGx5UHJvcGVydHlE
ZWZhdWx0PEVDYXB0aW9uU2lkZSwgJlJlbmRlclN0eWxlOjpjYXB0aW9uU2lkZSwgRUNhcHRpb25T
aWRlLCAmUmVuZGVyU3R5bGU6OnNldENhcHRpb25TaWRlLCBFQ2FwdGlvblNpZGUsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbENhcHRpb25TaWRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlDbGVhciwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUNsZWFy
LCAmUmVuZGVyU3R5bGU6OmNsZWFyLCBFQ2xlYXIsICZSZW5kZXJTdHlsZTo6c2V0Q2xlYXIsIEVD
bGVhciwgJlJlbmRlclN0eWxlOjppbml0aWFsQ2xlYXI+OjpjcmVhdGVIYW5kbGVyKCkpOworICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUNsaXAsIEFwcGx5UHJvcGVydHlDbGlwOjpj
cmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUNvbG9y
LCBBcHBseVByb3BlcnR5Q29sb3I8SW5oZXJpdEZyb21QYXJlbnQsICZSZW5kZXJTdHlsZTo6Y29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtD
b2xvciwgJlJlbmRlclN0eWxlOjppbnZhbGlkQ29sb3IsIFJlbmRlclN0eWxlOjppbml0aWFsQ29s
b3I+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eUNvdW50ZXJJbmNyZW1lbnQsIEFwcGx5UHJvcGVydHlDb3VudGVyPEluY3JlbWVudD46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Q291bnRlclJl
c2V0LCBBcHBseVByb3BlcnR5Q291bnRlcjxSZXNldD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Q3Vyc29yLCBBcHBseVByb3BlcnR5Q3Vyc29y
OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eURp
cmVjdGlvbiwgQXBwbHlQcm9wZXJ0eURpcmVjdGlvbjwmUmVuZGVyU3R5bGU6OmRpcmVjdGlvbiwg
JlJlbmRlclN0eWxlOjpzZXREaXJlY3Rpb24sIFJlbmRlclN0eWxlOjppbml0aWFsRGlyZWN0aW9u
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlE
aXNwbGF5LCBBcHBseVByb3BlcnR5RGlzcGxheTo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlFbXB0eUNlbGxzLCBBcHBseVByb3BlcnR5RGVmYXVs
dDxFRW1wdHlDZWxsLCAmUmVuZGVyU3R5bGU6OmVtcHR5Q2VsbHMsIEVFbXB0eUNlbGwsICZSZW5k
ZXJTdHlsZTo6c2V0RW1wdHlDZWxscywgRUVtcHR5Q2VsbCwgJlJlbmRlclN0eWxlOjppbml0aWFs
RW1wdHlDZWxscz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5RmxvYXQsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVGbG9hdCwgJlJlbmRlclN0eWxl
OjpmbG9hdGluZywgRUZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEZsb2F0aW5nLCBFRmxvYXQsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEZsb2F0aW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBBcHBseVByb3BlcnR5Rm9udEZh
bWlseTo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlGb250U2l6ZSwgQXBwbHlQcm9wZXJ0eUZvbnRTaXplOjpjcmVhdGVIYW5kbGVyKCkpOworICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgQXBwbHlQcm9wZXJ0eUZv
bnQ8Rm9udEl0YWxpYywgJkZvbnREZXNjcmlwdGlvbjo6aXRhbGljLCAmRm9udERlc2NyaXB0aW9u
OjpzZXRJdGFsaWMsIEZvbnRJdGFsaWNPZmY+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBBcHBseVByb3BlcnR5Rm9udDxG
b250U21hbGxDYXBzLCAmRm9udERlc2NyaXB0aW9uOjpzbWFsbENhcHMsICZGb250RGVzY3JpcHRp
b246OnNldFNtYWxsQ2FwcywgRm9udFNtYWxsQ2Fwc09mZj46OmNyZWF0ZUhhbmRsZXIoKSk7Cisg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Rm9udFdlaWdodCwgQXBwbHlQcm9wZXJ0
eUZvbnRXZWlnaHQ6OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5SGVpZ2h0LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6aGVpZ2h0
LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdodCwgJlJlbmRlclN0eWxlOjppbml0aWFsU2l6ZSwgQXV0
b0VuYWJsZWQsIExlZ2FjeUludHJpbnNpY0VuYWJsZWQsIEludHJpbnNpY0Rpc2FibGVkLCBOb25l
RGlzYWJsZWQsIFVuZGVmaW5lZERpc2FibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyNpZiBFTkFC
TEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eUltYWdlT3JpZW50YXRpb24sIEFwcGx5UHJvcGVydHlEZWZhdWx0PEltYWdlT3JpZW50YXRp
b25FbnVtLCAmUmVuZGVyU3R5bGU6OmltYWdlT3JpZW50YXRpb24sIEltYWdlT3JpZW50YXRpb25F
bnVtLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlT3JpZW50YXRpb24sIEltYWdlT3JpZW50YXRpb25F
bnVtLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZU9yaWVudGF0aW9uPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyNlbmRpZgorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUltYWdlUmVu
ZGVyaW5nLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFSW1hZ2VSZW5kZXJpbmcsICZSZW5kZXJTdHls
ZTo6aW1hZ2VSZW5kZXJpbmcsIEVJbWFnZVJlbmRlcmluZywgJlJlbmRlclN0eWxlOjpzZXRJbWFn
ZVJlbmRlcmluZywgRUltYWdlUmVuZGVyaW5nLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJl
bmRlcmluZz46OmNyZWF0ZUhhbmRsZXIoKSk7CisjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVU
SU9OKQorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbiwg
QXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbjo6Y3JlYXRlSGFuZGxlcigpKTsKKyNlbmRpZgor
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUxlZnQsIEFwcGx5UHJvcGVydHlMZW5n
dGg8JlJlbmRlclN0eWxlOjpsZWZ0LCAmUmVuZGVyU3R5bGU6OnNldExlZnQsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbE9mZnNldCwgQXV0b0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUxldHRlclNwYWNpbmcsIEFwcGx5UHJvcGVydHlD
b21wdXRlTGVuZ3RoPGludCwgJlJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5
bGU6OnNldExldHRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6aW5pdGlhbExldHRlcldvcmRTcGFj
aW5nLCBOb3JtYWxFbmFibGVkLCBUaGlja25lc3NEaXNhYmxlZCwgU1ZHWm9vbUVuYWJsZWQ+Ojpj
cmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQsIEFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlLCBBcHBseVByb3BlcnR5
U3R5bGVJbWFnZTwmUmVuZGVyU3R5bGU6Omxpc3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6OnNl
dExpc3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxMaXN0U3R5bGVJbWFnZSwgQ1NT
UHJvcGVydHlMaXN0U3R5bGVJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5TGlzdFN0eWxlUG9zaXRpb24sIEFwcGx5UHJvcGVydHlEZWZh
dWx0PEVMaXN0U3R5bGVQb3NpdGlvbiwgJlJlbmRlclN0eWxlOjpsaXN0U3R5bGVQb3NpdGlvbiwg
RUxpc3RTdHlsZVBvc2l0aW9uLCAmUmVuZGVyU3R5bGU6OnNldExpc3RTdHlsZVBvc2l0aW9uLCBF
TGlzdFN0eWxlUG9zaXRpb24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbExpc3RTdHlsZVBvc2l0aW9u
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlM
aXN0U3R5bGVUeXBlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFTGlzdFN0eWxlVHlwZSwgJlJlbmRl
clN0eWxlOjpsaXN0U3R5bGVUeXBlLCBFTGlzdFN0eWxlVHlwZSwgJlJlbmRlclN0eWxlOjpzZXRM
aXN0U3R5bGVUeXBlLCBFTGlzdFN0eWxlVHlwZSwgJlJlbmRlclN0eWxlOjppbml0aWFsTGlzdFN0
eWxlVHlwZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5TWFyZ2luQm90dG9tLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bWFy
Z2luQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjpp
bml0aWFsTWFyZ2luLCBBdXRvRW5hYmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJv
cGVydHlIYW5kbGVyKENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwm
UmVuZGVyU3R5bGU6Om1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luTGVmdCwgJlJl
bmRlclN0eWxlOjppbml0aWFsTWFyZ2luLCBBdXRvRW5hYmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7
CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsIEFwcGx5UHJv
cGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjptYXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjpzZXRN
YXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjppbml0aWFsTWFyZ2luLCBBdXRvRW5hYmxlZD46OmNy
ZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5TWFyZ2lu
VG9wLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bWFyZ2luVG9wLCAmUmVuZGVy
U3R5bGU6OnNldE1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjppbml0aWFsTWFyZ2luLCBBdXRvRW5h
YmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5TWF4SGVpZ2h0LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bWF4SGVpZ2h0
LCAmUmVuZGVyU3R5bGU6OnNldE1heEhlaWdodCwgJlJlbmRlclN0eWxlOjppbml0aWFsTWF4U2l6
ZSwgQXV0b0VuYWJsZWQsIExlZ2FjeUludHJpbnNpY0VuYWJsZWQsIEludHJpbnNpY0Rpc2FibGVk
LCBOb25lRW5hYmxlZCwgVW5kZWZpbmVkRW5hYmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5TWF4V2lkdGgsIEFwcGx5UHJvcGVydHlMZW5n
dGg8JlJlbmRlclN0eWxlOjptYXhXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRNYXhXaWR0aCwgJlJl
bmRlclN0eWxlOjppbml0aWFsTWF4U2l6ZSwgQXV0b0VuYWJsZWQsIExlZ2FjeUludHJpbnNpY0Vu
YWJsZWQsIEludHJpbnNpY0VuYWJsZWQsIE5vbmVFbmFibGVkLCBVbmRlZmluZWRFbmFibGVkPjo6
Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlNaW5I
ZWlnaHQsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjptaW5IZWlnaHQsICZSZW5k
ZXJTdHlsZTo6c2V0TWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNaW5TaXplLCBBdXRv
RW5hYmxlZCwgTGVnYWN5SW50cmluc2ljRW5hYmxlZCwgSW50cmluc2ljRGlzYWJsZWQ+OjpjcmVh
dGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU1pbldpZHRo
LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bWluV2lkdGgsICZSZW5kZXJTdHls
ZTo6c2V0TWluV2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1pblNpemUsIEF1dG9FbmFibGVk
LCBMZWdhY3lJbnRyaW5zaWNFbmFibGVkLCBJbnRyaW5zaWNFbmFibGVkPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPcGFjaXR5LCBBcHBseVBy
b3BlcnR5RGVmYXVsdDxmbG9hdCwgJlJlbmRlclN0eWxlOjpvcGFjaXR5LCBmbG9hdCwgJlJlbmRl
clN0eWxlOjpzZXRPcGFjaXR5LCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsT3BhY2l0eT46
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5T3Jw
aGFucywgQXBwbHlQcm9wZXJ0eUF1dG88c2hvcnQsICZSZW5kZXJTdHlsZTo6b3JwaGFucywgJlJl
bmRlclN0eWxlOjpzZXRPcnBoYW5zLCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9PcnBoYW5zLCAmUmVu
ZGVyU3R5bGU6OnNldEhhc0F1dG9PcnBoYW5zPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IsIEFwcGx5UHJvcGVydHlDb2xv
cjxOb0luaGVyaXRGcm9tUGFyZW50LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVDb2xvciwgJlJlbmRl
clN0eWxlOjpzZXRPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtPdXRs
aW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3I+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQsIEFwcGx5UHJvcGVydHlD
b21wdXRlTGVuZ3RoPGludCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5
bGU6OnNldE91dGxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVPZmZzZXQ+
OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU91
dGxpbmVTdHlsZSwgQXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6Y3JlYXRlSGFuZGxlcigpKTsK
KyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGgsIEFwcGx5UHJv
cGVydHlDb21wdXRlTGVuZ3RoPHVuc2lnbmVkIHNob3J0LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVX
aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bE91dGxpbmVXaWR0aCwgTm9ybWFsRGlzYWJsZWQsIFRoaWNrbmVzc0VuYWJsZWQ+OjpjcmVhdGVI
YW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU92ZXJmbG93V3Jh
cCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RU92ZXJmbG93V3JhcCwgJlJlbmRlclN0eWxlOjpvdmVy
Zmxvd1dyYXAsIEVPdmVyZmxvd1dyYXAsICZSZW5kZXJTdHlsZTo6c2V0T3ZlcmZsb3dXcmFwLCBF
T3ZlcmZsb3dXcmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdmVyZmxvd1dyYXA+OjpjcmVhdGVI
YW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU92ZXJmbG93WCwg
QXBwbHlQcm9wZXJ0eURlZmF1bHQ8RU92ZXJmbG93LCAmUmVuZGVyU3R5bGU6Om92ZXJmbG93WCwg
RU92ZXJmbG93LCAmUmVuZGVyU3R5bGU6OnNldE92ZXJmbG93WCwgRU92ZXJmbG93LCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxPdmVyZmxvd1g+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eU92ZXJmbG93WSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RU92
ZXJmbG93LCAmUmVuZGVyU3R5bGU6Om92ZXJmbG93WSwgRU92ZXJmbG93LCAmUmVuZGVyU3R5bGU6
OnNldE92ZXJmbG93WSwgRU92ZXJmbG93LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdmVyZmxvd1k+
OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVBh
ZGRpbmdCb3R0b20sIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpwYWRkaW5nQm90
dG9tLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdCb3R0b20sICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFBhZGRpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVBhZGRpbmdMZWZ0LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6cGFk
ZGluZ0xlZnQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0xlZnQsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbFBhZGRpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6
OnBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nUmlnaHQsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbFBhZGRpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0
eWxlOjpwYWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdUb3AsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbFBhZGRpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFUGFn
ZUJyZWFrLCAmUmVuZGVyU3R5bGU6OnBhZ2VCcmVha0FmdGVyLCBFUGFnZUJyZWFrLCAmUmVuZGVy
U3R5bGU6OnNldFBhZ2VCcmVha0FmdGVyLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxQYWdlQnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVBhZ2VCcmVha0JlZm9yZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBhZ2VCcmVh
aywgJlJlbmRlclN0eWxlOjpwYWdlQnJlYWtCZWZvcmUsIEVQYWdlQnJlYWssICZSZW5kZXJTdHls
ZTo6c2V0UGFnZUJyZWFrQmVmb3JlLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQ
YWdlQnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVBhZ2VCcmVha0luc2lkZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBhZ2VCcmVhaywg
JlJlbmRlclN0eWxlOjpwYWdlQnJlYWtJbnNpZGUsIEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6
c2V0UGFnZUJyZWFrSW5zaWRlLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQYWdl
QnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVBvaW50ZXJFdmVudHMsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVQb2ludGVyRXZlbnRzLCAm
UmVuZGVyU3R5bGU6OnBvaW50ZXJFdmVudHMsIEVQb2ludGVyRXZlbnRzLCAmUmVuZGVyU3R5bGU6
OnNldFBvaW50ZXJFdmVudHMsIEVQb2ludGVyRXZlbnRzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQ
b2ludGVyRXZlbnRzPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlQb3NpdGlvbiwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBvc2l0aW9uLCAmUmVu
ZGVyU3R5bGU6OnBvc2l0aW9uLCBFUG9zaXRpb24sICZSZW5kZXJTdHlsZTo6c2V0UG9zaXRpb24s
IEVQb3NpdGlvbiwgJlJlbmRlclN0eWxlOjppbml0aWFsUG9zaXRpb24+OjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVJlc2l6ZSwgQXBwbHlQcm9w
ZXJ0eVJlc2l6ZTo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlSaWdodCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OnJpZ2h0LCAm
UmVuZGVyU3R5bGU6OnNldFJpZ2h0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPZmZzZXQsIEF1dG9F
bmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlTaXplLCBBcHBseVByb3BlcnR5UGFnZVNpemU6OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5U3BlYWssIEFwcGx5UHJvcGVydHlEZWZhdWx0
PEVTcGVhaywgJlJlbmRlclN0eWxlOjpzcGVhaywgRVNwZWFrLCAmUmVuZGVyU3R5bGU6OnNldFNw
ZWFrLCBFU3BlYWssICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNwZWFrPjo6Y3JlYXRlSGFuZGxlcigp
KTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlUYWJsZUxheW91dCwgQXBwbHlQ
cm9wZXJ0eURlZmF1bHQ8RVRhYmxlTGF5b3V0LCAmUmVuZGVyU3R5bGU6OnRhYmxlTGF5b3V0LCBF
VGFibGVMYXlvdXQsICZSZW5kZXJTdHlsZTo6c2V0VGFibGVMYXlvdXQsIEVUYWJsZUxheW91dCwg
JlJlbmRlclN0eWxlOjppbml0aWFsVGFibGVMYXlvdXQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVRhYlNpemUsIEFwcGx5UHJvcGVydHlEZWZh
dWx0PHVuc2lnbmVkLCAmUmVuZGVyU3R5bGU6OnRhYlNpemUsIHVuc2lnbmVkLCAmUmVuZGVyU3R5
bGU6OnNldFRhYlNpemUsIHVuc2lnbmVkLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUYWJTaXplPjo6
Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlUZXh0
QWxpZ24sIEFwcGx5UHJvcGVydHlUZXh0QWxpZ246OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIEFwcGx5UHJvcGVydHlU
ZXh0RGVjb3JhdGlvbjo6Y3JlYXRlSGFuZGxlcigpKTsKKyNpZiBFTkFCTEUoQ1NTM19URVhUKQor
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uTGlu
ZSwgQXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uOjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uU3R5bGUsIEFw
cGx5UHJvcGVydHlEZWZhdWx0PFRleHREZWNvcmF0aW9uU3R5bGUsICZSZW5kZXJTdHlsZTo6dGV4
dERlY29yYXRpb25TdHlsZSwgVGV4dERlY29yYXRpb25TdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRU
ZXh0RGVjb3JhdGlvblN0eWxlLCBUZXh0RGVjb3JhdGlvblN0eWxlLCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxUZXh0RGVjb3JhdGlvblN0eWxlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbkNvbG9yLCBBcHBseVBy
b3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjp0ZXh0RGVjb3Jh
dGlvbkNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHREZWNvcmF0aW9uQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0RGVjb3JhdGlvbkNvbG9yLCAmUmVuZGVyU3R5bGU6OmNv
bG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlXZWJraXRUZXh0QWxpZ25MYXN0LCBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0QWxpZ25MYXN0
LCAmUmVuZGVyU3R5bGU6OnRleHRBbGlnbkxhc3QsIFRleHRBbGlnbkxhc3QsICZSZW5kZXJTdHls
ZTo6c2V0VGV4dEFsaWduTGFzdCwgVGV4dEFsaWduTGFzdCwgJlJlbmRlclN0eWxlOjppbml0aWFs
VGV4dEFsaWduTGFzdD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0VGV4dEp1c3RpZnksIEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHRK
dXN0aWZ5LCAmUmVuZGVyU3R5bGU6OnRleHRKdXN0aWZ5LCBUZXh0SnVzdGlmeSwgJlJlbmRlclN0
eWxlOjpzZXRUZXh0SnVzdGlmeSwgVGV4dEp1c3RpZnksICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRl
eHRKdXN0aWZ5Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRUZXh0VW5kZXJsaW5lUG9zaXRpb24sIEFwcGx5UHJvcGVydHlUZXh0VW5k
ZXJsaW5lUG9zaXRpb246OmNyZWF0ZUhhbmRsZXIoKSk7CisjZW5kaWYgLy8gQ1NTM19URVhUCisg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VGV4dEluZGVudCwgQXBwbHlQcm9wZXJ0
eVRleHRJbmRlbnQ6OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5VGV4dE92ZXJmbG93LCBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0T3ZlcmZsb3cs
ICZSZW5kZXJTdHlsZTo6dGV4dE92ZXJmbG93LCBUZXh0T3ZlcmZsb3csICZSZW5kZXJTdHlsZTo6
c2V0VGV4dE92ZXJmbG93LCBUZXh0T3ZlcmZsb3csICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRP
dmVyZmxvdz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5VGV4dFJlbmRlcmluZywgQXBwbHlQcm9wZXJ0eUZvbnQ8VGV4dFJlbmRlcmluZ01vZGUs
ICZGb250RGVzY3JpcHRpb246OnRleHRSZW5kZXJpbmdNb2RlLCAmRm9udERlc2NyaXB0aW9uOjpz
ZXRUZXh0UmVuZGVyaW5nTW9kZSwgQXV0b1RleHRSZW5kZXJpbmc+OjpjcmVhdGVIYW5kbGVyKCkp
OworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm0sIEFwcGx5
UHJvcGVydHlEZWZhdWx0PEVUZXh0VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnRleHRUcmFuc2Zv
cm0sIEVUZXh0VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnNldFRleHRUcmFuc2Zvcm0sIEVUZXh0
VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0VHJhbnNmb3JtPjo6Y3JlYXRlSGFu
ZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlUb3AsIEFwcGx5UHJv
cGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wLCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxPZmZzZXQsIEF1dG9FbmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsK
KyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgQXBwbHlQcm9w
ZXJ0eURlZmF1bHQ8RVVuaWNvZGVCaWRpLCAmUmVuZGVyU3R5bGU6OnVuaWNvZGVCaWRpLCBFVW5p
Y29kZUJpZGksICZSZW5kZXJTdHlsZTo6c2V0VW5pY29kZUJpZGksIEVVbmljb2RlQmlkaSwgJlJl
bmRlclN0eWxlOjppbml0aWFsVW5pY29kZUJpZGk+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24sIEFwcGx5UHJvcGVydHlW
ZXJ0aWNhbEFsaWduOjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVZpc2liaWxpdHksIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVWaXNpYmlsaXR5LCAm
UmVuZGVyU3R5bGU6OnZpc2liaWxpdHksIEVWaXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnNldFZp
c2liaWxpdHksIEVWaXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxWaXNpYmlsaXR5Pjo6
Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRBbmltYXRpb25EZWxheSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxkb3VibGUsICZBbmltYXRp
b246OmRlbGF5LCAmQW5pbWF0aW9uOjpzZXREZWxheSwgJkFuaW1hdGlvbjo6aXNEZWxheVNldCwg
JkFuaW1hdGlvbjo6Y2xlYXJEZWxheSwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkRlbGF5
LCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRGVsYXksICZSZW5kZXJTdHlsZTo6YWNjZXNz
QW5pbWF0aW9ucywgJlJlbmRlclN0eWxlOjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsK
KyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rp
b24sIEFwcGx5UHJvcGVydHlBbmltYXRpb248QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24s
ICZBbmltYXRpb246OmRpcmVjdGlvbiwgJkFuaW1hdGlvbjo6c2V0RGlyZWN0aW9uLCAmQW5pbWF0
aW9uOjppc0RpcmVjdGlvblNldCwgJkFuaW1hdGlvbjo6Y2xlYXJEaXJlY3Rpb24sICZBbmltYXRp
b246OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24sICZDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRp
b25EaXJlY3Rpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5pbWF0aW9ucywgJlJlbmRlclN0eWxl
OjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EdXJhdGlvbiwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlv
bjxkb3VibGUsICZBbmltYXRpb246OmR1cmF0aW9uLCAmQW5pbWF0aW9uOjpzZXREdXJhdGlvbiwg
JkFuaW1hdGlvbjo6aXNEdXJhdGlvblNldCwgJkFuaW1hdGlvbjo6Y2xlYXJEdXJhdGlvbiwgJkFu
aW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkR1cmF0aW9uLCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5p
bWF0aW9uRHVyYXRpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5pbWF0aW9ucywgJlJlbmRlclN0
eWxlOjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25GaWxsTW9kZSwgQXBwbHlQcm9wZXJ0eUFuaW1h
dGlvbjx1bnNpZ25lZCwgJkFuaW1hdGlvbjo6ZmlsbE1vZGUsICZBbmltYXRpb246OnNldEZpbGxN
b2RlLCAmQW5pbWF0aW9uOjppc0ZpbGxNb2RlU2V0LCAmQW5pbWF0aW9uOjpjbGVhckZpbGxNb2Rl
LCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRmlsbE1vZGUsICZDU1NUb1N0eWxlTWFwOjpt
YXBBbmltYXRpb25GaWxsTW9kZSwgJlJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVu
ZGVyU3R5bGU6OmFuaW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50LCBBcHBseVBy
b3BlcnR5QW5pbWF0aW9uPGRvdWJsZSwgJkFuaW1hdGlvbjo6aXRlcmF0aW9uQ291bnQsICZBbmlt
YXRpb246OnNldEl0ZXJhdGlvbkNvdW50LCAmQW5pbWF0aW9uOjppc0l0ZXJhdGlvbkNvdW50U2V0
LCAmQW5pbWF0aW9uOjpjbGVhckl0ZXJhdGlvbkNvdW50LCAmQW5pbWF0aW9uOjppbml0aWFsQW5p
bWF0aW9uSXRlcmF0aW9uQ291bnQsICZDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25JdGVyYXRp
b25Db3VudCwgJlJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVuZGVyU3R5bGU6OmFu
aW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWUsIEFwcGx5UHJvcGVydHlBbmltYXRpb248Y29uc3Qg
U3RyaW5nJiwgJkFuaW1hdGlvbjo6bmFtZSwgJkFuaW1hdGlvbjo6c2V0TmFtZSwgJkFuaW1hdGlv
bjo6aXNOYW1lU2V0LCAmQW5pbWF0aW9uOjpjbGVhck5hbWUsICZBbmltYXRpb246OmluaXRpYWxB
bmltYXRpb25OYW1lLCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uTmFtZSwgJlJlbmRlclN0
eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVuZGVyU3R5bGU6OmFuaW1hdGlvbnM+OjpjcmVhdGVI
YW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFuaW1h
dGlvblBsYXlTdGF0ZSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxFQW5pbVBsYXlTdGF0ZSwgJkFu
aW1hdGlvbjo6cGxheVN0YXRlLCAmQW5pbWF0aW9uOjpzZXRQbGF5U3RhdGUsICZBbmltYXRpb246
OmlzUGxheVN0YXRlU2V0LCAmQW5pbWF0aW9uOjpjbGVhclBsYXlTdGF0ZSwgJkFuaW1hdGlvbjo6
aW5pdGlhbEFuaW1hdGlvblBsYXlTdGF0ZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblBs
YXlTdGF0ZSwgJlJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVuZGVyU3R5bGU6OmFu
aW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uLCBBcHBseVByb3BlcnR5QW5pbWF0
aW9uPGNvbnN0IFBhc3NSZWZQdHI8VGltaW5nRnVuY3Rpb24+LCAmQW5pbWF0aW9uOjp0aW1pbmdG
dW5jdGlvbiwgJkFuaW1hdGlvbjo6c2V0VGltaW5nRnVuY3Rpb24sICZBbmltYXRpb246OmlzVGlt
aW5nRnVuY3Rpb25TZXQsICZBbmltYXRpb246OmNsZWFyVGltaW5nRnVuY3Rpb24sICZBbmltYXRp
b246OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbiwgJkNTU1RvU3R5bGVNYXA6Om1hcEFu
aW1hdGlvblRpbWluZ0Z1bmN0aW9uLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0FuaW1hdGlvbnMsICZS
ZW5kZXJTdHlsZTo6YW5pbWF0aW9ucz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QXBwZWFyYW5jZSwgQXBwbHlQcm9wZXJ0eURlZmF1
bHQ8Q29udHJvbFBhcnQsICZSZW5kZXJTdHlsZTo6YXBwZWFyYW5jZSwgQ29udHJvbFBhcnQsICZS
ZW5kZXJTdHlsZTo6c2V0QXBwZWFyYW5jZSwgQ29udHJvbFBhcnQsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbEFwcGVhcmFuY2U+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLCBBcHBseVByb3BlcnR5QXNwZWN0UmF0aW86
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0QmFja2ZhY2VWaXNpYmlsaXR5LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQmFja2ZhY2VWaXNp
YmlsaXR5LCAmUmVuZGVyU3R5bGU6OmJhY2tmYWNlVmlzaWJpbGl0eSwgRUJhY2tmYWNlVmlzaWJp
bGl0eSwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZmFjZVZpc2liaWxpdHksIEVCYWNrZmFjZVZpc2li
aWxpdHksICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJhY2tmYWNlVmlzaWJpbGl0eT46OmNyZWF0ZUhh
bmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2dy
b3VuZENsaXAsIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXApOworICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGUsIEFwcGx5UHJvcGVydHlG
aWxsTGF5ZXI8Q29tcG9zaXRlT3BlcmF0b3IsIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENv
bXBvc2l0ZSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3Jv
dW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6Omlz
Q29tcG9zaXRlU2V0LCAmRmlsbExheWVyOjpjb21wb3NpdGUsICZGaWxsTGF5ZXI6OnNldENvbXBv
c2l0ZSwgJkZpbGxMYXllcjo6Y2xlYXJDb21wb3NpdGUsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxs
Q29tcG9zaXRlLCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0ZT46OmNyZWF0ZUhhbmRs
ZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3Vu
ZE9yaWdpbiwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luKTsKKyAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZSwgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kU2l6ZSk7CisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCbGVuZE1vZGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEJs
ZW5kTW9kZSwgJlJlbmRlclN0eWxlOjpibGVuZE1vZGUsIEJsZW5kTW9kZSwgJlJlbmRlclN0eWxl
OjpzZXRCbGVuZE1vZGUsIEJsZW5kTW9kZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQmxlbmRNb2Rl
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRCYWNrZ3JvdW5kQmxlbmRNb2RlLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEJsZW5kTW9k
ZSwgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQmxlbmRNb2RlLCBCYWNrZ3JvdW5kRmlsbExh
eWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6
YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNCbGVuZE1vZGVTZXQsICZGaWxsTGF5ZXI6
OmJsZW5kTW9kZSwgJkZpbGxMYXllcjo6c2V0QmxlbmRNb2RlLCAmRmlsbExheWVyOjpjbGVhckJs
ZW5kTW9kZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxCbGVuZE1vZGUsICZDU1NUb1N0eWxlTWFw
OjptYXBGaWxsQmxlbmRNb2RlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyNlbmRpZgorICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdCwgQXBwbHlQcm9wZXJ0eURl
ZmF1bHQ8RUJvcmRlckZpdCwgJlJlbmRlclN0eWxlOjpib3JkZXJGaXQsIEVCb3JkZXJGaXQsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVyRml0LCBFQm9yZGVyRml0LCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxCb3JkZXJGaXQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLCBBcHBseVByb3BlcnR5Q29t
cHV0ZUxlbmd0aDxzaG9ydCwgJlJlbmRlclN0eWxlOjpob3Jpem9udGFsQm9yZGVyU3BhY2luZywg
JlJlbmRlclN0eWxlOjpzZXRIb3Jpem9udGFsQm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpp
bml0aWFsSG9yaXpvbnRhbEJvcmRlclNwYWNpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlLCBBcHBseVByb3Bl
cnR5Qm9yZGVySW1hZ2U8Qm9yZGVySW1hZ2UsIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2Us
ICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2U+
OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg8c2hv
cnQsICZSZW5kZXJTdHlsZTo6dmVydGljYWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNl
dFZlcnRpY2FsQm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjppbml0aWFsVmVydGljYWxCb3Jk
ZXJTcGFjaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRCb3hBbGlnbiwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJveEFsaWdubWVu
dCwgJlJlbmRlclN0eWxlOjpib3hBbGlnbiwgRUJveEFsaWdubWVudCwgJlJlbmRlclN0eWxlOjpz
ZXRCb3hBbGlnbiwgRUJveEFsaWdubWVudCwgJlJlbmRlclN0eWxlOjppbml0aWFsQm94QWxpZ24+
OjpjcmVhdGVIYW5kbGVyKCkpOworI2lmIEVOQUJMRShDU1NfQk9YX0RFQ09SQVRJT05fQlJFQUsp
CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Qm94RGVjb3JhdGlvbkJy
ZWFrLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm94RGVjb3JhdGlvbkJyZWFrLCAmUmVuZGVyU3R5
bGU6OmJveERlY29yYXRpb25CcmVhaywgRUJveERlY29yYXRpb25CcmVhaywgJlJlbmRlclN0eWxl
OjpzZXRCb3hEZWNvcmF0aW9uQnJlYWssIEVCb3hEZWNvcmF0aW9uQnJlYWssICZSZW5kZXJTdHls
ZTo6aW5pdGlhbEJveERlY29yYXRpb25CcmVhaz46OmNyZWF0ZUhhbmRsZXIoKSk7CisjZW5kaWYK
KyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3hEaXJlY3Rpb24sIEFw
cGx5UHJvcGVydHlEZWZhdWx0PEVCb3hEaXJlY3Rpb24sICZSZW5kZXJTdHlsZTo6Ym94RGlyZWN0
aW9uLCBFQm94RGlyZWN0aW9uLCAmUmVuZGVyU3R5bGU6OnNldEJveERpcmVjdGlvbiwgRUJveERp
cmVjdGlvbiwgJlJlbmRlclN0eWxlOjppbml0aWFsQm94RGlyZWN0aW9uPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4LCBB
cHBseVByb3BlcnR5RGVmYXVsdDxmbG9hdCwgJlJlbmRlclN0eWxlOjpib3hGbGV4LCBmbG9hdCwg
JlJlbmRlclN0eWxlOjpzZXRCb3hGbGV4LCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsQm94
RmxleD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0Qm94RmxleEdyb3VwLCBBcHBseVByb3BlcnR5RGVmYXVsdDx1bnNpZ25lZCBpbnQs
ICZSZW5kZXJTdHlsZTo6Ym94RmxleEdyb3VwLCB1bnNpZ25lZCBpbnQsICZSZW5kZXJTdHlsZTo6
c2V0Qm94RmxleEdyb3VwLCB1bnNpZ25lZCBpbnQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJveEZs
ZXhHcm91cD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0Qm94TGluZXMsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVCb3hMaW5lcywgJlJl
bmRlclN0eWxlOjpib3hMaW5lcywgRUJveExpbmVzLCAmUmVuZGVyU3R5bGU6OnNldEJveExpbmVz
LCBFQm94TGluZXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJveExpbmVzPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3hPcmRpbmFs
R3JvdXAsIEFwcGx5UHJvcGVydHlEZWZhdWx0PHVuc2lnbmVkIGludCwgJlJlbmRlclN0eWxlOjpi
b3hPcmRpbmFsR3JvdXAsIHVuc2lnbmVkIGludCwgJlJlbmRlclN0eWxlOjpzZXRCb3hPcmRpbmFs
R3JvdXAsIHVuc2lnbmVkIGludCwgJlJlbmRlclN0eWxlOjppbml0aWFsQm94T3JkaW5hbEdyb3Vw
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRCb3hPcmllbnQsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVCb3hPcmllbnQsICZSZW5kZXJT
dHlsZTo6Ym94T3JpZW50LCBFQm94T3JpZW50LCAmUmVuZGVyU3R5bGU6OnNldEJveE9yaWVudCwg
RUJveE9yaWVudCwgJlJlbmRlclN0eWxlOjppbml0aWFsQm94T3JpZW50Pjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3hQYWNrLCBB
cHBseVByb3BlcnR5RGVmYXVsdDxFQm94UGFjaywgJlJlbmRlclN0eWxlOjpib3hQYWNrLCBFQm94
UGFjaywgJlJlbmRlclN0eWxlOjpzZXRCb3hQYWNrLCBFQm94UGFjaywgJlJlbmRlclN0eWxlOjpp
bml0aWFsQm94UGFjaz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0Q29sb3JDb3JyZWN0aW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxD
b2xvclNwYWNlLCAmUmVuZGVyU3R5bGU6OmNvbG9yU3BhY2UsIENvbG9yU3BhY2UsICZSZW5kZXJT
dHlsZTo6c2V0Q29sb3JTcGFjZSwgQ29sb3JTcGFjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQ29s
b3JTcGFjZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0Q29sdW1uQXhpcywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8Q29sdW1uQXhpcywg
JlJlbmRlclN0eWxlOjpjb2x1bW5BeGlzLCBDb2x1bW5BeGlzLCAmUmVuZGVyU3R5bGU6OnNldENv
bHVtbkF4aXMsIENvbHVtbkF4aXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbENvbHVtbkF4aXM+Ojpj
cmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtbkJyZWFrQWZ0ZXIsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVQYWdlQnJlYWssICZSZW5k
ZXJTdHlsZTo6Y29sdW1uQnJlYWtBZnRlciwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjpzZXRD
b2x1bW5CcmVha0FmdGVyLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQYWdlQnJl
YWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtbkJyZWFrQmVmb3JlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFUGFnZUJyZWFr
LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkJyZWFrQmVmb3JlLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5
bGU6OnNldENvbHVtbkJyZWFrQmVmb3JlLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxQYWdlQnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrSW5zaWRlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxF
UGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkJyZWFrSW5zaWRlLCBFUGFnZUJyZWFrLCAm
UmVuZGVyU3R5bGU6OnNldENvbHVtbkJyZWFrSW5zaWRlLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxQYWdlQnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkNvdW50LCBBcHBseVByb3BlcnR5QXV0bzx1
bnNpZ25lZCBzaG9ydCwgJlJlbmRlclN0eWxlOjpjb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpz
ZXRDb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpoYXNBdXRvQ29sdW1uQ291bnQsICZSZW5kZXJT
dHlsZTo6c2V0SGFzQXV0b0NvbHVtbkNvdW50Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5HYXAsIEFwcGx5UHJvcGVydHlB
dXRvPGZsb2F0LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1
bW5HYXAsICZSZW5kZXJTdHlsZTo6aGFzTm9ybWFsQ29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OnNl
dEhhc05vcm1hbENvbHVtbkdhcCwgQ29tcHV0ZUxlbmd0aCwgQ1NTVmFsdWVOb3JtYWw+OjpjcmVh
dGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENv
bHVtblByb2dyZXNzaW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxDb2x1bW5Qcm9ncmVzc2lvbiwg
JlJlbmRlclN0eWxlOjpjb2x1bW5Qcm9ncmVzc2lvbiwgQ29sdW1uUHJvZ3Jlc3Npb24sICZSZW5k
ZXJTdHlsZTo6c2V0Q29sdW1uUHJvZ3Jlc3Npb24sIENvbHVtblByb2dyZXNzaW9uLCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxDb2x1bW5Qcm9ncmVzc2lvbj46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLCBBcHBs
eVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjpjb2x1bW5S
dWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldFZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yPjo6Y3Jl
YXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5SdWxlV2lkdGgsIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoPHVuc2lnbmVkIHNob3J0
LCAmUmVuZGVyU3R5bGU6OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5S
dWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbENvbHVtblJ1bGVXaWR0aCwgTm9ybWFsRGlz
YWJsZWQsIFRoaWNrbmVzc0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblNwYW4sIEFwcGx5UHJvcGVydHlEZWZh
dWx0PENvbHVtblNwYW4sICZSZW5kZXJTdHlsZTo6Y29sdW1uU3BhbiwgQ29sdW1uU3BhbiwgJlJl
bmRlclN0eWxlOjpzZXRDb2x1bW5TcGFuLCBDb2x1bW5TcGFuLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxDb2x1bW5TcGFuPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlU3R5bGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVC
b3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpjb2x1bW5SdWxlU3R5bGUsIEVCb3JkZXJTdHlsZSwg
JlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0
eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbldpZHRoLCBBcHBseVByb3BlcnR5QXV0
bzxmbG9hdCwgJlJlbmRlclN0eWxlOjpjb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1
bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpoYXNBdXRvQ29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6
c2V0SGFzQXV0b0NvbHVtbldpZHRoLCBDb21wdXRlTGVuZ3RoPjo6Y3JlYXRlSGFuZGxlcigpKTsK
KyNpZiBFTkFCTEUoQ1VSU09SX1ZJU0lCSUxJVFkpCisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2Via2l0Q3Vyc29yVmlzaWJpbGl0eSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8Q3Vy
c29yVmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpjdXJzb3JWaXNpYmlsaXR5LCBDdXJzb3JWaXNp
YmlsaXR5LCAmUmVuZGVyU3R5bGU6OnNldEN1cnNvclZpc2liaWxpdHksIEN1cnNvclZpc2liaWxp
dHksICZSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNvclZpc2liaWxpdHk+OjpjcmVhdGVIYW5kbGVy
KCkpOworI2VuZGlmCisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QWxp
Z25Db250ZW50LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQWxpZ25Db250ZW50LCAmUmVuZGVyU3R5
bGU6OmFsaWduQ29udGVudCwgRUFsaWduQ29udGVudCwgJlJlbmRlclN0eWxlOjpzZXRBbGlnbkNv
bnRlbnQsIEVBbGlnbkNvbnRlbnQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEFsaWduQ29udGVudD46
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0QWxpZ25JdGVtcywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUFsaWduSXRlbXMsICZSZW5kZXJT
dHlsZTo6YWxpZ25JdGVtcywgRUFsaWduSXRlbXMsICZSZW5kZXJTdHlsZTo6c2V0QWxpZ25JdGVt
cywgRUFsaWduSXRlbXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEFsaWduSXRlbXM+OjpjcmVhdGVI
YW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFsaWdu
U2VsZiwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUFsaWduSXRlbXMsICZSZW5kZXJTdHlsZTo6YWxp
Z25TZWxmLCBFQWxpZ25JdGVtcywgJlJlbmRlclN0eWxlOjpzZXRBbGlnblNlbGYsIEVBbGlnbkl0
ZW1zLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxBbGlnblNlbGY+OjpjcmVhdGVIYW5kbGVyKCkpOwor
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEZsZXhCYXNpcywgQXBwbHlQ
cm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OmZsZXhCYXNpcywgJlJlbmRlclN0eWxlOjpzZXRG
bGV4QmFzaXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEZsZXhCYXNpcywgQXV0b0VuYWJsZWQ+Ojpj
cmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dEZsZXhEaXJlY3Rpb24sIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVGbGV4RGlyZWN0aW9uLCAmUmVu
ZGVyU3R5bGU6OmZsZXhEaXJlY3Rpb24sIEVGbGV4RGlyZWN0aW9uLCAmUmVuZGVyU3R5bGU6OnNl
dEZsZXhEaXJlY3Rpb24sIEVGbGV4RGlyZWN0aW9uLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxGbGV4
RGlyZWN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRGbGV4R3JvdywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8ZmxvYXQsICZSZW5k
ZXJTdHlsZTo6ZmxleEdyb3csIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEZsZXhHcm93LCBmbG9h
dCwgJlJlbmRlclN0eWxlOjppbml0aWFsRmxleEdyb3c+OjpjcmVhdGVIYW5kbGVyKCkpOworICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEZsZXhTaHJpbmssIEFwcGx5UHJv
cGVydHlEZWZhdWx0PGZsb2F0LCAmUmVuZGVyU3R5bGU6OmZsZXhTaHJpbmssIGZsb2F0LCAmUmVu
ZGVyU3R5bGU6OnNldEZsZXhTaHJpbmssIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxGbGV4
U2hyaW5rPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRGbGV4V3JhcCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUZsZXhXcmFwLCAmUmVu
ZGVyU3R5bGU6OmZsZXhXcmFwLCBFRmxleFdyYXAsICZSZW5kZXJTdHlsZTo6c2V0RmxleFdyYXAs
IEVGbGV4V3JhcCwgJlJlbmRlclN0eWxlOjppbml0aWFsRmxleFdyYXA+OjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEdyaWRBdXRvRmxv
dywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8R3JpZEF1dG9GbG93LCAmUmVuZGVyU3R5bGU6OmdyaWRB
dXRvRmxvdywgR3JpZEF1dG9GbG93LCAmUmVuZGVyU3R5bGU6OnNldEdyaWRBdXRvRmxvdywgR3Jp
ZEF1dG9GbG93LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxHcmlkQXV0b0Zsb3c+OjpjcmVhdGVIYW5k
bGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEp1c3RpZnlD
b250ZW50LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFSnVzdGlmeUNvbnRlbnQsICZSZW5kZXJTdHls
ZTo6anVzdGlmeUNvbnRlbnQsIEVKdXN0aWZ5Q29udGVudCwgJlJlbmRlclN0eWxlOjpzZXRKdXN0
aWZ5Q29udGVudCwgRUp1c3RpZnlDb250ZW50LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxKdXN0aWZ5
Q29udGVudD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0T3JkZXIsIEFwcGx5UHJvcGVydHlEZWZhdWx0PGludCwgJlJlbmRlclN0eWxl
OjpvcmRlciwgaW50LCAmUmVuZGVyU3R5bGU6OnNldE9yZGVyLCBpbnQsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbE9yZGVyPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMp
CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Rmxvd0Zyb20sIEFwcGx5
UHJvcGVydHlTdHJpbmc8TWFwTm9uZVRvTnVsbCwgJlJlbmRlclN0eWxlOjpyZWdpb25UaHJlYWQs
ICZSZW5kZXJTdHlsZTo6c2V0UmVnaW9uVGhyZWFkLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxSZWdp
b25UaHJlYWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdEZsb3dJbnRvLCBBcHBseVByb3BlcnR5U3RyaW5nPE1hcE5vbmVUb051bGws
ICZSZW5kZXJTdHlsZTo6Zmxvd1RocmVhZCwgJlJlbmRlclN0eWxlOjpzZXRGbG93VGhyZWFkLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxGbG93VGhyZWFkPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyNlbmRp
ZgorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEZvbnRLZXJuaW5nLCBB
cHBseVByb3BlcnR5Rm9udDxGb250RGVzY3JpcHRpb246Oktlcm5pbmcsICZGb250RGVzY3JpcHRp
b246Omtlcm5pbmcsICZGb250RGVzY3JpcHRpb246OnNldEtlcm5pbmcsIEZvbnREZXNjcmlwdGlv
bjo6QXV0b0tlcm5pbmc+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTbW9vdGhpbmcsIEFwcGx5UHJvcGVydHlGb250PEZvbnRT
bW9vdGhpbmdNb2RlLCAmRm9udERlc2NyaXB0aW9uOjpmb250U21vb3RoaW5nLCAmRm9udERlc2Ny
aXB0aW9uOjpzZXRGb250U21vb3RoaW5nLCBBdXRvU21vb3RoaW5nPjo6Y3JlYXRlSGFuZGxlcigp
KTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRGb250VmFyaWFudExp
Z2F0dXJlcywgQXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEhpZ2hsaWdodCwg
QXBwbHlQcm9wZXJ0eVN0cmluZzxNYXBOb25lVG9OdWxsLCAmUmVuZGVyU3R5bGU6OmhpZ2hsaWdo
dCwgJlJlbmRlclN0eWxlOjpzZXRIaWdobGlnaHQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEhpZ2hs
aWdodD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0SHlwaGVuYXRlQ2hhcmFjdGVyLCBBcHBseVByb3BlcnR5U3RyaW5nPE1hcEF1dG9U
b051bGwsICZSZW5kZXJTdHlsZTo6aHlwaGVuYXRpb25TdHJpbmcsICZSZW5kZXJTdHlsZTo6c2V0
SHlwaGVuYXRpb25TdHJpbmcsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEh5cGhlbmF0aW9uU3RyaW5n
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRIeXBoZW5hdGVMaW1pdEFmdGVyLCBBcHBseVByb3BlcnR5TnVtYmVyPHNob3J0LCAmUmVu
ZGVyU3R5bGU6Omh5cGhlbmF0aW9uTGltaXRBZnRlciwgJlJlbmRlclN0eWxlOjpzZXRIeXBoZW5h
dGlvbkxpbWl0QWZ0ZXIsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEh5cGhlbmF0aW9uTGltaXRBZnRl
cj46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
V2Via2l0SHlwaGVuYXRlTGltaXRCZWZvcmUsIEFwcGx5UHJvcGVydHlOdW1iZXI8c2hvcnQsICZS
ZW5kZXJTdHlsZTo6aHlwaGVuYXRpb25MaW1pdEJlZm9yZSwgJlJlbmRlclN0eWxlOjpzZXRIeXBo
ZW5hdGlvbkxpbWl0QmVmb3JlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxIeXBoZW5hdGlvbkxpbWl0
QmVmb3JlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzLCBBcHBseVByb3BlcnR5TnVtYmVyPHNob3J0
LCAmUmVuZGVyU3R5bGU6Omh5cGhlbmF0aW9uTGltaXRMaW5lcywgJlJlbmRlclN0eWxlOjpzZXRI
eXBoZW5hdGlvbkxpbWl0TGluZXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEh5cGhlbmF0aW9uTGlt
aXRMaW5lcywgQ1NTVmFsdWVOb0xpbWl0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5zLCBBcHBseVByb3BlcnR5RGVmYXVs
dDxIeXBoZW5zLCAmUmVuZGVyU3R5bGU6Omh5cGhlbnMsIEh5cGhlbnMsICZSZW5kZXJTdHlsZTo6
c2V0SHlwaGVucywgSHlwaGVucywgJlJlbmRlclN0eWxlOjppbml0aWFsSHlwaGVucz46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TGlu
ZUFsaWduLCBBcHBseVByb3BlcnR5RGVmYXVsdDxMaW5lQWxpZ24sICZSZW5kZXJTdHlsZTo6bGlu
ZUFsaWduLCBMaW5lQWxpZ24sICZSZW5kZXJTdHlsZTo6c2V0TGluZUFsaWduLCBMaW5lQWxpZ24s
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVBbGlnbj46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TGluZUJyZWFrLCBBcHBseVByb3Bl
cnR5RGVmYXVsdDxMaW5lQnJlYWssICZSZW5kZXJTdHlsZTo6bGluZUJyZWFrLCBMaW5lQnJlYWss
ICZSZW5kZXJTdHlsZTo6c2V0TGluZUJyZWFrLCBMaW5lQnJlYWssICZSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVCcmVhaz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0TGluZUNsYW1wLCBBcHBseVByb3BlcnR5RGVmYXVsdDxjb25zdCBM
aW5lQ2xhbXBWYWx1ZSYsICZSZW5kZXJTdHlsZTo6bGluZUNsYW1wLCBMaW5lQ2xhbXBWYWx1ZSwg
JlJlbmRlclN0eWxlOjpzZXRMaW5lQ2xhbXAsIExpbmVDbGFtcFZhbHVlLCAmUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lQ2xhbXA+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVdlYmtpdExpbmVHcmlkLCBBcHBseVByb3BlcnR5U3RyaW5nPE1hcE5v
bmVUb051bGwsICZSZW5kZXJTdHlsZTo6bGluZUdyaWQsICZSZW5kZXJTdHlsZTo6c2V0TGluZUdy
aWQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVHcmlkPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRMaW5lU25hcCwgQXBwbHlQcm9w
ZXJ0eURlZmF1bHQ8TGluZVNuYXAsICZSZW5kZXJTdHlsZTo6bGluZVNuYXAsIExpbmVTbmFwLCAm
UmVuZGVyU3R5bGU6OnNldExpbmVTbmFwLCBMaW5lU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFs
TGluZVNuYXA+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2UsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVN
YXJnaW5Db2xsYXBzZSwgJlJlbmRlclN0eWxlOjptYXJnaW5BZnRlckNvbGxhcHNlLCBFTWFyZ2lu
Q29sbGFwc2UsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luQWZ0ZXJDb2xsYXBzZSwgRU1hcmdpbkNv
bGxhcHNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNYXJnaW5BZnRlckNvbGxhcHNlPjo6Y3JlYXRl
SGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXJn
aW5CZWZvcmVDb2xsYXBzZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RU1hcmdpbkNvbGxhcHNlLCAm
UmVuZGVyU3R5bGU6Om1hcmdpbkJlZm9yZUNvbGxhcHNlLCBFTWFyZ2luQ29sbGFwc2UsICZSZW5k
ZXJTdHlsZTo6c2V0TWFyZ2luQmVmb3JlQ29sbGFwc2UsIEVNYXJnaW5Db2xsYXBzZSwgJlJlbmRl
clN0eWxlOjppbml0aWFsTWFyZ2luQmVmb3JlQ29sbGFwc2U+OjpjcmVhdGVIYW5kbGVyKCkpOwor
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJvdHRvbUNvbGxh
cHNlLCBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2UpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlLCBDU1NQcm9wZXJ0
eVdlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFTWFy
cXVlZURpcmVjdGlvbiwgJlJlbmRlclN0eWxlOjptYXJxdWVlRGlyZWN0aW9uLCBFTWFycXVlZURp
cmVjdGlvbiwgJlJlbmRlclN0eWxlOjpzZXRNYXJxdWVlRGlyZWN0aW9uLCBFTWFycXVlZURpcmVj
dGlvbiwgJlJlbmRlclN0eWxlOjppbml0aWFsTWFycXVlZURpcmVjdGlvbj46OmNyZWF0ZUhhbmRs
ZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUlu
Y3JlbWVudCwgQXBwbHlQcm9wZXJ0eU1hcnF1ZWVJbmNyZW1lbnQ6OmNyZWF0ZUhhbmRsZXIoKSk7
CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJlcGV0aXRp
b24sIEFwcGx5UHJvcGVydHlNYXJxdWVlUmVwZXRpdGlvbjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3BlZWQsIEFwcGx5
UHJvcGVydHlNYXJxdWVlU3BlZWQ6OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVN0eWxlLCBBcHBseVByb3BlcnR5RGVmYXVs
dDxFTWFycXVlZUJlaGF2aW9yLCAmUmVuZGVyU3R5bGU6Om1hcnF1ZWVCZWhhdmlvciwgRU1hcnF1
ZWVCZWhhdmlvciwgJlJlbmRlclN0eWxlOjpzZXRNYXJxdWVlQmVoYXZpb3IsIEVNYXJxdWVlQmVo
YXZpb3IsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcnF1ZWVCZWhhdmlvcj46OmNyZWF0ZUhhbmRs
ZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0JveElt
YWdlLCBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2U8Qm9yZGVyTWFzaywgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQm94SW1hZ2UsICZSZW5kZXJTdHlsZTo6bWFza0JveEltYWdlLCAmUmVuZGVyU3R5bGU6
OnNldE1hc2tCb3hJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlT3V0c2V0LCBBcHBseVByb3BlcnR5Qm9y
ZGVySW1hZ2VNb2RpZmllcjxCb3JkZXJNYXNrLCBPdXRzZXQ+OjpjcmVhdGVIYW5kbGVyKCkpOwor
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVJlcGVh
dCwgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8Qm9yZGVyTWFzaywgUmVwZWF0Pjo6
Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQm94SW1hZ2VTbGljZSwgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8Qm9y
ZGVyTWFzaywgU2xpY2U+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZSwgQXBwbHlQcm9wZXJ0eUJvcmRl
ckltYWdlU291cmNlPENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlLCAmUmVuZGVy
U3R5bGU6Om1hc2tCb3hJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2VT
b3VyY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hc2tCb3hJbWFnZVNvdXJjZT46OmNyZWF0ZUhh
bmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0Jv
eEltYWdlV2lkdGgsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPEJvcmRlck1hc2ss
IFdpZHRoPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRNYXNrQ2xpcCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbEJveCwgQ1NT
UHJvcGVydHlXZWJraXRNYXNrQ2xpcCwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nl
c3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzQ2xp
cFNldCwgJkZpbGxMYXllcjo6Y2xpcCwgJkZpbGxMYXllcjo6c2V0Q2xpcCwgJkZpbGxMYXllcjo6
Y2xlYXJDbGlwLCAmRmlsbExheWVyOjppbml0aWFsRmlsbENsaXAsICZDU1NUb1N0eWxlTWFwOjpt
YXBGaWxsQ2xpcD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2Via2l0TWFza0NvbXBvc2l0ZSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxDb21w
b3NpdGVPcGVyYXRvciwgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ29tcG9zaXRlLCBNYXNrRmlsbExh
eWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xh
eWVycywgJkZpbGxMYXllcjo6aXNDb21wb3NpdGVTZXQsICZGaWxsTGF5ZXI6OmNvbXBvc2l0ZSwg
JkZpbGxMYXllcjo6c2V0Q29tcG9zaXRlLCAmRmlsbExheWVyOjpjbGVhckNvbXBvc2l0ZSwgJkZp
bGxMYXllcjo6aW5pdGlhbEZpbGxDb21wb3NpdGUsICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsQ29t
cG9zaXRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRNYXNrSW1hZ2UsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8U3R5bGVJbWFnZSos
IENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6
OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6
aXNJbWFnZVNldCwgJkZpbGxMYXllcjo6aW1hZ2UsICZGaWxsTGF5ZXI6OnNldEltYWdlLCAmRmls
bExheWVyOjpjbGVhckltYWdlLCAmRmlsbExheWVyOjppbml0aWFsRmlsbEltYWdlLCAmQ1NTVG9T
dHlsZU1hcDo6bWFwRmlsbEltYWdlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luLCBBcHBseVByb3BlcnR5RmlsbExh
eWVyPEVGaWxsQm94LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4sIE1hc2tGaWxsTGF5ZXIs
ICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJz
LCAmRmlsbExheWVyOjppc09yaWdpblNldCwgJkZpbGxMYXllcjo6b3JpZ2luLCAmRmlsbExheWVy
OjpzZXRPcmlnaW4sICZGaWxsTGF5ZXI6OmNsZWFyT3JpZ2luLCAmRmlsbExheWVyOjppbml0aWFs
RmlsbE9yaWdpbiwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmlnaW4+OjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlv
blgsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8TGVuZ3RoLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQ
b3NpdGlvblgsIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywg
JlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmRmlsbExheWVyOjppc1hQb3NpdGlvblNldCwgJkZp
bGxMYXllcjo6eFBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRYUG9zaXRpb24sICZGaWxsTGF5ZXI6
OmNsZWFyWFBvc2l0aW9uLCAmRmlsbExheWVyOjppbml0aWFsRmlsbFhQb3NpdGlvbiwgJkNTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblksIEFwcGx5UHJvcGVy
dHlGaWxsTGF5ZXI8TGVuZ3RoLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblksIE1hc2tG
aWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjpt
YXNrTGF5ZXJzLCAmRmlsbExheWVyOjppc1lQb3NpdGlvblNldCwgJkZpbGxMYXllcjo6eVBvc2l0
aW9uLCAmRmlsbExheWVyOjpzZXRZUG9zaXRpb24sICZGaWxsTGF5ZXI6OmNsZWFyWVBvc2l0aW9u
LCAmRmlsbExheWVyOjppbml0aWFsRmlsbFlQb3NpdGlvbiwgJkNTU1RvU3R5bGVNYXA6Om1hcEZp
bGxZUG9zaXRpb24+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRYLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEVGaWxs
UmVwZWF0LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRYLCBNYXNrRmlsbExheWVyLCAmUmVu
ZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZp
bGxMYXllcjo6aXNSZXBlYXRYU2V0LCAmRmlsbExheWVyOjpyZXBlYXRYLCAmRmlsbExheWVyOjpz
ZXRSZXBlYXRYLCAmRmlsbExheWVyOjpjbGVhclJlcGVhdFgsICZGaWxsTGF5ZXI6OmluaXRpYWxG
aWxsUmVwZWF0WCwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRYPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0
WSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbFJlcGVhdCwgQ1NTUHJvcGVydHlXZWJraXRN
YXNrUmVwZWF0WSwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJz
LCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzUmVwZWF0WVNldCwgJkZp
bGxMYXllcjo6cmVwZWF0WSwgJkZpbGxMYXllcjo6c2V0UmVwZWF0WSwgJkZpbGxMYXllcjo6Y2xl
YXJSZXBlYXRZLCAmRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFksICZDU1NUb1N0eWxlTWFw
OjptYXBGaWxsUmVwZWF0WT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1NpemUsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8Rmls
bFNpemUsIENTU1Byb3BlcnR5V2Via2l0TWFza1NpemUsIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJT
dHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmRmlsbExh
eWVyOjppc1NpemVTZXQsICZGaWxsTGF5ZXI6OnNpemUsICZGaWxsTGF5ZXI6OnNldFNpemUsICZG
aWxsTGF5ZXI6OmNsZWFyU2l6ZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxTaXplLCAmQ1NTVG9T
dHlsZU1hcDo6bWFwRmlsbFNpemU+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2RlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxF
TkJTUE1vZGUsICZSZW5kZXJTdHlsZTo6bmJzcE1vZGUsIEVOQlNQTW9kZSwgJlJlbmRlclN0eWxl
OjpzZXROQlNQTW9kZSwgRU5CU1BNb2RlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxOQlNQTW9kZT46
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0UGVyc3BlY3RpdmVPcmlnaW4sIEFwcGx5UHJvcGVydHlFeHBhbmRpbmc8U3VwcHJlc3NWYWx1
ZSwgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpblgsIENTU1Byb3BlcnR5V2Via2l0
UGVyc3BlY3RpdmVPcmlnaW5ZPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpblgsIEFwcGx5UHJvcGVydHlM
ZW5ndGg8JlJlbmRlclN0eWxlOjpwZXJzcGVjdGl2ZU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0
UGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQZXJzcGVjdGl2ZU9yaWdp
blg+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWSwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5
bGU6OnBlcnNwZWN0aXZlT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZU9yaWdp
blksICZSZW5kZXJTdHlsZTo6aW5pdGlhbFBlcnNwZWN0aXZlT3JpZ2luWT46OmNyZWF0ZUhhbmRs
ZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0UHJpbnRDb2xv
ckFkanVzdCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8UHJpbnRDb2xvckFkanVzdCwgJlJlbmRlclN0
eWxlOjpwcmludENvbG9yQWRqdXN0LCBQcmludENvbG9yQWRqdXN0LCAmUmVuZGVyU3R5bGU6OnNl
dFByaW50Q29sb3JBZGp1c3QsIFByaW50Q29sb3JBZGp1c3QsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFByaW50Q29sb3JBZGp1c3Q+OjpjcmVhdGVIYW5kbGVyKCkpOworI2lmIEVOQUJMRShDU1NfUkVH
SU9OUykKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVh
a0FmdGVyLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OnJl
Z2lvbkJyZWFrQWZ0ZXIsIEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6c2V0UmVnaW9uQnJlYWtB
ZnRlciwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjppbml0aWFsUGFnZUJyZWFrPjo6Y3JlYXRl
SGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRSZWdp
b25CcmVha0JlZm9yZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBhZ2VCcmVhaywgJlJlbmRlclN0
eWxlOjpyZWdpb25CcmVha0JlZm9yZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjpzZXRSZWdp
b25CcmVha0JlZm9yZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjppbml0aWFsUGFnZUJyZWFr
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRSZWdpb25CcmVha0luc2lkZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBhZ2VCcmVhaywg
JlJlbmRlclN0eWxlOjpyZWdpb25CcmVha0luc2lkZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxl
OjpzZXRSZWdpb25CcmVha0luc2lkZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjppbml0aWFs
UGFnZUJyZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRSZWdpb25PdmVyZmxvdywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8UmVnaW9u
T3ZlcmZsb3csICZSZW5kZXJTdHlsZTo6cmVnaW9uT3ZlcmZsb3csIFJlZ2lvbk92ZXJmbG93LCAm
UmVuZGVyU3R5bGU6OnNldFJlZ2lvbk92ZXJmbG93LCBSZWdpb25PdmVyZmxvdywgJlJlbmRlclN0
eWxlOjppbml0aWFsUmVnaW9uT3ZlcmZsb3c+OjpjcmVhdGVIYW5kbGVyKCkpOworI2VuZGlmCisg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0UnRsT3JkZXJpbmcsIEFwcGx5
UHJvcGVydHlEZWZhdWx0PE9yZGVyLCAmUmVuZGVyU3R5bGU6OnJ0bE9yZGVyaW5nLCBPcmRlciwg
JlJlbmRlclN0eWxlOjpzZXRSVExPcmRlcmluZywgT3JkZXIsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFJUTE9yZGVyaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24sIEFwcGx5UHJvcGVydHlEZWZhdWx0PFJ1YnlQ
b3NpdGlvbiwgJlJlbmRlclN0eWxlOjpydWJ5UG9zaXRpb24sIFJ1YnlQb3NpdGlvbiwgJlJlbmRl
clN0eWxlOjpzZXRSdWJ5UG9zaXRpb24sIFJ1YnlQb3NpdGlvbiwgJlJlbmRlclN0eWxlOjppbml0
aWFsUnVieVBvc2l0aW9uPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0Q29tYmluZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4
dENvbWJpbmUsICZSZW5kZXJTdHlsZTo6dGV4dENvbWJpbmUsIFRleHRDb21iaW5lLCAmUmVuZGVy
U3R5bGU6OnNldFRleHRDb21iaW5lLCBUZXh0Q29tYmluZSwgJlJlbmRlclN0eWxlOjppbml0aWFs
VGV4dENvbWJpbmU+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc0NvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9J
bmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjp0ZXh0RW1waGFzaXNDb2xvciwgJlJlbmRl
clN0eWxlOjpzZXRUZXh0RW1waGFzaXNDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlu
a1RleHRFbXBoYXNpc0NvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigp
KTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNQ
b3NpdGlvbiwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dEVtcGhhc2lzUG9zaXRpb24sICZSZW5k
ZXJTdHlsZTo6dGV4dEVtcGhhc2lzUG9zaXRpb24sIFRleHRFbXBoYXNpc1Bvc2l0aW9uLCAmUmVu
ZGVyU3R5bGU6OnNldFRleHRFbXBoYXNpc1Bvc2l0aW9uLCBUZXh0RW1waGFzaXNQb3NpdGlvbiwg
JlJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzUG9zaXRpb24+OjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNp
c1N0eWxlLCBBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmNyZWF0ZUhhbmRsZXIoKSk7
CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvciwg
QXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQsICZSZW5kZXJTdHlsZTo6dGV4
dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldFZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcj46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VGV4
dFNlY3VyaXR5LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFVGV4dFNlY3VyaXR5LCAmUmVuZGVyU3R5
bGU6OnRleHRTZWN1cml0eSwgRVRleHRTZWN1cml0eSwgJlJlbmRlclN0eWxlOjpzZXRUZXh0U2Vj
dXJpdHksIEVUZXh0U2VjdXJpdHksICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRTZWN1cml0eT46
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0VGV4dFN0cm9rZUNvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVu
dCwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFN0
cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yLCAm
UmVuZGVyU3R5bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YLCBBcHBseVByb3BlcnR5TGVu
Z3RoPCZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpzZXRUcmFu
c2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2Zvcm1PcmlnaW5YPjo6Y3Jl
YXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm1PcmlnaW5ZLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6dHJhbnNm
b3JtT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxUcmFuc2Zvcm1PcmlnaW5ZPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5aLCBBcHBseVBy
b3BlcnR5Q29tcHV0ZUxlbmd0aDxmbG9hdCwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5a
LCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblosICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFRyYW5zZm9ybU9yaWdpblo+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybVN0eWxlLCBBcHBseVByb3BlcnR5RGVmYXVs
dDxFVHJhbnNmb3JtU3R5bGUzRCwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1TdHlsZTNELCBFVHJh
bnNmb3JtU3R5bGUzRCwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1TdHlsZTNELCBFVHJhbnNm
b3JtU3R5bGUzRCwgJlJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNmb3JtU3R5bGUzRD46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VHJh
bnNpdGlvbkRlbGF5LCBBcHBseVByb3BlcnR5QW5pbWF0aW9uPGRvdWJsZSwgJkFuaW1hdGlvbjo6
ZGVsYXksICZBbmltYXRpb246OnNldERlbGF5LCAmQW5pbWF0aW9uOjppc0RlbGF5U2V0LCAmQW5p
bWF0aW9uOjpjbGVhckRlbGF5LCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGVsYXksICZD
U1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EZWxheSwgJlJlbmRlclN0eWxlOjphY2Nlc3NUcmFu
c2l0aW9ucywgJlJlbmRlclN0eWxlOjp0cmFuc2l0aW9ucz46OmNyZWF0ZUhhbmRsZXIoKSk7Cisg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9u
LCBBcHBseVByb3BlcnR5QW5pbWF0aW9uPGRvdWJsZSwgJkFuaW1hdGlvbjo6ZHVyYXRpb24sICZB
bmltYXRpb246OnNldER1cmF0aW9uLCAmQW5pbWF0aW9uOjppc0R1cmF0aW9uU2V0LCAmQW5pbWF0
aW9uOjpjbGVhckR1cmF0aW9uLCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRHVyYXRpb24s
ICZDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EdXJhdGlvbiwgJlJlbmRlclN0eWxlOjphY2Nl
c3NUcmFuc2l0aW9ucywgJlJlbmRlclN0eWxlOjp0cmFuc2l0aW9ucz46OmNyZWF0ZUhhbmRsZXIo
KSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblBy
b3BlcnR5LCBBcHBseVByb3BlcnR5QW5pbWF0aW9uPENTU1Byb3BlcnR5SUQsICZBbmltYXRpb246
OnByb3BlcnR5LCAmQW5pbWF0aW9uOjpzZXRQcm9wZXJ0eSwgJkFuaW1hdGlvbjo6aXNQcm9wZXJ0
eVNldCwgJkFuaW1hdGlvbjo6Y2xlYXJQcm9wZXJ0eSwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1h
dGlvblByb3BlcnR5LCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUHJvcGVydHksICZSZW5k
ZXJTdHlsZTo6YWNjZXNzVHJhbnNpdGlvbnMsICZSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbnM+Ojpj
cmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxjb25zdCBQ
YXNzUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiwgJkFuaW1hdGlvbjo6dGltaW5nRnVuY3Rpb24sICZB
bmltYXRpb246OnNldFRpbWluZ0Z1bmN0aW9uLCAmQW5pbWF0aW9uOjppc1RpbWluZ0Z1bmN0aW9u
U2V0LCAmQW5pbWF0aW9uOjpjbGVhclRpbWluZ0Z1bmN0aW9uLCAmQW5pbWF0aW9uOjppbml0aWFs
QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sICZDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25UaW1p
bmdGdW5jdGlvbiwgJlJlbmRlclN0eWxlOjphY2Nlc3NUcmFuc2l0aW9ucywgJlJlbmRlclN0eWxl
Ojp0cmFuc2l0aW9ucz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWcsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVVc2VyRHJh
ZywgJlJlbmRlclN0eWxlOjp1c2VyRHJhZywgRVVzZXJEcmFnLCAmUmVuZGVyU3R5bGU6OnNldFVz
ZXJEcmFnLCBFVXNlckRyYWcsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFVzZXJEcmFnPjo6Y3JlYXRl
SGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRVc2Vy
TW9kaWZ5LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFVXNlck1vZGlmeSwgJlJlbmRlclN0eWxlOjp1
c2VyTW9kaWZ5LCBFVXNlck1vZGlmeSwgJlJlbmRlclN0eWxlOjpzZXRVc2VyTW9kaWZ5LCBFVXNl
ck1vZGlmeSwgJlJlbmRlclN0eWxlOjppbml0aWFsVXNlck1vZGlmeT46OmNyZWF0ZUhhbmRsZXIo
KSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdCwg
QXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVVzZXJTZWxlY3QsICZSZW5kZXJTdHlsZTo6dXNlclNlbGVj
dCwgRVVzZXJTZWxlY3QsICZSZW5kZXJTdHlsZTo6c2V0VXNlclNlbGVjdCwgRVVzZXJTZWxlY3Qs
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbFVzZXJTZWxlY3Q+OjpjcmVhdGVIYW5kbGVyKCkpOworICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENsaXBQYXRoLCBBcHBseVByb3Bl
cnR5Q2xpcFBhdGg8JlJlbmRlclN0eWxlOjpjbGlwUGF0aCwgJlJlbmRlclN0eWxlOjpzZXRDbGlw
UGF0aCwgJlJlbmRlclN0eWxlOjppbml0aWFsQ2xpcFBhdGg+OjpjcmVhdGVIYW5kbGVyKCkpOwor
CisjaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdFdyYXBGbG93LCBBcHBseVByb3BlcnR5RGVmYXVsdDxXcmFwRmxvdywgJlJl
bmRlclN0eWxlOjp3cmFwRmxvdywgV3JhcEZsb3csICZSZW5kZXJTdHlsZTo6c2V0V3JhcEZsb3cs
IFdyYXBGbG93LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxXcmFwRmxvdz46OmNyZWF0ZUhhbmRsZXIo
KSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW4s
IEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpzaGFwZU1hcmdpbiwgJlJlbmRlclN0
eWxlOjpzZXRTaGFwZU1hcmdpbiwgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVNYXJnaW4+Ojpj
cmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dFNoYXBlUGFkZGluZywgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OnNoYXBlUGFk
ZGluZywgJlJlbmRlclN0eWxlOjpzZXRTaGFwZVBhZGRpbmcsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFNoYXBlUGFkZGluZz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0V3JhcFRocm91Z2gsIEFwcGx5UHJvcGVydHlEZWZhdWx0PFdyYXBU
aHJvdWdoLCAmUmVuZGVyU3R5bGU6OndyYXBUaHJvdWdoLCBXcmFwVGhyb3VnaCwgJlJlbmRlclN0
eWxlOjpzZXRXcmFwVGhyb3VnaCwgV3JhcFRocm91Z2gsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFdy
YXBUaHJvdWdoPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRTaGFwZUluc2lkZSwgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNoYXBlPCZS
ZW5kZXJTdHlsZTo6c2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbnNpZGUsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlSW5zaWRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNpZGUsIEFwcGx5UHJv
cGVydHlFeGNsdXNpb25TaGFwZTwmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlJlbmRlclN0
eWxlOjpzZXRTaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlT3V0c2lkZT46
OmNyZWF0ZUhhbmRsZXIoKSk7CisjZW5kaWYKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXaGl0ZVNwYWNlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFV2hpdGVTcGFjZSwgJlJlbmRl
clN0eWxlOjp3aGl0ZVNwYWNlLCBFV2hpdGVTcGFjZSwgJlJlbmRlclN0eWxlOjpzZXRXaGl0ZVNw
YWNlLCBFV2hpdGVTcGFjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsV2hpdGVTcGFjZT46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2lkb3dzLCBB
cHBseVByb3BlcnR5QXV0bzxzaG9ydCwgJlJlbmRlclN0eWxlOjp3aWRvd3MsICZSZW5kZXJTdHls
ZTo6c2V0V2lkb3dzLCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9XaWRvd3MsICZSZW5kZXJTdHlsZTo6
c2V0SGFzQXV0b1dpZG93cz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5V2lkdGgsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjp3
aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRXaWR0aCwgJlJlbmRlclN0eWxlOjppbml0aWFsU2l6ZSwg
QXV0b0VuYWJsZWQsIExlZ2FjeUludHJpbnNpY0VuYWJsZWQsIEludHJpbnNpY0VuYWJsZWQsIE5v
bmVEaXNhYmxlZCwgVW5kZWZpbmVkRGlzYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdvcmRCcmVhaywgQXBwbHlQcm9wZXJ0eURlZmF1
bHQ8RVdvcmRCcmVhaywgJlJlbmRlclN0eWxlOjp3b3JkQnJlYWssIEVXb3JkQnJlYWssICZSZW5k
ZXJTdHlsZTo6c2V0V29yZEJyZWFrLCBFV29yZEJyZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxX
b3JkQnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdvcmRTcGFjaW5nLCBBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDxpbnQsICZSZW5k
ZXJTdHlsZTo6d29yZFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbExldHRlcldvcmRTcGFjaW5nLCBOb3JtYWxFbmFibGVkLCBUaGlja25l
c3NEaXNhYmxlZCwgU1ZHWm9vbUVuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIC8vIFVB
cyBtdXN0IHRyZWF0ICd3b3JkLXdyYXAnIGFzIGFuIGFsdGVybmF0ZSBuYW1lIGZvciB0aGUgJ292
ZXJmbG93LXdyYXAnIHByb3BlcnR5LiBTbyB1c2luZyB0aGUgc2FtZSBoYW5kbGVycy4KKyAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXb3JkV3JhcCwgQXBwbHlQcm9wZXJ0eURlZmF1
bHQ8RU92ZXJmbG93V3JhcCwgJlJlbmRlclN0eWxlOjpvdmVyZmxvd1dyYXAsIEVPdmVyZmxvd1dy
YXAsICZSZW5kZXJTdHlsZTo6c2V0T3ZlcmZsb3dXcmFwLCBFT3ZlcmZsb3dXcmFwLCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxPdmVyZmxvd1dyYXA+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVpJbmRleCwgQXBwbHlQcm9wZXJ0eUF1dG88aW50LCAm
UmVuZGVyU3R5bGU6OnpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRaSW5kZXgsICZSZW5kZXJTdHls
ZTo6aGFzQXV0b1pJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRIYXNBdXRvWkluZGV4Pjo6Y3JlYXRl
SGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlab29tLCBBcHBs
eVByb3BlcnR5Wm9vbTo6Y3JlYXRlSGFuZGxlcigpKTsKK30KKworCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNThiNDcxY2M4N2Zj
YzM4Y2Q2YzFkZGNmMmQ1M2E2ZjNhNWFiZGVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuaApAQCAtMCwwICsxLDEwNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBEZXByZWNhdGVkU3R5bGVCdWlsZGVyX2gKKyNkZWZpbmUgRGVw
cmVjYXRlZFN0eWxlQnVpbGRlcl9oCisKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisj
aW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDU1NWYWx1ZTsKK2NsYXNzIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI7CitjbGFz
cyBTdHlsZVJlc29sdmVyOworCitjbGFzcyBQcm9wZXJ0eUhhbmRsZXIgeworcHVibGljOgorICAg
IHR5cGVkZWYgdm9pZCAoKkluaGVyaXRGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciopOworICAgIHR5cGVkZWYgdm9pZCAoKkluaXRpYWxGdW5jdGlvbikoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciopOworICAgIHR5cGVkZWYgdm9pZCAoKkFwcGx5RnVuY3Rpb24pKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqLCBDU1NWYWx1ZSopOworICAgIFByb3BlcnR5SGFu
ZGxlcigpIDogbV9pbmhlcml0KDApLCBtX2luaXRpYWwoMCksIG1fYXBwbHkoMCkgeyB9CisgICAg
UHJvcGVydHlIYW5kbGVyKEluaGVyaXRGdW5jdGlvbiBpbmhlcml0LCBJbml0aWFsRnVuY3Rpb24g
aW5pdGlhbCwgQXBwbHlGdW5jdGlvbiBhcHBseSkgOiBtX2luaGVyaXQoaW5oZXJpdCksIG1faW5p
dGlhbChpbml0aWFsKSwgbV9hcHBseShhcHBseSkgeyB9CisgICAgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpIGNvbnN0IHsgQVNTRVJUKG1faW5oZXJpdCk7ICgqbV9pbmhlcml0KShwcm9wZXJ0eUlELCBz
dHlsZVJlc29sdmVyKTsgfQorICAgIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSBjb25zdCB7IEFTU0VS
VChtX2luaXRpYWwpOyAoKm1faW5pdGlhbCkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7IH0K
KyAgICB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIGNvbnN0IHsgQVNTRVJUKG1fYXBw
bHkpOyAoKm1fYXBwbHkpKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsgfQorICAg
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5oZXJpdCAmJiBtX2luaXRpYWwgJiYg
bV9hcHBseTsgfQorICAgIEluaGVyaXRGdW5jdGlvbiBpbmhlcml0RnVuY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2luaGVyaXQ7IH0KKyAgICBJbml0aWFsRnVuY3Rpb24gaW5pdGlhbEZ1bmN0aW9u
KCkgeyByZXR1cm4gbV9pbml0aWFsOyB9CisgICAgQXBwbHlGdW5jdGlvbiBhcHBseUZ1bmN0aW9u
KCkgeyByZXR1cm4gbV9hcHBseTsgfQorcHJpdmF0ZToKKyAgICBJbmhlcml0RnVuY3Rpb24gbV9p
bmhlcml0OworICAgIEluaXRpYWxGdW5jdGlvbiBtX2luaXRpYWw7CisgICAgQXBwbHlGdW5jdGlv
biBtX2FwcGx5OworfTsKKworY2xhc3MgRGVwcmVjYXRlZFN0eWxlQnVpbGRlciB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRGVwcmVjYXRlZFN0eWxlQnVpbGRlcik7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBEZXByZWNhdGVkU3R5bGVCdWls
ZGVyJiBzaGFyZWRTdHlsZUJ1aWxkZXIoKTsKKworICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYg
cHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQodmFsaWQocHJvcGVydHkpKTsKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlN
YXBbaW5kZXgocHJvcGVydHkpXTsKKyAgICB9Citwcml2YXRlOgorICAgIERlcHJlY2F0ZWRTdHls
ZUJ1aWxkZXIoKTsKKyAgICBzdGF0aWMgaW50IGluZGV4KENTU1Byb3BlcnR5SUQgcHJvcGVydHkp
CisgICAgeworICAgICAgICByZXR1cm4gcHJvcGVydHkgLSBmaXJzdENTU1Byb3BlcnR5OworICAg
IH0KKworICAgIHN0YXRpYyBib29sIHZhbGlkKENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCisgICAg
eworICAgICAgICBpbnQgaSA9IGluZGV4KHByb3BlcnR5KTsKKyAgICAgICAgcmV0dXJuIGkgPj0g
MCAmJiBpIDwgbnVtQ1NTUHJvcGVydGllczsKKyAgICB9CisKKyAgICB2b2lkIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhh
bmRsZXIpCisgICAgeworICAgICAgICBBU1NFUlQodmFsaWQocHJvcGVydHkpKTsKKyAgICAgICAg
QVNTRVJUKCFwcm9wZXJ0eUhhbmRsZXIocHJvcGVydHkpLmlzVmFsaWQoKSk7CisgICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoIWlzRXhwYW5kZWRTaG9ydGhhbmQocHJvcGVydHkpLCAiU2hvcnRo
YW5kIHByb3BlcnR5IGlkID0gJWQgc2hvdWxkbid0IGJlIGluc2VydGVkIGludG8gU3R5bGVCdWls
ZGVyLiBTaG9ydGhhbmRzIHNob3VsZCBiZSBleHBhbmRlZCBhdCBwYXJzaW5nIHRpbWUuIiwgcHJv
cGVydHkpOworICAgICAgICBtX3Byb3BlcnR5TWFwW2luZGV4KHByb3BlcnR5KV0gPSBoYW5kbGVy
OworICAgIH0KKworICAgIHZvaWQgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5SUQgbmV3
UHJvcGVydHksIENTU1Byb3BlcnR5SUQgZXF1aXZhbGVudFByb3BlcnR5KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHZhbGlkKG5ld1Byb3BlcnR5KSk7CisgICAgICAgIEFTU0VSVCh2YWxpZChlcXVp
dmFsZW50UHJvcGVydHkpKTsKKyAgICAgICAgQVNTRVJUKCFwcm9wZXJ0eUhhbmRsZXIobmV3UHJv
cGVydHkpLmlzVmFsaWQoKSk7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWlzRXhwYW5k
ZWRTaG9ydGhhbmQobmV3UHJvcGVydHkpLCAiU2hvcnRoYW5kIHByb3BlcnR5IGlkID0gJWQgc2hv
dWxkbid0IGJlIGluc2VydGVkIGludG8gU3R5bGVCdWlsZGVyLiBTaG9ydGhhbmRzIHNob3VsZCBi
ZSBleHBhbmRlZCBhdCBwYXJzaW5nIHRpbWUuIiwgbmV3UHJvcGVydHkpOworICAgICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCFpc0V4cGFuZGVkU2hvcnRoYW5kKGVxdWl2YWxlbnRQcm9wZXJ0eSks
ICJTaG9ydGhhbmQgcHJvcGVydHkgaWQgPSAlZCBzaG91bGRuJ3QgYmUgaW5zZXJ0ZWQgaW50byBT
dHlsZUJ1aWxkZXIuIFNob3J0aGFuZHMgc2hvdWxkIGJlIGV4cGFuZGVkIGF0IHBhcnNpbmcgdGlt
ZS4iLCBlcXVpdmFsZW50UHJvcGVydHkpOworICAgICAgICBtX3Byb3BlcnR5TWFwW2luZGV4KG5l
d1Byb3BlcnR5KV0gPSBtX3Byb3BlcnR5TWFwW2luZGV4KGVxdWl2YWxlbnRQcm9wZXJ0eSldOwor
ICAgIH0KKworICAgIFByb3BlcnR5SGFuZGxlciBtX3Byb3BlcnR5TWFwW251bUNTU1Byb3BlcnRp
ZXNdOworfTsKKworfQorCisjZW5kaWYgLy8gRGVwcmVjYXRlZFN0eWxlQnVpbGRlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
YzNhMDdiNmE5OTE4NGQ2MGE5ZTE2ODg4NjkxYTYwMGIwOTVkNGM1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1
aWxkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjM1NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgot
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCi0KLSNpbmNs
dWRlICJCYXNpY1NoYXBlRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiQmFzaWNTaGFwZXMuaCIKLSNp
bmNsdWRlICJDU1NBc3BlY3RSYXRpb1ZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25W
YWx1ZS5oIgotI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NQ
cmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCi0jaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgotI2lu
Y2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgotI2luY2x1ZGUgIkNsaXBQYXRoT3BlcmF0aW9uLmgiCi0j
aW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RWxlbWVudC5oIgotI2luY2x1ZGUgIlBhaXIuaCIKLSNpbmNsdWRlICJSZWN0LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9VbnVz
ZWRQYXJhbS5oPgotCi0jaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQotI2luY2x1ZGUgIkV4Y2x1
c2lvblNoYXBlVmFsdWUuaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gRXhwYW5kVmFsdWVCZWhhdmlvciB7U3VwcHJlc3NWYWx1
ZSA9IDAsIEV4cGFuZFZhbHVlfTsKLXRlbXBsYXRlIDxFeHBhbmRWYWx1ZUJlaGF2aW9yIGV4cGFu
ZFZhbHVlLCBDU1NQcm9wZXJ0eUlEIG9uZSA9IENTU1Byb3BlcnR5SW52YWxpZCwgQ1NTUHJvcGVy
dHlJRCB0d28gPSBDU1NQcm9wZXJ0eUludmFsaWQsIENTU1Byb3BlcnR5SUQgdGhyZWUgPSBDU1NQ
cm9wZXJ0eUludmFsaWQsIENTU1Byb3BlcnR5SUQgZm91ciA9IENTU1Byb3BlcnR5SW52YWxpZCwg
Q1NTUHJvcGVydHlJRCBmaXZlID0gQ1NTUHJvcGVydHlJbnZhbGlkPgotY2xhc3MgQXBwbHlQcm9w
ZXJ0eUV4cGFuZGluZyB7Ci1wdWJsaWM6Ci0KLSAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBp
ZD4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAg
ICAgaWYgKGlkID09IENTU1Byb3BlcnR5SW52YWxpZCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRT
dHlsZUJ1aWxkZXIoKTsKLSAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0g
dGFibGUucHJvcGVydHlIYW5kbGVyKGlkKTsKLSAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgp
KQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0g
ICAgewotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0eWxlUmVz
b2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0eWxl
UmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPGZvdXI+KHByb3BlcnR5
SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxmaXZlPihwcm9w
ZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVy
dHlJRCBpZD4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsK
LSAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5SW52YWxpZCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpz
aGFyZWRTdHlsZUJ1aWxkZXIoKTsKLSAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5k
bGVyID0gdGFibGUucHJvcGVydHlIYW5kbGVyKGlkKTsKLSAgICAgICAgaWYgKGhhbmRsZXIuaXNW
YWxpZCgpKQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlE
LCBzdHlsZVJlc29sdmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCi0gICAgewotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0
eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTx0d28+KHByb3BlcnR5SUQs
IHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTx0aHJlZT4ocHJvcGVy
dHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPGZvdXI+KHBy
b3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxmaXZl
Pihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8Q1NT
UHJvcGVydHlJRCBpZD4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY29uc3QgU3R5bGVCdWlsZGVyJiB0YWJsZSA9
IFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7Ci0gICAgICAgIGNvbnN0IFByb3Bl
cnR5SGFuZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3BlcnR5SGFuZGxlcihpZCk7Ci0gICAgICAg
IGlmIChoYW5kbGVyLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghZXhwYW5k
VmFsdWUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXBwbHlWYWx1ZTxvbmU+KHBy
b3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgYXBwbHlWYWx1ZTx0d28+
KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgYXBwbHlWYWx1ZTx0
aHJlZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBhcHBseVZh
bHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgYXBw
bHlWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgfQot
ICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3Bl
cnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5
VmFsdWUpOyB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgR2V0dGVyVHlwZSwgR2V0dGVyVHlw
ZSAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdHlwZW5hbWUgU2V0dGVy
VHlwZSwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoU2V0dGVyVHlwZSksIHR5
cGVuYW1lIEluaXRpYWxUeXBlLCBJbml0aWFsVHlwZSAoKmluaXRpYWxGdW5jdGlvbikoKT4KLWNs
YXNzIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
c2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+
KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgR2V0dGVyVHlwZSB2YWx1ZShS
ZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmdldHRlckZ1bmN0aW9uKSgpOyB9
Ci0gICAgc3RhdGljIEluaXRpYWxUeXBlIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRpYWxGdW5j
dGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgdmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOyB9Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikgeyBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbml0
aWFsKCkpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiwgQ1NTVmFsdWUqKSB7IH0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNy
ZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVl
LCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGUgPHR5
cGVuYW1lIEdldHRlclR5cGUsIEdldHRlclR5cGUgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rp
b24pKCkgY29uc3QsIHR5cGVuYW1lIFNldHRlclR5cGUsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0
dGVyRnVuY3Rpb24pKFNldHRlclR5cGUpLCB0eXBlbmFtZSBJbml0aWFsVHlwZSwgSW5pdGlhbFR5
cGUgKCppbml0aWFsRnVuY3Rpb24pKCk+Ci1jbGFzcyBBcHBseVByb3BlcnR5RGVmYXVsdCB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0
ZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpKTsKLSAgICB9Ci0g
ICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAg
IFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEdldHRl
clR5cGUsIGdldHRlckZ1bmN0aW9uLCBTZXR0ZXJUeXBlLCBzZXR0ZXJGdW5jdGlvbiwgSW5pdGlh
bFR5cGUsIGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJu
IFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRp
YWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIE51bWJlclR5cGUsIE51bWJlclR5cGUgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24p
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKE51bWJlclR5cGUp
LCBOdW1iZXJUeXBlICgqaW5pdGlhbEZ1bmN0aW9uKSgpLCBpbnQgaWRNYXBzVG9NaW51c09uZSA9
IENTU1ZhbHVlQXV0bz4KLWNsYXNzIEFwcGx5UHJvcGVydHlOdW1iZXIgewotcHVibGljOgotICAg
IHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTnVtYmVyVHlwZSB2YWx1
ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBpZE1hcHNUb01pbnVz
T25lKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgLTEpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWU8TnVtYmVyVHlwZT4oQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpKTsKLSAgICB9Ci0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQ
cm9wZXJ0eURlZmF1bHRCYXNlPE51bWJlclR5cGUsIGdldHRlckZ1bmN0aW9uLCBOdW1iZXJUeXBl
LCBzZXR0ZXJGdW5jdGlvbiwgTnVtYmVyVHlwZSwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFu
ZGxlcigpOwotICAgICAgICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1
bmN0aW9uKCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZSA8U3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rp
b24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxGdW5jdGlvbikoKSwgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eT4KLWNsYXNzIEFwcGx5UHJvcGVydHlTdHlsZUltYWdlIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5
LCB2YWx1ZSkpOyB9Ci0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
LSAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURl
ZmF1bHRCYXNlPFN0eWxlSW1hZ2UqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiwgc2V0dGVyRnVuY3Rpb24sIFN0eWxlSW1hZ2UqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVh
dGVIYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhl
cml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOwot
ICAgIH0KLX07Ci0KLWVudW0gQXV0b1ZhbHVlVHlwZSB7TnVtYmVyID0gMCwgQ29tcHV0ZUxlbmd0
aH07Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlv
bikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoVCksIGJvb2wg
KFJlbmRlclN0eWxlOjoqaGFzQXV0b0Z1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnNldEF1dG9GdW5jdGlvbikoKSwgQXV0b1ZhbHVlVHlwZSB2YWx1ZVR5cGUgPSBOdW1iZXIs
IGludCBhdXRvSWRlbnRpdHkgPSBDU1NWYWx1ZUF1dG8+Ci1jbGFzcyBBcHBseVByb3BlcnR5QXV0
byB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxl
LCBUIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0
aWMgVCB2YWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmdldHRlckZ1
bmN0aW9uKSgpOyB9Ci0gICAgc3RhdGljIGJvb2wgaGFzQXV0byhSZW5kZXJTdHlsZSogc3R5bGUp
IHsgcmV0dXJuIChzdHlsZS0+Kmhhc0F1dG9GdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lk
IHNldEF1dG8oUmVuZGVyU3R5bGUqIHN0eWxlKSB7IChzdHlsZS0+KnNldEF1dG9GdW5jdGlvbiko
KTsgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIGlmIChoYXNBdXRv
KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKQotICAgICAgICAgICAgc2V0QXV0byhzdHls
ZVJlc29sdmVyLT5zdHlsZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgdmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUo
KSkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0QXV0byhzdHlsZVJlc29s
dmVyLT5zdHlsZSgpKTsgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAg
ewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBhdXRvSWRlbnRpdHkpCi0gICAgICAgICAgICBzZXRBdXRv
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT0g
TnVtYmVyKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnBy
aW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWVUeXBlID09IENvbXB1dGVMZW5n
dGgpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRp
dmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJl
c29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRl
SGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZh
cHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9Ci19OwotCi1jbGFzcyBBcHBseVByb3Bl
cnR5Q2xpcCB7Ci1wcml2YXRlOgotICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNv
bnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IEF1dG9D
b252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxl
bWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7Ci0g
ICAgfQotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0g
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCk7Ci0gICAgICAgIGlmICghcGFyZW50U3R5bGUtPmhhc0NsaXAoKSkKLSAgICAgICAgICAg
IHJldHVybiBhcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcChwYXJlbnRTdHlsZS0+Y2xpcFRv
cCgpLCBwYXJlbnRTdHlsZS0+Y2xpcFJpZ2h0KCksIHBhcmVudFN0eWxlLT5jbGlwQm90dG9tKCks
IHBhcmVudFN0eWxlLT5jbGlwTGVmdCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0SGFzQ2xpcCh0cnVlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAg
IHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVu
Z3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldEhhc0NsaXAoZmFsc2UpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotCi0gICAg
ICAgIGlmIChSZWN0KiByZWN0ID0gcHJpbWl0aXZlVmFsdWUtPmdldFJlY3RWYWx1ZSgpKSB7Ci0g
ICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJl
Y3QtPnRvcCgpKTsKLSAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0xlbmd0aChz
dHlsZVJlc29sdmVyLCByZWN0LT5yaWdodCgpKTsKLSAgICAgICAgICAgIExlbmd0aCBib3R0b20g
PSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+Ym90dG9tKCkpOwotICAgICAg
ICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+
bGVmdCgpKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAodG9w
LCByaWdodCwgYm90dG9tLCBsZWZ0KTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldEhhc0NsaXAodHJ1ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgp
KTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2Up
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFw
cGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KLX07Ci0KLWVudW0gQ29sb3JJbmhlcml0
IHtOb0luaGVyaXRGcm9tUGFyZW50ID0gMCwgSW5oZXJpdEZyb21QYXJlbnR9OwotQ29sb3IgZGVm
YXVsdEluaXRpYWxDb2xvcigpOwotQ29sb3IgZGVmYXVsdEluaXRpYWxDb2xvcigpIHsgcmV0dXJu
IENvbG9yKCk7IH0KLXRlbXBsYXRlIDxDb2xvckluaGVyaXQgaW5oZXJpdENvbG9yRnJvbVBhcmVu
dCwKLSAgICAgICAgICBDb2xvciAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25z
dCwKLSAgICAgICAgICB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShjb25zdCBD
b2xvciYpLAotICAgICAgICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqdmlzaXRlZExpbmtTZXR0ZXJG
dW5jdGlvbikoY29uc3QgQ29sb3ImKSwKLSAgICAgICAgICBDb2xvciAoUmVuZGVyU3R5bGU6Oipk
ZWZhdWx0RnVuY3Rpb24pKCkgY29uc3QsCi0gICAgICAgICAgQ29sb3IgKCppbml0aWFsRnVuY3Rp
b24pKCkgPSAmZGVmYXVsdEluaXRpYWxDb2xvcj4KLWNsYXNzIEFwcGx5UHJvcGVydHlDb2xvciB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIC8vIFZpc2l0
ZWQgbGluayBzdHlsZSBjYW4gbmV2ZXIgZXhwbGljaXRseSBpbmhlcml0IGZyb20gcGFyZW50IHZp
c2l0ZWQgbGluayBzdHlsZSBzbyBubyBzZXBhcmF0ZSBnZXR0ZXJzIGFyZSBuZWVkZWQuCi0gICAg
ICAgIENvbG9yIGNvbG9yID0gKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipnZXR0ZXJG
dW5jdGlvbikoKTsKLSAgICAgICAgYXBwbHlDb2xvclZhbHVlKHN0eWxlUmVzb2x2ZXIsIGNvbG9y
LmlzVmFsaWQoKSA/IGNvbG9yIDogKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipkZWZh
dWx0RnVuY3Rpb24pKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewot
ICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3R5bGVSZXNvbHZlciwgaW5pdGlhbEZ1bmN0aW9uKCkp
OwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0g
ICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGlmIChpbmhl
cml0Q29sb3JGcm9tUGFyZW50ICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlQ3VycmVudGNvbG9yKQotICAgICAgICAgICAgYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKHN0eWxl
UmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQotICAgICAgICAgICAgICAg
IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXIt
PmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKSk7Ci0gICAgICAgICAgICBp
ZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQotICAg
ICAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJG
dW5jdGlvbikoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZl
VmFsdWUsIC8qIGZvclZpc2l0ZWRMaW5rICovIHRydWUpKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5Q29sb3JWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgewotICAgICAgICBpZiAoc3R5bGVSZXNvbHZl
ci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCi0gICAgICAgICAgICAoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShjb2xvcik7Ci0gICAgICAgIGlmIChzdHls
ZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0gICAgICAgICAg
ICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKGNv
bG9yKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIo
KSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0
aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGUgPFRleHREaXJlY3Rpb24g
KFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxl
Ojoqc2V0dGVyRnVuY3Rpb24pKFRleHREaXJlY3Rpb24pLCBUZXh0RGlyZWN0aW9uICgqaW5pdGlh
bEZ1bmN0aW9uKSgpPgotY2xhc3MgQXBwbHlQcm9wZXJ0eURpcmVjdGlvbiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24sIGdldHRlckZ1bmN0aW9uLCBUZXh0
RGlyZWN0aW9uLCBzZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgaW5pdGlhbEZ1bmN0aW9u
Pjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBzdHlsZVJlc29sdmVyLT5lbGVtZW50KCk7Ci0gICAgICAgIGlm
IChlbGVtZW50ICYmIHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSA9PSBlbGVtZW50LT5kb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkt
PnNldERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOwotICAgIH0KLQotICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9w
ZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24s
IGdldHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9uLCBzZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVj
dGlvbiwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwotICAgICAgICByZXR1cm4g
UHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5pdGlh
bEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKLSAgICB9Ci19OwotCi1lbnVtIExlbmd0aEF1dG8g
eyBBdXRvRGlzYWJsZWQgPSAwLCBBdXRvRW5hYmxlZCB9OwotZW51bSBMZW5ndGhMZWdhY3lJbnRy
aW5zaWMgeyBMZWdhY3lJbnRyaW5zaWNEaXNhYmxlZCA9IDAsIExlZ2FjeUludHJpbnNpY0VuYWJs
ZWQgfTsKLWVudW0gTGVuZ3RoSW50cmluc2ljIHsgSW50cmluc2ljRGlzYWJsZWQgPSAwLCBJbnRy
aW5zaWNFbmFibGVkIH07Ci1lbnVtIExlbmd0aE5vbmUgeyBOb25lRGlzYWJsZWQgPSAwLCBOb25l
RW5hYmxlZCB9OwotZW51bSBMZW5ndGhVbmRlZmluZWQgeyBVbmRlZmluZWREaXNhYmxlZCA9IDAs
IFVuZGVmaW5lZEVuYWJsZWQgfTsKLXRlbXBsYXRlIDxMZW5ndGggKFJlbmRlclN0eWxlOjoqZ2V0
dGVyRnVuY3Rpb24pKCkgY29uc3QsCi0gICAgICAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXJGdW5jdGlvbikoTGVuZ3RoKSwKLSAgICAgICAgICBMZW5ndGggKCppbml0aWFsRnVuY3Rpb24p
KCksCi0gICAgICAgICAgTGVuZ3RoQXV0byBhdXRvRW5hYmxlZCA9IEF1dG9EaXNhYmxlZCwKLSAg
ICAgICAgICBMZW5ndGhMZWdhY3lJbnRyaW5zaWMgbGVnYWN5SW50cmluc2ljRW5hYmxlZCA9IExl
Z2FjeUludHJpbnNpY0Rpc2FibGVkLAotICAgICAgICAgIExlbmd0aEludHJpbnNpYyBpbnRyaW5z
aWNFbmFibGVkID0gSW50cmluc2ljRGlzYWJsZWQsCi0gICAgICAgICAgTGVuZ3RoTm9uZSBub25l
RW5hYmxlZCA9IE5vbmVEaXNhYmxlZCwKLSAgICAgICAgICBMZW5ndGhVbmRlZmluZWQgbm9uZVVu
ZGVmaW5lZCA9IFVuZGVmaW5lZERpc2FibGVkPgotY2xhc3MgQXBwbHlQcm9wZXJ0eUxlbmd0aCB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBM
ZW5ndGggdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpOwotICAgICAgICBpZiAobm9uZUVuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7Ci0gICAgICAgICAgICBpZiAobm9uZVVuZGVmaW5l
ZCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5n
dGgoVW5kZWZpbmVkKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKCkpOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChsZWdhY3lJbnRyaW5zaWNFbmFibGVkKSB7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpCi0gICAgICAgICAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEludHJpbnNpYykpOwotICAg
ICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVN
aW5JbnRyaW5zaWMpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgTGVuZ3RoKE1pbkludHJpbnNpYykpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnRy
aW5zaWNFbmFibGVkKSB7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50KQotICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5Db250ZW50KSk7Ci0gICAgICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1h
eENvbnRlbnQpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgTGVuZ3RoKE1heENvbnRlbnQpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlV2Via2l0RmlsbEF2YWlsYWJsZSkKLSAgICAgICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWls
YWJsZSkpOwotICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVXZWJraXRGaXRDb250ZW50KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChGaXRDb250ZW50KSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoYXV0b0VuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgTGVuZ3RoKCkpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgo
KSkgewotICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
OwotICAgICAgICAgICAgbGVuZ3RoLnNldFF1aXJrKHByaW1pdGl2ZVZhbHVlLT5pc1F1aXJrVmFs
dWUoKSk7Ci0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBsZW5n
dGgpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkK
LSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmlt
aXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCkpOwotICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAg
ICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRp
dmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VM
ZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5k
bGVyKCkKLSAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9w
ZXJ0eURlZmF1bHRCYXNlPExlbmd0aCwgZ2V0dGVyRnVuY3Rpb24sIExlbmd0aCwgc2V0dGVyRnVu
Y3Rpb24sIExlbmd0aCwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwotICAgICAg
ICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRs
ZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKLSAgICB9Ci19OwotCi1lbnVtIFN0
cmluZ0lkZW50QmVoYXZpb3IgeyBOb3RoaW5nTWFwc1RvTnVsbCA9IDAsIE1hcE5vbmVUb051bGws
IE1hcEF1dG9Ub051bGwgfTsKLXRlbXBsYXRlIDxTdHJpbmdJZGVudEJlaGF2aW9yIGlkZW50QmVo
YXZpb3IsIGNvbnN0IEF0b21pY1N0cmluZyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24p
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKGNvbnN0IEF0b21p
Y1N0cmluZyYpLCBjb25zdCBBdG9taWNTdHJpbmcmICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgotY2xh
c3MgQXBwbHlQcm9wZXJ0eVN0cmluZyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgc2V0VmFs
dWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IChzdHls
ZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGlm
ICgoaWRlbnRCZWhhdmlvciA9PSBNYXBOb25lVG9OdWxsICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHx8IChpZGVudEJlaGF2aW9yID09
IE1hcEF1dG9Ub051bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVB
dXRvKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIG51bGxB
dG9tKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwotICAgIH0KLSAgICBz
dGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgUHJv
cGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8Y29uc3QgQXRv
bWljU3RyaW5nJiwgZ2V0dGVyRnVuY3Rpb24sIGNvbnN0IEF0b21pY1N0cmluZyYsIHNldHRlckZ1
bmN0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5k
bGVyKCk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVu
Y3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlIDxMZW5ndGhTaXplIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9u
KSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShMZW5ndGhTaXpl
KSwgTGVuZ3RoU2l6ZSAoKmluaXRpYWxGdW5jdGlvbikoKT4KLWNsYXNzIEFwcGx5UHJvcGVydHlC
b3JkZXJSYWRpdXMgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0
eWxlKiBzdHlsZSwgTGVuZ3RoU2l6ZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbiko
dmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIFBhaXIqIHBhaXIgPSBwcmltaXRp
dmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7Ci0gICAgICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmly
c3QoKSB8fCAhcGFpci0+c2Vjb25kKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
TGVuZ3RoIHJhZGl1c1dpZHRoOwotICAgICAgICBMZW5ndGggcmFkaXVzSGVpZ2h0OwotICAgICAg
ICBpZiAocGFpci0+Zmlyc3QoKS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICByYWRpdXNX
aWR0aCA9IExlbmd0aChwYWlyLT5maXJzdCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsK
LSAgICAgICAgZWxzZSBpZiAocGFpci0+Zmlyc3QoKS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5n
dGgoKSkKLSAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+dmlld3BvcnRQ
ZXJjZW50YWdlTGVuZ3RoKCk7Ci0gICAgICAgIGVsc2UgaWYgKHBhaXItPmZpcnN0KCktPmlzQ2Fs
Y3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICByYWRpdXNXaWR0aCA9
IExlbmd0aCgocGFpci0+Zmlyc3QoKS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICByYWRpdXNXaWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGg8TGVu
Z3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAgICAg
IGlmIChwYWlyLT5zZWNvbmQoKS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICByYWRpdXNI
ZWlnaHQgPSBMZW5ndGgocGFpci0+c2Vjb25kKCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQp
OwotICAgICAgICBlbHNlIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VM
ZW5ndGgoKSkKLSAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT52aWV3
cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKLSAgICAgICAgZWxzZSBpZiAocGFpci0+c2Vjb25kKCkt
PmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICByYWRpdXNI
ZWlnaHQgPSBMZW5ndGgoKHBhaXItPnNlY29uZCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHls
ZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
OwotICAgICAgICBpbnQgd2lkdGggPSByYWRpdXNXaWR0aC52YWx1ZSgpOwotICAgICAgICBpbnQg
aGVpZ2h0ID0gcmFkaXVzSGVpZ2h0LnZhbHVlKCk7Ci0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCF3aWR0aCkKLSAg
ICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHJhZGl1c1dpZHRoOyAvLyBOdWxsIG91dCB0aGUgb3Ro
ZXIgdmFsdWUuCi0gICAgICAgIGVsc2UgaWYgKCFoZWlnaHQpCi0gICAgICAgICAgICByYWRpdXNX
aWR0aCA9IHJhZGl1c0hlaWdodDsgLy8gTnVsbCBvdXQgdGhlIG90aGVyIHZhbHVlLgotCi0gICAg
ICAgIExlbmd0aFNpemUgc2l6ZShyYWRpdXNXaWR0aCwgcmFkaXVzSGVpZ2h0KTsKLSAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc2l6ZSk7Ci0gICAgfQotICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9wZXJ0
eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxMZW5ndGhTaXplLCBn
ZXR0ZXJGdW5jdGlvbiwgTGVuZ3RoU2l6ZSwgc2V0dGVyRnVuY3Rpb24sIExlbmd0aFNpemUsIGlu
aXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5
SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlv
bigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1z
dHJ1Y3QgRmlsbExheWVyQWNjZXNzb3JUeXBlcyB7Ci0gICAgdHlwZWRlZiBUIFNldHRlcjsKLSAg
ICB0eXBlZGVmIFQgR2V0dGVyOwotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBGaWxsTGF5ZXJB
Y2Nlc3NvclR5cGVzPFN0eWxlSW1hZ2UqPiB7Ci0gICAgdHlwZWRlZiBQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IFNldHRlcjsKLSAgICB0eXBlZGVmIFN0eWxlSW1hZ2UqIEdldHRlcjsKLX07Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBULAotICAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwK
LSAgICAgICAgICBFRmlsbExheWVyVHlwZSBmaWxsTGF5ZXJUeXBlLAotICAgICAgICAgIEZpbGxM
YXllciogKFJlbmRlclN0eWxlOjoqYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCksCi0gICAgICAgICAg
Y29uc3QgRmlsbExheWVyKiAoUmVuZGVyU3R5bGU6OipsYXllcnNGdW5jdGlvbikoKSBjb25zdCwK
LSAgICAgICAgICBib29sIChGaWxsTGF5ZXI6Oip0ZXN0RnVuY3Rpb24pKCkgY29uc3QsCi0gICAg
ICAgICAgdHlwZW5hbWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxUPjo6R2V0dGVyIChGaWxsTGF5
ZXI6OipnZXRGdW5jdGlvbikoKSBjb25zdCwKLSAgICAgICAgICB2b2lkIChGaWxsTGF5ZXI6Oipz
ZXRGdW5jdGlvbikodHlwZW5hbWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxUPjo6U2V0dGVyKSwK
LSAgICAgICAgICB2b2lkIChGaWxsTGF5ZXI6OipjbGVhckZ1bmN0aW9uKSgpLAotICAgICAgICAg
IHR5cGVuYW1lIEZpbGxMYXllckFjY2Vzc29yVHlwZXM8VD46OkdldHRlciAoKmluaXRpYWxGdW5j
dGlvbikoRUZpbGxMYXllclR5cGUpLAotICAgICAgICAgIHZvaWQgKENTU1RvU3R5bGVNYXA6Oipt
YXBGaWxsRnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik+Ci1j
bGFzcyBBcHBseVByb3BlcnR5RmlsbExheWVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQotICAgIHsKLSAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwotICAgICAgICBGaWxsTGF5ZXIq
IHByZXZDaGlsZCA9IDA7Ci0gICAgICAgIGNvbnN0IEZpbGxMYXllciogY3VyclBhcmVudCA9IChz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT4qbGF5ZXJzRnVuY3Rpb24pKCk7Ci0gICAgICAg
IHdoaWxlIChjdXJyUGFyZW50ICYmIChjdXJyUGFyZW50LT4qdGVzdEZ1bmN0aW9uKSgpKSB7Ci0g
ICAgICAgICAgICBpZiAoIWN1cnJDaGlsZCkgewotICAgICAgICAgICAgICAgIC8qIE5lZWQgdG8g
bWFrZSBhIG5ldyBsYXllci4qLwotICAgICAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBGaWxs
TGF5ZXIoZmlsbExheWVyVHlwZSk7Ci0gICAgICAgICAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0
KGN1cnJDaGlsZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAoY3VyckNoaWxkLT4qc2V0
RnVuY3Rpb24pKChjdXJyUGFyZW50LT4qZ2V0RnVuY3Rpb24pKCkpOwotICAgICAgICAgICAgcHJl
dkNoaWxkID0gY3VyckNoaWxkOwotICAgICAgICAgICAgY3VyckNoaWxkID0gcHJldkNoaWxkLT5u
ZXh0KCk7Ci0gICAgICAgICAgICBjdXJyUGFyZW50ID0gY3VyclBhcmVudC0+bmV4dCgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKGN1cnJDaGlsZCkgewotICAgICAgICAgICAgLyogUmVz
ZXQgYW55IHJlbWFpbmluZyBsYXllcnMgdG8gbm90IGhhdmUgdGhlIHByb3BlcnR5IHNldC4gKi8K
LSAgICAgICAgICAgIChjdXJyQ2hpbGQtPipjbGVhckZ1bmN0aW9uKSgpOwotICAgICAgICAgICAg
Y3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwotICAgICAg
ICAoY3VyckNoaWxkLT4qc2V0RnVuY3Rpb24pKCgqaW5pdGlhbEZ1bmN0aW9uKShmaWxsTGF5ZXJU
eXBlKSk7Ci0gICAgICAgIGZvciAoY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7IGN1cnJD
aGlsZDsgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCkpCi0gICAgICAgICAgICAoY3VyckNo
aWxkLT4qY2xlYXJGdW5jdGlvbikoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKLSAgICAgICAgRmlsbExh
eWVyKiBwcmV2Q2hpbGQgPSAwOwotICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkKLSNp
ZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICAgICAgJiYgIXZhbHVlLT5pc0ltYWdlU2V0VmFs
dWUoKQotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICAgICAgLyogV2FsayBlYWNoIHZhbHVl
IGFuZCBwdXQgaXQgaW50byBhIGxheWVyLCBjcmVhdGluZyBuZXcgbGF5ZXJzIGFzIG5lZWRlZC4g
Ki8KLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NT
VmFsdWVMaXN0Kj4odmFsdWUpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoIWN1
cnJDaGlsZCkgewotICAgICAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIG1ha2UgYSBuZXcgbGF5
ZXIgdG8gaG9sZCB0aGlzIHZhbHVlICovCi0gICAgICAgICAgICAgICAgICAgIGN1cnJDaGlsZCA9
IG5ldyBGaWxsTGF5ZXIoZmlsbExheWVyVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIHByZXZD
aGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1hcEZpbGxGdW5jdGlvbikocHJvcGVy
dHlJZCwgY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOwot
ICAgICAgICAgICAgICAgIHByZXZDaGlsZCA9IGN1cnJDaGlsZDsKLSAgICAgICAgICAgICAgICBj
dXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRmlsbEZ1
bmN0aW9uKShwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlKTsKLSAgICAgICAgICAgIGN1cnJD
aGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChjdXJy
Q2hpbGQpIHsKLSAgICAgICAgICAgIC8qIFJlc2V0IGFsbCByZW1haW5pbmcgbGF5ZXJzIHRvIG5v
dCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovCi0gICAgICAgICAgICAoY3VyckNoaWxkLT4qY2xl
YXJGdW5jdGlvbikoKTsKLSAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFw
cGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KLX07Ci0KLWVudW0gQ29tcHV0ZUxlbmd0
aE5vcm1hbCB7Tm9ybWFsRGlzYWJsZWQgPSAwLCBOb3JtYWxFbmFibGVkfTsKLWVudW0gQ29tcHV0
ZUxlbmd0aFRoaWNrbmVzcyB7VGhpY2tuZXNzRGlzYWJsZWQgPSAwLCBUaGlja25lc3NFbmFibGVk
fTsKLWVudW0gQ29tcHV0ZUxlbmd0aFNWR1pvb20ge1NWR1pvb21EaXNhYmxlZCA9IDAsIFNWR1pv
b21FbmFibGVkfTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBULAotICAgICAgICAgIFQgKFJlbmRlclN0
eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsCi0gICAgICAgICAgdm9pZCAoUmVuZGVyU3R5
bGU6OipzZXR0ZXJGdW5jdGlvbikoVCksCi0gICAgICAgICAgVCAoKmluaXRpYWxGdW5jdGlvbiko
KSwKLSAgICAgICAgICBDb21wdXRlTGVuZ3RoTm9ybWFsIG5vcm1hbEVuYWJsZWQgPSBOb3JtYWxE
aXNhYmxlZCwKLSAgICAgICAgICBDb21wdXRlTGVuZ3RoVGhpY2tuZXNzIHRoaWNrbmVzc0VuYWJs
ZWQgPSBUaGlja25lc3NEaXNhYmxlZCwKLSAgICAgICAgICBDb21wdXRlTGVuZ3RoU1ZHWm9vbSBz
dmdab29tRW5hYmxlZCA9IFNWR1pvb21EaXNhYmxlZD4KLWNsYXNzIEFwcGx5UHJvcGVydHlDb21w
dXRlTGVuZ3RoIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHls
ZSogc3R5bGUsIFQgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgLy8gbm90ZTog
Q1NTUHJvcGVydHlMZXR0ZXIvV29yZFNwYWNpbmcgcmlnaHQgbm93IHNldHMgdG8gemVybyBpZiBp
dCdzIG5vdCBhIHByaW1pdGl2ZSB2YWx1ZSBmb3Igc29tZSByZWFzb24uLi4KLSAgICAgICAgaWYg
KCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotCi0gICAgICAgIGludCBpZGVudCA9IHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpOwotICAgICAgICBUIGxlbmd0aDsKLSAgICAgICAgaWYgKG5vcm1hbEVu
YWJsZWQgJiYgaWRlbnQgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIGxlbmd0aCA9
IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAodGhpY2tuZXNzRW5hYmxlZCAmJiBpZGVudCA9PSBDU1NW
YWx1ZVRoaW4pIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIH0gZWxzZSBpZiAo
dGhpY2tuZXNzRW5hYmxlZCAmJiBpZGVudCA9PSBDU1NWYWx1ZU1lZGl1bSkgewotICAgICAgICAg
ICAgbGVuZ3RoID0gMzsKLSAgICAgICAgfSBlbHNlIGlmICh0aGlja25lc3NFbmFibGVkICYmIGlk
ZW50ID09IENTU1ZhbHVlVGhpY2spIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IDU7Ci0gICAgICAg
IH0gZWxzZSBpZiAoaWRlbnQgPT0gQ1NTVmFsdWVJbnZhbGlkKSB7Ci0gICAgICAgICAgICBmbG9h
dCB6b29tID0gKHN2Z1pvb21FbmFibGVkICYmIHN0eWxlUmVzb2x2ZXItPnVzZVNWR1pvb21SdWxl
cygpKSA/IDEuMGYgOiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0K
LSAgICAgICAgICAgIC8vIEFueSBvcmlnaW5hbCByZXN1bHQgdGhhdCB3YXMgPj0gMSBzaG91bGQg
bm90IGJlIGFsbG93ZWQgdG8gZmFsbCBiZWxvdyAxLgotICAgICAgICAgICAgLy8gVGhpcyBrZWVw
cyBib3JkZXIgbGluZXMgZnJvbSB2YW5pc2hpbmcuCi0gICAgICAgICAgICBsZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOwotICAgICAgICAgICAgaWYgKHpv
b20gPCAxLjBmICYmIGxlbmd0aCA8IDEuMCkgewotICAgICAgICAgICAgICAgIFQgb3JpZ2luYWxM
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIDEuMCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG9yaWdpbmFsTGVuZ3RoID49IDEuMCkKLSAgICAgICAgICAgICAgICAgICAg
bGVuZ3RoID0gMS4wOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGxlbmd0aCA9IDA7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBsZW5ndGgp
OwotICAgIH0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQotICAg
IHsKLSAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVs
dEJhc2U8VCwgZ2V0dGVyRnVuY3Rpb24sIFQsIHNldHRlckZ1bmN0aW9uLCBULCBpbml0aWFsRnVu
Y3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIo
aGFuZGxlci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFw
cGx5VmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBUIChGb250RGVz
Y3JpcHRpb246OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoRm9udERlc2NyaXB0aW9u
Ojoqc2V0dGVyRnVuY3Rpb24pKFQpLCBUIGluaXRpYWxWYWx1ZT4KLWNsYXNzIEFwcGx5UHJvcGVy
dHlGb250IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNj
cmlwdGlvbigpOwotICAgICAgICAoZm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKHN0
eWxlUmVzb2x2ZXItPnBhcmVudEZvbnREZXNjcmlwdGlvbigpLipnZXR0ZXJGdW5jdGlvbikoKSk7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0
aW9uKCk7Ci0gICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKShpbml0aWFs
VmFsdWUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERl
c2NyaXB0aW9uKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsK
LSAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKCpwcmltaXRpdmVWYWx1
ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwotICAgIH0KLQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUlu
aXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9Ci19OwotCi1jbGFzcyBBcHBseVByb3BlcnR5Rm9u
dEZhbWlseSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlv
bigpOwotICAgICAgICAKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHko
cGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7Ci0gICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkpOwot
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNTcGVjaWZpZWRGb250KHBhcmVudEZvbnREZXNj
cmlwdGlvbi5pc1NwZWNpZmllZEZvbnQoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24o
KTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9u
KCk7Ci0gICAgICAgIAotICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBh
Y2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlIHRvIG5v
bi1tb25vc3BhY2UuCi0gICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAm
JiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzdHlsZVJlc29sdmVyLT5m
b250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNt
YWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOwotICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShpbml0aWFsRGVzYy5nZW5lcmljRmFt
aWx5KCkpOwotICAgICAgICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuZmFtaWx5SXNF
bXB0eSgpKQotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShpbml0aWFsRGVz
Yy5maXJzdEZhbWlseSgpKTsKLQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNW
YWx1ZUxpc3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0
aW9uKCk7Ci0gICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0aW9u
LmZpcnN0RmFtaWx5KCk7Ci0gICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOwotCi0g
ICAgICAgIC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3
ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgotICAgICAgICBib29sIG9sZEZhbWls
eVVzZWRGaXhlZERlZmF1bHRTaXplID0gZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNp
emUoKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2Ny
aXB0aW9uOjpOb0ZhbWlseSk7Ci0KLSAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBp
ID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICAgICAgQ1NTVmFs
dWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZl
VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KGl0ZW0pOwotICAgICAgICAgICAgQXRvbWljU3RyaW5nIGZhY2U7Ci0gICAgICAgICAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwot
ICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAg
ICBmYWNlID0gY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgZWxz
ZSBpZiAoc2V0dGluZ3MpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS0+
Z2V0SWRlbnQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5Ogot
ICAgICAgICAgICAgICAgICAgICBmYWNlID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseSgp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlU2VyaWY6Ci0gICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzZXJpZkZhbWlseTsKLSAgICAg
ICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2Ny
aXB0aW9uOjpTZXJpZkZhbWlseSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6Ci0gICAgICAgICAgICAgICAgICAgIGZh
Y2UgPSBzYW5zU2VyaWZGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5KTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUN1
cnNpdmU6Ci0gICAgICAgICAgICAgICAgICAgIGZhY2UgPSBjdXJzaXZlRmFtaWx5OwotICAgICAg
ICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3Jp
cHRpb246OkN1cnNpdmVGYW1pbHkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKLSAgICAgICAgICAgICAgICAgICAgZmFj
ZSA9IGZhbnRhc3lGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6RmFudGFzeUZhbWlseSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNb25vc3Bh
Y2U6Ci0gICAgICAgICAgICAgICAgICAgIGZhY2UgPSBtb25vc3BhY2VGYW1pbHk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlw
dGlvbjo6TW9ub3NwYWNlRmFtaWx5KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3JhcGg6Ci0gICAgICAgICAgICAg
ICAgICAgIGZhY2UgPSBwaWN0b2dyYXBoRmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlBpY3RvZ3JhcGhG
YW1pbHkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZmFjZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIWN1cnJGYW1pbHkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmls
bGluZyBpbiB0aGUgZmlyc3QgZmFtaWx5LgotICAgICAgICAgICAgICAgICAgICBmaXJzdEZhbWls
eS5zZXRGYW1pbHkoZmFjZSk7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0RmFtaWx5LmFwcGVu
ZEZhbWlseSgwKTsgLy8gUmVtb3ZlIGFueSBpbmhlcml0ZWQgZmFtaWx5LWZhbGxiYWNrIGxpc3Qu
Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJGYW1pbHkgPSAmZmlyc3RGYW1pbHk7Ci0gICAgICAg
ICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQoZm9udERlc2Ny
aXB0aW9uLmdlbmVyaWNGYW1pbHkoKSA9PSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVk
Rm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KGZhY2UpOwotICAgICAgICAgICAg
ICAgICAgICBjdXJyRmFtaWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsKLSAgICAgICAgICAg
ICAgICAgICAgY3VyckZhbWlseSA9IG5ld0ZhbWlseS5nZXQoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBjYW4ndCBjYWxsIHVz
ZUZpeGVkRGVmYXVsdFNpemUoKSB1bnRpbCBhbGwgbmV3IGZvbnQgZmFtaWxpZXMgaGF2ZSBiZWVu
IGFkZGVkCi0gICAgICAgIC8vIElmIGN1cnJGYW1pbHkgaXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQg
YXQgbGVhc3Qgb25lIGZhbWlseSBvbiB0aGlzIGRlc2NyaXB0aW9uLgotICAgICAgICBpZiAoY3Vy
ckZhbWlseSkgewotICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgp
ICYmIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNl
ZEZpeGVkRGVmYXVsdFNpemUpCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9u
dFNpemUoZm9udERlc2NyaXB0aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQo
c3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0
aW9uLmtleXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsK
LQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxl
cigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9
Ci19OwotCi1jbGFzcyBBcHBseVByb3BlcnR5Rm9udFNpemUgewotcHJpdmF0ZToKLSAgICAvLyBX
aGVuIHRoZSBDU1Mga2V5d29yZCAibGFyZ2VyIiBpcyB1c2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwg
YXR0ZW1wdCB0byBtYXRjaCB3aXRoaW4gdGhlIGtleXdvcmQKLSAgICAvLyB0YWJsZSwgYW5kIGZh
aWxpbmcgdGhhdCwgd2lsbCBzaW1wbHkgbXVsdGlwbHkgYnkgMS4yLgotICAgIHN0YXRpYyBmbG9h
dCBsYXJnZXJGb250U2l6ZShmbG9hdCBzaXplKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEZp
Z3VyZSBvdXQgd2hlcmUgd2UgZmFsbCBpbiB0aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRvIHh4
eC1sYXJnZSkgYW5kIHNjYWxlIHVwIHRvCi0gICAgICAgIC8vIHRoZSBuZXh0IHNpemUgbGV2ZWwu
Ci0gICAgICAgIHJldHVybiBzaXplICogMS4yZjsKLSAgICB9Ci0KLSAgICAvLyBMaWtlIHRoZSBw
cmV2aW91cyBmdW5jdGlvbiwgYnV0IGZvciB0aGUga2V5d29yZCAic21hbGxlciIuCi0gICAgc3Rh
dGljIGZsb2F0IHNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXplKQotICAgIHsKLSAgICAgICAgLy8g
RklYTUU6IEZpZ3VyZSBvdXQgd2hlcmUgd2UgZmFsbCBpbiB0aGUgc2l6ZSByYW5nZXMgKHh4LXNt
YWxsIHRvIHh4eC1sYXJnZSkgYW5kIHNjYWxlIGRvd24gdG8KLSAgICAgICAgLy8gdGhlIG5leHQg
c2l6ZSBsZXZlbC4KLSAgICAgICAgcmV0dXJuIHNpemUgLyAxLjJmOwotICAgIH0KLXB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUo
KTsKLQotICAgICAgICBpZiAoc2l6ZSA8IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29y
ZFNpemUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkua2V5
d29yZFNpemUoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNj
cmlwdGlvbiwgc2l6ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAg
ZmxvYXQgc2l6ZSA9IHN0eWxlUmVzb2x2ZXItPmZvbnRTaXplRm9yS2V5d29yZChzdHlsZVJlc29s
dmVyLT5kb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVk
RGVmYXVsdFNpemUoKSk7Ci0KLSAgICAgICAgaWYgKHNpemUgPCAwKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1l
ZGl1bSAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRG
b250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYg
KCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKDApOwotICAgICAgICBmbG9hdCBw
YXJlbnRTaXplID0gMDsKLSAgICAgICAgYm9vbCBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNl
OwotICAgICAgICBmbG9hdCBzaXplID0gMDsKLQotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKSkgewotICAgICAgICAgICAgcGFyZW50U2l6ZSA9IHN0eWxlUmVzb2x2ZXIt
PnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKLSAgICAg
ICAgICAgIHBhcmVudElzQWJzb2x1dGVTaXplID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUo
KS0+Zm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChpbnQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgICAg
ICAgICAgLy8gS2V5d29yZHMgYXJlIGJlaW5nIHVzZWQuCi0gICAgICAgICAgICBzd2l0Y2ggKGlk
ZW50KSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlWHhTbWFsbDoKLSAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVYU21hbGw6Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGw6Ci0gICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxh
cmdlOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKLSAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVYeExhcmdlOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdl
OgotICAgICAgICAgICAgICAgIHNpemUgPSBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdv
cmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VG
aXhlZERlZmF1bHRTaXplKCkpOwotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRL
ZXl3b3JkU2l6ZShpZGVudCAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKLSAgICAgICAgICAgICAg
ICBzaXplID0gbGFyZ2VyRm9udFNpemUocGFyZW50U2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGxlcjoKLSAgICAgICAgICAgICAgICBz
aXplID0gc21hbGxlckZvbnRTaXplKHBhcmVudFNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShw
YXJlbnRJc0Fic29sdXRlU2l6ZSAmJiAoaWRlbnQgPT0gQ1NTVmFsdWVMYXJnZXIgfHwgaWRlbnQg
PT0gQ1NTVmFsdWVTbWFsbGVyKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhKHByaW1pdGl2ZVZh
bHVlLT5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS0+aXNGb250UmVsYXRpdmVMZW5n
dGgoKSkpOwotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAg
ICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4o
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRT
dHlsZSgpLCAxLjAsIHRydWUpOwotICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmlzUGVyY2VudGFnZSgpKQotICAgICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUt
PmdldEZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOwotICAgICAgICAgICAgZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkp
Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+
dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+
cm9vdEVsZW1lbnRTdHlsZSgpKS0+ZXZhbHVhdGUocGFyZW50U2l6ZSk7Ci0gICAgICAgICAgICBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAg
ICAgICAgICAgICAgICBzaXplID0gdmFsdWVGb3JMZW5ndGgocHJpbWl0aXZlVmFsdWUtPnZpZXdw
b3J0UGVyY2VudGFnZUxlbmd0aCgpLCAwLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5yZW5k
ZXJWaWV3KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChzaXplIDwgMCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAvLyBPdmVybHkgbGFyZ2UgZm9udCBzaXplcyB3aWxsIGNhdXNlIGNyYXNoZXMgb24g
c29tZSBwbGF0Zm9ybXMgKHN1Y2ggYXMgV2luZG93cykuCi0gICAgICAgIC8vIENhcCBmb250IHNp
emUgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCBkb2Vzbid0IGhhcHBlbi4KLSAgICAgICAgc2l6ZSA9
IG1pbihtYXhpbXVtQWxsb3dlZEZvbnRTaXplLCBzaXplKTsKLQotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigp
IHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRp
YWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9Ci19OwotCi1jbGFzcyBBcHBseVByb3BlcnR5Rm9udFdl
aWdodCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewot
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAg
ICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZUludmFsaWQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlQm9sZGVyOgotICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFdlaWdodChmb250RGVzY3JpcHRpb24uYm9sZGVyV2VpZ2h0KCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVMaWdodGVyOgotICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChmb250RGVzY3JpcHRpb24ubGlnaHRl
cldlaWdodCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgqcHJpbWl0aXZlVmFsdWUpOwotICAgICAg
ICB9Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwotICAgIH0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIo
KQotICAgIHsKLSAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5
Rm9udDxGb250V2VpZ2h0LCAmRm9udERlc2NyaXB0aW9uOjp3ZWlnaHQsICZGb250RGVzY3JpcHRp
b246OnNldFdlaWdodCwgRm9udFdlaWdodE5vcm1hbD46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAg
ICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5k
bGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQotfTsKLQotY2xhc3Mg
QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRG
b250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsK
LSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIt
PmZvbnREZXNjcmlwdGlvbigpOwotCi0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25M
aWdhdHVyZXNTdGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUo
KSk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3Rh
dGUocGFyZW50Rm9udERlc2NyaXB0aW9uLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpKTsK
LSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShwYXJl
bnRGb250RGVzY3JpcHRpb24uaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKCkpOwotCi0gICAgICAg
IHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7Ci0K
LSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKEZvbnREZXNj
cmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwotICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGln
YXR1cmVzU3RhdGUpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0
dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwotCi0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAg
Rm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZv
bnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7Ci0gICAgICAgIEZvbnREZXNjcmlw
dGlvbjo6TGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERl
c2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9u
OjpMaWdhdHVyZXNTdGF0ZSBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRp
b246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOwotCi0gICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2Fz
dDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgICAgIENTU1ZhbHVl
KiBpdGVtID0gdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAg
ICAgICAgIEFTU0VSVChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgICAg
IGlmIChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPihpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9Db21t
b25MaWdhdHVyZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21tb25MaWdhdHVyZXNTdGF0
ZSA9IEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ29t
bW9uTGlnYXR1cmVzOgotICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uTGlnYXR1cmVzU3Rh
dGUgPSBGb250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9E
aXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgotICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3JldGlv
bmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0
YXRlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVEaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgotICAgICAgICAgICAgICAgICAg
ICAgICAgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpFbmFi
bGVkTGlnYXR1cmVzU3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vSGlzdG9yaWNhbExpZ2F0dXJlczoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlw
dGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlSGlzdG9yaWNhbExpZ2F0dXJl
czoKLSAgICAgICAgICAgICAgICAgICAgICAgIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZv
bnREZXNjcmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKTsKLSAgICAg
ICAgfQotI2VuZGlmCi0KLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUoY29tbW9uTGlnYXR1cmVzU3RhdGUpOwotICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKGRpc2NyZXRp
b25hcnlMaWdhdHVyZXNTdGF0ZSk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0b3Jp
Y2FsTGlnYXR1cmVzU3RhdGUoaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKTsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgfQot
Ci0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0
aWFsVmFsdWUsICZhcHBseVZhbHVlKTsKLSAgICB9Ci19OwotCi1lbnVtIEJvcmRlckltYWdlVHlw
ZSB7IEJvcmRlckltYWdlID0gMCwgQm9yZGVyTWFzayB9OwotdGVtcGxhdGUgPEJvcmRlckltYWdl
VHlwZSBib3JkZXJJbWFnZVR5cGUsCi0gICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwK
LSAgICAgICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVu
Y3Rpb24pKCkgY29uc3QsCi0gICAgICAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5j
dGlvbikoY29uc3QgTmluZVBpZWNlSW1hZ2UmKT4KLWNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJJ
bWFnZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewot
ICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZTsKLSAgICAgICAgaWYgKGJvcmRlckltYWdlVHlw
ZSA9PSBCb3JkZXJNYXNrKQotICAgICAgICAgICAgaW1hZ2Uuc2V0TWFza0RlZmF1bHRzKCk7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlKHByb3Bl
cnR5LCB2YWx1ZSwgaW1hZ2UpOwotICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNl
dHRlckZ1bmN0aW9uKShpbWFnZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxl
ciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVy
ID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGNvbnN0IE5pbmVQaWVjZUltYWdlJiwgZ2V0dGVy
RnVuY3Rpb24sIGNvbnN0IE5pbmVQaWVjZUltYWdlJiwgc2V0dGVyRnVuY3Rpb24sIE5pbmVQaWVj
ZUltYWdlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxOaW5lUGllY2VJbWFnZT46OmNyZWF0ZUhhbmRs
ZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5j
dGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQot
fTsKLQotZW51bSBCb3JkZXJJbWFnZU1vZGlmaWVyVHlwZSB7IE91dHNldCwgUmVwZWF0LCBTbGlj
ZSwgV2lkdGggfTsKLXRlbXBsYXRlIDxCb3JkZXJJbWFnZVR5cGUgdHlwZSwgQm9yZGVySW1hZ2VN
b2RpZmllclR5cGUgbW9kaWZpZXI+Ci1jbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2Rp
ZmllciB7Ci1wcml2YXRlOgotICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgTmluZVBpZWNlSW1hZ2Um
IGdldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFn
ZSA/IHN0eWxlLT5ib3JkZXJJbWFnZSgpIDogc3R5bGUtPm1hc2tCb3hJbWFnZSgpOyB9Ci0gICAg
c3RhdGljIGlubGluZSB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgTmlu
ZVBpZWNlSW1hZ2UmIHZhbHVlKSB7IHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUt
PnNldEJvcmRlckltYWdlKHZhbHVlKSA6IHN0eWxlLT5zZXRNYXNrQm94SW1hZ2UodmFsdWUpOyB9
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIE5pbmVQaWVj
ZUltYWdlIGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKLSAgICAgICAg
c3dpdGNoIChtb2RpZmllcikgewotICAgICAgICBjYXNlIE91dHNldDoKLSAgICAgICAgICAgIGlt
YWdlLmNvcHlPdXRzZXRGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlcGVhdDoKLSAgICAgICAgICAg
IGltYWdlLmNvcHlSZXBlYXRGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxl
KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAg
ICAgaW1hZ2UuY29weUltYWdlU2xpY2VzRnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5wYXJl
bnRTdHlsZSgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXaWR0aDoKLSAg
ICAgICAgICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2Uo
Z2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSkpOwotICAgICAgICBzd2l0Y2ggKG1vZGlm
aWVyKSB7Ci0gICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0
KExlbmd0aEJveCgwKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXBlYXQ6
Ci0gICAgICAgICAgICBpbWFnZS5zZXRIb3Jpem9udGFsUnVsZShTdHJldGNoSW1hZ2VSdWxlKTsK
LSAgICAgICAgICAgIGltYWdlLnNldFZlcnRpY2FsUnVsZShTdHJldGNoSW1hZ2VSdWxlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAgICAgLy8gTWFz
a3MgaGF2ZSBhIGRpZmZlcmVudCBpbml0aWFsIHZhbHVlIGZvciBzbGljZXMuIFByZXNlcnZlIHRo
ZSB2YWx1ZSBvZiAwIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgICAgIGlt
YWdlLnNldEltYWdlU2xpY2VzKHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBMZW5ndGhCb3goTGVuZ3Ro
KDEwMCwgUGVyY2VudCksIExlbmd0aCgxMDAsIFBlcmNlbnQpLCBMZW5ndGgoMTAwLCBQZXJjZW50
KSwgTGVuZ3RoKDEwMCwgUGVyY2VudCkpIDogTGVuZ3RoQm94KCkpOwotICAgICAgICAgICAgaW1h
Z2Uuc2V0RmlsbChmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXaWR0
aDoKLSAgICAgICAgICAgIC8vIE1hc2tzIGhhdmUgYSBkaWZmZXJlbnQgaW5pdGlhbCB2YWx1ZSBm
b3Igd2lkdGhzLiBUaGV5IHVzZSBhbiAnYXV0bycgdmFsdWUgcmF0aGVyIHRoYW4gdHJ5aW5nIHRv
IGZpdCB0byB0aGUgYm9yZGVyLgotICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHR5
cGUgPT0gQm9yZGVySW1hZ2UgPyBMZW5ndGhCb3goTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3Ro
KDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSkg
OiBMZW5ndGhCb3goKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBz
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbWFnZSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBOaW5lUGllY2VJbWFnZSBp
bWFnZShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpKSk7Ci0gICAgICAgIHN3aXRjaCAo
bW9kaWZpZXIpIHsKLSAgICAgICAgY2FzZSBPdXRzZXQ6Ci0gICAgICAgICAgICBpbWFnZS5zZXRP
dXRzZXQoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZh
bHVlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXBlYXQ6Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVJlcGVhdCh2
YWx1ZSwgaW1hZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2xpY2U6Ci0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVNs
aWNlKHZhbHVlLCBpbWFnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXaWR0
aDoKLSAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhzdHlsZVJlc29sdmVyLT5zdHls
ZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGlt
YWdlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIo
KSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0
aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQg
aWQsIFN0eWxlSW1hZ2UqIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2
b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
KSwgU3R5bGVJbWFnZSogKCppbml0aWFsRnVuY3Rpb24pKCk+Ci1jbGFzcyBBcHBseVByb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2UgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKSB7IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVz
b2x2ZXItPnN0eWxlSW1hZ2UoaWQsIHZhbHVlKSk7IH0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5k
bGVyIGNyZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRs
ZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1bmN0aW9u
LCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFnZSosIGlu
aXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5
SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlv
bigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQotfTsKLQotZW51bSBDb3VudGVyQmVoYXZpb3Ige0lu
Y3JlbWVudCA9IDAsIFJlc2V0fTsKLXRlbXBsYXRlIDxDb3VudGVyQmVoYXZpb3IgY291bnRlckJl
aGF2aW9yPgotY2xhc3MgQXBwbHlQcm9wZXJ0eUNvdW50ZXIgewotcHVibGljOgotICAgIHN0YXRp
YyB2b2lkIGVtcHR5RnVuY3Rpb24oQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsgfQot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFw
JiBtYXAgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygp
OwotICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBwYXJlbnRNYXAgPSBzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwotCi0gICAgICAgIHR5
cGVkZWYgQ291bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAgICAgIEl0
ZXJhdG9yIGVuZCA9IHBhcmVudE1hcC5lbmQoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9
IHBhcmVudE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIENvdW50
ZXJEaXJlY3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpdC0+a2V5LCBDb3VudGVyRGlyZWN0
aXZlcygpKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9y
ID09IFJlc2V0KSB7Ci0gICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhlcml0UmVzZXQoaXQt
PnZhbHVlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGlyZWN0aXZl
cy5pbmhlcml0SW5jcmVtZW50KGl0LT52YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBi
b29sIHNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUgPSBjb3VudGVyQmVoYXZpb3IgPT0gSW5jcmVt
ZW50ICYmIHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSktPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lOwotCi0gICAgICAg
IGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkgJiYgIXNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFw
ID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKLSAg
ICAgICAgdHlwZWRlZiBDb3VudGVyRGlyZWN0aXZlTWFwOjppdGVyYXRvciBJdGVyYXRvcjsKLQot
ICAgICAgICBJdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3Ig
aXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaWYgKGNvdW50
ZXJCZWhhdmlvciA9PSBSZXNldCkKLSAgICAgICAgICAgICAgICBpdC0+dmFsdWUuY2xlYXJSZXNl
dCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5jbGVhcklu
Y3JlbWVudCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHNldENvdW50ZXJJbmNyZW1lbnRUb05v
bmUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBDU1NWYWx1ZUxpc3Qq
IGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgIGludCBs
ZW5ndGggPSBsaXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAwOwotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0g
bGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAgICAgIGlmICghY3VyclZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgIFBhaXIqIHBhaXIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGN1
cnJWYWx1ZSktPmdldFBhaXJWYWx1ZSgpOwotICAgICAgICAgICAgaWYgKCFwYWlyIHx8ICFwYWly
LT5maXJzdCgpIHx8ICFwYWlyLT5zZWNvbmQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgQXRvbWljU3RyaW5nIGlkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHBhaXItPmZpcnN0KCkpLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAg
ICAgICAgaW50IHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWlyLT5z
ZWNvbmQoKSktPmdldEludFZhbHVlKCk7Ci0gICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYg
ZGlyZWN0aXZlcyA9IG1hcC5hZGQoaWRlbnRpZmllciwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRl
cmF0b3ItPnZhbHVlOwotICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkg
ewotICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMuc2V0UmVzZXRWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMuYWRkSW5jcmVtZW50
VmFsdWUodmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxl
cigmYXBwbHlJbmhlcml0VmFsdWUsICZlbXB0eUZ1bmN0aW9uLCAmYXBwbHlWYWx1ZSk7IH0KLX07
Ci0KLQotY2xhc3MgQXBwbHlQcm9wZXJ0eUN1cnNvciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNv
cihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5jdXJzb3IoKSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvckxpc3Qoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5
bGUoKS0+Y3Vyc29ycygpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlh
bEN1cnNvcigpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOwot
ICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVl
TGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAg
ICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEN1cnNvcihDVVJTT1JfQVVUTyk7Ci0gICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBs
aXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgICAgIGlmIChpdGVt
LT5pc0N1cnNvckltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBDU1NDdXJzb3JJ
bWFnZVZhbHVlKiBpbWFnZSA9IHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdlVmFsdWUqPihpdGVt
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT51cGRhdGVJZlNWR0N1cnNvcklzVXNl
ZChzdHlsZVJlc29sdmVyLT5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3Jz
IGFyZSBub3QgYWxsb3dlZCB0byBzaGFyZSBzdHlsZS4KLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFVuaXF1ZSgpOwotICAgICAgICAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+c3R5bGVJ
bWFnZShDU1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90U3BvdCgpKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAg
ICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpICYmIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPmN1cnNvcigpICE9IEVDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKSkKLSAgICAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUlu
aXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9Ci19OwotCi1jbGFzcyBBcHBseVByb3BlcnR5VGV4
dEFsaWduIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLQotICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgIT0gQ1NTVmFsdWVXZWJraXRNYXRjaFBhcmVudCkKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbigqcHJpbWl0aXZlVmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0
QWxpZ24oKSA9PSBUQVNUQVJUKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0VGV4dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IExFRlQgOiBSSUdIVCk7Ci0gICAgICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09IFRBRU5EKQotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFJJR0hUIDogTEVGVCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSk7Ci0gICAgfQotICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9w
ZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFVGV4dEFsaWdu
LCAmUmVuZGVyU3R5bGU6OnRleHRBbGlnbiwgRVRleHRBbGlnbiwgJlJlbmRlclN0eWxlOjpzZXRU
ZXh0QWxpZ24sIEVUZXh0QWxpZ24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRBbGlnbj46OmNy
ZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmlu
aGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7
Ci0gICAgfQotfTsKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEVUZXh0
RGVjb3JhdGlvbiB0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbigpOwotICAg
ICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkodmFsdWUpOyBpLmhhc01vcmUoKTsgaS5h
ZHZhbmNlKCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwotICAg
ICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXRlbS0+aXNQcmltaXRp
dmVWYWx1ZSgpKTsKLSAgICAgICAgICAgIHQgfD0gKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4oaXRlbSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0VGV4dERlY29yYXRpb24odCk7Ci0gICAgfQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIg
Y3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9
IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFVGV4dERlY29yYXRpb24sICZSZW5kZXJTdHlsZTo6
dGV4dERlY29yYXRpb24sIEVUZXh0RGVjb3JhdGlvbiwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVj
b3JhdGlvbiwgRVRleHREZWNvcmF0aW9uLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3Jh
dGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlciho
YW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBw
bHlWYWx1ZSk7Ci0gICAgfQotfTsKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eU1hcnF1ZWVJbmNyZW1l
bnQgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKLSAgICAgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgx
LCBGaXhlZCkpOyAvLyAxcHguCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdp
bklFIGRlZmF1bHQuCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENT
U1ZhbHVlTGFyZ2U6Ci0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
TWFycXVlZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBMZW5ndGggbWFycXVlZUxlbmd0aCA9IHN0eWxlUmVzb2x2ZXItPmNvbnZlcnRUb0ludExlbmd0
aChwcmltaXRpdmVWYWx1ZSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+
cm9vdEVsZW1lbnRTdHlsZSgpKTsKLSAgICAgICAgICAgIGlmICghbWFycXVlZUxlbmd0aC5pc1Vu
ZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1h
cnF1ZWVJbmNyZW1lbnQobWFycXVlZUxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIFByb3Bl
cnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6Om1h
cnF1ZWVJbmNyZW1lbnQsICZSZW5kZXJTdHlsZTo6c2V0TWFycXVlZUluY3JlbWVudCwgJlJlbmRl
clN0eWxlOjppbml0aWFsTWFycXVlZUluY3JlbWVudD46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAg
ICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5k
bGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQotfTsKLQotY2xhc3Mg
QXBwbHlQcm9wZXJ0eU1hcnF1ZWVSZXBldGl0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5m
aW5pdGUpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlTG9v
cENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCi0gICAgICAgIGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUo
KSk7Ci0gICAgfQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCi0g
ICAgewotICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZh
dWx0PGludCwgJlJlbmRlclN0eWxlOjptYXJxdWVlTG9vcENvdW50LCBpbnQsICZSZW5kZXJTdHls
ZTo6c2V0TWFycXVlZUxvb3BDb3VudCwgaW50LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNYXJxdWVl
TG9vcENvdW50Pjo6Y3JlYXRlSGFuZGxlcigpOwotICAgICAgICByZXR1cm4gUHJvcGVydHlIYW5k
bGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9uKCks
ICZhcHBseVZhbHVlKTsKLSAgICB9Ci19OwotCi1jbGFzcyBBcHBseVByb3BlcnR5TWFycXVlZVNw
ZWVkIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgaWYgKGludCBpZGVudCA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGlkZW50
KSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2xvdzoKLSAgICAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgot
ICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCg4
NSk7IC8vIDg1bXNlYy4gVGhlIFdpbklFIGRlZmF1bHQuCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFzdDoKLSAgICAgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZh
c3QuCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxp
bnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOwotICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgLy8gRm9yIHNjcm9sbGFtb3VudCBzdXBwb3J0
LgotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKLSAgICB9Ci0gICAgc3RhdGljIFByb3BlcnR5
SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFuZGxlciBo
YW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHQ8aW50LCAmUmVuZGVyU3R5bGU6Om1hcnF1ZWVT
cGVlZCwgaW50LCAmUmVuZGVyU3R5bGU6OnNldE1hcnF1ZWVTcGVlZCwgaW50LCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxNYXJxdWVlU3BlZWQ+OjpjcmVhdGVIYW5kbGVyKCk7Ci0gICAgICAgIHJldHVy
biBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0
aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoQ1NT
M19URVhUKQotY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRVbmRlcmxpbmVQb3NpdGlvbiB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICAvLyBU
aGlzIGlzIHRydWUgaWYgdmFsdWUgaXMgJ2F1dG8nIG9yICdhbHBoYWJldGljJy4KLSAgICAgICAg
aWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIFRleHRVbmRlcmxp
bmVQb3NpdGlvbiB0ID0gKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwot
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dFVuZGVybGluZVBvc2l0
aW9uKHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWdu
ZWQgdCA9IDA7Ci0gICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGku
aGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBp
LnZhbHVlKCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsK
LSAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3NpdGlvbiB0MiA9ICpzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgdCB8PSB0MjsKLSAgICAgICAgfQot
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24o
c3RhdGljX2Nhc3Q8VGV4dFVuZGVybGluZVBvc2l0aW9uPih0KSk7Ci0gICAgfQotICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9wZXJ0
eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxUZXh0VW5kZXJsaW5l
UG9zaXRpb24sICZSZW5kZXJTdHlsZTo6dGV4dFVuZGVybGluZVBvc2l0aW9uLCBUZXh0VW5kZXJs
aW5lUG9zaXRpb24sICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZVBvc2l0aW9uLCBUZXh0
VW5kZXJsaW5lUG9zaXRpb24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRVbmRlcmxpbmVQb3Np
dGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlciho
YW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBw
bHlWYWx1ZSk7Ci0gICAgfQotfTsKLSNlbmRpZiAvLyBDU1MzX1RFWFQKLQotY2xhc3MgQXBwbHlQ
cm9wZXJ0eUxpbmVIZWlnaHQgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBM
ZW5ndGggbGluZUhlaWdodDsKLQotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gUmVuZGVyU3R5
bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCk7Ci0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAg
ICAgIG11bHRpcGxpZXIgKj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7Ci0gICAgICAgICAgICBs
aW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIG11bHRp
cGxpZXIpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2Uo
KSkgewotICAgICAgICAgICAgLy8gRklYTUU6IHBlcmNlbnRhZ2Ugc2hvdWxkIG5vdCBiZSByZXN0
cmljdGVkIHRvIGFuIGludGVnZXIgaGVyZS4KLSAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5n
dGgoKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS0+
Z2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+aXNOdW1iZXIoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IG51bWJlciBhbmQg
cGVyY2VudGFnZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdHlwZSBvZiBMZW5ndGgg
KGllLiBGaXhlZCBvciBQZXJjZW50KS4KLSAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgo
cHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCkgKiAxMDAuMCwgUGVyY2VudCk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3Ro
KCkpCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVy
Y2VudGFnZUxlbmd0aCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldExpbmVIZWlnaHQobGluZUhlaWdodCk7Ci0g
ICAgfQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewot
ICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFz
ZTxMZW5ndGgsICZSZW5kZXJTdHlsZTo6c3BlY2lmaWVkTGluZUhlaWdodCwgTGVuZ3RoLCAmUmVu
ZGVyU3R5bGU6OnNldExpbmVIZWlnaHQsIExlbmd0aCwgJlJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUhlaWdodD46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxl
cihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAm
YXBwbHlWYWx1ZSk7Ci0gICAgfQotfTsKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eVBhZ2VTaXplIHsK
LXByaXZhdGU6Ci0gICAgc3RhdGljIExlbmd0aCBtbUxlbmd0aChkb3VibGUgbW0pIHsgcmV0dXJu
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobW0sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU0p
LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oMCwgMCk7IH0KLSAgICBzdGF0aWMgTGVuZ3RoIGluY2hM
ZW5ndGgoZG91YmxlIGluY2gpIHsgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoaW5j
aCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JTiktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPigwLCAw
KTsgfQotICAgIHN0YXRpYyBib29sIGdldFBhZ2VTaXplRnJvbU5hbWUoQ1NTUHJpbWl0aXZlVmFs
dWUqIHBhZ2VTaXplTmFtZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VPcmllbnRhdGlvbiwgTGVu
Z3RoJiB3aWR0aCwgTGVuZ3RoJiBoZWlnaHQpCi0gICAgewotICAgICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKExlbmd0aCwgYTVXaWR0aCwgKG1tTGVuZ3RoKDE0OCkpKTsKLSAgICAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChMZW5ndGgsIGE1SGVpZ2h0LCAobW1MZW5ndGgoMjEwKSkpOwotICAgICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgYTRXaWR0aCwgKG1tTGVuZ3RoKDIxMCkpKTsK
LSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5ndGgsIGE0SGVpZ2h0LCAobW1MZW5ndGgo
Mjk3KSkpOwotICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgYTNXaWR0aCwgKG1t
TGVuZ3RoKDI5NykpKTsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5ndGgsIGEzSGVp
Z2h0LCAobW1MZW5ndGgoNDIwKSkpOwotICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0
aCwgYjVXaWR0aCwgKG1tTGVuZ3RoKDE3NikpKTsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChMZW5ndGgsIGI1SGVpZ2h0LCAobW1MZW5ndGgoMjUwKSkpOwotICAgICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKExlbmd0aCwgYjRXaWR0aCwgKG1tTGVuZ3RoKDI1MCkpKTsKLSAgICAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChMZW5ndGgsIGI0SGVpZ2h0LCAobW1MZW5ndGgoMzUzKSkpOwotICAg
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgbGV0dGVyV2lkdGgsIChpbmNoTGVuZ3Ro
KDguNSkpKTsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5ndGgsIGxldHRlckhlaWdo
dCwgKGluY2hMZW5ndGgoMTEpKSk7Ci0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGVuZ3Ro
LCBsZWdhbFdpZHRoLCAoaW5jaExlbmd0aCg4LjUpKSk7Ci0gICAgICAgIERFRklORV9TVEFUSUNf
TE9DQUwoTGVuZ3RoLCBsZWdhbEhlaWdodCwgKGluY2hMZW5ndGgoMTQpKSk7Ci0gICAgICAgIERF
RklORV9TVEFUSUNfTE9DQUwoTGVuZ3RoLCBsZWRnZXJXaWR0aCwgKGluY2hMZW5ndGgoMTEpKSk7
Ci0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGVuZ3RoLCBsZWRnZXJIZWlnaHQsIChpbmNo
TGVuZ3RoKDE3KSkpOwotCi0gICAgICAgIGlmICghcGFnZVNpemVOYW1lKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN3aXRjaCAocGFnZVNpemVOYW1lLT5nZXRJZGVudCgp
KSB7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVBNToKLSAgICAgICAgICAgIHdpZHRoID0gYTVXaWR0
aDsKLSAgICAgICAgICAgIGhlaWdodCA9IGE1SGVpZ2h0OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ1NTVmFsdWVBNDoKLSAgICAgICAgICAgIHdpZHRoID0gYTRXaWR0aDsKLSAg
ICAgICAgICAgIGhlaWdodCA9IGE0SGVpZ2h0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTVmFsdWVBMzoKLSAgICAgICAgICAgIHdpZHRoID0gYTNXaWR0aDsKLSAgICAgICAg
ICAgIGhlaWdodCA9IGEzSGVpZ2h0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTVmFsdWVCNToKLSAgICAgICAgICAgIHdpZHRoID0gYjVXaWR0aDsKLSAgICAgICAgICAgIGhl
aWdodCA9IGI1SGVpZ2h0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFs
dWVCNDoKLSAgICAgICAgICAgIHdpZHRoID0gYjRXaWR0aDsKLSAgICAgICAgICAgIGhlaWdodCA9
IGI0SGVpZ2h0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVMZXR0
ZXI6Ci0gICAgICAgICAgICB3aWR0aCA9IGxldHRlcldpZHRoOwotICAgICAgICAgICAgaGVpZ2h0
ID0gbGV0dGVySGVpZ2h0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFs
dWVMZWdhbDoKLSAgICAgICAgICAgIHdpZHRoID0gbGVnYWxXaWR0aDsKLSAgICAgICAgICAgIGhl
aWdodCA9IGxlZ2FsSGVpZ2h0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
VmFsdWVMZWRnZXI6Ci0gICAgICAgICAgICB3aWR0aCA9IGxlZGdlcldpZHRoOwotICAgICAgICAg
ICAgaGVpZ2h0ID0gbGVkZ2VySGVpZ2h0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAocGFnZU9yaWVudGF0aW9uKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHBhZ2VPcmllbnRhdGlv
bi0+Z2V0SWRlbnQoKSkgewotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhbmRzY2FwZToKLSAg
ICAgICAgICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlUG9ydHJhaXQ6Ci0gICAgICAgICAgICAg
ICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLXB1YmxpYzoKLSAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikg
eyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciopIHsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKLSAg
ICAgICAgTGVuZ3RoIHdpZHRoOwotICAgICAgICBMZW5ndGggaGVpZ2h0OwotICAgICAgICBQYWdl
U2l6ZVR5cGUgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE87Ci0gICAgICAgIENTU1ZhbHVl
TGlzdEluc3BlY3RvciBpbnNwZWN0b3IodmFsdWUpOwotICAgICAgICBzd2l0Y2ggKGluc3BlY3Rv
ci5sZW5ndGgoKSkgewotICAgICAgICBjYXNlIDI6IHsKLSAgICAgICAgICAgIC8vIDxsZW5ndGg+
ezJ9IHwgPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgotICAgICAgICAgICAgaWYgKCFpbnNwZWN0
b3IuZmlyc3QoKS0+aXNQcmltaXRpdmVWYWx1ZSgpIHx8ICFpbnNwZWN0b3Iuc2Vjb25kKCktPmlz
UHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogZmlyc3QgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KGluc3BlY3Rvci5maXJzdCgpKTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNv
bmQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGluc3BlY3Rvci5zZWNvbmQoKSk7
Ci0gICAgICAgICAgICBpZiAoZmlyc3QtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICAv
LyA8bGVuZ3RoPnsyfQotICAgICAgICAgICAgICAgIGlmICghc2Vjb25kLT5pc0xlbmd0aCgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBmaXJz
dC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVz
b2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSk7Ci0gICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vj
b25kLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVS
ZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgotICAgICAgICAgICAgICAg
IC8vIFRoZSB2YWx1ZSBvcmRlciBpcyBndWFyYW50ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJzZVNp
emVQYXJhbWV0ZXIuCi0gICAgICAgICAgICAgICAgaWYgKCFnZXRQYWdlU2l6ZUZyb21OYW1lKGZp
cnN0LCBzZWNvbmQsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVT
T0xWRUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIDE6IHsK
LSAgICAgICAgICAgIC8vIDxsZW5ndGg+IHwgYXV0byB8IDxwYWdlLXNpemU+IHwgWyBwb3J0cmFp
dCB8IGxhbmRzY2FwZV0KLSAgICAgICAgICAgIGlmICghaW5zcGVjdG9yLmZpcnN0KCktPmlzUHJp
bWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KGluc3BlY3Rvci5maXJzdCgpKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+Ci0gICAgICAgICAg
ICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOwotICAgICAgICAgICAgICAg
IHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86Ci0g
ICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlUG9ydHJh
aXQ6Ci0gICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPX1BP
UlRSQUlUOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlTGFuZHNjYXBlOgotICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQ
QUdFX1NJWkVfQVVUT19MQU5EU0NBUEU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIDxwYWdlLXNpemU+
Ci0gICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFnZXRQYWdlU2l6ZUZyb21OYW1lKHByaW1pdGl2ZVZh
bHVlLCAwLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFBhZ2VTaXplVHlwZShwYWdlU2l6
ZVR5cGUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRQYWdlU2l6ZShMZW5n
dGhTaXplKHdpZHRoLCBoZWlnaHQpKTsKLSAgICB9Ci0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxl
ciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRW
YWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KLX07Ci0KLWNsYXNzIEFw
cGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHlsZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKLSAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc0ZpbGwoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgp
KTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNNYXJrKCkpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7Ci0gICAg
fQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1w
aGFzaXNGaWxsKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNNYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5k
ZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUtPmlz
VmFsdWVMaXN0KCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19j
YXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VSVChsaXN0LT5sZW5n
dGgoKSA9PSAyKTsKLSAgICAgICAgICAgIGlmIChsaXN0LT5sZW5ndGgoKSAhPSAyKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soaSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPihpdGVtKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVGaWxsZWQgfHwgdmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKQotICAgICAg
ICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxs
KCp2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKCp2YWx1ZSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNDdXN0b21NYXJrKG51bGxBdG9tKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0KLSAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwotICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFz
aXNNYXJrQ3VzdG9tKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc0N1c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7Ci0KLSAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlT3BlbikgewotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqcHJpbWl0aXZlVmFsdWUp
OwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFy
ayhUZXh0RW1waGFzaXNNYXJrQXV0byk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0Zp
bGxGaWxsZWQpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVt
cGhhc2lzTWFyaygqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5k
bGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7
IH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULAotICAgICAgICAgIFQgKEFuaW1hdGlvbjo6
KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LAotICAgICAgICAgIHZvaWQgKEFuaW1hdGlvbjo6KnNl
dHRlckZ1bmN0aW9uKShUKSwKLSAgICAgICAgICBib29sIChBbmltYXRpb246Oip0ZXN0RnVuY3Rp
b24pKCkgY29uc3QsCi0gICAgICAgICAgdm9pZCAoQW5pbWF0aW9uOjoqY2xlYXJGdW5jdGlvbiko
KSwKLSAgICAgICAgICBUICgqaW5pdGlhbEZ1bmN0aW9uKSgpLAotICAgICAgICAgIHZvaWQgKENT
U1RvU3R5bGVNYXA6OiptYXBGdW5jdGlvbikoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKSwKLSAgICAg
ICAgICBBbmltYXRpb25MaXN0KiAoUmVuZGVyU3R5bGU6OiphbmltYXRpb25HZXR0ZXJGdW5jdGlv
bikoKSwKLSAgICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiAoUmVuZGVyU3R5bGU6OippbW11
dGFibGVBbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKSBjb25zdD4KLWNsYXNzIEFwcGx5UHJvcGVy
dHlBbmltYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKEFuaW1hdGlv
biogYW5pbWF0aW9uLCBUIHZhbHVlKSB7IChhbmltYXRpb24tPipzZXR0ZXJGdW5jdGlvbikodmFs
dWUpOyB9Ci0gICAgc3RhdGljIFQgdmFsdWUoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24pIHsg
cmV0dXJuIChhbmltYXRpb24tPipnZXR0ZXJGdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyBib29s
IHRlc3QoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24pIHsgcmV0dXJuIChhbmltYXRpb24tPip0
ZXN0RnVuY3Rpb24pKCk7IH0KLSAgICBzdGF0aWMgdm9pZCBjbGVhcihBbmltYXRpb24qIGFuaW1h
dGlvbikgeyAoYW5pbWF0aW9uLT4qY2xlYXJGdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyBUIGlu
aXRpYWwoKSB7IHJldHVybiAoKmluaXRpYWxGdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lk
IG1hcChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBBbmltYXRpb24qIGFuaW1hdGlvbiwg
Q1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRnVuY3Rp
b24pKGFuaW1hdGlvbiwgdmFsdWUpOyB9Ci0gICAgc3RhdGljIEFuaW1hdGlvbkxpc3QqIGFjY2Vz
c0FuaW1hdGlvbnMoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPiphbmltYXRp
b25HZXR0ZXJGdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyBjb25zdCBBbmltYXRpb25MaXN0KiBh
bmltYXRpb25zKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qaW1tdXRhYmxl
QW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCk7IH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0g
ICAgewotICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHls
ZVJlc29sdmVyLT5zdHlsZSgpKTsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50
TGlzdCA9IGFuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSk7Ci0gICAgICAg
IHNpemVfdCBpID0gMCwgcGFyZW50U2l6ZSA9IHBhcmVudExpc3QgPyBwYXJlbnRMaXN0LT5zaXpl
KCkgOiAwOwotICAgICAgICBmb3IgKCA7IGkgPCBwYXJlbnRTaXplICYmIHRlc3QocGFyZW50TGlz
dC0+YW5pbWF0aW9uKGkpKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobGlzdC0+c2l6ZSgpIDw9
IGkpCi0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwot
ICAgICAgICAgICAgc2V0VmFsdWUobGlzdC0+YW5pbWF0aW9uKGkpLCB2YWx1ZShwYXJlbnRMaXN0
LT5hbmltYXRpb24oaSkpKTsKLSAgICAgICAgICAgIGxpc3QtPmFuaW1hdGlvbihpKS0+c2V0QW5p
bWF0aW9uTW9kZShwYXJlbnRMaXN0LT5hbmltYXRpb24oaSktPmFuaW1hdGlvbk1vZGUoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvKiBSZXNldCBhbnkgcmVtYWluaW5nIGFuaW1hdGlvbnMgdG8g
bm90IGhhdmUgdGhlIHByb3BlcnR5IHNldC4gKi8KLSAgICAgICAgZm9yICggOyBpIDwgbGlzdC0+
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBjbGVhcihsaXN0LT5hbmltYXRpb24oaSkpOwotICAg
IH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIEFu
aW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCkpOwotICAgICAgICBpZiAobGlzdC0+aXNFbXB0eSgpKQotICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICBzZXRWYWx1ZShsaXN0LT5hbmltYXRp
b24oMCksIGluaXRpYWwoKSk7Ci0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5
V2Via2l0VHJhbnNpdGlvblByb3BlcnR5KQotICAgICAgICAgICAgbGlzdC0+YW5pbWF0aW9uKDAp
LT5zZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZUFsbCk7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAxOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBjbGVhcihs
aXN0LT5hbmltYXRpb24oaSkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQotICAgIHsKLSAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlv
bnMoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7Ci0gICAgICAgIHNpemVfdCBjaGlsZEluZGV4ID0g
MDsKLSAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICAvKiBX
YWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGFuIGFuaW1hdGlvbiwgY3JlYXRpbmcgbmV3
IGFuaW1hdGlvbnMgYXMgbmVlZGVkLiAqLwotICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJ
dGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICAg
ICAgICAgIGlmIChjaGlsZEluZGV4IDw9IGxpc3QtPnNpemUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgICAgIG1h
cChzdHlsZVJlc29sdmVyLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIGkudmFsdWUoKSk7
Ci0gICAgICAgICAgICAgICAgKytjaGlsZEluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICBtYXAoc3R5
bGVSZXNvbHZlciwgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICBjaGlsZEluZGV4ID0gMTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKCA7IGNoaWxkSW5k
ZXggPCBsaXN0LT5zaXplKCk7ICsrY2hpbGRJbmRleCkgewotICAgICAgICAgICAgLyogUmVzZXQg
YWxsIHJlbWFpbmluZyBhbmltYXRpb25zIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICov
Ci0gICAgICAgICAgICBjbGVhcihsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkg
eyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlh
bFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KLX07Ci0KLWNsYXNzIEFwcGx5UHJvcGVydHlPdXRsaW5l
U3R5bGUgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7
Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVy
U3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpz
ZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlh
bE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxl
UmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxl
LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6
OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3Jk
ZXJTdHlsZT46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAg
IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91
dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5l
U3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVT
dHlsZUlzQXV0bz46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIp
OwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVuZGVy
U3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxp
bmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46
OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgIH0KLQot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdDxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxp
bmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5
bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHls
ZUlzQXV0bz46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwot
ICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6
b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxl
LCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlW
YWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5k
bGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7
IH0KLX07Ci0KLWNsYXNzIEFwcGx5UHJvcGVydHlSZXNpemUgewotcHVibGljOgotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpOwotCi0gICAgICAgIEVSZXNpemUgciA9IFJFU0laRV9OT05FOwotICAgICAgICBzd2l0
Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86Ci0gICAgICAgICAgICBp
ZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2V0dGlu
Z3MoKSkKLSAgICAgICAgICAgICAgICByID0gc2V0dGluZ3MtPnRleHRBcmVhc0FyZVJlc2l6YWJs
ZSgpID8gUkVTSVpFX0JPVEggOiBSRVNJWkVfTk9ORTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgciA9ICpwcmltaXRpdmVWYWx1ZTsKLSAgICAgICAg
fQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRSZXNpemUocik7Ci0gICAgfQot
Ci0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAg
ICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVS
ZXNpemUsICZSZW5kZXJTdHlsZTo6cmVzaXplLCBFUmVzaXplLCAmUmVuZGVyU3R5bGU6OnNldFJl
c2l6ZSwgRVJlc2l6ZSwgJlJlbmRlclN0eWxlOjppbml0aWFsUmVzaXplPjo6Y3JlYXRlSGFuZGxl
cigpOwotICAgICAgICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0
aW9uKCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKLSAgICB9Ci19
OwotCi1jbGFzcyBBcHBseVByb3BlcnR5VmVydGljYWxBbGlnbiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7Ci0KLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24o
KnByaW1pdGl2ZVZhbHVlKTsKLQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRW
ZXJ0aWNhbEFsaWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJ
bnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNp
b24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRs
ZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxl
ciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFVmVydGljYWxBbGlnbiwgJlJlbmRlclN0eWxl
Ojp2ZXJ0aWNhbEFsaWduLCBFVmVydGljYWxBbGlnbiwgJlJlbmRlclN0eWxlOjpzZXRWZXJ0aWNh
bEFsaWduLCBFVmVydGljYWxBbGlnbiwgJlJlbmRlclN0eWxlOjppbml0aWFsVmVydGljYWxBbGln
bj46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5k
bGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlW
YWx1ZSk7Ci0gICAgfQotfTsKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgaWYgKCFzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT5oYXNBc3BlY3RSYXRpbygpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0
cnVlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5v
bWluYXRvcihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5h
dG9yKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051
bWVyYXRvcihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRv
cigpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oUmVuZGVyU3R5bGU6OmluaXRp
YWxIYXNBc3BlY3RSYXRpbygpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
QXNwZWN0UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVu
b21pbmF0b3IoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJh
dGlvTnVtZXJhdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAg
ICBpZiAoIXZhbHVlLT5pc0FzcGVjdFJhdGlvVmFsdWUoKSkgewotICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oZmFsc2UpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVjdFJh
dGlvVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVlKj4odmFsdWUpOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihh
c3BlY3RSYXRpb1ZhbHVlLT5kZW5vbWluYXRvclZhbHVlKCkpOwotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5u
dW1lcmF0b3JWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNy
ZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBw
bHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOwotICAgIH0K
LX07Ci0KLWNsYXNzIEFwcGx5UHJvcGVydHlab29tIHsKLXByaXZhdGU6Ci0gICAgc3RhdGljIHZv
aWQgcmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAg
ewotICAgICAgICAvLyBSZXNldCB0aGUgem9vbSBpbiBlZmZlY3QuIFRoaXMgYWxsb3dzIHRoZSBz
ZXRab29tIG1ldGhvZCB0byBhY2N1cmF0ZWx5IGNvbXB1dGUgYSBuZXcgem9vbSBpbiBlZmZlY3Qu
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKSA/IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKLSAgICB9Ci0KLXB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0
eWxlUmVzb2x2ZXIpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCktPnpvb20oKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKLSAgICB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0KLSAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgICAgICByZXNl
dEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKLSAgICAgICAgfSBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7Ci0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFs
Wm9vbSgpKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6
OmluaXRpYWxab29tKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlRG9jdW1lbnQpIHsKLSAgICAgICAgICAgIGZsb2F0IGRvY1pvb20g
PSBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLT5yb290
RWxlbWVudFN0eWxlKCktPnpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpOwotICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oZG9jWm9vbSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7Ci0gICAgICAgICAgICByZXNldEVm
ZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgICAgICBpZiAoZmxvYXQgcGVyY2Vu
dCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c2V0Wm9vbShwZXJjZW50IC8gMTAwLjBmKTsKLSAgICAgICAgfSBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewotICAgICAgICAgICAgcmVzZXRFZmZlY3Rp
dmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICAgICAgaWYgKGZsb2F0IG51bWJlciA9IHBy
aW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Wm9vbShudW1iZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBQcm9w
ZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBs
eVZhbHVlKTsKLSAgICB9Ci19OwotCi1jbGFzcyBBcHBseVByb3BlcnR5RGlzcGxheSB7Ci1wcml2
YXRlOgotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkRGlzcGxheVZhbHVlKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIEVEaXNwbGF5IGRpc3BsYXlQcm9wZXJ0eVZhbHVlKQotICAg
IHsKLSNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgp
ICYmIHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCi0gICAgICAgICAgICByZXR1
cm4gKGRpc3BsYXlQcm9wZXJ0eVZhbHVlID09IElOTElORSB8fCBkaXNwbGF5UHJvcGVydHlWYWx1
ZSA9PSBCTE9DSyB8fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBOT05FKTsKLSNlbHNlCi0gICAg
ICAgIFVOVVNFRF9QQVJBTShzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGRp
c3BsYXlQcm9wZXJ0eVZhbHVlKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIEVEaXNwbGF5
IGRpc3BsYXkgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5kaXNwbGF5KCk7Ci0gICAg
ICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlz
cGxheShkaXNwbGF5KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShSZW5kZXJTdHlsZTo6aW5p
dGlhbERpc3BsYXkoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUp
Ci0gICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9ICpzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLQotICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5
VmFsdWUoc3R5bGVSZXNvbHZlciwgZGlzcGxheSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUlu
aXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDxDbGlwUGF0
aE9wZXJhdGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQg
KFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRp
b24+KSwgQ2xpcFBhdGhPcGVyYXRpb24qICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgotY2xhc3MgQXBw
bHlQcm9wZXJ0eUNsaXBQYXRoIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShS
ZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IHZhbHVlKSB7
IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7Ci0gICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7Ci0gICAgICAgICAgICAgICAgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJh
c2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVW
YWx1ZSgpKSkpOwotICAgICAgICAgICAgfQotI2lmIEVOQUJMRShTVkcpCi0gICAgICAgICAgICBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfVVJJKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGNzc1VSTFZhbHVlID0gcHJp
bWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgS1VSTCB1cmwg
PSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChjc3NVUkxWYWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IGRvZXNuJ3Qgd29yayB3aXRoIGZvcndhcmQgb3Ig
ZXh0ZXJuYWwgU1ZHIHJlZmVyZW5jZXMgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTA0MDUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgUmVmZXJlbmNlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShjc3NVUkxWYWx1
ZSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAg
ICAgICAgfQotICAgIH0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIo
KQotICAgIHsKLSAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5
RGVmYXVsdEJhc2U8Q2xpcFBhdGhPcGVyYXRpb24qLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0
cjxDbGlwUGF0aE9wZXJhdGlvbj4sIHNldHRlckZ1bmN0aW9uLCBDbGlwUGF0aE9wZXJhdGlvbios
IGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3Bl
cnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5j
dGlvbigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQotfTsKLQotI2lmIEVOQUJMRShDU1NfRVhDTFVT
SU9OUykKLXRlbXBsYXRlIDxFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbiko
UGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiksIEV4Y2x1c2lvblNoYXBlVmFsdWUqICgq
aW5pdGlhbEZ1bmN0aW9uKSgpPgotY2xhc3MgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNoYXBlIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBh
c3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVu
Y3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCAwKTsKLSAgICAgICAgICAgIC8vIEZJWE1FIEJ1ZyAxMDI1NzE6IExheW91
dCBmb3IgdGhlIHZhbHVlICdvdXRzaWRlLXNoYXBlJyBpcyBub3QgeWV0IGltcGxlbWVudGVkCi0g
ICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZU91dHNpZGVTaGFwZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSk7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVW
YWx1ZTo6Y3JlYXRlU2hhcGVWYWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlciwg
cHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpOwotICAgICAgICAgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQ
cm9wZXJ0eURlZmF1bHRCYXNlPEV4Y2x1c2lvblNoYXBlVmFsdWUqLCBnZXR0ZXJGdW5jdGlvbiwg
UGFzc1JlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiwgc2V0dGVyRnVuY3Rpb24sIEV4Y2x1c2lv
blNoYXBlVmFsdWUqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7Ci0gICAgICAg
IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxl
ci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOwotICAgIH0KLX07Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKLWNsYXNzIEFwcGx5UHJvcGVydHlJbWFn
ZVJlc29sdXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
LSAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25T
b3VyY2UsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRp
b25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJl
c29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJj
ZT46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0
eWxlOjppbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5
bGU6OnNldEltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaGVyaXRWYWx1ZShwcm9w
ZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNl
PGZsb2F0LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHls
ZTo6c2V0SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VS
ZXNvbHV0aW9uPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAg
ICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRl
clN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJl
bmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJj
ZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbml0
aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVy
dHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVz
b2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VS
ZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFs
SW1hZ2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxl
UmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5k
ZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJl
c29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+Ojph
cHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghdmFsdWUt
PmlzVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIENTU1ZhbHVlTGlz
dCogdmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwotICAgICAg
ICBJbWFnZVJlc29sdXRpb25Tb3VyY2Ugc291cmNlID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFn
ZVJlc29sdXRpb25Tb3VyY2UoKTsKLSAgICAgICAgSW1hZ2VSZXNvbHV0aW9uU25hcCBzbmFwID0g
UmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwKCk7Ci0gICAgICAgIGRvdWJs
ZSByZXNvbHV0aW9uID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24oKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsK
LSAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpOwotICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwot
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRnJv
bUltYWdlKQotICAgICAgICAgICAgICAgIHNvdXJjZSA9IEltYWdlUmVzb2x1dGlvbkZyb21JbWFn
ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlU25hcCkKLSAgICAgICAgICAgICAgICBzbmFwID0gSW1hZ2VSZXNvbHV0aW9uU25hcFBp
eGVsczsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXNvbHV0aW9uID0gcHJp
bWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCk7
Ci0gICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNv
bHV0aW9uU291cmNlKHNvdXJjZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEltYWdlUmVzb2x1dGlvblNuYXAoc25hcCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldEltYWdlUmVzb2x1dGlvbihyZXNvbHV0aW9uKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFBy
b3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFw
cGx5VmFsdWUpOwotICAgIH0KLX07Ci0jZW5kaWYKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRJ
bmRlbnQgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0SW5kZW50KHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCktPnRleHRJbmRlbnQoKSk7Ci0jaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEluZGVudExpbmUoc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKS0+dGV4dEluZGVudExpbmUoKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0VGV4dEluZGVudChSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRlbnQoKSk7Ci0jaWYgRU5B
QkxFKENTUzNfVEVYVCkKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dElu
ZGVudExpbmUoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50TGluZSgpKTsKLSNlbmRpZgot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAg
aWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAvLyBbIDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IF0gLXdlYmtpdC1lYWNoLWxpbmUKLSAgICAg
ICAgLy8gVGhlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJzZXI6OnBhcnNlVGV4dElu
ZGVudC4KLSAgICAgICAgLy8gVGhlIHNlY29uZCB2YWx1ZSwgLXdlYmtpdC1lYWNoLWxpbmUgaXMg
aGFuZGxlZCBvbmx5IHdoZW4gQ1NTM19URVhUIGlzIGVuYWJsZWQuCi0KLSAgICAgICAgQ1NTVmFs
dWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0g
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsK
LSAgICAgICAgTGVuZ3RoIGxlbmd0aE9yUGVyY2VudGFnZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUt
PmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNp
b24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUo
KSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKLSAgICAgICAgQVNT
RVJUKCFsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZS5pc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEluZGVudChsZW5ndGhPclBlcmNlbnRhZ2VWYWx1
ZSk7Ci0KLSNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgICAgICBBU1NFUlQodmFsdWVMaXN0LT5s
ZW5ndGgoKSA8PSAyKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGVhY2hMaW5lVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlTGlzdC0+aXRlbSgxKSk7Ci0g
ICAgICAgIGlmIChlYWNoTGluZVZhbHVlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZWFjaExpbmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdEVhY2hMaW5lKTsKLSAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRJbmRlbnRMaW5lKFRleHRJbmRlbnRFYWNo
TGluZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VGV4dEluZGVudExpbmUoVGV4dEluZGVudEZpcnN0TGluZSk7Ci0jZW5kaWYKLSAgICB9
Ci0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUlu
aXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOwotICAgIH0KLX07Ci0KLWNvbnN0IFN0eWxlQnVpbGRl
ciYgU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIoKQotewotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU3R5bGVCdWlsZGVyLCBzdHlsZUJ1aWxkZXJJbnN0YW5jZSwgKCkpOwotICAgIHJl
dHVybiBzdHlsZUJ1aWxkZXJJbnN0YW5jZTsKLX0KLQotU3R5bGVCdWlsZGVyOjpTdHlsZUJ1aWxk
ZXIoKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ1NTUHJvcGVydGllczsgKytpKQot
ICAgICAgICBtX3Byb3BlcnR5TWFwW2ldID0gUHJvcGVydHlIYW5kbGVyKCk7Ci0KLSAgICAvLyBQ
bGVhc2Uga2VlcCBDU1MgcHJvcGVydHkgbGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXIuCi0gICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsIEFwcGx5
UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxBdHRhY2htZW50LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRB
dHRhY2htZW50LCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tn
cm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6
aXNBdHRhY2htZW50U2V0LCAmRmlsbExheWVyOjphdHRhY2htZW50LCAmRmlsbExheWVyOjpzZXRB
dHRhY2htZW50LCAmRmlsbExheWVyOjpjbGVhckF0dGFjaG1lbnQsICZGaWxsTGF5ZXI6OmluaXRp
YWxGaWxsQXR0YWNobWVudCwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxBdHRhY2htZW50Pjo6Y3Jl
YXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ2xpcCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbEJveCwgQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ2xpcCwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNr
Z3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6
OmlzQ2xpcFNldCwgJkZpbGxMYXllcjo6Y2xpcCwgJkZpbGxMYXllcjo6c2V0Q2xpcCwgJkZpbGxM
YXllcjo6Y2xlYXJDbGlwLCAmRmlsbExheWVyOjppbml0aWFsRmlsbENsaXAsICZDU1NUb1N0eWxl
TWFwOjptYXBGaWxsQ2xpcD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhl
cml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHls
ZTo6c2V0QmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQmFja2dy
b3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OmludmFsaWRDb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCBBcHBs
eVByb3BlcnR5RmlsbExheWVyPFN0eWxlSW1hZ2UqLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFn
ZSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5
ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzSW1hZ2VT
ZXQsICZGaWxsTGF5ZXI6OmltYWdlLCAmRmlsbExheWVyOjpzZXRJbWFnZSwgJkZpbGxMYXllcjo6
Y2xlYXJJbWFnZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxJbWFnZSwgJkNTU1RvU3R5bGVNYXA6
Om1hcEZpbGxJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbiwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmls
bEJveCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luLCBCYWNrZ3JvdW5kRmlsbExheWVyLCAm
UmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6YmFja2dy
b3VuZExheWVycywgJkZpbGxMYXllcjo6aXNPcmlnaW5TZXQsICZGaWxsTGF5ZXI6Om9yaWdpbiwg
JkZpbGxMYXllcjo6c2V0T3JpZ2luLCAmRmlsbExheWVyOjpjbGVhck9yaWdpbiwgJkZpbGxMYXll
cjo6aW5pdGlhbEZpbGxPcmlnaW4sICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luPjo6Y3Jl
YXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUG9zaXRpb25YLCBBcHBseVByb3BlcnR5RmlsbExheWVyPExlbmd0aCwgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUG9zaXRpb25YLCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFj
Y2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZp
bGxMYXllcjo6aXNYUG9zaXRpb25TZXQsICZGaWxsTGF5ZXI6OnhQb3NpdGlvbiwgJkZpbGxMYXll
cjo6c2V0WFBvc2l0aW9uLCAmRmlsbExheWVyOjpjbGVhclhQb3NpdGlvbiwgJkZpbGxMYXllcjo6
aW5pdGlhbEZpbGxYUG9zaXRpb24sICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uPjo6
Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kUG9zaXRpb25ZLCBBcHBseVByb3BlcnR5RmlsbExheWVyPExlbmd0aCwgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6
OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywg
JkZpbGxMYXllcjo6aXNZUG9zaXRpb25TZXQsICZGaWxsTGF5ZXI6OnlQb3NpdGlvbiwgJkZpbGxM
YXllcjo6c2V0WVBvc2l0aW9uLCAmRmlsbExheWVyOjpjbGVhcllQb3NpdGlvbiwgJkZpbGxMYXll
cjo6aW5pdGlhbEZpbGxZUG9zaXRpb24sICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9u
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUmVwZWF0WCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbFJlcGVhdCwgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0
eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXll
cnMsICZGaWxsTGF5ZXI6OmlzUmVwZWF0WFNldCwgJkZpbGxMYXllcjo6cmVwZWF0WCwgJkZpbGxM
YXllcjo6c2V0UmVwZWF0WCwgJkZpbGxMYXllcjo6Y2xlYXJSZXBlYXRYLCAmRmlsbExheWVyOjpp
bml0aWFsRmlsbFJlcGVhdFgsICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WD46OmNyZWF0
ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFJlcGVhdFksIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxSZXBlYXQsIENTU1Byb3BlcnR5
QmFja2dyb3VuZFJlcGVhdFksIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNj
ZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmls
bExheWVyOjppc1JlcGVhdFlTZXQsICZGaWxsTGF5ZXI6OnJlcGVhdFksICZGaWxsTGF5ZXI6OnNl
dFJlcGVhdFksICZGaWxsTGF5ZXI6OmNsZWFyUmVwZWF0WSwgJkZpbGxMYXllcjo6aW5pdGlhbEZp
bGxSZXBlYXRZLCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFk+OjpjcmVhdGVIYW5kbGVy
KCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplLCBB
cHBseVByb3BlcnR5RmlsbExheWVyPEZpbGxTaXplLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXpl
LCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXll
cnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNTaXplU2V0
LCAmRmlsbExheWVyOjpzaXplLCAmRmlsbExheWVyOjpzZXRTaXplLCAmRmlsbExheWVyOjpjbGVh
clNpemUsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsU2l6ZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEZp
bGxTaXplPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlCb3JkZXJCb3R0b21Db2xvciwgQXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21Q
YXJlbnQsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
Qm9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJCb3R0
b21Db2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgQXBwbHlQ
cm9wZXJ0eUJvcmRlclJhZGl1czwmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbUxlZnRSYWRpdXMs
ICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpp
bml0aWFsQm9yZGVyUmFkaXVzPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgQXBwbHlQcm9wZXJ0eUJv
cmRlclJhZGl1czwmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxC
b3JkZXJSYWRpdXM+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVy
U3R5bGUsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJl
bmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21TdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tV2lkdGgsIEFwcGx5UHJvcGVydHlDb21w
dXRlTGVuZ3RoPHVuc2lnbmVkLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVdpZHRoLCAmUmVu
ZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3Jk
ZXJXaWR0aCwgTm9ybWFsRGlzYWJsZWQsIFRoaWNrbmVzc0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVy
KCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlckNvbGxhcHNlLCBB
cHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyQ29sbGFwc2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
Q29sbGFwc2UsIEVCb3JkZXJDb2xsYXBzZSwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJDb2xsYXBz
ZSwgRUJvcmRlckNvbGxhcHNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJDb2xsYXBzZT46
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9y
ZGVySW1hZ2VPdXRzZXQsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPEJvcmRlcklt
YWdlLCBPdXRzZXQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eUJvcmRlckltYWdlUmVwZWF0LCBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2Rp
ZmllcjxCb3JkZXJJbWFnZSwgUmVwZWF0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNsaWNlLCBBcHBseVByb3BlcnR5Qm9y
ZGVySW1hZ2VNb2RpZmllcjxCb3JkZXJJbWFnZSwgU2xpY2U+OjpjcmVhdGVIYW5kbGVyKCkpOwot
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlLCBBcHBs
eVByb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U8Q1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZSwg
JlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJ
bWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVySW1hZ2VTb3VyY2U+OjpjcmVh
dGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlcklt
YWdlV2lkdGgsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPEJvcmRlckltYWdlLCBX
aWR0aD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdENvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVu
dCwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
TGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yLCAm
UmVuZGVyU3R5bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0U3R5bGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVC
b3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0U3R5bGUsIEVCb3JkZXJTdHlsZSwg
JlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0U3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0
eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgQXBwbHlQcm9wZXJ0eUNvbXB1
dGVMZW5ndGg8dW5zaWduZWQsICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdFdpZHRoLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyV2lk
dGgsIE5vcm1hbERpc2FibGVkLCBUaGlja25lc3NFbmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBBcHBs
eVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjpib3JkZXJS
aWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHls
ZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yPjo6
Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3Jk
ZXJSaWdodFN0eWxlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJT
dHlsZTo6Ym9yZGVyUmlnaHRTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldEJv
cmRlclJpZ2h0U3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVy
U3R5bGU+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eUJvcmRlclJpZ2h0V2lkdGgsIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoPHVuc2lnbmVk
LCAmUmVuZGVyU3R5bGU6OmJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
UmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyV2lkdGgsIE5vcm1hbERpc2Fi
bGVkLCBUaGlja25lc3NFbmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciwgQXBwbHlQcm9wZXJ0eUNvbG9yPE5v
SW5oZXJpdEZyb21QYXJlbnQsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3Jk
ZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1cywgQXBwbHlQ
cm9wZXJ0eUJvcmRlclJhZGl1czwmUmVuZGVyU3R5bGU6OmJvcmRlclRvcExlZnRSYWRpdXMsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjppbml0aWFs
Qm9yZGVyUmFkaXVzPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgQXBwbHlQcm9wZXJ0eUJvcmRlclJhZGl1
czwmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJv
cmRlclRvcFJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJSYWRpdXM+Ojpj
cmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRl
clRvcFN0eWxlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHls
ZTo6Ym9yZGVyVG9wU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJU
b3BTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9y
ZGVyVG9wV2lkdGgsIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoPHVuc2lnbmVkLCAmUmVuZGVy
U3R5bGU6OmJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcFdpZHRoLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJXaWR0aCwgTm9ybWFsRGlzYWJsZWQsIFRoaWNrbmVz
c0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eUJvdHRvbSwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OmJvdHRvbSwg
JlJlbmRlclN0eWxlOjpzZXRCb3R0b20sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE9mZnNldCwgQXV0
b0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eUJveFNpemluZywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJveFNpemluZywgJlJlbmRl
clN0eWxlOjpib3hTaXppbmcsIEVCb3hTaXppbmcsICZSZW5kZXJTdHlsZTo6c2V0Qm94U2l6aW5n
LCBFQm94U2l6aW5nLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hTaXppbmc+OjpjcmVhdGVIYW5k
bGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUNhcHRpb25TaWRlLCBB
cHBseVByb3BlcnR5RGVmYXVsdDxFQ2FwdGlvblNpZGUsICZSZW5kZXJTdHlsZTo6Y2FwdGlvblNp
ZGUsIEVDYXB0aW9uU2lkZSwgJlJlbmRlclN0eWxlOjpzZXRDYXB0aW9uU2lkZSwgRUNhcHRpb25T
aWRlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxDYXB0aW9uU2lkZT46OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Q2xlYXIsIEFwcGx5UHJvcGVydHlE
ZWZhdWx0PEVDbGVhciwgJlJlbmRlclN0eWxlOjpjbGVhciwgRUNsZWFyLCAmUmVuZGVyU3R5bGU6
OnNldENsZWFyLCBFQ2xlYXIsICZSZW5kZXJTdHlsZTo6aW5pdGlhbENsZWFyPjo6Y3JlYXRlSGFu
ZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlDbGlwLCBBcHBseVBy
b3BlcnR5Q2xpcDo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlDb2xvciwgQXBwbHlQcm9wZXJ0eUNvbG9yPEluaGVyaXRGcm9tUGFyZW50LCAmUmVu
ZGVyU3R5bGU6OmNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dFZpc2l0ZWRMaW5rQ29sb3IsICZSZW5kZXJTdHlsZTo6aW52YWxpZENvbG9yLCBSZW5kZXJTdHls
ZTo6aW5pdGlhbENvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlDb3VudGVySW5jcmVtZW50LCBBcHBseVByb3BlcnR5Q291bnRlcjxJbmNy
ZW1lbnQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eUNvdW50ZXJSZXNldCwgQXBwbHlQcm9wZXJ0eUNvdW50ZXI8UmVzZXQ+OjpjcmVhdGVIYW5k
bGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUN1cnNvciwgQXBwbHlQ
cm9wZXJ0eUN1cnNvcjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlEaXJlY3Rpb24sIEFwcGx5UHJvcGVydHlEaXJlY3Rpb248JlJlbmRlclN0eWxl
OjpkaXJlY3Rpb24sICZSZW5kZXJTdHlsZTo6c2V0RGlyZWN0aW9uLCBSZW5kZXJTdHlsZTo6aW5p
dGlhbERpcmVjdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5RGlzcGxheSwgQXBwbHlQcm9wZXJ0eURpc3BsYXk6OmNyZWF0ZUhhbmRsZXIo
KSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5RW1wdHlDZWxscywgQXBwbHlQ
cm9wZXJ0eURlZmF1bHQ8RUVtcHR5Q2VsbCwgJlJlbmRlclN0eWxlOjplbXB0eUNlbGxzLCBFRW1w
dHlDZWxsLCAmUmVuZGVyU3R5bGU6OnNldEVtcHR5Q2VsbHMsIEVFbXB0eUNlbGwsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbEVtcHR5Q2VsbHM+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eUZsb2F0LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFRmxvYXQs
ICZSZW5kZXJTdHlsZTo6ZmxvYXRpbmcsIEVGbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRGbG9hdGlu
ZywgRUZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxGbG9hdGluZz46OmNyZWF0ZUhhbmRsZXIo
KSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Rm9udEZhbWlseSwgQXBwbHlQ
cm9wZXJ0eUZvbnRGYW1pbHk6OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5Rm9udFNpemUsIEFwcGx5UHJvcGVydHlGb250U2l6ZTo6Y3JlYXRlSGFu
ZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlGb250U3R5bGUsIEFw
cGx5UHJvcGVydHlGb250PEZvbnRJdGFsaWMsICZGb250RGVzY3JpcHRpb246Oml0YWxpYywgJkZv
bnREZXNjcmlwdGlvbjo6c2V0SXRhbGljLCBGb250SXRhbGljT2ZmPjo6Y3JlYXRlSGFuZGxlcigp
KTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgQXBwbHlQ
cm9wZXJ0eUZvbnQ8Rm9udFNtYWxsQ2FwcywgJkZvbnREZXNjcmlwdGlvbjo6c21hbGxDYXBzLCAm
Rm9udERlc2NyaXB0aW9uOjpzZXRTbWFsbENhcHMsIEZvbnRTbWFsbENhcHNPZmY+OjpjcmVhdGVI
YW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUZvbnRXZWlnaHQs
IEFwcGx5UHJvcGVydHlGb250V2VpZ2h0OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eUhlaWdodCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVy
U3R5bGU6OmhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRIZWlnaHQsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbFNpemUsIEF1dG9FbmFibGVkLCBMZWdhY3lJbnRyaW5zaWNFbmFibGVkLCBJbnRyaW5zaWNE
aXNhYmxlZCwgTm9uZURpc2FibGVkLCBVbmRlZmluZWREaXNhYmxlZD46OmNyZWF0ZUhhbmRsZXIo
KSk7Ci0jaWYgRU5BQkxFKENTU19JTUFHRV9PUklFTlRBVElPTikKLSAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlJbWFnZU9yaWVudGF0aW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxJ
bWFnZU9yaWVudGF0aW9uRW51bSwgJlJlbmRlclN0eWxlOjppbWFnZU9yaWVudGF0aW9uLCBJbWFn
ZU9yaWVudGF0aW9uRW51bSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZU9yaWVudGF0aW9uLCBJbWFn
ZU9yaWVudGF0aW9uRW51bSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VPcmllbnRhdGlvbj46
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0jZW5kaWYKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlJbWFnZVJlbmRlcmluZywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUltYWdlUmVuZGVyaW5n
LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVuZGVyaW5nLCBFSW1hZ2VSZW5kZXJpbmcsICZSZW5kZXJT
dHlsZTo6c2V0SW1hZ2VSZW5kZXJpbmcsIEVJbWFnZVJlbmRlcmluZywgJlJlbmRlclN0eWxlOjpp
bml0aWFsSW1hZ2VSZW5kZXJpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOwotI2lmIEVOQUJMRShDU1Nf
SU1BR0VfUkVTT0xVVElPTikKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlJbWFn
ZVJlc29sdXRpb24sIEFwcGx5UHJvcGVydHlJbWFnZVJlc29sdXRpb246OmNyZWF0ZUhhbmRsZXIo
KSk7Ci0jZW5kaWYKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlMZWZ0LCBBcHBs
eVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bGVmdCwgJlJlbmRlclN0eWxlOjpzZXRMZWZ0
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPZmZzZXQsIEF1dG9FbmFibGVkPjo6Y3JlYXRlSGFuZGxl
cigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nLCBB
cHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDxpbnQsICZSZW5kZXJTdHlsZTo6bGV0dGVyU3BhY2lu
ZywgJlJlbmRlclN0eWxlOjpzZXRMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxM
ZXR0ZXJXb3JkU3BhY2luZywgTm9ybWFsRW5hYmxlZCwgVGhpY2tuZXNzRGlzYWJsZWQsIFNWR1pv
b21FbmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlMaW5lSGVpZ2h0LCBBcHBseVByb3BlcnR5TGluZUhlaWdodDo6Y3JlYXRlSGFuZGxl
cigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSwg
QXBwbHlQcm9wZXJ0eVN0eWxlSW1hZ2U8JlJlbmRlclN0eWxlOjpsaXN0U3R5bGVJbWFnZSwgJlJl
bmRlclN0eWxlOjpzZXRMaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjppbml0aWFsTGlzdFN0
eWxlSW1hZ2UsIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U+OjpjcmVhdGVIYW5kbGVyKCkpOwot
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUxpc3RTdHlsZVBvc2l0aW9uLCBBcHBs
eVByb3BlcnR5RGVmYXVsdDxFTGlzdFN0eWxlUG9zaXRpb24sICZSZW5kZXJTdHlsZTo6bGlzdFN0
eWxlUG9zaXRpb24sIEVMaXN0U3R5bGVQb3NpdGlvbiwgJlJlbmRlclN0eWxlOjpzZXRMaXN0U3R5
bGVQb3NpdGlvbiwgRUxpc3RTdHlsZVBvc2l0aW9uLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxMaXN0
U3R5bGVQb3NpdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5TGlzdFN0eWxlVHlwZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUxpc3RTdHls
ZVR5cGUsICZSZW5kZXJTdHlsZTo6bGlzdFN0eWxlVHlwZSwgRUxpc3RTdHlsZVR5cGUsICZSZW5k
ZXJTdHlsZTo6c2V0TGlzdFN0eWxlVHlwZSwgRUxpc3RTdHlsZVR5cGUsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbExpc3RTdHlsZVR5cGU+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVu
ZGVyU3R5bGU6Om1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5Cb3R0b20sICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbE1hcmdpbiwgQXV0b0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkp
OwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIEFwcGx5UHJv
cGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjptYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6OnNldE1h
cmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcmdpbiwgQXV0b0VuYWJsZWQ+OjpjcmVh
dGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU1hcmdpblJp
Z2h0LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bWFyZ2luUmlnaHQsICZSZW5k
ZXJTdHlsZTo6c2V0TWFyZ2luUmlnaHQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcmdpbiwgQXV0
b0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eU1hcmdpblRvcCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6Om1hcmdp
blRvcCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1h
cmdpbiwgQXV0b0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eU1heEhlaWdodCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5
bGU6Om1heEhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRNYXhIZWlnaHQsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbE1heFNpemUsIEF1dG9FbmFibGVkLCBMZWdhY3lJbnRyaW5zaWNFbmFibGVkLCBJbnRy
aW5zaWNEaXNhYmxlZCwgTm9uZUVuYWJsZWQsIFVuZGVmaW5lZEVuYWJsZWQ+OjpjcmVhdGVIYW5k
bGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU1heFdpZHRoLCBBcHBs
eVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0
TWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1heFNpemUsIEF1dG9FbmFibGVkLCBMZWdh
Y3lJbnRyaW5zaWNFbmFibGVkLCBJbnRyaW5zaWNFbmFibGVkLCBOb25lRW5hYmxlZCwgVW5kZWZp
bmVkRW5hYmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5TWluSGVpZ2h0LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bWlu
SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1pbkhlaWdodCwgJlJlbmRlclN0eWxlOjppbml0aWFs
TWluU2l6ZSwgQXV0b0VuYWJsZWQsIExlZ2FjeUludHJpbnNpY0VuYWJsZWQsIEludHJpbnNpY0Rp
c2FibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlNaW5XaWR0aCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6Om1pbldpZHRo
LCAmUmVuZGVyU3R5bGU6OnNldE1pbldpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNaW5TaXpl
LCBBdXRvRW5hYmxlZCwgTGVnYWN5SW50cmluc2ljRW5hYmxlZCwgSW50cmluc2ljRW5hYmxlZD46
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5T3Bh
Y2l0eSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8ZmxvYXQsICZSZW5kZXJTdHlsZTo6b3BhY2l0eSwg
ZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0T3BhY2l0eSwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbE9wYWNpdHk+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eU9ycGhhbnMsIEFwcGx5UHJvcGVydHlBdXRvPHNob3J0LCAmUmVuZGVyU3R5bGU6
Om9ycGhhbnMsICZSZW5kZXJTdHlsZTo6c2V0T3JwaGFucywgJlJlbmRlclN0eWxlOjpoYXNBdXRv
T3JwaGFucywgJlJlbmRlclN0eWxlOjpzZXRIYXNBdXRvT3JwaGFucz46OmNyZWF0ZUhhbmRsZXIo
KSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yLCBBcHBs
eVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjpvdXRsaW5l
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZp
c2l0ZWRMaW5rT3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxl
cigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0LCBB
cHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDxpbnQsICZSZW5kZXJTdHlsZTo6b3V0bGluZU9mZnNl
dCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxP
dXRsaW5lT2Zmc2V0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlPdXRsaW5lU3R5bGUsIEFwcGx5UHJvcGVydHlPdXRsaW5lU3R5bGU6OmNyZWF0
ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5T3V0bGluZVdp
ZHRoLCBBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDx1bnNpZ25lZCBzaG9ydCwgJlJlbmRlclN0
eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVdpZHRoLCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxPdXRsaW5lV2lkdGgsIE5vcm1hbERpc2FibGVkLCBUaGlja25lc3NFbmFi
bGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlPdmVyZmxvd1dyYXAsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVPdmVyZmxvd1dyYXAsICZSZW5k
ZXJTdHlsZTo6b3ZlcmZsb3dXcmFwLCBFT3ZlcmZsb3dXcmFwLCAmUmVuZGVyU3R5bGU6OnNldE92
ZXJmbG93V3JhcCwgRU92ZXJmbG93V3JhcCwgJlJlbmRlclN0eWxlOjppbml0aWFsT3ZlcmZsb3dX
cmFwPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlPdmVyZmxvd1gsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVPdmVyZmxvdywgJlJlbmRlclN0eWxl
OjpvdmVyZmxvd1gsIEVPdmVyZmxvdywgJlJlbmRlclN0eWxlOjpzZXRPdmVyZmxvd1gsIEVPdmVy
ZmxvdywgJlJlbmRlclN0eWxlOjppbml0aWFsT3ZlcmZsb3dYPjo6Y3JlYXRlSGFuZGxlcigpKTsK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdmVyZmxvd1ksIEFwcGx5UHJvcGVy
dHlEZWZhdWx0PEVPdmVyZmxvdywgJlJlbmRlclN0eWxlOjpvdmVyZmxvd1ksIEVPdmVyZmxvdywg
JlJlbmRlclN0eWxlOjpzZXRPdmVyZmxvd1ksIEVPdmVyZmxvdywgJlJlbmRlclN0eWxlOjppbml0
aWFsT3ZlcmZsb3dZPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHls
ZTo6cGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nQm90dG9tLCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxQYWRkaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVu
ZGVyU3R5bGU6OnBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0LCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxQYWRkaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsIEFwcGx5UHJvcGVydHlMZW5ndGg8
JlJlbmRlclN0eWxlOjpwYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQYWRkaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlQYWRkaW5nVG9wLCBBcHBseVByb3BlcnR5TGVu
Z3RoPCZSZW5kZXJTdHlsZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9w
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQYWRkaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlciwgQXBwbHlQcm9wZXJ0
eURlZmF1bHQ8RVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjpwYWdlQnJlYWtBZnRlciwgRVBhZ2VC
cmVhaywgJlJlbmRlclN0eWxlOjpzZXRQYWdlQnJlYWtBZnRlciwgRVBhZ2VCcmVhaywgJlJlbmRl
clN0eWxlOjppbml0aWFsUGFnZUJyZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlQYWdlQnJlYWtCZWZvcmUsIEFwcGx5UHJvcGVydHlEZWZh
dWx0PEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6cGFnZUJyZWFrQmVmb3JlLCBFUGFnZUJyZWFr
LCAmUmVuZGVyU3R5bGU6OnNldFBhZ2VCcmVha0JlZm9yZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0
eWxlOjppbml0aWFsUGFnZUJyZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlQYWdlQnJlYWtJbnNpZGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0
PEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6cGFnZUJyZWFrSW5zaWRlLCBFUGFnZUJyZWFrLCAm
UmVuZGVyU3R5bGU6OnNldFBhZ2VCcmVha0luc2lkZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxl
Ojppbml0aWFsUGFnZUJyZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlQb2ludGVyRXZlbnRzLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFUG9p
bnRlckV2ZW50cywgJlJlbmRlclN0eWxlOjpwb2ludGVyRXZlbnRzLCBFUG9pbnRlckV2ZW50cywg
JlJlbmRlclN0eWxlOjpzZXRQb2ludGVyRXZlbnRzLCBFUG9pbnRlckV2ZW50cywgJlJlbmRlclN0
eWxlOjppbml0aWFsUG9pbnRlckV2ZW50cz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJv
cGVydHlIYW5kbGVyKENTU1Byb3BlcnR5UG9zaXRpb24sIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVQ
b3NpdGlvbiwgJlJlbmRlclN0eWxlOjpwb3NpdGlvbiwgRVBvc2l0aW9uLCAmUmVuZGVyU3R5bGU6
OnNldFBvc2l0aW9uLCBFUG9zaXRpb24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFBvc2l0aW9uPjo6
Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlSZXNp
emUsIEFwcGx5UHJvcGVydHlSZXNpemU6OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5UmlnaHQsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0
eWxlOjpyaWdodCwgJlJlbmRlclN0eWxlOjpzZXRSaWdodCwgJlJlbmRlclN0eWxlOjppbml0aWFs
T2Zmc2V0LCBBdXRvRW5hYmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5U2l6ZSwgQXBwbHlQcm9wZXJ0eVBhZ2VTaXplOjpjcmVhdGVIYW5k
bGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVNwZWFrLCBBcHBseVBy
b3BlcnR5RGVmYXVsdDxFU3BlYWssICZSZW5kZXJTdHlsZTo6c3BlYWssIEVTcGVhaywgJlJlbmRl
clN0eWxlOjpzZXRTcGVhaywgRVNwZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTcGVhaz46OmNy
ZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VGFibGVM
YXlvdXQsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVUYWJsZUxheW91dCwgJlJlbmRlclN0eWxlOjp0
YWJsZUxheW91dCwgRVRhYmxlTGF5b3V0LCAmUmVuZGVyU3R5bGU6OnNldFRhYmxlTGF5b3V0LCBF
VGFibGVMYXlvdXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRhYmxlTGF5b3V0Pjo6Y3JlYXRlSGFu
ZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlUYWJTaXplLCBBcHBs
eVByb3BlcnR5RGVmYXVsdDx1bnNpZ25lZCwgJlJlbmRlclN0eWxlOjp0YWJTaXplLCB1bnNpZ25l
ZCwgJlJlbmRlclN0eWxlOjpzZXRUYWJTaXplLCB1bnNpZ25lZCwgJlJlbmRlclN0eWxlOjppbml0
aWFsVGFiU2l6ZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5VGV4dEFsaWduLCBBcHBseVByb3BlcnR5VGV4dEFsaWduOjpjcmVhdGVIYW5kbGVy
KCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCBB
cHBseVByb3BlcnR5VGV4dERlY29yYXRpb246OmNyZWF0ZUhhbmRsZXIoKSk7Ci0jaWYgRU5BQkxF
KENTUzNfVEVYVCkKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0
RGVjb3JhdGlvbkxpbmUsIEFwcGx5UHJvcGVydHlUZXh0RGVjb3JhdGlvbjo6Y3JlYXRlSGFuZGxl
cigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3Jh
dGlvblN0eWxlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0RGVjb3JhdGlvblN0eWxlLCAmUmVu
ZGVyU3R5bGU6OnRleHREZWNvcmF0aW9uU3R5bGUsIFRleHREZWNvcmF0aW9uU3R5bGUsICZSZW5k
ZXJTdHlsZTo6c2V0VGV4dERlY29yYXRpb25TdHlsZSwgVGV4dERlY29yYXRpb25TdHlsZSwgJlJl
bmRlclN0eWxlOjppbml0aWFsVGV4dERlY29yYXRpb25TdHlsZT46OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25D
b2xvciwgQXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQsICZSZW5kZXJTdHls
ZTo6dGV4dERlY29yYXRpb25Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlvbkNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dERlY29yYXRpb25Db2xvciwgJlJl
bmRlclN0eWxlOjpjb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5V2Via2l0VGV4dEFsaWduTGFzdCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8
VGV4dEFsaWduTGFzdCwgJlJlbmRlclN0eWxlOjp0ZXh0QWxpZ25MYXN0LCBUZXh0QWxpZ25MYXN0
LCAmUmVuZGVyU3R5bGU6OnNldFRleHRBbGlnbkxhc3QsIFRleHRBbGlnbkxhc3QsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbFRleHRBbGlnbkxhc3Q+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRKdXN0aWZ5LCBBcHBseVByb3BlcnR5
RGVmYXVsdDxUZXh0SnVzdGlmeSwgJlJlbmRlclN0eWxlOjp0ZXh0SnVzdGlmeSwgVGV4dEp1c3Rp
ZnksICZSZW5kZXJTdHlsZTo6c2V0VGV4dEp1c3RpZnksIFRleHRKdXN0aWZ5LCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxUZXh0SnVzdGlmeT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VGV4dFVuZGVybGluZVBvc2l0aW9uLCBBcHBseVBy
b3BlcnR5VGV4dFVuZGVybGluZVBvc2l0aW9uOjpjcmVhdGVIYW5kbGVyKCkpOwotI2VuZGlmIC8v
IENTUzNfVEVYVAotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVRleHRJbmRlbnQs
IEFwcGx5UHJvcGVydHlUZXh0SW5kZW50OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8
VGV4dE92ZXJmbG93LCAmUmVuZGVyU3R5bGU6OnRleHRPdmVyZmxvdywgVGV4dE92ZXJmbG93LCAm
UmVuZGVyU3R5bGU6OnNldFRleHRPdmVyZmxvdywgVGV4dE92ZXJmbG93LCAmUmVuZGVyU3R5bGU6
OmluaXRpYWxUZXh0T3ZlcmZsb3c+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVRleHRSZW5kZXJpbmcsIEFwcGx5UHJvcGVydHlGb250PFRleHRS
ZW5kZXJpbmdNb2RlLCAmRm9udERlc2NyaXB0aW9uOjp0ZXh0UmVuZGVyaW5nTW9kZSwgJkZvbnRE
ZXNjcmlwdGlvbjo6c2V0VGV4dFJlbmRlcmluZ01vZGUsIEF1dG9UZXh0UmVuZGVyaW5nPjo6Y3Jl
YXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlUZXh0VHJh
bnNmb3JtLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFVGV4dFRyYW5zZm9ybSwgJlJlbmRlclN0eWxl
Ojp0ZXh0VHJhbnNmb3JtLCBFVGV4dFRyYW5zZm9ybSwgJlJlbmRlclN0eWxlOjpzZXRUZXh0VHJh
bnNmb3JtLCBFVGV4dFRyYW5zZm9ybSwgJlJlbmRlclN0eWxlOjppbml0aWFsVGV4dFRyYW5zZm9y
bT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
VG9wLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6dG9wLCAmUmVuZGVyU3R5bGU6
OnNldFRvcCwgJlJlbmRlclN0eWxlOjppbml0aWFsT2Zmc2V0LCBBdXRvRW5hYmxlZD46OmNyZWF0
ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VW5pY29kZUJp
ZGksIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVVbmljb2RlQmlkaSwgJlJlbmRlclN0eWxlOjp1bmlj
b2RlQmlkaSwgRVVuaWNvZGVCaWRpLCAmUmVuZGVyU3R5bGU6OnNldFVuaWNvZGVCaWRpLCBFVW5p
Y29kZUJpZGksICZSZW5kZXJTdHlsZTo6aW5pdGlhbFVuaWNvZGVCaWRpPjo6Y3JlYXRlSGFuZGxl
cigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduLCBB
cHBseVByb3BlcnR5VmVydGljYWxBbGlnbjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCBBcHBseVByb3BlcnR5RGVmYXVsdDxF
VmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjp2aXNpYmlsaXR5LCBFVmlzaWJpbGl0eSwgJlJlbmRl
clN0eWxlOjpzZXRWaXNpYmlsaXR5LCBFVmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjppbml0aWFs
VmlzaWJpbGl0eT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXksIEFwcGx5UHJvcGVydHlBbmltYXRpb248ZG91
YmxlLCAmQW5pbWF0aW9uOjpkZWxheSwgJkFuaW1hdGlvbjo6c2V0RGVsYXksICZBbmltYXRpb246
OmlzRGVsYXlTZXQsICZBbmltYXRpb246OmNsZWFyRGVsYXksICZBbmltYXRpb246OmluaXRpYWxB
bmltYXRpb25EZWxheSwgJkNTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRlbGF5LCAmUmVuZGVy
U3R5bGU6OmFjY2Vzc0FuaW1hdGlvbnMsICZSZW5kZXJTdHlsZTo6YW5pbWF0aW9ucz46OmNyZWF0
ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QW5p
bWF0aW9uRGlyZWN0aW9uLCBBcHBseVByb3BlcnR5QW5pbWF0aW9uPEFuaW1hdGlvbjo6QW5pbWF0
aW9uRGlyZWN0aW9uLCAmQW5pbWF0aW9uOjpkaXJlY3Rpb24sICZBbmltYXRpb246OnNldERpcmVj
dGlvbiwgJkFuaW1hdGlvbjo6aXNEaXJlY3Rpb25TZXQsICZBbmltYXRpb246OmNsZWFyRGlyZWN0
aW9uLCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGlyZWN0aW9uLCAmQ1NTVG9TdHlsZU1h
cDo6bWFwQW5pbWF0aW9uRGlyZWN0aW9uLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0FuaW1hdGlvbnMs
ICZSZW5kZXJTdHlsZTo6YW5pbWF0aW9ucz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJv
cGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb24sIEFwcGx5UHJv
cGVydHlBbmltYXRpb248ZG91YmxlLCAmQW5pbWF0aW9uOjpkdXJhdGlvbiwgJkFuaW1hdGlvbjo6
c2V0RHVyYXRpb24sICZBbmltYXRpb246OmlzRHVyYXRpb25TZXQsICZBbmltYXRpb246OmNsZWFy
RHVyYXRpb24sICZBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25EdXJhdGlvbiwgJkNTU1RvU3R5
bGVNYXA6Om1hcEFuaW1hdGlvbkR1cmF0aW9uLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0FuaW1hdGlv
bnMsICZSZW5kZXJTdHlsZTo6YW5pbWF0aW9ucz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRmlsbE1vZGUsIEFwcGx5
UHJvcGVydHlBbmltYXRpb248dW5zaWduZWQsICZBbmltYXRpb246OmZpbGxNb2RlLCAmQW5pbWF0
aW9uOjpzZXRGaWxsTW9kZSwgJkFuaW1hdGlvbjo6aXNGaWxsTW9kZVNldCwgJkFuaW1hdGlvbjo6
Y2xlYXJGaWxsTW9kZSwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkZpbGxNb2RlLCAmQ1NT
VG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRmlsbE1vZGUsICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5p
bWF0aW9ucywgJlJlbmRlclN0eWxlOjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25D
b3VudCwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxkb3VibGUsICZBbmltYXRpb246Oml0ZXJhdGlv
bkNvdW50LCAmQW5pbWF0aW9uOjpzZXRJdGVyYXRpb25Db3VudCwgJkFuaW1hdGlvbjo6aXNJdGVy
YXRpb25Db3VudFNldCwgJkFuaW1hdGlvbjo6Y2xlYXJJdGVyYXRpb25Db3VudCwgJkFuaW1hdGlv
bjo6aW5pdGlhbEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50LCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5p
bWF0aW9uSXRlcmF0aW9uQ291bnQsICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5pbWF0aW9ucywgJlJl
bmRlclN0eWxlOjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lLCBBcHBseVByb3BlcnR5QW5p
bWF0aW9uPGNvbnN0IFN0cmluZyYsICZBbmltYXRpb246Om5hbWUsICZBbmltYXRpb246OnNldE5h
bWUsICZBbmltYXRpb246OmlzTmFtZVNldCwgJkFuaW1hdGlvbjo6Y2xlYXJOYW1lLCAmQW5pbWF0
aW9uOjppbml0aWFsQW5pbWF0aW9uTmFtZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbk5h
bWUsICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5pbWF0aW9ucywgJlJlbmRlclN0eWxlOjphbmltYXRp
b25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb25QbGF5U3RhdGUsIEFwcGx5UHJvcGVydHlBbmltYXRpb248RUFuaW1Q
bGF5U3RhdGUsICZBbmltYXRpb246OnBsYXlTdGF0ZSwgJkFuaW1hdGlvbjo6c2V0UGxheVN0YXRl
LCAmQW5pbWF0aW9uOjppc1BsYXlTdGF0ZVNldCwgJkFuaW1hdGlvbjo6Y2xlYXJQbGF5U3RhdGUs
ICZBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUsICZDU1NUb1N0eWxlTWFwOjpt
YXBBbmltYXRpb25QbGF5U3RhdGUsICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5pbWF0aW9ucywgJlJl
bmRlclN0eWxlOjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbiwgQXBwbHlQ
cm9wZXJ0eUFuaW1hdGlvbjxjb25zdCBQYXNzUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiwgJkFuaW1h
dGlvbjo6dGltaW5nRnVuY3Rpb24sICZBbmltYXRpb246OnNldFRpbWluZ0Z1bmN0aW9uLCAmQW5p
bWF0aW9uOjppc1RpbWluZ0Z1bmN0aW9uU2V0LCAmQW5pbWF0aW9uOjpjbGVhclRpbWluZ0Z1bmN0
aW9uLCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sICZDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbiwgJlJlbmRlclN0eWxlOjphY2Nlc3NB
bmltYXRpb25zLCAmUmVuZGVyU3R5bGU6OmFuaW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwot
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFwcGVhcmFuY2UsIEFwcGx5
UHJvcGVydHlEZWZhdWx0PENvbnRyb2xQYXJ0LCAmUmVuZGVyU3R5bGU6OmFwcGVhcmFuY2UsIENv
bnRyb2xQYXJ0LCAmUmVuZGVyU3R5bGU6OnNldEFwcGVhcmFuY2UsIENvbnRyb2xQYXJ0LCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxBcHBlYXJhbmNlPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbywgQXBwbHlQcm9wZXJ0
eUFzcGVjdFJhdGlvOjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8
RUJhY2tmYWNlVmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpiYWNrZmFjZVZpc2liaWxpdHksIEVC
YWNrZmFjZVZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5LCBF
QmFja2ZhY2VWaXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCYWNrZmFjZVZpc2liaWxp
dHk+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdlYmtpdEJhY2tncm91bmRDbGlwLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwKTsKLSAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlLCBB
cHBseVByb3BlcnR5RmlsbExheWVyPENvbXBvc2l0ZU9wZXJhdG9yLCBDU1NQcm9wZXJ0eVdlYmtp
dEJhY2tncm91bmRDb21wb3NpdGUsIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6
YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAm
RmlsbExheWVyOjppc0NvbXBvc2l0ZVNldCwgJkZpbGxMYXllcjo6Y29tcG9zaXRlLCAmRmlsbExh
eWVyOjpzZXRDb21wb3NpdGUsICZGaWxsTGF5ZXI6OmNsZWFyQ29tcG9zaXRlLCAmRmlsbExheWVy
Ojppbml0aWFsRmlsbENvbXBvc2l0ZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxDb21wb3NpdGU+
OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdl
YmtpdEJhY2tncm91bmRPcmlnaW4sIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbik7Ci0gICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNpemUsIENTU1By
b3BlcnR5QmFja2dyb3VuZFNpemUpOwotI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCi0gICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QmxlbmRNb2RlLCBBcHBseVByb3Bl
cnR5RGVmYXVsdDxCbGVuZE1vZGUsICZSZW5kZXJTdHlsZTo6YmxlbmRNb2RlLCBCbGVuZE1vZGUs
ICZSZW5kZXJTdHlsZTo6c2V0QmxlbmRNb2RlLCBCbGVuZE1vZGUsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbEJsZW5kTW9kZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZEJsZW5kTW9kZSwgQXBwbHlQcm9wZXJ0eUZpbGxM
YXllcjxCbGVuZE1vZGUsIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZEJsZW5kTW9kZSwgQmFj
a2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAm
UmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzQmxlbmRNb2RlU2V0
LCAmRmlsbExheWVyOjpibGVuZE1vZGUsICZGaWxsTGF5ZXI6OnNldEJsZW5kTW9kZSwgJkZpbGxM
YXllcjo6Y2xlYXJCbGVuZE1vZGUsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQmxlbmRNb2RlLCAm
Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbEJsZW5kTW9kZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0jZW5k
aWYKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJGaXQsIEFw
cGx5UHJvcGVydHlEZWZhdWx0PEVCb3JkZXJGaXQsICZSZW5kZXJTdHlsZTo6Ym9yZGVyRml0LCBF
Qm9yZGVyRml0LCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckZpdCwgRUJvcmRlckZpdCwgJlJlbmRl
clN0eWxlOjppbml0aWFsQm9yZGVyRml0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywgQXBw
bHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg8c2hvcnQsICZSZW5kZXJTdHlsZTo6aG9yaXpvbnRhbEJv
cmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0SG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEhvcml6b250YWxCb3JkZXJTcGFjaW5nPjo6Y3JlYXRlSGFuZGxl
cigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJJbWFn
ZSwgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlPEJvcmRlckltYWdlLCBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckltYWdlLCAmUmVuZGVyU3R5bGU6OmJvcmRlckltYWdlLCAmUmVuZGVyU3R5bGU6OnNl
dEJvcmRlckltYWdlPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsIEFwcGx5UHJvcGVydHlDb21w
dXRlTGVuZ3RoPHNob3J0LCAmUmVuZGVyU3R5bGU6OnZlcnRpY2FsQm9yZGVyU3BhY2luZywgJlJl
bmRlclN0eWxlOjpzZXRWZXJ0aWNhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFZlcnRpY2FsQm9yZGVyU3BhY2luZz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Qm94QWxpZ24sIEFwcGx5UHJvcGVydHlEZWZhdWx0
PEVCb3hBbGlnbm1lbnQsICZSZW5kZXJTdHlsZTo6Ym94QWxpZ24sIEVCb3hBbGlnbm1lbnQsICZS
ZW5kZXJTdHlsZTo6c2V0Qm94QWxpZ24sIEVCb3hBbGlnbm1lbnQsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbEJveEFsaWduPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSNpZiBFTkFCTEUoQ1NTX0JPWF9ERUNP
UkFUSU9OX0JSRUFLKQotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJv
eERlY29yYXRpb25CcmVhaywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJveERlY29yYXRpb25CcmVh
aywgJlJlbmRlclN0eWxlOjpib3hEZWNvcmF0aW9uQnJlYWssIEVCb3hEZWNvcmF0aW9uQnJlYWss
ICZSZW5kZXJTdHlsZTo6c2V0Qm94RGVjb3JhdGlvbkJyZWFrLCBFQm94RGVjb3JhdGlvbkJyZWFr
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hEZWNvcmF0aW9uQnJlYWs+OjpjcmVhdGVIYW5kbGVy
KCkpOwotI2VuZGlmCi0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Qm94
RGlyZWN0aW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm94RGlyZWN0aW9uLCAmUmVuZGVyU3R5
bGU6OmJveERpcmVjdGlvbiwgRUJveERpcmVjdGlvbiwgJlJlbmRlclN0eWxlOjpzZXRCb3hEaXJl
Y3Rpb24sIEVCb3hEaXJlY3Rpb24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJveERpcmVjdGlvbj46
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0Qm94RmxleCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8ZmxvYXQsICZSZW5kZXJTdHlsZTo6Ym94
RmxleCwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0Qm94RmxleCwgZmxvYXQsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbEJveEZsZXg+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJveEZsZXhHcm91cCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8
dW5zaWduZWQgaW50LCAmUmVuZGVyU3R5bGU6OmJveEZsZXhHcm91cCwgdW5zaWduZWQgaW50LCAm
UmVuZGVyU3R5bGU6OnNldEJveEZsZXhHcm91cCwgdW5zaWduZWQgaW50LCAmUmVuZGVyU3R5bGU6
OmluaXRpYWxCb3hGbGV4R3JvdXA+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJveExpbmVzLCBBcHBseVByb3BlcnR5RGVmYXVsdDxF
Qm94TGluZXMsICZSZW5kZXJTdHlsZTo6Ym94TGluZXMsIEVCb3hMaW5lcywgJlJlbmRlclN0eWxl
OjpzZXRCb3hMaW5lcywgRUJveExpbmVzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hMaW5lcz46
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0Qm94T3JkaW5hbEdyb3VwLCBBcHBseVByb3BlcnR5RGVmYXVsdDx1bnNpZ25lZCBpbnQsICZS
ZW5kZXJTdHlsZTo6Ym94T3JkaW5hbEdyb3VwLCB1bnNpZ25lZCBpbnQsICZSZW5kZXJTdHlsZTo6
c2V0Qm94T3JkaW5hbEdyb3VwLCB1bnNpZ25lZCBpbnQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJv
eE9yZGluYWxHcm91cD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0Qm94T3JpZW50LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm94T3Jp
ZW50LCAmUmVuZGVyU3R5bGU6OmJveE9yaWVudCwgRUJveE9yaWVudCwgJlJlbmRlclN0eWxlOjpz
ZXRCb3hPcmllbnQsIEVCb3hPcmllbnQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJveE9yaWVudD46
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0Qm94UGFjaywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJveFBhY2ssICZSZW5kZXJTdHlsZTo6
Ym94UGFjaywgRUJveFBhY2ssICZSZW5kZXJTdHlsZTo6c2V0Qm94UGFjaywgRUJveFBhY2ssICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEJveFBhY2s+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENvbG9yQ29ycmVjdGlvbiwgQXBwbHlQcm9w
ZXJ0eURlZmF1bHQ8Q29sb3JTcGFjZSwgJlJlbmRlclN0eWxlOjpjb2xvclNwYWNlLCBDb2xvclNw
YWNlLCAmUmVuZGVyU3R5bGU6OnNldENvbG9yU3BhY2UsIENvbG9yU3BhY2UsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbENvbG9yU3BhY2U+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkF4aXMsIEFwcGx5UHJvcGVydHlEZWZhdWx0
PENvbHVtbkF4aXMsICZSZW5kZXJTdHlsZTo6Y29sdW1uQXhpcywgQ29sdW1uQXhpcywgJlJlbmRl
clN0eWxlOjpzZXRDb2x1bW5BeGlzLCBDb2x1bW5BeGlzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxD
b2x1bW5BeGlzPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0FmdGVyLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFUGFn
ZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkJyZWFrQWZ0ZXIsIEVQYWdlQnJlYWssICZSZW5k
ZXJTdHlsZTo6c2V0Q29sdW1uQnJlYWtBZnRlciwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjpp
bml0aWFsUGFnZUJyZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0JlZm9yZSwgQXBwbHlQcm9wZXJ0eURlZmF1
bHQ8RVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjpjb2x1bW5CcmVha0JlZm9yZSwgRVBhZ2VCcmVh
aywgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5CcmVha0JlZm9yZSwgRVBhZ2VCcmVhaywgJlJlbmRl
clN0eWxlOjppbml0aWFsUGFnZUJyZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0luc2lkZSwgQXBwbHlQcm9w
ZXJ0eURlZmF1bHQ8RVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjpjb2x1bW5CcmVha0luc2lkZSwg
RVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5CcmVha0luc2lkZSwgRVBhZ2VCcmVh
aywgJlJlbmRlclN0eWxlOjppbml0aWFsUGFnZUJyZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5Db3VudCwgQXBwbHlQ
cm9wZXJ0eUF1dG88dW5zaWduZWQgc2hvcnQsICZSZW5kZXJTdHlsZTo6Y29sdW1uQ291bnQsICZS
ZW5kZXJTdHlsZTo6c2V0Q29sdW1uQ291bnQsICZSZW5kZXJTdHlsZTo6aGFzQXV0b0NvbHVtbkNv
dW50LCAmUmVuZGVyU3R5bGU6OnNldEhhc0F1dG9Db2x1bW5Db3VudD46OmNyZWF0ZUhhbmRsZXIo
KSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uR2FwLCBB
cHBseVByb3BlcnR5QXV0bzxmbG9hdCwgJlJlbmRlclN0eWxlOjpjb2x1bW5HYXAsICZSZW5kZXJT
dHlsZTo6c2V0Q29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6Omhhc05vcm1hbENvbHVtbkdhcCwgJlJl
bmRlclN0eWxlOjpzZXRIYXNOb3JtYWxDb2x1bW5HYXAsIENvbXB1dGVMZW5ndGgsIENTU1ZhbHVl
Tm9ybWFsPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5Qcm9ncmVzc2lvbiwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8Q29sdW1u
UHJvZ3Jlc3Npb24sICZSZW5kZXJTdHlsZTo6Y29sdW1uUHJvZ3Jlc3Npb24sIENvbHVtblByb2dy
ZXNzaW9uLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblByb2dyZXNzaW9uLCBDb2x1bW5Qcm9ncmVz
c2lvbiwgJlJlbmRlclN0eWxlOjppbml0aWFsQ29sdW1uUHJvZ3Jlc3Npb24+OjpjcmVhdGVIYW5k
bGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1
bGVDb2xvciwgQXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQsICZSZW5kZXJT
dHlsZTo6Y29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxl
Ojpjb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoLCBBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDx1
bnNpZ25lZCBzaG9ydCwgJlJlbmRlclN0eWxlOjpjb2x1bW5SdWxlV2lkdGgsICZSZW5kZXJTdHls
ZTo6c2V0Q29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxDb2x1bW5SdWxlV2lk
dGgsIE5vcm1hbERpc2FibGVkLCBUaGlja25lc3NFbmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5TcGFuLCBBcHBs
eVByb3BlcnR5RGVmYXVsdDxDb2x1bW5TcGFuLCAmUmVuZGVyU3R5bGU6OmNvbHVtblNwYW4sIENv
bHVtblNwYW4sICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uU3BhbiwgQ29sdW1uU3BhbiwgJlJlbmRl
clN0eWxlOjppbml0aWFsQ29sdW1uU3Bhbj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJv
cGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVN0eWxlLCBBcHBseVByb3Bl
cnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6Y29sdW1uUnVsZVN0eWxlLCBF
Qm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVN0eWxlLCBFQm9yZGVyU3R5
bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6Y3JlYXRlSGFuZGxlcigpKTsK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aCwgQXBw
bHlQcm9wZXJ0eUF1dG88ZmxvYXQsICZSZW5kZXJTdHlsZTo6Y29sdW1uV2lkdGgsICZSZW5kZXJT
dHlsZTo6c2V0Q29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6aGFzQXV0b0NvbHVtbldpZHRoLCAm
UmVuZGVyU3R5bGU6OnNldEhhc0F1dG9Db2x1bW5XaWR0aCwgQ29tcHV0ZUxlbmd0aD46OmNyZWF0
ZUhhbmRsZXIoKSk7Ci0jaWYgRU5BQkxFKENVUlNPUl9WSVNJQklMSVRZKQotICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEN1cnNvclZpc2liaWxpdHksIEFwcGx5UHJvcGVy
dHlEZWZhdWx0PEN1cnNvclZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6Y3Vyc29yVmlzaWJpbGl0
eSwgQ3Vyc29yVmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpzZXRDdXJzb3JWaXNpYmlsaXR5LCBD
dXJzb3JWaXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxDdXJzb3JWaXNpYmlsaXR5Pjo6
Y3JlYXRlSGFuZGxlcigpKTsKLSNlbmRpZgotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdEFsaWduQ29udGVudCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUFsaWduQ29udGVu
dCwgJlJlbmRlclN0eWxlOjphbGlnbkNvbnRlbnQsIEVBbGlnbkNvbnRlbnQsICZSZW5kZXJTdHls
ZTo6c2V0QWxpZ25Db250ZW50LCBFQWxpZ25Db250ZW50LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxB
bGlnbkNvbnRlbnQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdEFsaWduSXRlbXMsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVBbGlnbkl0
ZW1zLCAmUmVuZGVyU3R5bGU6OmFsaWduSXRlbXMsIEVBbGlnbkl0ZW1zLCAmUmVuZGVyU3R5bGU6
OnNldEFsaWduSXRlbXMsIEVBbGlnbkl0ZW1zLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxBbGlnbkl0
ZW1zPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlXZWJraXRBbGlnblNlbGYsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVBbGlnbkl0ZW1zLCAmUmVu
ZGVyU3R5bGU6OmFsaWduU2VsZiwgRUFsaWduSXRlbXMsICZSZW5kZXJTdHlsZTo6c2V0QWxpZ25T
ZWxmLCBFQWxpZ25JdGVtcywgJlJlbmRlclN0eWxlOjppbml0aWFsQWxpZ25TZWxmPjo6Y3JlYXRl
SGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRGbGV4
QmFzaXMsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpmbGV4QmFzaXMsICZSZW5k
ZXJTdHlsZTo6c2V0RmxleEJhc2lzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxGbGV4QmFzaXMsIEF1
dG9FbmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRGbGV4RGlyZWN0aW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFRmxleERp
cmVjdGlvbiwgJlJlbmRlclN0eWxlOjpmbGV4RGlyZWN0aW9uLCBFRmxleERpcmVjdGlvbiwgJlJl
bmRlclN0eWxlOjpzZXRGbGV4RGlyZWN0aW9uLCBFRmxleERpcmVjdGlvbiwgJlJlbmRlclN0eWxl
Ojppbml0aWFsRmxleERpcmVjdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0RmxleEdyb3csIEFwcGx5UHJvcGVydHlEZWZhdWx0
PGZsb2F0LCAmUmVuZGVyU3R5bGU6OmZsZXhHcm93LCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRG
bGV4R3JvdywgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEZsZXhHcm93Pjo6Y3JlYXRlSGFu
ZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRGbGV4U2hy
aW5rLCBBcHBseVByb3BlcnR5RGVmYXVsdDxmbG9hdCwgJlJlbmRlclN0eWxlOjpmbGV4U2hyaW5r
LCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRGbGV4U2hyaW5rLCBmbG9hdCwgJlJlbmRlclN0eWxl
Ojppbml0aWFsRmxleFNocmluaz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5V2Via2l0RmxleFdyYXAsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVG
bGV4V3JhcCwgJlJlbmRlclN0eWxlOjpmbGV4V3JhcCwgRUZsZXhXcmFwLCAmUmVuZGVyU3R5bGU6
OnNldEZsZXhXcmFwLCBFRmxleFdyYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEZsZXhXcmFwPjo6
Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRHcmlkQXV0b0Zsb3csIEFwcGx5UHJvcGVydHlEZWZhdWx0PEdyaWRBdXRvRmxvdywgJlJlbmRl
clN0eWxlOjpncmlkQXV0b0Zsb3csIEdyaWRBdXRvRmxvdywgJlJlbmRlclN0eWxlOjpzZXRHcmlk
QXV0b0Zsb3csIEdyaWRBdXRvRmxvdywgJlJlbmRlclN0eWxlOjppbml0aWFsR3JpZEF1dG9GbG93
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRKdXN0aWZ5Q29udGVudCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUp1c3RpZnlDb250ZW50
LCAmUmVuZGVyU3R5bGU6Omp1c3RpZnlDb250ZW50LCBFSnVzdGlmeUNvbnRlbnQsICZSZW5kZXJT
dHlsZTo6c2V0SnVzdGlmeUNvbnRlbnQsIEVKdXN0aWZ5Q29udGVudCwgJlJlbmRlclN0eWxlOjpp
bml0aWFsSnVzdGlmeUNvbnRlbnQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE9yZGVyLCBBcHBseVByb3BlcnR5RGVmYXVsdDxpbnQs
ICZSZW5kZXJTdHlsZTo6b3JkZXIsIGludCwgJlJlbmRlclN0eWxlOjpzZXRPcmRlciwgaW50LCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxPcmRlcj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0jaWYgRU5BQkxF
KENTU19SRUdJT05TKQotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEZs
b3dGcm9tLCBBcHBseVByb3BlcnR5U3RyaW5nPE1hcE5vbmVUb051bGwsICZSZW5kZXJTdHlsZTo6
cmVnaW9uVGhyZWFkLCAmUmVuZGVyU3R5bGU6OnNldFJlZ2lvblRocmVhZCwgJlJlbmRlclN0eWxl
Ojppbml0aWFsUmVnaW9uVGhyZWFkPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bywgQXBwbHlQcm9wZXJ0eVN0cmluZzxN
YXBOb25lVG9OdWxsLCAmUmVuZGVyU3R5bGU6OmZsb3dUaHJlYWQsICZSZW5kZXJTdHlsZTo6c2V0
Rmxvd1RocmVhZCwgJlJlbmRlclN0eWxlOjppbml0aWFsRmxvd1RocmVhZD46OmNyZWF0ZUhhbmRs
ZXIoKSk7Ci0jZW5kaWYKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRG
b250S2VybmluZywgQXBwbHlQcm9wZXJ0eUZvbnQ8Rm9udERlc2NyaXB0aW9uOjpLZXJuaW5nLCAm
Rm9udERlc2NyaXB0aW9uOjprZXJuaW5nLCAmRm9udERlc2NyaXB0aW9uOjpzZXRLZXJuaW5nLCBG
b250RGVzY3JpcHRpb246OkF1dG9LZXJuaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRGb250U21vb3RoaW5nLCBBcHBseVByb3Bl
cnR5Rm9udDxGb250U21vb3RoaW5nTW9kZSwgJkZvbnREZXNjcmlwdGlvbjo6Zm9udFNtb290aGlu
ZywgJkZvbnREZXNjcmlwdGlvbjo6c2V0Rm9udFNtb290aGluZywgQXV0b1Ntb290aGluZz46OmNy
ZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0
Rm9udFZhcmlhbnRMaWdhdHVyZXMsIEFwcGx5UHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlczo6
Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRIaWdobGlnaHQsIEFwcGx5UHJvcGVydHlTdHJpbmc8TWFwTm9uZVRvTnVsbCwgJlJlbmRlclN0
eWxlOjpoaWdobGlnaHQsICZSZW5kZXJTdHlsZTo6c2V0SGlnaGxpZ2h0LCAmUmVuZGVyU3R5bGU6
OmluaXRpYWxIaWdobGlnaHQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUNoYXJhY3RlciwgQXBwbHlQcm9wZXJ0eVN0
cmluZzxNYXBBdXRvVG9OdWxsLCAmUmVuZGVyU3R5bGU6Omh5cGhlbmF0aW9uU3RyaW5nLCAmUmVu
ZGVyU3R5bGU6OnNldEh5cGhlbmF0aW9uU3RyaW5nLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxIeXBo
ZW5hdGlvblN0cmluZz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRBZnRlciwgQXBwbHlQcm9wZXJ0eU51bWJl
cjxzaG9ydCwgJlJlbmRlclN0eWxlOjpoeXBoZW5hdGlvbkxpbWl0QWZ0ZXIsICZSZW5kZXJTdHls
ZTo6c2V0SHlwaGVuYXRpb25MaW1pdEFmdGVyLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxIeXBoZW5h
dGlvbkxpbWl0QWZ0ZXI+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUxpbWl0QmVmb3JlLCBBcHBseVByb3BlcnR5TnVt
YmVyPHNob3J0LCAmUmVuZGVyU3R5bGU6Omh5cGhlbmF0aW9uTGltaXRCZWZvcmUsICZSZW5kZXJT
dHlsZTo6c2V0SHlwaGVuYXRpb25MaW1pdEJlZm9yZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSHlw
aGVuYXRpb25MaW1pdEJlZm9yZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lcywgQXBwbHlQcm9wZXJ0
eU51bWJlcjxzaG9ydCwgJlJlbmRlclN0eWxlOjpoeXBoZW5hdGlvbkxpbWl0TGluZXMsICZSZW5k
ZXJTdHlsZTo6c2V0SHlwaGVuYXRpb25MaW1pdExpbmVzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxI
eXBoZW5hdGlvbkxpbWl0TGluZXMsIENTU1ZhbHVlTm9MaW1pdD46OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0SHlwaGVucywgQXBwbHlQ
cm9wZXJ0eURlZmF1bHQ8SHlwaGVucywgJlJlbmRlclN0eWxlOjpoeXBoZW5zLCBIeXBoZW5zLCAm
UmVuZGVyU3R5bGU6OnNldEh5cGhlbnMsIEh5cGhlbnMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEh5
cGhlbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdExpbmVBbGlnbiwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8TGluZUFsaWduLCAmUmVu
ZGVyU3R5bGU6OmxpbmVBbGlnbiwgTGluZUFsaWduLCAmUmVuZGVyU3R5bGU6OnNldExpbmVBbGln
biwgTGluZUFsaWduLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lQWxpZ24+OjpjcmVhdGVIYW5k
bGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVh
aywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8TGluZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmxpbmVCcmVh
aywgTGluZUJyZWFrLCAmUmVuZGVyU3R5bGU6OnNldExpbmVCcmVhaywgTGluZUJyZWFrLCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxMaW5lQnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdExpbmVDbGFtcCwgQXBwbHlQcm9wZXJ0eURl
ZmF1bHQ8Y29uc3QgTGluZUNsYW1wVmFsdWUmLCAmUmVuZGVyU3R5bGU6OmxpbmVDbGFtcCwgTGlu
ZUNsYW1wVmFsdWUsICZSZW5kZXJTdHlsZTo6c2V0TGluZUNsYW1wLCBMaW5lQ2xhbXBWYWx1ZSwg
JlJlbmRlclN0eWxlOjppbml0aWFsTGluZUNsYW1wPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRMaW5lR3JpZCwgQXBwbHlQcm9wZXJ0
eVN0cmluZzxNYXBOb25lVG9OdWxsLCAmUmVuZGVyU3R5bGU6OmxpbmVHcmlkLCAmUmVuZGVyU3R5
bGU6OnNldExpbmVHcmlkLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lR3JpZD46OmNyZWF0ZUhh
bmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TGluZVNu
YXAsIEFwcGx5UHJvcGVydHlEZWZhdWx0PExpbmVTbmFwLCAmUmVuZGVyU3R5bGU6OmxpbmVTbmFw
LCBMaW5lU25hcCwgJlJlbmRlclN0eWxlOjpzZXRMaW5lU25hcCwgTGluZVNuYXAsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbExpbmVTbmFwPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlLCBBcHBseVByb3Bl
cnR5RGVmYXVsdDxFTWFyZ2luQ29sbGFwc2UsICZSZW5kZXJTdHlsZTo6bWFyZ2luQWZ0ZXJDb2xs
YXBzZSwgRU1hcmdpbkNvbGxhcHNlLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkFmdGVyQ29sbGFw
c2UsIEVNYXJnaW5Db2xsYXBzZSwgJlJlbmRlclN0eWxlOjppbml0aWFsTWFyZ2luQWZ0ZXJDb2xs
YXBzZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0TWFyZ2luQmVmb3JlQ29sbGFwc2UsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVNYXJn
aW5Db2xsYXBzZSwgJlJlbmRlclN0eWxlOjptYXJnaW5CZWZvcmVDb2xsYXBzZSwgRU1hcmdpbkNv
bGxhcHNlLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkJlZm9yZUNvbGxhcHNlLCBFTWFyZ2luQ29s
bGFwc2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcmdpbkJlZm9yZUNvbGxhcHNlPjo6Y3JlYXRl
SGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXJn
aW5Cb3R0b21Db2xsYXBzZSwgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlKTsK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Ub3BDb2xsYXBz
ZSwgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5CZWZvcmVDb2xsYXBzZSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFycXVlZURpcmVjdGlvbiwgQXBwbHlQcm9wZXJ0
eURlZmF1bHQ8RU1hcnF1ZWVEaXJlY3Rpb24sICZSZW5kZXJTdHlsZTo6bWFycXVlZURpcmVjdGlv
biwgRU1hcnF1ZWVEaXJlY3Rpb24sICZSZW5kZXJTdHlsZTo6c2V0TWFycXVlZURpcmVjdGlvbiwg
RU1hcnF1ZWVEaXJlY3Rpb24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcnF1ZWVEaXJlY3Rpb24+
OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdl
YmtpdE1hcnF1ZWVJbmNyZW1lbnQsIEFwcGx5UHJvcGVydHlNYXJxdWVlSW5jcmVtZW50OjpjcmVh
dGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1h
cnF1ZWVSZXBldGl0aW9uLCBBcHBseVByb3BlcnR5TWFycXVlZVJlcGV0aXRpb246OmNyZWF0ZUhh
bmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFycXVl
ZVNwZWVkLCBBcHBseVByb3BlcnR5TWFycXVlZVNwZWVkOjpjcmVhdGVIYW5kbGVyKCkpOwotICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTdHlsZSwgQXBwbHlQ
cm9wZXJ0eURlZmF1bHQ8RU1hcnF1ZWVCZWhhdmlvciwgJlJlbmRlclN0eWxlOjptYXJxdWVlQmVo
YXZpb3IsIEVNYXJxdWVlQmVoYXZpb3IsICZSZW5kZXJTdHlsZTo6c2V0TWFycXVlZUJlaGF2aW9y
LCBFTWFycXVlZUJlaGF2aW9yLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNYXJxdWVlQmVoYXZpb3I+
OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tCb3hJbWFnZSwgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlPEJvcmRlck1hc2ssIENT
U1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tCb3hJbWFnZSwg
JlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2U+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZU91dHNldCwgQXBw
bHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8Qm9yZGVyTWFzaywgT3V0c2V0Pjo6Y3JlYXRl
SGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNr
Qm94SW1hZ2VSZXBlYXQsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPEJvcmRlck1h
c2ssIFJlcGVhdD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU2xpY2UsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFn
ZU1vZGlmaWVyPEJvcmRlck1hc2ssIFNsaWNlPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2UsIEFwcGx5
UHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZTxDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNv
dXJjZSwgJlJlbmRlclN0eWxlOjptYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0
TWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNYXNrQm94SW1hZ2VTb3Vy
Y2U+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tCb3hJbWFnZVdpZHRoLCBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmll
cjxCb3JkZXJNYXNrLCBXaWR0aD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXAsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8
RUZpbGxCb3gsIENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXAsIE1hc2tGaWxsTGF5ZXIsICZSZW5k
ZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmRmls
bExheWVyOjppc0NsaXBTZXQsICZGaWxsTGF5ZXI6OmNsaXAsICZGaWxsTGF5ZXI6OnNldENsaXAs
ICZGaWxsTGF5ZXI6OmNsZWFyQ2xpcCwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxDbGlwLCAmQ1NT
VG9TdHlsZU1hcDo6bWFwRmlsbENsaXA+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGUsIEFwcGx5UHJvcGVydHlG
aWxsTGF5ZXI8Q29tcG9zaXRlT3BlcmF0b3IsIENTU1Byb3BlcnR5V2Via2l0TWFza0NvbXBvc2l0
ZSwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVy
U3R5bGU6Om1hc2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzQ29tcG9zaXRlU2V0LCAmRmlsbExheWVy
Ojpjb21wb3NpdGUsICZGaWxsTGF5ZXI6OnNldENvbXBvc2l0ZSwgJkZpbGxMYXllcjo6Y2xlYXJD
b21wb3NpdGUsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ29tcG9zaXRlLCAmQ1NTVG9TdHlsZU1h
cDo6bWFwRmlsbENvbXBvc2l0ZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlLCBBcHBseVByb3BlcnR5RmlsbExheWVy
PFN0eWxlSW1hZ2UqLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgTWFza0ZpbGxMYXllciwg
JlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMs
ICZGaWxsTGF5ZXI6OmlzSW1hZ2VTZXQsICZGaWxsTGF5ZXI6OmltYWdlLCAmRmlsbExheWVyOjpz
ZXRJbWFnZSwgJkZpbGxMYXllcjo6Y2xlYXJJbWFnZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxJ
bWFnZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0g
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbiwgQXBwbHlQ
cm9wZXJ0eUZpbGxMYXllcjxFRmlsbEJveCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luLCBN
YXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHls
ZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6aXNPcmlnaW5TZXQsICZGaWxsTGF5ZXI6Om9yaWdp
biwgJkZpbGxMYXllcjo6c2V0T3JpZ2luLCAmRmlsbExheWVyOjpjbGVhck9yaWdpbiwgJkZpbGxM
YXllcjo6aW5pdGlhbEZpbGxPcmlnaW4sICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luPjo6
Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRNYXNrUG9zaXRpb25YLCBBcHBseVByb3BlcnR5RmlsbExheWVyPExlbmd0aCwgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrUG9zaXRpb25YLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vz
c01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6aXNYUG9z
aXRpb25TZXQsICZGaWxsTGF5ZXI6OnhQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WFBvc2l0aW9u
LCAmRmlsbExheWVyOjpjbGVhclhQb3NpdGlvbiwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxYUG9z
aXRpb24sICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uPjo6Y3JlYXRlSGFuZGxlcigp
KTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25Z
LCBBcHBseVByb3BlcnR5RmlsbExheWVyPExlbmd0aCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9z
aXRpb25ZLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZS
ZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6aXNZUG9zaXRpb25TZXQsICZGaWxs
TGF5ZXI6OnlQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WVBvc2l0aW9uLCAmRmlsbExheWVyOjpj
bGVhcllQb3NpdGlvbiwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxZUG9zaXRpb24sICZDU1NUb1N0
eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9uPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WCwgQXBwbHlQcm9wZXJ0eUZp
bGxMYXllcjxFRmlsbFJlcGVhdCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WCwgTWFza0Zp
bGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1h
c2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzUmVwZWF0WFNldCwgJkZpbGxMYXllcjo6cmVwZWF0WCwg
JkZpbGxMYXllcjo6c2V0UmVwZWF0WCwgJkZpbGxMYXllcjo6Y2xlYXJSZXBlYXRYLCAmRmlsbExh
eWVyOjppbml0aWFsRmlsbFJlcGVhdFgsICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WD46
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0TWFza1JlcGVhdFksIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxSZXBlYXQsIENTU1By
b3BlcnR5V2Via2l0TWFza1JlcGVhdFksIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNj
ZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmRmlsbExheWVyOjppc1Jl
cGVhdFlTZXQsICZGaWxsTGF5ZXI6OnJlcGVhdFksICZGaWxsTGF5ZXI6OnNldFJlcGVhdFksICZG
aWxsTGF5ZXI6OmNsZWFyUmVwZWF0WSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxSZXBlYXRZLCAm
Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFk+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplLCBBcHBseVByb3BlcnR5
RmlsbExheWVyPEZpbGxTaXplLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplLCBNYXNrRmlsbExh
eWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xh
eWVycywgJkZpbGxMYXllcjo6aXNTaXplU2V0LCAmRmlsbExheWVyOjpzaXplLCAmRmlsbExheWVy
OjpzZXRTaXplLCAmRmlsbExheWVyOjpjbGVhclNpemUsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxs
U2l6ZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZSwgQXBwbHlQcm9w
ZXJ0eURlZmF1bHQ8RU5CU1BNb2RlLCAmUmVuZGVyU3R5bGU6Om5ic3BNb2RlLCBFTkJTUE1vZGUs
ICZSZW5kZXJTdHlsZTo6c2V0TkJTUE1vZGUsIEVOQlNQTW9kZSwgJlJlbmRlclN0eWxlOjppbml0
aWFsTkJTUE1vZGU+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luLCBBcHBseVByb3BlcnR5RXhwYW5kaW5n
PFN1cHByZXNzVmFsdWUsIENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmVPcmlnaW5YLCBDU1NQ
cm9wZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmVPcmlnaW5YLCBB
cHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVu
ZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2luWCwgJlJlbmRlclN0eWxlOjppbml0aWFsUGVy
c3BlY3RpdmVPcmlnaW5YPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpblksIEFwcGx5UHJvcGVydHlMZW5n
dGg8JlJlbmRlclN0eWxlOjpwZXJzcGVjdGl2ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0UGVy
c3BlY3RpdmVPcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQZXJzcGVjdGl2ZU9yaWdpblk+
OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdl
YmtpdFByaW50Q29sb3JBZGp1c3QsIEFwcGx5UHJvcGVydHlEZWZhdWx0PFByaW50Q29sb3JBZGp1
c3QsICZSZW5kZXJTdHlsZTo6cHJpbnRDb2xvckFkanVzdCwgUHJpbnRDb2xvckFkanVzdCwgJlJl
bmRlclN0eWxlOjpzZXRQcmludENvbG9yQWRqdXN0LCBQcmludENvbG9yQWRqdXN0LCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxQcmludENvbG9yQWRqdXN0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSNpZiBF
TkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0UmVnaW9uQnJlYWtBZnRlciwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBhZ2VCcmVhaywgJlJl
bmRlclN0eWxlOjpyZWdpb25CcmVha0FmdGVyLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OnNl
dFJlZ2lvbkJyZWFrQWZ0ZXIsIEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6aW5pdGlhbFBhZ2VC
cmVhaz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0UmVnaW9uQnJlYWtCZWZvcmUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVQYWdlQnJl
YWssICZSZW5kZXJTdHlsZTo6cmVnaW9uQnJlYWtCZWZvcmUsIEVQYWdlQnJlYWssICZSZW5kZXJT
dHlsZTo6c2V0UmVnaW9uQnJlYWtCZWZvcmUsIEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6aW5p
dGlhbFBhZ2VCcmVhaz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtJbnNpZGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0
PEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6cmVnaW9uQnJlYWtJbnNpZGUsIEVQYWdlQnJlYWss
ICZSZW5kZXJTdHlsZTo6c2V0UmVnaW9uQnJlYWtJbnNpZGUsIEVQYWdlQnJlYWssICZSZW5kZXJT
dHlsZTo6aW5pdGlhbFBhZ2VCcmVhaz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0UmVnaW9uT3ZlcmZsb3csIEFwcGx5UHJvcGVydHlE
ZWZhdWx0PFJlZ2lvbk92ZXJmbG93LCAmUmVuZGVyU3R5bGU6OnJlZ2lvbk92ZXJmbG93LCBSZWdp
b25PdmVyZmxvdywgJlJlbmRlclN0eWxlOjpzZXRSZWdpb25PdmVyZmxvdywgUmVnaW9uT3ZlcmZs
b3csICZSZW5kZXJTdHlsZTo6aW5pdGlhbFJlZ2lvbk92ZXJmbG93Pjo6Y3JlYXRlSGFuZGxlcigp
KTsKLSNlbmRpZgotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9y
ZGVyaW5nLCBBcHBseVByb3BlcnR5RGVmYXVsdDxPcmRlciwgJlJlbmRlclN0eWxlOjpydGxPcmRl
cmluZywgT3JkZXIsICZSZW5kZXJTdHlsZTo6c2V0UlRMT3JkZXJpbmcsIE9yZGVyLCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxSVExPcmRlcmluZz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJv
cGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0UnVieVBvc2l0aW9uLCBBcHBseVByb3BlcnR5
RGVmYXVsdDxSdWJ5UG9zaXRpb24sICZSZW5kZXJTdHlsZTo6cnVieVBvc2l0aW9uLCBSdWJ5UG9z
aXRpb24sICZSZW5kZXJTdHlsZTo6c2V0UnVieVBvc2l0aW9uLCBSdWJ5UG9zaXRpb24sICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbFJ1YnlQb3NpdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VGV4dENvbWJpbmUsIEFwcGx5UHJvcGVy
dHlEZWZhdWx0PFRleHRDb21iaW5lLCAmUmVuZGVyU3R5bGU6OnRleHRDb21iaW5lLCBUZXh0Q29t
YmluZSwgJlJlbmRlclN0eWxlOjpzZXRUZXh0Q29tYmluZSwgVGV4dENvbWJpbmUsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbFRleHRDb21iaW5lPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xvciwgQXBwbHlQcm9w
ZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQsICZSZW5kZXJTdHlsZTo6dGV4dEVtcGhhc2lz
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dEVtcGhhc2lzQ29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0VmlzaXRlZExpbmtUZXh0RW1waGFzaXNDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcj46OmNy
ZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0
VGV4dEVtcGhhc2lzUG9zaXRpb24sIEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHRFbXBoYXNpc1Bv
c2l0aW9uLCAmUmVuZGVyU3R5bGU6OnRleHRFbXBoYXNpc1Bvc2l0aW9uLCBUZXh0RW1waGFzaXNQ
b3NpdGlvbiwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RW1waGFzaXNQb3NpdGlvbiwgVGV4dEVtcGhh
c2lzUG9zaXRpb24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc1Bvc2l0aW9uPjo6
Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RW1waGFzaXNTdHlsZSwgQXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxlOjpjcmVh
dGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRGaWxsQ29sb3IsIEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50LCAmUmVu
ZGVyU3R5bGU6OnRleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dEZpbGxDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6
Y29sb3I+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRTZWN1cml0eSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVRleHRTZWN1cml0
eSwgJlJlbmRlclN0eWxlOjp0ZXh0U2VjdXJpdHksIEVUZXh0U2VjdXJpdHksICZSZW5kZXJTdHls
ZTo6c2V0VGV4dFNlY3VyaXR5LCBFVGV4dFNlY3VyaXR5LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxU
ZXh0U2VjdXJpdHk+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgQXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5o
ZXJpdEZyb21QYXJlbnQsICZSZW5kZXJTdHlsZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5
bGU6OnNldFRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRT
dHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWCwgQXBw
bHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblgsICZSZW5kZXJT
dHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNmb3Jt
T3JpZ2luWD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWSwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVy
U3R5bGU6OnRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2lu
WSwgJlJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNmb3JtT3JpZ2luWT46OmNyZWF0ZUhhbmRsZXIo
KSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3Jp
Z2luWiwgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg8ZmxvYXQsICZSZW5kZXJTdHlsZTo6dHJh
bnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5aLCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxUcmFuc2Zvcm1PcmlnaW5aPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1TdHlsZSwgQXBwbHlQ
cm9wZXJ0eURlZmF1bHQ8RVRyYW5zZm9ybVN0eWxlM0QsICZSZW5kZXJTdHlsZTo6dHJhbnNmb3Jt
U3R5bGUzRCwgRVRyYW5zZm9ybVN0eWxlM0QsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtU3R5
bGUzRCwgRVRyYW5zZm9ybVN0eWxlM0QsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zZm9ybVN0
eWxlM0Q+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxkb3VibGUs
ICZBbmltYXRpb246OmRlbGF5LCAmQW5pbWF0aW9uOjpzZXREZWxheSwgJkFuaW1hdGlvbjo6aXNE
ZWxheVNldCwgJkFuaW1hdGlvbjo6Y2xlYXJEZWxheSwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1h
dGlvbkRlbGF5LCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRGVsYXksICZSZW5kZXJTdHls
ZTo6YWNjZXNzVHJhbnNpdGlvbnMsICZSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbnM+OjpjcmVhdGVI
YW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25EdXJhdGlvbiwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxkb3VibGUsICZBbmltYXRpb246
OmR1cmF0aW9uLCAmQW5pbWF0aW9uOjpzZXREdXJhdGlvbiwgJkFuaW1hdGlvbjo6aXNEdXJhdGlv
blNldCwgJkFuaW1hdGlvbjo6Y2xlYXJEdXJhdGlvbiwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1h
dGlvbkR1cmF0aW9uLCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRHVyYXRpb24sICZSZW5k
ZXJTdHlsZTo6YWNjZXNzVHJhbnNpdGlvbnMsICZSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbnM+Ojpj
cmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zaXRpb25Qcm9wZXJ0eSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxDU1NQcm9wZXJ0eUlE
LCAmQW5pbWF0aW9uOjpwcm9wZXJ0eSwgJkFuaW1hdGlvbjo6c2V0UHJvcGVydHksICZBbmltYXRp
b246OmlzUHJvcGVydHlTZXQsICZBbmltYXRpb246OmNsZWFyUHJvcGVydHksICZBbmltYXRpb246
OmluaXRpYWxBbmltYXRpb25Qcm9wZXJ0eSwgJkNTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblBy
b3BlcnR5LCAmUmVuZGVyU3R5bGU6OmFjY2Vzc1RyYW5zaXRpb25zLCAmUmVuZGVyU3R5bGU6OnRy
YW5zaXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24sIEFwcGx5UHJvcGVydHlBbmlt
YXRpb248Y29uc3QgUGFzc1JlZlB0cjxUaW1pbmdGdW5jdGlvbj4sICZBbmltYXRpb246OnRpbWlu
Z0Z1bmN0aW9uLCAmQW5pbWF0aW9uOjpzZXRUaW1pbmdGdW5jdGlvbiwgJkFuaW1hdGlvbjo6aXNU
aW1pbmdGdW5jdGlvblNldCwgJkFuaW1hdGlvbjo6Y2xlYXJUaW1pbmdGdW5jdGlvbiwgJkFuaW1h
dGlvbjo6aW5pdGlhbEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uLCAmQ1NTVG9TdHlsZU1hcDo6bWFw
QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzVHJhbnNpdGlvbnMs
ICZSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnLCBBcHBseVByb3BlcnR5RGVm
YXVsdDxFVXNlckRyYWcsICZSZW5kZXJTdHlsZTo6dXNlckRyYWcsIEVVc2VyRHJhZywgJlJlbmRl
clN0eWxlOjpzZXRVc2VyRHJhZywgRVVzZXJEcmFnLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxVc2Vy
RHJhZz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0VXNlck1vZGlmeSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVVzZXJNb2RpZnksICZS
ZW5kZXJTdHlsZTo6dXNlck1vZGlmeSwgRVVzZXJNb2RpZnksICZSZW5kZXJTdHlsZTo6c2V0VXNl
ck1vZGlmeSwgRVVzZXJNb2RpZnksICZSZW5kZXJTdHlsZTo6aW5pdGlhbFVzZXJNb2RpZnk+Ojpj
cmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dFVzZXJTZWxlY3QsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVVc2VyU2VsZWN0LCAmUmVuZGVyU3R5
bGU6OnVzZXJTZWxlY3QsIEVVc2VyU2VsZWN0LCAmUmVuZGVyU3R5bGU6OnNldFVzZXJTZWxlY3Qs
IEVVc2VyU2VsZWN0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxVc2VyU2VsZWN0Pjo6Y3JlYXRlSGFu
ZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRDbGlwUGF0
aCwgQXBwbHlQcm9wZXJ0eUNsaXBQYXRoPCZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgsICZSZW5kZXJT
dHlsZTo6c2V0Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbENsaXBQYXRoPjo6Y3JlYXRl
SGFuZGxlcigpKTsKLQotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRXcmFwRmxvdywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8
V3JhcEZsb3csICZSZW5kZXJTdHlsZTo6d3JhcEZsb3csIFdyYXBGbG93LCAmUmVuZGVyU3R5bGU6
OnNldFdyYXBGbG93LCBXcmFwRmxvdywgJlJlbmRlclN0eWxlOjppbml0aWFsV3JhcEZsb3c+Ojpj
cmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dFNoYXBlTWFyZ2luLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6c2hhcGVNYXJn
aW4sICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVNYXJnaW4sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNo
YXBlTWFyZ2luPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRTaGFwZVBhZGRpbmcsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0
eWxlOjpzaGFwZVBhZGRpbmcsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVQYWRkaW5nLCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxTaGFwZVBhZGRpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFdyYXBUaHJvdWdoLCBBcHBseVByb3BlcnR5
RGVmYXVsdDxXcmFwVGhyb3VnaCwgJlJlbmRlclN0eWxlOjp3cmFwVGhyb3VnaCwgV3JhcFRocm91
Z2gsICZSZW5kZXJTdHlsZTo6c2V0V3JhcFRocm91Z2gsIFdyYXBUaHJvdWdoLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxXcmFwVGhyb3VnaD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVJbnNpZGUsIEFwcGx5UHJvcGVydHlFeGNs
dXNpb25TaGFwZTwmUmVuZGVyU3R5bGU6OnNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNo
YXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZUluc2lkZT46OmNyZWF0ZUhhbmRs
ZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRz
aWRlLCBBcHBseVByb3BlcnR5RXhjbHVzaW9uU2hhcGU8JlJlbmRlclN0eWxlOjpzaGFwZU91dHNp
ZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxT
aGFwZU91dHNpZGU+OjpjcmVhdGVIYW5kbGVyKCkpOwotI2VuZGlmCi0gICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5V2hpdGVTcGFjZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVdoaXRl
U3BhY2UsICZSZW5kZXJTdHlsZTo6d2hpdGVTcGFjZSwgRVdoaXRlU3BhY2UsICZSZW5kZXJTdHls
ZTo6c2V0V2hpdGVTcGFjZSwgRVdoaXRlU3BhY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFdoaXRl
U3BhY2U+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdpZG93cywgQXBwbHlQcm9wZXJ0eUF1dG88c2hvcnQsICZSZW5kZXJTdHlsZTo6d2lkb3dz
LCAmUmVuZGVyU3R5bGU6OnNldFdpZG93cywgJlJlbmRlclN0eWxlOjpoYXNBdXRvV2lkb3dzLCAm
UmVuZGVyU3R5bGU6OnNldEhhc0F1dG9XaWRvd3M+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdpZHRoLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZS
ZW5kZXJTdHlsZTo6d2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0V2lkdGgsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbFNpemUsIEF1dG9FbmFibGVkLCBMZWdhY3lJbnRyaW5zaWNFbmFibGVkLCBJbnRyaW5z
aWNFbmFibGVkLCBOb25lRGlzYWJsZWQsIFVuZGVmaW5lZERpc2FibGVkPjo6Y3JlYXRlSGFuZGxl
cigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXb3JkQnJlYWssIEFwcGx5
UHJvcGVydHlEZWZhdWx0PEVXb3JkQnJlYWssICZSZW5kZXJTdHlsZTo6d29yZEJyZWFrLCBFV29y
ZEJyZWFrLCAmUmVuZGVyU3R5bGU6OnNldFdvcmRCcmVhaywgRVdvcmRCcmVhaywgJlJlbmRlclN0
eWxlOjppbml0aWFsV29yZEJyZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5n
dGg8aW50LCAmUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldFdvcmRT
cGFjaW5nLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxMZXR0ZXJXb3JkU3BhY2luZywgTm9ybWFsRW5h
YmxlZCwgVGhpY2tuZXNzRGlzYWJsZWQsIFNWR1pvb21FbmFibGVkPjo6Y3JlYXRlSGFuZGxlcigp
KTsKLSAgICAvLyBVQXMgbXVzdCB0cmVhdCAnd29yZC13cmFwJyBhcyBhbiBhbHRlcm5hdGUgbmFt
ZSBmb3IgdGhlICdvdmVyZmxvdy13cmFwJyBwcm9wZXJ0eS4gU28gdXNpbmcgdGhlIHNhbWUgaGFu
ZGxlcnMuCi0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V29yZFdyYXAsIEFwcGx5
UHJvcGVydHlEZWZhdWx0PEVPdmVyZmxvd1dyYXAsICZSZW5kZXJTdHlsZTo6b3ZlcmZsb3dXcmFw
LCBFT3ZlcmZsb3dXcmFwLCAmUmVuZGVyU3R5bGU6OnNldE92ZXJmbG93V3JhcCwgRU92ZXJmbG93
V3JhcCwgJlJlbmRlclN0eWxlOjppbml0aWFsT3ZlcmZsb3dXcmFwPjo6Y3JlYXRlSGFuZGxlcigp
KTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlaSW5kZXgsIEFwcGx5UHJvcGVy
dHlBdXRvPGludCwgJlJlbmRlclN0eWxlOjp6SW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0WkluZGV4
LCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9aSW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0SGFzQXV0b1pJ
bmRleD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5Wm9vbSwgQXBwbHlQcm9wZXJ0eVpvb206OmNyZWF0ZUhhbmRsZXIoKSk7Ci19Ci0KLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBm
MWFhN2RkODg0MGI0YTJlYjZmNWU1OTQxYTRlNGVjMGExZWViYTEwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1
aWxkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIFN0eWxlQnVpbGRlcl9oCi0jZGVmaW5lIFN0eWxlQnVpbGRlcl9oCi0KLSNpbmNsdWRl
ICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5o
IgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDU1NWYWx1ZTsKLWNsYXNzIFN0eWxl
QnVpbGRlcjsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7Ci0KLWNsYXNzIFByb3BlcnR5SGFuZGxlciB7
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkICgqSW5oZXJpdEZ1bmN0aW9uKShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKik7Ci0gICAgdHlwZWRlZiB2b2lkICgqSW5pdGlhbEZ1bmN0aW9u
KShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKik7Ci0gICAgdHlwZWRlZiB2b2lkICgqQXBw
bHlGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciosIENTU1ZhbHVlKik7Ci0g
ICAgUHJvcGVydHlIYW5kbGVyKCkgOiBtX2luaGVyaXQoMCksIG1faW5pdGlhbCgwKSwgbV9hcHBs
eSgwKSB7IH0KLSAgICBQcm9wZXJ0eUhhbmRsZXIoSW5oZXJpdEZ1bmN0aW9uIGluaGVyaXQsIElu
aXRpYWxGdW5jdGlvbiBpbml0aWFsLCBBcHBseUZ1bmN0aW9uIGFwcGx5KSA6IG1faW5oZXJpdChp
bmhlcml0KSwgbV9pbml0aWFsKGluaXRpYWwpLCBtX2FwcGx5KGFwcGx5KSB7IH0KLSAgICB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikgY29uc3QgeyBBU1NFUlQobV9pbmhlcml0KTsgKCptX2luaGVyaXQp
KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOyB9Ci0gICAgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIp
IGNvbnN0IHsgQVNTRVJUKG1faW5pdGlhbCk7ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyKTsgfQotICAgIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3Qg
eyBBU1NFUlQobV9hcHBseSk7ICgqbV9hcHBseSkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwg
dmFsdWUpOyB9Ci0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pbmhlcml0ICYm
IG1faW5pdGlhbCAmJiBtX2FwcGx5OyB9Ci0gICAgSW5oZXJpdEZ1bmN0aW9uIGluaGVyaXRGdW5j
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5oZXJpdDsgfQotICAgIEluaXRpYWxGdW5jdGlvbiBp
bml0aWFsRnVuY3Rpb24oKSB7IHJldHVybiBtX2luaXRpYWw7IH0KLSAgICBBcHBseUZ1bmN0aW9u
IGFwcGx5RnVuY3Rpb24oKSB7IHJldHVybiBtX2FwcGx5OyB9Ci1wcml2YXRlOgotICAgIEluaGVy
aXRGdW5jdGlvbiBtX2luaGVyaXQ7Ci0gICAgSW5pdGlhbEZ1bmN0aW9uIG1faW5pdGlhbDsKLSAg
ICBBcHBseUZ1bmN0aW9uIG1fYXBwbHk7Ci19OwotCi1jbGFzcyBTdHlsZUJ1aWxkZXIgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFN0eWxlQnVpbGRlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBTdHlsZUJ1aWxkZXImIHNoYXJlZFN0eWxl
QnVpbGRlcigpOwotCi0gICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBwcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWxp
ZChwcm9wZXJ0eSkpOwotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eU1hcFtpbmRleChwcm9wZXJ0
eSldOwotICAgIH0KLXByaXZhdGU6Ci0gICAgU3R5bGVCdWlsZGVyKCk7Ci0gICAgc3RhdGljIGlu
dCBpbmRleChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHBy
b3BlcnR5IC0gZmlyc3RDU1NQcm9wZXJ0eTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCB2YWxp
ZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQotICAgIHsKLSAgICAgICAgaW50IGkgPSBpbmRleChw
cm9wZXJ0eSk7Ci0gICAgICAgIHJldHVybiBpID49IDAgJiYgaSA8IG51bUNTU1Byb3BlcnRpZXM7
Ci0gICAgfQotCi0gICAgdm9pZCBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKHZhbGlkKHByb3BlcnR5KSk7Ci0gICAgICAgIEFTU0VSVCghcHJvcGVydHlIYW5kbGVyKHBy
b3BlcnR5KS5pc1ZhbGlkKCkpOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFpc0V4cGFu
ZGVkU2hvcnRoYW5kKHByb3BlcnR5KSwgIlNob3J0aGFuZCBwcm9wZXJ0eSBpZCA9ICVkIHNob3Vs
ZG4ndCBiZSBpbnNlcnRlZCBpbnRvIFN0eWxlQnVpbGRlci4gU2hvcnRoYW5kcyBzaG91bGQgYmUg
ZXhwYW5kZWQgYXQgcGFyc2luZyB0aW1lLiIsIHByb3BlcnR5KTsKLSAgICAgICAgbV9wcm9wZXJ0
eU1hcFtpbmRleChwcm9wZXJ0eSldID0gaGFuZGxlcjsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUlEIG5ld1Byb3BlcnR5LCBDU1NQcm9wZXJ0eUlEIGVx
dWl2YWxlbnRQcm9wZXJ0eSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWxpZChuZXdQcm9wZXJ0
eSkpOwotICAgICAgICBBU1NFUlQodmFsaWQoZXF1aXZhbGVudFByb3BlcnR5KSk7Ci0gICAgICAg
IEFTU0VSVCghcHJvcGVydHlIYW5kbGVyKG5ld1Byb3BlcnR5KS5pc1ZhbGlkKCkpOwotICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFpc0V4cGFuZGVkU2hvcnRoYW5kKG5ld1Byb3BlcnR5KSwg
IlNob3J0aGFuZCBwcm9wZXJ0eSBpZCA9ICVkIHNob3VsZG4ndCBiZSBpbnNlcnRlZCBpbnRvIFN0
eWxlQnVpbGRlci4gU2hvcnRoYW5kcyBzaG91bGQgYmUgZXhwYW5kZWQgYXQgcGFyc2luZyB0aW1l
LiIsIG5ld1Byb3BlcnR5KTsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghaXNFeHBhbmRl
ZFNob3J0aGFuZChlcXVpdmFsZW50UHJvcGVydHkpLCAiU2hvcnRoYW5kIHByb3BlcnR5IGlkID0g
JWQgc2hvdWxkbid0IGJlIGluc2VydGVkIGludG8gU3R5bGVCdWlsZGVyLiBTaG9ydGhhbmRzIHNo
b3VsZCBiZSBleHBhbmRlZCBhdCBwYXJzaW5nIHRpbWUuIiwgZXF1aXZhbGVudFByb3BlcnR5KTsK
LSAgICAgICAgbV9wcm9wZXJ0eU1hcFtpbmRleChuZXdQcm9wZXJ0eSldID0gbV9wcm9wZXJ0eU1h
cFtpbmRleChlcXVpdmFsZW50UHJvcGVydHkpXTsKLSAgICB9Ci0KLSAgICBQcm9wZXJ0eUhhbmRs
ZXIgbV9wcm9wZXJ0eU1hcFtudW1DU1NQcm9wZXJ0aWVzXTsKLX07Ci0KLX0KLQotI2VuZGlmIC8v
IFN0eWxlQnVpbGRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMWNj
NTljZWE3YzM0Y2IxMDc1YjI0ZjY1YzQxZmVjMGVjMTY1MzY3Zi4uMTE1ZmViNWRiYzFmZGJmZDg5
MWRhZmM0YmU3MDk2MTM5MjEyNmI1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cApAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgIkNvdW50ZXIuaCIKICNpbmNsdWRlICJDb3Vu
dGVyQ29udGVudC5oIgogI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKKyNpbmNsdWRlICJEZXByZWNh
dGVkU3R5bGVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bi5oIgogI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiRWxlbWVu
dFNoYWRvdy5oIgpAQCAtMTEwLDcgKzExMSw2IEBACiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgog
I2luY2x1ZGUgIlNoYWRvd1ZhbHVlLmgiCiAjaW5jbHVkZSAiU2tld1RyYW5zZm9ybU9wZXJhdGlv
bi5oIgotI2luY2x1ZGUgIlN0eWxlQnVpbGRlci5oIgogI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1h
Z2UuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
ZW5kaW5nSW1hZ2UuaCIKQEAgLTI1OCw3ICsyNTgsNyBAQCBTdHlsZVJlc29sdmVyOjpTdHlsZVJl
c29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMp
CiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKICAgICAsIG1fdmlld3BvcnRTdHls
ZVJlc29sdmVyKFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Y3JlYXRlKGRvY3VtZW50KSkKICNlbmRp
ZgotICAgICwgbV9zdHlsZUJ1aWxkZXIoU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIo
KSkKKyAgICAsIG1fZGVwcmVjYXRlZFN0eWxlQnVpbGRlcihEZXByZWNhdGVkU3R5bGVCdWlsZGVy
OjpzaGFyZWRTdHlsZUJ1aWxkZXIoKSkKICAgICAsIG1fc3R5bGVNYXAodGhpcykKIHsKICAgICBF
bGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwpAQCAtMjI0OCw3ICsy
MjQ4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICNlbmRpZgogCiAgICAgLy8gQ2hlY2sgbG9va3VwIHRhYmxl
IGZvciBpbXBsZW1lbnRhdGlvbnMgYW5kIHVzZSB3aGVuIGF2YWlsYWJsZS4KLSAgICBjb25zdCBQ
cm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSBtX3N0eWxlQnVpbGRlci5wcm9wZXJ0eUhhbmRsZXIo
aWQpOworICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IG1fZGVwcmVjYXRlZFN0
eWxlQnVpbGRlci5wcm9wZXJ0eUhhbmRsZXIoaWQpOwogICAgIGlmIChoYW5kbGVyLmlzVmFsaWQo
KSkgewogICAgICAgICBpZiAoaXNJbmhlcml0KQogICAgICAgICAgICAgaGFuZGxlci5hcHBseUlu
aGVyaXRWYWx1ZShpZCwgdGhpcyk7CkBAIC0yODkwLDEzICsyODkwLDEzIEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBh
bGlhc2VkIGFuZCBTdHlsZUJ1aWxkZXIgYWxyZWFkeSBhcHBsaWVkIHRoZSBwcm9wZXJ0eSBvbiB0
aGUgcHJlZml4ZWQgdmVyc2lvbi4KKyAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBhbGlhc2Vk
IGFuZCBEZXByZWNhdGVkU3R5bGVCdWlsZGVyIGFscmVhZHkgYXBwbGllZCB0aGUgcHJvcGVydHkg
b24gdGhlIHByZWZpeGVkIHZlcnNpb24uCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25E
ZWxheToKICAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlvbkR1cmF0aW9uOgogICAgIGNhc2Ug
Q1NTUHJvcGVydHlUcmFuc2l0aW9uUHJvcGVydHk6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRyYW5z
aXRpb25UaW1pbmdGdW5jdGlvbjoKICAgICAgICAgcmV0dXJuOwotICAgIC8vIFRoZXNlIHByb3Bl
cnRpZXMgYXJlIGltcGxlbWVudGVkIGluIHRoZSBTdHlsZUJ1aWxkZXIgbG9va3VwIHRhYmxlLgor
ICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIGltcGxlbWVudGVkIGluIHRoZSBEZXByZWNhdGVk
U3R5bGVCdWlsZGVyIGxvb2t1cCB0YWJsZS4KICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZEF0dGFjaG1lbnQ6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwOgogICAgIGNh
c2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6CkBAIC00NTIzLDcgKzQ1MjMsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pIGNvbnN0CiAKICAgICBpbmZvLmFkZE1lbWJlcihtX2ZvbnRTZWxlY3Rvciwg
ImZvbnRTZWxlY3RvciIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fdmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJ5UmVzdWx0cywgInZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMiKTsK
LSAgICBpbmZvLmlnbm9yZU1lbWJlcihtX3N0eWxlQnVpbGRlcik7CisgICAgaW5mby5pZ25vcmVN
ZW1iZXIobV9kZXByZWNhdGVkU3R5bGVCdWlsZGVyKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2lu
c3BlY3RvckNTU09NV3JhcHBlcnMpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fc2NvcGVSZXNvbHZl
ciwgInNjb3BlUmVzb2x2ZXIiKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXgg
MTBhNDIxODEwNzk2ZDdmZGM3ZjRlMTEwOTM5N2EyOTg3OGEzODgzNy4uMjBhM2NmMGZkMzMxY2I5
ZjI3NjhlNzkyNGE1NDMzYjM5NzFlNzQxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5o
CkBAIC03OCw2ICs3OCw3IEBAIGNsYXNzIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3Q7CiBjbGFz
cyBDdXN0b21GaWx0ZXJQcm9ncmFtOwogc3RydWN0IEN1c3RvbUZpbHRlclByb2dyYW1NaXhTZXR0
aW5nczsKIGNsYXNzIERvY3VtZW50OworY2xhc3MgRGVwcmVjYXRlZFN0eWxlQnVpbGRlcjsKIGNs
YXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsKQEAgLTkzLDcgKzk0
LDYgQEAgY2xhc3MgUnVsZVNldDsKIGNsYXNzIFNldHRpbmdzOwogY2xhc3MgU3RhdGljQ1NTUnVs
ZUxpc3Q7CiBjbGFzcyBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW1DYWNoZTsKLWNsYXNzIFN0eWxl
QnVpbGRlcjsKIGNsYXNzIFN0eWxlU2NvcGVSZXNvbHZlcjsKIGNsYXNzIFN0eWxlSW1hZ2U7CiBj
bGFzcyBTdHlsZUtleWZyYW1lOwpAQCAtNjMxLDcgKzYzMSw3IEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPFZpZXdwb3J0U3R5bGVSZXNvbHZlcj4gbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXI7CiAjZW5k
aWYKIAotICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgbV9zdHlsZUJ1aWxkZXI7CisgICAgY29uc3Qg
RGVwcmVjYXRlZFN0eWxlQnVpbGRlciYgbV9kZXByZWNhdGVkU3R5bGVCdWlsZGVyOwogCiAgICAg
T3duUHRyPFN0eWxlU2NvcGVSZXNvbHZlcj4gbV9zY29wZVJlc29sdmVyOwogICAgIENTU1RvU3R5
bGVNYXAgbV9zdHlsZU1hcDsKQEAgLTY0Myw3ICs2NDMsNyBAQCBwcml2YXRlOgogICAgIE93blB0
cjxTdHlsZUN1c3RvbUZpbHRlclByb2dyYW1DYWNoZT4gbV9jdXN0b21GaWx0ZXJQcm9ncmFtQ2Fj
aGU7CiAjZW5kaWYKIAotICAgIGZyaWVuZCBjbGFzcyBTdHlsZUJ1aWxkZXI7CisgICAgZnJpZW5k
IGNsYXNzIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJik7CiAg
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYsIGNvbnN0
IE1hdGNoZWRQcm9wZXJ0aWVzJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBN
YXRjaFJhbmdlcyYsIGNvbnN0IE1hdGNoUmFuZ2VzJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCmluZGV4IDE0YjYzNTIxMDg5ZTlkOTM3OWIwOWRkM2Vm
YmUxNjU4NzBlY2NiYWEuLjcwNmQxYTA1NmIxMTNlNmI2MGYwODFmZmY0MTM0Yjk2NDc0OGM0NjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCkBAIC0x
MjQsMTIgKzEyNCwxMiBAQCB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8UmVuZGVyU3R5bGU+LCA0PiBQ
c2V1ZG9TdHlsZUNhY2hlOwogY2xhc3MgUmVuZGVyU3R5bGU6IHB1YmxpYyBSZWZDb3VudGVkPFJl
bmRlclN0eWxlPiB7CiAgICAgZnJpZW5kIGNsYXNzIENTU1Byb3BlcnR5QW5pbWF0aW9uOyAvLyBV
c2VkIGJ5IENTUyBhbmltYXRpb25zLiBXZSBjYW4ndCBhbGxvdyB0aGVtIHRvIGFuaW1hdGUgYmFz
ZWQgb2ZmIHZpc2l0ZWQgY29sb3JzLgogICAgIGZyaWVuZCBjbGFzcyBBcHBseVN0eWxlQ29tbWFu
ZDsgLy8gRWRpdGluZyBoYXMgdG8gb25seSByZXZlYWwgdW52aXNpdGVkIGluZm8uCisgICAgZnJp
ZW5kIGNsYXNzIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI7IC8vIFNldHMgbWVtYmVycyBkaXJlY3Rs
eS4KICAgICBmcmllbmQgY2xhc3MgRWRpdGluZ1N0eWxlOyAvLyBFZGl0aW5nIGhhcyB0byBvbmx5
IHJldmVhbCB1bnZpc2l0ZWQgaW5mby4KICAgICBmcmllbmQgY2xhc3MgQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uOyAvLyBJZ25vcmVzIHZpc2l0ZWQgc3R5bGVzLCBzbyBuZWVkcyB0byBiZSBh
YmxlIHRvIHNlZSB1bnZpc2l0ZWQgaW5mby4KICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlXcmFw
cGVyTWF5YmVJbnZhbGlkQ29sb3I7IC8vIFVzZWQgYnkgQ1NTIGFuaW1hdGlvbnMuIFdlIGNhbid0
IGFsbG93IHRoZW0gdG8gYW5pbWF0ZSBiYXNlZCBvZmYgdmlzaXRlZCBjb2xvcnMuCiAgICAgZnJp
ZW5kIGNsYXNzIFJlbmRlclNWR1Jlc291cmNlOyAvLyBGSVhNRTogTmVlZHMgdG8gYWx0ZXIgdGhl
IHZpc2l0ZWQgc3RhdGUgYnkgaGFuZC4gU2hvdWxkIGNsZWFuIHRoZSBTVkcgY29kZSB1cCBhbmQg
bW92ZSBpdCBpbnRvIFJlbmRlclN0eWxlIHBlcmhhcHMuCiAgICAgZnJpZW5kIGNsYXNzIFJlbmRl
clRyZWVBc1RleHQ7IC8vIEZJWE1FOiBPbmx5IG5lZWRlZCBzbyB0aGUgcmVuZGVyIHRyZWUgY2Fu
IGtlZXAgbHlpbmcgYW5kIGR1bXAgdGhlIHdyb25nIGNvbG9ycy4gIFJlYmFzZWxpbmluZyB3b3Vs
ZCBhbGxvdyB0aGlzIHRvIGJlIHlhbmtlZC4KLSAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVy
OyAvLyBTZXRzIG1lbWJlcnMgZGlyZWN0bHkuCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlUmVzb2x2
ZXI7IC8vIFNldHMgbWVtYmVycyBkaXJlY3RseS4KIHByb3RlY3RlZDoKIAo=
</data>
<flag name="review"
          id="219725"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197949</attachid>
            <date>2013-04-13 10:27:37 -0700</date>
            <delta_ts>2013-04-13 10:58:56 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>deprecateStyleBuilder.patch</filename>
            <type>text/plain</type>
            <size>343187</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggY2FiMjQwMy4uM2QxZWNlOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTEwNTgsNiArMTA1OCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3Mv
Q1NTVmFsdWVMaXN0LmNwcAogICAgIGNzcy9DU1NWYWx1ZVBvb2wuY3BwCiAgICAgY3NzL0RPTVdp
bmRvd0NTUy5jcHAKKyAgICBjc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKICAgICBjc3Mv
RG9jdW1lbnRSdWxlU2V0cy5jcHAKICAgICBjc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCiAg
ICAgY3NzL0ZvbnRGZWF0dXJlVmFsdWUuY3BwCkBAIC0xMDg0LDcgKzEwODUsNiBAQCBzZXQoV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgY3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmNwcAogICAgIGNz
cy9TZWxlY3RvckZpbHRlci5jcHAKICAgICBjc3MvU2hhZG93VmFsdWUuY3BwCi0gICAgY3NzL1N0
eWxlQnVpbGRlci5jcHAKICAgICBjc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAKICAg
ICBjc3MvU3R5bGVNZWRpYS5jcHAKICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA5ZTkyOWJlLi5hOTAwMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIw
MTMtMDQtMTMgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW5h
bWUgU3R5bGVCdWlsZGVyIHRvIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDUzMgorCisgICAgICAgIFJldmll
d2VkIGJ5IEJlbmphbWluIFBvdWxhaW4uCisKKyAgICAgICAgVGhlIFN0eWxlQnVpbGRlciBjb2Rl
IGlzIGhhcmQgdG8gcmVhZCBhbmQgbWFpbnRhaW4uIFBlb3BsZSBzaG91bGQKKyAgICAgICAgbm90
IGFkZCBuZXcgcHJvcGVydGllcyB0byB0aGlzIGNsYXNzLiBUbyBtYWtlIHRoaXMgY2xlYXIsIHRo
aXMKKyAgICAgICAgcGF0Y2ggcmVuYW1lcyB0aGUgY2xhc3MgdG8gRGVwcmVjYXRlZFN0eWxlQnVp
bGRlci4KKworICAgICAgICBQdXJlIHJlZmFjdG9yaW5nLCBubyBjaGFuZ2UgaW4gZnVuY3Rpb25h
bGl0eS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxl
Lmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hw
cm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGNzcy9DU1NBbGxJbk9uZS5jcHA6CisgICAgICAgICogY3NzL0RlcHJlY2F0
ZWRTdHlsZUJ1aWxkZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
QnVpbGRlci5jcHAuCisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaC4KKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNh
Z2UpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChTdHlsZVJlc29s
dmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKwogMjAxMy0w
NC0xMyAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IHVudXNlZCBtZXRob2QgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6bWFrZU11dGFibGUoKS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDg2M2UyNjcuLjViNzcyMzkxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI2NzcsNiArMjY3Nyw4IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0RPTVdpbmRvd0NTUy5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL2Nzcy9ET01XaW5kb3dDU1MuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0Rhc2hib2Fy
ZFJlZ2lvbi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmggXAogCVNv
dXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
Y3NzL0RvY3VtZW50UnVsZVNldHMuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxl
Q29sbGVjdG9yLmNwcCBcCkBAIC0yNzI4LDggKzI3MzAsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TaGFkb3dWYWx1ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L2Nzcy9TaGFkb3dWYWx1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU2libGluZ1RyYXZlcnNh
bFN0cmF0ZWdpZXMuaCBcCi0JU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRp
YS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMGE1M2M5OC4uNWQ3ODAxMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBA
IC0zMDYsNiArMzA2LDcgQEAgU09VUkNFUyArPSBcCiAgICAgY3NzL0NTU1ZhbHVlTGlzdC5jcHAg
XAogICAgIGNzcy9DU1NWYWx1ZVBvb2wuY3BwIFwKICAgICBjc3MvRE9NV2luZG93Q1NTLmNwcCBc
CisgICAgY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwIFwKICAgICBjc3MvRG9jdW1lbnRS
dWxlU2V0cy5jcHAgXAogICAgIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAgXAogICAgIGNz
cy9Gb250RmVhdHVyZVZhbHVlLmNwcCBcCkBAIC0zMzAsNyArMzMxLDYgQEAgU09VUkNFUyArPSBc
CiAgICAgY3NzL1NlbGVjdG9yQ2hlY2tlckZhc3RQYXRoLmNwcCBcCiAgICAgY3NzL1NlbGVjdG9y
RmlsdGVyLmNwcCBcCiAgICAgY3NzL1NoYWRvd1ZhbHVlLmNwcCBcCi0gICAgY3NzL1N0eWxlQnVp
bGRlci5jcHAgXAogICAgIGNzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCBcCiAgICAg
Y3NzL1N0eWxlTWVkaWEuY3BwIFwKICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAgXApAQCAt
MTU1NCw2ICsxNTU0LDcgQEAgSEVBREVSUyArPSBcCiAgICAgY3NzL0NTU1ZhbHVlTGlzdC5oIFwK
ICAgICBjc3MvQ1NTVmFsdWVQb29sLmggXAogICAgIGNzcy9DU1NWYXJpYWJsZVZhbHVlLmggXAor
ICAgIGNzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmggXAogICAgIGNzcy9ET01XaW5kb3dDU1Mu
aCBcCiAgICAgY3NzL0ZvbnRGZWF0dXJlVmFsdWUuaCBcCiAgICAgY3NzL0ZvbnRMb2FkZXIuaCBc
CkBAIC0xNTcyLDcgKzE1NzMsNiBAQCBIRUFERVJTICs9IFwKICAgICBjc3MvU2hhZG93VmFsdWUu
aCBcCiAgICAgY3NzL1NpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVzLmggXAogICAgIGNzcy9TdHls
ZU1lZGlhLmggXAotICAgIGNzcy9TdHlsZUJ1aWxkZXIuaCBcCiAgICAgY3NzL1N0eWxlSW52YWxp
ZGF0aW9uQW5hbHlzaXMuaCBcCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTZXQuaCBcCiAgICAgY3Nz
L1N0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGUwY2QwOWIuLjBmM2ZiMWYgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0zODMyMyw2ICszODMyMyw2
MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxj
c3NcRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJ
CQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
KwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUi
CisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJ
CS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJ
CQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xEZXByZWNhdGVkU3R5bGVCdWls
ZGVyLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGNzc1xGb250RmVhdHVyZVZhbHVlLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0zODY1MSw2
MiArMzg3MDcsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxjc3NcU3R5bGVCdWlsZGVyLmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0
aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJ
CQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgot
CQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
LQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJ
Lz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJ
CQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0
aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCi0JCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVD
b25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFN0eWxlQnVpbGRlci5oIgotCQkJ
CT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcU3R5bGVJ
bnZhbGlkYXRpb25BbmFseXNpcy5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCmlu
ZGV4IGE2MjA5ZjEuLjMzZjMyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTM2OTAsNiArMzY5MCw5IEBA
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjc3NcQ1NTVmFsdWVQb29sLmNwcCI+CiAgICAg
ICA8RmlsdGVyPmNzczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cY3NzXERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwIj4KKyAgICAgIDxGaWx0
ZXI+Y3NzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxjc3NcRm9udEZlYXR1cmVWYWx1ZS5jcHAiPgogICAgICAgPEZpbHRlcj5jc3M8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTM3NDEsOSArMzc0NCw2IEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxjc3NcU2hhZG93VmFsdWUuY3BwIj4KICAgICAgIDxGaWx0ZXI+Y3NzPC9G
aWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxjc3Nc
U3R5bGVCdWlsZGVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPmNzczwvRmlsdGVyPgotICAgIDwvQ2xD
b21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cY3NzXFN0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXMuY3BwIj4KICAgICAgIDxGaWx0ZXI+Y3NzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBp
bGU+CkBAIC0xMDQ3OSw2ICsxMDQ3OSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxj
c3NcRGFzaGJvYXJkUmVnaW9uLmgiPgogICAgICAgPEZpbHRlcj5jc3M8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xEZXByZWNhdGVkU3R5
bGVCdWlsZGVyLmgiPgorICAgICAgPEZpbHRlcj5jc3M8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVk
ZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xGb250RmVhdHVyZVZhbHVlLmgiPgog
ICAgICAgPEZpbHRlcj5jc3M8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTEwNTM2LDkg
KzEwNTM5LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xTaWJsaW5nVHJhdmVy
c2FsU3RyYXRlZ2llcy5oIj4KICAgICAgIDxGaWx0ZXI+Y3NzPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjc3NcU3R5bGVCdWlsZGVyLmgiPgot
ICAgICAgPEZpbHRlcj5jc3M8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGNzc1xTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgiPgogICAgICAg
PEZpbHRlcj5jc3M8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTE1MzI5LDQgKzE1MzI5
LDQgQEAKICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DdXN0b21CdWls
ZFN0ZXA+CiAgIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBmYzE3NTI5Li5jZjc2YTA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MzUyLDggKzUz
NTIsOCBAQAogCQlFMEZFRjM3MkIyN0M1M0VBQzFDMUZCRUUgLyogRXZlbnRTb3VyY2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTBGRUYzNzFCMjdD
NTNFQUMxQzFGQkVFIC8qIEV2ZW50U291cmNlLmNwcCAqLzsgfTsKIAkJRTBGRUYzNzJCMzdDNTNF
QUMxQzFGQkVFIC8qIEpTRXZlbnRTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUwRkVGMzcxQjM3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291
cmNlLmggKi87IH07CiAJCUUwRkVGMzcyQjQ3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUwRkVG
MzcxQjQ3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlLmNwcCAqLzsgfTsKLQkJRTEwMEVF
NzUxNTQ2RUFDMTAwQkExMUQxIC8qIFN0eWxlQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTAwRUU3MzE1NDZFQUMxMDBCQTExRDEgLyog
U3R5bGVCdWlsZGVyLmNwcCAqLzsgfTsKLQkJRTEwMEVFNzYxNTQ2RUFDMTAwQkExMUQxIC8qIFN0
eWxlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTEwMEVFNzQxNTQ2RUFDMTAwQkExMUQxIC8qIFN0eWxlQnVpbGRlci5oICovOyB9OworCQlF
MTAwRUU3NTE1NDZFQUMxMDBCQTExRDEgLyogRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTAwRUU3MzE1NDZF
QUMxMDBCQTExRDEgLyogRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAgKi87IH07CisJCUUxMDBF
RTc2MTU0NkVBQzEwMEJBMTFEMSAvKiBEZXByZWNhdGVkU3R5bGVCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTAwRUU3NDE1NDZFQUMxMDBC
QTExRDEgLyogRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5oICovOyB9OwogCQlFMTA3NDAwRDBFNzdC
REMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA3NDAwQjBFNzdCREMwMDAzM0FGMjQgLyogSlNN
ZXNzYWdlQ2hhbm5lbC5jcHAgKi87IH07CiAJCUUxMDc0MDBFMEU3N0JEQzAwMDMzQUYyNCAvKiBK
U01lc3NhZ2VDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTA3NDAwQzBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5oICov
OyB9OwogCQlFMTBCOTM3QzBCNzNDMDBBMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMEI5
MzdCMEI3M0MwMEEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oICovOyB9OwpA
QCAtMTIxMzAsOCArMTIxMzAsOCBAQAogCQlFMEZFRjM3MUIyN0M1M0VBQzFDMUZCRUUgLyogRXZl
bnRTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnRT
b3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMEZFRjM3MUIzN0M1M0VB
QzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0V2ZW50U291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUwRkVG
MzcxQjQ3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRXZlbnRTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlFMTAwRUU3MzE1NDZFQUMxMDBCQTExRDEgLyogU3R5bGVCdWlsZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlQnVpbGRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxMDBFRTc0MTU0NkVBQzEwMEJBMTFEMSAv
KiBTdHlsZUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVC
dWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxMDBFRTczMTU0NkVBQzEw
MEJBMTFEMSAvKiBEZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMTAwRUU3NDE1NDZFQUMxMDBCQTExRDEgLyogRGVwcmVjYXRl
ZFN0eWxlQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXByZWNh
dGVkU3R5bGVCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMDc0MDBC
MEU3N0JEQzAwMDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVzc2FnZUNoYW5uZWwuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMTA3NDAwQzBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hh
bm5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01lc3NhZ2VDaGFubmVs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMEI5MzdCMEI3M0MwMEEwMDNFRDg5
MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTk3NzYsNiArMTk3NzYsOCBAQAogCQkJCUU0OUJEOUY5MTMxRkQyRUQwMDNDNTZG
MCAvKiBDU1NWYWx1ZVBvb2wuaCAqLywKIAkJCQlDQUU5RjkwRTE0NjQ0MUYwMDBDMjQ1QjEgLyog
Q1NTVmFyaWFibGVWYWx1ZS5oICovLAogCQkJCUE4MEU2Q0UxMEExOTg5Q0EwMDdGQjhDNSAvKiBE
YXNoYm9hcmRSZWdpb24uaCAqLywKKwkJCQlFMTAwRUU3MzE1NDZFQUMxMDBCQTExRDEgLyogRGVw
cmVjYXRlZFN0eWxlQnVpbGRlci5jcHAgKi8sCisJCQkJRTEwMEVFNzQxNTQ2RUFDMTAwQkExMUQx
IC8qIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuaCAqLywKIAkJCQk0QTRGNDhBNzE2QjBERkMwMDBF
REJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5jcHAgKi8sCiAJCQkJNEE0RjQ4QTgxNkIwREZDMDAw
RURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuaCAqLywKIAkJCQlGQzlBMEY3MjE2NDA5NENGMDAz
RDZCOEQgLyogRE9NV2luZG93Q1NTLmggKi8sCkBAIC0xOTg0NSw4ICsxOTg0Nyw2IEBACiAJCQkJ
QTgwRTZDQ0EwQTE5ODlDQTAwN0ZCOEM1IC8qIFNoYWRvd1ZhbHVlLmNwcCAqLywKIAkJCQlBODBF
NkNCRTBBMTk4OUNBMDA3RkI4QzUgLyogU2hhZG93VmFsdWUuaCAqLywKIAkJCQk1NzI4QkQ5RDE2
MjUzNjk2MDBDNDBCNTYgLyogU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaCAqLywKLQkJCQlF
MTAwRUU3MzE1NDZFQUMxMDBCQTExRDEgLyogU3R5bGVCdWlsZGVyLmNwcCAqLywKLQkJCQlFMTAw
RUU3NDE1NDZFQUMxMDBCQTExRDEgLyogU3R5bGVCdWlsZGVyLmggKi8sCiAJCQkJRTQ3QTk3Q0Ux
NjMwNTlGQzAwNURDRDk5IC8qIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwICovLAogCQkJ
CUU0N0E5N0NGMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgg
Ki8sCiAJCQkJMEZGNTAyNkUxMDJCQTk2NjAwNjZGMzlBIC8qIFN0eWxlTWVkaWEuY3BwICovLApA
QCAtMjM0ODgsNyArMjM0ODgsNyBAQAogCQkJCTg0OUY3Nzc2MEVGRUM2MjAwMDkwODQ5RCAvKiBT
dHJva2VTdHlsZUFwcGxpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNkEzMEU4MURDNEYw
MEIyNTk2NSAvKiBTdHlsZUJhY2tncm91bmREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVF
QjY3QjBFODFEM0JFMDBCMjU5NjUgLyogU3R5bGVCb3hEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlFMTAwRUU3NjE1NDZFQUMxMDBCQTExRDEgLyogU3R5bGVCdWlsZGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFMTAwRUU3NjE1NDZFQUMxMDBCQTExRDEgLyogRGVwcmVjYXRlZFN0eWxlQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFRjQ0NEQwRTY3NDYyODAwMUMxMjg3IC8qIFN0eWxl
Q2FjaGVkSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTNFNjA1MTUxQTlBMTgwMDA2NkYw
NiAvKiBTdHlsZUNhY2hlZEltYWdlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MDM4QkUzMDE0
NzJBRDIzMDA5NUUwRDEgLyogU3R5bGVDYWNoZWRTaGFkZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
MjY1NDYsNyArMjY1NDYsNyBAQAogCQkJCUIyMzU0MEYyMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJp
bmdUcnVuY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI2QTIwRTgxREM0RjAwQjI1
OTY1IC8qIFN0eWxlQmFja2dyb3VuZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI2
N0QwRTgxRDQyMDAwQjI1OTY1IC8qIFN0eWxlQm94RGF0YS5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlFMTAwRUU3NTE1NDZFQUMxMDBCQTExRDEgLyogU3R5bGVCdWlsZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUUxMDBFRTc1MTU0NkVBQzEwMEJBMTFEMSAvKiBEZXByZWNhdGVkU3R5bGVCdWls
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUY0NDdBMEU2NzQ3RDAwMDFDMTI4NyAvKiBT
dHlsZUNhY2hlZEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTNFNjA0MTUxQTlBMTgw
MDA2NkYwNiAvKiBTdHlsZUNhY2hlZEltYWdlU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUw
MzhCRTJGMTQ3MkFEMjMwMDk1RTBEMSAvKiBTdHlsZUNhY2hlZFNoYWRlci5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCmluZGV4IDc4ZTc1MjAuLjAyMmEzNDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBbGxJbk9uZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcApAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1
ZGUgIkNTU1ZhbHVlTGlzdC5jcHAiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmNwcCIKICNpbmNs
dWRlICJET01XaW5kb3dDU1MuY3BwIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIu
Y3BwIgogI2luY2x1ZGUgIkRvY3VtZW50UnVsZVNldHMuY3BwIgogI2luY2x1ZGUgIkVsZW1lbnRS
dWxlQ29sbGVjdG9yLmNwcCIKICNpbmNsdWRlICJJbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNwcCIK
QEAgLTc4LDcgKzc5LDYgQEAKICNpbmNsdWRlICJSdWxlU2V0LmNwcCIKICNpbmNsdWRlICJTZWxl
Y3RvckNoZWNrZXJGYXN0UGF0aC5jcHAiCiAjaW5jbHVkZSAiU2VsZWN0b3JGaWx0ZXIuY3BwIgot
I2luY2x1ZGUgIlN0eWxlQnVpbGRlci5jcHAiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5j
cHAiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5jcHAiCiAjaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRl
ZFN0eWxlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVp
bGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdiYmJiZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVy
LmNwcApAQCAtMCwwICsxLDIzNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3R5bGVCdWlsZGVyLmgiCisKKyNpbmNsdWRlICJCYXNp
Y1NoYXBlRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiQmFzaWNTaGFwZXMuaCIKKyNpbmNsdWRlICJD
U1NBc3BlY3RSYXRpb1ZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgor
I2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVW
YWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgorI2luY2x1ZGUgIkNT
U1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIkNsaXBQYXRoT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAi
Q3Vyc29yTGlzdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5o
IgorI2luY2x1ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5o
PgorCisjaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQorI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBl
VmFsdWUuaCIKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2VudW0gRXhwYW5kVmFsdWVCZWhhdmlvciB7U3VwcHJlc3NWYWx1ZSA9IDAsIEV4
cGFuZFZhbHVlfTsKK3RlbXBsYXRlIDxFeHBhbmRWYWx1ZUJlaGF2aW9yIGV4cGFuZFZhbHVlLCBD
U1NQcm9wZXJ0eUlEIG9uZSA9IENTU1Byb3BlcnR5SW52YWxpZCwgQ1NTUHJvcGVydHlJRCB0d28g
PSBDU1NQcm9wZXJ0eUludmFsaWQsIENTU1Byb3BlcnR5SUQgdGhyZWUgPSBDU1NQcm9wZXJ0eUlu
dmFsaWQsIENTU1Byb3BlcnR5SUQgZm91ciA9IENTU1Byb3BlcnR5SW52YWxpZCwgQ1NTUHJvcGVy
dHlJRCBmaXZlID0gQ1NTUHJvcGVydHlJbnZhbGlkPgorY2xhc3MgQXBwbHlQcm9wZXJ0eUV4cGFu
ZGluZyB7CitwdWJsaWM6CisKKyAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZD4KKyAgICBz
dGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgaWYgKGlk
ID09IENTU1Byb3BlcnR5SW52YWxpZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBj
b25zdCBEZXByZWNhdGVkU3R5bGVCdWlsZGVyJiB0YWJsZSA9IERlcHJlY2F0ZWRTdHlsZUJ1aWxk
ZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpOworICAgICAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXIm
IGhhbmRsZXIgPSB0YWJsZS5wcm9wZXJ0eUhhbmRsZXIoaWQpOworICAgICAgICBpZiAoaGFuZGxl
ci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlcikKKyAgICB7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPG9uZT4ocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHR3bz4ocHJvcGVy
dHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHRocmVlPihw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zm91
cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVl
PGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgIH0KKworICAgIHRlbXBsYXRl
IDxDU1NQcm9wZXJ0eUlEIGlkPgorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUluaXRpYWxW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCisgICAgeworICAgICAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0IERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXImIHRh
YmxlID0gRGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7CisgICAg
ICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3BlcnR5SGFuZGxl
cihpZCk7CisgICAgICAgIGlmIChoYW5kbGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGhhbmRs
ZXIuYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgYXBwbHlJ
bml0aWFsVmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBw
bHlJbml0aWFsVmFsdWU8dHdvPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAg
YXBwbHlJbml0aWFsVmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAg
ICAgICBhcHBseUluaXRpYWxWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsK
KyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZl
cik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+CisgICAgc3RhdGlj
IGlubGluZSB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAoaWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNvbnN0IERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXImIHRhYmxlID0gRGVwcmVjYXRlZFN0eWxl
QnVpbGRlcjo6c2hhcmVkU3R5bGVCdWlsZGVyKCk7CisgICAgICAgIGNvbnN0IFByb3BlcnR5SGFu
ZGxlciYgaGFuZGxlciA9IHRhYmxlLnByb3BlcnR5SGFuZGxlcihpZCk7CisgICAgICAgIGlmICho
YW5kbGVyLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShwcm9wZXJ0
eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghZXhwYW5kVmFsdWUp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXBwbHlWYWx1ZTxvbmU+KHByb3BlcnR5
SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZTx0d28+KHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZTx0aHJlZT4o
cHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICBhcHBseVZhbHVlPGZv
dXI+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1
ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgfQorICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFu
ZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUp
OyB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgR2V0dGVyVHlwZSwgR2V0dGVyVHlwZSAoUmVu
ZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdHlwZW5hbWUgU2V0dGVyVHlwZSwg
dm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoU2V0dGVyVHlwZSksIHR5cGVuYW1l
IEluaXRpYWxUeXBlLCBJbml0aWFsVHlwZSAoKmluaXRpYWxGdW5jdGlvbikoKT4KK2NsYXNzIEFw
cGx5UHJvcGVydHlEZWZhdWx0QmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgc2V0VmFs
dWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNldHRl
ckZ1bmN0aW9uKSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgR2V0dGVyVHlwZSB2YWx1ZShSZW5kZXJT
dHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmdldHRlckZ1bmN0aW9uKSgpOyB9CisgICAg
c3RhdGljIEluaXRpYWxUeXBlIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRpYWxGdW5jdGlvbiko
KTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgdmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOyB9CisgICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikgeyBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbml0aWFsKCkp
OyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiwgQ1NTVmFsdWUqKSB7IH0KKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhh
bmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBw
bHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1l
IEdldHRlclR5cGUsIEdldHRlclR5cGUgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkg
Y29uc3QsIHR5cGVuYW1lIFNldHRlclR5cGUsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVu
Y3Rpb24pKFNldHRlclR5cGUpLCB0eXBlbmFtZSBJbml0aWFsVHlwZSwgSW5pdGlhbFR5cGUgKCpp
bml0aWFsRnVuY3Rpb24pKCk+CitjbGFzcyBBcHBseVByb3BlcnR5RGVmYXVsdCB7CitwdWJsaWM6
CisgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBl
IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
KnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpKTsKKyAgICB9CisgICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIFByb3Bl
cnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEdldHRlclR5cGUs
IGdldHRlckZ1bmN0aW9uLCBTZXR0ZXJUeXBlLCBzZXR0ZXJGdW5jdGlvbiwgSW5pdGlhbFR5cGUs
IGluaXRpYWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3Bl
cnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5j
dGlvbigpLCAmYXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIE51
bWJlclR5cGUsIE51bWJlclR5cGUgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKE51bWJlclR5cGUpLCBOdW1i
ZXJUeXBlICgqaW5pdGlhbEZ1bmN0aW9uKSgpLCBpbnQgaWRNYXBzVG9NaW51c09uZSA9IENTU1Zh
bHVlQXV0bz4KK2NsYXNzIEFwcGx5UHJvcGVydHlOdW1iZXIgeworcHVibGljOgorICAgIHN0YXRp
YyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTnVtYmVyVHlwZSB2YWx1ZSkgeyAo
c3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBpZE1hcHNUb01pbnVzT25lKQor
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgLTEpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmlt
aXRpdmVWYWx1ZS0+Z2V0VmFsdWU8TnVtYmVyVHlwZT4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpKTsKKyAgICB9CisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0
eURlZmF1bHRCYXNlPE51bWJlclR5cGUsIGdldHRlckZ1bmN0aW9uLCBOdW1iZXJUeXBlLCBzZXR0
ZXJGdW5jdGlvbiwgTnVtYmVyVHlwZSwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigp
OworICAgICAgICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9u
KCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZSA8U3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxGdW5jdGlvbikoKSwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eT4KK2NsYXNzIEFwcGx5UHJvcGVydHlTdHlsZUltYWdlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1
ZSkpOyB9CisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7
CisgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRC
YXNlPFN0eWxlSW1hZ2UqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiwg
c2V0dGVyRnVuY3Rpb24sIFN0eWxlSW1hZ2UqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5k
bGVyKCk7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVu
Y3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOworICAgIH0K
K307CisKK2VudW0gQXV0b1ZhbHVlVHlwZSB7TnVtYmVyID0gMCwgQ29tcHV0ZUxlbmd0aH07Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBj
b25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoVCksIGJvb2wgKFJlbmRl
clN0eWxlOjoqaGFzQXV0b0Z1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dEF1dG9GdW5jdGlvbikoKSwgQXV0b1ZhbHVlVHlwZSB2YWx1ZVR5cGUgPSBOdW1iZXIsIGludCBh
dXRvSWRlbnRpdHkgPSBDU1NWYWx1ZUF1dG8+CitjbGFzcyBBcHBseVByb3BlcnR5QXV0byB7Citw
dWJsaWM6CisgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBUIHZh
bHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgVCB2
YWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmdldHRlckZ1bmN0aW9u
KSgpOyB9CisgICAgc3RhdGljIGJvb2wgaGFzQXV0byhSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0
dXJuIChzdHlsZS0+Kmhhc0F1dG9GdW5jdGlvbikoKTsgfQorICAgIHN0YXRpYyB2b2lkIHNldEF1
dG8oUmVuZGVyU3R5bGUqIHN0eWxlKSB7IChzdHlsZS0+KnNldEF1dG9GdW5jdGlvbikoKTsgfQor
CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIGlmIChoYXNBdXRvKHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKQorICAgICAgICAgICAgc2V0QXV0byhzdHlsZVJlc29s
dmVyLT5zdHlsZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgdmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0QXV0byhzdHlsZVJlc29sdmVyLT5z
dHlsZSgpKTsgfQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBhdXRvSWRlbnRpdHkpCisgICAgICAgICAgICBzZXRBdXRvKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gTnVtYmVy
KQorICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnByaW1pdGl2
ZVZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWVUeXBlID09IENvbXB1dGVMZW5ndGgpCisg
ICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1
ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVy
LT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSkpOworICAgIH0KKworICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUlu
aXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9Cit9OworCitjbGFzcyBBcHBseVByb3BlcnR5Q2xp
cCB7Citwcml2YXRlOgorICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNp
b24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IEF1dG9Db252ZXJz
aW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgfQor
cHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCk7
CisgICAgICAgIGlmICghcGFyZW50U3R5bGUtPmhhc0NsaXAoKSkKKyAgICAgICAgICAgIHJldHVy
biBhcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcChwYXJlbnRTdHlsZS0+Y2xpcFRvcCgpLCBw
YXJlbnRTdHlsZS0+Y2xpcFJpZ2h0KCksIHBhcmVudFN0eWxlLT5jbGlwQm90dG9tKCksIHBhcmVu
dFN0eWxlLT5jbGlwTGVmdCgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
SGFzQ2xpcCh0cnVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCks
IExlbmd0aCgpLCBMZW5ndGgoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEhhc0NsaXAoZmFsc2UpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworCisgICAgICAgIGlm
IChSZWN0KiByZWN0ID0gcHJpbWl0aXZlVmFsdWUtPmdldFJlY3RWYWx1ZSgpKSB7CisgICAgICAg
ICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPnRv
cCgpKTsKKyAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJl
c29sdmVyLCByZWN0LT5yaWdodCgpKTsKKyAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252
ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+Ym90dG9tKCkpOworICAgICAgICAgICAg
TGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+bGVmdCgp
KTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAodG9wLCByaWdo
dCwgYm90dG9tLCBsZWZ0KTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEhhc0NsaXAodHJ1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElk
ZW50KCkgPT0gQ1NTVmFsdWVBdXRvKSB7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKKyAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOworICAg
ICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5p
dGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KK307CisKK2VudW0gQ29sb3JJbmhlcml0IHtOb0lu
aGVyaXRGcm9tUGFyZW50ID0gMCwgSW5oZXJpdEZyb21QYXJlbnR9OworQ29sb3IgZGVmYXVsdElu
aXRpYWxDb2xvcigpOworQ29sb3IgZGVmYXVsdEluaXRpYWxDb2xvcigpIHsgcmV0dXJuIENvbG9y
KCk7IH0KK3RlbXBsYXRlIDxDb2xvckluaGVyaXQgaW5oZXJpdENvbG9yRnJvbVBhcmVudCwKKyAg
ICAgICAgICBDb2xvciAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwKKyAg
ICAgICAgICB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShjb25zdCBDb2xvciYp
LAorICAgICAgICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlv
bikoY29uc3QgQ29sb3ImKSwKKyAgICAgICAgICBDb2xvciAoUmVuZGVyU3R5bGU6OipkZWZhdWx0
RnVuY3Rpb24pKCkgY29uc3QsCisgICAgICAgICAgQ29sb3IgKCppbml0aWFsRnVuY3Rpb24pKCkg
PSAmZGVmYXVsdEluaXRpYWxDb2xvcj4KK2NsYXNzIEFwcGx5UHJvcGVydHlDb2xvciB7CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIC8vIFZpc2l0ZWQgbGlu
ayBzdHlsZSBjYW4gbmV2ZXIgZXhwbGljaXRseSBpbmhlcml0IGZyb20gcGFyZW50IHZpc2l0ZWQg
bGluayBzdHlsZSBzbyBubyBzZXBhcmF0ZSBnZXR0ZXJzIGFyZSBuZWVkZWQuCisgICAgICAgIENv
bG9yIGNvbG9yID0gKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipnZXR0ZXJGdW5jdGlv
bikoKTsKKyAgICAgICAgYXBwbHlDb2xvclZhbHVlKHN0eWxlUmVzb2x2ZXIsIGNvbG9yLmlzVmFs
aWQoKSA/IGNvbG9yIDogKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipkZWZhdWx0RnVu
Y3Rpb24pKCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAgICAg
ICBhcHBseUNvbG9yVmFsdWUoc3R5bGVSZXNvbHZlciwgaW5pdGlhbEZ1bmN0aW9uKCkpOworICAg
IH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIGlmIChpbmhlcml0Q29s
b3JGcm9tUGFyZW50ICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ3Vy
cmVudGNvbG9yKQorICAgICAgICAgICAgYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5
bGVSZXNvbHZlcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2
ZXItPmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIChzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKSk7CisgICAgICAgICAgICBpZiAoc3R5
bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQorICAgICAgICAg
ICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlv
bikoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUs
IC8qIGZvclZpc2l0ZWRMaW5rICovIHRydWUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIGFwcGx5Q29sb3JWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBj
b25zdCBDb2xvciYgY29sb3IpCisgICAgeworICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+YXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCisgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShjb2xvcik7CisgICAgICAgIGlmIChzdHlsZVJlc29s
dmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCisgICAgICAgICAgICAoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKGNvbG9yKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJl
dHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFs
dWUsICZhcHBseVZhbHVlKTsgfQorfTsKKwordGVtcGxhdGUgPFRleHREaXJlY3Rpb24gKFJlbmRl
clN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0
dGVyRnVuY3Rpb24pKFRleHREaXJlY3Rpb24pLCBUZXh0RGlyZWN0aW9uICgqaW5pdGlhbEZ1bmN0
aW9uKSgpPgorY2xhc3MgQXBwbHlQcm9wZXJ0eURpcmVjdGlvbiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFwcGx5
UHJvcGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24sIGdldHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0
aW9uLCBzZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgaW5pdGlhbEZ1bmN0aW9uPjo6YXBw
bHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBzdHlsZVJlc29sdmVyLT5lbGVtZW50KCk7CisgICAgICAgIGlmIChlbGVt
ZW50ICYmIHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnNldERp
cmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KHRydWUpOworICAgIH0KKworICAgIHN0YXRpYyBQ
cm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCisgICAgeworICAgICAgICBQcm9wZXJ0eUhh
bmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24sIGdldHRl
ckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9uLCBzZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwg
aW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOworICAgICAgICByZXR1cm4gUHJvcGVy
dHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0
aW9uKCksICZhcHBseVZhbHVlKTsKKyAgICB9Cit9OworCitlbnVtIExlbmd0aEF1dG8geyBBdXRv
RGlzYWJsZWQgPSAwLCBBdXRvRW5hYmxlZCB9OworZW51bSBMZW5ndGhMZWdhY3lJbnRyaW5zaWMg
eyBMZWdhY3lJbnRyaW5zaWNEaXNhYmxlZCA9IDAsIExlZ2FjeUludHJpbnNpY0VuYWJsZWQgfTsK
K2VudW0gTGVuZ3RoSW50cmluc2ljIHsgSW50cmluc2ljRGlzYWJsZWQgPSAwLCBJbnRyaW5zaWNF
bmFibGVkIH07CitlbnVtIExlbmd0aE5vbmUgeyBOb25lRGlzYWJsZWQgPSAwLCBOb25lRW5hYmxl
ZCB9OworZW51bSBMZW5ndGhVbmRlZmluZWQgeyBVbmRlZmluZWREaXNhYmxlZCA9IDAsIFVuZGVm
aW5lZEVuYWJsZWQgfTsKK3RlbXBsYXRlIDxMZW5ndGggKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVu
Y3Rpb24pKCkgY29uc3QsCisgICAgICAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5j
dGlvbikoTGVuZ3RoKSwKKyAgICAgICAgICBMZW5ndGggKCppbml0aWFsRnVuY3Rpb24pKCksCisg
ICAgICAgICAgTGVuZ3RoQXV0byBhdXRvRW5hYmxlZCA9IEF1dG9EaXNhYmxlZCwKKyAgICAgICAg
ICBMZW5ndGhMZWdhY3lJbnRyaW5zaWMgbGVnYWN5SW50cmluc2ljRW5hYmxlZCA9IExlZ2FjeUlu
dHJpbnNpY0Rpc2FibGVkLAorICAgICAgICAgIExlbmd0aEludHJpbnNpYyBpbnRyaW5zaWNFbmFi
bGVkID0gSW50cmluc2ljRGlzYWJsZWQsCisgICAgICAgICAgTGVuZ3RoTm9uZSBub25lRW5hYmxl
ZCA9IE5vbmVEaXNhYmxlZCwKKyAgICAgICAgICBMZW5ndGhVbmRlZmluZWQgbm9uZVVuZGVmaW5l
ZCA9IFVuZGVmaW5lZERpc2FibGVkPgorY2xhc3MgQXBwbHlQcm9wZXJ0eUxlbmd0aCB7CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBMZW5ndGgg
dmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpOworICAgICAgICBpZiAobm9uZUVuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAgICAgICAgICBpZiAobm9uZVVuZGVmaW5lZCkKKyAg
ICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoVW5k
ZWZpbmVkKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChs
ZWdhY3lJbnRyaW5zaWNFbmFibGVkKSB7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpCisgICAgICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEludHJpbnNpYykpOworICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVNaW5JbnRy
aW5zaWMpCisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
TGVuZ3RoKE1pbkludHJpbnNpYykpOworICAgICAgICB9CisgICAgICAgIGlmIChpbnRyaW5zaWNF
bmFibGVkKSB7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVXZWJraXRNaW5Db250ZW50KQorICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5Db250ZW50KSk7CisgICAgICAgICAgICBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRl
bnQpCisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVu
Z3RoKE1heENvbnRlbnQpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlV2Via2l0RmlsbEF2YWlsYWJsZSkKKyAgICAgICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkp
OworICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVXZWJraXRGaXRDb250ZW50KQorICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIExlbmd0aChGaXRDb250ZW50KSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoYXV0b0VuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVBdXRvKQorICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVu
Z3RoKCkpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewor
ICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3Ro
PExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAg
ICAgICAgICAgbGVuZ3RoLnNldFF1aXJrKHByaW1pdGl2ZVZhbHVlLT5pc1F1aXJrVmFsdWUoKSk7
CisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBsZW5ndGgpOwor
ICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKKyAgICAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCkpOworICAgICAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKKyAgICAgICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1
ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0
eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpKSkpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNW
aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgo
KSk7CisgICAgfQorCisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
KyAgICB7CisgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURl
ZmF1bHRCYXNlPExlbmd0aCwgZ2V0dGVyRnVuY3Rpb24sIExlbmd0aCwgc2V0dGVyRnVuY3Rpb24s
IExlbmd0aCwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOworICAgICAgICByZXR1
cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5p
dGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKKyAgICB9Cit9OworCitlbnVtIFN0cmluZ0lk
ZW50QmVoYXZpb3IgeyBOb3RoaW5nTWFwc1RvTnVsbCA9IDAsIE1hcE5vbmVUb051bGwsIE1hcEF1
dG9Ub051bGwgfTsKK3RlbXBsYXRlIDxTdHJpbmdJZGVudEJlaGF2aW9yIGlkZW50QmVoYXZpb3Is
IGNvbnN0IEF0b21pY1N0cmluZyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKGNvbnN0IEF0b21pY1N0cmlu
ZyYpLCBjb25zdCBBdG9taWNTdHJpbmcmICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgorY2xhc3MgQXBw
bHlQcm9wZXJ0eVN0cmluZyB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IChzdHlsZS0+KnNl
dHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIGlmICgoaWRl
bnRCZWhhdmlvciA9PSBNYXBOb25lVG9OdWxsICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIHx8IChpZGVudEJlaGF2aW9yID09IE1hcEF1
dG9Ub051bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKSkK
KyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIG51bGxBdG9tKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgIH0KKyAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlI
YW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8Y29uc3QgQXRvbWljU3Ry
aW5nJiwgZ2V0dGVyRnVuY3Rpb24sIGNvbnN0IEF0b21pY1N0cmluZyYsIHNldHRlckZ1bmN0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7
CisgICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rpb24o
KSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlIDxMZW5ndGhTaXplIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShMZW5ndGhTaXplKSwgTGVu
Z3RoU2l6ZSAoKmluaXRpYWxGdW5jdGlvbikoKT4KK2NsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJS
YWRpdXMgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBz
dHlsZSwgTGVuZ3RoU2l6ZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUp
OyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIFBhaXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1
ZS0+Z2V0UGFpclZhbHVlKCk7CisgICAgICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8
fCAhcGFpci0+c2Vjb25kKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTGVuZ3Ro
IHJhZGl1c1dpZHRoOworICAgICAgICBMZW5ndGggcmFkaXVzSGVpZ2h0OworICAgICAgICBpZiAo
cGFpci0+Zmlyc3QoKS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgICAgICByYWRpdXNXaWR0aCA9
IExlbmd0aChwYWlyLT5maXJzdCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICAg
ICAgZWxzZSBpZiAocGFpci0+Zmlyc3QoKS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkK
KyAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+dmlld3BvcnRQZXJjZW50
YWdlTGVuZ3RoKCk7CisgICAgICAgIGVsc2UgaWYgKHBhaXItPmZpcnN0KCktPmlzQ2FsY3VsYXRl
ZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCisgICAgICAgICAgICByYWRpdXNXaWR0aCA9IExlbmd0
aCgocGFpci0+Zmlyc3QoKS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByYWRpdXNXaWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCks
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIGlmIChw
YWlyLT5zZWNvbmQoKS0+aXNQZXJjZW50YWdlKCkpCisgICAgICAgICAgICByYWRpdXNIZWlnaHQg
PSBMZW5ndGgocGFpci0+c2Vjb25kKCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOworICAg
ICAgICBlbHNlIGlmIChwYWlyLT5zZWNvbmQoKS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgo
KSkKKyAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT52aWV3cG9ydFBl
cmNlbnRhZ2VMZW5ndGgoKTsKKyAgICAgICAgZWxzZSBpZiAocGFpci0+c2Vjb25kKCktPmlzQ2Fs
Y3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCisgICAgICAgICAgICByYWRpdXNIZWlnaHQg
PSBMZW5ndGgoKHBhaXItPnNlY29uZCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT5jb21wdXRlTGVuZ3Ro
PExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAg
ICAgICBpbnQgd2lkdGggPSByYWRpdXNXaWR0aC52YWx1ZSgpOworICAgICAgICBpbnQgaGVpZ2h0
ID0gcmFkaXVzSGVpZ2h0LnZhbHVlKCk7CisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0
IDwgMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCF3aWR0aCkKKyAgICAgICAg
ICAgIHJhZGl1c0hlaWdodCA9IHJhZGl1c1dpZHRoOyAvLyBOdWxsIG91dCB0aGUgb3RoZXIgdmFs
dWUuCisgICAgICAgIGVsc2UgaWYgKCFoZWlnaHQpCisgICAgICAgICAgICByYWRpdXNXaWR0aCA9
IHJhZGl1c0hlaWdodDsgLy8gTnVsbCBvdXQgdGhlIG90aGVyIHZhbHVlLgorCisgICAgICAgIExl
bmd0aFNpemUgc2l6ZShyYWRpdXNXaWR0aCwgcmFkaXVzSGVpZ2h0KTsKKyAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc2l6ZSk7CisgICAgfQorICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCisgICAgeworICAgICAgICBQcm9wZXJ0eUhhbmRs
ZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxMZW5ndGhTaXplLCBnZXR0ZXJG
dW5jdGlvbiwgTGVuZ3RoU2l6ZSwgc2V0dGVyRnVuY3Rpb24sIExlbmd0aFNpemUsIGluaXRpYWxG
dW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxl
cihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAm
YXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
RmlsbExheWVyQWNjZXNzb3JUeXBlcyB7CisgICAgdHlwZWRlZiBUIFNldHRlcjsKKyAgICB0eXBl
ZGVmIFQgR2V0dGVyOworfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBGaWxsTGF5ZXJBY2Nlc3Nv
clR5cGVzPFN0eWxlSW1hZ2UqPiB7CisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IFNldHRlcjsKKyAgICB0eXBlZGVmIFN0eWxlSW1hZ2UqIEdldHRlcjsKK307CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULAorICAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwKKyAgICAg
ICAgICBFRmlsbExheWVyVHlwZSBmaWxsTGF5ZXJUeXBlLAorICAgICAgICAgIEZpbGxMYXllciog
KFJlbmRlclN0eWxlOjoqYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCksCisgICAgICAgICAgY29uc3Qg
RmlsbExheWVyKiAoUmVuZGVyU3R5bGU6OipsYXllcnNGdW5jdGlvbikoKSBjb25zdCwKKyAgICAg
ICAgICBib29sIChGaWxsTGF5ZXI6Oip0ZXN0RnVuY3Rpb24pKCkgY29uc3QsCisgICAgICAgICAg
dHlwZW5hbWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxUPjo6R2V0dGVyIChGaWxsTGF5ZXI6Oipn
ZXRGdW5jdGlvbikoKSBjb25zdCwKKyAgICAgICAgICB2b2lkIChGaWxsTGF5ZXI6OipzZXRGdW5j
dGlvbikodHlwZW5hbWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxUPjo6U2V0dGVyKSwKKyAgICAg
ICAgICB2b2lkIChGaWxsTGF5ZXI6OipjbGVhckZ1bmN0aW9uKSgpLAorICAgICAgICAgIHR5cGVu
YW1lIEZpbGxMYXllckFjY2Vzc29yVHlwZXM8VD46OkdldHRlciAoKmluaXRpYWxGdW5jdGlvbiko
RUZpbGxMYXllclR5cGUpLAorICAgICAgICAgIHZvaWQgKENTU1RvU3R5bGVNYXA6OiptYXBGaWxs
RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik+CitjbGFzcyBB
cHBseVByb3BlcnR5RmlsbExheWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQor
ICAgIHsKKyAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICBGaWxsTGF5ZXIqIHByZXZD
aGlsZCA9IDA7CisgICAgICAgIGNvbnN0IEZpbGxMYXllciogY3VyclBhcmVudCA9IChzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT4qbGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIHdoaWxl
IChjdXJyUGFyZW50ICYmIChjdXJyUGFyZW50LT4qdGVzdEZ1bmN0aW9uKSgpKSB7CisgICAgICAg
ICAgICBpZiAoIWN1cnJDaGlsZCkgeworICAgICAgICAgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBh
IG5ldyBsYXllci4qLworICAgICAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBGaWxsTGF5ZXIo
ZmlsbExheWVyVHlwZSk7CisgICAgICAgICAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJD
aGlsZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAoY3VyckNoaWxkLT4qc2V0RnVuY3Rp
b24pKChjdXJyUGFyZW50LT4qZ2V0RnVuY3Rpb24pKCkpOworICAgICAgICAgICAgcHJldkNoaWxk
ID0gY3VyckNoaWxkOworICAgICAgICAgICAgY3VyckNoaWxkID0gcHJldkNoaWxkLT5uZXh0KCk7
CisgICAgICAgICAgICBjdXJyUGFyZW50ID0gY3VyclBhcmVudC0+bmV4dCgpOworICAgICAgICB9
CisKKyAgICAgICAgd2hpbGUgKGN1cnJDaGlsZCkgeworICAgICAgICAgICAgLyogUmVzZXQgYW55
IHJlbWFpbmluZyBsYXllcnMgdG8gbm90IGhhdmUgdGhlIHByb3BlcnR5IHNldC4gKi8KKyAgICAg
ICAgICAgIChjdXJyQ2hpbGQtPipjbGVhckZ1bmN0aW9uKSgpOworICAgICAgICAgICAgY3VyckNo
aWxkID0gY3VyckNoaWxkLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOworICAgICAgICAoY3Vy
ckNoaWxkLT4qc2V0RnVuY3Rpb24pKCgqaW5pdGlhbEZ1bmN0aW9uKShmaWxsTGF5ZXJUeXBlKSk7
CisgICAgICAgIGZvciAoY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7IGN1cnJDaGlsZDsg
Y3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCkpCisgICAgICAgICAgICAoY3VyckNoaWxkLT4q
Y2xlYXJGdW5jdGlvbikoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKKyAgICAgICAgRmlsbExheWVyKiBw
cmV2Q2hpbGQgPSAwOworICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkKKyNpZiBFTkFC
TEUoQ1NTX0lNQUdFX1NFVCkKKyAgICAgICAgJiYgIXZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKQor
I2VuZGlmCisgICAgICAgICkgeworICAgICAgICAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBw
dXQgaXQgaW50byBhIGxheWVyLCBjcmVhdGluZyBuZXcgbGF5ZXJzIGFzIG5lZWRlZC4gKi8KKyAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVM
aXN0Kj4odmFsdWUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB2
YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIWN1cnJDaGls
ZCkgeworICAgICAgICAgICAgICAgICAgICAvKiBOZWVkIHRvIG1ha2UgYSBuZXcgbGF5ZXIgdG8g
aG9sZCB0aGlzIHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBG
aWxsTGF5ZXIoZmlsbExheWVyVHlwZSk7CisgICAgICAgICAgICAgICAgICAgIHByZXZDaGlsZC0+
c2V0TmV4dChjdXJyQ2hpbGQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAo
c3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1hcEZpbGxGdW5jdGlvbikocHJvcGVydHlJZCwg
Y3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAg
ICAgICAgICAgIHByZXZDaGlsZCA9IGN1cnJDaGlsZDsKKyAgICAgICAgICAgICAgICBjdXJyQ2hp
bGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRmlsbEZ1bmN0aW9u
KShwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlKTsKKyAgICAgICAgICAgIGN1cnJDaGlsZCA9
IGN1cnJDaGlsZC0+bmV4dCgpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChjdXJyQ2hpbGQp
IHsKKyAgICAgICAgICAgIC8qIFJlc2V0IGFsbCByZW1haW5pbmcgbGF5ZXJzIHRvIG5vdCBoYXZl
IHRoZSBwcm9wZXJ0eSBzZXQuICovCisgICAgICAgICAgICAoY3VyckNoaWxkLT4qY2xlYXJGdW5j
dGlvbikoKTsKKyAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5p
dGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KK307CisKK2VudW0gQ29tcHV0ZUxlbmd0aE5vcm1h
bCB7Tm9ybWFsRGlzYWJsZWQgPSAwLCBOb3JtYWxFbmFibGVkfTsKK2VudW0gQ29tcHV0ZUxlbmd0
aFRoaWNrbmVzcyB7VGhpY2tuZXNzRGlzYWJsZWQgPSAwLCBUaGlja25lc3NFbmFibGVkfTsKK2Vu
dW0gQ29tcHV0ZUxlbmd0aFNWR1pvb20ge1NWR1pvb21EaXNhYmxlZCA9IDAsIFNWR1pvb21FbmFi
bGVkfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULAorICAgICAgICAgIFQgKFJlbmRlclN0eWxlOjoq
Z2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsCisgICAgICAgICAgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXJGdW5jdGlvbikoVCksCisgICAgICAgICAgVCAoKmluaXRpYWxGdW5jdGlvbikoKSwKKyAg
ICAgICAgICBDb21wdXRlTGVuZ3RoTm9ybWFsIG5vcm1hbEVuYWJsZWQgPSBOb3JtYWxEaXNhYmxl
ZCwKKyAgICAgICAgICBDb21wdXRlTGVuZ3RoVGhpY2tuZXNzIHRoaWNrbmVzc0VuYWJsZWQgPSBU
aGlja25lc3NEaXNhYmxlZCwKKyAgICAgICAgICBDb21wdXRlTGVuZ3RoU1ZHWm9vbSBzdmdab29t
RW5hYmxlZCA9IFNWR1pvb21EaXNhYmxlZD4KK2NsYXNzIEFwcGx5UHJvcGVydHlDb21wdXRlTGVu
Z3RoIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5
bGUsIFQgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gbm90ZTogQ1NTUHJv
cGVydHlMZXR0ZXIvV29yZFNwYWNpbmcgcmlnaHQgbm93IHNldHMgdG8gemVybyBpZiBpdCdzIG5v
dCBhIHByaW1pdGl2ZSB2YWx1ZSBmb3Igc29tZSByZWFzb24uLi4KKyAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOworCisgICAgICAgIGludCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpOworICAgICAgICBUIGxlbmd0aDsKKyAgICAgICAgaWYgKG5vcm1hbEVuYWJsZWQg
JiYgaWRlbnQgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IDA7Cisg
ICAgICAgIH0gZWxzZSBpZiAodGhpY2tuZXNzRW5hYmxlZCAmJiBpZGVudCA9PSBDU1NWYWx1ZVRo
aW4pIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAodGhpY2tu
ZXNzRW5hYmxlZCAmJiBpZGVudCA9PSBDU1NWYWx1ZU1lZGl1bSkgeworICAgICAgICAgICAgbGVu
Z3RoID0gMzsKKyAgICAgICAgfSBlbHNlIGlmICh0aGlja25lc3NFbmFibGVkICYmIGlkZW50ID09
IENTU1ZhbHVlVGhpY2spIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IDU7CisgICAgICAgIH0gZWxz
ZSBpZiAoaWRlbnQgPT0gQ1NTVmFsdWVJbnZhbGlkKSB7CisgICAgICAgICAgICBmbG9hdCB6b29t
ID0gKHN2Z1pvb21FbmFibGVkICYmIHN0eWxlUmVzb2x2ZXItPnVzZVNWR1pvb21SdWxlcygpKSA/
IDEuMGYgOiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisKKyAgICAg
ICAgICAgIC8vIEFueSBvcmlnaW5hbCByZXN1bHQgdGhhdCB3YXMgPj0gMSBzaG91bGQgbm90IGJl
IGFsbG93ZWQgdG8gZmFsbCBiZWxvdyAxLgorICAgICAgICAgICAgLy8gVGhpcyBrZWVwcyBib3Jk
ZXIgbGluZXMgZnJvbSB2YW5pc2hpbmcuCisgICAgICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29s
dmVyLT5yb290RWxlbWVudFN0eWxlKCksIHpvb20pOworICAgICAgICAgICAgaWYgKHpvb20gPCAx
LjBmICYmIGxlbmd0aCA8IDEuMCkgeworICAgICAgICAgICAgICAgIFQgb3JpZ2luYWxMZW5ndGgg
PSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIDEuMCk7CisgICAgICAgICAgICAg
ICAgaWYgKG9yaWdpbmFsTGVuZ3RoID49IDEuMCkKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3Ro
ID0gMS4wOworICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IDA7CisgICAgICAgIH0K
KworICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBsZW5ndGgpOworICAg
IH0KKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAgIHsKKyAg
ICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8
VCwgZ2V0dGVyRnVuY3Rpb24sIFQsIHNldHRlckZ1bmN0aW9uLCBULCBpbml0aWFsRnVuY3Rpb24+
OjpjcmVhdGVIYW5kbGVyKCk7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxl
ci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBUIChGb250RGVzY3JpcHRp
b246OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoRm9udERlc2NyaXB0aW9uOjoqc2V0
dGVyRnVuY3Rpb24pKFQpLCBUIGluaXRpYWxWYWx1ZT4KK2NsYXNzIEFwcGx5UHJvcGVydHlGb250
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlv
bigpOworICAgICAgICAoZm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKHN0eWxlUmVz
b2x2ZXItPnBhcmVudEZvbnREZXNjcmlwdGlvbigpLipnZXR0ZXJGdW5jdGlvbikoKSk7CisgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKShpbml0aWFsVmFsdWUp
OworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAg
ICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKCpwcmltaXRpdmVWYWx1ZSk7Cisg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OworICAgIH0KKworICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsg
cmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxW
YWx1ZSwgJmFwcGx5VmFsdWUpOyB9Cit9OworCitjbGFzcyBBcHBseVByb3BlcnR5Rm9udEZhbWls
eSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlw
dGlvbiA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgICAgICAKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50
Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkpOworICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0SXNTcGVjaWZpZWRGb250KHBhcmVudEZvbnREZXNjcmlwdGlv
bi5pc1NwZWNpZmllZEZvbnQoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50
IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlIHRvIG5vbi1tb25v
c3BhY2UuCisgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250
RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQorICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6
ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsg
Zm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOworICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShpbml0aWFsRGVzYy5nZW5lcmljRmFtaWx5KCkp
OworICAgICAgICBpZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuZmFtaWx5SXNFbXB0eSgp
KQorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShpbml0aWFsRGVzYy5maXJz
dEZhbWlseSgpKTsKKworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxp
c3QoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgICAgIEZvbnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0
RmFtaWx5KCk7CisgICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOworCisgICAgICAg
IC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3ZSBzaG91
bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgorICAgICAgICBib29sIG9sZEZhbWlseVVzZWRG
aXhlZERlZmF1bHRTaXplID0gZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKTsK
KyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9u
OjpOb0ZhbWlseSk7CisKKyAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFs
dWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAgICAgQ1NTVmFsdWUqIGl0
ZW0gPSBpLnZhbHVlKCk7CisgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBjb250ZW50VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0p
OworICAgICAgICAgICAgQXRvbWljU3RyaW5nIGZhY2U7CisgICAgICAgICAgICBTZXR0aW5ncyog
c2V0dGluZ3MgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpOworICAgICAg
ICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBmYWNl
ID0gY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAgZWxzZSBpZiAo
c2V0dGluZ3MpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0SWRl
bnQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5OgorICAgICAg
ICAgICAgICAgICAgICBmYWNlID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseSgpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2Vy
aWY6CisgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzZXJpZkZhbWlseTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9u
OjpTZXJpZkZhbWlseSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6CisgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBz
YW5zU2VyaWZGYW1pbHk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRH
ZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5KTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6
CisgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBjdXJzaXZlRmFtaWx5OworICAgICAgICAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246
OkN1cnNpdmVGYW1pbHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKKyAgICAgICAgICAgICAgICAgICAgZmFjZSA9IGZh
bnRhc3lGYW1pbHk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5l
cmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6RmFudGFzeUZhbWlseSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6Cisg
ICAgICAgICAgICAgICAgICAgIGZhY2UgPSBtb25vc3BhY2VGYW1pbHk7CisgICAgICAgICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6
TW9ub3NwYWNlRmFtaWx5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3JhcGg6CisgICAgICAgICAgICAgICAgICAg
IGZhY2UgPSBwaWN0b2dyYXBoRmFtaWx5OworICAgICAgICAgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlBpY3RvZ3JhcGhGYW1pbHkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghZmFjZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIWN1cnJGYW1pbHkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlsbGluZyBp
biB0aGUgZmlyc3QgZmFtaWx5LgorICAgICAgICAgICAgICAgICAgICBmaXJzdEZhbWlseS5zZXRG
YW1pbHkoZmFjZSk7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0RmFtaWx5LmFwcGVuZEZhbWls
eSgwKTsgLy8gUmVtb3ZlIGFueSBpbmhlcml0ZWQgZmFtaWx5LWZhbGxiYWNrIGxpc3QuCisgICAg
ICAgICAgICAgICAgICAgIGN1cnJGYW1pbHkgPSAmZmlyc3RGYW1pbHk7CisgICAgICAgICAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQoZm9udERlc2NyaXB0aW9u
LmdlbmVyaWNGYW1pbHkoKSA9PSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZh
bWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7CisgICAgICAgICAg
ICAgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KGZhY2UpOworICAgICAgICAgICAgICAgICAg
ICBjdXJyRmFtaWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsKKyAgICAgICAgICAgICAgICAg
ICAgY3VyckZhbWlseSA9IG5ld0ZhbWlseS5nZXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBjYW4ndCBjYWxsIHVzZUZpeGVk
RGVmYXVsdFNpemUoKSB1bnRpbCBhbGwgbmV3IGZvbnQgZmFtaWxpZXMgaGF2ZSBiZWVuIGFkZGVk
CisgICAgICAgIC8vIElmIGN1cnJGYW1pbHkgaXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQgYXQgbGVh
c3Qgb25lIGZhbWlseSBvbiB0aGlzIGRlc2NyaXB0aW9uLgorICAgICAgICBpZiAoY3VyckZhbWls
eSkgeworICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZv
bnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVk
RGVmYXVsdFNpemUpCisgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUo
Zm9udERlc2NyaXB0aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVS
ZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtl
eXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKKworICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBw
bHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9Cit9Owor
CitjbGFzcyBBcHBseVByb3BlcnR5Rm9udFNpemUgeworcHJpdmF0ZToKKyAgICAvLyBXaGVuIHRo
ZSBDU1Mga2V5d29yZCAibGFyZ2VyIiBpcyB1c2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYXR0ZW1w
dCB0byBtYXRjaCB3aXRoaW4gdGhlIGtleXdvcmQKKyAgICAvLyB0YWJsZSwgYW5kIGZhaWxpbmcg
dGhhdCwgd2lsbCBzaW1wbHkgbXVsdGlwbHkgYnkgMS4yLgorICAgIHN0YXRpYyBmbG9hdCBsYXJn
ZXJGb250U2l6ZShmbG9hdCBzaXplKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBv
dXQgd2hlcmUgd2UgZmFsbCBpbiB0aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRvIHh4eC1sYXJn
ZSkgYW5kIHNjYWxlIHVwIHRvCisgICAgICAgIC8vIHRoZSBuZXh0IHNpemUgbGV2ZWwuCisgICAg
ICAgIHJldHVybiBzaXplICogMS4yZjsKKyAgICB9CisKKyAgICAvLyBMaWtlIHRoZSBwcmV2aW91
cyBmdW5jdGlvbiwgYnV0IGZvciB0aGUga2V5d29yZCAic21hbGxlciIuCisgICAgc3RhdGljIGZs
b2F0IHNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXplKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IEZpZ3VyZSBvdXQgd2hlcmUgd2UgZmFsbCBpbiB0aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRv
IHh4eC1sYXJnZSkgYW5kIHNjYWxlIGRvd24gdG8KKyAgICAgICAgLy8gdGhlIG5leHQgc2l6ZSBs
ZXZlbC4KKyAgICAgICAgcmV0dXJuIHNpemUgLyAxLjJmOworICAgIH0KK3B1YmxpYzoKKyAgICBz
dGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKwor
ICAgICAgICBpZiAoc2l6ZSA8IDApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUo
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNp
emUoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlv
biwgc2l6ZSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKKyAgICB7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZmxvYXQg
c2l6ZSA9IHN0eWxlUmVzb2x2ZXItPmZvbnRTaXplRm9yS2V5d29yZChzdHlsZVJlc29sdmVyLT5k
b2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVs
dFNpemUoKSk7CisKKyAgICAgICAgaWYgKHNpemUgPCAwKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAt
IENTU1ZhbHVlWHhTbWFsbCArIDEpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6
ZShmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOworCisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKDApOworICAgICAgICBmbG9hdCBwYXJlbnRT
aXplID0gMDsKKyAgICAgICAgYm9vbCBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNlOworICAg
ICAgICBmbG9hdCBzaXplID0gMDsKKworICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKSkgeworICAgICAgICAgICAgcGFyZW50U2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAgICAgICAgICAg
IHBhcmVudElzQWJzb2x1dGVTaXplID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9u
dERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChpbnQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgeworICAgICAgICAgICAg
Ly8gS2V5d29yZHMgYXJlIGJlaW5nIHVzZWQuCisgICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7
CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWHhTbWFsbDoKKyAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVYU21hbGw6CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGw6CisgICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlTWVkaXVtOgorICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlOgor
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVYeExhcmdlOgorICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgorICAg
ICAgICAgICAgICAgIHNpemUgPSBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5
bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERl
ZmF1bHRTaXplKCkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3Jk
U2l6ZShpZGVudCAtIENTU1ZhbHVlWHhTbWFsbCArIDEpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKKyAgICAgICAgICAgICAgICBzaXpl
ID0gbGFyZ2VyRm9udFNpemUocGFyZW50U2l6ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGxlcjoKKyAgICAgICAgICAgICAgICBzaXplID0g
c21hbGxlckZvbnRTaXplKHBhcmVudFNpemUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJ
c0Fic29sdXRlU2l6ZSAmJiAoaWRlbnQgPT0gQ1NTVmFsdWVMYXJnZXIgfHwgaWRlbnQgPT0gQ1NT
VmFsdWVTbWFsbGVyKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhKHByaW1pdGl2ZVZhbHVlLT5p
c1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS0+aXNGb250UmVsYXRpdmVMZW5ndGgoKSkp
OworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQorICAgICAgICAg
ICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGVS
ZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
LCAxLjAsIHRydWUpOworICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVy
Y2VudGFnZSgpKQorICAgICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUtPmdldEZs
b2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOworICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCisgICAg
ICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxj
VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpKS0+ZXZhbHVhdGUocGFyZW50U2l6ZSk7CisgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKKyAgICAgICAg
ICAgICAgICBzaXplID0gdmFsdWVGb3JMZW5ndGgocHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVy
Y2VudGFnZUxlbmd0aCgpLCAwLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3
KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzaXplIDwgMCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAvLyBPdmVybHkgbGFyZ2UgZm9udCBzaXplcyB3aWxsIGNhdXNlIGNyYXNoZXMgb24gc29tZSBw
bGF0Zm9ybXMgKHN1Y2ggYXMgV2luZG93cykuCisgICAgICAgIC8vIENhcCBmb250IHNpemUgaGVy
ZSB0byBtYWtlIHN1cmUgdGhhdCBkb2Vzbid0IGhhcHBlbi4KKyAgICAgICAgc2l6ZSA9IG1pbiht
YXhpbXVtQWxsb3dlZEZvbnRTaXplLCBzaXplKTsKKworICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgICAgICBzdHlsZVJlc29sdmVy
LT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0
dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1
ZSwgJmFwcGx5VmFsdWUpOyB9Cit9OworCitjbGFzcyBBcHBseVByb3BlcnR5Rm9udFdlaWdodCB7
CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIHN3
aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZUludmFsaWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlQm9sZGVyOgorICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFdlaWdodChmb250RGVzY3JpcHRpb24uYm9sZGVyV2VpZ2h0KCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVMaWdodGVyOgorICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChmb250RGVzY3JpcHRpb24ubGlnaHRlcldlaWdo
dCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICB9Cisg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OworICAgIH0KKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAg
IHsKKyAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5Rm9udDxG
b250V2VpZ2h0LCAmRm9udERlc2NyaXB0aW9uOjp3ZWlnaHQsICZGb250RGVzY3JpcHRpb246OnNl
dFdlaWdodCwgRm9udFdlaWdodE5vcm1hbD46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0
dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmlu
aXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKworY2xhc3MgQXBwbHlQ
cm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsKKyAgICAg
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnRE
ZXNjcmlwdGlvbigpOworCisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVy
ZXNTdGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSk7Cisg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUocGFy
ZW50Rm9udERlc2NyaXB0aW9uLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpKTsKKyAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShwYXJlbnRGb250
RGVzY3JpcHRpb24uaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKCkpOworCisgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7CisKKyAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlv
bjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RGlz
Y3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVz
U3RhdGUpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0dXJlc1N0
YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOworCisgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgRm9udERl
c2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNj
cmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6
TGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0
aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uOjpMaWdh
dHVyZXNTdGF0ZSBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246Ok5v
cm1hbExpZ2F0dXJlc1N0YXRlOworCisgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkg
eworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NW
YWx1ZUxpc3QqPih2YWx1ZSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZh
bHVlTGlzdC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVt
ID0gdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgICAg
IEFTU0VSVChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIGlmIChp
dGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
PihpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9Db21tb25MaWdh
dHVyZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZv
bnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ29tbW9uTGln
YXR1cmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBG
b250RGVzY3JpcHRpb246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9EaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3JldGlvbmFyeUxp
Z2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVEaXNjcmV0aW9uYXJ5TGlnYXR1cmVzOgorICAgICAgICAgICAgICAgICAgICAgICAg
ZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpFbmFibGVkTGln
YXR1cmVzU3RhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vSGlzdG9yaWNhbExpZ2F0dXJlczoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6
RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlSGlzdG9yaWNhbExpZ2F0dXJlczoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNj
cmlwdGlvbjo6RW5hYmxlZExpZ2F0dXJlc1N0YXRlOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpOworICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKTsKKyAgICAgICAgfQor
I2VuZGlmCisKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
UmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
Q29tbW9uTGlnYXR1cmVzU3RhdGUoY29tbW9uTGlnYXR1cmVzU3RhdGUpOworICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKGRpc2NyZXRpb25hcnlM
aWdhdHVyZXNTdGF0ZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0b3JpY2FsTGln
YXR1cmVzU3RhdGUoaGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKTsKKyAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgfQorCisgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFs
dWUsICZhcHBseVZhbHVlKTsKKyAgICB9Cit9OworCitlbnVtIEJvcmRlckltYWdlVHlwZSB7IEJv
cmRlckltYWdlID0gMCwgQm9yZGVyTWFzayB9OwordGVtcGxhdGUgPEJvcmRlckltYWdlVHlwZSBi
b3JkZXJJbWFnZVR5cGUsCisgICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwKKyAgICAg
ICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24p
KCkgY29uc3QsCisgICAgICAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbiko
Y29uc3QgTmluZVBpZWNlSW1hZ2UmKT4KK2NsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAg
ICBOaW5lUGllY2VJbWFnZSBpbWFnZTsKKyAgICAgICAgaWYgKGJvcmRlckltYWdlVHlwZSA9PSBC
b3JkZXJNYXNrKQorICAgICAgICAgICAgaW1hZ2Uuc2V0TWFza0RlZmF1bHRzKCk7CisgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCB2
YWx1ZSwgaW1hZ2UpOworICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1
bmN0aW9uKShpbWFnZSk7CisgICAgfQorCisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBw
bHlQcm9wZXJ0eURlZmF1bHRCYXNlPGNvbnN0IE5pbmVQaWVjZUltYWdlJiwgZ2V0dGVyRnVuY3Rp
b24sIGNvbnN0IE5pbmVQaWVjZUltYWdlJiwgc2V0dGVyRnVuY3Rpb24sIE5pbmVQaWVjZUltYWdl
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxOaW5lUGllY2VJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKTsK
KyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigp
LCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKwor
ZW51bSBCb3JkZXJJbWFnZU1vZGlmaWVyVHlwZSB7IE91dHNldCwgUmVwZWF0LCBTbGljZSwgV2lk
dGggfTsKK3RlbXBsYXRlIDxCb3JkZXJJbWFnZVR5cGUgdHlwZSwgQm9yZGVySW1hZ2VNb2RpZmll
clR5cGUgbW9kaWZpZXI+CitjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllciB7
Citwcml2YXRlOgorICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZh
bHVlKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0
eWxlLT5ib3JkZXJJbWFnZSgpIDogc3R5bGUtPm1hc2tCb3hJbWFnZSgpOyB9CisgICAgc3RhdGlj
IGlubGluZSB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgTmluZVBpZWNl
SW1hZ2UmIHZhbHVlKSB7IHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUtPnNldEJv
cmRlckltYWdlKHZhbHVlKSA6IHN0eWxlLT5zZXRNYXNrQm94SW1hZ2UodmFsdWUpOyB9CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIE5pbmVQaWVjZUltYWdl
IGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKKyAgICAgICAgc3dpdGNo
IChtb2RpZmllcikgeworICAgICAgICBjYXNlIE91dHNldDoKKyAgICAgICAgICAgIGltYWdlLmNv
cHlPdXRzZXRGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlcGVhdDoKKyAgICAgICAgICAgIGltYWdl
LmNvcHlSZXBlYXRGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNsaWNlOgorICAgICAgICAgICAgaW1h
Z2UuY29weUltYWdlU2xpY2VzRnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHls
ZSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXaWR0aDoKKyAgICAgICAg
ICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSkpOworICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7
CisgICAgICAgIGNhc2UgT3V0c2V0OgorICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KExlbmd0
aEJveCgwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZXBlYXQ6CisgICAg
ICAgICAgICBpbWFnZS5zZXRIb3Jpem9udGFsUnVsZShTdHJldGNoSW1hZ2VSdWxlKTsKKyAgICAg
ICAgICAgIGltYWdlLnNldFZlcnRpY2FsUnVsZShTdHJldGNoSW1hZ2VSdWxlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFNsaWNlOgorICAgICAgICAgICAgLy8gTWFza3MgaGF2
ZSBhIGRpZmZlcmVudCBpbml0aWFsIHZhbHVlIGZvciBzbGljZXMuIFByZXNlcnZlIHRoZSB2YWx1
ZSBvZiAwIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgICAgIGltYWdlLnNl
dEltYWdlU2xpY2VzKHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBMZW5ndGhCb3goTGVuZ3RoKDEwMCwg
UGVyY2VudCksIExlbmd0aCgxMDAsIFBlcmNlbnQpLCBMZW5ndGgoMTAwLCBQZXJjZW50KSwgTGVu
Z3RoKDEwMCwgUGVyY2VudCkpIDogTGVuZ3RoQm94KCkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0
RmlsbChmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXaWR0aDoKKyAg
ICAgICAgICAgIC8vIE1hc2tzIGhhdmUgYSBkaWZmZXJlbnQgaW5pdGlhbCB2YWx1ZSBmb3Igd2lk
dGhzLiBUaGV5IHVzZSBhbiAnYXV0bycgdmFsdWUgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGZpdCB0
byB0aGUgYm9yZGVyLgorICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHR5cGUgPT0g
Qm9yZGVySW1hZ2UgPyBMZW5ndGhCb3goTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJl
bGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSkgOiBMZW5n
dGhCb3goKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbWFnZSk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShn
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpKSk7CisgICAgICAgIHN3aXRjaCAobW9kaWZp
ZXIpIHsKKyAgICAgICAgY2FzZSBPdXRzZXQ6CisgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQo
c3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZXBlYXQ6CisgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVJlcGVhdCh2YWx1ZSwg
aW1hZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2xpY2U6CisgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVNsaWNlKHZh
bHVlLCBpbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXaWR0aDoKKyAg
ICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgp
LT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJl
dHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFs
dWUsICZhcHBseVZhbHVlKTsgfQorfTsKKwordGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQsIFN0
eWxlSW1hZ2UqIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChS
ZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+KSwgU3R5
bGVJbWFnZSogKCppbml0aWFsRnVuY3Rpb24pKCk+CitjbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVy
SW1hZ2VTb3VyY2UgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSB7
IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlSW1hZ2UoaWQsIHZhbHVlKSk7IH0KKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNy
ZWF0ZUhhbmRsZXIoKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBB
cHBseVByb3BlcnR5RGVmYXVsdEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1bmN0aW9uLCBQYXNz
UmVmUHRyPFN0eWxlSW1hZ2U+LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFnZSosIGluaXRpYWxG
dW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxl
cihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAm
YXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKworZW51bSBDb3VudGVyQmVoYXZpb3Ige0luY3JlbWVu
dCA9IDAsIFJlc2V0fTsKK3RlbXBsYXRlIDxDb3VudGVyQmVoYXZpb3IgY291bnRlckJlaGF2aW9y
PgorY2xhc3MgQXBwbHlQcm9wZXJ0eUNvdW50ZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lk
IGVtcHR5RnVuY3Rpb24oQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsgfQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAg
PSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworICAg
ICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBwYXJlbnRNYXAgPSBzdHlsZVJlc29sdmVyLT5wYXJl
bnRTdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworCisgICAgICAgIHR5cGVkZWYg
Q291bnRlckRpcmVjdGl2ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7CisgICAgICAgIEl0ZXJhdG9y
IGVuZCA9IHBhcmVudE1hcC5lbmQoKTsKKyAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHBhcmVu
dE1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIENvdW50ZXJEaXJl
Y3RpdmVzJiBkaXJlY3RpdmVzID0gbWFwLmFkZChpdC0+a2V5LCBDb3VudGVyRGlyZWN0aXZlcygp
KS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJl
c2V0KSB7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhlcml0UmVzZXQoaXQtPnZhbHVl
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhl
cml0SW5jcmVtZW50KGl0LT52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBib29sIHNl
dENvdW50ZXJJbmNyZW1lbnRUb05vbmUgPSBjb3VudGVyQmVoYXZpb3IgPT0gSW5jcmVtZW50ICYm
IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSktPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lOworCisgICAgICAgIGlmICgh
dmFsdWUtPmlzVmFsdWVMaXN0KCkgJiYgIXNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICAgICAg
dHlwZWRlZiBDb3VudGVyRGlyZWN0aXZlTWFwOjppdGVyYXRvciBJdGVyYXRvcjsKKworICAgICAg
ICBJdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CisgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBt
YXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhh
dmlvciA9PSBSZXNldCkKKyAgICAgICAgICAgICAgICBpdC0+dmFsdWUuY2xlYXJSZXNldCgpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5jbGVhckluY3JlbWVu
dCgpOworICAgICAgICAKKyAgICAgICAgaWYgKHNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3Qg
PSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CisgICAgICAgIGludCBsZW5ndGgg
PSBsaXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gbGlzdC0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIFBhaXIqIHBhaXIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1
ZSktPmdldFBhaXJWYWx1ZSgpOworICAgICAgICAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJz
dCgpIHx8ICFwYWlyLT5zZWNvbmQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgQXRvbWljU3RyaW5nIGlkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHBhaXItPmZpcnN0KCkpLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAg
aW50IHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWlyLT5zZWNvbmQo
KSktPmdldEludFZhbHVlKCk7CisgICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0
aXZlcyA9IG1hcC5hZGQoaWRlbnRpZmllciwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3It
PnZhbHVlOworICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkgeworICAg
ICAgICAgICAgICAgIGRpcmVjdGl2ZXMuc2V0UmVzZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMuYWRkSW5jcmVtZW50VmFsdWUo
dmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBw
bHlJbmhlcml0VmFsdWUsICZlbXB0eUZ1bmN0aW9uLCAmYXBwbHlWYWx1ZSk7IH0KK307CisKKwor
Y2xhc3MgQXBwbHlQcm9wZXJ0eUN1cnNvciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikKKyAgICB7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihzdHls
ZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5jdXJzb3IoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEN1cnNvckxpc3Qoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+
Y3Vyc29ycygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7CisgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNv
cigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOworICAgICAg
ICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCog
bGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKKyAgICAgICAgICAgIGlu
dCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldEN1cnNvcihDVVJTT1JfQVVUTyk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBsaXN0LT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0N1
cnNvckltYWdlVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBDU1NDdXJzb3JJbWFnZVZh
bHVlKiBpbWFnZSA9IHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdlVmFsdWUqPihpdGVtKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT51cGRhdGVJZlNWR0N1cnNvcklzVXNlZChzdHls
ZVJlc29sdmVyLT5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFyZSBu
b3QgYWxsb3dlZCB0byBzaGFyZSBzdHlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShD
U1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90U3BvdCgpKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOworICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzSWRlbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKSB7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpICYmIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmN1
cnNvcigpICE9IEVDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKSkKKyAgICAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsg
cmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxW
YWx1ZSwgJmFwcGx5VmFsdWUpOyB9Cit9OworCitjbGFzcyBBcHBseVByb3BlcnR5VGV4dEFsaWdu
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKworICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgIT0gQ1NTVmFsdWVXZWJraXRNYXRjaFBhcmVudCkKKyAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbigqcHJpbWl0aXZlVmFsdWUpOwor
ICAgICAgICBlbHNlIGlmIChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24o
KSA9PSBUQVNUQVJUKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IExFRlQgOiBSSUdIVCk7CisgICAgICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCktPnRleHRBbGlnbigpID09IFRBRU5EKQorICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFJJR0hUIDogTEVGVCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSk7CisgICAgfQorICAgIHN0YXRpYyBQ
cm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCisgICAgeworICAgICAgICBQcm9wZXJ0eUhh
bmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFVGV4dEFsaWduLCAmUmVu
ZGVyU3R5bGU6OnRleHRBbGlnbiwgRVRleHRBbGlnbiwgJlJlbmRlclN0eWxlOjpzZXRUZXh0QWxp
Z24sIEVUZXh0QWxpZ24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRBbGlnbj46OmNyZWF0ZUhh
bmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRG
dW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7CisgICAg
fQorfTsKKworY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEVUZXh0RGVjb3Jh
dGlvbiB0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbigpOworICAgICAgICBm
b3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkodmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNl
KCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOworICAgICAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXRlbS0+aXNQcmltaXRpdmVWYWx1
ZSgpKTsKKyAgICAgICAgICAgIHQgfD0gKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
aXRlbSk7CisgICAgICAgIH0KKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dERlY29yYXRpb24odCk7CisgICAgfQorICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRl
SGFuZGxlcigpCisgICAgeworICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTxFVGV4dERlY29yYXRpb24sICZSZW5kZXJTdHlsZTo6dGV4dERl
Y29yYXRpb24sIEVUZXh0RGVjb3JhdGlvbiwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlv
biwgRVRleHREZWNvcmF0aW9uLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbj46
OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVy
LmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1
ZSk7CisgICAgfQorfTsKKworY2xhc3MgQXBwbHlQcm9wZXJ0eU1hcnF1ZWVJbmNyZW1lbnQgewor
cHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKKyAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhl
ZCkpOyAvLyAxcHguCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENT
U1ZhbHVlTm9ybWFsOgorICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dE1hcnF1ZWVJbmNyZW1lbnQoTGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRl
ZmF1bHQuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVl
TGFyZ2U6CisgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVl
ZUluY3JlbWVudChMZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMZW5n
dGggbWFycXVlZUxlbmd0aCA9IHN0eWxlUmVzb2x2ZXItPmNvbnZlcnRUb0ludExlbmd0aChwcmlt
aXRpdmVWYWx1ZSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIGlmICghbWFycXVlZUxlbmd0aC5pc1VuZGVmaW5l
ZCgpKQorICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVJ
bmNyZW1lbnQobWFycXVlZUxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5SGFu
ZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6Om1hcnF1ZWVJ
bmNyZW1lbnQsICZSZW5kZXJTdHlsZTo6c2V0TWFycXVlZUluY3JlbWVudCwgJlJlbmRlclN0eWxl
Ojppbml0aWFsTWFycXVlZUluY3JlbWVudD46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0
dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmlu
aXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKworY2xhc3MgQXBwbHlQ
cm9wZXJ0eU1hcnF1ZWVSZXBldGl0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5maW5pdGUp
CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50
KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCisgICAgICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc051bWJlcigpKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7Cisg
ICAgfQorICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCisgICAgewor
ICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0PGlu
dCwgJlJlbmRlclN0eWxlOjptYXJxdWVlTG9vcENvdW50LCBpbnQsICZSZW5kZXJTdHlsZTo6c2V0
TWFycXVlZUxvb3BDb3VudCwgaW50LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNYXJxdWVlTG9vcENv
dW50Pjo6Y3JlYXRlSGFuZGxlcigpOworICAgICAgICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhh
bmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBs
eVZhbHVlKTsKKyAgICB9Cit9OworCitjbGFzcyBBcHBseVByb3BlcnR5TWFycXVlZVNwZWVkIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgaWYgKGludCBpZGVudCA9IHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7Cisg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2xvdzoKKyAgICAgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgorICAgICAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCg4NSk7IC8v
IDg1bXNlYy4gVGhlIFdpbklFIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlRmFzdDoKKyAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3QuCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzVGltZSgpKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENT
U1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOworICAgICAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgLy8gRm9yIHNjcm9sbGFtb3VudCBzdXBwb3J0LgorICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2
ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKKyAgICB9CisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxl
ciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVy
ID0gQXBwbHlQcm9wZXJ0eURlZmF1bHQ8aW50LCAmUmVuZGVyU3R5bGU6Om1hcnF1ZWVTcGVlZCwg
aW50LCAmUmVuZGVyU3R5bGU6OnNldE1hcnF1ZWVTcGVlZCwgaW50LCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxNYXJxdWVlU3BlZWQ+OjpjcmVhdGVIYW5kbGVyKCk7CisgICAgICAgIHJldHVybiBQcm9w
ZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVu
Y3Rpb24oKSwgJmFwcGx5VmFsdWUpOworICAgIH0KK307CisKKyNpZiBFTkFCTEUoQ1NTM19URVhU
KQorY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRVbmRlcmxpbmVQb3NpdGlvbiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICAvLyBUaGlzIGlz
IHRydWUgaWYgdmFsdWUgaXMgJ2F1dG8nIG9yICdhbHBoYWJldGljJy4KKyAgICAgICAgaWYgKHZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3Np
dGlvbiB0ID0gKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dFVuZGVybGluZVBvc2l0aW9uKHQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgdCA9
IDA7CisgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGkuaGFzTW9y
ZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVl
KCk7CisgICAgICAgICAgICBBU1NFUlQoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKKyAgICAg
ICAgICAgIFRleHRVbmRlcmxpbmVQb3NpdGlvbiB0MiA9ICpzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KGl0ZW0pOworICAgICAgICAgICAgdCB8PSB0MjsKKyAgICAgICAgfQorICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24oc3RhdGlj
X2Nhc3Q8VGV4dFVuZGVybGluZVBvc2l0aW9uPih0KSk7CisgICAgfQorICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCisgICAgeworICAgICAgICBQcm9wZXJ0eUhhbmRs
ZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxUZXh0VW5kZXJsaW5lUG9zaXRp
b24sICZSZW5kZXJTdHlsZTo6dGV4dFVuZGVybGluZVBvc2l0aW9uLCBUZXh0VW5kZXJsaW5lUG9z
aXRpb24sICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZVBvc2l0aW9uLCBUZXh0VW5kZXJs
aW5lUG9zaXRpb24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRVbmRlcmxpbmVQb3NpdGlvbj46
OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVy
LmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1
ZSk7CisgICAgfQorfTsKKyNlbmRpZiAvLyBDU1MzX1RFWFQKKworY2xhc3MgQXBwbHlQcm9wZXJ0
eUxpbmVIZWlnaHQgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgICAgICBMZW5ndGgg
bGluZUhlaWdodDsKKworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVOb3JtYWwpCisgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gUmVuZGVyU3R5bGU6Omlu
aXRpYWxMaW5lSGVpZ2h0KCk7CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xl
bmd0aCgpKSB7CisgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAgICAgICAgIG11
bHRpcGxpZXIgKj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CisgICAgICAgICAgICBsaW5lSGVp
Z2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIG11bHRpcGxpZXIp
OworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IHBlcmNlbnRhZ2Ugc2hvdWxkIG5vdCBiZSByZXN0cmljdGVk
IHRvIGFuIGludGVnZXIgaGVyZS4KKyAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50
VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IG51bWJlciBhbmQgcGVyY2Vu
dGFnZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdHlwZSBvZiBMZW5ndGggKGllLiBG
aXhlZCBvciBQZXJjZW50KS4KKyAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0
aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCkgKiAxMDAuMCwgUGVyY2VudCk7CisgICAgICAgIH0g
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCisg
ICAgICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFn
ZUxlbmd0aCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldExpbmVIZWlnaHQobGluZUhlaWdodCk7CisgICAgfQor
ICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCisgICAgeworICAgICAg
ICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxMZW5n
dGgsICZSZW5kZXJTdHlsZTo6c3BlY2lmaWVkTGluZUhlaWdodCwgTGVuZ3RoLCAmUmVuZGVyU3R5
bGU6OnNldExpbmVIZWlnaHQsIExlbmd0aCwgJlJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdo
dD46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5k
bGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlW
YWx1ZSk7CisgICAgfQorfTsKKworY2xhc3MgQXBwbHlQcm9wZXJ0eVBhZ2VTaXplIHsKK3ByaXZh
dGU6CisgICAgc3RhdGljIExlbmd0aCBtbUxlbmd0aChkb3VibGUgbW0pIHsgcmV0dXJuIENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUobW0sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU0pLT5jb21w
dXRlTGVuZ3RoPExlbmd0aD4oMCwgMCk7IH0KKyAgICBzdGF0aWMgTGVuZ3RoIGluY2hMZW5ndGgo
ZG91YmxlIGluY2gpIHsgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoaW5jaCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19JTiktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPigwLCAwKTsgfQor
ICAgIHN0YXRpYyBib29sIGdldFBhZ2VTaXplRnJvbU5hbWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHBh
Z2VTaXplTmFtZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VPcmllbnRhdGlvbiwgTGVuZ3RoJiB3
aWR0aCwgTGVuZ3RoJiBoZWlnaHQpCisgICAgeworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KExlbmd0aCwgYTVXaWR0aCwgKG1tTGVuZ3RoKDE0OCkpKTsKKyAgICAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChMZW5ndGgsIGE1SGVpZ2h0LCAobW1MZW5ndGgoMjEwKSkpOworICAgICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgYTRXaWR0aCwgKG1tTGVuZ3RoKDIxMCkpKTsKKyAgICAg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5ndGgsIGE0SGVpZ2h0LCAobW1MZW5ndGgoMjk3KSkp
OworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgYTNXaWR0aCwgKG1tTGVuZ3Ro
KDI5NykpKTsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5ndGgsIGEzSGVpZ2h0LCAo
bW1MZW5ndGgoNDIwKSkpOworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgYjVX
aWR0aCwgKG1tTGVuZ3RoKDE3NikpKTsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5n
dGgsIGI1SGVpZ2h0LCAobW1MZW5ndGgoMjUwKSkpOworICAgICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKExlbmd0aCwgYjRXaWR0aCwgKG1tTGVuZ3RoKDI1MCkpKTsKKyAgICAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChMZW5ndGgsIGI0SGVpZ2h0LCAobW1MZW5ndGgoMzUzKSkpOworICAgICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgbGV0dGVyV2lkdGgsIChpbmNoTGVuZ3RoKDguNSkp
KTsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5ndGgsIGxldHRlckhlaWdodCwgKGlu
Y2hMZW5ndGgoMTEpKSk7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGVuZ3RoLCBsZWdh
bFdpZHRoLCAoaW5jaExlbmd0aCg4LjUpKSk7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwo
TGVuZ3RoLCBsZWdhbEhlaWdodCwgKGluY2hMZW5ndGgoMTQpKSk7CisgICAgICAgIERFRklORV9T
VEFUSUNfTE9DQUwoTGVuZ3RoLCBsZWRnZXJXaWR0aCwgKGluY2hMZW5ndGgoMTEpKSk7CisgICAg
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGVuZ3RoLCBsZWRnZXJIZWlnaHQsIChpbmNoTGVuZ3Ro
KDE3KSkpOworCisgICAgICAgIGlmICghcGFnZVNpemVOYW1lKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIHN3aXRjaCAocGFnZVNpemVOYW1lLT5nZXRJZGVudCgpKSB7Cisg
ICAgICAgIGNhc2UgQ1NTVmFsdWVBNToKKyAgICAgICAgICAgIHdpZHRoID0gYTVXaWR0aDsKKyAg
ICAgICAgICAgIGhlaWdodCA9IGE1SGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ1NTVmFsdWVBNDoKKyAgICAgICAgICAgIHdpZHRoID0gYTRXaWR0aDsKKyAgICAgICAg
ICAgIGhlaWdodCA9IGE0SGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q1NTVmFsdWVBMzoKKyAgICAgICAgICAgIHdpZHRoID0gYTNXaWR0aDsKKyAgICAgICAgICAgIGhl
aWdodCA9IGEzSGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFs
dWVCNToKKyAgICAgICAgICAgIHdpZHRoID0gYjVXaWR0aDsKKyAgICAgICAgICAgIGhlaWdodCA9
IGI1SGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVCNDoK
KyAgICAgICAgICAgIHdpZHRoID0gYjRXaWR0aDsKKyAgICAgICAgICAgIGhlaWdodCA9IGI0SGVp
Z2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVMZXR0ZXI6Cisg
ICAgICAgICAgICB3aWR0aCA9IGxldHRlcldpZHRoOworICAgICAgICAgICAgaGVpZ2h0ID0gbGV0
dGVySGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVMZWdh
bDoKKyAgICAgICAgICAgIHdpZHRoID0gbGVnYWxXaWR0aDsKKyAgICAgICAgICAgIGhlaWdodCA9
IGxlZ2FsSGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVM
ZWRnZXI6CisgICAgICAgICAgICB3aWR0aCA9IGxlZGdlcldpZHRoOworICAgICAgICAgICAgaGVp
Z2h0ID0gbGVkZ2VySGVpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFn
ZU9yaWVudGF0aW9uKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHBhZ2VPcmllbnRhdGlvbi0+Z2V0
SWRlbnQoKSkgeworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhbmRzY2FwZToKKyAgICAgICAg
ICAgICAgICBzdGQ6OnN3YXAod2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlUG9ydHJhaXQ6CisgICAgICAgICAgICAgICAgLy8g
Tm90aGluZyB0byBkby4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikgeyB9Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciopIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKKyAgICAgICAg
TGVuZ3RoIHdpZHRoOworICAgICAgICBMZW5ndGggaGVpZ2h0OworICAgICAgICBQYWdlU2l6ZVR5
cGUgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX0FVVE87CisgICAgICAgIENTU1ZhbHVlTGlzdElu
c3BlY3RvciBpbnNwZWN0b3IodmFsdWUpOworICAgICAgICBzd2l0Y2ggKGluc3BlY3Rvci5sZW5n
dGgoKSkgeworICAgICAgICBjYXNlIDI6IHsKKyAgICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9IHwg
PHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgorICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3IuZmly
c3QoKS0+aXNQcmltaXRpdmVWYWx1ZSgpIHx8ICFpbnNwZWN0b3Iuc2Vjb25kKCktPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogZmlyc3QgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGluc3Bl
Y3Rvci5maXJzdCgpKTsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGluc3BlY3Rvci5zZWNvbmQoKSk7CisgICAg
ICAgICAgICBpZiAoZmlyc3QtPmlzTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAvLyA8bGVu
Z3RoPnsyfQorICAgICAgICAgICAgICAgIGlmICghc2Vjb25kLT5pc0xlbmd0aCgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgd2lkdGggPSBmaXJzdC0+Y29t
cHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXIt
PnJvb3RFbGVtZW50U3R5bGUoKSk7CisgICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5j
b21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgorICAgICAgICAgICAgICAgIC8vIFRo
ZSB2YWx1ZSBvcmRlciBpcyBndWFyYW50ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJh
bWV0ZXIuCisgICAgICAgICAgICAgICAgaWYgKCFnZXRQYWdlU2l6ZUZyb21OYW1lKGZpcnN0LCBz
ZWNvbmQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDE6IHsKKyAgICAg
ICAgICAgIC8vIDxsZW5ndGg+IHwgYXV0byB8IDxwYWdlLXNpemU+IHwgWyBwb3J0cmFpdCB8IGxh
bmRzY2FwZV0KKyAgICAgICAgICAgIGlmICghaW5zcGVjdG9yLmZpcnN0KCktPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KGluc3BlY3Rvci5maXJzdCgpKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNM
ZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+CisgICAgICAgICAgICAgICAg
cGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOworICAgICAgICAgICAgICAgIHdpZHRo
ID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86CisgICAgICAg
ICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlUG9ydHJhaXQ6Cisg
ICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPX1BPUlRSQUlU
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlTGFuZHNjYXBlOgorICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJ
WkVfQVVUT19MQU5EU0NBUEU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIC8vIDxwYWdlLXNpemU+CisgICAg
ICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFnZXRQYWdlU2l6ZUZyb21OYW1lKHByaW1pdGl2ZVZhbHVlLCAw
LCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFBhZ2VTaXplVHlwZShwYWdlU2l6ZVR5cGUp
OworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRQYWdlU2l6ZShMZW5ndGhTaXpl
KHdpZHRoLCBoZWlnaHQpKTsKKyAgICB9CisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwg
JmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KK307CisKK2NsYXNzIEFwcGx5UHJv
cGVydHlUZXh0RW1waGFzaXNTdHlsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
KyAgICB7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0Zp
bGwoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKKyAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNNYXJrKCkpOworICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldFRleHRFbXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNG
aWxsKCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNN
YXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKKyAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHls
ZTo6aW5pdGlhbFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVM
aXN0KCkpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENT
U1ZhbHVlTGlzdCo+KHZhbHVlKTsKKyAgICAgICAgICAgIEFTU0VSVChsaXN0LT5sZW5ndGgoKSA9
PSAyKTsKKyAgICAgICAgICAgIGlmIChsaXN0LT5sZW5ndGgoKSAhPSAyKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyOyArK2kp
IHsKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihp
dGVtKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVG
aWxsZWQgfHwgdmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKQorICAgICAgICAgICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCp2YWx1
ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKCp2YWx1ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0
b21NYXJrKG51bGxBdG9tKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOworICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJr
Q3VzdG9tKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc0N1c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7CisKKyAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlT3BlbikgeworICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqcHJpbWl0aXZlVmFsdWUpOworICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0
RW1waGFzaXNNYXJrQXV0byk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxs
ZWQpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lz
TWFyaygqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZh
cHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KK307
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULAorICAgICAgICAgIFQgKEFuaW1hdGlvbjo6KmdldHRl
ckZ1bmN0aW9uKSgpIGNvbnN0LAorICAgICAgICAgIHZvaWQgKEFuaW1hdGlvbjo6KnNldHRlckZ1
bmN0aW9uKShUKSwKKyAgICAgICAgICBib29sIChBbmltYXRpb246Oip0ZXN0RnVuY3Rpb24pKCkg
Y29uc3QsCisgICAgICAgICAgdm9pZCAoQW5pbWF0aW9uOjoqY2xlYXJGdW5jdGlvbikoKSwKKyAg
ICAgICAgICBUICgqaW5pdGlhbEZ1bmN0aW9uKSgpLAorICAgICAgICAgIHZvaWQgKENTU1RvU3R5
bGVNYXA6OiptYXBGdW5jdGlvbikoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKSwKKyAgICAgICAgICBB
bmltYXRpb25MaXN0KiAoUmVuZGVyU3R5bGU6OiphbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKSwK
KyAgICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiAoUmVuZGVyU3R5bGU6OippbW11dGFibGVB
bmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKSBjb25zdD4KK2NsYXNzIEFwcGx5UHJvcGVydHlBbmlt
YXRpb24geworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKEFuaW1hdGlvbiogYW5p
bWF0aW9uLCBUIHZhbHVlKSB7IChhbmltYXRpb24tPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9
CisgICAgc3RhdGljIFQgdmFsdWUoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24pIHsgcmV0dXJu
IChhbmltYXRpb24tPipnZXR0ZXJGdW5jdGlvbikoKTsgfQorICAgIHN0YXRpYyBib29sIHRlc3Qo
Y29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24pIHsgcmV0dXJuIChhbmltYXRpb24tPip0ZXN0RnVu
Y3Rpb24pKCk7IH0KKyAgICBzdGF0aWMgdm9pZCBjbGVhcihBbmltYXRpb24qIGFuaW1hdGlvbikg
eyAoYW5pbWF0aW9uLT4qY2xlYXJGdW5jdGlvbikoKTsgfQorICAgIHN0YXRpYyBUIGluaXRpYWwo
KSB7IHJldHVybiAoKmluaXRpYWxGdW5jdGlvbikoKTsgfQorICAgIHN0YXRpYyB2b2lkIG1hcChT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFs
dWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRnVuY3Rpb24pKGFu
aW1hdGlvbiwgdmFsdWUpOyB9CisgICAgc3RhdGljIEFuaW1hdGlvbkxpc3QqIGFjY2Vzc0FuaW1h
dGlvbnMoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPiphbmltYXRpb25HZXR0
ZXJGdW5jdGlvbikoKTsgfQorICAgIHN0YXRpYyBjb25zdCBBbmltYXRpb25MaXN0KiBhbmltYXRp
b25zKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qaW1tdXRhYmxlQW5pbWF0
aW9uR2V0dGVyRnVuY3Rpb24pKCk7IH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgewor
ICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29s
dmVyLT5zdHlsZSgpKTsKKyAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50TGlzdCA9
IGFuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSk7CisgICAgICAgIHNpemVf
dCBpID0gMCwgcGFyZW50U2l6ZSA9IHBhcmVudExpc3QgPyBwYXJlbnRMaXN0LT5zaXplKCkgOiAw
OworICAgICAgICBmb3IgKCA7IGkgPCBwYXJlbnRTaXplICYmIHRlc3QocGFyZW50TGlzdC0+YW5p
bWF0aW9uKGkpKTsgKytpKSB7CisgICAgICAgICAgICBpZiAobGlzdC0+c2l6ZSgpIDw9IGkpCisg
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOworICAgICAg
ICAgICAgc2V0VmFsdWUobGlzdC0+YW5pbWF0aW9uKGkpLCB2YWx1ZShwYXJlbnRMaXN0LT5hbmlt
YXRpb24oaSkpKTsKKyAgICAgICAgICAgIGxpc3QtPmFuaW1hdGlvbihpKS0+c2V0QW5pbWF0aW9u
TW9kZShwYXJlbnRMaXN0LT5hbmltYXRpb24oaSktPmFuaW1hdGlvbk1vZGUoKSk7CisgICAgICAg
IH0KKworICAgICAgICAvKiBSZXNldCBhbnkgcmVtYWluaW5nIGFuaW1hdGlvbnMgdG8gbm90IGhh
dmUgdGhlIHByb3BlcnR5IHNldC4gKi8KKyAgICAgICAgZm9yICggOyBpIDwgbGlzdC0+c2l6ZSgp
OyArK2kpCisgICAgICAgICAgICBjbGVhcihsaXN0LT5hbmltYXRpb24oaSkpOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIEFuaW1hdGlv
bkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOwor
ICAgICAgICBpZiAobGlzdC0+aXNFbXB0eSgpKQorICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFu
aW1hdGlvbjo6Y3JlYXRlKCkpOworICAgICAgICBzZXRWYWx1ZShsaXN0LT5hbmltYXRpb24oMCks
IGluaXRpYWwoKSk7CisgICAgICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0
VHJhbnNpdGlvblByb3BlcnR5KQorICAgICAgICAgICAgbGlzdC0+YW5pbWF0aW9uKDApLT5zZXRB
bmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZUFsbCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAxOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBjbGVhcihsaXN0LT5h
bmltYXRpb24oaSkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSk7CisgICAgICAgIHNpemVfdCBjaGlsZEluZGV4ID0gMDsKKyAg
ICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CisgICAgICAgICAgICAvKiBXYWxrIGVh
Y2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGFuIGFuaW1hdGlvbiwgY3JlYXRpbmcgbmV3IGFuaW1h
dGlvbnMgYXMgbmVlZGVkLiAqLworICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRv
ciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgeworICAgICAgICAgICAgICAg
IGlmIChjaGlsZEluZGV4IDw9IGxpc3QtPnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOworICAgICAgICAgICAgICAgIG1hcChzdHls
ZVJlc29sdmVyLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIGkudmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgKytjaGlsZEluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7CisgICAgICAgICAgICBtYXAoc3R5bGVSZXNv
bHZlciwgbGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZSk7CisgICAgICAgICAgICBj
aGlsZEluZGV4ID0gMTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKCA7IGNoaWxkSW5kZXggPCBs
aXN0LT5zaXplKCk7ICsrY2hpbGRJbmRleCkgeworICAgICAgICAgICAgLyogUmVzZXQgYWxsIHJl
bWFpbmluZyBhbmltYXRpb25zIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovCisgICAg
ICAgICAgICBjbGVhcihsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1
cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVl
LCAmYXBwbHlWYWx1ZSk7IH0KK307CisKK2NsYXNzIEFwcGx5UHJvcGVydHlPdXRsaW5lU3R5bGUg
eworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAg
ICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6
Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRs
aW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxp
bmVTdHlsZUlzQXV0bz46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVu
ZGVyU3R5bGU6Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91
dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHls
ZT46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIEFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVT
dHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJ
c0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlz
QXV0bz46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAg
ICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6
Om91dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHls
ZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5
SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBBcHBs
eVByb3BlcnR5RGVmYXVsdDxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHls
ZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1
dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0
bz46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGlu
ZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9y
ZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZh
cHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KK307
CisKK2NsYXNzIEFwcGx5UHJvcGVydHlSZXNpemUgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUp
OworCisgICAgICAgIEVSZXNpemUgciA9IFJFU0laRV9OT05FOworICAgICAgICBzd2l0Y2ggKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86CisgICAgICAgICAgICBpZiAoU2V0
dGluZ3MqIHNldHRpbmdzID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkK
KyAgICAgICAgICAgICAgICByID0gc2V0dGluZ3MtPnRleHRBcmVhc0FyZVJlc2l6YWJsZSgpID8g
UkVTSVpFX0JPVEggOiBSRVNJWkVfTk9ORTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgciA9ICpwcmltaXRpdmVWYWx1ZTsKKyAgICAgICAgfQorICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRSZXNpemUocik7CisgICAgfQorCisgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIFBy
b3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVSZXNpemUs
ICZSZW5kZXJTdHlsZTo6cmVzaXplLCBFUmVzaXplLCAmUmVuZGVyU3R5bGU6OnNldFJlc2l6ZSwg
RVJlc2l6ZSwgJlJlbmRlclN0eWxlOjppbml0aWFsUmVzaXplPjo6Y3JlYXRlSGFuZGxlcigpOwor
ICAgICAgICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCks
IGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKKyAgICB9Cit9OworCitj
bGFzcyBBcHBseVByb3BlcnR5VmVydGljYWxBbGlnbiB7CitwdWJsaWM6CisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSk7CisKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24oKnByaW1p
dGl2ZVZhbHVlKTsKKworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNh
bEFsaWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2Vy
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBW
aWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSkpOworICAgIH0KKworICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3Jl
YXRlSGFuZGxlcigpCisgICAgeworICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFw
cGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFVmVydGljYWxBbGlnbiwgJlJlbmRlclN0eWxlOjp2ZXJ0
aWNhbEFsaWduLCBFVmVydGljYWxBbGlnbiwgJlJlbmRlclN0eWxlOjpzZXRWZXJ0aWNhbEFsaWdu
LCBFVmVydGljYWxBbGlnbiwgJlJlbmRlclN0eWxlOjppbml0aWFsVmVydGljYWxBbGlnbj46OmNy
ZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmlu
aGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7
CisgICAgfQorfTsKKworY2xhc3MgQXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgaWYgKCFzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpLT5oYXNBc3BlY3RSYXRpbygpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsK
KyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRv
cihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkp
OworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRv
cihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oUmVuZGVyU3R5bGU6OmluaXRpYWxIYXNB
c3BlY3RSYXRpbygpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0
UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVub21pbmF0
b3IoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVt
ZXJhdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAo
IXZhbHVlLT5pc0FzcGVjdFJhdGlvVmFsdWUoKSkgeworICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oZmFsc2UpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVjdFJhdGlvVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVlKj4odmFsdWUpOworICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RS
YXRpb1ZhbHVlLT5kZW5vbWluYXRvclZhbHVlKCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5udW1lcmF0
b3JWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhh
bmRsZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhl
cml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOworICAgIH0KK307CisK
K2NsYXNzIEFwcGx5UHJvcGVydHlab29tIHsKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgcmVz
ZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAg
ICAgICAvLyBSZXNldCB0aGUgem9vbSBpbiBlZmZlY3QuIFRoaXMgYWxsb3dzIHRoZSBzZXRab29t
IG1ldGhvZCB0byBhY2N1cmF0ZWx5IGNvbXB1dGUgYSBuZXcgem9vbSBpbiBlZmZlY3QuCisgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKSA/IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSA6
IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVz
b2x2ZXIpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCktPnpvb20oKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAg
ICB7CisgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsK
KyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7CisgICAgICAgICAgICByZXNldEVmZmVj
dGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRa
b29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7CisgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgp
KTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRp
YWxab29tKCkpOworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVu
dFN0eWxlKCktPnpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpOworICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c2V0RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKKyAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnNldFpvb20oZG9jWm9vbSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7CisgICAgICAgICAgICByZXNldEVmZmVjdGl2
ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBpZiAoZmxvYXQgcGVyY2VudCA9IHBy
aW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCisgICAgICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0Wm9vbShwZXJjZW50IC8gMTAwLjBmKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29t
KHN0eWxlUmVzb2x2ZXIpOworICAgICAgICAgICAgaWYgKGZsb2F0IG51bWJlciA9IHByaW1pdGl2
ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCisgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c2V0Wm9vbShudW1iZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFByb3BlcnR5
SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eUhh
bmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVl
KTsKKyAgICB9Cit9OworCitjbGFzcyBBcHBseVByb3BlcnR5RGlzcGxheSB7Citwcml2YXRlOgor
ICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkRGlzcGxheVZhbHVlKFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIEVEaXNwbGF5IGRpc3BsYXlQcm9wZXJ0eVZhbHVlKQorICAgIHsKKyNp
ZiBFTkFCTEUoU1ZHKQorICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpICYmIHN0
eWxlUmVzb2x2ZXItPmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCisgICAgICAgICAgICByZXR1cm4gKGRp
c3BsYXlQcm9wZXJ0eVZhbHVlID09IElOTElORSB8fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBC
TE9DSyB8fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBOT05FKTsKKyNlbHNlCisgICAgICAgIFVO
VVNFRF9QQVJBTShzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlQ
cm9wZXJ0eVZhbHVlKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7CisgICAgICAgIEVEaXNwbGF5IGRpc3Bs
YXkgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5kaXNwbGF5KCk7CisgICAgICAgIGlm
ICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShk
aXNwbGF5KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShSZW5kZXJTdHlsZTo6aW5pdGlhbERp
c3BsYXkoKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
eworICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9ICpzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKTsKKworICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUo
c3R5bGVSZXNvbHZlciwgZGlzcGxheSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxW
YWx1ZSwgJmFwcGx5VmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlIDxDbGlwUGF0aE9wZXJh
dGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+KSwg
Q2xpcFBhdGhPcGVyYXRpb24qICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgorY2xhc3MgQXBwbHlQcm9w
ZXJ0eUNsaXBQYXRoIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJT
dHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IHZhbHVlKSB7IChzdHls
ZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Cisg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7CisgICAgICAgICAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJhc2ljU2hh
cGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgp
KSkpOworICAgICAgICAgICAgfQorI2lmIEVOQUJMRShTVkcpCisgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGNzc1VSTFZhbHVlID0gcHJpbWl0aXZl
VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBzdHls
ZVJlc29sdmVyLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChjc3NVUkxWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IEl0IGRvZXNuJ3Qgd29yayB3aXRoIGZvcndhcmQgb3IgZXh0ZXJu
YWwgU1ZHIHJlZmVyZW5jZXMgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTA0MDUpCisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgUmVmZXJlbmNlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShjc3NVUkxWYWx1ZSwgdXJs
LmZyYWdtZW50SWRlbnRpZmllcigpKSk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAg
fQorICAgIH0KKyAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAg
IHsKKyAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVs
dEJhc2U8Q2xpcFBhdGhPcGVyYXRpb24qLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxDbGlw
UGF0aE9wZXJhdGlvbj4sIHNldHRlckZ1bmN0aW9uLCBDbGlwUGF0aE9wZXJhdGlvbiosIGluaXRp
YWxGdW5jdGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFu
ZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigp
LCAmYXBwbHlWYWx1ZSk7CisgICAgfQorfTsKKworI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykK
K3RlbXBsYXRlIDxFeGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5j
dGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFzc1Jl
ZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiksIEV4Y2x1c2lvblNoYXBlVmFsdWUqICgqaW5pdGlh
bEZ1bmN0aW9uKSgpPgorY2xhc3MgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNoYXBlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQ
dHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24p
KHZhbHVlKTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsdWUpOworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlQXV0bykKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCAwKTsKKyAgICAgICAgICAgIC8vIEZJWE1FIEJ1ZyAxMDI1NzE6IExheW91dCBmb3Ig
dGhlIHZhbHVlICdvdXRzaWRlLXNoYXBlJyBpcyBub3QgeWV0IGltcGxlbWVudGVkCisgICAgICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU91dHNp
ZGVTaGFwZSkKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSk7CisgICAgICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7CisgICAgICAgICAgICAgICAg
UmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6
Y3JlYXRlU2hhcGVWYWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlciwgcHJpbWl0
aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0
eURlZmF1bHRCYXNlPEV4Y2x1c2lvblNoYXBlVmFsdWUqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1Jl
ZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiwgc2V0dGVyRnVuY3Rpb24sIEV4Y2x1c2lvblNoYXBl
VmFsdWUqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7CisgICAgICAgIHJldHVy
biBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0
aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOworICAgIH0KK307CisjZW5kaWYKKworI2lmIEVO
QUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKK2NsYXNzIEFwcGx5UHJvcGVydHlJbWFnZVJlc29s
dXRpb24geworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKKyAgICB7
CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25Tb3VyY2Us
ICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3Vy
Y2UsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRp
b25Tb3VyY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZT46OmFw
cGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBBcHBs
eVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpp
bWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNl
dEltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlE
LCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0
LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0
SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0
aW9uPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgQXBw
bHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxl
OjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0
eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJl
bmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbml0aWFsVmFs
dWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZh
dWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlv
blNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0
aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VS
ZXNvbHV0aW9uU25hcD46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHls
ZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRp
b24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBseUlu
aXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIENTU1ZhbHVlTGlzdCogdmFs
dWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOworICAgICAgICBJbWFn
ZVJlc29sdXRpb25Tb3VyY2Ugc291cmNlID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29s
dXRpb25Tb3VyY2UoKTsKKyAgICAgICAgSW1hZ2VSZXNvbHV0aW9uU25hcCBzbmFwID0gUmVuZGVy
U3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwKCk7CisgICAgICAgIGRvdWJsZSByZXNv
bHV0aW9uID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24oKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAg
ICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KGkpOworICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOworICAgICAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRnJvbUltYWdl
KQorICAgICAgICAgICAgICAgIHNvdXJjZSA9IEltYWdlUmVzb2x1dGlvbkZyb21JbWFnZTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
U25hcCkKKyAgICAgICAgICAgICAgICBzbmFwID0gSW1hZ2VSZXNvbHV0aW9uU25hcFBpeGVsczsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXNvbHV0aW9uID0gcHJpbWl0aXZl
VmFsdWUtPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCk7CisgICAg
ICAgIH0KKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9u
U291cmNlKHNvdXJjZSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEltYWdl
UmVzb2x1dGlvblNuYXAoc25hcCk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEltYWdlUmVzb2x1dGlvbihyZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUHJvcGVy
dHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5
SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFs
dWUpOworICAgIH0KK307CisjZW5kaWYKKworY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRJbmRlbnQg
eworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCisgICAgeworICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0SW5kZW50KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxl
KCktPnRleHRJbmRlbnQoKSk7CisjaWYgRU5BQkxFKENTUzNfVEVYVCkKKyAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEluZGVudExpbmUoc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKS0+dGV4dEluZGVudExpbmUoKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQorICAgIHsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dEluZGVudChSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRlbnQoKSk7CisjaWYgRU5BQkxFKENT
UzNfVEVYVCkKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEluZGVudExp
bmUoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50TGluZSgpKTsKKyNlbmRpZgorICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2
YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBb
IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IF0gLXdlYmtpdC1lYWNoLWxpbmUKKyAgICAgICAgLy8g
VGhlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJzZXI6OnBhcnNlVGV4dEluZGVudC4K
KyAgICAgICAgLy8gVGhlIHNlY29uZCB2YWx1ZSwgLXdlYmtpdC1lYWNoLWxpbmUgaXMgaGFuZGxl
ZCBvbmx5IHdoZW4gQ1NTM19URVhUIGlzIGVuYWJsZWQuCisKKyAgICAgICAgQ1NTVmFsdWVMaXN0
KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CisgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKKyAgICAg
ICAgTGVuZ3RoIGxlbmd0aE9yUGVyY2VudGFnZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZl
cnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBD
YWxjdWxhdGVkQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgQVNTRVJUKCFs
ZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZS5pc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dEluZGVudChsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZSk7CisK
KyNpZiBFTkFCTEUoQ1NTM19URVhUKQorICAgICAgICBBU1NFUlQodmFsdWVMaXN0LT5sZW5ndGgo
KSA8PSAyKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGVhY2hMaW5lVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlTGlzdC0+aXRlbSgxKSk7CisgICAgICAg
IGlmIChlYWNoTGluZVZhbHVlKSB7CisgICAgICAgICAgICBBU1NFUlQoZWFjaExpbmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdEVhY2hMaW5lKTsKKyAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRJbmRlbnRMaW5lKFRleHRJbmRlbnRFYWNoTGluZSk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
VGV4dEluZGVudExpbmUoVGV4dEluZGVudEZpcnN0TGluZSk7CisjZW5kaWYKKyAgICB9CisKKyAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxW
YWx1ZSwgJmFwcGx5VmFsdWUpOworICAgIH0KK307CisKK2NvbnN0IERlcHJlY2F0ZWRTdHlsZUJ1
aWxkZXImIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChEZXByZWNhdGVkU3R5bGVCdWlsZGVyLCBzdHlsZUJ1aWxk
ZXJJbnN0YW5jZSwgKCkpOworICAgIHJldHVybiBzdHlsZUJ1aWxkZXJJbnN0YW5jZTsKK30KKwor
RGVwcmVjYXRlZFN0eWxlQnVpbGRlcjo6RGVwcmVjYXRlZFN0eWxlQnVpbGRlcigpCit7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCisgICAgICAgIG1fcHJv
cGVydHlNYXBbaV0gPSBQcm9wZXJ0eUhhbmRsZXIoKTsKKworICAgIC8vIFBsZWFzZSBrZWVwIENT
UyBwcm9wZXJ0eSBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRlci4KKyAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudCwgQXBwbHlQcm9wZXJ0eUZpbGxM
YXllcjxFRmlsbEF0dGFjaG1lbnQsIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsIEJh
Y2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywg
JlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjppc0F0dGFjaG1lbnRT
ZXQsICZGaWxsTGF5ZXI6OmF0dGFjaG1lbnQsICZGaWxsTGF5ZXI6OnNldEF0dGFjaG1lbnQsICZG
aWxsTGF5ZXI6OmNsZWFyQXR0YWNobWVudCwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxBdHRhY2ht
ZW50LCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQ+OjpjcmVhdGVIYW5kbGVyKCkp
OworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwLCBBcHBs
eVByb3BlcnR5RmlsbExheWVyPEVGaWxsQm94LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwLCBC
YWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMs
ICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNDbGlwU2V0LCAm
RmlsbExheWVyOjpjbGlwLCAmRmlsbExheWVyOjpzZXRDbGlwLCAmRmlsbExheWVyOjpjbGVhckNs
aXAsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ2xpcCwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxD
bGlwPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IsIEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50
LCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZ3Jv
dW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IsICZS
ZW5kZXJTdHlsZTo6aW52YWxpZENvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsIEFwcGx5UHJvcGVydHlGaWxs
TGF5ZXI8U3R5bGVJbWFnZSosIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCBCYWNrZ3JvdW5k
RmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJT
dHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNJbWFnZVNldCwgJkZpbGxMYXll
cjo6aW1hZ2UsICZGaWxsTGF5ZXI6OnNldEltYWdlLCAmRmlsbExheWVyOjpjbGVhckltYWdlLCAm
RmlsbExheWVyOjppbml0aWFsRmlsbEltYWdlLCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEltYWdl
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kT3JpZ2luLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEVGaWxsQm94LCBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRPcmlnaW4sIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6
YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAm
RmlsbExheWVyOjppc09yaWdpblNldCwgJkZpbGxMYXllcjo6b3JpZ2luLCAmRmlsbExheWVyOjpz
ZXRPcmlnaW4sICZGaWxsTGF5ZXI6OmNsZWFyT3JpZ2luLCAmRmlsbExheWVyOjppbml0aWFsRmls
bE9yaWdpbiwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmlnaW4+OjpjcmVhdGVIYW5kbGVyKCkp
OworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgs
IEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8TGVuZ3RoLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3Np
dGlvblgsIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3Vu
ZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjppc1hQ
b3NpdGlvblNldCwgJkZpbGxMYXllcjo6eFBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRYUG9zaXRp
b24sICZGaWxsTGF5ZXI6OmNsZWFyWFBvc2l0aW9uLCAmRmlsbExheWVyOjppbml0aWFsRmlsbFhQ
b3NpdGlvbiwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24+OjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlv
blksIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8TGVuZ3RoLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRQ
b3NpdGlvblksIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dy
b3VuZExheWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjpp
c1lQb3NpdGlvblNldCwgJkZpbGxMYXllcjo6eVBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRZUG9z
aXRpb24sICZGaWxsTGF5ZXI6OmNsZWFyWVBvc2l0aW9uLCAmRmlsbExheWVyOjppbml0aWFsRmls
bFlQb3NpdGlvbiwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxZUG9zaXRpb24+OjpjcmVhdGVIYW5k
bGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBl
YXRYLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEVGaWxsUmVwZWF0LCBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRSZXBlYXRYLCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0Jh
Y2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXll
cjo6aXNSZXBlYXRYU2V0LCAmRmlsbExheWVyOjpyZXBlYXRYLCAmRmlsbExheWVyOjpzZXRSZXBl
YXRYLCAmRmlsbExheWVyOjpjbGVhclJlcGVhdFgsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVw
ZWF0WCwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRYPjo6Y3JlYXRlSGFuZGxlcigpKTsK
KyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WSwgQXBw
bHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbFJlcGVhdCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVw
ZWF0WSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5k
TGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzUmVw
ZWF0WVNldCwgJkZpbGxMYXllcjo6cmVwZWF0WSwgJkZpbGxMYXllcjo6c2V0UmVwZWF0WSwgJkZp
bGxMYXllcjo6Y2xlYXJSZXBlYXRZLCAmRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFksICZD
U1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsIEFwcGx5UHJvcGVydHlG
aWxsTGF5ZXI8RmlsbFNpemUsIENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsIEJhY2tncm91bmRG
aWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVycywgJlJlbmRlclN0
eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjppc1NpemVTZXQsICZGaWxsTGF5ZXI6
OnNpemUsICZGaWxsTGF5ZXI6OnNldFNpemUsICZGaWxsTGF5ZXI6OmNsZWFyU2l6ZSwgJkZpbGxM
YXllcjo6aW5pdGlhbEZpbGxTaXplLCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemU+OjpjcmVh
dGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbUNvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwgJlJlbmRl
clN0eWxlOjpib3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21D
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yLCAmUmVu
ZGVyU3R5bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21MZWZ0UmFkaXVzLCBBcHBseVByb3BlcnR5Qm9yZGVy
UmFkaXVzPCZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxl
OjpzZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJS
YWRpdXM+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCBBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVzPCZS
ZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9y
ZGVyQm90dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclJhZGl1cz46
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9y
ZGVyQm90dG9tU3R5bGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVCb3JkZXJTdHlsZSwgJlJlbmRl
clN0eWxlOjpib3JkZXJCb3R0b21TdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNl
dEJvcmRlckJvdHRvbVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJv
cmRlclN0eWxlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg8dW5z
aWduZWQsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0
Qm9yZGVyQm90dG9tV2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlcldpZHRoLCBOb3Jt
YWxEaXNhYmxlZCwgVGhpY2tuZXNzRW5hYmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyQ29sbGFwc2UsIEFwcGx5UHJvcGVydHlE
ZWZhdWx0PEVCb3JkZXJDb2xsYXBzZSwgJlJlbmRlclN0eWxlOjpib3JkZXJDb2xsYXBzZSwgRUJv
cmRlckNvbGxhcHNlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckNvbGxhcHNlLCBFQm9yZGVyQ29s
bGFwc2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlckNvbGxhcHNlPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91dHNl
dCwgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8Qm9yZGVySW1hZ2UsIE91dHNldD46
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9y
ZGVySW1hZ2VSZXBlYXQsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPEJvcmRlcklt
YWdlLCBSZXBlYXQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2UsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlm
aWVyPEJvcmRlckltYWdlLCBTbGljZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2UsIEFwcGx5UHJvcGVydHlCb3Jk
ZXJJbWFnZVNvdXJjZTxDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6
OmJvcmRlckltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlU291cmNlLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJJbWFnZVNvdXJjZT46OmNyZWF0ZUhhbmRsZXIoKSk7
CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aCwgQXBw
bHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8Qm9yZGVySW1hZ2UsIFdpZHRoPjo6Y3JlYXRl
SGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0
Q29sb3IsIEFwcGx5UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50LCAmUmVuZGVyU3R5
bGU6OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6
Y29sb3I+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eUJvcmRlckxlZnRTdHlsZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJvcmRlclN0eWxlLCAm
UmVuZGVyU3R5bGU6OmJvcmRlckxlZnRTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6
OnNldEJvcmRlckxlZnRTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxC
b3JkZXJTdHlsZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoLCBBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDx1bnNp
Z25lZCwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9y
ZGVyTGVmdFdpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJXaWR0aCwgTm9ybWFsRGlz
YWJsZWQsIFRoaWNrbmVzc0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsIEFwcGx5UHJvcGVydHlDb2xv
cjxOb0luaGVyaXRGcm9tUGFyZW50LCAmUmVuZGVyU3R5bGU6OmJvcmRlclJpZ2h0Q29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVk
TGlua0JvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3I+OjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGUs
IEFwcGx5UHJvcGVydHlEZWZhdWx0PEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpib3JkZXJS
aWdodFN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRTdHls
ZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyUmln
aHRXaWR0aCwgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg8dW5zaWduZWQsICZSZW5kZXJTdHls
ZTo6Ym9yZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodFdpZHRoLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJXaWR0aCwgTm9ybWFsRGlzYWJsZWQsIFRoaWNrbmVz
c0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eUJvcmRlclRvcENvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBh
cmVudCwgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3Jk
ZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlclRvcENvbG9yLCAm
UmVuZGVyU3R5bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzLCBBcHBseVByb3BlcnR5Qm9yZGVy
UmFkaXVzPCZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpz
ZXRCb3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJSYWRpdXM+
OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJv
cmRlclRvcFJpZ2h0UmFkaXVzLCBBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVzPCZSZW5kZXJTdHls
ZTo6Ym9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wUmlnaHRS
YWRpdXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclJhZGl1cz46OmNyZWF0ZUhhbmRsZXIo
KSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGUsIEFw
cGx5UHJvcGVydHlEZWZhdWx0PEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BT
dHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcFN0eWxlLCBFQm9y
ZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwg
QXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg8dW5zaWduZWQsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
VG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEJvcmRlcldpZHRoLCBOb3JtYWxEaXNhYmxlZCwgVGhpY2tuZXNzRW5hYmxlZD46OmNy
ZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm90dG9t
LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6Ym90dG9tLCAmUmVuZGVyU3R5bGU6
OnNldEJvdHRvbSwgJlJlbmRlclN0eWxlOjppbml0aWFsT2Zmc2V0LCBBdXRvRW5hYmxlZD46OmNy
ZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm94U2l6
aW5nLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm94U2l6aW5nLCAmUmVuZGVyU3R5bGU6OmJveFNp
emluZywgRUJveFNpemluZywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaXppbmcsIEVCb3hTaXppbmcs
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFNpemluZz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Q2FwdGlvblNpZGUsIEFwcGx5UHJvcGVydHlE
ZWZhdWx0PEVDYXB0aW9uU2lkZSwgJlJlbmRlclN0eWxlOjpjYXB0aW9uU2lkZSwgRUNhcHRpb25T
aWRlLCAmUmVuZGVyU3R5bGU6OnNldENhcHRpb25TaWRlLCBFQ2FwdGlvblNpZGUsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbENhcHRpb25TaWRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlDbGVhciwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUNsZWFy
LCAmUmVuZGVyU3R5bGU6OmNsZWFyLCBFQ2xlYXIsICZSZW5kZXJTdHlsZTo6c2V0Q2xlYXIsIEVD
bGVhciwgJlJlbmRlclN0eWxlOjppbml0aWFsQ2xlYXI+OjpjcmVhdGVIYW5kbGVyKCkpOworICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUNsaXAsIEFwcGx5UHJvcGVydHlDbGlwOjpj
cmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUNvbG9y
LCBBcHBseVByb3BlcnR5Q29sb3I8SW5oZXJpdEZyb21QYXJlbnQsICZSZW5kZXJTdHlsZTo6Y29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtD
b2xvciwgJlJlbmRlclN0eWxlOjppbnZhbGlkQ29sb3IsIFJlbmRlclN0eWxlOjppbml0aWFsQ29s
b3I+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eUNvdW50ZXJJbmNyZW1lbnQsIEFwcGx5UHJvcGVydHlDb3VudGVyPEluY3JlbWVudD46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Q291bnRlclJl
c2V0LCBBcHBseVByb3BlcnR5Q291bnRlcjxSZXNldD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Q3Vyc29yLCBBcHBseVByb3BlcnR5Q3Vyc29y
OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eURp
cmVjdGlvbiwgQXBwbHlQcm9wZXJ0eURpcmVjdGlvbjwmUmVuZGVyU3R5bGU6OmRpcmVjdGlvbiwg
JlJlbmRlclN0eWxlOjpzZXREaXJlY3Rpb24sIFJlbmRlclN0eWxlOjppbml0aWFsRGlyZWN0aW9u
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlE
aXNwbGF5LCBBcHBseVByb3BlcnR5RGlzcGxheTo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlFbXB0eUNlbGxzLCBBcHBseVByb3BlcnR5RGVmYXVs
dDxFRW1wdHlDZWxsLCAmUmVuZGVyU3R5bGU6OmVtcHR5Q2VsbHMsIEVFbXB0eUNlbGwsICZSZW5k
ZXJTdHlsZTo6c2V0RW1wdHlDZWxscywgRUVtcHR5Q2VsbCwgJlJlbmRlclN0eWxlOjppbml0aWFs
RW1wdHlDZWxscz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5RmxvYXQsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVGbG9hdCwgJlJlbmRlclN0eWxl
OjpmbG9hdGluZywgRUZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEZsb2F0aW5nLCBFRmxvYXQsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEZsb2F0aW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBBcHBseVByb3BlcnR5Rm9udEZh
bWlseTo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlGb250U2l6ZSwgQXBwbHlQcm9wZXJ0eUZvbnRTaXplOjpjcmVhdGVIYW5kbGVyKCkpOworICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgQXBwbHlQcm9wZXJ0eUZv
bnQ8Rm9udEl0YWxpYywgJkZvbnREZXNjcmlwdGlvbjo6aXRhbGljLCAmRm9udERlc2NyaXB0aW9u
OjpzZXRJdGFsaWMsIEZvbnRJdGFsaWNPZmY+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBBcHBseVByb3BlcnR5Rm9udDxG
b250U21hbGxDYXBzLCAmRm9udERlc2NyaXB0aW9uOjpzbWFsbENhcHMsICZGb250RGVzY3JpcHRp
b246OnNldFNtYWxsQ2FwcywgRm9udFNtYWxsQ2Fwc09mZj46OmNyZWF0ZUhhbmRsZXIoKSk7Cisg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Rm9udFdlaWdodCwgQXBwbHlQcm9wZXJ0
eUZvbnRXZWlnaHQ6OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5SGVpZ2h0LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6aGVpZ2h0
LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdodCwgJlJlbmRlclN0eWxlOjppbml0aWFsU2l6ZSwgQXV0
b0VuYWJsZWQsIExlZ2FjeUludHJpbnNpY0VuYWJsZWQsIEludHJpbnNpY0Rpc2FibGVkLCBOb25l
RGlzYWJsZWQsIFVuZGVmaW5lZERpc2FibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyNpZiBFTkFC
TEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eUltYWdlT3JpZW50YXRpb24sIEFwcGx5UHJvcGVydHlEZWZhdWx0PEltYWdlT3JpZW50YXRp
b25FbnVtLCAmUmVuZGVyU3R5bGU6OmltYWdlT3JpZW50YXRpb24sIEltYWdlT3JpZW50YXRpb25F
bnVtLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlT3JpZW50YXRpb24sIEltYWdlT3JpZW50YXRpb25F
bnVtLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZU9yaWVudGF0aW9uPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyNlbmRpZgorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUltYWdlUmVu
ZGVyaW5nLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFSW1hZ2VSZW5kZXJpbmcsICZSZW5kZXJTdHls
ZTo6aW1hZ2VSZW5kZXJpbmcsIEVJbWFnZVJlbmRlcmluZywgJlJlbmRlclN0eWxlOjpzZXRJbWFn
ZVJlbmRlcmluZywgRUltYWdlUmVuZGVyaW5nLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJl
bmRlcmluZz46OmNyZWF0ZUhhbmRsZXIoKSk7CisjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVU
SU9OKQorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbiwg
QXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbjo6Y3JlYXRlSGFuZGxlcigpKTsKKyNlbmRpZgor
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUxlZnQsIEFwcGx5UHJvcGVydHlMZW5n
dGg8JlJlbmRlclN0eWxlOjpsZWZ0LCAmUmVuZGVyU3R5bGU6OnNldExlZnQsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbE9mZnNldCwgQXV0b0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUxldHRlclNwYWNpbmcsIEFwcGx5UHJvcGVydHlD
b21wdXRlTGVuZ3RoPGludCwgJlJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5
bGU6OnNldExldHRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6aW5pdGlhbExldHRlcldvcmRTcGFj
aW5nLCBOb3JtYWxFbmFibGVkLCBUaGlja25lc3NEaXNhYmxlZCwgU1ZHWm9vbUVuYWJsZWQ+Ojpj
cmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQsIEFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlLCBBcHBseVByb3BlcnR5
U3R5bGVJbWFnZTwmUmVuZGVyU3R5bGU6Omxpc3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6OnNl
dExpc3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxMaXN0U3R5bGVJbWFnZSwgQ1NT
UHJvcGVydHlMaXN0U3R5bGVJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5TGlzdFN0eWxlUG9zaXRpb24sIEFwcGx5UHJvcGVydHlEZWZh
dWx0PEVMaXN0U3R5bGVQb3NpdGlvbiwgJlJlbmRlclN0eWxlOjpsaXN0U3R5bGVQb3NpdGlvbiwg
RUxpc3RTdHlsZVBvc2l0aW9uLCAmUmVuZGVyU3R5bGU6OnNldExpc3RTdHlsZVBvc2l0aW9uLCBF
TGlzdFN0eWxlUG9zaXRpb24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbExpc3RTdHlsZVBvc2l0aW9u
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlM
aXN0U3R5bGVUeXBlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFTGlzdFN0eWxlVHlwZSwgJlJlbmRl
clN0eWxlOjpsaXN0U3R5bGVUeXBlLCBFTGlzdFN0eWxlVHlwZSwgJlJlbmRlclN0eWxlOjpzZXRM
aXN0U3R5bGVUeXBlLCBFTGlzdFN0eWxlVHlwZSwgJlJlbmRlclN0eWxlOjppbml0aWFsTGlzdFN0
eWxlVHlwZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5TWFyZ2luQm90dG9tLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bWFy
Z2luQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjpp
bml0aWFsTWFyZ2luLCBBdXRvRW5hYmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJv
cGVydHlIYW5kbGVyKENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwm
UmVuZGVyU3R5bGU6Om1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luTGVmdCwgJlJl
bmRlclN0eWxlOjppbml0aWFsTWFyZ2luLCBBdXRvRW5hYmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7
CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsIEFwcGx5UHJv
cGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjptYXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjpzZXRN
YXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjppbml0aWFsTWFyZ2luLCBBdXRvRW5hYmxlZD46OmNy
ZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5TWFyZ2lu
VG9wLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bWFyZ2luVG9wLCAmUmVuZGVy
U3R5bGU6OnNldE1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjppbml0aWFsTWFyZ2luLCBBdXRvRW5h
YmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5TWF4SGVpZ2h0LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bWF4SGVpZ2h0
LCAmUmVuZGVyU3R5bGU6OnNldE1heEhlaWdodCwgJlJlbmRlclN0eWxlOjppbml0aWFsTWF4U2l6
ZSwgQXV0b0VuYWJsZWQsIExlZ2FjeUludHJpbnNpY0VuYWJsZWQsIEludHJpbnNpY0Rpc2FibGVk
LCBOb25lRW5hYmxlZCwgVW5kZWZpbmVkRW5hYmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5TWF4V2lkdGgsIEFwcGx5UHJvcGVydHlMZW5n
dGg8JlJlbmRlclN0eWxlOjptYXhXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRNYXhXaWR0aCwgJlJl
bmRlclN0eWxlOjppbml0aWFsTWF4U2l6ZSwgQXV0b0VuYWJsZWQsIExlZ2FjeUludHJpbnNpY0Vu
YWJsZWQsIEludHJpbnNpY0VuYWJsZWQsIE5vbmVFbmFibGVkLCBVbmRlZmluZWRFbmFibGVkPjo6
Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlNaW5I
ZWlnaHQsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjptaW5IZWlnaHQsICZSZW5k
ZXJTdHlsZTo6c2V0TWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNaW5TaXplLCBBdXRv
RW5hYmxlZCwgTGVnYWN5SW50cmluc2ljRW5hYmxlZCwgSW50cmluc2ljRGlzYWJsZWQ+OjpjcmVh
dGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU1pbldpZHRo
LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bWluV2lkdGgsICZSZW5kZXJTdHls
ZTo6c2V0TWluV2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1pblNpemUsIEF1dG9FbmFibGVk
LCBMZWdhY3lJbnRyaW5zaWNFbmFibGVkLCBJbnRyaW5zaWNFbmFibGVkPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPcGFjaXR5LCBBcHBseVBy
b3BlcnR5RGVmYXVsdDxmbG9hdCwgJlJlbmRlclN0eWxlOjpvcGFjaXR5LCBmbG9hdCwgJlJlbmRl
clN0eWxlOjpzZXRPcGFjaXR5LCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsT3BhY2l0eT46
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5T3Jw
aGFucywgQXBwbHlQcm9wZXJ0eUF1dG88c2hvcnQsICZSZW5kZXJTdHlsZTo6b3JwaGFucywgJlJl
bmRlclN0eWxlOjpzZXRPcnBoYW5zLCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9PcnBoYW5zLCAmUmVu
ZGVyU3R5bGU6OnNldEhhc0F1dG9PcnBoYW5zPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IsIEFwcGx5UHJvcGVydHlDb2xv
cjxOb0luaGVyaXRGcm9tUGFyZW50LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVDb2xvciwgJlJlbmRl
clN0eWxlOjpzZXRPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtPdXRs
aW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3I+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQsIEFwcGx5UHJvcGVydHlD
b21wdXRlTGVuZ3RoPGludCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5
bGU6OnNldE91dGxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVPZmZzZXQ+
OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU91
dGxpbmVTdHlsZSwgQXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6Y3JlYXRlSGFuZGxlcigpKTsK
KyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGgsIEFwcGx5UHJv
cGVydHlDb21wdXRlTGVuZ3RoPHVuc2lnbmVkIHNob3J0LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVX
aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bE91dGxpbmVXaWR0aCwgTm9ybWFsRGlzYWJsZWQsIFRoaWNrbmVzc0VuYWJsZWQ+OjpjcmVhdGVI
YW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU92ZXJmbG93V3Jh
cCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RU92ZXJmbG93V3JhcCwgJlJlbmRlclN0eWxlOjpvdmVy
Zmxvd1dyYXAsIEVPdmVyZmxvd1dyYXAsICZSZW5kZXJTdHlsZTo6c2V0T3ZlcmZsb3dXcmFwLCBF
T3ZlcmZsb3dXcmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdmVyZmxvd1dyYXA+OjpjcmVhdGVI
YW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU92ZXJmbG93WCwg
QXBwbHlQcm9wZXJ0eURlZmF1bHQ8RU92ZXJmbG93LCAmUmVuZGVyU3R5bGU6Om92ZXJmbG93WCwg
RU92ZXJmbG93LCAmUmVuZGVyU3R5bGU6OnNldE92ZXJmbG93WCwgRU92ZXJmbG93LCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxPdmVyZmxvd1g+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eU92ZXJmbG93WSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RU92
ZXJmbG93LCAmUmVuZGVyU3R5bGU6Om92ZXJmbG93WSwgRU92ZXJmbG93LCAmUmVuZGVyU3R5bGU6
OnNldE92ZXJmbG93WSwgRU92ZXJmbG93LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdmVyZmxvd1k+
OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVBh
ZGRpbmdCb3R0b20sIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpwYWRkaW5nQm90
dG9tLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdCb3R0b20sICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFBhZGRpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVBhZGRpbmdMZWZ0LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6cGFk
ZGluZ0xlZnQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0xlZnQsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbFBhZGRpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6
OnBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nUmlnaHQsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbFBhZGRpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0
eWxlOjpwYWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdUb3AsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbFBhZGRpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFUGFn
ZUJyZWFrLCAmUmVuZGVyU3R5bGU6OnBhZ2VCcmVha0FmdGVyLCBFUGFnZUJyZWFrLCAmUmVuZGVy
U3R5bGU6OnNldFBhZ2VCcmVha0FmdGVyLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxQYWdlQnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVBhZ2VCcmVha0JlZm9yZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBhZ2VCcmVh
aywgJlJlbmRlclN0eWxlOjpwYWdlQnJlYWtCZWZvcmUsIEVQYWdlQnJlYWssICZSZW5kZXJTdHls
ZTo6c2V0UGFnZUJyZWFrQmVmb3JlLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQ
YWdlQnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVBhZ2VCcmVha0luc2lkZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBhZ2VCcmVhaywg
JlJlbmRlclN0eWxlOjpwYWdlQnJlYWtJbnNpZGUsIEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6
c2V0UGFnZUJyZWFrSW5zaWRlLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQYWdl
QnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVBvaW50ZXJFdmVudHMsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVQb2ludGVyRXZlbnRzLCAm
UmVuZGVyU3R5bGU6OnBvaW50ZXJFdmVudHMsIEVQb2ludGVyRXZlbnRzLCAmUmVuZGVyU3R5bGU6
OnNldFBvaW50ZXJFdmVudHMsIEVQb2ludGVyRXZlbnRzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQ
b2ludGVyRXZlbnRzPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlQb3NpdGlvbiwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBvc2l0aW9uLCAmUmVu
ZGVyU3R5bGU6OnBvc2l0aW9uLCBFUG9zaXRpb24sICZSZW5kZXJTdHlsZTo6c2V0UG9zaXRpb24s
IEVQb3NpdGlvbiwgJlJlbmRlclN0eWxlOjppbml0aWFsUG9zaXRpb24+OjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVJlc2l6ZSwgQXBwbHlQcm9w
ZXJ0eVJlc2l6ZTo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlSaWdodCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OnJpZ2h0LCAm
UmVuZGVyU3R5bGU6OnNldFJpZ2h0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPZmZzZXQsIEF1dG9F
bmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlTaXplLCBBcHBseVByb3BlcnR5UGFnZVNpemU6OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5U3BlYWssIEFwcGx5UHJvcGVydHlEZWZhdWx0
PEVTcGVhaywgJlJlbmRlclN0eWxlOjpzcGVhaywgRVNwZWFrLCAmUmVuZGVyU3R5bGU6OnNldFNw
ZWFrLCBFU3BlYWssICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNwZWFrPjo6Y3JlYXRlSGFuZGxlcigp
KTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlUYWJsZUxheW91dCwgQXBwbHlQ
cm9wZXJ0eURlZmF1bHQ8RVRhYmxlTGF5b3V0LCAmUmVuZGVyU3R5bGU6OnRhYmxlTGF5b3V0LCBF
VGFibGVMYXlvdXQsICZSZW5kZXJTdHlsZTo6c2V0VGFibGVMYXlvdXQsIEVUYWJsZUxheW91dCwg
JlJlbmRlclN0eWxlOjppbml0aWFsVGFibGVMYXlvdXQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVRhYlNpemUsIEFwcGx5UHJvcGVydHlEZWZh
dWx0PHVuc2lnbmVkLCAmUmVuZGVyU3R5bGU6OnRhYlNpemUsIHVuc2lnbmVkLCAmUmVuZGVyU3R5
bGU6OnNldFRhYlNpemUsIHVuc2lnbmVkLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUYWJTaXplPjo6
Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlUZXh0
QWxpZ24sIEFwcGx5UHJvcGVydHlUZXh0QWxpZ246OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIEFwcGx5UHJvcGVydHlU
ZXh0RGVjb3JhdGlvbjo6Y3JlYXRlSGFuZGxlcigpKTsKKyNpZiBFTkFCTEUoQ1NTM19URVhUKQor
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uTGlu
ZSwgQXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uOjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uU3R5bGUsIEFw
cGx5UHJvcGVydHlEZWZhdWx0PFRleHREZWNvcmF0aW9uU3R5bGUsICZSZW5kZXJTdHlsZTo6dGV4
dERlY29yYXRpb25TdHlsZSwgVGV4dERlY29yYXRpb25TdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRU
ZXh0RGVjb3JhdGlvblN0eWxlLCBUZXh0RGVjb3JhdGlvblN0eWxlLCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxUZXh0RGVjb3JhdGlvblN0eWxlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbkNvbG9yLCBBcHBseVBy
b3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjp0ZXh0RGVjb3Jh
dGlvbkNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHREZWNvcmF0aW9uQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0RGVjb3JhdGlvbkNvbG9yLCAmUmVuZGVyU3R5bGU6OmNv
bG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlXZWJraXRUZXh0QWxpZ25MYXN0LCBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0QWxpZ25MYXN0
LCAmUmVuZGVyU3R5bGU6OnRleHRBbGlnbkxhc3QsIFRleHRBbGlnbkxhc3QsICZSZW5kZXJTdHls
ZTo6c2V0VGV4dEFsaWduTGFzdCwgVGV4dEFsaWduTGFzdCwgJlJlbmRlclN0eWxlOjppbml0aWFs
VGV4dEFsaWduTGFzdD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0VGV4dEp1c3RpZnksIEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHRK
dXN0aWZ5LCAmUmVuZGVyU3R5bGU6OnRleHRKdXN0aWZ5LCBUZXh0SnVzdGlmeSwgJlJlbmRlclN0
eWxlOjpzZXRUZXh0SnVzdGlmeSwgVGV4dEp1c3RpZnksICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRl
eHRKdXN0aWZ5Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRUZXh0VW5kZXJsaW5lUG9zaXRpb24sIEFwcGx5UHJvcGVydHlUZXh0VW5k
ZXJsaW5lUG9zaXRpb246OmNyZWF0ZUhhbmRsZXIoKSk7CisjZW5kaWYgLy8gQ1NTM19URVhUCisg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VGV4dEluZGVudCwgQXBwbHlQcm9wZXJ0
eVRleHRJbmRlbnQ6OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5VGV4dE92ZXJmbG93LCBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0T3ZlcmZsb3cs
ICZSZW5kZXJTdHlsZTo6dGV4dE92ZXJmbG93LCBUZXh0T3ZlcmZsb3csICZSZW5kZXJTdHlsZTo6
c2V0VGV4dE92ZXJmbG93LCBUZXh0T3ZlcmZsb3csICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRP
dmVyZmxvdz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5VGV4dFJlbmRlcmluZywgQXBwbHlQcm9wZXJ0eUZvbnQ8VGV4dFJlbmRlcmluZ01vZGUs
ICZGb250RGVzY3JpcHRpb246OnRleHRSZW5kZXJpbmdNb2RlLCAmRm9udERlc2NyaXB0aW9uOjpz
ZXRUZXh0UmVuZGVyaW5nTW9kZSwgQXV0b1RleHRSZW5kZXJpbmc+OjpjcmVhdGVIYW5kbGVyKCkp
OworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm0sIEFwcGx5
UHJvcGVydHlEZWZhdWx0PEVUZXh0VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnRleHRUcmFuc2Zv
cm0sIEVUZXh0VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnNldFRleHRUcmFuc2Zvcm0sIEVUZXh0
VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0VHJhbnNmb3JtPjo6Y3JlYXRlSGFu
ZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlUb3AsIEFwcGx5UHJv
cGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wLCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxPZmZzZXQsIEF1dG9FbmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsK
KyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgQXBwbHlQcm9w
ZXJ0eURlZmF1bHQ8RVVuaWNvZGVCaWRpLCAmUmVuZGVyU3R5bGU6OnVuaWNvZGVCaWRpLCBFVW5p
Y29kZUJpZGksICZSZW5kZXJTdHlsZTo6c2V0VW5pY29kZUJpZGksIEVVbmljb2RlQmlkaSwgJlJl
bmRlclN0eWxlOjppbml0aWFsVW5pY29kZUJpZGk+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24sIEFwcGx5UHJvcGVydHlW
ZXJ0aWNhbEFsaWduOjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVZpc2liaWxpdHksIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVWaXNpYmlsaXR5LCAm
UmVuZGVyU3R5bGU6OnZpc2liaWxpdHksIEVWaXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnNldFZp
c2liaWxpdHksIEVWaXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxWaXNpYmlsaXR5Pjo6
Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRBbmltYXRpb25EZWxheSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxkb3VibGUsICZBbmltYXRp
b246OmRlbGF5LCAmQW5pbWF0aW9uOjpzZXREZWxheSwgJkFuaW1hdGlvbjo6aXNEZWxheVNldCwg
JkFuaW1hdGlvbjo6Y2xlYXJEZWxheSwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkRlbGF5
LCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRGVsYXksICZSZW5kZXJTdHlsZTo6YWNjZXNz
QW5pbWF0aW9ucywgJlJlbmRlclN0eWxlOjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsK
KyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rp
b24sIEFwcGx5UHJvcGVydHlBbmltYXRpb248QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24s
ICZBbmltYXRpb246OmRpcmVjdGlvbiwgJkFuaW1hdGlvbjo6c2V0RGlyZWN0aW9uLCAmQW5pbWF0
aW9uOjppc0RpcmVjdGlvblNldCwgJkFuaW1hdGlvbjo6Y2xlYXJEaXJlY3Rpb24sICZBbmltYXRp
b246OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24sICZDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRp
b25EaXJlY3Rpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5pbWF0aW9ucywgJlJlbmRlclN0eWxl
OjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EdXJhdGlvbiwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlv
bjxkb3VibGUsICZBbmltYXRpb246OmR1cmF0aW9uLCAmQW5pbWF0aW9uOjpzZXREdXJhdGlvbiwg
JkFuaW1hdGlvbjo6aXNEdXJhdGlvblNldCwgJkFuaW1hdGlvbjo6Y2xlYXJEdXJhdGlvbiwgJkFu
aW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkR1cmF0aW9uLCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5p
bWF0aW9uRHVyYXRpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5pbWF0aW9ucywgJlJlbmRlclN0
eWxlOjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25GaWxsTW9kZSwgQXBwbHlQcm9wZXJ0eUFuaW1h
dGlvbjx1bnNpZ25lZCwgJkFuaW1hdGlvbjo6ZmlsbE1vZGUsICZBbmltYXRpb246OnNldEZpbGxN
b2RlLCAmQW5pbWF0aW9uOjppc0ZpbGxNb2RlU2V0LCAmQW5pbWF0aW9uOjpjbGVhckZpbGxNb2Rl
LCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRmlsbE1vZGUsICZDU1NUb1N0eWxlTWFwOjpt
YXBBbmltYXRpb25GaWxsTW9kZSwgJlJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVu
ZGVyU3R5bGU6OmFuaW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50LCBBcHBseVBy
b3BlcnR5QW5pbWF0aW9uPGRvdWJsZSwgJkFuaW1hdGlvbjo6aXRlcmF0aW9uQ291bnQsICZBbmlt
YXRpb246OnNldEl0ZXJhdGlvbkNvdW50LCAmQW5pbWF0aW9uOjppc0l0ZXJhdGlvbkNvdW50U2V0
LCAmQW5pbWF0aW9uOjpjbGVhckl0ZXJhdGlvbkNvdW50LCAmQW5pbWF0aW9uOjppbml0aWFsQW5p
bWF0aW9uSXRlcmF0aW9uQ291bnQsICZDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25JdGVyYXRp
b25Db3VudCwgJlJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVuZGVyU3R5bGU6OmFu
aW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWUsIEFwcGx5UHJvcGVydHlBbmltYXRpb248Y29uc3Qg
U3RyaW5nJiwgJkFuaW1hdGlvbjo6bmFtZSwgJkFuaW1hdGlvbjo6c2V0TmFtZSwgJkFuaW1hdGlv
bjo6aXNOYW1lU2V0LCAmQW5pbWF0aW9uOjpjbGVhck5hbWUsICZBbmltYXRpb246OmluaXRpYWxB
bmltYXRpb25OYW1lLCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uTmFtZSwgJlJlbmRlclN0
eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVuZGVyU3R5bGU6OmFuaW1hdGlvbnM+OjpjcmVhdGVI
YW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFuaW1h
dGlvblBsYXlTdGF0ZSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxFQW5pbVBsYXlTdGF0ZSwgJkFu
aW1hdGlvbjo6cGxheVN0YXRlLCAmQW5pbWF0aW9uOjpzZXRQbGF5U3RhdGUsICZBbmltYXRpb246
OmlzUGxheVN0YXRlU2V0LCAmQW5pbWF0aW9uOjpjbGVhclBsYXlTdGF0ZSwgJkFuaW1hdGlvbjo6
aW5pdGlhbEFuaW1hdGlvblBsYXlTdGF0ZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblBs
YXlTdGF0ZSwgJlJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVuZGVyU3R5bGU6OmFu
aW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uLCBBcHBseVByb3BlcnR5QW5pbWF0
aW9uPGNvbnN0IFBhc3NSZWZQdHI8VGltaW5nRnVuY3Rpb24+LCAmQW5pbWF0aW9uOjp0aW1pbmdG
dW5jdGlvbiwgJkFuaW1hdGlvbjo6c2V0VGltaW5nRnVuY3Rpb24sICZBbmltYXRpb246OmlzVGlt
aW5nRnVuY3Rpb25TZXQsICZBbmltYXRpb246OmNsZWFyVGltaW5nRnVuY3Rpb24sICZBbmltYXRp
b246OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbiwgJkNTU1RvU3R5bGVNYXA6Om1hcEFu
aW1hdGlvblRpbWluZ0Z1bmN0aW9uLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0FuaW1hdGlvbnMsICZS
ZW5kZXJTdHlsZTo6YW5pbWF0aW9ucz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QXBwZWFyYW5jZSwgQXBwbHlQcm9wZXJ0eURlZmF1
bHQ8Q29udHJvbFBhcnQsICZSZW5kZXJTdHlsZTo6YXBwZWFyYW5jZSwgQ29udHJvbFBhcnQsICZS
ZW5kZXJTdHlsZTo6c2V0QXBwZWFyYW5jZSwgQ29udHJvbFBhcnQsICZSZW5kZXJTdHlsZTo6aW5p
dGlhbEFwcGVhcmFuY2U+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLCBBcHBseVByb3BlcnR5QXNwZWN0UmF0aW86
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0QmFja2ZhY2VWaXNpYmlsaXR5LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQmFja2ZhY2VWaXNp
YmlsaXR5LCAmUmVuZGVyU3R5bGU6OmJhY2tmYWNlVmlzaWJpbGl0eSwgRUJhY2tmYWNlVmlzaWJp
bGl0eSwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZmFjZVZpc2liaWxpdHksIEVCYWNrZmFjZVZpc2li
aWxpdHksICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJhY2tmYWNlVmlzaWJpbGl0eT46OmNyZWF0ZUhh
bmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2dy
b3VuZENsaXAsIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXApOworICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGUsIEFwcGx5UHJvcGVydHlG
aWxsTGF5ZXI8Q29tcG9zaXRlT3BlcmF0b3IsIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENv
bXBvc2l0ZSwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3Jv
dW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6Omlz
Q29tcG9zaXRlU2V0LCAmRmlsbExheWVyOjpjb21wb3NpdGUsICZGaWxsTGF5ZXI6OnNldENvbXBv
c2l0ZSwgJkZpbGxMYXllcjo6Y2xlYXJDb21wb3NpdGUsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxs
Q29tcG9zaXRlLCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0ZT46OmNyZWF0ZUhhbmRs
ZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3Vu
ZE9yaWdpbiwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luKTsKKyAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZSwgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kU2l6ZSk7CisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCbGVuZE1vZGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEJs
ZW5kTW9kZSwgJlJlbmRlclN0eWxlOjpibGVuZE1vZGUsIEJsZW5kTW9kZSwgJlJlbmRlclN0eWxl
OjpzZXRCbGVuZE1vZGUsIEJsZW5kTW9kZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQmxlbmRNb2Rl
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRCYWNrZ3JvdW5kQmxlbmRNb2RlLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEJsZW5kTW9k
ZSwgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQmxlbmRNb2RlLCBCYWNrZ3JvdW5kRmlsbExh
eWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6
YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNCbGVuZE1vZGVTZXQsICZGaWxsTGF5ZXI6
OmJsZW5kTW9kZSwgJkZpbGxMYXllcjo6c2V0QmxlbmRNb2RlLCAmRmlsbExheWVyOjpjbGVhckJs
ZW5kTW9kZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxCbGVuZE1vZGUsICZDU1NUb1N0eWxlTWFw
OjptYXBGaWxsQmxlbmRNb2RlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyNlbmRpZgorICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdCwgQXBwbHlQcm9wZXJ0eURl
ZmF1bHQ8RUJvcmRlckZpdCwgJlJlbmRlclN0eWxlOjpib3JkZXJGaXQsIEVCb3JkZXJGaXQsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVyRml0LCBFQm9yZGVyRml0LCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxCb3JkZXJGaXQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLCBBcHBseVByb3BlcnR5Q29t
cHV0ZUxlbmd0aDxzaG9ydCwgJlJlbmRlclN0eWxlOjpob3Jpem9udGFsQm9yZGVyU3BhY2luZywg
JlJlbmRlclN0eWxlOjpzZXRIb3Jpem9udGFsQm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpp
bml0aWFsSG9yaXpvbnRhbEJvcmRlclNwYWNpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlLCBBcHBseVByb3Bl
cnR5Qm9yZGVySW1hZ2U8Qm9yZGVySW1hZ2UsIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2Us
ICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2U+
OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg8c2hv
cnQsICZSZW5kZXJTdHlsZTo6dmVydGljYWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNl
dFZlcnRpY2FsQm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjppbml0aWFsVmVydGljYWxCb3Jk
ZXJTcGFjaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRCb3hBbGlnbiwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJveEFsaWdubWVu
dCwgJlJlbmRlclN0eWxlOjpib3hBbGlnbiwgRUJveEFsaWdubWVudCwgJlJlbmRlclN0eWxlOjpz
ZXRCb3hBbGlnbiwgRUJveEFsaWdubWVudCwgJlJlbmRlclN0eWxlOjppbml0aWFsQm94QWxpZ24+
OjpjcmVhdGVIYW5kbGVyKCkpOworI2lmIEVOQUJMRShDU1NfQk9YX0RFQ09SQVRJT05fQlJFQUsp
CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Qm94RGVjb3JhdGlvbkJy
ZWFrLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm94RGVjb3JhdGlvbkJyZWFrLCAmUmVuZGVyU3R5
bGU6OmJveERlY29yYXRpb25CcmVhaywgRUJveERlY29yYXRpb25CcmVhaywgJlJlbmRlclN0eWxl
OjpzZXRCb3hEZWNvcmF0aW9uQnJlYWssIEVCb3hEZWNvcmF0aW9uQnJlYWssICZSZW5kZXJTdHls
ZTo6aW5pdGlhbEJveERlY29yYXRpb25CcmVhaz46OmNyZWF0ZUhhbmRsZXIoKSk7CisjZW5kaWYK
KyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3hEaXJlY3Rpb24sIEFw
cGx5UHJvcGVydHlEZWZhdWx0PEVCb3hEaXJlY3Rpb24sICZSZW5kZXJTdHlsZTo6Ym94RGlyZWN0
aW9uLCBFQm94RGlyZWN0aW9uLCAmUmVuZGVyU3R5bGU6OnNldEJveERpcmVjdGlvbiwgRUJveERp
cmVjdGlvbiwgJlJlbmRlclN0eWxlOjppbml0aWFsQm94RGlyZWN0aW9uPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4LCBB
cHBseVByb3BlcnR5RGVmYXVsdDxmbG9hdCwgJlJlbmRlclN0eWxlOjpib3hGbGV4LCBmbG9hdCwg
JlJlbmRlclN0eWxlOjpzZXRCb3hGbGV4LCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsQm94
RmxleD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0Qm94RmxleEdyb3VwLCBBcHBseVByb3BlcnR5RGVmYXVsdDx1bnNpZ25lZCBpbnQs
ICZSZW5kZXJTdHlsZTo6Ym94RmxleEdyb3VwLCB1bnNpZ25lZCBpbnQsICZSZW5kZXJTdHlsZTo6
c2V0Qm94RmxleEdyb3VwLCB1bnNpZ25lZCBpbnQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJveEZs
ZXhHcm91cD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0Qm94TGluZXMsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVCb3hMaW5lcywgJlJl
bmRlclN0eWxlOjpib3hMaW5lcywgRUJveExpbmVzLCAmUmVuZGVyU3R5bGU6OnNldEJveExpbmVz
LCBFQm94TGluZXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJveExpbmVzPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3hPcmRpbmFs
R3JvdXAsIEFwcGx5UHJvcGVydHlEZWZhdWx0PHVuc2lnbmVkIGludCwgJlJlbmRlclN0eWxlOjpi
b3hPcmRpbmFsR3JvdXAsIHVuc2lnbmVkIGludCwgJlJlbmRlclN0eWxlOjpzZXRCb3hPcmRpbmFs
R3JvdXAsIHVuc2lnbmVkIGludCwgJlJlbmRlclN0eWxlOjppbml0aWFsQm94T3JkaW5hbEdyb3Vw
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRCb3hPcmllbnQsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVCb3hPcmllbnQsICZSZW5kZXJT
dHlsZTo6Ym94T3JpZW50LCBFQm94T3JpZW50LCAmUmVuZGVyU3R5bGU6OnNldEJveE9yaWVudCwg
RUJveE9yaWVudCwgJlJlbmRlclN0eWxlOjppbml0aWFsQm94T3JpZW50Pjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3hQYWNrLCBB
cHBseVByb3BlcnR5RGVmYXVsdDxFQm94UGFjaywgJlJlbmRlclN0eWxlOjpib3hQYWNrLCBFQm94
UGFjaywgJlJlbmRlclN0eWxlOjpzZXRCb3hQYWNrLCBFQm94UGFjaywgJlJlbmRlclN0eWxlOjpp
bml0aWFsQm94UGFjaz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0Q29sb3JDb3JyZWN0aW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxD
b2xvclNwYWNlLCAmUmVuZGVyU3R5bGU6OmNvbG9yU3BhY2UsIENvbG9yU3BhY2UsICZSZW5kZXJT
dHlsZTo6c2V0Q29sb3JTcGFjZSwgQ29sb3JTcGFjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQ29s
b3JTcGFjZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0Q29sdW1uQXhpcywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8Q29sdW1uQXhpcywg
JlJlbmRlclN0eWxlOjpjb2x1bW5BeGlzLCBDb2x1bW5BeGlzLCAmUmVuZGVyU3R5bGU6OnNldENv
bHVtbkF4aXMsIENvbHVtbkF4aXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbENvbHVtbkF4aXM+Ojpj
cmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtbkJyZWFrQWZ0ZXIsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVQYWdlQnJlYWssICZSZW5k
ZXJTdHlsZTo6Y29sdW1uQnJlYWtBZnRlciwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjpzZXRD
b2x1bW5CcmVha0FmdGVyLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQYWdlQnJl
YWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtbkJyZWFrQmVmb3JlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFUGFnZUJyZWFr
LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkJyZWFrQmVmb3JlLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5
bGU6OnNldENvbHVtbkJyZWFrQmVmb3JlLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxQYWdlQnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtbkJyZWFrSW5zaWRlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxF
UGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkJyZWFrSW5zaWRlLCBFUGFnZUJyZWFrLCAm
UmVuZGVyU3R5bGU6OnNldENvbHVtbkJyZWFrSW5zaWRlLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxQYWdlQnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkNvdW50LCBBcHBseVByb3BlcnR5QXV0bzx1
bnNpZ25lZCBzaG9ydCwgJlJlbmRlclN0eWxlOjpjb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpz
ZXRDb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpoYXNBdXRvQ29sdW1uQ291bnQsICZSZW5kZXJT
dHlsZTo6c2V0SGFzQXV0b0NvbHVtbkNvdW50Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5HYXAsIEFwcGx5UHJvcGVydHlB
dXRvPGZsb2F0LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1
bW5HYXAsICZSZW5kZXJTdHlsZTo6aGFzTm9ybWFsQ29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OnNl
dEhhc05vcm1hbENvbHVtbkdhcCwgQ29tcHV0ZUxlbmd0aCwgQ1NTVmFsdWVOb3JtYWw+OjpjcmVh
dGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENv
bHVtblByb2dyZXNzaW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxDb2x1bW5Qcm9ncmVzc2lvbiwg
JlJlbmRlclN0eWxlOjpjb2x1bW5Qcm9ncmVzc2lvbiwgQ29sdW1uUHJvZ3Jlc3Npb24sICZSZW5k
ZXJTdHlsZTo6c2V0Q29sdW1uUHJvZ3Jlc3Npb24sIENvbHVtblByb2dyZXNzaW9uLCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxDb2x1bW5Qcm9ncmVzc2lvbj46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLCBBcHBs
eVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjpjb2x1bW5S
dWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldFZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yPjo6Y3Jl
YXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5SdWxlV2lkdGgsIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoPHVuc2lnbmVkIHNob3J0
LCAmUmVuZGVyU3R5bGU6OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5S
dWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbENvbHVtblJ1bGVXaWR0aCwgTm9ybWFsRGlz
YWJsZWQsIFRoaWNrbmVzc0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblNwYW4sIEFwcGx5UHJvcGVydHlEZWZh
dWx0PENvbHVtblNwYW4sICZSZW5kZXJTdHlsZTo6Y29sdW1uU3BhbiwgQ29sdW1uU3BhbiwgJlJl
bmRlclN0eWxlOjpzZXRDb2x1bW5TcGFuLCBDb2x1bW5TcGFuLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxDb2x1bW5TcGFuPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlU3R5bGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVC
b3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpjb2x1bW5SdWxlU3R5bGUsIEVCb3JkZXJTdHlsZSwg
JlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0
eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbldpZHRoLCBBcHBseVByb3BlcnR5QXV0
bzxmbG9hdCwgJlJlbmRlclN0eWxlOjpjb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1
bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpoYXNBdXRvQ29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6
c2V0SGFzQXV0b0NvbHVtbldpZHRoLCBDb21wdXRlTGVuZ3RoPjo6Y3JlYXRlSGFuZGxlcigpKTsK
KyNpZiBFTkFCTEUoQ1VSU09SX1ZJU0lCSUxJVFkpCisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2Via2l0Q3Vyc29yVmlzaWJpbGl0eSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8Q3Vy
c29yVmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpjdXJzb3JWaXNpYmlsaXR5LCBDdXJzb3JWaXNp
YmlsaXR5LCAmUmVuZGVyU3R5bGU6OnNldEN1cnNvclZpc2liaWxpdHksIEN1cnNvclZpc2liaWxp
dHksICZSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNvclZpc2liaWxpdHk+OjpjcmVhdGVIYW5kbGVy
KCkpOworI2VuZGlmCisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QWxp
Z25Db250ZW50LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQWxpZ25Db250ZW50LCAmUmVuZGVyU3R5
bGU6OmFsaWduQ29udGVudCwgRUFsaWduQ29udGVudCwgJlJlbmRlclN0eWxlOjpzZXRBbGlnbkNv
bnRlbnQsIEVBbGlnbkNvbnRlbnQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEFsaWduQ29udGVudD46
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0QWxpZ25JdGVtcywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUFsaWduSXRlbXMsICZSZW5kZXJT
dHlsZTo6YWxpZ25JdGVtcywgRUFsaWduSXRlbXMsICZSZW5kZXJTdHlsZTo6c2V0QWxpZ25JdGVt
cywgRUFsaWduSXRlbXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEFsaWduSXRlbXM+OjpjcmVhdGVI
YW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFsaWdu
U2VsZiwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUFsaWduSXRlbXMsICZSZW5kZXJTdHlsZTo6YWxp
Z25TZWxmLCBFQWxpZ25JdGVtcywgJlJlbmRlclN0eWxlOjpzZXRBbGlnblNlbGYsIEVBbGlnbkl0
ZW1zLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxBbGlnblNlbGY+OjpjcmVhdGVIYW5kbGVyKCkpOwor
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEZsZXhCYXNpcywgQXBwbHlQ
cm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OmZsZXhCYXNpcywgJlJlbmRlclN0eWxlOjpzZXRG
bGV4QmFzaXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEZsZXhCYXNpcywgQXV0b0VuYWJsZWQ+Ojpj
cmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dEZsZXhEaXJlY3Rpb24sIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVGbGV4RGlyZWN0aW9uLCAmUmVu
ZGVyU3R5bGU6OmZsZXhEaXJlY3Rpb24sIEVGbGV4RGlyZWN0aW9uLCAmUmVuZGVyU3R5bGU6OnNl
dEZsZXhEaXJlY3Rpb24sIEVGbGV4RGlyZWN0aW9uLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxGbGV4
RGlyZWN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRGbGV4R3JvdywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8ZmxvYXQsICZSZW5k
ZXJTdHlsZTo6ZmxleEdyb3csIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEZsZXhHcm93LCBmbG9h
dCwgJlJlbmRlclN0eWxlOjppbml0aWFsRmxleEdyb3c+OjpjcmVhdGVIYW5kbGVyKCkpOworICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEZsZXhTaHJpbmssIEFwcGx5UHJv
cGVydHlEZWZhdWx0PGZsb2F0LCAmUmVuZGVyU3R5bGU6OmZsZXhTaHJpbmssIGZsb2F0LCAmUmVu
ZGVyU3R5bGU6OnNldEZsZXhTaHJpbmssIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxGbGV4
U2hyaW5rPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRGbGV4V3JhcCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUZsZXhXcmFwLCAmUmVu
ZGVyU3R5bGU6OmZsZXhXcmFwLCBFRmxleFdyYXAsICZSZW5kZXJTdHlsZTo6c2V0RmxleFdyYXAs
IEVGbGV4V3JhcCwgJlJlbmRlclN0eWxlOjppbml0aWFsRmxleFdyYXA+OjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEdyaWRBdXRvRmxv
dywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8R3JpZEF1dG9GbG93LCAmUmVuZGVyU3R5bGU6OmdyaWRB
dXRvRmxvdywgR3JpZEF1dG9GbG93LCAmUmVuZGVyU3R5bGU6OnNldEdyaWRBdXRvRmxvdywgR3Jp
ZEF1dG9GbG93LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxHcmlkQXV0b0Zsb3c+OjpjcmVhdGVIYW5k
bGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEp1c3RpZnlD
b250ZW50LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFSnVzdGlmeUNvbnRlbnQsICZSZW5kZXJTdHls
ZTo6anVzdGlmeUNvbnRlbnQsIEVKdXN0aWZ5Q29udGVudCwgJlJlbmRlclN0eWxlOjpzZXRKdXN0
aWZ5Q29udGVudCwgRUp1c3RpZnlDb250ZW50LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxKdXN0aWZ5
Q29udGVudD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0T3JkZXIsIEFwcGx5UHJvcGVydHlEZWZhdWx0PGludCwgJlJlbmRlclN0eWxl
OjpvcmRlciwgaW50LCAmUmVuZGVyU3R5bGU6OnNldE9yZGVyLCBpbnQsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbE9yZGVyPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMp
CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Rmxvd0Zyb20sIEFwcGx5
UHJvcGVydHlTdHJpbmc8TWFwTm9uZVRvTnVsbCwgJlJlbmRlclN0eWxlOjpyZWdpb25UaHJlYWQs
ICZSZW5kZXJTdHlsZTo6c2V0UmVnaW9uVGhyZWFkLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxSZWdp
b25UaHJlYWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdEZsb3dJbnRvLCBBcHBseVByb3BlcnR5U3RyaW5nPE1hcE5vbmVUb051bGws
ICZSZW5kZXJTdHlsZTo6Zmxvd1RocmVhZCwgJlJlbmRlclN0eWxlOjpzZXRGbG93VGhyZWFkLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxGbG93VGhyZWFkPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyNlbmRp
ZgorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEZvbnRLZXJuaW5nLCBB
cHBseVByb3BlcnR5Rm9udDxGb250RGVzY3JpcHRpb246Oktlcm5pbmcsICZGb250RGVzY3JpcHRp
b246Omtlcm5pbmcsICZGb250RGVzY3JpcHRpb246OnNldEtlcm5pbmcsIEZvbnREZXNjcmlwdGlv
bjo6QXV0b0tlcm5pbmc+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTbW9vdGhpbmcsIEFwcGx5UHJvcGVydHlGb250PEZvbnRT
bW9vdGhpbmdNb2RlLCAmRm9udERlc2NyaXB0aW9uOjpmb250U21vb3RoaW5nLCAmRm9udERlc2Ny
aXB0aW9uOjpzZXRGb250U21vb3RoaW5nLCBBdXRvU21vb3RoaW5nPjo6Y3JlYXRlSGFuZGxlcigp
KTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRGb250VmFyaWFudExp
Z2F0dXJlcywgQXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEhpZ2hsaWdodCwg
QXBwbHlQcm9wZXJ0eVN0cmluZzxNYXBOb25lVG9OdWxsLCAmUmVuZGVyU3R5bGU6OmhpZ2hsaWdo
dCwgJlJlbmRlclN0eWxlOjpzZXRIaWdobGlnaHQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEhpZ2hs
aWdodD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0SHlwaGVuYXRlQ2hhcmFjdGVyLCBBcHBseVByb3BlcnR5U3RyaW5nPE1hcEF1dG9U
b051bGwsICZSZW5kZXJTdHlsZTo6aHlwaGVuYXRpb25TdHJpbmcsICZSZW5kZXJTdHlsZTo6c2V0
SHlwaGVuYXRpb25TdHJpbmcsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEh5cGhlbmF0aW9uU3RyaW5n
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRIeXBoZW5hdGVMaW1pdEFmdGVyLCBBcHBseVByb3BlcnR5TnVtYmVyPHNob3J0LCAmUmVu
ZGVyU3R5bGU6Omh5cGhlbmF0aW9uTGltaXRBZnRlciwgJlJlbmRlclN0eWxlOjpzZXRIeXBoZW5h
dGlvbkxpbWl0QWZ0ZXIsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEh5cGhlbmF0aW9uTGltaXRBZnRl
cj46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
V2Via2l0SHlwaGVuYXRlTGltaXRCZWZvcmUsIEFwcGx5UHJvcGVydHlOdW1iZXI8c2hvcnQsICZS
ZW5kZXJTdHlsZTo6aHlwaGVuYXRpb25MaW1pdEJlZm9yZSwgJlJlbmRlclN0eWxlOjpzZXRIeXBo
ZW5hdGlvbkxpbWl0QmVmb3JlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxIeXBoZW5hdGlvbkxpbWl0
QmVmb3JlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzLCBBcHBseVByb3BlcnR5TnVtYmVyPHNob3J0
LCAmUmVuZGVyU3R5bGU6Omh5cGhlbmF0aW9uTGltaXRMaW5lcywgJlJlbmRlclN0eWxlOjpzZXRI
eXBoZW5hdGlvbkxpbWl0TGluZXMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEh5cGhlbmF0aW9uTGlt
aXRMaW5lcywgQ1NTVmFsdWVOb0xpbWl0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5zLCBBcHBseVByb3BlcnR5RGVmYXVs
dDxIeXBoZW5zLCAmUmVuZGVyU3R5bGU6Omh5cGhlbnMsIEh5cGhlbnMsICZSZW5kZXJTdHlsZTo6
c2V0SHlwaGVucywgSHlwaGVucywgJlJlbmRlclN0eWxlOjppbml0aWFsSHlwaGVucz46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TGlu
ZUFsaWduLCBBcHBseVByb3BlcnR5RGVmYXVsdDxMaW5lQWxpZ24sICZSZW5kZXJTdHlsZTo6bGlu
ZUFsaWduLCBMaW5lQWxpZ24sICZSZW5kZXJTdHlsZTo6c2V0TGluZUFsaWduLCBMaW5lQWxpZ24s
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVBbGlnbj46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TGluZUJyZWFrLCBBcHBseVByb3Bl
cnR5RGVmYXVsdDxMaW5lQnJlYWssICZSZW5kZXJTdHlsZTo6bGluZUJyZWFrLCBMaW5lQnJlYWss
ICZSZW5kZXJTdHlsZTo6c2V0TGluZUJyZWFrLCBMaW5lQnJlYWssICZSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVCcmVhaz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0TGluZUNsYW1wLCBBcHBseVByb3BlcnR5RGVmYXVsdDxjb25zdCBM
aW5lQ2xhbXBWYWx1ZSYsICZSZW5kZXJTdHlsZTo6bGluZUNsYW1wLCBMaW5lQ2xhbXBWYWx1ZSwg
JlJlbmRlclN0eWxlOjpzZXRMaW5lQ2xhbXAsIExpbmVDbGFtcFZhbHVlLCAmUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lQ2xhbXA+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVdlYmtpdExpbmVHcmlkLCBBcHBseVByb3BlcnR5U3RyaW5nPE1hcE5v
bmVUb051bGwsICZSZW5kZXJTdHlsZTo6bGluZUdyaWQsICZSZW5kZXJTdHlsZTo6c2V0TGluZUdy
aWQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVHcmlkPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRMaW5lU25hcCwgQXBwbHlQcm9w
ZXJ0eURlZmF1bHQ8TGluZVNuYXAsICZSZW5kZXJTdHlsZTo6bGluZVNuYXAsIExpbmVTbmFwLCAm
UmVuZGVyU3R5bGU6OnNldExpbmVTbmFwLCBMaW5lU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFs
TGluZVNuYXA+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2UsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVN
YXJnaW5Db2xsYXBzZSwgJlJlbmRlclN0eWxlOjptYXJnaW5BZnRlckNvbGxhcHNlLCBFTWFyZ2lu
Q29sbGFwc2UsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luQWZ0ZXJDb2xsYXBzZSwgRU1hcmdpbkNv
bGxhcHNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNYXJnaW5BZnRlckNvbGxhcHNlPjo6Y3JlYXRl
SGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXJn
aW5CZWZvcmVDb2xsYXBzZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RU1hcmdpbkNvbGxhcHNlLCAm
UmVuZGVyU3R5bGU6Om1hcmdpbkJlZm9yZUNvbGxhcHNlLCBFTWFyZ2luQ29sbGFwc2UsICZSZW5k
ZXJTdHlsZTo6c2V0TWFyZ2luQmVmb3JlQ29sbGFwc2UsIEVNYXJnaW5Db2xsYXBzZSwgJlJlbmRl
clN0eWxlOjppbml0aWFsTWFyZ2luQmVmb3JlQ29sbGFwc2U+OjpjcmVhdGVIYW5kbGVyKCkpOwor
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJvdHRvbUNvbGxh
cHNlLCBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkFmdGVyQ29sbGFwc2UpOworICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNlLCBDU1NQcm9wZXJ0
eVdlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFTWFy
cXVlZURpcmVjdGlvbiwgJlJlbmRlclN0eWxlOjptYXJxdWVlRGlyZWN0aW9uLCBFTWFycXVlZURp
cmVjdGlvbiwgJlJlbmRlclN0eWxlOjpzZXRNYXJxdWVlRGlyZWN0aW9uLCBFTWFycXVlZURpcmVj
dGlvbiwgJlJlbmRlclN0eWxlOjppbml0aWFsTWFycXVlZURpcmVjdGlvbj46OmNyZWF0ZUhhbmRs
ZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFycXVlZUlu
Y3JlbWVudCwgQXBwbHlQcm9wZXJ0eU1hcnF1ZWVJbmNyZW1lbnQ6OmNyZWF0ZUhhbmRsZXIoKSk7
CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVJlcGV0aXRp
b24sIEFwcGx5UHJvcGVydHlNYXJxdWVlUmVwZXRpdGlvbjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3BlZWQsIEFwcGx5
UHJvcGVydHlNYXJxdWVlU3BlZWQ6OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVN0eWxlLCBBcHBseVByb3BlcnR5RGVmYXVs
dDxFTWFycXVlZUJlaGF2aW9yLCAmUmVuZGVyU3R5bGU6Om1hcnF1ZWVCZWhhdmlvciwgRU1hcnF1
ZWVCZWhhdmlvciwgJlJlbmRlclN0eWxlOjpzZXRNYXJxdWVlQmVoYXZpb3IsIEVNYXJxdWVlQmVo
YXZpb3IsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcnF1ZWVCZWhhdmlvcj46OmNyZWF0ZUhhbmRs
ZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0JveElt
YWdlLCBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2U8Qm9yZGVyTWFzaywgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQm94SW1hZ2UsICZSZW5kZXJTdHlsZTo6bWFza0JveEltYWdlLCAmUmVuZGVyU3R5bGU6
OnNldE1hc2tCb3hJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlT3V0c2V0LCBBcHBseVByb3BlcnR5Qm9y
ZGVySW1hZ2VNb2RpZmllcjxCb3JkZXJNYXNrLCBPdXRzZXQ+OjpjcmVhdGVIYW5kbGVyKCkpOwor
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVJlcGVh
dCwgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8Qm9yZGVyTWFzaywgUmVwZWF0Pjo6
Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQm94SW1hZ2VTbGljZSwgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8Qm9y
ZGVyTWFzaywgU2xpY2U+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZSwgQXBwbHlQcm9wZXJ0eUJvcmRl
ckltYWdlU291cmNlPENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlLCAmUmVuZGVy
U3R5bGU6Om1hc2tCb3hJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2VT
b3VyY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hc2tCb3hJbWFnZVNvdXJjZT46OmNyZWF0ZUhh
bmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0Jv
eEltYWdlV2lkdGgsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPEJvcmRlck1hc2ss
IFdpZHRoPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRNYXNrQ2xpcCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbEJveCwgQ1NT
UHJvcGVydHlXZWJraXRNYXNrQ2xpcCwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nl
c3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzQ2xp
cFNldCwgJkZpbGxMYXllcjo6Y2xpcCwgJkZpbGxMYXllcjo6c2V0Q2xpcCwgJkZpbGxMYXllcjo6
Y2xlYXJDbGlwLCAmRmlsbExheWVyOjppbml0aWFsRmlsbENsaXAsICZDU1NUb1N0eWxlTWFwOjpt
YXBGaWxsQ2xpcD46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2Via2l0TWFza0NvbXBvc2l0ZSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxDb21w
b3NpdGVPcGVyYXRvciwgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ29tcG9zaXRlLCBNYXNrRmlsbExh
eWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xh
eWVycywgJkZpbGxMYXllcjo6aXNDb21wb3NpdGVTZXQsICZGaWxsTGF5ZXI6OmNvbXBvc2l0ZSwg
JkZpbGxMYXllcjo6c2V0Q29tcG9zaXRlLCAmRmlsbExheWVyOjpjbGVhckNvbXBvc2l0ZSwgJkZp
bGxMYXllcjo6aW5pdGlhbEZpbGxDb21wb3NpdGUsICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsQ29t
cG9zaXRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRNYXNrSW1hZ2UsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8U3R5bGVJbWFnZSos
IENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6
OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6
aXNJbWFnZVNldCwgJkZpbGxMYXllcjo6aW1hZ2UsICZGaWxsTGF5ZXI6OnNldEltYWdlLCAmRmls
bExheWVyOjpjbGVhckltYWdlLCAmRmlsbExheWVyOjppbml0aWFsRmlsbEltYWdlLCAmQ1NTVG9T
dHlsZU1hcDo6bWFwRmlsbEltYWdlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luLCBBcHBseVByb3BlcnR5RmlsbExh
eWVyPEVGaWxsQm94LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4sIE1hc2tGaWxsTGF5ZXIs
ICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJz
LCAmRmlsbExheWVyOjppc09yaWdpblNldCwgJkZpbGxMYXllcjo6b3JpZ2luLCAmRmlsbExheWVy
OjpzZXRPcmlnaW4sICZGaWxsTGF5ZXI6OmNsZWFyT3JpZ2luLCAmRmlsbExheWVyOjppbml0aWFs
RmlsbE9yaWdpbiwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmlnaW4+OjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlv
blgsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8TGVuZ3RoLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQ
b3NpdGlvblgsIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywg
JlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmRmlsbExheWVyOjppc1hQb3NpdGlvblNldCwgJkZp
bGxMYXllcjo6eFBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRYUG9zaXRpb24sICZGaWxsTGF5ZXI6
OmNsZWFyWFBvc2l0aW9uLCAmRmlsbExheWVyOjppbml0aWFsRmlsbFhQb3NpdGlvbiwgJkNTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblksIEFwcGx5UHJvcGVy
dHlGaWxsTGF5ZXI8TGVuZ3RoLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblksIE1hc2tG
aWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjpt
YXNrTGF5ZXJzLCAmRmlsbExheWVyOjppc1lQb3NpdGlvblNldCwgJkZpbGxMYXllcjo6eVBvc2l0
aW9uLCAmRmlsbExheWVyOjpzZXRZUG9zaXRpb24sICZGaWxsTGF5ZXI6OmNsZWFyWVBvc2l0aW9u
LCAmRmlsbExheWVyOjppbml0aWFsRmlsbFlQb3NpdGlvbiwgJkNTU1RvU3R5bGVNYXA6Om1hcEZp
bGxZUG9zaXRpb24+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRYLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEVGaWxs
UmVwZWF0LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRYLCBNYXNrRmlsbExheWVyLCAmUmVu
ZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZp
bGxMYXllcjo6aXNSZXBlYXRYU2V0LCAmRmlsbExheWVyOjpyZXBlYXRYLCAmRmlsbExheWVyOjpz
ZXRSZXBlYXRYLCAmRmlsbExheWVyOjpjbGVhclJlcGVhdFgsICZGaWxsTGF5ZXI6OmluaXRpYWxG
aWxsUmVwZWF0WCwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRYPjo6Y3JlYXRlSGFuZGxl
cigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0
WSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbFJlcGVhdCwgQ1NTUHJvcGVydHlXZWJraXRN
YXNrUmVwZWF0WSwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJz
LCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzUmVwZWF0WVNldCwgJkZp
bGxMYXllcjo6cmVwZWF0WSwgJkZpbGxMYXllcjo6c2V0UmVwZWF0WSwgJkZpbGxMYXllcjo6Y2xl
YXJSZXBlYXRZLCAmRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFksICZDU1NUb1N0eWxlTWFw
OjptYXBGaWxsUmVwZWF0WT46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1NpemUsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8Rmls
bFNpemUsIENTU1Byb3BlcnR5V2Via2l0TWFza1NpemUsIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJT
dHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmRmlsbExh
eWVyOjppc1NpemVTZXQsICZGaWxsTGF5ZXI6OnNpemUsICZGaWxsTGF5ZXI6OnNldFNpemUsICZG
aWxsTGF5ZXI6OmNsZWFyU2l6ZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxTaXplLCAmQ1NTVG9T
dHlsZU1hcDo6bWFwRmlsbFNpemU+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2RlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxF
TkJTUE1vZGUsICZSZW5kZXJTdHlsZTo6bmJzcE1vZGUsIEVOQlNQTW9kZSwgJlJlbmRlclN0eWxl
OjpzZXROQlNQTW9kZSwgRU5CU1BNb2RlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxOQlNQTW9kZT46
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0UGVyc3BlY3RpdmVPcmlnaW4sIEFwcGx5UHJvcGVydHlFeHBhbmRpbmc8U3VwcHJlc3NWYWx1
ZSwgQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpblgsIENTU1Byb3BlcnR5V2Via2l0
UGVyc3BlY3RpdmVPcmlnaW5ZPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpblgsIEFwcGx5UHJvcGVydHlM
ZW5ndGg8JlJlbmRlclN0eWxlOjpwZXJzcGVjdGl2ZU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0
UGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQZXJzcGVjdGl2ZU9yaWdp
blg+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luWSwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5
bGU6OnBlcnNwZWN0aXZlT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZU9yaWdp
blksICZSZW5kZXJTdHlsZTo6aW5pdGlhbFBlcnNwZWN0aXZlT3JpZ2luWT46OmNyZWF0ZUhhbmRs
ZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0UHJpbnRDb2xv
ckFkanVzdCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8UHJpbnRDb2xvckFkanVzdCwgJlJlbmRlclN0
eWxlOjpwcmludENvbG9yQWRqdXN0LCBQcmludENvbG9yQWRqdXN0LCAmUmVuZGVyU3R5bGU6OnNl
dFByaW50Q29sb3JBZGp1c3QsIFByaW50Q29sb3JBZGp1c3QsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFByaW50Q29sb3JBZGp1c3Q+OjpjcmVhdGVIYW5kbGVyKCkpOworI2lmIEVOQUJMRShDU1NfUkVH
SU9OUykKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVh
a0FmdGVyLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OnJl
Z2lvbkJyZWFrQWZ0ZXIsIEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6c2V0UmVnaW9uQnJlYWtB
ZnRlciwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjppbml0aWFsUGFnZUJyZWFrPjo6Y3JlYXRl
SGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRSZWdp
b25CcmVha0JlZm9yZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBhZ2VCcmVhaywgJlJlbmRlclN0
eWxlOjpyZWdpb25CcmVha0JlZm9yZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjpzZXRSZWdp
b25CcmVha0JlZm9yZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjppbml0aWFsUGFnZUJyZWFr
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlX
ZWJraXRSZWdpb25CcmVha0luc2lkZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBhZ2VCcmVhaywg
JlJlbmRlclN0eWxlOjpyZWdpb25CcmVha0luc2lkZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxl
OjpzZXRSZWdpb25CcmVha0luc2lkZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjppbml0aWFs
UGFnZUJyZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRSZWdpb25PdmVyZmxvdywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8UmVnaW9u
T3ZlcmZsb3csICZSZW5kZXJTdHlsZTo6cmVnaW9uT3ZlcmZsb3csIFJlZ2lvbk92ZXJmbG93LCAm
UmVuZGVyU3R5bGU6OnNldFJlZ2lvbk92ZXJmbG93LCBSZWdpb25PdmVyZmxvdywgJlJlbmRlclN0
eWxlOjppbml0aWFsUmVnaW9uT3ZlcmZsb3c+OjpjcmVhdGVIYW5kbGVyKCkpOworI2VuZGlmCisg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0UnRsT3JkZXJpbmcsIEFwcGx5
UHJvcGVydHlEZWZhdWx0PE9yZGVyLCAmUmVuZGVyU3R5bGU6OnJ0bE9yZGVyaW5nLCBPcmRlciwg
JlJlbmRlclN0eWxlOjpzZXRSVExPcmRlcmluZywgT3JkZXIsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFJUTE9yZGVyaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24sIEFwcGx5UHJvcGVydHlEZWZhdWx0PFJ1YnlQ
b3NpdGlvbiwgJlJlbmRlclN0eWxlOjpydWJ5UG9zaXRpb24sIFJ1YnlQb3NpdGlvbiwgJlJlbmRl
clN0eWxlOjpzZXRSdWJ5UG9zaXRpb24sIFJ1YnlQb3NpdGlvbiwgJlJlbmRlclN0eWxlOjppbml0
aWFsUnVieVBvc2l0aW9uPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0Q29tYmluZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4
dENvbWJpbmUsICZSZW5kZXJTdHlsZTo6dGV4dENvbWJpbmUsIFRleHRDb21iaW5lLCAmUmVuZGVy
U3R5bGU6OnNldFRleHRDb21iaW5lLCBUZXh0Q29tYmluZSwgJlJlbmRlclN0eWxlOjppbml0aWFs
VGV4dENvbWJpbmU+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc0NvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9J
bmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjp0ZXh0RW1waGFzaXNDb2xvciwgJlJlbmRl
clN0eWxlOjpzZXRUZXh0RW1waGFzaXNDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlu
a1RleHRFbXBoYXNpc0NvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigp
KTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNQ
b3NpdGlvbiwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dEVtcGhhc2lzUG9zaXRpb24sICZSZW5k
ZXJTdHlsZTo6dGV4dEVtcGhhc2lzUG9zaXRpb24sIFRleHRFbXBoYXNpc1Bvc2l0aW9uLCAmUmVu
ZGVyU3R5bGU6OnNldFRleHRFbXBoYXNpc1Bvc2l0aW9uLCBUZXh0RW1waGFzaXNQb3NpdGlvbiwg
JlJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzUG9zaXRpb24+OjpjcmVhdGVIYW5kbGVy
KCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNp
c1N0eWxlLCBBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmNyZWF0ZUhhbmRsZXIoKSk7
CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvciwg
QXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQsICZSZW5kZXJTdHlsZTo6dGV4
dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldFZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcj46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VGV4
dFNlY3VyaXR5LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFVGV4dFNlY3VyaXR5LCAmUmVuZGVyU3R5
bGU6OnRleHRTZWN1cml0eSwgRVRleHRTZWN1cml0eSwgJlJlbmRlclN0eWxlOjpzZXRUZXh0U2Vj
dXJpdHksIEVUZXh0U2VjdXJpdHksICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRTZWN1cml0eT46
OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0VGV4dFN0cm9rZUNvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVu
dCwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFN0
cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yLCAm
UmVuZGVyU3R5bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YLCBBcHBseVByb3BlcnR5TGVu
Z3RoPCZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpzZXRUcmFu
c2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2Zvcm1PcmlnaW5YPjo6Y3Jl
YXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm1PcmlnaW5ZLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6dHJhbnNm
b3JtT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxUcmFuc2Zvcm1PcmlnaW5ZPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5aLCBBcHBseVBy
b3BlcnR5Q29tcHV0ZUxlbmd0aDxmbG9hdCwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5a
LCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblosICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFRyYW5zZm9ybU9yaWdpblo+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybVN0eWxlLCBBcHBseVByb3BlcnR5RGVmYXVs
dDxFVHJhbnNmb3JtU3R5bGUzRCwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1TdHlsZTNELCBFVHJh
bnNmb3JtU3R5bGUzRCwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1TdHlsZTNELCBFVHJhbnNm
b3JtU3R5bGUzRCwgJlJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNmb3JtU3R5bGUzRD46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VHJh
bnNpdGlvbkRlbGF5LCBBcHBseVByb3BlcnR5QW5pbWF0aW9uPGRvdWJsZSwgJkFuaW1hdGlvbjo6
ZGVsYXksICZBbmltYXRpb246OnNldERlbGF5LCAmQW5pbWF0aW9uOjppc0RlbGF5U2V0LCAmQW5p
bWF0aW9uOjpjbGVhckRlbGF5LCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRGVsYXksICZD
U1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EZWxheSwgJlJlbmRlclN0eWxlOjphY2Nlc3NUcmFu
c2l0aW9ucywgJlJlbmRlclN0eWxlOjp0cmFuc2l0aW9ucz46OmNyZWF0ZUhhbmRsZXIoKSk7Cisg
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9u
LCBBcHBseVByb3BlcnR5QW5pbWF0aW9uPGRvdWJsZSwgJkFuaW1hdGlvbjo6ZHVyYXRpb24sICZB
bmltYXRpb246OnNldER1cmF0aW9uLCAmQW5pbWF0aW9uOjppc0R1cmF0aW9uU2V0LCAmQW5pbWF0
aW9uOjpjbGVhckR1cmF0aW9uLCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRHVyYXRpb24s
ICZDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EdXJhdGlvbiwgJlJlbmRlclN0eWxlOjphY2Nl
c3NUcmFuc2l0aW9ucywgJlJlbmRlclN0eWxlOjp0cmFuc2l0aW9ucz46OmNyZWF0ZUhhbmRsZXIo
KSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblBy
b3BlcnR5LCBBcHBseVByb3BlcnR5QW5pbWF0aW9uPENTU1Byb3BlcnR5SUQsICZBbmltYXRpb246
OnByb3BlcnR5LCAmQW5pbWF0aW9uOjpzZXRQcm9wZXJ0eSwgJkFuaW1hdGlvbjo6aXNQcm9wZXJ0
eVNldCwgJkFuaW1hdGlvbjo6Y2xlYXJQcm9wZXJ0eSwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1h
dGlvblByb3BlcnR5LCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUHJvcGVydHksICZSZW5k
ZXJTdHlsZTo6YWNjZXNzVHJhbnNpdGlvbnMsICZSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbnM+Ojpj
cmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxjb25zdCBQ
YXNzUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiwgJkFuaW1hdGlvbjo6dGltaW5nRnVuY3Rpb24sICZB
bmltYXRpb246OnNldFRpbWluZ0Z1bmN0aW9uLCAmQW5pbWF0aW9uOjppc1RpbWluZ0Z1bmN0aW9u
U2V0LCAmQW5pbWF0aW9uOjpjbGVhclRpbWluZ0Z1bmN0aW9uLCAmQW5pbWF0aW9uOjppbml0aWFs
QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sICZDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25UaW1p
bmdGdW5jdGlvbiwgJlJlbmRlclN0eWxlOjphY2Nlc3NUcmFuc2l0aW9ucywgJlJlbmRlclN0eWxl
Ojp0cmFuc2l0aW9ucz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWcsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVVc2VyRHJh
ZywgJlJlbmRlclN0eWxlOjp1c2VyRHJhZywgRVVzZXJEcmFnLCAmUmVuZGVyU3R5bGU6OnNldFVz
ZXJEcmFnLCBFVXNlckRyYWcsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFVzZXJEcmFnPjo6Y3JlYXRl
SGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRVc2Vy
TW9kaWZ5LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFVXNlck1vZGlmeSwgJlJlbmRlclN0eWxlOjp1
c2VyTW9kaWZ5LCBFVXNlck1vZGlmeSwgJlJlbmRlclN0eWxlOjpzZXRVc2VyTW9kaWZ5LCBFVXNl
ck1vZGlmeSwgJlJlbmRlclN0eWxlOjppbml0aWFsVXNlck1vZGlmeT46OmNyZWF0ZUhhbmRsZXIo
KSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdCwg
QXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVVzZXJTZWxlY3QsICZSZW5kZXJTdHlsZTo6dXNlclNlbGVj
dCwgRVVzZXJTZWxlY3QsICZSZW5kZXJTdHlsZTo6c2V0VXNlclNlbGVjdCwgRVVzZXJTZWxlY3Qs
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbFVzZXJTZWxlY3Q+OjpjcmVhdGVIYW5kbGVyKCkpOworICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENsaXBQYXRoLCBBcHBseVByb3Bl
cnR5Q2xpcFBhdGg8JlJlbmRlclN0eWxlOjpjbGlwUGF0aCwgJlJlbmRlclN0eWxlOjpzZXRDbGlw
UGF0aCwgJlJlbmRlclN0eWxlOjppbml0aWFsQ2xpcFBhdGg+OjpjcmVhdGVIYW5kbGVyKCkpOwor
CisjaWYgRU5BQkxFKENTU19FWENMVVNJT05TKQorICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdFdyYXBGbG93LCBBcHBseVByb3BlcnR5RGVmYXVsdDxXcmFwRmxvdywgJlJl
bmRlclN0eWxlOjp3cmFwRmxvdywgV3JhcEZsb3csICZSZW5kZXJTdHlsZTo6c2V0V3JhcEZsb3cs
IFdyYXBGbG93LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxXcmFwRmxvdz46OmNyZWF0ZUhhbmRsZXIo
KSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVNYXJnaW4s
IEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpzaGFwZU1hcmdpbiwgJlJlbmRlclN0
eWxlOjpzZXRTaGFwZU1hcmdpbiwgJlJlbmRlclN0eWxlOjppbml0aWFsU2hhcGVNYXJnaW4+Ojpj
cmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dFNoYXBlUGFkZGluZywgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OnNoYXBlUGFk
ZGluZywgJlJlbmRlclN0eWxlOjpzZXRTaGFwZVBhZGRpbmcsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bFNoYXBlUGFkZGluZz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0V3JhcFRocm91Z2gsIEFwcGx5UHJvcGVydHlEZWZhdWx0PFdyYXBU
aHJvdWdoLCAmUmVuZGVyU3R5bGU6OndyYXBUaHJvdWdoLCBXcmFwVGhyb3VnaCwgJlJlbmRlclN0
eWxlOjpzZXRXcmFwVGhyb3VnaCwgV3JhcFRocm91Z2gsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFdy
YXBUaHJvdWdoPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRTaGFwZUluc2lkZSwgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNoYXBlPCZS
ZW5kZXJTdHlsZTo6c2hhcGVJbnNpZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbnNpZGUsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlSW5zaWRlPjo6Y3JlYXRlSGFuZGxlcigpKTsKKyAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFwZU91dHNpZGUsIEFwcGx5UHJv
cGVydHlFeGNsdXNpb25TaGFwZTwmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlJlbmRlclN0
eWxlOjpzZXRTaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlT3V0c2lkZT46
OmNyZWF0ZUhhbmRsZXIoKSk7CisjZW5kaWYKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXaGl0ZVNwYWNlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFV2hpdGVTcGFjZSwgJlJlbmRl
clN0eWxlOjp3aGl0ZVNwYWNlLCBFV2hpdGVTcGFjZSwgJlJlbmRlclN0eWxlOjpzZXRXaGl0ZVNw
YWNlLCBFV2hpdGVTcGFjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsV2hpdGVTcGFjZT46OmNyZWF0
ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2lkb3dzLCBB
cHBseVByb3BlcnR5QXV0bzxzaG9ydCwgJlJlbmRlclN0eWxlOjp3aWRvd3MsICZSZW5kZXJTdHls
ZTo6c2V0V2lkb3dzLCAmUmVuZGVyU3R5bGU6Omhhc0F1dG9XaWRvd3MsICZSZW5kZXJTdHlsZTo6
c2V0SGFzQXV0b1dpZG93cz46OmNyZWF0ZUhhbmRsZXIoKSk7CisgICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5V2lkdGgsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjp3
aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRXaWR0aCwgJlJlbmRlclN0eWxlOjppbml0aWFsU2l6ZSwg
QXV0b0VuYWJsZWQsIExlZ2FjeUludHJpbnNpY0VuYWJsZWQsIEludHJpbnNpY0VuYWJsZWQsIE5v
bmVEaXNhYmxlZCwgVW5kZWZpbmVkRGlzYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdvcmRCcmVhaywgQXBwbHlQcm9wZXJ0eURlZmF1
bHQ8RVdvcmRCcmVhaywgJlJlbmRlclN0eWxlOjp3b3JkQnJlYWssIEVXb3JkQnJlYWssICZSZW5k
ZXJTdHlsZTo6c2V0V29yZEJyZWFrLCBFV29yZEJyZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxX
b3JkQnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdvcmRTcGFjaW5nLCBBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDxpbnQsICZSZW5k
ZXJTdHlsZTo6d29yZFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbExldHRlcldvcmRTcGFjaW5nLCBOb3JtYWxFbmFibGVkLCBUaGlja25l
c3NEaXNhYmxlZCwgU1ZHWm9vbUVuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIC8vIFVB
cyBtdXN0IHRyZWF0ICd3b3JkLXdyYXAnIGFzIGFuIGFsdGVybmF0ZSBuYW1lIGZvciB0aGUgJ292
ZXJmbG93LXdyYXAnIHByb3BlcnR5LiBTbyB1c2luZyB0aGUgc2FtZSBoYW5kbGVycy4KKyAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXb3JkV3JhcCwgQXBwbHlQcm9wZXJ0eURlZmF1
bHQ8RU92ZXJmbG93V3JhcCwgJlJlbmRlclN0eWxlOjpvdmVyZmxvd1dyYXAsIEVPdmVyZmxvd1dy
YXAsICZSZW5kZXJTdHlsZTo6c2V0T3ZlcmZsb3dXcmFwLCBFT3ZlcmZsb3dXcmFwLCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxPdmVyZmxvd1dyYXA+OjpjcmVhdGVIYW5kbGVyKCkpOworICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVpJbmRleCwgQXBwbHlQcm9wZXJ0eUF1dG88aW50LCAm
UmVuZGVyU3R5bGU6OnpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRaSW5kZXgsICZSZW5kZXJTdHls
ZTo6aGFzQXV0b1pJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRIYXNBdXRvWkluZGV4Pjo6Y3JlYXRl
SGFuZGxlcigpKTsKKyAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlab29tLCBBcHBs
eVByb3BlcnR5Wm9vbTo6Y3JlYXRlSGFuZGxlcigpKTsKK30KKworCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4yNThiNDcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuaApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBEZXByZWNhdGVkU3R5bGVCdWlsZGVyX2gKKyNkZWZpbmUgRGVwcmVjYXRlZFN0
eWxlQnVpbGRlcl9oCisKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDU1NWYWx1ZTsKK2NsYXNzIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI7CitjbGFzcyBTdHlsZVJl
c29sdmVyOworCitjbGFzcyBQcm9wZXJ0eUhhbmRsZXIgeworcHVibGljOgorICAgIHR5cGVkZWYg
dm9pZCAoKkluaGVyaXRGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopOwor
ICAgIHR5cGVkZWYgdm9pZCAoKkluaXRpYWxGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciopOworICAgIHR5cGVkZWYgdm9pZCAoKkFwcGx5RnVuY3Rpb24pKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqLCBDU1NWYWx1ZSopOworICAgIFByb3BlcnR5SGFuZGxlcigpIDog
bV9pbmhlcml0KDApLCBtX2luaXRpYWwoMCksIG1fYXBwbHkoMCkgeyB9CisgICAgUHJvcGVydHlI
YW5kbGVyKEluaGVyaXRGdW5jdGlvbiBpbmhlcml0LCBJbml0aWFsRnVuY3Rpb24gaW5pdGlhbCwg
QXBwbHlGdW5jdGlvbiBhcHBseSkgOiBtX2luaGVyaXQoaW5oZXJpdCksIG1faW5pdGlhbChpbml0
aWFsKSwgbV9hcHBseShhcHBseSkgeyB9CisgICAgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIGNvbnN0
IHsgQVNTRVJUKG1faW5oZXJpdCk7ICgqbV9pbmhlcml0KShwcm9wZXJ0eUlELCBzdHlsZVJlc29s
dmVyKTsgfQorICAgIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSBjb25zdCB7IEFTU0VSVChtX2luaXRp
YWwpOyAoKm1faW5pdGlhbCkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7IH0KKyAgICB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIGNvbnN0IHsgQVNTRVJUKG1fYXBwbHkpOyAoKm1f
YXBwbHkpKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsgfQorICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5oZXJpdCAmJiBtX2luaXRpYWwgJiYgbV9hcHBseTsg
fQorICAgIEluaGVyaXRGdW5jdGlvbiBpbmhlcml0RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X2luaGVyaXQ7IH0KKyAgICBJbml0aWFsRnVuY3Rpb24gaW5pdGlhbEZ1bmN0aW9uKCkgeyByZXR1
cm4gbV9pbml0aWFsOyB9CisgICAgQXBwbHlGdW5jdGlvbiBhcHBseUZ1bmN0aW9uKCkgeyByZXR1
cm4gbV9hcHBseTsgfQorcHJpdmF0ZToKKyAgICBJbmhlcml0RnVuY3Rpb24gbV9pbmhlcml0Owor
ICAgIEluaXRpYWxGdW5jdGlvbiBtX2luaXRpYWw7CisgICAgQXBwbHlGdW5jdGlvbiBtX2FwcGx5
OworfTsKKworY2xhc3MgRGVwcmVjYXRlZFN0eWxlQnVpbGRlciB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoRGVwcmVjYXRlZFN0eWxlQnVpbGRlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBEZXByZWNhdGVkU3R5bGVCdWlsZGVyJiBzaGFy
ZWRTdHlsZUJ1aWxkZXIoKTsKKworICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgcHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQodmFsaWQocHJvcGVydHkpKTsKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlNYXBbaW5kZXgo
cHJvcGVydHkpXTsKKyAgICB9Citwcml2YXRlOgorICAgIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIo
KTsKKyAgICBzdGF0aWMgaW50IGluZGV4KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCisgICAgewor
ICAgICAgICByZXR1cm4gcHJvcGVydHkgLSBmaXJzdENTU1Byb3BlcnR5OworICAgIH0KKworICAg
IHN0YXRpYyBib29sIHZhbGlkKENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCisgICAgeworICAgICAg
ICBpbnQgaSA9IGluZGV4KHByb3BlcnR5KTsKKyAgICAgICAgcmV0dXJuIGkgPj0gMCAmJiBpIDwg
bnVtQ1NTUHJvcGVydGllczsKKyAgICB9CisKKyAgICB2b2lkIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIpCisg
ICAgeworICAgICAgICBBU1NFUlQodmFsaWQocHJvcGVydHkpKTsKKyAgICAgICAgQVNTRVJUKCFw
cm9wZXJ0eUhhbmRsZXIocHJvcGVydHkpLmlzVmFsaWQoKSk7CisgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoIWlzRXhwYW5kZWRTaG9ydGhhbmQocHJvcGVydHkpLCAiU2hvcnRoYW5kIHByb3Bl
cnR5IGlkID0gJWQgc2hvdWxkbid0IGJlIGluc2VydGVkIGludG8gU3R5bGVCdWlsZGVyLiBTaG9y
dGhhbmRzIHNob3VsZCBiZSBleHBhbmRlZCBhdCBwYXJzaW5nIHRpbWUuIiwgcHJvcGVydHkpOwor
ICAgICAgICBtX3Byb3BlcnR5TWFwW2luZGV4KHByb3BlcnR5KV0gPSBoYW5kbGVyOworICAgIH0K
KworICAgIHZvaWQgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5SUQgbmV3UHJvcGVydHks
IENTU1Byb3BlcnR5SUQgZXF1aXZhbGVudFByb3BlcnR5KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHZhbGlkKG5ld1Byb3BlcnR5KSk7CisgICAgICAgIEFTU0VSVCh2YWxpZChlcXVpdmFsZW50UHJv
cGVydHkpKTsKKyAgICAgICAgQVNTRVJUKCFwcm9wZXJ0eUhhbmRsZXIobmV3UHJvcGVydHkpLmlz
VmFsaWQoKSk7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWlzRXhwYW5kZWRTaG9ydGhh
bmQobmV3UHJvcGVydHkpLCAiU2hvcnRoYW5kIHByb3BlcnR5IGlkID0gJWQgc2hvdWxkbid0IGJl
IGluc2VydGVkIGludG8gU3R5bGVCdWlsZGVyLiBTaG9ydGhhbmRzIHNob3VsZCBiZSBleHBhbmRl
ZCBhdCBwYXJzaW5nIHRpbWUuIiwgbmV3UHJvcGVydHkpOworICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKCFpc0V4cGFuZGVkU2hvcnRoYW5kKGVxdWl2YWxlbnRQcm9wZXJ0eSksICJTaG9ydGhh
bmQgcHJvcGVydHkgaWQgPSAlZCBzaG91bGRuJ3QgYmUgaW5zZXJ0ZWQgaW50byBTdHlsZUJ1aWxk
ZXIuIFNob3J0aGFuZHMgc2hvdWxkIGJlIGV4cGFuZGVkIGF0IHBhcnNpbmcgdGltZS4iLCBlcXVp
dmFsZW50UHJvcGVydHkpOworICAgICAgICBtX3Byb3BlcnR5TWFwW2luZGV4KG5ld1Byb3BlcnR5
KV0gPSBtX3Byb3BlcnR5TWFwW2luZGV4KGVxdWl2YWxlbnRQcm9wZXJ0eSldOworICAgIH0KKwor
ICAgIFByb3BlcnR5SGFuZGxlciBtX3Byb3BlcnR5TWFwW251bUNTU1Byb3BlcnRpZXNdOworfTsK
KworfQorCisjZW5kaWYgLy8gRGVwcmVjYXRlZFN0eWxlQnVpbGRlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUJ1aWxkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzNhMDdiLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjM1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCi0KLSNpbmNsdWRlICJCYXNpY1NoYXBlRnVu
Y3Rpb25zLmgiCi0jaW5jbHVkZSAiQmFzaWNTaGFwZXMuaCIKLSNpbmNsdWRlICJDU1NBc3BlY3RS
YXRpb1ZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgotI2luY2x1ZGUg
IkNTU0N1cnNvckltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBp
bmdzLmgiCi0jaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlTGlz
dC5oIgotI2luY2x1ZGUgIkNsaXBQYXRoT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ3Vyc29yTGlz
dC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1
ZGUgIlBhaXIuaCIKLSNpbmNsdWRlICJSZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5j
bHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCi0jaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotCi0jaWYg
RU5BQkxFKENTU19FWENMVVNJT05TKQotI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlVmFsdWUuaCIK
LSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWVudW0gRXhwYW5kVmFsdWVCZWhhdmlvciB7U3VwcHJlc3NWYWx1ZSA9IDAsIEV4cGFuZFZhbHVl
fTsKLXRlbXBsYXRlIDxFeHBhbmRWYWx1ZUJlaGF2aW9yIGV4cGFuZFZhbHVlLCBDU1NQcm9wZXJ0
eUlEIG9uZSA9IENTU1Byb3BlcnR5SW52YWxpZCwgQ1NTUHJvcGVydHlJRCB0d28gPSBDU1NQcm9w
ZXJ0eUludmFsaWQsIENTU1Byb3BlcnR5SUQgdGhyZWUgPSBDU1NQcm9wZXJ0eUludmFsaWQsIENT
U1Byb3BlcnR5SUQgZm91ciA9IENTU1Byb3BlcnR5SW52YWxpZCwgQ1NTUHJvcGVydHlJRCBmaXZl
ID0gQ1NTUHJvcGVydHlJbnZhbGlkPgotY2xhc3MgQXBwbHlQcm9wZXJ0eUV4cGFuZGluZyB7Ci1w
dWJsaWM6Ci0KLSAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZD4KLSAgICBzdGF0aWMgaW5s
aW5lIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgaWYgKGlkID09IENTU1By
b3BlcnR5SW52YWxpZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjb25zdCBTdHls
ZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIoKTsKLSAg
ICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gdGFibGUucHJvcGVydHlIYW5k
bGVyKGlkKTsKLSAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKQotICAgICAgICAgICAgaGFu
ZGxlci5hcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAgICBhcHBs
eUluaGVyaXRWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBh
cHBseUluaGVyaXRWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAg
ICBhcHBseUluaGVyaXRWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0g
ICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIp
OwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29s
dmVyKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZD4KLSAgICBzdGF0
aWMgaW5saW5lIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgaWYgKGlkID09
IENTU1Byb3BlcnR5SW52YWxpZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjb25z
dCBTdHlsZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIo
KTsKLSAgICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gdGFibGUucHJvcGVy
dHlIYW5kbGVyKGlkKTsKLSAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKQotICAgICAgICAg
ICAgaGFuZGxlci5hcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAg
ICBhcHBseUluaXRpYWxWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAg
ICAgICBhcHBseUluaXRpYWxWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwot
ICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZl
cik7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPGZvdXI+KHByb3BlcnR5SUQsIHN0eWxlUmVz
b2x2ZXIpOwotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZD4KLSAg
ICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgY29uc3QgU3R5bGVCdWlsZGVyJiB0YWJsZSA9IFN0eWxlQnVpbGRlcjo6c2hh
cmVkU3R5bGVCdWlsZGVyKCk7Ci0gICAgICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFuZGxl
ciA9IHRhYmxlLnByb3BlcnR5SGFuZGxlcihpZCk7Ci0gICAgICAgIGlmIChoYW5kbGVyLmlzVmFs
aWQoKSkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJl
c29sdmVyLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghZXhwYW5kVmFsdWUpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgYXBwbHlWYWx1ZTxvbmU+KHByb3BlcnR5SUQsIHN0eWxlUmVz
b2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgYXBwbHlWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0eWxl
UmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgYXBwbHlWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBhcHBseVZhbHVlPGZvdXI+KHByb3BlcnR5
SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAgYXBwbHlWYWx1ZTxmaXZlPihwcm9w
ZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBQcm9wZXJ0
eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJ
bmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9Ci19OwotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgR2V0dGVyVHlwZSwgR2V0dGVyVHlwZSAoUmVuZGVyU3R5bGU6Oipn
ZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdHlwZW5hbWUgU2V0dGVyVHlwZSwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoU2V0dGVyVHlwZSksIHR5cGVuYW1lIEluaXRpYWxUeXBl
LCBJbml0aWFsVHlwZSAoKmluaXRpYWxGdW5jdGlvbikoKT4KLWNsYXNzIEFwcGx5UHJvcGVydHlE
ZWZhdWx0QmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5
bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2
YWx1ZSk7IH0KLSAgICBzdGF0aWMgR2V0dGVyVHlwZSB2YWx1ZShSZW5kZXJTdHlsZSogc3R5bGUp
IHsgcmV0dXJuIChzdHlsZS0+KmdldHRlckZ1bmN0aW9uKSgpOyB9Ci0gICAgc3RhdGljIEluaXRp
YWxUeXBlIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRpYWxGdW5jdGlvbikoKTsgfQotICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgdmFsdWUo
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikg
eyBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbml0aWFsKCkpOyB9Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiwgQ1NTVmFs
dWUqKSB7IH0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJl
dHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFs
dWUsICZhcHBseVZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEdldHRlclR5cGUs
IEdldHRlclR5cGUgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHR5cGVu
YW1lIFNldHRlclR5cGUsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFNldHRl
clR5cGUpLCB0eXBlbmFtZSBJbml0aWFsVHlwZSwgSW5pdGlhbFR5cGUgKCppbml0aWFsRnVuY3Rp
b24pKCk+Ci1jbGFzcyBBcHBseVByb3BlcnR5RGVmYXVsdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7IChz
dHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQot
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpKTsKLSAgICB9Ci0gICAgc3RhdGljIFByb3BlcnR5
SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFuZGxlciBo
YW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEdldHRlclR5cGUsIGdldHRlckZ1bmN0
aW9uLCBTZXR0ZXJUeXBlLCBzZXR0ZXJGdW5jdGlvbiwgSW5pdGlhbFR5cGUsIGluaXRpYWxGdW5j
dGlvbj46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlciho
YW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBw
bHlWYWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIE51bWJlclR5cGUsIE51
bWJlclR5cGUgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJl
bmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKE51bWJlclR5cGUpLCBOdW1iZXJUeXBlICgqaW5p
dGlhbEZ1bmN0aW9uKSgpLCBpbnQgaWRNYXBzVG9NaW51c09uZSA9IENTU1ZhbHVlQXV0bz4KLWNs
YXNzIEFwcGx5UHJvcGVydHlOdW1iZXIgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHNldFZh
bHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTnVtYmVyVHlwZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0
ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0g
ICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBpZE1hcHNUb01pbnVzT25lKQotICAgICAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgLTEpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+
Z2V0VmFsdWU8TnVtYmVyVHlwZT4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKLSAg
ICB9Ci0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0g
ICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNl
PE51bWJlclR5cGUsIGdldHRlckZ1bmN0aW9uLCBOdW1iZXJUeXBlLCBzZXR0ZXJGdW5jdGlvbiwg
TnVtYmVyVHlwZSwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwotICAgICAgICBy
ZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIu
aW5pdGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8
U3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQg
KFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4pLCBT
dHlsZUltYWdlKiAoKmluaXRpYWxGdW5jdGlvbikoKSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4K
LWNsYXNzIEFwcGx5UHJvcGVydHlTdHlsZUltYWdlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkgeyAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0
aW9uKShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOyB9Ci0gICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIFBy
b3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPFN0eWxlSW1h
Z2UqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiwgc2V0dGVyRnVuY3Rp
b24sIFN0eWxlSW1hZ2UqLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7Ci0gICAg
ICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rpb24oKSwgaGFu
ZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOwotICAgIH0KLX07Ci0KLWVudW0g
QXV0b1ZhbHVlVHlwZSB7TnVtYmVyID0gMCwgQ29tcHV0ZUxlbmd0aH07Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAo
UmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoVCksIGJvb2wgKFJlbmRlclN0eWxlOjoqaGFz
QXV0b0Z1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldEF1dG9GdW5jdGlv
bikoKSwgQXV0b1ZhbHVlVHlwZSB2YWx1ZVR5cGUgPSBOdW1iZXIsIGludCBhdXRvSWRlbnRpdHkg
PSBDU1NWYWx1ZUF1dG8+Ci1jbGFzcyBBcHBseVByb3BlcnR5QXV0byB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBUIHZhbHVlKSB7IChzdHls
ZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgVCB2YWx1ZShSZW5kZXJT
dHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmdldHRlckZ1bmN0aW9uKSgpOyB9Ci0gICAg
c3RhdGljIGJvb2wgaGFzQXV0byhSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+
Kmhhc0F1dG9GdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lkIHNldEF1dG8oUmVuZGVyU3R5
bGUqIHN0eWxlKSB7IChzdHlsZS0+KnNldEF1dG9GdW5jdGlvbikoKTsgfQotCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIGlmIChoYXNBdXRvKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCkpKQotICAgICAgICAgICAgc2V0QXV0byhzdHlsZVJlc29sdmVyLT5zdHlsZSgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgdmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOwotICAgIH0KLQotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0QXV0byhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsgfQot
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQo
KSA9PSBhdXRvSWRlbnRpdHkpCi0gICAgICAgICAgICBzZXRBdXRvKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCkpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gTnVtYmVyKQotICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnByaW1pdGl2ZVZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAodmFsdWVUeXBlID09IENvbXB1dGVMZW5ndGgpCi0gICAgICAgICAgICBz
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxl
bmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVu
dFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpOwotICAg
IH0KLQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJu
IFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwg
JmFwcGx5VmFsdWUpOyB9Ci19OwotCi1jbGFzcyBBcHBseVByb3BlcnR5Q2xpcCB7Ci1wcml2YXRl
OgotICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50
Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAgfQotcHVibGljOgotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCk7Ci0gICAgICAgIGlm
ICghcGFyZW50U3R5bGUtPmhhc0NsaXAoKSkKLSAgICAgICAgICAgIHJldHVybiBhcHBseUluaXRp
YWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0Q2xpcChwYXJlbnRTdHlsZS0+Y2xpcFRvcCgpLCBwYXJlbnRTdHlsZS0+
Y2xpcFJpZ2h0KCksIHBhcmVudFN0eWxlLT5jbGlwQm90dG9tKCksIHBhcmVudFN0eWxlLT5jbGlw
TGVmdCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVl
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBM
ZW5ndGgoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAoZmFs
c2UpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotCi0gICAgICAgIGlmIChSZWN0KiByZWN0
ID0gcHJpbWl0aXZlVmFsdWUtPmdldFJlY3RWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBMZW5ndGgg
dG9wID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPnRvcCgpKTsKLSAgICAg
ICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0
LT5yaWdodCgpKTsKLSAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9MZW5ndGgo
c3R5bGVSZXNvbHZlciwgcmVjdC0+Ym90dG9tKCkpOwotICAgICAgICAgICAgTGVuZ3RoIGxlZnQg
PSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+bGVmdCgpKTsKLSAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAodG9wLCByaWdodCwgYm90dG9tLCBs
ZWZ0KTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAodHJ1
ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVBdXRvKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlw
KExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKLSAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4g
UHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAm
YXBwbHlWYWx1ZSk7IH0KLX07Ci0KLWVudW0gQ29sb3JJbmhlcml0IHtOb0luaGVyaXRGcm9tUGFy
ZW50ID0gMCwgSW5oZXJpdEZyb21QYXJlbnR9OwotQ29sb3IgZGVmYXVsdEluaXRpYWxDb2xvcigp
OwotQ29sb3IgZGVmYXVsdEluaXRpYWxDb2xvcigpIHsgcmV0dXJuIENvbG9yKCk7IH0KLXRlbXBs
YXRlIDxDb2xvckluaGVyaXQgaW5oZXJpdENvbG9yRnJvbVBhcmVudCwKLSAgICAgICAgICBDb2xv
ciAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwKLSAgICAgICAgICB2b2lk
IChSZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShjb25zdCBDb2xvciYpLAotICAgICAgICAg
IHZvaWQgKFJlbmRlclN0eWxlOjoqdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlvbikoY29uc3QgQ29s
b3ImKSwKLSAgICAgICAgICBDb2xvciAoUmVuZGVyU3R5bGU6OipkZWZhdWx0RnVuY3Rpb24pKCkg
Y29uc3QsCi0gICAgICAgICAgQ29sb3IgKCppbml0aWFsRnVuY3Rpb24pKCkgPSAmZGVmYXVsdElu
aXRpYWxDb2xvcj4KLWNsYXNzIEFwcGx5UHJvcGVydHlDb2xvciB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIC8vIFZpc2l0ZWQgbGluayBzdHlsZSBjYW4g
bmV2ZXIgZXhwbGljaXRseSBpbmhlcml0IGZyb20gcGFyZW50IHZpc2l0ZWQgbGluayBzdHlsZSBz
byBubyBzZXBhcmF0ZSBnZXR0ZXJzIGFyZSBuZWVkZWQuCi0gICAgICAgIENvbG9yIGNvbG9yID0g
KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipnZXR0ZXJGdW5jdGlvbikoKTsKLSAgICAg
ICAgYXBwbHlDb2xvclZhbHVlKHN0eWxlUmVzb2x2ZXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9y
IDogKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPipkZWZhdWx0RnVuY3Rpb24pKCkpOwot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAgICBhcHBseUNvbG9y
VmFsdWUoc3R5bGVSZXNvbHZlciwgaW5pdGlhbEZ1bmN0aW9uKCkpOwotICAgIH0KLQotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGlmIChpbmhlcml0Q29sb3JGcm9tUGFyZW50
ICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQot
ICAgICAgICAgICAgYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpKQotICAgICAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQotICAgICAgICAgICAgICAgIChzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNv
bHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUsIC8qIGZvclZpc2l0
ZWRMaW5rICovIHRydWUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFw
cGx5Q29sb3JWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBjb25zdCBDb2xvciYg
Y29sb3IpCi0gICAgewotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCkpCi0gICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNl
dHRlckZ1bmN0aW9uKShjb2xvcik7Ci0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0gICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKGNvbG9yKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0
eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZh
bHVlKTsgfQotfTsKLQotdGVtcGxhdGUgPFRleHREaXJlY3Rpb24gKFJlbmRlclN0eWxlOjoqZ2V0
dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24p
KFRleHREaXJlY3Rpb24pLCBUZXh0RGlyZWN0aW9uICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgotY2xh
c3MgQXBwbHlQcm9wZXJ0eURpcmVjdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZh
dWx0PFRleHREaXJlY3Rpb24sIGdldHRlckZ1bmN0aW9uLCBUZXh0RGlyZWN0aW9uLCBzZXR0ZXJG
dW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgaW5pdGlhbEZ1bmN0aW9uPjo6YXBwbHlWYWx1ZShwcm9w
ZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBzdHlsZVJlc29sdmVyLT5lbGVtZW50KCk7Ci0gICAgICAgIGlmIChlbGVtZW50ICYmIHN0eWxl
UmVzb2x2ZXItPmVsZW1lbnQoKSA9PSBlbGVtZW50LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1l
bnQoKSkKLSAgICAgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9u
RG9jdW1lbnRFbGVtZW50KHRydWUpOwotICAgIH0KLQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRs
ZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxl
ciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHREaXJlY3Rpb24sIGdldHRlckZ1bmN0aW9uLCBU
ZXh0RGlyZWN0aW9uLCBzZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgaW5pdGlhbEZ1bmN0
aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwotICAgICAgICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhh
bmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBs
eVZhbHVlKTsKLSAgICB9Ci19OwotCi1lbnVtIExlbmd0aEF1dG8geyBBdXRvRGlzYWJsZWQgPSAw
LCBBdXRvRW5hYmxlZCB9OwotZW51bSBMZW5ndGhMZWdhY3lJbnRyaW5zaWMgeyBMZWdhY3lJbnRy
aW5zaWNEaXNhYmxlZCA9IDAsIExlZ2FjeUludHJpbnNpY0VuYWJsZWQgfTsKLWVudW0gTGVuZ3Ro
SW50cmluc2ljIHsgSW50cmluc2ljRGlzYWJsZWQgPSAwLCBJbnRyaW5zaWNFbmFibGVkIH07Ci1l
bnVtIExlbmd0aE5vbmUgeyBOb25lRGlzYWJsZWQgPSAwLCBOb25lRW5hYmxlZCB9OwotZW51bSBM
ZW5ndGhVbmRlZmluZWQgeyBVbmRlZmluZWREaXNhYmxlZCA9IDAsIFVuZGVmaW5lZEVuYWJsZWQg
fTsKLXRlbXBsYXRlIDxMZW5ndGggKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29u
c3QsCi0gICAgICAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoTGVuZ3Ro
KSwKLSAgICAgICAgICBMZW5ndGggKCppbml0aWFsRnVuY3Rpb24pKCksCi0gICAgICAgICAgTGVu
Z3RoQXV0byBhdXRvRW5hYmxlZCA9IEF1dG9EaXNhYmxlZCwKLSAgICAgICAgICBMZW5ndGhMZWdh
Y3lJbnRyaW5zaWMgbGVnYWN5SW50cmluc2ljRW5hYmxlZCA9IExlZ2FjeUludHJpbnNpY0Rpc2Fi
bGVkLAotICAgICAgICAgIExlbmd0aEludHJpbnNpYyBpbnRyaW5zaWNFbmFibGVkID0gSW50cmlu
c2ljRGlzYWJsZWQsCi0gICAgICAgICAgTGVuZ3RoTm9uZSBub25lRW5hYmxlZCA9IE5vbmVEaXNh
YmxlZCwKLSAgICAgICAgICBMZW5ndGhVbmRlZmluZWQgbm9uZVVuZGVmaW5lZCA9IFVuZGVmaW5l
ZERpc2FibGVkPgotY2xhc3MgQXBwbHlQcm9wZXJ0eUxlbmd0aCB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBMZW5ndGggdmFsdWUpIHsgKHN0
eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAg
ICBpZiAobm9uZUVuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVOb25lKSB7Ci0gICAgICAgICAgICBpZiAobm9uZVVuZGVmaW5lZCkKLSAgICAgICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoVW5kZWZpbmVkKSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgTGVuZ3RoKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZWdhY3lJbnRyaW5z
aWNFbmFibGVkKSB7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVJbnRyaW5zaWMpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgTGVuZ3RoKEludHJpbnNpYykpOwotICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVNaW5JbnRyaW5zaWMpCi0gICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKE1pbklu
dHJpbnNpYykpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbnRyaW5zaWNFbmFibGVkKSB7Ci0g
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJr
aXRNaW5Db250ZW50KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIExlbmd0aChNaW5Db250ZW50KSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRlbnQpCi0gICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKE1heENvbnRl
bnQpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlV2Via2l0RmlsbEF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkpOwotICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRG
aXRDb250ZW50KQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIExlbmd0aChGaXRDb250ZW50KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXV0b0Vu
YWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQotICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKCkpOwotICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICAgICAg
TGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwotICAgICAgICAgICAgbGVu
Z3RoLnNldFF1aXJrKHByaW1pdGl2ZVZhbHVlLT5pc1F1aXJrVmFsdWUoKSk7Ci0gICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBsZW5ndGgpOwotICAgICAgICB9IGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKSwgUGVyY2VudCkpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1Zh
bHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXIt
PnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKSkpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNl
bnRhZ2VMZW5ndGgoKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAg
ICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPExl
bmd0aCwgZ2V0dGVyRnVuY3Rpb24sIExlbmd0aCwgc2V0dGVyRnVuY3Rpb24sIExlbmd0aCwgaW5p
dGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwotICAgICAgICByZXR1cm4gUHJvcGVydHlI
YW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9u
KCksICZhcHBseVZhbHVlKTsKLSAgICB9Ci19OwotCi1lbnVtIFN0cmluZ0lkZW50QmVoYXZpb3Ig
eyBOb3RoaW5nTWFwc1RvTnVsbCA9IDAsIE1hcE5vbmVUb051bGwsIE1hcEF1dG9Ub051bGwgfTsK
LXRlbXBsYXRlIDxTdHJpbmdJZGVudEJlaGF2aW9yIGlkZW50QmVoYXZpb3IsIGNvbnN0IEF0b21p
Y1N0cmluZyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJl
bmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKGNvbnN0IEF0b21pY1N0cmluZyYpLCBjb25zdCBB
dG9taWNTdHJpbmcmICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgotY2xhc3MgQXBwbHlQcm9wZXJ0eVN0
cmluZyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9u
KSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIGlmICgoaWRlbnRCZWhhdmlvciA9
PSBNYXBOb25lVG9OdWxsICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Tm9uZSkKLSAgICAgICAgICAgIHx8IChpZGVudEJlaGF2aW9yID09IE1hcEF1dG9Ub051bGwgJiYg
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKSkKLSAgICAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIG51bGxBdG9tKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZl
VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwotICAgIH0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5k
bGVyIGNyZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRs
ZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8Y29uc3QgQXRvbWljU3RyaW5nJiwgZ2V0dGVy
RnVuY3Rpb24sIGNvbnN0IEF0b21pY1N0cmluZyYsIHNldHRlckZ1bmN0aW9uLCBjb25zdCBBdG9t
aWNTdHJpbmcmLCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7Ci0gICAgICAgIHJl
dHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5p
bml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDxM
ZW5ndGhTaXplIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChS
ZW5kZXJTdHlsZTo6KnNldHRlckZ1bmN0aW9uKShMZW5ndGhTaXplKSwgTGVuZ3RoU2l6ZSAoKmlu
aXRpYWxGdW5jdGlvbikoKT4KLWNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJSYWRpdXMgewotcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTGVuZ3Ro
U2l6ZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7Ci0gICAgICAgIFBhaXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZh
bHVlKCk7Ci0gICAgICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFpci0+c2Vj
b25kKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgTGVuZ3RoIHJhZGl1c1dpZHRo
OwotICAgICAgICBMZW5ndGggcmFkaXVzSGVpZ2h0OwotICAgICAgICBpZiAocGFpci0+Zmlyc3Qo
KS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICByYWRpdXNXaWR0aCA9IExlbmd0aChwYWly
LT5maXJzdCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKLSAgICAgICAgZWxzZSBpZiAo
cGFpci0+Zmlyc3QoKS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAgICAgICAg
IHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7
Ci0gICAgICAgIGVsc2UgaWYgKHBhaXItPmZpcnN0KCktPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VX
aXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICByYWRpdXNXaWR0aCA9IExlbmd0aCgocGFpci0+Zmly
c3QoKS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByYWRpdXNX
aWR0aCA9IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAgICAgIGlmIChwYWlyLT5zZWNvbmQo
KS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgocGFp
ci0+c2Vjb25kKCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwotICAgICAgICBlbHNlIGlm
IChwYWlyLT5zZWNvbmQoKS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAgICAg
ICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5n
dGgoKTsKLSAgICAgICAgZWxzZSBpZiAocGFpci0+c2Vjb25kKCktPmlzQ2FsY3VsYXRlZFBlcmNl
bnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgoKHBh
aXItPnNlY29uZCgpLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwotICAgICAgICBpbnQgd2lk
dGggPSByYWRpdXNXaWR0aC52YWx1ZSgpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gcmFkaXVzSGVp
Z2h0LnZhbHVlKCk7Ci0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCF3aWR0aCkKLSAgICAgICAgICAgIHJhZGl1c0hl
aWdodCA9IHJhZGl1c1dpZHRoOyAvLyBOdWxsIG91dCB0aGUgb3RoZXIgdmFsdWUuCi0gICAgICAg
IGVsc2UgaWYgKCFoZWlnaHQpCi0gICAgICAgICAgICByYWRpdXNXaWR0aCA9IHJhZGl1c0hlaWdo
dDsgLy8gTnVsbCBvdXQgdGhlIG90aGVyIHZhbHVlLgotCi0gICAgICAgIExlbmd0aFNpemUgc2l6
ZShyYWRpdXNXaWR0aCwgcmFkaXVzSGVpZ2h0KTsKLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgc2l6ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIg
Y3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9
IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxMZW5ndGhTaXplLCBnZXR0ZXJGdW5jdGlvbiwgTGVu
Z3RoU2l6ZSwgc2V0dGVyRnVuY3Rpb24sIExlbmd0aFNpemUsIGluaXRpYWxGdW5jdGlvbj46OmNy
ZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmlu
aGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgRmlsbExheWVyQWNj
ZXNzb3JUeXBlcyB7Ci0gICAgdHlwZWRlZiBUIFNldHRlcjsKLSAgICB0eXBlZGVmIFQgR2V0dGVy
OwotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBGaWxsTGF5ZXJBY2Nlc3NvclR5cGVzPFN0eWxl
SW1hZ2UqPiB7Ci0gICAgdHlwZWRlZiBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFNldHRlcjsKLSAg
ICB0eXBlZGVmIFN0eWxlSW1hZ2UqIEdldHRlcjsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
LAotICAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwKLSAgICAgICAgICBFRmlsbExh
eWVyVHlwZSBmaWxsTGF5ZXJUeXBlLAotICAgICAgICAgIEZpbGxMYXllciogKFJlbmRlclN0eWxl
OjoqYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCksCi0gICAgICAgICAgY29uc3QgRmlsbExheWVyKiAo
UmVuZGVyU3R5bGU6OipsYXllcnNGdW5jdGlvbikoKSBjb25zdCwKLSAgICAgICAgICBib29sIChG
aWxsTGF5ZXI6Oip0ZXN0RnVuY3Rpb24pKCkgY29uc3QsCi0gICAgICAgICAgdHlwZW5hbWUgRmls
bExheWVyQWNjZXNzb3JUeXBlczxUPjo6R2V0dGVyIChGaWxsTGF5ZXI6OipnZXRGdW5jdGlvbiko
KSBjb25zdCwKLSAgICAgICAgICB2b2lkIChGaWxsTGF5ZXI6OipzZXRGdW5jdGlvbikodHlwZW5h
bWUgRmlsbExheWVyQWNjZXNzb3JUeXBlczxUPjo6U2V0dGVyKSwKLSAgICAgICAgICB2b2lkIChG
aWxsTGF5ZXI6OipjbGVhckZ1bmN0aW9uKSgpLAotICAgICAgICAgIHR5cGVuYW1lIEZpbGxMYXll
ckFjY2Vzc29yVHlwZXM8VD46OkdldHRlciAoKmluaXRpYWxGdW5jdGlvbikoRUZpbGxMYXllclR5
cGUpLAotICAgICAgICAgIHZvaWQgKENTU1RvU3R5bGVNYXA6OiptYXBGaWxsRnVuY3Rpb24pKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik+Ci1jbGFzcyBBcHBseVByb3BlcnR5
RmlsbExheWVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAg
ICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vz
c0xheWVyc0Z1bmN0aW9uKSgpOwotICAgICAgICBGaWxsTGF5ZXIqIHByZXZDaGlsZCA9IDA7Ci0g
ICAgICAgIGNvbnN0IEZpbGxMYXllciogY3VyclBhcmVudCA9IChzdHlsZVJlc29sdmVyLT5wYXJl
bnRTdHlsZSgpLT4qbGF5ZXJzRnVuY3Rpb24pKCk7Ci0gICAgICAgIHdoaWxlIChjdXJyUGFyZW50
ICYmIChjdXJyUGFyZW50LT4qdGVzdEZ1bmN0aW9uKSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWN1
cnJDaGlsZCkgewotICAgICAgICAgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBhIG5ldyBsYXllci4q
LwotICAgICAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBGaWxsTGF5ZXIoZmlsbExheWVyVHlw
ZSk7Ci0gICAgICAgICAgICAgICAgcHJldkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAoY3VyckNoaWxkLT4qc2V0RnVuY3Rpb24pKChjdXJyUGFy
ZW50LT4qZ2V0RnVuY3Rpb24pKCkpOwotICAgICAgICAgICAgcHJldkNoaWxkID0gY3VyckNoaWxk
OwotICAgICAgICAgICAgY3VyckNoaWxkID0gcHJldkNoaWxkLT5uZXh0KCk7Ci0gICAgICAgICAg
ICBjdXJyUGFyZW50ID0gY3VyclBhcmVudC0+bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
d2hpbGUgKGN1cnJDaGlsZCkgewotICAgICAgICAgICAgLyogUmVzZXQgYW55IHJlbWFpbmluZyBs
YXllcnMgdG8gbm90IGhhdmUgdGhlIHByb3BlcnR5IHNldC4gKi8KLSAgICAgICAgICAgIChjdXJy
Q2hpbGQtPipjbGVhckZ1bmN0aW9uKSgpOwotICAgICAgICAgICAgY3VyckNoaWxkID0gY3VyckNo
aWxkLT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQot
ICAgIHsKLSAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwotICAgICAgICAoY3VyckNoaWxkLT4qc2V0
RnVuY3Rpb24pKCgqaW5pdGlhbEZ1bmN0aW9uKShmaWxsTGF5ZXJUeXBlKSk7Ci0gICAgICAgIGZv
ciAoY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCk7IGN1cnJDaGlsZDsgY3VyckNoaWxkID0g
Y3VyckNoaWxkLT5uZXh0KCkpCi0gICAgICAgICAgICAoY3VyckNoaWxkLT4qY2xlYXJGdW5jdGlv
bikoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPiph
Y2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKLSAgICAgICAgRmlsbExheWVyKiBwcmV2Q2hpbGQgPSAw
OwotICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkKLSNpZiBFTkFCTEUoQ1NTX0lNQUdF
X1NFVCkKLSAgICAgICAgJiYgIXZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKQotI2VuZGlmCi0gICAg
ICAgICkgewotICAgICAgICAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50byBh
IGxheWVyLCBjcmVhdGluZyBuZXcgbGF5ZXJzIGFzIG5lZWRlZC4gKi8KLSAgICAgICAgICAgIENT
U1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUp
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxl
bmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoIWN1cnJDaGlsZCkgewotICAgICAg
ICAgICAgICAgICAgICAvKiBOZWVkIHRvIG1ha2UgYSBuZXcgbGF5ZXIgdG8gaG9sZCB0aGlzIHZh
bHVlICovCi0gICAgICAgICAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBGaWxsTGF5ZXIoZmls
bExheWVyVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIHByZXZDaGlsZC0+c2V0TmV4dChjdXJy
Q2hpbGQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZl
ci0+c3R5bGVNYXAoKS0+Km1hcEZpbGxGdW5jdGlvbikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2
YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOwotICAgICAgICAgICAgICAgIHBy
ZXZDaGlsZCA9IGN1cnJDaGlsZDsKLSAgICAgICAgICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hp
bGQtPm5leHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRmlsbEZ1bmN0aW9uKShwcm9wZXJ0eUlk
LCBjdXJyQ2hpbGQsIHZhbHVlKTsKLSAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+
bmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChjdXJyQ2hpbGQpIHsKLSAgICAgICAg
ICAgIC8qIFJlc2V0IGFsbCByZW1haW5pbmcgbGF5ZXJzIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0
eSBzZXQuICovCi0gICAgICAgICAgICAoY3VyckNoaWxkLT4qY2xlYXJGdW5jdGlvbikoKTsKLSAg
ICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4g
UHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAm
YXBwbHlWYWx1ZSk7IH0KLX07Ci0KLWVudW0gQ29tcHV0ZUxlbmd0aE5vcm1hbCB7Tm9ybWFsRGlz
YWJsZWQgPSAwLCBOb3JtYWxFbmFibGVkfTsKLWVudW0gQ29tcHV0ZUxlbmd0aFRoaWNrbmVzcyB7
VGhpY2tuZXNzRGlzYWJsZWQgPSAwLCBUaGlja25lc3NFbmFibGVkfTsKLWVudW0gQ29tcHV0ZUxl
bmd0aFNWR1pvb20ge1NWR1pvb21EaXNhYmxlZCA9IDAsIFNWR1pvb21FbmFibGVkfTsKLXRlbXBs
YXRlIDx0eXBlbmFtZSBULAotICAgICAgICAgIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rp
b24pKCkgY29uc3QsCi0gICAgICAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlv
bikoVCksCi0gICAgICAgICAgVCAoKmluaXRpYWxGdW5jdGlvbikoKSwKLSAgICAgICAgICBDb21w
dXRlTGVuZ3RoTm9ybWFsIG5vcm1hbEVuYWJsZWQgPSBOb3JtYWxEaXNhYmxlZCwKLSAgICAgICAg
ICBDb21wdXRlTGVuZ3RoVGhpY2tuZXNzIHRoaWNrbmVzc0VuYWJsZWQgPSBUaGlja25lc3NEaXNh
YmxlZCwKLSAgICAgICAgICBDb21wdXRlTGVuZ3RoU1ZHWm9vbSBzdmdab29tRW5hYmxlZCA9IFNW
R1pvb21EaXNhYmxlZD4KLWNsYXNzIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFQgdmFsdWUp
IHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgLy8gbm90ZTogQ1NTUHJvcGVydHlMZXR0ZXIv
V29yZFNwYWNpbmcgcmlnaHQgbm93IHNldHMgdG8gemVybyBpZiBpdCdzIG5vdCBhIHByaW1pdGl2
ZSB2YWx1ZSBmb3Igc29tZSByZWFzb24uLi4KLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpOwotCi0gICAgICAgIGludCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpOwot
ICAgICAgICBUIGxlbmd0aDsKLSAgICAgICAgaWYgKG5vcm1hbEVuYWJsZWQgJiYgaWRlbnQgPT0g
Q1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IDA7Ci0gICAgICAgIH0gZWxz
ZSBpZiAodGhpY2tuZXNzRW5hYmxlZCAmJiBpZGVudCA9PSBDU1NWYWx1ZVRoaW4pIHsKLSAgICAg
ICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIH0gZWxzZSBpZiAodGhpY2tuZXNzRW5hYmxlZCAm
JiBpZGVudCA9PSBDU1NWYWx1ZU1lZGl1bSkgewotICAgICAgICAgICAgbGVuZ3RoID0gMzsKLSAg
ICAgICAgfSBlbHNlIGlmICh0aGlja25lc3NFbmFibGVkICYmIGlkZW50ID09IENTU1ZhbHVlVGhp
Y2spIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IDU7Ci0gICAgICAgIH0gZWxzZSBpZiAoaWRlbnQg
PT0gQ1NTVmFsdWVJbnZhbGlkKSB7Ci0gICAgICAgICAgICBmbG9hdCB6b29tID0gKHN2Z1pvb21F
bmFibGVkICYmIHN0eWxlUmVzb2x2ZXItPnVzZVNWR1pvb21SdWxlcygpKSA/IDEuMGYgOiBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICAgICAgICAgIC8vIEFu
eSBvcmlnaW5hbCByZXN1bHQgdGhhdCB3YXMgPj0gMSBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8g
ZmFsbCBiZWxvdyAxLgotICAgICAgICAgICAgLy8gVGhpcyBrZWVwcyBib3JkZXIgbGluZXMgZnJv
bSB2YW5pc2hpbmcuCi0gICAgICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxl
bWVudFN0eWxlKCksIHpvb20pOwotICAgICAgICAgICAgaWYgKHpvb20gPCAxLjBmICYmIGxlbmd0
aCA8IDEuMCkgewotICAgICAgICAgICAgICAgIFQgb3JpZ2luYWxMZW5ndGggPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29s
dmVyLT5yb290RWxlbWVudFN0eWxlKCksIDEuMCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9yaWdp
bmFsTGVuZ3RoID49IDEuMCkKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMS4wOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGxlbmd0aCA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBz
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBsZW5ndGgpOwotICAgIH0KLSAgICBzdGF0
aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgUHJvcGVy
dHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8VCwgZ2V0dGVyRnVu
Y3Rpb24sIFQsIHNldHRlckZ1bmN0aW9uLCBULCBpbml0aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5k
bGVyKCk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoaGFuZGxlci5pbmhlcml0RnVu
Y3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFwcGx5VmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBUIChGb250RGVzY3JpcHRpb246OipnZXR0ZXJG
dW5jdGlvbikoKSBjb25zdCwgdm9pZCAoRm9udERlc2NyaXB0aW9uOjoqc2V0dGVyRnVuY3Rpb24p
KFQpLCBUIGluaXRpYWxWYWx1ZT4KLWNsYXNzIEFwcGx5UHJvcGVydHlGb250IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAg
ICAoZm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKHN0eWxlUmVzb2x2ZXItPnBhcmVu
dEZvbnREZXNjcmlwdGlvbigpLipnZXR0ZXJGdW5jdGlvbikoKSk7Ci0gICAgICAgIHN0eWxlUmVz
b2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgIH0KLQotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIChm
b250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKShpbml0aWFsVmFsdWUpOwotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICgh
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgKGZvbnREZXNj
cmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgIH0KLQot
ICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3Bl
cnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5
VmFsdWUpOyB9Ci19OwotCi1jbGFzcyBBcHBseVByb3BlcnR5Rm9udEZhbWlseSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24o
KTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICAKLSAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0
aW9uLmdlbmVyaWNGYW1pbHkoKSk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHko
cGFyZW50Rm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkpOwotICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0SXNTcGVjaWZpZWRGb250KHBhcmVudEZvbnREZXNjcmlwdGlvbi5pc1NwZWNpZmll
ZEZvbnQoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKLSAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgRm9udERl
c2NyaXB0aW9uIGluaXRpYWxEZXNjID0gRm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2Vu
ZXJpYyBmYW1pbHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlIHRvIG5vbi1tb25vc3BhY2UuCi0gICAg
ICAgIGlmIChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24u
dXNlRml4ZWREZWZhdWx0U2l6ZSgpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9u
dFNpemUoZm9udERlc2NyaXB0aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQo
c3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0
aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOwotICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0R2VuZXJpY0ZhbWlseShpbml0aWFsRGVzYy5nZW5lcmljRmFtaWx5KCkpOwotICAgICAgICBp
ZiAoIWluaXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuZmFtaWx5SXNFbXB0eSgpKQotICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShpbml0aWFsRGVzYy5maXJzdEZhbWlseSgpKTsK
LQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIEZv
bnRGYW1pbHkmIGZpcnN0RmFtaWx5ID0gZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCk7Ci0g
ICAgICAgIEZvbnRGYW1pbHkqIGN1cnJGYW1pbHkgPSAwOwotCi0gICAgICAgIC8vIEJlZm9yZSBt
YXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3ZSBzaG91bGQgcmVzZXQgdGhl
IGdlbmVyaWMgZmFtaWx5LgotICAgICAgICBib29sIG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRT
aXplID0gZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKTsKLSAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseSk7
Ci0KLSAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9y
ZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVl
KCk7Ci0gICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAg
ICAgQXRvbWljU3RyaW5nIGZhY2U7Ci0gICAgICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBz
dHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpOwotICAgICAgICAgICAgaWYgKGNv
bnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICBmYWNlID0gY29udGVudFZh
bHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgZWxzZSBpZiAoc2V0dGluZ3MpIHsK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5OgotICAgICAgICAgICAgICAgICAg
ICBmYWNlID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseSgpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2VyaWY6Ci0gICAgICAg
ICAgICAgICAgICAgIGZhY2UgPSBzZXJpZkZhbWlseTsKLSAgICAgICAgICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWls
eSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVTYW5zU2VyaWY6Ci0gICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzYW5zU2VyaWZGYW1p
bHk7Ci0gICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5
KEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5KTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6Ci0gICAgICAgICAg
ICAgICAgICAgIGZhY2UgPSBjdXJzaXZlRmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OkN1cnNpdmVGYW1p
bHkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENT
U1ZhbHVlRmFudGFzeToKLSAgICAgICAgICAgICAgICAgICAgZmFjZSA9IGZhbnRhc3lGYW1pbHk7
Ci0gICAgICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZv
bnREZXNjcmlwdGlvbjo6RmFudGFzeUZhbWlseSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6Ci0gICAgICAgICAgICAg
ICAgICAgIGZhY2UgPSBtb25vc3BhY2VGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFt
aWx5KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZVdlYmtpdFBpY3RvZ3JhcGg6Ci0gICAgICAgICAgICAgICAgICAgIGZhY2UgPSBwaWN0
b2dyYXBoRmFtaWx5OwotICAgICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2Vu
ZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlBpY3RvZ3JhcGhGYW1pbHkpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICghZmFjZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWN1
cnJGYW1pbHkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmlsbGluZyBpbiB0aGUgZmlyc3Qg
ZmFtaWx5LgotICAgICAgICAgICAgICAgICAgICBmaXJzdEZhbWlseS5zZXRGYW1pbHkoZmFjZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0RmFtaWx5LmFwcGVuZEZhbWlseSgwKTsgLy8gUmVt
b3ZlIGFueSBpbmhlcml0ZWQgZmFtaWx5LWZhbGxiYWNrIGxpc3QuCi0gICAgICAgICAgICAgICAg
ICAgIGN1cnJGYW1pbHkgPSAmZmlyc3RGYW1pbHk7Ci0gICAgICAgICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQoZm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1p
bHkoKSA9PSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFt
aWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5l
d0ZhbWlseS0+c2V0RmFtaWx5KGZhY2UpOwotICAgICAgICAgICAgICAgICAgICBjdXJyRmFtaWx5
LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsKLSAgICAgICAgICAgICAgICAgICAgY3VyckZhbWls
eSA9IG5ld0ZhbWlseS5nZXQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBXZSBjYW4ndCBjYWxsIHVzZUZpeGVkRGVmYXVsdFNpemUo
KSB1bnRpbCBhbGwgbmV3IGZvbnQgZmFtaWxpZXMgaGF2ZSBiZWVuIGFkZGVkCi0gICAgICAgIC8v
IElmIGN1cnJGYW1pbHkgaXMgbm9uLXplcm8gdGhlbiB3ZSBzZXQgYXQgbGVhc3Qgb25lIGZhbWls
eSBvbiB0aGlzIGRlc2NyaXB0aW9uLgotICAgICAgICBpZiAoY3VyckZhbWlseSkgewotICAgICAg
ICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYmIGZvbnREZXNjcmlwdGlv
bi51c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUp
Ci0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0
aW9uLCBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+ZG9j
dW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkg
LSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKLQotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIg
Y3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFs
dWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9Ci19OwotCi1jbGFzcyBBcHBs
eVByb3BlcnR5Rm9udFNpemUgewotcHJpdmF0ZToKLSAgICAvLyBXaGVuIHRoZSBDU1Mga2V5d29y
ZCAibGFyZ2VyIiBpcyB1c2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYXR0ZW1wdCB0byBtYXRjaCB3
aXRoaW4gdGhlIGtleXdvcmQKLSAgICAvLyB0YWJsZSwgYW5kIGZhaWxpbmcgdGhhdCwgd2lsbCBz
aW1wbHkgbXVsdGlwbHkgYnkgMS4yLgotICAgIHN0YXRpYyBmbG9hdCBsYXJnZXJGb250U2l6ZShm
bG9hdCBzaXplKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hlcmUgd2Ug
ZmFsbCBpbiB0aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRvIHh4eC1sYXJnZSkgYW5kIHNjYWxl
IHVwIHRvCi0gICAgICAgIC8vIHRoZSBuZXh0IHNpemUgbGV2ZWwuCi0gICAgICAgIHJldHVybiBz
aXplICogMS4yZjsKLSAgICB9Ci0KLSAgICAvLyBMaWtlIHRoZSBwcmV2aW91cyBmdW5jdGlvbiwg
YnV0IGZvciB0aGUga2V5d29yZCAic21hbGxlciIuCi0gICAgc3RhdGljIGZsb2F0IHNtYWxsZXJG
b250U2l6ZShmbG9hdCBzaXplKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQg
d2hlcmUgd2UgZmFsbCBpbiB0aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRvIHh4eC1sYXJnZSkg
YW5kIHNjYWxlIGRvd24gdG8KLSAgICAgICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4KLSAgICAg
ICAgcmV0dXJuIHNpemUgLyAxLjJmOwotICAgIH0KLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQotICAgIHsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKLQotICAgICAgICBpZiAo
c2l6ZSA8IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlv
bigpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoc3R5bGVSZXNvbHZl
ci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUoKSk7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFs
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7
Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZmxvYXQgc2l6ZSA9IHN0eWxl
UmVzb2x2ZXItPmZvbnRTaXplRm9yS2V5d29yZChzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLCBD
U1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSk7Ci0K
LSAgICAgICAgaWYgKHNpemUgPCAwKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShDU1NWYWx1ZU1lZGl1bSAtIENTU1ZhbHVlWHhT
bWFsbCArIDEpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3Jp
cHRpb24sIHNpemUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpOwotCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldEtleXdvcmRTaXplKDApOwotICAgICAgICBmbG9hdCBwYXJlbnRTaXplID0gMDsKLSAg
ICAgICAgYm9vbCBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNlOwotICAgICAgICBmbG9hdCBz
aXplID0gMDsKLQotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkgewot
ICAgICAgICAgICAgcGFyZW50U2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKLSAgICAgICAgICAgIHBhcmVudElzQWJz
b2x1dGVTaXplID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9u
KCkuaXNBYnNvbHV0ZVNpemUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbnQgaWRlbnQg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewotICAgICAgICAgICAgLy8gS2V5d29yZHMg
YXJlIGJlaW5nIHVzZWQuCi0gICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7Ci0gICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlWHhTbWFsbDoKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYU21hbGw6
Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGw6Ci0gICAgICAgICAgICBjYXNlIENTU1Zh
bHVlTWVkaXVtOgotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlOgotICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZVhMYXJnZToKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgot
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgotICAgICAgICAgICAgICAg
IHNpemUgPSBzdHlsZVJlc29sdmVyLT5mb250U2l6ZUZvcktleXdvcmQoc3R5bGVSZXNvbHZlci0+
ZG9jdW1lbnQoKSwgaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkp
OwotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZShpZGVudCAt
IENTU1ZhbHVlWHhTbWFsbCArIDEpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKLSAgICAgICAgICAgICAgICBzaXplID0gbGFyZ2VyRm9u
dFNpemUocGFyZW50U2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIENTU1ZhbHVlU21hbGxlcjoKLSAgICAgICAgICAgICAgICBzaXplID0gc21hbGxlckZvbnRT
aXplKHBhcmVudFNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6
ZSAmJiAoaWRlbnQgPT0gQ1NTVmFsdWVMYXJnZXIgfHwgaWRlbnQgPT0gQ1NTVmFsdWVTbWFsbGVy
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNB
YnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCAhKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2Uo
KSB8fCBwcmltaXRpdmVWYWx1ZS0+aXNGb250UmVsYXRpdmVMZW5ndGgoKSkpOwotICAgICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgICAgIHNpemUg
PSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGVSZXNvbHZlci0+cGFy
ZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCAxLjAsIHRydWUp
OwotICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKQot
ICAgICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSAq
IHBhcmVudFNpemUpIC8gMTAwLjBmOwotICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAg
c2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVS
ZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
KS0+ZXZhbHVhdGUocGFyZW50U2l6ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBzaXpl
ID0gdmFsdWVGb3JMZW5ndGgocHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0
aCgpLCAwLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChzaXplIDwgMCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBPdmVybHkg
bGFyZ2UgZm9udCBzaXplcyB3aWxsIGNhdXNlIGNyYXNoZXMgb24gc29tZSBwbGF0Zm9ybXMgKHN1
Y2ggYXMgV2luZG93cykuCi0gICAgICAgIC8vIENhcCBmb250IHNpemUgaGVyZSB0byBtYWtlIHN1
cmUgdGhhdCBkb2Vzbid0IGhhcHBlbi4KLSAgICAgICAgc2l6ZSA9IG1pbihtYXhpbXVtQWxsb3dl
ZEZvbnRTaXplLCBzaXplKTsKLQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShm
b250RGVzY3JpcHRpb24sIHNpemUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5
SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFs
dWUpOyB9Ci19OwotCi1jbGFzcyBBcHBseVByb3BlcnR5Rm9udFdlaWdodCB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0g
c3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENTU1ZhbHVlQm9sZGVyOgotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFdlaWdodChmb250RGVzY3JpcHRpb24uYm9sZGVyV2VpZ2h0KCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVMaWdodGVyOgotICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFdlaWdodChmb250RGVzY3JpcHRpb24ubGlnaHRlcldlaWdodCgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldFdlaWdodCgqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgIH0KLSAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAg
UHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5Rm9udDxGb250V2VpZ2h0LCAm
Rm9udERlc2NyaXB0aW9uOjp3ZWlnaHQsICZGb250RGVzY3JpcHRpb246OnNldFdlaWdodCwgRm9u
dFdlaWdodE5vcm1hbD46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5
SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlv
bigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQotfTsKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eUZvbnRW
YXJpYW50TGlnYXR1cmVzIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsK
LSAgICAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBz
dHlsZVJlc29sdmVyLT5wYXJlbnRGb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgRm9udERlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigp
OwotCi0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21tb25MaWdhdHVyZXNTdGF0ZShwYXJl
bnRGb250RGVzY3JpcHRpb24uY29tbW9uTGlnYXR1cmVzU3RhdGUoKSk7Ci0gICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUocGFyZW50Rm9udERlc2Ny
aXB0aW9uLmRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSgpKTsKLSAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldEhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZShwYXJlbnRGb250RGVzY3JpcHRpb24u
aGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKCkpOwotCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgIH0KLQotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIpCi0gICAgewotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7Ci0KLSAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGln
YXR1cmVzU3RhdGUpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxp
Z2F0dXJlc1N0YXRlKEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwotICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKEZvbnREZXNj
cmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpOwotCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uOjpM
aWdhdHVyZXNTdGF0ZSBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6Tm9y
bWFsTGlnYXR1cmVzU3RhdGU7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3Rh
dGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxM
aWdhdHVyZXNTdGF0ZTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBo
aXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJl
c1N0YXRlOwotCi0gICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewotICAgICAgICAg
ICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2
YWx1ZSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlTGlzdC0+bGVu
Z3RoKCk7ICsraSkgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChpdGVt
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKLSAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewot
ICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9Db21tb25MaWdhdHVyZXM6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlv
bjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ29tbW9uTGlnYXR1cmVzOgotICAg
ICAgICAgICAgICAgICAgICAgICAgY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRp
b246OkVuYWJsZWRMaWdhdHVyZXNTdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9EaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzOgotICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRl
ID0gRm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVEaXNj
cmV0aW9uYXJ5TGlnYXR1cmVzOgotICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3JldGlvbmFy
eUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpFbmFibGVkTGlnYXR1cmVzU3RhdGU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU5vSGlzdG9yaWNhbExpZ2F0dXJlczoKLSAgICAgICAgICAgICAgICAgICAgICAg
IGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdh
dHVyZXNTdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlSGlzdG9yaWNhbExpZ2F0dXJlczoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6RW5h
YmxlZExpZ2F0dXJlc1N0YXRlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwot
ICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUp
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZv
bnREZXNjcmlwdGlvbigpOwotICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1
cmVzU3RhdGUoY29tbW9uTGlnYXR1cmVzU3RhdGUpOwotICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0
ZSk7Ci0gICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUo
aGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9u
dERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgfQotCi0gICAgc3RhdGljIFByb3Bl
cnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0
eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZh
bHVlKTsKLSAgICB9Ci19OwotCi1lbnVtIEJvcmRlckltYWdlVHlwZSB7IEJvcmRlckltYWdlID0g
MCwgQm9yZGVyTWFzayB9OwotdGVtcGxhdGUgPEJvcmRlckltYWdlVHlwZSBib3JkZXJJbWFnZVR5
cGUsCi0gICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwKLSAgICAgICAgICBjb25zdCBO
aW5lUGllY2VJbWFnZSYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsCi0g
ICAgICAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoY29uc3QgTmluZVBp
ZWNlSW1hZ2UmKT4KLWNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBOaW5lUGllY2VJ
bWFnZSBpbWFnZTsKLSAgICAgICAgaWYgKGJvcmRlckltYWdlVHlwZSA9PSBCb3JkZXJNYXNrKQot
ICAgICAgICAgICAgaW1hZ2Uuc2V0TWFza0RlZmF1bHRzKCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCB2YWx1ZSwgaW1hZ2Up
OwotICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShpbWFn
ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
LSAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURl
ZmF1bHRCYXNlPGNvbnN0IE5pbmVQaWVjZUltYWdlJiwgZ2V0dGVyRnVuY3Rpb24sIGNvbnN0IE5p
bmVQaWVjZUltYWdlJiwgc2V0dGVyRnVuY3Rpb24sIE5pbmVQaWVjZUltYWdlLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxOaW5lUGllY2VJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0
dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmlu
aXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQotfTsKLQotZW51bSBCb3JkZXJJ
bWFnZU1vZGlmaWVyVHlwZSB7IE91dHNldCwgUmVwZWF0LCBTbGljZSwgV2lkdGggfTsKLXRlbXBs
YXRlIDxCb3JkZXJJbWFnZVR5cGUgdHlwZSwgQm9yZGVySW1hZ2VNb2RpZmllclR5cGUgbW9kaWZp
ZXI+Ci1jbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllciB7Ci1wcml2YXRlOgot
ICAgIHN0YXRpYyBpbmxpbmUgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKFJlbmRlclN0
eWxlKiBzdHlsZSkgeyByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLT5ib3JkZXJJ
bWFnZSgpIDogc3R5bGUtPm1hc2tCb3hJbWFnZSgpOyB9Ci0gICAgc3RhdGljIGlubGluZSB2b2lk
IHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgTmluZVBpZWNlSW1hZ2UmIHZhbHVl
KSB7IHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUtPnNldEJvcmRlckltYWdlKHZh
bHVlKSA6IHN0eWxlLT5zZXRNYXNrQm94SW1hZ2UodmFsdWUpOyB9Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpKTsKLSAgICAgICAgc3dpdGNoIChtb2RpZmllcikg
ewotICAgICAgICBjYXNlIE91dHNldDoKLSAgICAgICAgICAgIGltYWdlLmNvcHlPdXRzZXRGcm9t
KGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFJlcGVhdDoKLSAgICAgICAgICAgIGltYWdlLmNvcHlSZXBlYXRG
cm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAgICAgaW1hZ2UuY29weUltYWdl
U2xpY2VzRnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAgICAgIGltYWdlLmNv
cHlCb3JkZXJTbGljZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQotICAgIHsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSkpOwotICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7Ci0gICAgICAgIGNh
c2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KExlbmd0aEJveCgwKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXBlYXQ6Ci0gICAgICAgICAgICBpbWFn
ZS5zZXRIb3Jpem9udGFsUnVsZShTdHJldGNoSW1hZ2VSdWxlKTsKLSAgICAgICAgICAgIGltYWdl
LnNldFZlcnRpY2FsUnVsZShTdHJldGNoSW1hZ2VSdWxlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAgICAgLy8gTWFza3MgaGF2ZSBhIGRpZmZlcmVu
dCBpbml0aWFsIHZhbHVlIGZvciBzbGljZXMuIFByZXNlcnZlIHRoZSB2YWx1ZSBvZiAwIGZvciBi
YWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgICAgIGltYWdlLnNldEltYWdlU2xpY2Vz
KHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBMZW5ndGhCb3goTGVuZ3RoKDEwMCwgUGVyY2VudCksIExl
bmd0aCgxMDAsIFBlcmNlbnQpLCBMZW5ndGgoMTAwLCBQZXJjZW50KSwgTGVuZ3RoKDEwMCwgUGVy
Y2VudCkpIDogTGVuZ3RoQm94KCkpOwotICAgICAgICAgICAgaW1hZ2Uuc2V0RmlsbChmYWxzZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAgICAgIC8v
IE1hc2tzIGhhdmUgYSBkaWZmZXJlbnQgaW5pdGlhbCB2YWx1ZSBmb3Igd2lkdGhzLiBUaGV5IHVz
ZSBhbiAnYXV0bycgdmFsdWUgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGZpdCB0byB0aGUgYm9yZGVy
LgotICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHR5cGUgPT0gQm9yZGVySW1hZ2Ug
PyBMZW5ndGhCb3goTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVu
Z3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSkgOiBMZW5ndGhCb3goKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCBpbWFnZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpCi0gICAgewotICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdHls
ZVJlc29sdmVyLT5zdHlsZSgpKSk7Ci0gICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKLSAgICAg
ICAgY2FzZSBPdXRzZXQ6Ci0gICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQoc3R5bGVSZXNvbHZl
ci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBSZXBlYXQ6Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVJlcGVhdCh2YWx1ZSwgaW1hZ2UpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2xpY2U6Ci0gICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVNsaWNlKHZhbHVlLCBpbWFnZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAgICAgIGlt
YWdlLnNldEJvcmRlclNsaWNlcyhzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT5tYXBOaW5lUGll
Y2VJbWFnZVF1YWQodmFsdWUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0
eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZh
bHVlKTsgfQotfTsKLQotdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQsIFN0eWxlSW1hZ2UqIChS
ZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlckZ1bmN0aW9uKShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+KSwgU3R5bGVJbWFnZSogKCpp
bml0aWFsRnVuY3Rpb24pKCk+Ci1jbGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2Ug
ewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2Uo
aWQsIHZhbHVlKSk7IH0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIo
KQotICAgIHsKLSAgICAgICAgUHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5
RGVmYXVsdEJhc2U8U3R5bGVJbWFnZSosIGdldHRlckZ1bmN0aW9uLCBQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+LCBzZXR0ZXJGdW5jdGlvbiwgU3R5bGVJbWFnZSosIGluaXRpYWxGdW5jdGlvbj46OmNy
ZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmlu
aGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7
Ci0gICAgfQotfTsKLQotZW51bSBDb3VudGVyQmVoYXZpb3Ige0luY3JlbWVudCA9IDAsIFJlc2V0
fTsKLXRlbXBsYXRlIDxDb3VudGVyQmVoYXZpb3IgY291bnRlckJlaGF2aW9yPgotY2xhc3MgQXBw
bHlQcm9wZXJ0eUNvdW50ZXIgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGVtcHR5RnVuY3Rp
b24oQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsgfQotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCi0gICAgewotICAgICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwotICAgICAgICBDb3VudGVy
RGlyZWN0aXZlTWFwJiBwYXJlbnRNYXAgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5h
Y2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwotCi0gICAgICAgIHR5cGVkZWYgQ291bnRlckRpcmVj
dGl2ZU1hcDo6aXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAgICAgIEl0ZXJhdG9yIGVuZCA9IHBhcmVu
dE1hcC5lbmQoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHBhcmVudE1hcC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVzJiBkaXJl
Y3RpdmVzID0gbWFwLmFkZChpdC0+a2V5LCBDb3VudGVyRGlyZWN0aXZlcygpKS5pdGVyYXRvci0+
dmFsdWU7Ci0gICAgICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KSB7Ci0gICAg
ICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhlcml0UmVzZXQoaXQtPnZhbHVlKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGlyZWN0aXZlcy5pbmhlcml0SW5jcmVtZW50
KGl0LT52YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBib29sIHNldENvdW50ZXJJbmNy
ZW1lbnRUb05vbmUgPSBjb3VudGVyQmVoYXZpb3IgPT0gSW5jcmVtZW50ICYmIHZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkgJiYgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lOwotCi0gICAgICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkgJiYgIXNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKLSAgICAgICAgdHlwZWRlZiBDb3Vu
dGVyRGlyZWN0aXZlTWFwOjppdGVyYXRvciBJdGVyYXRvcjsKLQotICAgICAgICBJdGVyYXRvciBl
bmQgPSBtYXAuZW5kKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNl
dCkKLSAgICAgICAgICAgICAgICBpdC0+dmFsdWUuY2xlYXJSZXNldCgpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGl0LT52YWx1ZS5jbGVhckluY3JlbWVudCgpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKHNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2Fz
dDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgIGludCBsZW5ndGggPSBsaXN0ID8gbGlz
dC0+bGVuZ3RoKCkgOiAwOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gbGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKTsKLSAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFBhaXIqIHBh
aXIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGN1cnJWYWx1ZSktPmdldFBhaXJW
YWx1ZSgpOwotICAgICAgICAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWly
LT5zZWNvbmQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgQXRv
bWljU3RyaW5nIGlkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBh
aXItPmZpcnN0KCkpLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgaW50IHZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWlyLT5zZWNvbmQoKSktPmdldEludFZh
bHVlKCk7Ci0gICAgICAgICAgICBDb3VudGVyRGlyZWN0aXZlcyYgZGlyZWN0aXZlcyA9IG1hcC5h
ZGQoaWRlbnRpZmllciwgQ291bnRlckRpcmVjdGl2ZXMoKSkuaXRlcmF0b3ItPnZhbHVlOwotICAg
ICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkgewotICAgICAgICAgICAgICAg
IGRpcmVjdGl2ZXMuc2V0UmVzZXRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXMuYWRkSW5jcmVtZW50VmFsdWUodmFsdWUpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIg
Y3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFs
dWUsICZlbXB0eUZ1bmN0aW9uLCAmYXBwbHlWYWx1ZSk7IH0KLX07Ci0KLQotY2xhc3MgQXBwbHlQ
cm9wZXJ0eUN1cnNvciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihzdHlsZVJlc29sdmVyLT5w
YXJlbnRTdHlsZSgpLT5jdXJzb3IoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEN1cnNvckxpc3Qoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Y3Vyc29ycygpKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNvcigpKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOwotICAgICAgICBpZiAodmFsdWUt
PmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRp
Y19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAgICAgIGludCBsZW4gPSBsaXN0
LT5sZW5ndGgoKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNv
cihDVVJTT1JfQVVUTyk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBsaXN0LT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0N1cnNvckltYWdlVmFs
dWUoKSkgewotICAgICAgICAgICAgICAgICAgICBDU1NDdXJzb3JJbWFnZVZhbHVlKiBpbWFnZSA9
IHN0YXRpY19jYXN0PENTU0N1cnNvckltYWdlVmFsdWUqPihpdGVtKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGltYWdlLT51cGRhdGVJZlNWR0N1cnNvcklzVXNlZChzdHlsZVJlc29sdmVyLT5l
bGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFyZSBub3QgYWxsb3dlZCB0
byBzaGFyZSBzdHlsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldFVuaXF1ZSgpOwotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUN1
cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90U3BvdCgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlz
SWRlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0g
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNJZGVudCgpICYmIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmN1cnNvcigpICE9IEVD
dXJzb3IoKnByaW1pdGl2ZVZhbHVlKSkKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3Bl
cnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5
VmFsdWUpOyB9Ci19OwotCi1jbGFzcyBBcHBseVByb3BlcnR5VGV4dEFsaWduIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKTsKLQotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgIT0gQ1NTVmFsdWVXZWJraXRNYXRjaFBhcmVudCkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbigqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICBlbHNl
IGlmIChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQVNUQVJU
KQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0eWxl
UmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IExFRlQg
OiBSSUdIVCk7Ci0gICAgICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkt
PnRleHRBbGlnbigpID09IFRBRU5EKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VGV4dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IFJJR0hUIDogTEVGVCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJlc29sdmVyLT5wYXJl
bnRTdHlsZSgpLT50ZXh0QWxpZ24oKSk7Ci0gICAgfQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRs
ZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxl
ciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFVGV4dEFsaWduLCAmUmVuZGVyU3R5bGU6OnRl
eHRBbGlnbiwgRVRleHRBbGlnbiwgJlJlbmRlclN0eWxlOjpzZXRUZXh0QWxpZ24sIEVUZXh0QWxp
Z24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRBbGlnbj46OmNyZWF0ZUhhbmRsZXIoKTsKLSAg
ICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBo
YW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQotfTsKLQotY2xh
c3MgQXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEVUZXh0RGVjb3JhdGlvbiB0ID0gUmVu
ZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbigpOwotICAgICAgICBmb3IgKENTU1ZhbHVl
TGlzdEl0ZXJhdG9yIGkodmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKLSAgICAg
ICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwotICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAg
ICAgICAgIHQgfD0gKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaXRlbSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb24o
dCk7Ci0gICAgfQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCi0g
ICAgewotICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZh
dWx0QmFzZTxFVGV4dERlY29yYXRpb24sICZSZW5kZXJTdHlsZTo6dGV4dERlY29yYXRpb24sIEVU
ZXh0RGVjb3JhdGlvbiwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlvbiwgRVRleHREZWNv
cmF0aW9uLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbj46OmNyZWF0ZUhhbmRs
ZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5j
dGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQot
fTsKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eU1hcnF1ZWVJbmNyZW1lbnQgewotcHVibGljOgotICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOwotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsK
LSAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KExlbmd0aCgxLCBGaXhlZCkpOyAvLyAxcHgu
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFs
OgotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVJbmNy
ZW1lbnQoTGVuZ3RoKDYsIEZpeGVkKSk7IC8vIDZweC4gVGhlIFdpbklFIGRlZmF1bHQuCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6Ci0gICAg
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZUluY3JlbWVudChM
ZW5ndGgoMzYsIEZpeGVkKSk7IC8vIDM2cHguCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMZW5ndGggbWFycXVlZUxl
bmd0aCA9IHN0eWxlUmVzb2x2ZXItPmNvbnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
KTsKLSAgICAgICAgICAgIGlmICghbWFycXVlZUxlbmd0aC5pc1VuZGVmaW5lZCgpKQotICAgICAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVJbmNyZW1lbnQobWFy
cXVlZUxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxl
ciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVy
ID0gQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6Om1hcnF1ZWVJbmNyZW1lbnQsICZS
ZW5kZXJTdHlsZTo6c2V0TWFycXVlZUluY3JlbWVudCwgJlJlbmRlclN0eWxlOjppbml0aWFsTWFy
cXVlZUluY3JlbWVudD46OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5
SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlv
bigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQotfTsKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eU1hcnF1
ZWVSZXBldGl0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5maW5pdGUpCi0gICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEg
bWVhbnMgcmVwZWF0IGZvcmV2ZXIuCi0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5p
c051bWJlcigpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVl
ZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7Ci0gICAgfQotICAgIHN0
YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9w
ZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0PGludCwgJlJlbmRlclN0
eWxlOjptYXJxdWVlTG9vcENvdW50LCBpbnQsICZSZW5kZXJTdHlsZTo6c2V0TWFycXVlZUxvb3BD
b3VudCwgaW50LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNYXJxdWVlTG9vcENvdW50Pjo6Y3JlYXRl
SGFuZGxlcigpOwotICAgICAgICByZXR1cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJp
dEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5pdGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKLSAg
ICB9Ci19OwotCi1jbGFzcyBBcHBseVByb3BlcnR5TWFycXVlZVNwZWVkIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgaWYgKGludCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7Ci0gICAgICAgICAgICBj
YXNlIENTU1ZhbHVlU2xvdzoKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgotICAgICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCg4NSk7IC8vIDg1bXNlYy4gVGhl
IFdpbklFIGRlZmF1bHQuCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IENTU1ZhbHVlRmFzdDoKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRNYXJxdWVlU3BlZWQoMTApOyAvLyAxMG1zZWMuIFN1cGVyIGZhc3QuCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzVGltZSgpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFy
cXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENTU1ByaW1pdGl2ZVZh
bHVlOjpNaWxsaXNlY29uZHM+KCkpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
aXNOdW1iZXIoKSkgLy8gRm9yIHNjcm9sbGFtb3VudCBzdXBwb3J0LgotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
bnRWYWx1ZSgpKTsKLSAgICB9Ci0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5k
bGVyKCkKLSAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9w
ZXJ0eURlZmF1bHQ8aW50LCAmUmVuZGVyU3R5bGU6Om1hcnF1ZWVTcGVlZCwgaW50LCAmUmVuZGVy
U3R5bGU6OnNldE1hcnF1ZWVTcGVlZCwgaW50LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNYXJxdWVl
U3BlZWQ+OjpjcmVhdGVIYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIo
aGFuZGxlci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24oKSwgJmFw
cGx5VmFsdWUpOwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoQ1NTM19URVhUKQotY2xhc3MgQXBw
bHlQcm9wZXJ0eVRleHRVbmRlcmxpbmVQb3NpdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICAvLyBUaGlzIGlzIHRydWUgaWYgdmFs
dWUgaXMgJ2F1dG8nIG9yICdhbHBoYWJldGljJy4KLSAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3NpdGlvbiB0ID0gKnN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dFVuZGVybGluZVBvc2l0aW9uKHQpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgdCA9IDA7Ci0gICAgICAg
IGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGkuaGFzTW9yZSgpOyBpLmFkdmFu
Y2UoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAg
ICAgICBBU1NFUlQoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgICAgIFRleHRV
bmRlcmxpbmVQb3NpdGlvbiB0MiA9ICpzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0
ZW0pOwotICAgICAgICAgICAgdCB8PSB0MjsKLSAgICAgICAgfQotICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24oc3RhdGljX2Nhc3Q8VGV4dFVu
ZGVybGluZVBvc2l0aW9uPih0KSk7Ci0gICAgfQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIg
Y3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9
IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxUZXh0VW5kZXJsaW5lUG9zaXRpb24sICZSZW5kZXJT
dHlsZTo6dGV4dFVuZGVybGluZVBvc2l0aW9uLCBUZXh0VW5kZXJsaW5lUG9zaXRpb24sICZSZW5k
ZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZVBvc2l0aW9uLCBUZXh0VW5kZXJsaW5lUG9zaXRpb24s
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRVbmRlcmxpbmVQb3NpdGlvbj46OmNyZWF0ZUhhbmRs
ZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5j
dGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQot
fTsKLSNlbmRpZiAvLyBDU1MzX1RFWFQKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHQg
ewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBMZW5ndGggbGluZUhlaWdodDsK
LQotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3Jt
YWwpCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVp
Z2h0KCk7Ci0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0g
ICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBzdHlsZVJlc29s
dmVyLT5kb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgICAgIG11bHRpcGxpZXIgKj0g
ZnJhbWUtPnRleHRab29tRmFjdG9yKCk7Ci0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBz
dHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIG11bHRpcGxpZXIpOwotICAgICAgICB9
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgewotICAgICAgICAgICAg
Ly8gRklYTUU6IHBlcmNlbnRhZ2Ugc2hvdWxkIG5vdCBiZSByZXN0cmljdGVkIHRvIGFuIGludGVn
ZXIgaGVyZS4KLSAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPmZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSkgLyAx
MDAsIEZpeGVkKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIo
KSkgewotICAgICAgICAgICAgLy8gRklYTUU6IG51bWJlciBhbmQgcGVyY2VudGFnZSB2YWx1ZXMg
c2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdHlwZSBvZiBMZW5ndGggKGllLiBGaXhlZCBvciBQZXJj
ZW50KS4KLSAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdl
dERvdWJsZVZhbHVlKCkgKiAxMDAuMCwgUGVyY2VudCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCi0gICAgICAgICAgICBs
aW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldExpbmVIZWlnaHQobGluZUhlaWdodCk7Ci0gICAgfQotICAgIHN0YXRpYyBQ
cm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCi0gICAgewotICAgICAgICBQcm9wZXJ0eUhh
bmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxMZW5ndGgsICZSZW5kZXJT
dHlsZTo6c3BlY2lmaWVkTGluZUhlaWdodCwgTGVuZ3RoLCAmUmVuZGVyU3R5bGU6OnNldExpbmVI
ZWlnaHQsIExlbmd0aCwgJlJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodD46OmNyZWF0ZUhh
bmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRG
dW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAg
fQotfTsKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eVBhZ2VTaXplIHsKLXByaXZhdGU6Ci0gICAgc3Rh
dGljIExlbmd0aCBtbUxlbmd0aChkb3VibGUgbW0pIHsgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGUobW0sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU0pLT5jb21wdXRlTGVuZ3RoPExl
bmd0aD4oMCwgMCk7IH0KLSAgICBzdGF0aWMgTGVuZ3RoIGluY2hMZW5ndGgoZG91YmxlIGluY2gp
IHsgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoaW5jaCwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19JTiktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPigwLCAwKTsgfQotICAgIHN0YXRpYyBi
b29sIGdldFBhZ2VTaXplRnJvbU5hbWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VTaXplTmFtZSwg
Q1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VPcmllbnRhdGlvbiwgTGVuZ3RoJiB3aWR0aCwgTGVuZ3Ro
JiBoZWlnaHQpCi0gICAgewotICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgYTVX
aWR0aCwgKG1tTGVuZ3RoKDE0OCkpKTsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5n
dGgsIGE1SGVpZ2h0LCAobW1MZW5ndGgoMjEwKSkpOwotICAgICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKExlbmd0aCwgYTRXaWR0aCwgKG1tTGVuZ3RoKDIxMCkpKTsKLSAgICAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChMZW5ndGgsIGE0SGVpZ2h0LCAobW1MZW5ndGgoMjk3KSkpOwotICAgICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgYTNXaWR0aCwgKG1tTGVuZ3RoKDI5NykpKTsKLSAg
ICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5ndGgsIGEzSGVpZ2h0LCAobW1MZW5ndGgoNDIw
KSkpOwotICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0aCwgYjVXaWR0aCwgKG1tTGVu
Z3RoKDE3NikpKTsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChMZW5ndGgsIGI1SGVpZ2h0
LCAobW1MZW5ndGgoMjUwKSkpOwotICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKExlbmd0aCwg
YjRXaWR0aCwgKG1tTGVuZ3RoKDI1MCkpKTsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChM
ZW5ndGgsIGI0SGVpZ2h0LCAobW1MZW5ndGgoMzUzKSkpOwotICAgICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKExlbmd0aCwgbGV0dGVyV2lkdGgsIChpbmNoTGVuZ3RoKDguNSkpKTsKLSAgICAgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChMZW5ndGgsIGxldHRlckhlaWdodCwgKGluY2hMZW5ndGgoMTEp
KSk7Ci0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGVuZ3RoLCBsZWdhbFdpZHRoLCAoaW5j
aExlbmd0aCg4LjUpKSk7Ci0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoTGVuZ3RoLCBsZWdh
bEhlaWdodCwgKGluY2hMZW5ndGgoMTQpKSk7Ci0gICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwo
TGVuZ3RoLCBsZWRnZXJXaWR0aCwgKGluY2hMZW5ndGgoMTEpKSk7Ci0gICAgICAgIERFRklORV9T
VEFUSUNfTE9DQUwoTGVuZ3RoLCBsZWRnZXJIZWlnaHQsIChpbmNoTGVuZ3RoKDE3KSkpOwotCi0g
ICAgICAgIGlmICghcGFnZVNpemVOYW1lKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIHN3aXRjaCAocGFnZVNpemVOYW1lLT5nZXRJZGVudCgpKSB7Ci0gICAgICAgIGNhc2Ug
Q1NTVmFsdWVBNToKLSAgICAgICAgICAgIHdpZHRoID0gYTVXaWR0aDsKLSAgICAgICAgICAgIGhl
aWdodCA9IGE1SGVpZ2h0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFs
dWVBNDoKLSAgICAgICAgICAgIHdpZHRoID0gYTRXaWR0aDsKLSAgICAgICAgICAgIGhlaWdodCA9
IGE0SGVpZ2h0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVBMzoK
LSAgICAgICAgICAgIHdpZHRoID0gYTNXaWR0aDsKLSAgICAgICAgICAgIGhlaWdodCA9IGEzSGVp
Z2h0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVCNToKLSAgICAg
ICAgICAgIHdpZHRoID0gYjVXaWR0aDsKLSAgICAgICAgICAgIGhlaWdodCA9IGI1SGVpZ2h0Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVCNDoKLSAgICAgICAgICAg
IHdpZHRoID0gYjRXaWR0aDsKLSAgICAgICAgICAgIGhlaWdodCA9IGI0SGVpZ2h0OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVMZXR0ZXI6Ci0gICAgICAgICAgICB3
aWR0aCA9IGxldHRlcldpZHRoOwotICAgICAgICAgICAgaGVpZ2h0ID0gbGV0dGVySGVpZ2h0Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVMZWdhbDoKLSAgICAgICAg
ICAgIHdpZHRoID0gbGVnYWxXaWR0aDsKLSAgICAgICAgICAgIGhlaWdodCA9IGxlZ2FsSGVpZ2h0
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVMZWRnZXI6Ci0gICAg
ICAgICAgICB3aWR0aCA9IGxlZGdlcldpZHRoOwotICAgICAgICAgICAgaGVpZ2h0ID0gbGVkZ2Vy
SGVpZ2h0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocGFnZU9yaWVudGF0aW9u
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHBhZ2VPcmllbnRhdGlvbi0+Z2V0SWRlbnQoKSkgewot
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxhbmRzY2FwZToKLSAgICAgICAgICAgICAgICBzdGQ6
OnN3YXAod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlUG9ydHJhaXQ6Ci0gICAgICAgICAgICAgICAgLy8gTm90aGluZyB0byBk
by4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVy
aXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikgeyB9Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciopIHsgfQot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+cmVzZXRQYWdlU2l6ZVR5cGUoKTsKLSAgICAgICAgTGVuZ3RoIHdpZHRo
OwotICAgICAgICBMZW5ndGggaGVpZ2h0OwotICAgICAgICBQYWdlU2l6ZVR5cGUgcGFnZVNpemVU
eXBlID0gUEFHRV9TSVpFX0FVVE87Ci0gICAgICAgIENTU1ZhbHVlTGlzdEluc3BlY3RvciBpbnNw
ZWN0b3IodmFsdWUpOwotICAgICAgICBzd2l0Y2ggKGluc3BlY3Rvci5sZW5ndGgoKSkgewotICAg
ICAgICBjYXNlIDI6IHsKLSAgICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9IHwgPHBhZ2Utc2l6ZT4g
PG9yaWVudGF0aW9uPgotICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3IuZmlyc3QoKS0+aXNQcmlt
aXRpdmVWYWx1ZSgpIHx8ICFpbnNwZWN0b3Iuc2Vjb25kKCktPmlzUHJpbWl0aXZlVmFsdWUoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
Zmlyc3QgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGluc3BlY3Rvci5maXJzdCgp
KTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KGluc3BlY3Rvci5zZWNvbmQoKSk7Ci0gICAgICAgICAgICBpZiAo
Zmlyc3QtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICAvLyA8bGVuZ3RoPnsyfQotICAg
ICAgICAgICAgICAgIGlmICghc2Vjb25kLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50
U3R5bGUoKSk7Ci0gICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRlTGVuZ3Ro
PExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gPHBh
Z2Utc2l6ZT4gPG9yaWVudGF0aW9uPgotICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvcmRl
ciBpcyBndWFyYW50ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIuCi0gICAg
ICAgICAgICAgICAgaWYgKCFnZXRQYWdlU2l6ZUZyb21OYW1lKGZpcnN0LCBzZWNvbmQsIHdpZHRo
LCBoZWlnaHQpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIDE6IHsKLSAgICAgICAgICAgIC8vIDxs
ZW5ndGg+IHwgYXV0byB8IDxwYWdlLXNpemU+IHwgWyBwb3J0cmFpdCB8IGxhbmRzY2FwZV0KLSAg
ICAgICAgICAgIGlmICghaW5zcGVjdG9yLmZpcnN0KCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGluc3BlY3Rvci5m
aXJzdCgpKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewot
ICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+Ci0gICAgICAgICAgICAgICAgcGFnZVNpemVUeXBl
ID0gUEFHRV9TSVpFX1JFU09MVkVEOwotICAgICAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0g
cHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86Ci0gICAgICAgICAgICAgICAgICAg
IHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlUG9ydHJhaXQ6Ci0gICAgICAgICAgICAg
ICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9BVVRPX1BPUlRSQUlUOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGFuZHNjYXBl
OgotICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfQVVUT19MQU5E
U0NBUEU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIDxwYWdlLXNpemU+Ci0gICAgICAgICAgICAgICAg
ICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFnZXRQYWdlU2l6ZUZyb21OYW1lKHByaW1pdGl2ZVZhbHVlLCAwLCB3aWR0aCwgaGVp
Z2h0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldFBhZ2VTaXplVHlwZShwYWdlU2l6ZVR5cGUpOwotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRQYWdlU2l6ZShMZW5ndGhTaXplKHdpZHRoLCBoZWln
aHQpKTsKLSAgICB9Ci0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkg
eyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlh
bFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KLX07Ci0KLWNsYXNzIEFwcGx5UHJvcGVydHlUZXh0RW1w
aGFzaXNTdHlsZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoc3R5bGVSZXNv
bHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhzdHlsZVJlc29sdmVyLT5wYXJl
bnRTdHlsZSgpLT50ZXh0RW1waGFzaXNNYXJrKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0
eWxlKCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRF
bXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFJlbmRlclN0
eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRl
eHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+
KHZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VSVChsaXN0LT5sZW5ndGgoKSA9PSAyKTsKLSAgICAg
ICAgICAgIGlmIChsaXN0LT5sZW5ndGgoKSAhPSAyKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKLSAgICAg
ICAgICAgICAgICBpZiAodmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwgdmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVPcGVuKQotICAgICAgICAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKCp2YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRUZXh0RW1waGFzaXNNYXJrKCp2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxB
dG9tKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7Ci0KLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1N0cmluZygp
KSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNG
aWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQ3VzdG9tKTsKLSAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1h
cmsocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVt
cGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7Ci0KLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlT3BlbikgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqcHJpbWl0aXZlVmFsdWUpOwotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJr
QXV0byk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwotICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygqcHJpbWl0
aXZlVmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxl
ciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRW
YWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KLX07Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBULAotICAgICAgICAgIFQgKEFuaW1hdGlvbjo6KmdldHRlckZ1bmN0aW9uKSgp
IGNvbnN0LAotICAgICAgICAgIHZvaWQgKEFuaW1hdGlvbjo6KnNldHRlckZ1bmN0aW9uKShUKSwK
LSAgICAgICAgICBib29sIChBbmltYXRpb246Oip0ZXN0RnVuY3Rpb24pKCkgY29uc3QsCi0gICAg
ICAgICAgdm9pZCAoQW5pbWF0aW9uOjoqY2xlYXJGdW5jdGlvbikoKSwKLSAgICAgICAgICBUICgq
aW5pdGlhbEZ1bmN0aW9uKSgpLAotICAgICAgICAgIHZvaWQgKENTU1RvU3R5bGVNYXA6OiptYXBG
dW5jdGlvbikoQW5pbWF0aW9uKiwgQ1NTVmFsdWUqKSwKLSAgICAgICAgICBBbmltYXRpb25MaXN0
KiAoUmVuZGVyU3R5bGU6OiphbmltYXRpb25HZXR0ZXJGdW5jdGlvbikoKSwKLSAgICAgICAgICBj
b25zdCBBbmltYXRpb25MaXN0KiAoUmVuZGVyU3R5bGU6OippbW11dGFibGVBbmltYXRpb25HZXR0
ZXJGdW5jdGlvbikoKSBjb25zdD4KLWNsYXNzIEFwcGx5UHJvcGVydHlBbmltYXRpb24gewotcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBUIHZh
bHVlKSB7IChhbmltYXRpb24tPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGlj
IFQgdmFsdWUoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24pIHsgcmV0dXJuIChhbmltYXRpb24t
PipnZXR0ZXJGdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyBib29sIHRlc3QoY29uc3QgQW5pbWF0
aW9uKiBhbmltYXRpb24pIHsgcmV0dXJuIChhbmltYXRpb24tPip0ZXN0RnVuY3Rpb24pKCk7IH0K
LSAgICBzdGF0aWMgdm9pZCBjbGVhcihBbmltYXRpb24qIGFuaW1hdGlvbikgeyAoYW5pbWF0aW9u
LT4qY2xlYXJGdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyBUIGluaXRpYWwoKSB7IHJldHVybiAo
KmluaXRpYWxGdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lkIG1hcChTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKSB7
IChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRnVuY3Rpb24pKGFuaW1hdGlvbiwgdmFs
dWUpOyB9Ci0gICAgc3RhdGljIEFuaW1hdGlvbkxpc3QqIGFjY2Vzc0FuaW1hdGlvbnMoUmVuZGVy
U3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPiphbmltYXRpb25HZXR0ZXJGdW5jdGlvbiko
KTsgfQotICAgIHN0YXRpYyBjb25zdCBBbmltYXRpb25MaXN0KiBhbmltYXRpb25zKFJlbmRlclN0
eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qaW1tdXRhYmxlQW5pbWF0aW9uR2V0dGVyRnVu
Y3Rpb24pKCk7IH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAgICBBbmlt
YXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5zdHlsZSgp
KTsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50TGlzdCA9IGFuaW1hdGlvbnMo
c3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSk7Ci0gICAgICAgIHNpemVfdCBpID0gMCwgcGFy
ZW50U2l6ZSA9IHBhcmVudExpc3QgPyBwYXJlbnRMaXN0LT5zaXplKCkgOiAwOwotICAgICAgICBm
b3IgKCA7IGkgPCBwYXJlbnRTaXplICYmIHRlc3QocGFyZW50TGlzdC0+YW5pbWF0aW9uKGkpKTsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAobGlzdC0+c2l6ZSgpIDw9IGkpCi0gICAgICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgc2V0VmFs
dWUobGlzdC0+YW5pbWF0aW9uKGkpLCB2YWx1ZShwYXJlbnRMaXN0LT5hbmltYXRpb24oaSkpKTsK
LSAgICAgICAgICAgIGxpc3QtPmFuaW1hdGlvbihpKS0+c2V0QW5pbWF0aW9uTW9kZShwYXJlbnRM
aXN0LT5hbmltYXRpb24oaSktPmFuaW1hdGlvbk1vZGUoKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvKiBSZXNldCBhbnkgcmVtYWluaW5nIGFuaW1hdGlvbnMgdG8gbm90IGhhdmUgdGhlIHByb3Bl
cnR5IHNldC4gKi8KLSAgICAgICAgZm9yICggOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICBjbGVhcihsaXN0LT5hbmltYXRpb24oaSkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3Qg
PSBhY2Nlc3NBbmltYXRpb25zKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOwotICAgICAgICBpZiAo
bGlzdC0+aXNFbXB0eSgpKQotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3Jl
YXRlKCkpOwotICAgICAgICBzZXRWYWx1ZShsaXN0LT5hbmltYXRpb24oMCksIGluaXRpYWwoKSk7
Ci0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblBy
b3BlcnR5KQotICAgICAgICAgICAgbGlzdC0+YW5pbWF0aW9uKDApLT5zZXRBbmltYXRpb25Nb2Rl
KEFuaW1hdGlvbjo6QW5pbWF0ZUFsbCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwg
bGlzdC0+c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBjbGVhcihsaXN0LT5hbmltYXRpb24oaSkp
OwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSk7Ci0gICAgICAgIHNpemVfdCBjaGlsZEluZGV4ID0gMDsKLSAgICAgICAgaWYgKHZh
bHVlLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICAvKiBXYWxrIGVhY2ggdmFsdWUgYW5k
IHB1dCBpdCBpbnRvIGFuIGFuaW1hdGlvbiwgY3JlYXRpbmcgbmV3IGFuaW1hdGlvbnMgYXMgbmVl
ZGVkLiAqLwotICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7
IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZElu
ZGV4IDw9IGxpc3QtPnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFu
aW1hdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgICAgIG1hcChzdHlsZVJlc29sdmVyLCBs
aXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIGkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAg
KytjaGlsZEluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQW5p
bWF0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICBtYXAoc3R5bGVSZXNvbHZlciwgbGlzdC0+
YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICBjaGlsZEluZGV4ID0g
MTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKCA7IGNoaWxkSW5kZXggPCBsaXN0LT5zaXplKCk7
ICsrY2hpbGRJbmRleCkgewotICAgICAgICAgICAgLyogUmVzZXQgYWxsIHJlbWFpbmluZyBhbmlt
YXRpb25zIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovCi0gICAgICAgICAgICBjbGVh
cihsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlI
YW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1
ZSk7IH0KLX07Ci0KLWNsYXNzIEFwcGx5UHJvcGVydHlPdXRsaW5lU3R5bGUgewotcHVibGljOgot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIEFwcGx5UHJv
cGVydHlEZWZhdWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHls
ZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1
dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0
bz46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91
dGxpbmVTdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwg
RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5SW5o
ZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZh
dWx0QmFzZTxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywg
T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxp
bmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5
SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVBy
b3BlcnR5RGVmYXVsdEJhc2U8RUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHls
ZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZSwgRUJvcmRlclN0
eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmFwcGx5SW5pdGlhbFZhbHVl
KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVm
YXVsdDxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0
bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJ
c0F1dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5VmFs
dWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwotICAgICAgICBBcHBseVByb3Bl
cnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9y
ZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBz
dHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxl
ciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRW
YWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KLX07Ci0KLWNsYXNzIEFw
cGx5UHJvcGVydHlSZXNpemUgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotCi0gICAgICAg
IEVSZXNpemUgciA9IFJFU0laRV9OT05FOwotICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86Ci0gICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRp
bmdzID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkKLSAgICAgICAgICAg
ICAgICByID0gc2V0dGluZ3MtPnRleHRBcmVhc0FyZVJlc2l6YWJsZSgpID8gUkVTSVpFX0JPVEgg
OiBSRVNJWkVfTk9ORTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgciA9ICpwcmltaXRpdmVWYWx1ZTsKLSAgICAgICAgfQotICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRSZXNpemUocik7Ci0gICAgfQotCi0gICAgc3RhdGljIFByb3Bl
cnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIFByb3BlcnR5SGFuZGxl
ciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVSZXNpemUsICZSZW5kZXJTdHls
ZTo6cmVzaXplLCBFUmVzaXplLCAmUmVuZGVyU3R5bGU6OnNldFJlc2l6ZSwgRVJlc2l6ZSwgJlJl
bmRlclN0eWxlOjppbml0aWFsUmVzaXplPjo6Y3JlYXRlSGFuZGxlcigpOwotICAgICAgICByZXR1
cm4gUHJvcGVydHlIYW5kbGVyKGhhbmRsZXIuaW5oZXJpdEZ1bmN0aW9uKCksIGhhbmRsZXIuaW5p
dGlhbEZ1bmN0aW9uKCksICZhcHBseVZhbHVlKTsKLSAgICB9Ci19OwotCi1jbGFzcyBBcHBseVBy
b3BlcnR5VmVydGljYWxBbGlnbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0KLSAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24oKnByaW1pdGl2ZVZhbHVlKTsK
LQotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNl
bnRhZ2VDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5y
b290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigp
Ci0gICAgewotICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlE
ZWZhdWx0QmFzZTxFVmVydGljYWxBbGlnbiwgJlJlbmRlclN0eWxlOjp2ZXJ0aWNhbEFsaWduLCBF
VmVydGljYWxBbGlnbiwgJlJlbmRlclN0eWxlOjpzZXRWZXJ0aWNhbEFsaWduLCBFVmVydGljYWxB
bGlnbiwgJlJlbmRlclN0eWxlOjppbml0aWFsVmVydGljYWxBbGlnbj46OmNyZWF0ZUhhbmRsZXIo
KTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVyLmluaGVyaXRGdW5jdGlv
bigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1ZSk7Ci0gICAgfQotfTsK
LQotY2xhc3MgQXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgaWYgKCFzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHls
ZSgpLT5oYXNBc3BlY3RSYXRpbygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOwotICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0SGFzQXNwZWN0UmF0aW8oUmVuZGVyU3R5bGU6OmluaXRpYWxIYXNBc3BlY3RSYXRpbygp
KTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWlu
YXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKFJlbmRl
clN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc0Fz
cGVjdFJhdGlvVmFsdWUoKSkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0SGFzQXNwZWN0UmF0aW8oZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVjdFJhdGlvVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVlKj4odmFsdWUpOwotICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5k
ZW5vbWluYXRvclZhbHVlKCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRB
c3BlY3RSYXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5udW1lcmF0b3JWYWx1ZSgpKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZh
cHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOwotICAgIH0KLX07Ci0KLWNsYXNzIEFwcGx5
UHJvcGVydHlab29tIHsKLXByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcmVzZXRFZmZlY3RpdmVa
b29tKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAgICAvLyBSZXNl
dCB0aGUgem9vbSBpbiBlZmZlY3QuIFRoaXMgYWxsb3dzIHRoZSBzZXRab29tIG1ldGhvZCB0byBh
Y2N1cmF0ZWx5IGNvbXB1dGUgYSBuZXcgem9vbSBpbiBlZmZlY3QuCi0gICAgICAgIHN0eWxlUmVz
b2x2ZXItPnNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSA/IHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSA6IFJlbmRlclN0eWxl
Ojppbml0aWFsWm9vbSgpKTsKLSAgICB9Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQotICAgIHsKLSAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkt
Pnpvb20oKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAg
IHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTih2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7Ci0KLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5
bGVSZXNvbHZlcik7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKFJlbmRlclN0
eWxlOjppbml0aWFsWm9vbSgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKLSAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwot
ICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
RG9jdW1lbnQpIHsKLSAgICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdHlsZVJlc29sdmVyLT5y
b290RWxlbWVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCktPnpv
b20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpOwotICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c2V0RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnNldFpvb20oZG9jWm9vbSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmlzUGVyY2VudGFnZSgpKSB7Ci0gICAgICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVS
ZXNvbHZlcik7Ci0gICAgICAgICAgICBpZiAoZmxvYXQgcGVyY2VudCA9IHByaW1pdGl2ZVZhbHVl
LT5nZXRGbG9hdFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9v
bShwZXJjZW50IC8gMTAwLjBmKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
aXNOdW1iZXIoKSkgewotICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2
ZXIpOwotICAgICAgICAgICAgaWYgKGZsb2F0IG51bWJlciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRG
bG9hdFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShudW1i
ZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5
SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsKLSAgICB9Ci19
OwotCi1jbGFzcyBBcHBseVByb3BlcnR5RGlzcGxheSB7Ci1wcml2YXRlOgotICAgIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc1ZhbGlkRGlzcGxheVZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIEVEaXNwbGF5IGRpc3BsYXlQcm9wZXJ0eVZhbHVlKQotICAgIHsKLSNpZiBFTkFCTEUoU1ZH
KQotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpICYmIHN0eWxlUmVzb2x2ZXIt
PmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c3R5
bGVUeXBlKCkgPT0gTk9QU0VVRE8pCi0gICAgICAgICAgICByZXR1cm4gKGRpc3BsYXlQcm9wZXJ0
eVZhbHVlID09IElOTElORSB8fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBCTE9DSyB8fCBkaXNw
bGF5UHJvcGVydHlWYWx1ZSA9PSBOT05FKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShz
dHlsZVJlc29sdmVyKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlQcm9wZXJ0eVZhbHVl
KTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIEVEaXNwbGF5IGRpc3BsYXkgPSBzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpLT5kaXNwbGF5KCk7Ci0gICAgICAgIGlmICghaXNWYWxpZERp
c3BsYXlWYWx1ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0RGlzcGxheShSZW5kZXJTdHlsZTo6aW5pdGlhbERpc3BsYXkoKSk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgRURpc3BsYXkgZGlzcGxheSA9ICpzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbHVlKTsKLQotICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUoc3R5bGVSZXNvbHZl
ciwgZGlzcGxheSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHJv
cGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFByb3Bl
cnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5
VmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDxDbGlwUGF0aE9wZXJhdGlvbiogKFJlbmRl
clN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0
dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+KSwgQ2xpcFBhdGhPcGVy
YXRpb24qICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgotY2xhc3MgQXBwbHlQcm9wZXJ0eUNsaXBQYXRo
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUs
IFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1
bmN0aW9uKSh2YWx1ZSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgMCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
aXNTaGFwZSgpKSB7Ci0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJhc2ljU2hhcGVGb3JWYWx1ZShz
dHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKSkpOwotICAgICAg
ICAgICAgfQotI2lmIEVOQUJMRShTVkcpCi0gICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7Ci0g
ICAgICAgICAgICAgICAgU3RyaW5nIGNzc1VSTFZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0
cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBzdHlsZVJlc29sdmVyLT5k
b2N1bWVudCgpLT5jb21wbGV0ZVVSTChjc3NVUkxWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IEl0IGRvZXNuJ3Qgd29yayB3aXRoIGZvcndhcmQgb3IgZXh0ZXJuYWwgU1ZHIHJlZmVy
ZW5jZXMgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA0MDUp
Ci0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgUmVmZXJl
bmNlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShjc3NVUkxWYWx1ZSwgdXJsLmZyYWdtZW50SWRl
bnRpZmllcigpKSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLSAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAg
UHJvcGVydHlIYW5kbGVyIGhhbmRsZXIgPSBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8Q2xpcFBh
dGhPcGVyYXRpb24qLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxDbGlwUGF0aE9wZXJhdGlv
bj4sIHNldHRlckZ1bmN0aW9uLCBDbGlwUGF0aE9wZXJhdGlvbiosIGluaXRpYWxGdW5jdGlvbj46
OmNyZWF0ZUhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcihoYW5kbGVy
LmluaGVyaXRGdW5jdGlvbigpLCBoYW5kbGVyLmluaXRpYWxGdW5jdGlvbigpLCAmYXBwbHlWYWx1
ZSk7Ci0gICAgfQotfTsKLQotI2lmIEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLXRlbXBsYXRlIDxF
eGNsdXNpb25TaGFwZVZhbHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25z
dCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFzc1JlZlB0cjxFeGNsdXNp
b25TaGFwZVZhbHVlPiksIEV4Y2x1c2lvblNoYXBlVmFsdWUqICgqaW5pdGlhbEZ1bmN0aW9uKSgp
PgotY2xhc3MgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNoYXBlIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8RXhjbHVzaW9u
U2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwot
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0
bykKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAwKTsK
LSAgICAgICAgICAgIC8vIEZJWE1FIEJ1ZyAxMDI1NzE6IExheW91dCBmb3IgdGhlIHZhbHVlICdv
dXRzaWRlLXNoYXBlJyBpcyBub3QgeWV0IGltcGxlbWVudGVkCi0gICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU91dHNpZGVTaGFwZSkKLSAg
ICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBFeGNsdXNpb25T
aGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEV4Y2x1
c2lvblNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlU2hhcGVW
YWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlciwgcHJpbWl0aXZlVmFsdWUtPmdl
dFNoYXBlVmFsdWUoKSkpOwotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKLSAgICB7Ci0g
ICAgICAgIFByb3BlcnR5SGFuZGxlciBoYW5kbGVyID0gQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNl
PEV4Y2x1c2lvblNoYXBlVmFsdWUqLCBnZXR0ZXJGdW5jdGlvbiwgUGFzc1JlZlB0cjxFeGNsdXNp
b25TaGFwZVZhbHVlPiwgc2V0dGVyRnVuY3Rpb24sIEV4Y2x1c2lvblNoYXBlVmFsdWUqLCBpbml0
aWFsRnVuY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybiBQcm9wZXJ0eUhh
bmRsZXIoaGFuZGxlci5pbmhlcml0RnVuY3Rpb24oKSwgaGFuZGxlci5pbml0aWFsRnVuY3Rpb24o
KSwgJmFwcGx5VmFsdWUpOwotICAgIH0KLX07Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfSU1B
R0VfUkVTT0xVVElPTikKLWNsYXNzIEFwcGx5UHJvcGVydHlJbWFnZVJlc29sdXRpb24gewotcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIEFw
cGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJTdHls
ZTo6aW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZSZW5kZXJT
dHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlLCBJbWFnZVJlc29sdXRpb25Tb3VyY2UsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZT46OmFwcGx5SW5oZXJpdFZh
bHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBBcHBseVByb3BlcnR5RGVm
YXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRp
b25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1
dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdl
UmVzb2x1dGlvblNuYXA+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29s
dmVyKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0LCAmUmVuZGVyU3R5
bGU6OmltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0
aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uPjo6YXBwbHlJ
bmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgfQotCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQotICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURl
ZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29s
dXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFn
ZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpp
bml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFn
ZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdl
UmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1h
Z2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25h
cD46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwotICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNv
bHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb24sIGZsb2F0LCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBseUluaXRpYWxWYWx1ZShw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gc3Rh
dGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwotICAgICAgICBJbWFnZVJlc29sdXRpb25T
b3VyY2Ugc291cmNlID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2Uo
KTsKLSAgICAgICAgSW1hZ2VSZXNvbHV0aW9uU25hcCBzbmFwID0gUmVuZGVyU3R5bGU6OmluaXRp
YWxJbWFnZVJlc29sdXRpb25TbmFwKCk7Ci0gICAgICAgIGRvdWJsZSByZXNvbHV0aW9uID0gUmVu
ZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24oKTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgIENTU1Zh
bHVlKiBpdGVtID0gdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAg
ICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlRnJvbUltYWdlKQotICAgICAgICAg
ICAgICAgIHNvdXJjZSA9IEltYWdlUmVzb2x1dGlvbkZyb21JbWFnZTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlU25hcCkKLSAgICAg
ICAgICAgICAgICBzbmFwID0gSW1hZ2VSZXNvbHV0aW9uU25hcFBpeGVsczsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICByZXNvbHV0aW9uID0gcHJpbWl0aXZlVmFsdWUtPmdldERv
dWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKHNvdXJj
ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNu
YXAoc25hcCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEltYWdlUmVzb2x1
dGlvbihyZXNvbHV0aW9uKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNy
ZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBw
bHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOwotICAgIH0K
LX07Ci0jZW5kaWYKLQotY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRJbmRlbnQgewotcHVibGljOgot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCi0gICAgewotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRUZXh0SW5kZW50KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRJbmRl
bnQoKSk7Ci0jaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEluZGVudExpbmUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4
dEluZGVudExpbmUoKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQot
ICAgIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEluZGVudChSZW5k
ZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRlbnQoKSk7Ci0jaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEluZGVudExpbmUoUmVuZGVyU3R5
bGU6OmluaXRpYWxUZXh0SW5kZW50TGluZSgpKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1
ZUxpc3QoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBbIDxsZW5ndGg+IHwg
PHBlcmNlbnRhZ2U+IF0gLXdlYmtpdC1lYWNoLWxpbmUKLSAgICAgICAgLy8gVGhlIG9yZGVyIGlz
IGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJzZXI6OnBhcnNlVGV4dEluZGVudC4KLSAgICAgICAgLy8g
VGhlIHNlY29uZCB2YWx1ZSwgLXdlYmtpdC1lYWNoLWxpbmUgaXMgaGFuZGxlZCBvbmx5IHdoZW4g
Q1NTM19URVhUIGlzIGVuYWJsZWQuCi0KLSAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3Qg
PSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKLSAgICAgICAgTGVuZ3RoIGxl
bmd0aE9yUGVyY2VudGFnZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxG
aXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29u
dmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKLSAgICAgICAgQVNTRVJUKCFsZW5ndGhPclBlcmNl
bnRhZ2VWYWx1ZS5pc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0VGV4dEluZGVudChsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZSk7Ci0KLSNpZiBFTkFCTEUo
Q1NTM19URVhUKQotICAgICAgICBBU1NFUlQodmFsdWVMaXN0LT5sZW5ndGgoKSA8PSAyKTsKLSAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGVhY2hMaW5lVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlTGlzdC0+aXRlbSgxKSk7Ci0gICAgICAgIGlmIChlYWNoTGlu
ZVZhbHVlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZWFjaExpbmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZVdlYmtpdEVhY2hMaW5lKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldFRleHRJbmRlbnRMaW5lKFRleHRJbmRlbnRFYWNoTGluZSk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEluZGVudExp
bmUoVGV4dEluZGVudEZpcnN0TGluZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBzdGF0aWMgUHJv
cGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFByb3Bl
cnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5
VmFsdWUpOwotICAgIH0KLX07Ci0KLWNvbnN0IFN0eWxlQnVpbGRlciYgU3R5bGVCdWlsZGVyOjpz
aGFyZWRTdHlsZUJ1aWxkZXIoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3R5bGVCdWls
ZGVyLCBzdHlsZUJ1aWxkZXJJbnN0YW5jZSwgKCkpOwotICAgIHJldHVybiBzdHlsZUJ1aWxkZXJJ
bnN0YW5jZTsKLX0KLQotU3R5bGVCdWlsZGVyOjpTdHlsZUJ1aWxkZXIoKQotewotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtQ1NTUHJvcGVydGllczsgKytpKQotICAgICAgICBtX3Byb3BlcnR5
TWFwW2ldID0gUHJvcGVydHlIYW5kbGVyKCk7Ci0KLSAgICAvLyBQbGVhc2Uga2VlcCBDU1MgcHJv
cGVydHkgbGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXIuCi0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8
RUZpbGxBdHRhY2htZW50LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50LCBCYWNrZ3Jv
dW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5k
ZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNBdHRhY2htZW50U2V0LCAm
RmlsbExheWVyOjphdHRhY2htZW50LCAmRmlsbExheWVyOjpzZXRBdHRhY2htZW50LCAmRmlsbExh
eWVyOjpjbGVhckF0dGFjaG1lbnQsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQXR0YWNobWVudCwg
JkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxBdHRhY2htZW50Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCwgQXBwbHlQcm9w
ZXJ0eUZpbGxMYXllcjxFRmlsbEJveCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCwgQmFja2dy
b3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVu
ZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzQ2xpcFNldCwgJkZpbGxM
YXllcjo6Y2xpcCwgJkZpbGxMYXllcjo6c2V0Q2xpcCwgJkZpbGxMYXllcjo6Y2xlYXJDbGlwLCAm
RmlsbExheWVyOjppbml0aWFsRmlsbENsaXAsICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsQ2xpcD46
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwgJlJl
bmRlclN0eWxlOjpiYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0QmFja2dyb3VuZENv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQmFja2dyb3VuZENvbG9yLCAmUmVuZGVy
U3R5bGU6OmludmFsaWRDb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCBBcHBseVByb3BlcnR5RmlsbExheWVy
PFN0eWxlSW1hZ2UqLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZSwgQmFja2dyb3VuZEZpbGxM
YXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6
OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzSW1hZ2VTZXQsICZGaWxsTGF5ZXI6Omlt
YWdlLCAmRmlsbExheWVyOjpzZXRJbWFnZSwgJkZpbGxMYXllcjo6Y2xlYXJJbWFnZSwgJkZpbGxM
YXllcjo6aW5pdGlhbEZpbGxJbWFnZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxJbWFnZT46OmNy
ZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dy
b3VuZE9yaWdpbiwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbEJveCwgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kT3JpZ2luLCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vz
c0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxM
YXllcjo6aXNPcmlnaW5TZXQsICZGaWxsTGF5ZXI6Om9yaWdpbiwgJkZpbGxMYXllcjo6c2V0T3Jp
Z2luLCAmRmlsbExheWVyOjpjbGVhck9yaWdpbiwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxPcmln
aW4sICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCBBcHBs
eVByb3BlcnR5RmlsbExheWVyPExlbmd0aCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25Y
LCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXll
cnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNYUG9zaXRp
b25TZXQsICZGaWxsTGF5ZXI6OnhQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WFBvc2l0aW9uLCAm
RmlsbExheWVyOjpjbGVhclhQb3NpdGlvbiwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxYUG9zaXRp
b24sICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uPjo6Y3JlYXRlSGFuZGxlcigpKTsK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCBB
cHBseVByb3BlcnR5RmlsbExheWVyPExlbmd0aCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRp
b25ZLCBCYWNrZ3JvdW5kRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRM
YXllcnMsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNZUG9z
aXRpb25TZXQsICZGaWxsTGF5ZXI6OnlQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WVBvc2l0aW9u
LCAmRmlsbExheWVyOjpjbGVhcllQb3NpdGlvbiwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxZUG9z
aXRpb24sICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9uPjo6Y3JlYXRlSGFuZGxlcigp
KTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwg
QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbFJlcGVhdCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
UmVwZWF0WCwgQmFja2dyb3VuZEZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3Jv
dW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZGaWxsTGF5ZXI6Omlz
UmVwZWF0WFNldCwgJkZpbGxMYXllcjo6cmVwZWF0WCwgJkZpbGxMYXllcjo6c2V0UmVwZWF0WCwg
JkZpbGxMYXllcjo6Y2xlYXJSZXBlYXRYLCAmRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFgs
ICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksIEFwcGx5UHJv
cGVydHlGaWxsTGF5ZXI8RUZpbGxSZXBlYXQsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFks
IEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExheWVy
cywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjppc1JlcGVhdFlT
ZXQsICZGaWxsTGF5ZXI6OnJlcGVhdFksICZGaWxsTGF5ZXI6OnNldFJlcGVhdFksICZGaWxsTGF5
ZXI6OmNsZWFyUmVwZWF0WSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxSZXBlYXRZLCAmQ1NTVG9T
dHlsZU1hcDo6bWFwRmlsbFJlcGVhdFk+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplLCBBcHBseVByb3BlcnR5RmlsbExh
eWVyPEZpbGxTaXplLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplLCBCYWNrZ3JvdW5kRmlsbExh
eWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0JhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6
YmFja2dyb3VuZExheWVycywgJkZpbGxMYXllcjo6aXNTaXplU2V0LCAmRmlsbExheWVyOjpzaXpl
LCAmRmlsbExheWVyOjpzZXRTaXplLCAmRmlsbExheWVyOjpjbGVhclNpemUsICZGaWxsTGF5ZXI6
OmluaXRpYWxGaWxsU2l6ZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplPjo6Y3JlYXRlSGFu
ZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21D
b2xvciwgQXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQsICZSZW5kZXJTdHls
ZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tQ29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0
eWxlOjpjb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgQXBwbHlQcm9wZXJ0eUJvcmRlclJhZGl1
czwmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0
Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyUmFkaXVz
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b21SaWdodFJhZGl1cywgQXBwbHlQcm9wZXJ0eUJvcmRlclJhZGl1czwmUmVuZGVy
U3R5bGU6OmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJv
dHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJSYWRpdXM+OjpjcmVh
dGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbVN0eWxlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHls
ZTo6Ym9yZGVyQm90dG9tU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRCb3Jk
ZXJCb3R0b21TdHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJT
dHlsZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5Qm9yZGVyQm90dG9tV2lkdGgsIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoPHVuc2lnbmVk
LCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRl
ckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJXaWR0aCwgTm9ybWFsRGlz
YWJsZWQsIFRoaWNrbmVzc0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlckNvbGxhcHNlLCBBcHBseVByb3BlcnR5RGVmYXVs
dDxFQm9yZGVyQ29sbGFwc2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQ29sbGFwc2UsIEVCb3JkZXJD
b2xsYXBzZSwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJDb2xsYXBzZSwgRUJvcmRlckNvbGxhcHNl
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJDb2xsYXBzZT46OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VPdXRzZXQsIEFw
cGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPEJvcmRlckltYWdlLCBPdXRzZXQ+OjpjcmVh
dGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlcklt
YWdlUmVwZWF0LCBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjxCb3JkZXJJbWFnZSwg
UmVwZWF0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlCb3JkZXJJbWFnZVNsaWNlLCBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjxC
b3JkZXJJbWFnZSwgU2xpY2U+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlLCBBcHBseVByb3BlcnR5Qm9yZGVySW1h
Z2VTb3VyY2U8Q1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpib3Jk
ZXJJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZVNvdXJjZSwgJlJlbmRl
clN0eWxlOjppbml0aWFsQm9yZGVySW1hZ2VTb3VyY2U+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlckltYWdlV2lkdGgsIEFwcGx5UHJv
cGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPEJvcmRlckltYWdlLCBXaWR0aD46OmNyZWF0ZUhhbmRs
ZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9y
LCBBcHBseVByb3BlcnR5Q29sb3I8Tm9Jbmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjpi
b3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdENvbG9yLCAmUmVuZGVy
U3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9y
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlC
b3JkZXJMZWZ0U3R5bGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVCb3JkZXJTdHlsZSwgJlJlbmRl
clN0eWxlOjpib3JkZXJMZWZ0U3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRC
b3JkZXJMZWZ0U3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVy
U3R5bGU+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eUJvcmRlckxlZnRXaWR0aCwgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg8dW5zaWduZWQs
ICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckxl
ZnRXaWR0aCwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyV2lkdGgsIE5vcm1hbERpc2FibGVk
LCBUaGlja25lc3NFbmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9J
bmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtC
b3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJSaWdodFN0eWxlLCBBcHBs
eVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6Ym9yZGVyUmlnaHRT
dHlsZSwgRUJvcmRlclN0eWxlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0U3R5bGUsIEVC
b3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjpjcmVhdGVIYW5k
bGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lk
dGgsIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoPHVuc2lnbmVkLCAmUmVuZGVyU3R5bGU6OmJv
cmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRXaWR0aCwgJlJlbmRl
clN0eWxlOjppbml0aWFsQm9yZGVyV2lkdGgsIE5vcm1hbERpc2FibGVkLCBUaGlja25lc3NFbmFi
bGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlCb3JkZXJUb3BDb2xvciwgQXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQs
ICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9w
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJUb3BDb2xvciwgJlJlbmRl
clN0eWxlOjpjb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1cywgQXBwbHlQcm9wZXJ0eUJvcmRlclJhZGl1
czwmUmVuZGVyU3R5bGU6OmJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9y
ZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyUmFkaXVzPjo6Y3Jl
YXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlCb3JkZXJU
b3BSaWdodFJhZGl1cywgQXBwbHlQcm9wZXJ0eUJvcmRlclJhZGl1czwmUmVuZGVyU3R5bGU6OmJv
cmRlclRvcFJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcFJpZ2h0UmFkaXVz
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJSYWRpdXM+OjpjcmVhdGVIYW5kbGVyKCkpOwot
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlLCBBcHBseVBy
b3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wU3R5bGUs
IEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BTdHlsZSwgRUJvcmRlclN0
eWxlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZT46OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsIEFwcGx5
UHJvcGVydHlDb21wdXRlTGVuZ3RoPHVuc2lnbmVkLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFdp
ZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxCb3JkZXJXaWR0aCwgTm9ybWFsRGlzYWJsZWQsIFRoaWNrbmVzc0VuYWJsZWQ+OjpjcmVhdGVI
YW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJvdHRvbSwgQXBw
bHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OmJvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRC
b3R0b20sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE9mZnNldCwgQXV0b0VuYWJsZWQ+OjpjcmVhdGVI
YW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUJveFNpemluZywg
QXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJveFNpemluZywgJlJlbmRlclN0eWxlOjpib3hTaXppbmcs
IEVCb3hTaXppbmcsICZSZW5kZXJTdHlsZTo6c2V0Qm94U2l6aW5nLCBFQm94U2l6aW5nLCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxCb3hTaXppbmc+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUNhcHRpb25TaWRlLCBBcHBseVByb3BlcnR5RGVmYXVs
dDxFQ2FwdGlvblNpZGUsICZSZW5kZXJTdHlsZTo6Y2FwdGlvblNpZGUsIEVDYXB0aW9uU2lkZSwg
JlJlbmRlclN0eWxlOjpzZXRDYXB0aW9uU2lkZSwgRUNhcHRpb25TaWRlLCAmUmVuZGVyU3R5bGU6
OmluaXRpYWxDYXB0aW9uU2lkZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5Q2xlYXIsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVDbGVhciwgJlJl
bmRlclN0eWxlOjpjbGVhciwgRUNsZWFyLCAmUmVuZGVyU3R5bGU6OnNldENsZWFyLCBFQ2xlYXIs
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbENsZWFyPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlDbGlwLCBBcHBseVByb3BlcnR5Q2xpcDo6Y3JlYXRl
SGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlDb2xvciwgQXBw
bHlQcm9wZXJ0eUNvbG9yPEluaGVyaXRGcm9tUGFyZW50LCAmUmVuZGVyU3R5bGU6OmNvbG9yLCAm
UmVuZGVyU3R5bGU6OnNldENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sb3Is
ICZSZW5kZXJTdHlsZTo6aW52YWxpZENvbG9yLCBSZW5kZXJTdHlsZTo6aW5pdGlhbENvbG9yPjo6
Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlDb3Vu
dGVySW5jcmVtZW50LCBBcHBseVByb3BlcnR5Q291bnRlcjxJbmNyZW1lbnQ+OjpjcmVhdGVIYW5k
bGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUNvdW50ZXJSZXNldCwg
QXBwbHlQcm9wZXJ0eUNvdW50ZXI8UmVzZXQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUN1cnNvciwgQXBwbHlQcm9wZXJ0eUN1cnNvcjo6Y3Jl
YXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlEaXJlY3Rp
b24sIEFwcGx5UHJvcGVydHlEaXJlY3Rpb248JlJlbmRlclN0eWxlOjpkaXJlY3Rpb24sICZSZW5k
ZXJTdHlsZTo6c2V0RGlyZWN0aW9uLCBSZW5kZXJTdHlsZTo6aW5pdGlhbERpcmVjdGlvbj46OmNy
ZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5RGlzcGxh
eSwgQXBwbHlQcm9wZXJ0eURpc3BsYXk6OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5RW1wdHlDZWxscywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUVt
cHR5Q2VsbCwgJlJlbmRlclN0eWxlOjplbXB0eUNlbGxzLCBFRW1wdHlDZWxsLCAmUmVuZGVyU3R5
bGU6OnNldEVtcHR5Q2VsbHMsIEVFbXB0eUNlbGwsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEVtcHR5
Q2VsbHM+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eUZsb2F0LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFRmxvYXQsICZSZW5kZXJTdHlsZTo6Zmxv
YXRpbmcsIEVGbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRGbG9hdGluZywgRUZsb2F0LCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxGbG9hdGluZz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5Rm9udEZhbWlseSwgQXBwbHlQcm9wZXJ0eUZvbnRGYW1pbHk6
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Rm9u
dFNpemUsIEFwcGx5UHJvcGVydHlGb250U2l6ZTo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlGb250U3R5bGUsIEFwcGx5UHJvcGVydHlGb250PEZv
bnRJdGFsaWMsICZGb250RGVzY3JpcHRpb246Oml0YWxpYywgJkZvbnREZXNjcmlwdGlvbjo6c2V0
SXRhbGljLCBGb250SXRhbGljT2ZmPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgQXBwbHlQcm9wZXJ0eUZvbnQ8Rm9udFNt
YWxsQ2FwcywgJkZvbnREZXNjcmlwdGlvbjo6c21hbGxDYXBzLCAmRm9udERlc2NyaXB0aW9uOjpz
ZXRTbWFsbENhcHMsIEZvbnRTbWFsbENhcHNPZmY+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIEFwcGx5UHJvcGVydHlGb250
V2VpZ2h0OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eUhlaWdodCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OmhlaWdodCwgJlJl
bmRlclN0eWxlOjpzZXRIZWlnaHQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNpemUsIEF1dG9FbmFi
bGVkLCBMZWdhY3lJbnRyaW5zaWNFbmFibGVkLCBJbnRyaW5zaWNEaXNhYmxlZCwgTm9uZURpc2Fi
bGVkLCBVbmRlZmluZWREaXNhYmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0jaWYgRU5BQkxFKENT
U19JTUFHRV9PUklFTlRBVElPTikKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlJ
bWFnZU9yaWVudGF0aW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxJbWFnZU9yaWVudGF0aW9uRW51
bSwgJlJlbmRlclN0eWxlOjppbWFnZU9yaWVudGF0aW9uLCBJbWFnZU9yaWVudGF0aW9uRW51bSwg
JlJlbmRlclN0eWxlOjpzZXRJbWFnZU9yaWVudGF0aW9uLCBJbWFnZU9yaWVudGF0aW9uRW51bSwg
JlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VPcmllbnRhdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0jZW5kaWYKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlJbWFnZVJlbmRlcmlu
ZywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUltYWdlUmVuZGVyaW5nLCAmUmVuZGVyU3R5bGU6Omlt
YWdlUmVuZGVyaW5nLCBFSW1hZ2VSZW5kZXJpbmcsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZW5k
ZXJpbmcsIEVJbWFnZVJlbmRlcmluZywgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZW5kZXJp
bmc+OjpjcmVhdGVIYW5kbGVyKCkpOwotI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlJbWFnZVJlc29sdXRpb24sIEFwcGx5
UHJvcGVydHlJbWFnZVJlc29sdXRpb246OmNyZWF0ZUhhbmRsZXIoKSk7Ci0jZW5kaWYKLSAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlMZWZ0LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZS
ZW5kZXJTdHlsZTo6bGVmdCwgJlJlbmRlclN0eWxlOjpzZXRMZWZ0LCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxPZmZzZXQsIEF1dG9FbmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nLCBBcHBseVByb3BlcnR5Q29tcHV0
ZUxlbmd0aDxpbnQsICZSZW5kZXJTdHlsZTo6bGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpz
ZXRMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxMZXR0ZXJXb3JkU3BhY2luZywg
Tm9ybWFsRW5hYmxlZCwgVGhpY2tuZXNzRGlzYWJsZWQsIFNWR1pvb21FbmFibGVkPjo6Y3JlYXRl
SGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0
LCBBcHBseVByb3BlcnR5TGluZUhlaWdodDo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSwgQXBwbHlQcm9wZXJ0eVN0eWxl
SW1hZ2U8JlJlbmRlclN0eWxlOjpsaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRMaXN0
U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjppbml0aWFsTGlzdFN0eWxlSW1hZ2UsIENTU1Byb3Bl
cnR5TGlzdFN0eWxlSW1hZ2U+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eUxpc3RTdHlsZVBvc2l0aW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxF
TGlzdFN0eWxlUG9zaXRpb24sICZSZW5kZXJTdHlsZTo6bGlzdFN0eWxlUG9zaXRpb24sIEVMaXN0
U3R5bGVQb3NpdGlvbiwgJlJlbmRlclN0eWxlOjpzZXRMaXN0U3R5bGVQb3NpdGlvbiwgRUxpc3RT
dHlsZVBvc2l0aW9uLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxMaXN0U3R5bGVQb3NpdGlvbj46OmNy
ZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5TGlzdFN0
eWxlVHlwZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUxpc3RTdHlsZVR5cGUsICZSZW5kZXJTdHls
ZTo6bGlzdFN0eWxlVHlwZSwgRUxpc3RTdHlsZVR5cGUsICZSZW5kZXJTdHlsZTo6c2V0TGlzdFN0
eWxlVHlwZSwgRUxpc3RTdHlsZVR5cGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbExpc3RTdHlsZVR5
cGU+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eU1hcmdpbkJvdHRvbSwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6Om1hcmdpbkJv
dHRvbSwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6aW5pdGlh
bE1hcmdpbiwgQXV0b0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5
SGFuZGxlcihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRl
clN0eWxlOjptYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkxlZnQsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbE1hcmdpbiwgQXV0b0VuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCBBcHBseVByb3BlcnR5
TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bWFyZ2luUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2lu
UmlnaHQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcmdpbiwgQXV0b0VuYWJsZWQ+OjpjcmVhdGVI
YW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU1hcmdpblRvcCwg
QXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6Om1hcmdpblRvcCwgJlJlbmRlclN0eWxl
OjpzZXRNYXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcmdpbiwgQXV0b0VuYWJsZWQ+
OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU1h
eEhlaWdodCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6Om1heEhlaWdodCwgJlJl
bmRlclN0eWxlOjpzZXRNYXhIZWlnaHQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1heFNpemUsIEF1
dG9FbmFibGVkLCBMZWdhY3lJbnRyaW5zaWNFbmFibGVkLCBJbnRyaW5zaWNEaXNhYmxlZCwgTm9u
ZUVuYWJsZWQsIFVuZGVmaW5lZEVuYWJsZWQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU1heFdpZHRoLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZS
ZW5kZXJTdHlsZTo6bWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWF4V2lkdGgsICZSZW5kZXJT
dHlsZTo6aW5pdGlhbE1heFNpemUsIEF1dG9FbmFibGVkLCBMZWdhY3lJbnRyaW5zaWNFbmFibGVk
LCBJbnRyaW5zaWNFbmFibGVkLCBOb25lRW5hYmxlZCwgVW5kZWZpbmVkRW5hYmxlZD46OmNyZWF0
ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5TWluSGVpZ2h0
LCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6bWluSGVpZ2h0LCAmUmVuZGVyU3R5
bGU6OnNldE1pbkhlaWdodCwgJlJlbmRlclN0eWxlOjppbml0aWFsTWluU2l6ZSwgQXV0b0VuYWJs
ZWQsIExlZ2FjeUludHJpbnNpY0VuYWJsZWQsIEludHJpbnNpY0Rpc2FibGVkPjo6Y3JlYXRlSGFu
ZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlNaW5XaWR0aCwgQXBw
bHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6Om1pbldpZHRoLCAmUmVuZGVyU3R5bGU6OnNl
dE1pbldpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNaW5TaXplLCBBdXRvRW5hYmxlZCwgTGVn
YWN5SW50cmluc2ljRW5hYmxlZCwgSW50cmluc2ljRW5hYmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5T3BhY2l0eSwgQXBwbHlQcm9wZXJ0
eURlZmF1bHQ8ZmxvYXQsICZSZW5kZXJTdHlsZTo6b3BhY2l0eSwgZmxvYXQsICZSZW5kZXJTdHls
ZTo6c2V0T3BhY2l0eSwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbE9wYWNpdHk+OjpjcmVh
dGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eU9ycGhhbnMs
IEFwcGx5UHJvcGVydHlBdXRvPHNob3J0LCAmUmVuZGVyU3R5bGU6Om9ycGhhbnMsICZSZW5kZXJT
dHlsZTo6c2V0T3JwaGFucywgJlJlbmRlclN0eWxlOjpoYXNBdXRvT3JwaGFucywgJlJlbmRlclN0
eWxlOjpzZXRIYXNBdXRvT3JwaGFucz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yLCBBcHBseVByb3BlcnR5Q29sb3I8Tm9J
bmhlcml0RnJvbVBhcmVudCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lQ29sb3IsICZSZW5kZXJTdHls
ZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNv
bG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0LCBBcHBseVByb3BlcnR5Q29tcHV0
ZUxlbmd0aDxpbnQsICZSZW5kZXJTdHlsZTo6b3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjpz
ZXRPdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lT2Zmc2V0Pjo6Y3Jl
YXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdXRsaW5l
U3R5bGUsIEFwcGx5UHJvcGVydHlPdXRsaW5lU3R5bGU6OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5T3V0bGluZVdpZHRoLCBBcHBseVByb3BlcnR5
Q29tcHV0ZUxlbmd0aDx1bnNpZ25lZCBzaG9ydCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lkdGgs
ICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRs
aW5lV2lkdGgsIE5vcm1hbERpc2FibGVkLCBUaGlja25lc3NFbmFibGVkPjo6Y3JlYXRlSGFuZGxl
cigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdmVyZmxvd1dyYXAsIEFw
cGx5UHJvcGVydHlEZWZhdWx0PEVPdmVyZmxvd1dyYXAsICZSZW5kZXJTdHlsZTo6b3ZlcmZsb3dX
cmFwLCBFT3ZlcmZsb3dXcmFwLCAmUmVuZGVyU3R5bGU6OnNldE92ZXJmbG93V3JhcCwgRU92ZXJm
bG93V3JhcCwgJlJlbmRlclN0eWxlOjppbml0aWFsT3ZlcmZsb3dXcmFwPjo6Y3JlYXRlSGFuZGxl
cigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlPdmVyZmxvd1gsIEFwcGx5
UHJvcGVydHlEZWZhdWx0PEVPdmVyZmxvdywgJlJlbmRlclN0eWxlOjpvdmVyZmxvd1gsIEVPdmVy
ZmxvdywgJlJlbmRlclN0eWxlOjpzZXRPdmVyZmxvd1gsIEVPdmVyZmxvdywgJlJlbmRlclN0eWxl
Ojppbml0aWFsT3ZlcmZsb3dYPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlPdmVyZmxvd1ksIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVPdmVyZmxv
dywgJlJlbmRlclN0eWxlOjpvdmVyZmxvd1ksIEVPdmVyZmxvdywgJlJlbmRlclN0eWxlOjpzZXRP
dmVyZmxvd1ksIEVPdmVyZmxvdywgJlJlbmRlclN0eWxlOjppbml0aWFsT3ZlcmZsb3dZPjo6Y3Jl
YXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlQYWRkaW5n
Qm90dG9tLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6cGFkZGluZ0JvdHRvbSwg
JlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQYWRk
aW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlQYWRkaW5nTGVmdCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OnBhZGRpbmdM
ZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQ
YWRkaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlQYWRkaW5nUmlnaHQsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpwYWRk
aW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxQYWRkaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlQYWRkaW5nVG9wLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6
cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxQYWRkaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlQYWdlQnJlYWtBZnRlciwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBhZ2VCcmVh
aywgJlJlbmRlclN0eWxlOjpwYWdlQnJlYWtBZnRlciwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxl
OjpzZXRQYWdlQnJlYWtBZnRlciwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjppbml0aWFsUGFn
ZUJyZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlQYWdlQnJlYWtCZWZvcmUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVQYWdlQnJlYWssICZS
ZW5kZXJTdHlsZTo6cGFnZUJyZWFrQmVmb3JlLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OnNl
dFBhZ2VCcmVha0JlZm9yZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjppbml0aWFsUGFnZUJy
ZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlQYWdlQnJlYWtJbnNpZGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVQYWdlQnJlYWssICZSZW5k
ZXJTdHlsZTo6cGFnZUJyZWFrSW5zaWRlLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OnNldFBh
Z2VCcmVha0luc2lkZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjppbml0aWFsUGFnZUJyZWFr
Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlQ
b2ludGVyRXZlbnRzLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFUG9pbnRlckV2ZW50cywgJlJlbmRl
clN0eWxlOjpwb2ludGVyRXZlbnRzLCBFUG9pbnRlckV2ZW50cywgJlJlbmRlclN0eWxlOjpzZXRQ
b2ludGVyRXZlbnRzLCBFUG9pbnRlckV2ZW50cywgJlJlbmRlclN0eWxlOjppbml0aWFsUG9pbnRl
ckV2ZW50cz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5UG9zaXRpb24sIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVQb3NpdGlvbiwgJlJlbmRlclN0
eWxlOjpwb3NpdGlvbiwgRVBvc2l0aW9uLCAmUmVuZGVyU3R5bGU6OnNldFBvc2l0aW9uLCBFUG9z
aXRpb24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFBvc2l0aW9uPjo6Y3JlYXRlSGFuZGxlcigpKTsK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlSZXNpemUsIEFwcGx5UHJvcGVydHlS
ZXNpemU6OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5UmlnaHQsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpyaWdodCwgJlJlbmRl
clN0eWxlOjpzZXRSaWdodCwgJlJlbmRlclN0eWxlOjppbml0aWFsT2Zmc2V0LCBBdXRvRW5hYmxl
ZD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
U2l6ZSwgQXBwbHlQcm9wZXJ0eVBhZ2VTaXplOjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVNwZWFrLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFU3Bl
YWssICZSZW5kZXJTdHlsZTo6c3BlYWssIEVTcGVhaywgJlJlbmRlclN0eWxlOjpzZXRTcGVhaywg
RVNwZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTcGVhaz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0g
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VGFibGVMYXlvdXQsIEFwcGx5UHJvcGVy
dHlEZWZhdWx0PEVUYWJsZUxheW91dCwgJlJlbmRlclN0eWxlOjp0YWJsZUxheW91dCwgRVRhYmxl
TGF5b3V0LCAmUmVuZGVyU3R5bGU6OnNldFRhYmxlTGF5b3V0LCBFVGFibGVMYXlvdXQsICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbFRhYmxlTGF5b3V0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlUYWJTaXplLCBBcHBseVByb3BlcnR5RGVmYXVsdDx1
bnNpZ25lZCwgJlJlbmRlclN0eWxlOjp0YWJTaXplLCB1bnNpZ25lZCwgJlJlbmRlclN0eWxlOjpz
ZXRUYWJTaXplLCB1bnNpZ25lZCwgJlJlbmRlclN0eWxlOjppbml0aWFsVGFiU2l6ZT46OmNyZWF0
ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VGV4dEFsaWdu
LCBBcHBseVByb3BlcnR5VGV4dEFsaWduOjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3Bl
cnR5SGFuZGxlcihDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uLCBBcHBseVByb3BlcnR5VGV4dERl
Y29yYXRpb246OmNyZWF0ZUhhbmRsZXIoKSk7Ci0jaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbkxpbmUsIEFw
cGx5UHJvcGVydHlUZXh0RGVjb3JhdGlvbjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvblN0eWxlLCBBcHBseVBy
b3BlcnR5RGVmYXVsdDxUZXh0RGVjb3JhdGlvblN0eWxlLCAmUmVuZGVyU3R5bGU6OnRleHREZWNv
cmF0aW9uU3R5bGUsIFRleHREZWNvcmF0aW9uU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0VGV4dERl
Y29yYXRpb25TdHlsZSwgVGV4dERlY29yYXRpb25TdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFs
VGV4dERlY29yYXRpb25TdHlsZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25Db2xvciwgQXBwbHlQcm9wZXJ0
eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQsICZSZW5kZXJTdHlsZTo6dGV4dERlY29yYXRpb25D
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlvbkNvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldFZpc2l0ZWRMaW5rVGV4dERlY29yYXRpb25Db2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcj46
OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Vi
a2l0VGV4dEFsaWduTGFzdCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dEFsaWduTGFzdCwgJlJl
bmRlclN0eWxlOjp0ZXh0QWxpZ25MYXN0LCBUZXh0QWxpZ25MYXN0LCAmUmVuZGVyU3R5bGU6OnNl
dFRleHRBbGlnbkxhc3QsIFRleHRBbGlnbkxhc3QsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRB
bGlnbkxhc3Q+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRKdXN0aWZ5LCBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0SnVzdGlm
eSwgJlJlbmRlclN0eWxlOjp0ZXh0SnVzdGlmeSwgVGV4dEp1c3RpZnksICZSZW5kZXJTdHlsZTo6
c2V0VGV4dEp1c3RpZnksIFRleHRKdXN0aWZ5LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SnVz
dGlmeT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0VGV4dFVuZGVybGluZVBvc2l0aW9uLCBBcHBseVByb3BlcnR5VGV4dFVuZGVybGlu
ZVBvc2l0aW9uOjpjcmVhdGVIYW5kbGVyKCkpOwotI2VuZGlmIC8vIENTUzNfVEVYVAotICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVRleHRJbmRlbnQsIEFwcGx5UHJvcGVydHlUZXh0
SW5kZW50OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVRleHRPdmVyZmxvdywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8VGV4dE92ZXJmbG93LCAmUmVu
ZGVyU3R5bGU6OnRleHRPdmVyZmxvdywgVGV4dE92ZXJmbG93LCAmUmVuZGVyU3R5bGU6OnNldFRl
eHRPdmVyZmxvdywgVGV4dE92ZXJmbG93LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0T3ZlcmZs
b3c+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVRleHRSZW5kZXJpbmcsIEFwcGx5UHJvcGVydHlGb250PFRleHRSZW5kZXJpbmdNb2RlLCAmRm9u
dERlc2NyaXB0aW9uOjp0ZXh0UmVuZGVyaW5nTW9kZSwgJkZvbnREZXNjcmlwdGlvbjo6c2V0VGV4
dFJlbmRlcmluZ01vZGUsIEF1dG9UZXh0UmVuZGVyaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlUZXh0VHJhbnNmb3JtLCBBcHBseVByb3Bl
cnR5RGVmYXVsdDxFVGV4dFRyYW5zZm9ybSwgJlJlbmRlclN0eWxlOjp0ZXh0VHJhbnNmb3JtLCBF
VGV4dFRyYW5zZm9ybSwgJlJlbmRlclN0eWxlOjpzZXRUZXh0VHJhbnNmb3JtLCBFVGV4dFRyYW5z
Zm9ybSwgJlJlbmRlclN0eWxlOjppbml0aWFsVGV4dFRyYW5zZm9ybT46OmNyZWF0ZUhhbmRsZXIo
KSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VG9wLCBBcHBseVByb3BlcnR5
TGVuZ3RoPCZSZW5kZXJTdHlsZTo6dG9wLCAmUmVuZGVyU3R5bGU6OnNldFRvcCwgJlJlbmRlclN0
eWxlOjppbml0aWFsT2Zmc2V0LCBBdXRvRW5hYmxlZD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5VW5pY29kZUJpZGksIEFwcGx5UHJvcGVydHlE
ZWZhdWx0PEVVbmljb2RlQmlkaSwgJlJlbmRlclN0eWxlOjp1bmljb2RlQmlkaSwgRVVuaWNvZGVC
aWRpLCAmUmVuZGVyU3R5bGU6OnNldFVuaWNvZGVCaWRpLCBFVW5pY29kZUJpZGksICZSZW5kZXJT
dHlsZTo6aW5pdGlhbFVuaWNvZGVCaWRpPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduLCBBcHBseVByb3BlcnR5VmVydGlj
YWxBbGlnbjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlWaXNpYmlsaXR5LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFVmlzaWJpbGl0eSwgJlJlbmRl
clN0eWxlOjp2aXNpYmlsaXR5LCBFVmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpzZXRWaXNpYmls
aXR5LCBFVmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjppbml0aWFsVmlzaWJpbGl0eT46OmNyZWF0
ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QW5p
bWF0aW9uRGVsYXksIEFwcGx5UHJvcGVydHlBbmltYXRpb248ZG91YmxlLCAmQW5pbWF0aW9uOjpk
ZWxheSwgJkFuaW1hdGlvbjo6c2V0RGVsYXksICZBbmltYXRpb246OmlzRGVsYXlTZXQsICZBbmlt
YXRpb246OmNsZWFyRGVsYXksICZBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25EZWxheSwgJkNT
U1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRlbGF5LCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0FuaW1h
dGlvbnMsICZSZW5kZXJTdHlsZTo6YW5pbWF0aW9ucz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uLCBB
cHBseVByb3BlcnR5QW5pbWF0aW9uPEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uLCAmQW5p
bWF0aW9uOjpkaXJlY3Rpb24sICZBbmltYXRpb246OnNldERpcmVjdGlvbiwgJkFuaW1hdGlvbjo6
aXNEaXJlY3Rpb25TZXQsICZBbmltYXRpb246OmNsZWFyRGlyZWN0aW9uLCAmQW5pbWF0aW9uOjpp
bml0aWFsQW5pbWF0aW9uRGlyZWN0aW9uLCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRGly
ZWN0aW9uLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0FuaW1hdGlvbnMsICZSZW5kZXJTdHlsZTo6YW5p
bWF0aW9ucz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb24sIEFwcGx5UHJvcGVydHlBbmltYXRpb248ZG91
YmxlLCAmQW5pbWF0aW9uOjpkdXJhdGlvbiwgJkFuaW1hdGlvbjo6c2V0RHVyYXRpb24sICZBbmlt
YXRpb246OmlzRHVyYXRpb25TZXQsICZBbmltYXRpb246OmNsZWFyRHVyYXRpb24sICZBbmltYXRp
b246OmluaXRpYWxBbmltYXRpb25EdXJhdGlvbiwgJkNTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlv
bkR1cmF0aW9uLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc0FuaW1hdGlvbnMsICZSZW5kZXJTdHlsZTo6
YW5pbWF0aW9ucz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRmlsbE1vZGUsIEFwcGx5UHJvcGVydHlBbmltYXRpb248
dW5zaWduZWQsICZBbmltYXRpb246OmZpbGxNb2RlLCAmQW5pbWF0aW9uOjpzZXRGaWxsTW9kZSwg
JkFuaW1hdGlvbjo6aXNGaWxsTW9kZVNldCwgJkFuaW1hdGlvbjo6Y2xlYXJGaWxsTW9kZSwgJkFu
aW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkZpbGxNb2RlLCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5p
bWF0aW9uRmlsbE1vZGUsICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5pbWF0aW9ucywgJlJlbmRlclN0
eWxlOjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudCwgQXBwbHlQcm9wZXJ0
eUFuaW1hdGlvbjxkb3VibGUsICZBbmltYXRpb246Oml0ZXJhdGlvbkNvdW50LCAmQW5pbWF0aW9u
OjpzZXRJdGVyYXRpb25Db3VudCwgJkFuaW1hdGlvbjo6aXNJdGVyYXRpb25Db3VudFNldCwgJkFu
aW1hdGlvbjo6Y2xlYXJJdGVyYXRpb25Db3VudCwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlv
bkl0ZXJhdGlvbkNvdW50LCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291
bnQsICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5pbWF0aW9ucywgJlJlbmRlclN0eWxlOjphbmltYXRp
b25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb25OYW1lLCBBcHBseVByb3BlcnR5QW5pbWF0aW9uPGNvbnN0IFN0cmlu
ZyYsICZBbmltYXRpb246Om5hbWUsICZBbmltYXRpb246OnNldE5hbWUsICZBbmltYXRpb246Omlz
TmFtZVNldCwgJkFuaW1hdGlvbjo6Y2xlYXJOYW1lLCAmQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0
aW9uTmFtZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbk5hbWUsICZSZW5kZXJTdHlsZTo6
YWNjZXNzQW5pbWF0aW9ucywgJlJlbmRlclN0eWxlOjphbmltYXRpb25zPjo6Y3JlYXRlSGFuZGxl
cigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25Q
bGF5U3RhdGUsIEFwcGx5UHJvcGVydHlBbmltYXRpb248RUFuaW1QbGF5U3RhdGUsICZBbmltYXRp
b246OnBsYXlTdGF0ZSwgJkFuaW1hdGlvbjo6c2V0UGxheVN0YXRlLCAmQW5pbWF0aW9uOjppc1Bs
YXlTdGF0ZVNldCwgJkFuaW1hdGlvbjo6Y2xlYXJQbGF5U3RhdGUsICZBbmltYXRpb246OmluaXRp
YWxBbmltYXRpb25QbGF5U3RhdGUsICZDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25QbGF5U3Rh
dGUsICZSZW5kZXJTdHlsZTo6YWNjZXNzQW5pbWF0aW9ucywgJlJlbmRlclN0eWxlOjphbmltYXRp
b25zPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbiwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxj
b25zdCBQYXNzUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiwgJkFuaW1hdGlvbjo6dGltaW5nRnVuY3Rp
b24sICZBbmltYXRpb246OnNldFRpbWluZ0Z1bmN0aW9uLCAmQW5pbWF0aW9uOjppc1RpbWluZ0Z1
bmN0aW9uU2V0LCAmQW5pbWF0aW9uOjpjbGVhclRpbWluZ0Z1bmN0aW9uLCAmQW5pbWF0aW9uOjpp
bml0aWFsQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sICZDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRp
b25UaW1pbmdGdW5jdGlvbiwgJlJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zLCAmUmVuZGVy
U3R5bGU6OmFuaW1hdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFu
ZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFwcGVhcmFuY2UsIEFwcGx5UHJvcGVydHlEZWZhdWx0PENv
bnRyb2xQYXJ0LCAmUmVuZGVyU3R5bGU6OmFwcGVhcmFuY2UsIENvbnRyb2xQYXJ0LCAmUmVuZGVy
U3R5bGU6OnNldEFwcGVhcmFuY2UsIENvbnRyb2xQYXJ0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxB
cHBlYXJhbmNlPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRBc3BlY3RSYXRpbywgQXBwbHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjpjcmVh
dGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJh
Y2tmYWNlVmlzaWJpbGl0eSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJhY2tmYWNlVmlzaWJpbGl0
eSwgJlJlbmRlclN0eWxlOjpiYWNrZmFjZVZpc2liaWxpdHksIEVCYWNrZmFjZVZpc2liaWxpdHks
ICZSZW5kZXJTdHlsZTo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5LCBFQmFja2ZhY2VWaXNpYmlsaXR5
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCYWNrZmFjZVZpc2liaWxpdHk+OjpjcmVhdGVIYW5kbGVy
KCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRD
bGlwLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlLCBBcHBseVByb3BlcnR5RmlsbExh
eWVyPENvbXBvc2l0ZU9wZXJhdG9yLCBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3Np
dGUsIEJhY2tncm91bmRGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzQmFja2dyb3VuZExh
eWVycywgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmRmlsbExheWVyOjppc0NvbXBv
c2l0ZVNldCwgJkZpbGxMYXllcjo6Y29tcG9zaXRlLCAmRmlsbExheWVyOjpzZXRDb21wb3NpdGUs
ICZGaWxsTGF5ZXI6OmNsZWFyQ29tcG9zaXRlLCAmRmlsbExheWVyOjppbml0aWFsRmlsbENvbXBv
c2l0ZSwgJkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxDb21wb3NpdGU+OjpjcmVhdGVIYW5kbGVyKCkp
OwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRPcmln
aW4sIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbik7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNpemUsIENTU1Byb3BlcnR5QmFja2dyb3VuZFNp
emUpOwotI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCi0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0QmxlbmRNb2RlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxCbGVuZE1v
ZGUsICZSZW5kZXJTdHlsZTo6YmxlbmRNb2RlLCBCbGVuZE1vZGUsICZSZW5kZXJTdHlsZTo6c2V0
QmxlbmRNb2RlLCBCbGVuZE1vZGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJsZW5kTW9kZT46OmNy
ZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0
QmFja2dyb3VuZEJsZW5kTW9kZSwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxCbGVuZE1vZGUsIENT
U1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZEJsZW5kTW9kZSwgQmFja2dyb3VuZEZpbGxMYXllciwg
JlJlbmRlclN0eWxlOjphY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmJhY2tn
cm91bmRMYXllcnMsICZGaWxsTGF5ZXI6OmlzQmxlbmRNb2RlU2V0LCAmRmlsbExheWVyOjpibGVu
ZE1vZGUsICZGaWxsTGF5ZXI6OnNldEJsZW5kTW9kZSwgJkZpbGxMYXllcjo6Y2xlYXJCbGVuZE1v
ZGUsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQmxlbmRNb2RlLCAmQ1NTVG9TdHlsZU1hcDo6bWFw
RmlsbEJsZW5kTW9kZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0jZW5kaWYKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJGaXQsIEFwcGx5UHJvcGVydHlEZWZhdWx0
PEVCb3JkZXJGaXQsICZSZW5kZXJTdHlsZTo6Ym9yZGVyRml0LCBFQm9yZGVyRml0LCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlckZpdCwgRUJvcmRlckZpdCwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9y
ZGVyRml0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywgQXBwbHlQcm9wZXJ0eUNvbXB1dGVM
ZW5ndGg8c2hvcnQsICZSZW5kZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6c2V0SG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bEhvcml6b250YWxCb3JkZXJTcGFjaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJJbWFnZSwgQXBwbHlQcm9wZXJ0eUJv
cmRlckltYWdlPEJvcmRlckltYWdlLCBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlLCAmUmVu
ZGVyU3R5bGU6OmJvcmRlckltYWdlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlPjo6Y3Jl
YXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRC
b3JkZXJWZXJ0aWNhbFNwYWNpbmcsIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoPHNob3J0LCAm
UmVuZGVyU3R5bGU6OnZlcnRpY2FsQm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRWZXJ0
aWNhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFZlcnRpY2FsQm9yZGVyU3Bh
Y2luZz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0Qm94QWxpZ24sIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVCb3hBbGlnbm1lbnQsICZS
ZW5kZXJTdHlsZTo6Ym94QWxpZ24sIEVCb3hBbGlnbm1lbnQsICZSZW5kZXJTdHlsZTo6c2V0Qm94
QWxpZ24sIEVCb3hBbGlnbm1lbnQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJveEFsaWduPjo6Y3Jl
YXRlSGFuZGxlcigpKTsKLSNpZiBFTkFCTEUoQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKQotICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEJveERlY29yYXRpb25CcmVhaywg
QXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUJveERlY29yYXRpb25CcmVhaywgJlJlbmRlclN0eWxlOjpi
b3hEZWNvcmF0aW9uQnJlYWssIEVCb3hEZWNvcmF0aW9uQnJlYWssICZSZW5kZXJTdHlsZTo6c2V0
Qm94RGVjb3JhdGlvbkJyZWFrLCBFQm94RGVjb3JhdGlvbkJyZWFrLCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxCb3hEZWNvcmF0aW9uQnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOwotI2VuZGlmCi0gICAg
c2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Qm94RGlyZWN0aW9uLCBBcHBseVBy
b3BlcnR5RGVmYXVsdDxFQm94RGlyZWN0aW9uLCAmUmVuZGVyU3R5bGU6OmJveERpcmVjdGlvbiwg
RUJveERpcmVjdGlvbiwgJlJlbmRlclN0eWxlOjpzZXRCb3hEaXJlY3Rpb24sIEVCb3hEaXJlY3Rp
b24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJveERpcmVjdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Qm94RmxleCwgQXBwbHlQ
cm9wZXJ0eURlZmF1bHQ8ZmxvYXQsICZSZW5kZXJTdHlsZTo6Ym94RmxleCwgZmxvYXQsICZSZW5k
ZXJTdHlsZTo6c2V0Qm94RmxleCwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJveEZsZXg+
OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdl
YmtpdEJveEZsZXhHcm91cCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8dW5zaWduZWQgaW50LCAmUmVu
ZGVyU3R5bGU6OmJveEZsZXhHcm91cCwgdW5zaWduZWQgaW50LCAmUmVuZGVyU3R5bGU6OnNldEJv
eEZsZXhHcm91cCwgdW5zaWduZWQgaW50LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hGbGV4R3Jv
dXA+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdlYmtpdEJveExpbmVzLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm94TGluZXMsICZSZW5kZXJT
dHlsZTo6Ym94TGluZXMsIEVCb3hMaW5lcywgJlJlbmRlclN0eWxlOjpzZXRCb3hMaW5lcywgRUJv
eExpbmVzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxCb3hMaW5lcz46OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Qm94T3JkaW5hbEdyb3Vw
LCBBcHBseVByb3BlcnR5RGVmYXVsdDx1bnNpZ25lZCBpbnQsICZSZW5kZXJTdHlsZTo6Ym94T3Jk
aW5hbEdyb3VwLCB1bnNpZ25lZCBpbnQsICZSZW5kZXJTdHlsZTo6c2V0Qm94T3JkaW5hbEdyb3Vw
LCB1bnNpZ25lZCBpbnQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJveE9yZGluYWxHcm91cD46OmNy
ZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0
Qm94T3JpZW50LCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm94T3JpZW50LCAmUmVuZGVyU3R5bGU6
OmJveE9yaWVudCwgRUJveE9yaWVudCwgJlJlbmRlclN0eWxlOjpzZXRCb3hPcmllbnQsIEVCb3hP
cmllbnQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJveE9yaWVudD46OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Qm94UGFjaywgQXBwbHlQ
cm9wZXJ0eURlZmF1bHQ8RUJveFBhY2ssICZSZW5kZXJTdHlsZTo6Ym94UGFjaywgRUJveFBhY2ss
ICZSZW5kZXJTdHlsZTo6c2V0Qm94UGFjaywgRUJveFBhY2ssICZSZW5kZXJTdHlsZTo6aW5pdGlh
bEJveFBhY2s+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdENvbG9yQ29ycmVjdGlvbiwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8Q29sb3JT
cGFjZSwgJlJlbmRlclN0eWxlOjpjb2xvclNwYWNlLCBDb2xvclNwYWNlLCAmUmVuZGVyU3R5bGU6
OnNldENvbG9yU3BhY2UsIENvbG9yU3BhY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbENvbG9yU3Bh
Y2U+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtbkF4aXMsIEFwcGx5UHJvcGVydHlEZWZhdWx0PENvbHVtbkF4aXMsICZSZW5k
ZXJTdHlsZTo6Y29sdW1uQXhpcywgQ29sdW1uQXhpcywgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5B
eGlzLCBDb2x1bW5BeGlzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxDb2x1bW5BeGlzPjo6Y3JlYXRl
SGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5CcmVha0FmdGVyLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFUGFnZUJyZWFrLCAmUmVuZGVyU3R5
bGU6OmNvbHVtbkJyZWFrQWZ0ZXIsIEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1u
QnJlYWtBZnRlciwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjppbml0aWFsUGFnZUJyZWFrPjo6
Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRDb2x1bW5CcmVha0JlZm9yZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBhZ2VCcmVhaywgJlJl
bmRlclN0eWxlOjpjb2x1bW5CcmVha0JlZm9yZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjpz
ZXRDb2x1bW5CcmVha0JlZm9yZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjppbml0aWFsUGFn
ZUJyZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5CcmVha0luc2lkZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBhZ2VC
cmVhaywgJlJlbmRlclN0eWxlOjpjb2x1bW5CcmVha0luc2lkZSwgRVBhZ2VCcmVhaywgJlJlbmRl
clN0eWxlOjpzZXRDb2x1bW5CcmVha0luc2lkZSwgRVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjpp
bml0aWFsUGFnZUJyZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5Db3VudCwgQXBwbHlQcm9wZXJ0eUF1dG88dW5zaWdu
ZWQgc2hvcnQsICZSZW5kZXJTdHlsZTo6Y29sdW1uQ291bnQsICZSZW5kZXJTdHlsZTo6c2V0Q29s
dW1uQ291bnQsICZSZW5kZXJTdHlsZTo6aGFzQXV0b0NvbHVtbkNvdW50LCAmUmVuZGVyU3R5bGU6
OnNldEhhc0F1dG9Db2x1bW5Db3VudD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uR2FwLCBBcHBseVByb3BlcnR5QXV0bzxm
bG9hdCwgJlJlbmRlclN0eWxlOjpjb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uR2Fw
LCAmUmVuZGVyU3R5bGU6Omhhc05vcm1hbENvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpzZXRIYXNO
b3JtYWxDb2x1bW5HYXAsIENvbXB1dGVMZW5ndGgsIENTU1ZhbHVlTm9ybWFsPjo6Y3JlYXRlSGFu
ZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5Q
cm9ncmVzc2lvbiwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8Q29sdW1uUHJvZ3Jlc3Npb24sICZSZW5k
ZXJTdHlsZTo6Y29sdW1uUHJvZ3Jlc3Npb24sIENvbHVtblByb2dyZXNzaW9uLCAmUmVuZGVyU3R5
bGU6OnNldENvbHVtblByb2dyZXNzaW9uLCBDb2x1bW5Qcm9ncmVzc2lvbiwgJlJlbmRlclN0eWxl
Ojppbml0aWFsQ29sdW1uUHJvZ3Jlc3Npb24+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvciwgQXBwbHlQcm9w
ZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQsICZSZW5kZXJTdHlsZTo6Y29sdW1uUnVsZUNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRW
aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcj46OmNyZWF0ZUhh
bmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
UnVsZVdpZHRoLCBBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDx1bnNpZ25lZCBzaG9ydCwgJlJl
bmRlclN0eWxlOjpjb2x1bW5SdWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdp
ZHRoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxDb2x1bW5SdWxlV2lkdGgsIE5vcm1hbERpc2FibGVk
LCBUaGlja25lc3NFbmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5TcGFuLCBBcHBseVByb3BlcnR5RGVmYXVsdDxD
b2x1bW5TcGFuLCAmUmVuZGVyU3R5bGU6OmNvbHVtblNwYW4sIENvbHVtblNwYW4sICZSZW5kZXJT
dHlsZTo6c2V0Q29sdW1uU3BhbiwgQ29sdW1uU3BhbiwgJlJlbmRlclN0eWxlOjppbml0aWFsQ29s
dW1uU3Bhbj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0Q29sdW1uUnVsZVN0eWxlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVy
U3R5bGUsICZSZW5kZXJTdHlsZTo6Y29sdW1uUnVsZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5k
ZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEJvcmRlclN0eWxlPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aCwgQXBwbHlQcm9wZXJ0eUF1dG88Zmxv
YXQsICZSZW5kZXJTdHlsZTo6Y29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uV2lk
dGgsICZSZW5kZXJTdHlsZTo6aGFzQXV0b0NvbHVtbldpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEhh
c0F1dG9Db2x1bW5XaWR0aCwgQ29tcHV0ZUxlbmd0aD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0jaWYg
RU5BQkxFKENVUlNPUl9WSVNJQklMSVRZKQotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdEN1cnNvclZpc2liaWxpdHksIEFwcGx5UHJvcGVydHlEZWZhdWx0PEN1cnNvclZp
c2liaWxpdHksICZSZW5kZXJTdHlsZTo6Y3Vyc29yVmlzaWJpbGl0eSwgQ3Vyc29yVmlzaWJpbGl0
eSwgJlJlbmRlclN0eWxlOjpzZXRDdXJzb3JWaXNpYmlsaXR5LCBDdXJzb3JWaXNpYmlsaXR5LCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxDdXJzb3JWaXNpYmlsaXR5Pjo6Y3JlYXRlSGFuZGxlcigpKTsK
LSNlbmRpZgotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFsaWduQ29u
dGVudCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUFsaWduQ29udGVudCwgJlJlbmRlclN0eWxlOjph
bGlnbkNvbnRlbnQsIEVBbGlnbkNvbnRlbnQsICZSZW5kZXJTdHlsZTo6c2V0QWxpZ25Db250ZW50
LCBFQWxpZ25Db250ZW50LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxBbGlnbkNvbnRlbnQ+OjpjcmVh
dGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEFs
aWduSXRlbXMsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVBbGlnbkl0ZW1zLCAmUmVuZGVyU3R5bGU6
OmFsaWduSXRlbXMsIEVBbGlnbkl0ZW1zLCAmUmVuZGVyU3R5bGU6OnNldEFsaWduSXRlbXMsIEVB
bGlnbkl0ZW1zLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxBbGlnbkl0ZW1zPjo6Y3JlYXRlSGFuZGxl
cigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRBbGlnblNlbGYs
IEFwcGx5UHJvcGVydHlEZWZhdWx0PEVBbGlnbkl0ZW1zLCAmUmVuZGVyU3R5bGU6OmFsaWduU2Vs
ZiwgRUFsaWduSXRlbXMsICZSZW5kZXJTdHlsZTo6c2V0QWxpZ25TZWxmLCBFQWxpZ25JdGVtcywg
JlJlbmRlclN0eWxlOjppbml0aWFsQWxpZ25TZWxmPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRGbGV4QmFzaXMsIEFwcGx5UHJvcGVy
dHlMZW5ndGg8JlJlbmRlclN0eWxlOjpmbGV4QmFzaXMsICZSZW5kZXJTdHlsZTo6c2V0RmxleEJh
c2lzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxGbGV4QmFzaXMsIEF1dG9FbmFibGVkPjo6Y3JlYXRl
SGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRGbGV4
RGlyZWN0aW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFRmxleERpcmVjdGlvbiwgJlJlbmRlclN0
eWxlOjpmbGV4RGlyZWN0aW9uLCBFRmxleERpcmVjdGlvbiwgJlJlbmRlclN0eWxlOjpzZXRGbGV4
RGlyZWN0aW9uLCBFRmxleERpcmVjdGlvbiwgJlJlbmRlclN0eWxlOjppbml0aWFsRmxleERpcmVj
dGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0RmxleEdyb3csIEFwcGx5UHJvcGVydHlEZWZhdWx0PGZsb2F0LCAmUmVuZGVyU3R5
bGU6OmZsZXhHcm93LCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRGbGV4R3JvdywgZmxvYXQsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEZsZXhHcm93Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRGbGV4U2hyaW5rLCBBcHBseVByb3BlcnR5
RGVmYXVsdDxmbG9hdCwgJlJlbmRlclN0eWxlOjpmbGV4U2hyaW5rLCBmbG9hdCwgJlJlbmRlclN0
eWxlOjpzZXRGbGV4U2hyaW5rLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsRmxleFNocmlu
az46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
V2Via2l0RmxleFdyYXAsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVGbGV4V3JhcCwgJlJlbmRlclN0
eWxlOjpmbGV4V3JhcCwgRUZsZXhXcmFwLCAmUmVuZGVyU3R5bGU6OnNldEZsZXhXcmFwLCBFRmxl
eFdyYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEZsZXhXcmFwPjo6Y3JlYXRlSGFuZGxlcigpKTsK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRHcmlkQXV0b0Zsb3csIEFw
cGx5UHJvcGVydHlEZWZhdWx0PEdyaWRBdXRvRmxvdywgJlJlbmRlclN0eWxlOjpncmlkQXV0b0Zs
b3csIEdyaWRBdXRvRmxvdywgJlJlbmRlclN0eWxlOjpzZXRHcmlkQXV0b0Zsb3csIEdyaWRBdXRv
RmxvdywgJlJlbmRlclN0eWxlOjppbml0aWFsR3JpZEF1dG9GbG93Pjo6Y3JlYXRlSGFuZGxlcigp
KTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRKdXN0aWZ5Q29udGVu
dCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RUp1c3RpZnlDb250ZW50LCAmUmVuZGVyU3R5bGU6Omp1
c3RpZnlDb250ZW50LCBFSnVzdGlmeUNvbnRlbnQsICZSZW5kZXJTdHlsZTo6c2V0SnVzdGlmeUNv
bnRlbnQsIEVKdXN0aWZ5Q29udGVudCwgJlJlbmRlclN0eWxlOjppbml0aWFsSnVzdGlmeUNvbnRl
bnQ+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0
eVdlYmtpdE9yZGVyLCBBcHBseVByb3BlcnR5RGVmYXVsdDxpbnQsICZSZW5kZXJTdHlsZTo6b3Jk
ZXIsIGludCwgJlJlbmRlclN0eWxlOjpzZXRPcmRlciwgaW50LCAmUmVuZGVyU3R5bGU6OmluaXRp
YWxPcmRlcj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0jaWYgRU5BQkxFKENTU19SRUdJT05TKQotICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdEZsb3dGcm9tLCBBcHBseVByb3Bl
cnR5U3RyaW5nPE1hcE5vbmVUb051bGwsICZSZW5kZXJTdHlsZTo6cmVnaW9uVGhyZWFkLCAmUmVu
ZGVyU3R5bGU6OnNldFJlZ2lvblRocmVhZCwgJlJlbmRlclN0eWxlOjppbml0aWFsUmVnaW9uVGhy
ZWFkPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlXZWJraXRGbG93SW50bywgQXBwbHlQcm9wZXJ0eVN0cmluZzxNYXBOb25lVG9OdWxsLCAmUmVu
ZGVyU3R5bGU6OmZsb3dUaHJlYWQsICZSZW5kZXJTdHlsZTo6c2V0Rmxvd1RocmVhZCwgJlJlbmRl
clN0eWxlOjppbml0aWFsRmxvd1RocmVhZD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0jZW5kaWYKLSAg
ICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRGb250S2VybmluZywgQXBwbHlQ
cm9wZXJ0eUZvbnQ8Rm9udERlc2NyaXB0aW9uOjpLZXJuaW5nLCAmRm9udERlc2NyaXB0aW9uOjpr
ZXJuaW5nLCAmRm9udERlc2NyaXB0aW9uOjpzZXRLZXJuaW5nLCBGb250RGVzY3JpcHRpb246OkF1
dG9LZXJuaW5nPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRGb250U21vb3RoaW5nLCBBcHBseVByb3BlcnR5Rm9udDxGb250U21vb3Ro
aW5nTW9kZSwgJkZvbnREZXNjcmlwdGlvbjo6Zm9udFNtb290aGluZywgJkZvbnREZXNjcmlwdGlv
bjo6c2V0Rm9udFNtb290aGluZywgQXV0b1Ntb290aGluZz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0g
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0Rm9udFZhcmlhbnRMaWdhdHVy
ZXMsIEFwcGx5UHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlczo6Y3JlYXRlSGFuZGxlcigpKTsK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRIaWdobGlnaHQsIEFwcGx5
UHJvcGVydHlTdHJpbmc8TWFwTm9uZVRvTnVsbCwgJlJlbmRlclN0eWxlOjpoaWdobGlnaHQsICZS
ZW5kZXJTdHlsZTo6c2V0SGlnaGxpZ2h0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxIaWdobGlnaHQ+
OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdl
YmtpdEh5cGhlbmF0ZUNoYXJhY3RlciwgQXBwbHlQcm9wZXJ0eVN0cmluZzxNYXBBdXRvVG9OdWxs
LCAmUmVuZGVyU3R5bGU6Omh5cGhlbmF0aW9uU3RyaW5nLCAmUmVuZGVyU3R5bGU6OnNldEh5cGhl
bmF0aW9uU3RyaW5nLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxIeXBoZW5hdGlvblN0cmluZz46OmNy
ZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0
SHlwaGVuYXRlTGltaXRBZnRlciwgQXBwbHlQcm9wZXJ0eU51bWJlcjxzaG9ydCwgJlJlbmRlclN0
eWxlOjpoeXBoZW5hdGlvbkxpbWl0QWZ0ZXIsICZSZW5kZXJTdHlsZTo6c2V0SHlwaGVuYXRpb25M
aW1pdEFmdGVyLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxIeXBoZW5hdGlvbkxpbWl0QWZ0ZXI+Ojpj
cmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtp
dEh5cGhlbmF0ZUxpbWl0QmVmb3JlLCBBcHBseVByb3BlcnR5TnVtYmVyPHNob3J0LCAmUmVuZGVy
U3R5bGU6Omh5cGhlbmF0aW9uTGltaXRCZWZvcmUsICZSZW5kZXJTdHlsZTo6c2V0SHlwaGVuYXRp
b25MaW1pdEJlZm9yZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSHlwaGVuYXRpb25MaW1pdEJlZm9y
ZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lcywgQXBwbHlQcm9wZXJ0eU51bWJlcjxzaG9ydCwgJlJl
bmRlclN0eWxlOjpoeXBoZW5hdGlvbkxpbWl0TGluZXMsICZSZW5kZXJTdHlsZTo6c2V0SHlwaGVu
YXRpb25MaW1pdExpbmVzLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxIeXBoZW5hdGlvbkxpbWl0TGlu
ZXMsIENTU1ZhbHVlTm9MaW1pdD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlI
YW5kbGVyKENTU1Byb3BlcnR5V2Via2l0SHlwaGVucywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8SHlw
aGVucywgJlJlbmRlclN0eWxlOjpoeXBoZW5zLCBIeXBoZW5zLCAmUmVuZGVyU3R5bGU6OnNldEh5
cGhlbnMsIEh5cGhlbnMsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEh5cGhlbnM+OjpjcmVhdGVIYW5k
bGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdExpbmVBbGln
biwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8TGluZUFsaWduLCAmUmVuZGVyU3R5bGU6OmxpbmVBbGln
biwgTGluZUFsaWduLCAmUmVuZGVyU3R5bGU6OnNldExpbmVBbGlnbiwgTGluZUFsaWduLCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxMaW5lQWxpZ24+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFBy
b3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVhaywgQXBwbHlQcm9wZXJ0eURl
ZmF1bHQ8TGluZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmxpbmVCcmVhaywgTGluZUJyZWFrLCAmUmVu
ZGVyU3R5bGU6OnNldExpbmVCcmVhaywgTGluZUJyZWFrLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxM
aW5lQnJlYWs+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdExpbmVDbGFtcCwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8Y29uc3QgTGluZUNs
YW1wVmFsdWUmLCAmUmVuZGVyU3R5bGU6OmxpbmVDbGFtcCwgTGluZUNsYW1wVmFsdWUsICZSZW5k
ZXJTdHlsZTo6c2V0TGluZUNsYW1wLCBMaW5lQ2xhbXBWYWx1ZSwgJlJlbmRlclN0eWxlOjppbml0
aWFsTGluZUNsYW1wPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRMaW5lR3JpZCwgQXBwbHlQcm9wZXJ0eVN0cmluZzxNYXBOb25lVG9O
dWxsLCAmUmVuZGVyU3R5bGU6OmxpbmVHcmlkLCAmUmVuZGVyU3R5bGU6OnNldExpbmVHcmlkLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lR3JpZD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TGluZVNuYXAsIEFwcGx5UHJvcGVydHlE
ZWZhdWx0PExpbmVTbmFwLCAmUmVuZGVyU3R5bGU6OmxpbmVTbmFwLCBMaW5lU25hcCwgJlJlbmRl
clN0eWxlOjpzZXRMaW5lU25hcCwgTGluZVNuYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVT
bmFwPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlXZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFTWFyZ2lu
Q29sbGFwc2UsICZSZW5kZXJTdHlsZTo6bWFyZ2luQWZ0ZXJDb2xsYXBzZSwgRU1hcmdpbkNvbGxh
cHNlLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkFmdGVyQ29sbGFwc2UsIEVNYXJnaW5Db2xsYXBz
ZSwgJlJlbmRlclN0eWxlOjppbml0aWFsTWFyZ2luQWZ0ZXJDb2xsYXBzZT46OmNyZWF0ZUhhbmRs
ZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQmVm
b3JlQ29sbGFwc2UsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVNYXJnaW5Db2xsYXBzZSwgJlJlbmRl
clN0eWxlOjptYXJnaW5CZWZvcmVDb2xsYXBzZSwgRU1hcmdpbkNvbGxhcHNlLCAmUmVuZGVyU3R5
bGU6OnNldE1hcmdpbkJlZm9yZUNvbGxhcHNlLCBFTWFyZ2luQ29sbGFwc2UsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbE1hcmdpbkJlZm9yZUNvbGxhcHNlPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Cb3R0b21Db2xsYXBzZSwg
Q1NTUHJvcGVydHlXZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlKTsKLSAgICBzZXRQcm9wZXJ0eUhh
bmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Ub3BDb2xsYXBzZSwgQ1NTUHJvcGVydHlXZWJr
aXRNYXJnaW5CZWZvcmVDb2xsYXBzZSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0TWFycXVlZURpcmVjdGlvbiwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RU1hcnF1ZWVE
aXJlY3Rpb24sICZSZW5kZXJTdHlsZTo6bWFycXVlZURpcmVjdGlvbiwgRU1hcnF1ZWVEaXJlY3Rp
b24sICZSZW5kZXJTdHlsZTo6c2V0TWFycXVlZURpcmVjdGlvbiwgRU1hcnF1ZWVEaXJlY3Rpb24s
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcnF1ZWVEaXJlY3Rpb24+OjpjcmVhdGVIYW5kbGVyKCkp
OwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVJbmNyZW1l
bnQsIEFwcGx5UHJvcGVydHlNYXJxdWVlSW5jcmVtZW50OjpjcmVhdGVIYW5kbGVyKCkpOwotICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBldGl0aW9uLCBB
cHBseVByb3BlcnR5TWFycXVlZVJlcGV0aXRpb246OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0
UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVNwZWVkLCBBcHBseVByb3Bl
cnR5TWFycXVlZVNwZWVkOjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxl
cihDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTdHlsZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RU1h
cnF1ZWVCZWhhdmlvciwgJlJlbmRlclN0eWxlOjptYXJxdWVlQmVoYXZpb3IsIEVNYXJxdWVlQmVo
YXZpb3IsICZSZW5kZXJTdHlsZTo6c2V0TWFycXVlZUJlaGF2aW9yLCBFTWFycXVlZUJlaGF2aW9y
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNYXJxdWVlQmVoYXZpb3I+OjpjcmVhdGVIYW5kbGVyKCkp
OwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSwg
QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlPEJvcmRlck1hc2ssIENTU1Byb3BlcnR5V2Via2l0TWFz
a0JveEltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tCb3hJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRN
YXNrQm94SW1hZ2U+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZU91dHNldCwgQXBwbHlQcm9wZXJ0eUJvcmRlcklt
YWdlTW9kaWZpZXI8Qm9yZGVyTWFzaywgT3V0c2V0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBz
ZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VSZXBlYXQsIEFw
cGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPEJvcmRlck1hc2ssIFJlcGVhdD46OmNyZWF0
ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFz
a0JveEltYWdlU2xpY2UsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPEJvcmRlck1h
c2ssIFNsaWNlPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NT
UHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2UsIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFn
ZVNvdXJjZTxDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxl
OjptYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlU291cmNl
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxNYXNrQm94SW1hZ2VTb3VyY2U+OjpjcmVhdGVIYW5kbGVy
KCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFn
ZVdpZHRoLCBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjxCb3JkZXJNYXNrLCBXaWR0
aD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
V2Via2l0TWFza0NsaXAsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxCb3gsIENTU1Byb3Bl
cnR5V2Via2l0TWFza0NsaXAsIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFz
a0xheWVycywgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmRmlsbExheWVyOjppc0NsaXBTZXQs
ICZGaWxsTGF5ZXI6OmNsaXAsICZGaWxsTGF5ZXI6OnNldENsaXAsICZGaWxsTGF5ZXI6OmNsZWFy
Q2xpcCwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxDbGlwLCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmls
bENsaXA+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGUsIEFwcGx5UHJvcGVydHlGaWxsTGF5ZXI8Q29tcG9zaXRl
T3BlcmF0b3IsIENTU1Byb3BlcnR5V2Via2l0TWFza0NvbXBvc2l0ZSwgTWFza0ZpbGxMYXllciwg
JlJlbmRlclN0eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMs
ICZGaWxsTGF5ZXI6OmlzQ29tcG9zaXRlU2V0LCAmRmlsbExheWVyOjpjb21wb3NpdGUsICZGaWxs
TGF5ZXI6OnNldENvbXBvc2l0ZSwgJkZpbGxMYXllcjo6Y2xlYXJDb21wb3NpdGUsICZGaWxsTGF5
ZXI6OmluaXRpYWxGaWxsQ29tcG9zaXRlLCAmQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0
ZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
V2Via2l0TWFza0ltYWdlLCBBcHBseVByb3BlcnR5RmlsbExheWVyPFN0eWxlSW1hZ2UqLCBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0eWxlOjphY2Nl
c3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZGaWxsTGF5ZXI6OmlzSW1h
Z2VTZXQsICZGaWxsTGF5ZXI6OmltYWdlLCAmRmlsbExheWVyOjpzZXRJbWFnZSwgJkZpbGxMYXll
cjo6Y2xlYXJJbWFnZSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxJbWFnZSwgJkNTU1RvU3R5bGVN
YXA6Om1hcEZpbGxJbWFnZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5k
bGVyKENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbiwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxF
RmlsbEJveCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luLCBNYXNrRmlsbExheWVyLCAmUmVu
ZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZp
bGxMYXllcjo6aXNPcmlnaW5TZXQsICZGaWxsTGF5ZXI6Om9yaWdpbiwgJkZpbGxMYXllcjo6c2V0
T3JpZ2luLCAmRmlsbExheWVyOjpjbGVhck9yaWdpbiwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxP
cmlnaW4sICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luPjo6Y3JlYXRlSGFuZGxlcigpKTsK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25YLCBB
cHBseVByb3BlcnR5RmlsbExheWVyPExlbmd0aCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRp
b25YLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5k
ZXJTdHlsZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6aXNYUG9zaXRpb25TZXQsICZGaWxsTGF5
ZXI6OnhQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WFBvc2l0aW9uLCAmRmlsbExheWVyOjpjbGVh
clhQb3NpdGlvbiwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxYUG9zaXRpb24sICZDU1NUb1N0eWxl
TWFwOjptYXBGaWxsWFBvc2l0aW9uPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZLCBBcHBseVByb3BlcnR5Rmls
bExheWVyPExlbmd0aCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZLCBNYXNrRmlsbExh
eWVyLCAmUmVuZGVyU3R5bGU6OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xh
eWVycywgJkZpbGxMYXllcjo6aXNZUG9zaXRpb25TZXQsICZGaWxsTGF5ZXI6OnlQb3NpdGlvbiwg
JkZpbGxMYXllcjo6c2V0WVBvc2l0aW9uLCAmRmlsbExheWVyOjpjbGVhcllQb3NpdGlvbiwgJkZp
bGxMYXllcjo6aW5pdGlhbEZpbGxZUG9zaXRpb24sICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsWVBv
c2l0aW9uPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRNYXNrUmVwZWF0WCwgQXBwbHlQcm9wZXJ0eUZpbGxMYXllcjxFRmlsbFJlcGVh
dCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WCwgTWFza0ZpbGxMYXllciwgJlJlbmRlclN0
eWxlOjphY2Nlc3NNYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZGaWxsTGF5
ZXI6OmlzUmVwZWF0WFNldCwgJkZpbGxMYXllcjo6cmVwZWF0WCwgJkZpbGxMYXllcjo6c2V0UmVw
ZWF0WCwgJkZpbGxMYXllcjo6Y2xlYXJSZXBlYXRYLCAmRmlsbExheWVyOjppbml0aWFsRmlsbFJl
cGVhdFgsICZDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WD46OmNyZWF0ZUhhbmRsZXIoKSk7
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFksIEFw
cGx5UHJvcGVydHlGaWxsTGF5ZXI8RUZpbGxSZXBlYXQsIENTU1Byb3BlcnR5V2Via2l0TWFza1Jl
cGVhdFksIE1hc2tGaWxsTGF5ZXIsICZSZW5kZXJTdHlsZTo6YWNjZXNzTWFza0xheWVycywgJlJl
bmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmRmlsbExheWVyOjppc1JlcGVhdFlTZXQsICZGaWxsTGF5
ZXI6OnJlcGVhdFksICZGaWxsTGF5ZXI6OnNldFJlcGVhdFksICZGaWxsTGF5ZXI6OmNsZWFyUmVw
ZWF0WSwgJkZpbGxMYXllcjo6aW5pdGlhbEZpbGxSZXBlYXRZLCAmQ1NTVG9TdHlsZU1hcDo6bWFw
RmlsbFJlcGVhdFk+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplLCBBcHBseVByb3BlcnR5RmlsbExheWVyPEZpbGxTaXpl
LCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplLCBNYXNrRmlsbExheWVyLCAmUmVuZGVyU3R5bGU6
OmFjY2Vzc01hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJkZpbGxMYXllcjo6
aXNTaXplU2V0LCAmRmlsbExheWVyOjpzaXplLCAmRmlsbExheWVyOjpzZXRTaXplLCAmRmlsbExh
eWVyOjpjbGVhclNpemUsICZGaWxsTGF5ZXI6OmluaXRpYWxGaWxsU2l6ZSwgJkNTU1RvU3R5bGVN
YXA6Om1hcEZpbGxTaXplPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRs
ZXIoQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RU5CU1BN
b2RlLCAmUmVuZGVyU3R5bGU6Om5ic3BNb2RlLCBFTkJTUE1vZGUsICZSZW5kZXJTdHlsZTo6c2V0
TkJTUE1vZGUsIEVOQlNQTW9kZSwgJlJlbmRlclN0eWxlOjppbml0aWFsTkJTUE1vZGU+OjpjcmVh
dGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFBl
cnNwZWN0aXZlT3JpZ2luLCBBcHBseVByb3BlcnR5RXhwYW5kaW5nPFN1cHByZXNzVmFsdWUsIENT
U1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmVPcmlnaW5YLCBDU1NQcm9wZXJ0eVdlYmtpdFBlcnNw
ZWN0aXZlT3JpZ2luWT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmVPcmlnaW5YLCBBcHBseVByb3BlcnR5TGVuZ3Ro
PCZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFBlcnNw
ZWN0aXZlT3JpZ2luWCwgJlJlbmRlclN0eWxlOjppbml0aWFsUGVyc3BlY3RpdmVPcmlnaW5YPjo6
Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJr
aXRQZXJzcGVjdGl2ZU9yaWdpblksIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpw
ZXJzcGVjdGl2ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0UGVyc3BlY3RpdmVPcmlnaW5ZLCAm
UmVuZGVyU3R5bGU6OmluaXRpYWxQZXJzcGVjdGl2ZU9yaWdpblk+OjpjcmVhdGVIYW5kbGVyKCkp
OwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFByaW50Q29sb3JBZGp1
c3QsIEFwcGx5UHJvcGVydHlEZWZhdWx0PFByaW50Q29sb3JBZGp1c3QsICZSZW5kZXJTdHlsZTo6
cHJpbnRDb2xvckFkanVzdCwgUHJpbnRDb2xvckFkanVzdCwgJlJlbmRlclN0eWxlOjpzZXRQcmlu
dENvbG9yQWRqdXN0LCBQcmludENvbG9yQWRqdXN0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxQcmlu
dENvbG9yQWRqdXN0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMp
Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtBZnRl
ciwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVBhZ2VCcmVhaywgJlJlbmRlclN0eWxlOjpyZWdpb25C
cmVha0FmdGVyLCBFUGFnZUJyZWFrLCAmUmVuZGVyU3R5bGU6OnNldFJlZ2lvbkJyZWFrQWZ0ZXIs
IEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6aW5pdGlhbFBhZ2VCcmVhaz46OmNyZWF0ZUhhbmRs
ZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJl
YWtCZWZvcmUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6
cmVnaW9uQnJlYWtCZWZvcmUsIEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6c2V0UmVnaW9uQnJl
YWtCZWZvcmUsIEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6aW5pdGlhbFBhZ2VCcmVhaz46OmNy
ZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0
UmVnaW9uQnJlYWtJbnNpZGUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVQYWdlQnJlYWssICZSZW5k
ZXJTdHlsZTo6cmVnaW9uQnJlYWtJbnNpZGUsIEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6c2V0
UmVnaW9uQnJlYWtJbnNpZGUsIEVQYWdlQnJlYWssICZSZW5kZXJTdHlsZTo6aW5pdGlhbFBhZ2VC
cmVhaz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0UmVnaW9uT3ZlcmZsb3csIEFwcGx5UHJvcGVydHlEZWZhdWx0PFJlZ2lvbk92ZXJm
bG93LCAmUmVuZGVyU3R5bGU6OnJlZ2lvbk92ZXJmbG93LCBSZWdpb25PdmVyZmxvdywgJlJlbmRl
clN0eWxlOjpzZXRSZWdpb25PdmVyZmxvdywgUmVnaW9uT3ZlcmZsb3csICZSZW5kZXJTdHlsZTo6
aW5pdGlhbFJlZ2lvbk92ZXJmbG93Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSNlbmRpZgotICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5nLCBBcHBseVByb3Bl
cnR5RGVmYXVsdDxPcmRlciwgJlJlbmRlclN0eWxlOjpydGxPcmRlcmluZywgT3JkZXIsICZSZW5k
ZXJTdHlsZTo6c2V0UlRMT3JkZXJpbmcsIE9yZGVyLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxSVExP
cmRlcmluZz46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1By
b3BlcnR5V2Via2l0UnVieVBvc2l0aW9uLCBBcHBseVByb3BlcnR5RGVmYXVsdDxSdWJ5UG9zaXRp
b24sICZSZW5kZXJTdHlsZTo6cnVieVBvc2l0aW9uLCBSdWJ5UG9zaXRpb24sICZSZW5kZXJTdHls
ZTo6c2V0UnVieVBvc2l0aW9uLCBSdWJ5UG9zaXRpb24sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFJ1
YnlQb3NpdGlvbj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENT
U1Byb3BlcnR5V2Via2l0VGV4dENvbWJpbmUsIEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHRDb21i
aW5lLCAmUmVuZGVyU3R5bGU6OnRleHRDb21iaW5lLCBUZXh0Q29tYmluZSwgJlJlbmRlclN0eWxl
OjpzZXRUZXh0Q29tYmluZSwgVGV4dENvbWJpbmUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRD
b21iaW5lPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJv
cGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xvciwgQXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJp
dEZyb21QYXJlbnQsICZSZW5kZXJTdHlsZTo6dGV4dEVtcGhhc2lzQ29sb3IsICZSZW5kZXJTdHls
ZTo6c2V0VGV4dEVtcGhhc2lzQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0
RW1waGFzaXNDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0g
ICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzUG9zaXRp
b24sIEFwcGx5UHJvcGVydHlEZWZhdWx0PFRleHRFbXBoYXNpc1Bvc2l0aW9uLCAmUmVuZGVyU3R5
bGU6OnRleHRFbXBoYXNpc1Bvc2l0aW9uLCBUZXh0RW1waGFzaXNQb3NpdGlvbiwgJlJlbmRlclN0
eWxlOjpzZXRUZXh0RW1waGFzaXNQb3NpdGlvbiwgVGV4dEVtcGhhc2lzUG9zaXRpb24sICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc1Bvc2l0aW9uPjo6Y3JlYXRlSGFuZGxlcigpKTsK
LSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNTdHls
ZSwgQXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxlOjpjcmVhdGVIYW5kbGVyKCkpOwotICAg
IHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsIEFwcGx5
UHJvcGVydHlDb2xvcjxOb0luaGVyaXRGcm9tUGFyZW50LCAmUmVuZGVyU3R5bGU6OnRleHRGaWxs
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRW
aXNpdGVkTGlua1RleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3I+OjpjcmVhdGVIYW5k
bGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTZWN1
cml0eSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVRleHRTZWN1cml0eSwgJlJlbmRlclN0eWxlOjp0
ZXh0U2VjdXJpdHksIEVUZXh0U2VjdXJpdHksICZSZW5kZXJTdHlsZTo6c2V0VGV4dFNlY3VyaXR5
LCBFVGV4dFNlY3VyaXR5LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0U2VjdXJpdHk+OjpjcmVh
dGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRTdHJva2VDb2xvciwgQXBwbHlQcm9wZXJ0eUNvbG9yPE5vSW5oZXJpdEZyb21QYXJlbnQsICZS
ZW5kZXJTdHlsZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRTdHJva2VD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRTdHJva2VDb2xvciwgJlJlbmRl
clN0eWxlOjpjb2xvcj46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVy
KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWCwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwm
UmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3Jt
T3JpZ2luWCwgJlJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNmb3JtT3JpZ2luWD46OmNyZWF0ZUhh
bmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VHJhbnNm
b3JtT3JpZ2luWSwgQXBwbHlQcm9wZXJ0eUxlbmd0aDwmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9y
aWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpp
bml0aWFsVHJhbnNmb3JtT3JpZ2luWT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVy
dHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWiwgQXBwbHlQcm9wZXJ0
eUNvbXB1dGVMZW5ndGg8ZmxvYXQsICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWiwgJlJl
bmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5aLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFu
c2Zvcm1PcmlnaW5aPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIo
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1TdHlsZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVRy
YW5zZm9ybVN0eWxlM0QsICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtU3R5bGUzRCwgRVRyYW5zZm9y
bVN0eWxlM0QsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtU3R5bGUzRCwgRVRyYW5zZm9ybVN0
eWxlM0QsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zZm9ybVN0eWxlM0Q+OjpjcmVhdGVIYW5k
bGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRp
b25EZWxheSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxkb3VibGUsICZBbmltYXRpb246OmRlbGF5
LCAmQW5pbWF0aW9uOjpzZXREZWxheSwgJkFuaW1hdGlvbjo6aXNEZWxheVNldCwgJkFuaW1hdGlv
bjo6Y2xlYXJEZWxheSwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkRlbGF5LCAmQ1NTVG9T
dHlsZU1hcDo6bWFwQW5pbWF0aW9uRGVsYXksICZSZW5kZXJTdHlsZTo6YWNjZXNzVHJhbnNpdGlv
bnMsICZSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNl
dFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiwgQXBw
bHlQcm9wZXJ0eUFuaW1hdGlvbjxkb3VibGUsICZBbmltYXRpb246OmR1cmF0aW9uLCAmQW5pbWF0
aW9uOjpzZXREdXJhdGlvbiwgJkFuaW1hdGlvbjo6aXNEdXJhdGlvblNldCwgJkFuaW1hdGlvbjo6
Y2xlYXJEdXJhdGlvbiwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkR1cmF0aW9uLCAmQ1NT
VG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRHVyYXRpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzVHJh
bnNpdGlvbnMsICZSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwot
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0
eSwgQXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjxDU1NQcm9wZXJ0eUlELCAmQW5pbWF0aW9uOjpwcm9w
ZXJ0eSwgJkFuaW1hdGlvbjo6c2V0UHJvcGVydHksICZBbmltYXRpb246OmlzUHJvcGVydHlTZXQs
ICZBbmltYXRpb246OmNsZWFyUHJvcGVydHksICZBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25Q
cm9wZXJ0eSwgJkNTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblByb3BlcnR5LCAmUmVuZGVyU3R5
bGU6OmFjY2Vzc1RyYW5zaXRpb25zLCAmUmVuZGVyU3R5bGU6OnRyYW5zaXRpb25zPjo6Y3JlYXRl
SGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uVGltaW5nRnVuY3Rpb24sIEFwcGx5UHJvcGVydHlBbmltYXRpb248Y29uc3QgUGFzc1Jl
ZlB0cjxUaW1pbmdGdW5jdGlvbj4sICZBbmltYXRpb246OnRpbWluZ0Z1bmN0aW9uLCAmQW5pbWF0
aW9uOjpzZXRUaW1pbmdGdW5jdGlvbiwgJkFuaW1hdGlvbjo6aXNUaW1pbmdGdW5jdGlvblNldCwg
JkFuaW1hdGlvbjo6Y2xlYXJUaW1pbmdGdW5jdGlvbiwgJkFuaW1hdGlvbjo6aW5pdGlhbEFuaW1h
dGlvblRpbWluZ0Z1bmN0aW9uLCAmQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uVGltaW5nRnVu
Y3Rpb24sICZSZW5kZXJTdHlsZTo6YWNjZXNzVHJhbnNpdGlvbnMsICZSZW5kZXJTdHlsZTo6dHJh
bnNpdGlvbnM+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdFVzZXJEcmFnLCBBcHBseVByb3BlcnR5RGVmYXVsdDxFVXNlckRyYWcsICZS
ZW5kZXJTdHlsZTo6dXNlckRyYWcsIEVVc2VyRHJhZywgJlJlbmRlclN0eWxlOjpzZXRVc2VyRHJh
ZywgRVVzZXJEcmFnLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxVc2VyRHJhZz46OmNyZWF0ZUhhbmRs
ZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlm
eSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVVzZXJNb2RpZnksICZSZW5kZXJTdHlsZTo6dXNlck1v
ZGlmeSwgRVVzZXJNb2RpZnksICZSZW5kZXJTdHlsZTo6c2V0VXNlck1vZGlmeSwgRVVzZXJNb2Rp
ZnksICZSZW5kZXJTdHlsZTo6aW5pdGlhbFVzZXJNb2RpZnk+OjpjcmVhdGVIYW5kbGVyKCkpOwot
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3QsIEFwcGx5
UHJvcGVydHlEZWZhdWx0PEVVc2VyU2VsZWN0LCAmUmVuZGVyU3R5bGU6OnVzZXJTZWxlY3QsIEVV
c2VyU2VsZWN0LCAmUmVuZGVyU3R5bGU6OnNldFVzZXJTZWxlY3QsIEVVc2VyU2VsZWN0LCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxVc2VyU2VsZWN0Pjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQ
cm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRDbGlwUGF0aCwgQXBwbHlQcm9wZXJ0eUNs
aXBQYXRoPCZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6c2V0Q2xpcFBhdGgs
ICZSZW5kZXJTdHlsZTo6aW5pdGlhbENsaXBQYXRoPjo6Y3JlYXRlSGFuZGxlcigpKTsKLQotI2lm
IEVOQUJMRShDU1NfRVhDTFVTSU9OUykKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlXZWJraXRXcmFwRmxvdywgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8V3JhcEZsb3csICZSZW5kZXJT
dHlsZTo6d3JhcEZsb3csIFdyYXBGbG93LCAmUmVuZGVyU3R5bGU6OnNldFdyYXBGbG93LCBXcmFw
RmxvdywgJlJlbmRlclN0eWxlOjppbml0aWFsV3JhcEZsb3c+OjpjcmVhdGVIYW5kbGVyKCkpOwot
ICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlTWFyZ2luLCBBcHBs
eVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6c2hhcGVNYXJnaW4sICZSZW5kZXJTdHlsZTo6
c2V0U2hhcGVNYXJnaW4sICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNoYXBlTWFyZ2luPjo6Y3JlYXRl
SGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXZWJraXRTaGFw
ZVBhZGRpbmcsIEFwcGx5UHJvcGVydHlMZW5ndGg8JlJlbmRlclN0eWxlOjpzaGFwZVBhZGRpbmcs
ICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVQYWRkaW5nLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFw
ZVBhZGRpbmc+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQ
cm9wZXJ0eVdlYmtpdFdyYXBUaHJvdWdoLCBBcHBseVByb3BlcnR5RGVmYXVsdDxXcmFwVGhyb3Vn
aCwgJlJlbmRlclN0eWxlOjp3cmFwVGhyb3VnaCwgV3JhcFRocm91Z2gsICZSZW5kZXJTdHlsZTo6
c2V0V3JhcFRocm91Z2gsIFdyYXBUaHJvdWdoLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxXcmFwVGhy
b3VnaD46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3Bl
cnR5V2Via2l0U2hhcGVJbnNpZGUsIEFwcGx5UHJvcGVydHlFeGNsdXNpb25TaGFwZTwmUmVuZGVy
U3R5bGU6OnNoYXBlSW5zaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW5zaWRlLCAmUmVuZGVy
U3R5bGU6OmluaXRpYWxTaGFwZUluc2lkZT46OmNyZWF0ZUhhbmRsZXIoKSk7Ci0gICAgc2V0UHJv
cGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRzaWRlLCBBcHBseVByb3BlcnR5
RXhjbHVzaW9uU2hhcGU8JlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6
c2V0U2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxTaGFwZU91dHNpZGU+OjpjcmVh
dGVIYW5kbGVyKCkpOwotI2VuZGlmCi0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5
V2hpdGVTcGFjZSwgQXBwbHlQcm9wZXJ0eURlZmF1bHQ8RVdoaXRlU3BhY2UsICZSZW5kZXJTdHls
ZTo6d2hpdGVTcGFjZSwgRVdoaXRlU3BhY2UsICZSZW5kZXJTdHlsZTo6c2V0V2hpdGVTcGFjZSwg
RVdoaXRlU3BhY2UsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFdoaXRlU3BhY2U+OjpjcmVhdGVIYW5k
bGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eVdpZG93cywgQXBwbHlQ
cm9wZXJ0eUF1dG88c2hvcnQsICZSZW5kZXJTdHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNl
dFdpZG93cywgJlJlbmRlclN0eWxlOjpoYXNBdXRvV2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldEhh
c0F1dG9XaWRvd3M+OjpjcmVhdGVIYW5kbGVyKCkpOwotICAgIHNldFByb3BlcnR5SGFuZGxlcihD
U1NQcm9wZXJ0eVdpZHRoLCBBcHBseVByb3BlcnR5TGVuZ3RoPCZSZW5kZXJTdHlsZTo6d2lkdGgs
ICZSZW5kZXJTdHlsZTo6c2V0V2lkdGgsICZSZW5kZXJTdHlsZTo6aW5pdGlhbFNpemUsIEF1dG9F
bmFibGVkLCBMZWdhY3lJbnRyaW5zaWNFbmFibGVkLCBJbnRyaW5zaWNFbmFibGVkLCBOb25lRGlz
YWJsZWQsIFVuZGVmaW5lZERpc2FibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlXb3JkQnJlYWssIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVX
b3JkQnJlYWssICZSZW5kZXJTdHlsZTo6d29yZEJyZWFrLCBFV29yZEJyZWFrLCAmUmVuZGVyU3R5
bGU6OnNldFdvcmRCcmVhaywgRVdvcmRCcmVhaywgJlJlbmRlclN0eWxlOjppbml0aWFsV29yZEJy
ZWFrPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVy
dHlXb3JkU3BhY2luZywgQXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg8aW50LCAmUmVuZGVyU3R5
bGU6OndvcmRTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldFdvcmRTcGFjaW5nLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxMZXR0ZXJXb3JkU3BhY2luZywgTm9ybWFsRW5hYmxlZCwgVGhpY2tuZXNzRGlz
YWJsZWQsIFNWR1pvb21FbmFibGVkPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICAvLyBVQXMgbXVz
dCB0cmVhdCAnd29yZC13cmFwJyBhcyBhbiBhbHRlcm5hdGUgbmFtZSBmb3IgdGhlICdvdmVyZmxv
dy13cmFwJyBwcm9wZXJ0eS4gU28gdXNpbmcgdGhlIHNhbWUgaGFuZGxlcnMuCi0gICAgc2V0UHJv
cGVydHlIYW5kbGVyKENTU1Byb3BlcnR5V29yZFdyYXAsIEFwcGx5UHJvcGVydHlEZWZhdWx0PEVP
dmVyZmxvd1dyYXAsICZSZW5kZXJTdHlsZTo6b3ZlcmZsb3dXcmFwLCBFT3ZlcmZsb3dXcmFwLCAm
UmVuZGVyU3R5bGU6OnNldE92ZXJmbG93V3JhcCwgRU92ZXJmbG93V3JhcCwgJlJlbmRlclN0eWxl
Ojppbml0aWFsT3ZlcmZsb3dXcmFwPjo6Y3JlYXRlSGFuZGxlcigpKTsKLSAgICBzZXRQcm9wZXJ0
eUhhbmRsZXIoQ1NTUHJvcGVydHlaSW5kZXgsIEFwcGx5UHJvcGVydHlBdXRvPGludCwgJlJlbmRl
clN0eWxlOjp6SW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0WkluZGV4LCAmUmVuZGVyU3R5bGU6Omhh
c0F1dG9aSW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0SGFzQXV0b1pJbmRleD46OmNyZWF0ZUhhbmRs
ZXIoKSk7Ci0gICAgc2V0UHJvcGVydHlIYW5kbGVyKENTU1Byb3BlcnR5Wm9vbSwgQXBwbHlQcm9w
ZXJ0eVpvb206OmNyZWF0ZUhhbmRsZXIoKSk7Ci19Ci0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVp
bGRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWFhN2RkLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFN0eWxlQnVpbGRlcl9oCi0jZGVm
aW5lIFN0eWxlQnVpbGRlcl9oCi0KLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5j
bHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBDU1NWYWx1ZTsKLWNsYXNzIFN0eWxlQnVpbGRlcjsKLWNsYXNzIFN0eWxlUmVzb2x2
ZXI7Ci0KLWNsYXNzIFByb3BlcnR5SGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lk
ICgqSW5oZXJpdEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKik7Ci0gICAg
dHlwZWRlZiB2b2lkICgqSW5pdGlhbEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKik7Ci0gICAgdHlwZWRlZiB2b2lkICgqQXBwbHlGdW5jdGlvbikoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciosIENTU1ZhbHVlKik7Ci0gICAgUHJvcGVydHlIYW5kbGVyKCkgOiBtX2lu
aGVyaXQoMCksIG1faW5pdGlhbCgwKSwgbV9hcHBseSgwKSB7IH0KLSAgICBQcm9wZXJ0eUhhbmRs
ZXIoSW5oZXJpdEZ1bmN0aW9uIGluaGVyaXQsIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsLCBBcHBs
eUZ1bmN0aW9uIGFwcGx5KSA6IG1faW5oZXJpdChpbmhlcml0KSwgbV9pbml0aWFsKGluaXRpYWwp
LCBtX2FwcGx5KGFwcGx5KSB7IH0KLSAgICB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgY29uc3QgeyBB
U1NFUlQobV9pbmhlcml0KTsgKCptX2luaGVyaXQpKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIp
OyB9Ci0gICAgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIGNvbnN0IHsgQVNTRVJUKG1faW5pdGlhbCk7
ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsgfQotICAgIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QgeyBBU1NFUlQobV9hcHBseSk7ICgqbV9hcHBs
eSkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOyB9Ci0gICAgYm9vbCBpc1ZhbGlk
KCkgY29uc3QgeyByZXR1cm4gbV9pbmhlcml0ICYmIG1faW5pdGlhbCAmJiBtX2FwcGx5OyB9Ci0g
ICAgSW5oZXJpdEZ1bmN0aW9uIGluaGVyaXRGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5o
ZXJpdDsgfQotICAgIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsRnVuY3Rpb24oKSB7IHJldHVybiBt
X2luaXRpYWw7IH0KLSAgICBBcHBseUZ1bmN0aW9uIGFwcGx5RnVuY3Rpb24oKSB7IHJldHVybiBt
X2FwcGx5OyB9Ci1wcml2YXRlOgotICAgIEluaGVyaXRGdW5jdGlvbiBtX2luaGVyaXQ7Ci0gICAg
SW5pdGlhbEZ1bmN0aW9uIG1faW5pdGlhbDsKLSAgICBBcHBseUZ1bmN0aW9uIG1fYXBwbHk7Ci19
OwotCi1jbGFzcyBTdHlsZUJ1aWxkZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0eWxl
QnVpbGRlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyBj
b25zdCBTdHlsZUJ1aWxkZXImIHNoYXJlZFN0eWxlQnVpbGRlcigpOwotCi0gICAgY29uc3QgUHJv
cGVydHlIYW5kbGVyJiBwcm9wZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29u
c3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWxpZChwcm9wZXJ0eSkpOwotICAgICAgICByZXR1
cm4gbV9wcm9wZXJ0eU1hcFtpbmRleChwcm9wZXJ0eSldOwotICAgIH0KLXByaXZhdGU6Ci0gICAg
U3R5bGVCdWlsZGVyKCk7Ci0gICAgc3RhdGljIGludCBpbmRleChDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5IC0gZmlyc3RDU1NQcm9wZXJ0eTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCB2YWxpZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQot
ICAgIHsKLSAgICAgICAgaW50IGkgPSBpbmRleChwcm9wZXJ0eSk7Ci0gICAgICAgIHJldHVybiBp
ID49IDAgJiYgaSA8IG51bUNTU1Byb3BlcnRpZXM7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRQcm9w
ZXJ0eUhhbmRsZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUHJvcGVydHlIYW5kbGVy
JiBoYW5kbGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZhbGlkKHByb3BlcnR5KSk7Ci0gICAg
ICAgIEFTU0VSVCghcHJvcGVydHlIYW5kbGVyKHByb3BlcnR5KS5pc1ZhbGlkKCkpOwotICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFpc0V4cGFuZGVkU2hvcnRoYW5kKHByb3BlcnR5KSwgIlNo
b3J0aGFuZCBwcm9wZXJ0eSBpZCA9ICVkIHNob3VsZG4ndCBiZSBpbnNlcnRlZCBpbnRvIFN0eWxl
QnVpbGRlci4gU2hvcnRoYW5kcyBzaG91bGQgYmUgZXhwYW5kZWQgYXQgcGFyc2luZyB0aW1lLiIs
IHByb3BlcnR5KTsKLSAgICAgICAgbV9wcm9wZXJ0eU1hcFtpbmRleChwcm9wZXJ0eSldID0gaGFu
ZGxlcjsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFByb3BlcnR5SGFuZGxlcihDU1NQcm9wZXJ0eUlE
IG5ld1Byb3BlcnR5LCBDU1NQcm9wZXJ0eUlEIGVxdWl2YWxlbnRQcm9wZXJ0eSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVCh2YWxpZChuZXdQcm9wZXJ0eSkpOwotICAgICAgICBBU1NFUlQodmFsaWQo
ZXF1aXZhbGVudFByb3BlcnR5KSk7Ci0gICAgICAgIEFTU0VSVCghcHJvcGVydHlIYW5kbGVyKG5l
d1Byb3BlcnR5KS5pc1ZhbGlkKCkpOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFpc0V4
cGFuZGVkU2hvcnRoYW5kKG5ld1Byb3BlcnR5KSwgIlNob3J0aGFuZCBwcm9wZXJ0eSBpZCA9ICVk
IHNob3VsZG4ndCBiZSBpbnNlcnRlZCBpbnRvIFN0eWxlQnVpbGRlci4gU2hvcnRoYW5kcyBzaG91
bGQgYmUgZXhwYW5kZWQgYXQgcGFyc2luZyB0aW1lLiIsIG5ld1Byb3BlcnR5KTsKLSAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghaXNFeHBhbmRlZFNob3J0aGFuZChlcXVpdmFsZW50UHJvcGVy
dHkpLCAiU2hvcnRoYW5kIHByb3BlcnR5IGlkID0gJWQgc2hvdWxkbid0IGJlIGluc2VydGVkIGlu
dG8gU3R5bGVCdWlsZGVyLiBTaG9ydGhhbmRzIHNob3VsZCBiZSBleHBhbmRlZCBhdCBwYXJzaW5n
IHRpbWUuIiwgZXF1aXZhbGVudFByb3BlcnR5KTsKLSAgICAgICAgbV9wcm9wZXJ0eU1hcFtpbmRl
eChuZXdQcm9wZXJ0eSldID0gbV9wcm9wZXJ0eU1hcFtpbmRleChlcXVpdmFsZW50UHJvcGVydHkp
XTsKLSAgICB9Ci0KLSAgICBQcm9wZXJ0eUhhbmRsZXIgbV9wcm9wZXJ0eU1hcFtudW1DU1NQcm9w
ZXJ0aWVzXTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFN0eWxlQnVpbGRlcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMWNjNTljZS4uMTE1ZmViNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgIkNvdW50
ZXIuaCIKICNpbmNsdWRlICJDb3VudGVyQ29udGVudC5oIgogI2luY2x1ZGUgIkN1cnNvckxpc3Qu
aCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3R5bGVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9y
LmgiCiAjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgpAQCAtMTEwLDcgKzExMSw2IEBACiAjaW5j
bHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlNoYWRvd1ZhbHVlLmgiCiAjaW5jbHVkZSAi
U2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlN0eWxlQnVpbGRlci5oIgogI2lu
Y2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdl
LmgiCiAjaW5jbHVkZSAiU3R5bGVQZW5kaW5nSW1hZ2UuaCIKQEAgLTI1OCw3ICsyNTgsNyBAQCBT
dHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBtYXRj
aEF1dGhvckFuZFVzZXJTdHlsZXMpCiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikK
ICAgICAsIG1fdmlld3BvcnRTdHlsZVJlc29sdmVyKFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlKGRvY3VtZW50KSkKICNlbmRpZgotICAgICwgbV9zdHlsZUJ1aWxkZXIoU3R5bGVCdWlsZGVy
OjpzaGFyZWRTdHlsZUJ1aWxkZXIoKSkKKyAgICAsIG1fZGVwcmVjYXRlZFN0eWxlQnVpbGRlcihE
ZXByZWNhdGVkU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIoKSkKICAgICAsIG1fc3R5
bGVNYXAodGhpcykKIHsKICAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxl
bWVudCgpOwpAQCAtMjI0OCw3ICsyMjQ4LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICNlbmRpZgogCiAgICAg
Ly8gQ2hlY2sgbG9va3VwIHRhYmxlIGZvciBpbXBsZW1lbnRhdGlvbnMgYW5kIHVzZSB3aGVuIGF2
YWlsYWJsZS4KLSAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSBtX3N0eWxlQnVp
bGRlci5wcm9wZXJ0eUhhbmRsZXIoaWQpOworICAgIGNvbnN0IFByb3BlcnR5SGFuZGxlciYgaGFu
ZGxlciA9IG1fZGVwcmVjYXRlZFN0eWxlQnVpbGRlci5wcm9wZXJ0eUhhbmRsZXIoaWQpOwogICAg
IGlmIChoYW5kbGVyLmlzVmFsaWQoKSkgewogICAgICAgICBpZiAoaXNJbmhlcml0KQogICAgICAg
ICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRWYWx1ZShpZCwgdGhpcyk7CkBAIC0yODkwLDEzICsy
ODkwLDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBU
aGVzZSBwcm9wZXJ0aWVzIGFyZSBhbGlhc2VkIGFuZCBTdHlsZUJ1aWxkZXIgYWxyZWFkeSBhcHBs
aWVkIHRoZSBwcm9wZXJ0eSBvbiB0aGUgcHJlZml4ZWQgdmVyc2lvbi4KKyAgICAvLyBUaGVzZSBw
cm9wZXJ0aWVzIGFyZSBhbGlhc2VkIGFuZCBEZXByZWNhdGVkU3R5bGVCdWlsZGVyIGFscmVhZHkg
YXBwbGllZCB0aGUgcHJvcGVydHkgb24gdGhlIHByZWZpeGVkIHZlcnNpb24uCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVRyYW5zaXRpb25EZWxheToKICAgICBjYXNlIENTU1Byb3BlcnR5VHJhbnNpdGlv
bkR1cmF0aW9uOgogICAgIGNhc2UgQ1NTUHJvcGVydHlUcmFuc2l0aW9uUHJvcGVydHk6CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjoKICAgICAgICAgcmV0dXJu
OwotICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIGltcGxlbWVudGVkIGluIHRoZSBTdHlsZUJ1
aWxkZXIgbG9va3VwIHRhYmxlLgorICAgIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIGltcGxlbWVu
dGVkIGluIHRoZSBEZXByZWNhdGVkU3R5bGVCdWlsZGVyIGxvb2t1cCB0YWJsZS4KICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQ6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDbGlwOgogICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6CkBAIC00
NTIzLDcgKzQ1MjMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1l
bW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAKICAgICBpbmZvLmFkZE1l
bWJlcihtX2ZvbnRTZWxlY3RvciwgImZvbnRTZWxlY3RvciIpOwogICAgIGluZm8uYWRkTWVtYmVy
KG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cywgInZpZXdwb3J0RGVwZW5kZW50
TWVkaWFRdWVyeVJlc3VsdHMiKTsKLSAgICBpbmZvLmlnbm9yZU1lbWJlcihtX3N0eWxlQnVpbGRl
cik7CisgICAgaW5mby5pZ25vcmVNZW1iZXIobV9kZXByZWNhdGVkU3R5bGVCdWlsZGVyKTsKICAg
ICBpbmZvLmFkZE1lbWJlcihtX2luc3BlY3RvckNTU09NV3JhcHBlcnMpOwogICAgIGluZm8uYWRk
TWVtYmVyKG1fc2NvcGVSZXNvbHZlciwgInNjb3BlUmVzb2x2ZXIiKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmgKaW5kZXggMTBhNDIxOC4uMjBhM2NmMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oCkBAIC03OCw2ICs3OCw3IEBAIGNsYXNzIEN1c3RvbUZpbHRlclBhcmFtZXRl
ckxpc3Q7CiBjbGFzcyBDdXN0b21GaWx0ZXJQcm9ncmFtOwogc3RydWN0IEN1c3RvbUZpbHRlclBy
b2dyYW1NaXhTZXR0aW5nczsKIGNsYXNzIERvY3VtZW50OworY2xhc3MgRGVwcmVjYXRlZFN0eWxl
QnVpbGRlcjsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEZyYW1lVmlldzsK
QEAgLTkzLDcgKzk0LDYgQEAgY2xhc3MgUnVsZVNldDsKIGNsYXNzIFNldHRpbmdzOwogY2xhc3Mg
U3RhdGljQ1NTUnVsZUxpc3Q7CiBjbGFzcyBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW1DYWNoZTsK
LWNsYXNzIFN0eWxlQnVpbGRlcjsKIGNsYXNzIFN0eWxlU2NvcGVSZXNvbHZlcjsKIGNsYXNzIFN0
eWxlSW1hZ2U7CiBjbGFzcyBTdHlsZUtleWZyYW1lOwpAQCAtNjMxLDcgKzYzMSw3IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPFZpZXdwb3J0U3R5bGVSZXNvbHZlcj4gbV92aWV3cG9ydFN0eWxlUmVz
b2x2ZXI7CiAjZW5kaWYKIAotICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgbV9zdHlsZUJ1aWxkZXI7
CisgICAgY29uc3QgRGVwcmVjYXRlZFN0eWxlQnVpbGRlciYgbV9kZXByZWNhdGVkU3R5bGVCdWls
ZGVyOwogCiAgICAgT3duUHRyPFN0eWxlU2NvcGVSZXNvbHZlcj4gbV9zY29wZVJlc29sdmVyOwog
ICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKQEAgLTY0Myw3ICs2NDMsNyBAQCBwcml2YXRl
OgogICAgIE93blB0cjxTdHlsZUN1c3RvbUZpbHRlclByb2dyYW1DYWNoZT4gbV9jdXN0b21GaWx0
ZXJQcm9ncmFtQ2FjaGU7CiAjZW5kaWYKIAotICAgIGZyaWVuZCBjbGFzcyBTdHlsZUJ1aWxkZXI7
CisgICAgZnJpZW5kIGNsYXNzIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI7CiAgICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBNYXRjaGVkUHJvcGVydGllcyYsIGNvbnN0IE1hdGNoZWRQcm9w
ZXJ0aWVzJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBNYXRjaGVkUHJvcGVy
dGllcyYsIGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBNYXRjaFJhbmdlcyYsIGNvbnN0IE1hdGNoUmFuZ2VzJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCmluZGV4IDE0YjYzNTIuLjcwNmQx
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCkBA
IC0xMjQsMTIgKzEyNCwxMiBAQCB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8UmVuZGVyU3R5bGU+LCA0
PiBQc2V1ZG9TdHlsZUNhY2hlOwogY2xhc3MgUmVuZGVyU3R5bGU6IHB1YmxpYyBSZWZDb3VudGVk
PFJlbmRlclN0eWxlPiB7CiAgICAgZnJpZW5kIGNsYXNzIENTU1Byb3BlcnR5QW5pbWF0aW9uOyAv
LyBVc2VkIGJ5IENTUyBhbmltYXRpb25zLiBXZSBjYW4ndCBhbGxvdyB0aGVtIHRvIGFuaW1hdGUg
YmFzZWQgb2ZmIHZpc2l0ZWQgY29sb3JzLgogICAgIGZyaWVuZCBjbGFzcyBBcHBseVN0eWxlQ29t
bWFuZDsgLy8gRWRpdGluZyBoYXMgdG8gb25seSByZXZlYWwgdW52aXNpdGVkIGluZm8uCisgICAg
ZnJpZW5kIGNsYXNzIERlcHJlY2F0ZWRTdHlsZUJ1aWxkZXI7IC8vIFNldHMgbWVtYmVycyBkaXJl
Y3RseS4KICAgICBmcmllbmQgY2xhc3MgRWRpdGluZ1N0eWxlOyAvLyBFZGl0aW5nIGhhcyB0byBv
bmx5IHJldmVhbCB1bnZpc2l0ZWQgaW5mby4KICAgICBmcmllbmQgY2xhc3MgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOyAvLyBJZ25vcmVzIHZpc2l0ZWQgc3R5bGVzLCBzbyBuZWVkcyB0byBi
ZSBhYmxlIHRvIHNlZSB1bnZpc2l0ZWQgaW5mby4KICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlX
cmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I7IC8vIFVzZWQgYnkgQ1NTIGFuaW1hdGlvbnMuIFdlIGNh
bid0IGFsbG93IHRoZW0gdG8gYW5pbWF0ZSBiYXNlZCBvZmYgdmlzaXRlZCBjb2xvcnMuCiAgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlclNWR1Jlc291cmNlOyAvLyBGSVhNRTogTmVlZHMgdG8gYWx0ZXIg
dGhlIHZpc2l0ZWQgc3RhdGUgYnkgaGFuZC4gU2hvdWxkIGNsZWFuIHRoZSBTVkcgY29kZSB1cCBh
bmQgbW92ZSBpdCBpbnRvIFJlbmRlclN0eWxlIHBlcmhhcHMuCiAgICAgZnJpZW5kIGNsYXNzIFJl
bmRlclRyZWVBc1RleHQ7IC8vIEZJWE1FOiBPbmx5IG5lZWRlZCBzbyB0aGUgcmVuZGVyIHRyZWUg
Y2FuIGtlZXAgbHlpbmcgYW5kIGR1bXAgdGhlIHdyb25nIGNvbG9ycy4gIFJlYmFzZWxpbmluZyB3
b3VsZCBhbGxvdyB0aGlzIHRvIGJlIHlhbmtlZC4KLSAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWls
ZGVyOyAvLyBTZXRzIG1lbWJlcnMgZGlyZWN0bHkuCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlUmVz
b2x2ZXI7IC8vIFNldHMgbWVtYmVycyBkaXJlY3RseS4KIHByb3RlY3RlZDoKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>