<?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>90580</bug_id>
          
          <creation_ts>2012-07-04 20:07:17 -0700</creation_ts>
          <short_desc>workers should be in Modules/workers</short_desc>
          <delta_ts>2012-07-04 21:39:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>79327</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Gyuyoung Kim">gyuyoung.kim</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>levin+threading</cc>
    
    <cc>ojan</cc>
    
    <cc>rakuco</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>663247</commentid>
    <comment_count>0</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-04 20:07:17 -0700</bug_when>
    <thetext>workers should be in Modules/workers as notifications.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663249</commentid>
    <comment_count>1</comment_count>
      <attachid>150863</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-04 20:10:29 -0700</bug_when>
    <thetext>Created attachment 150863
Patch for EFL, GTK and QT.

This patch is working in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663251</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-04 20:14:27 -0700</bug_when>
    <thetext>Attachment 150863 did not pass style-queue:

Source/WebCore/Modules/workers/SharedWorkerContext.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/WorkerLoaderProxy.h:47:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/WorkerContextProxy.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/WorkerContextProxy.h:51:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/workers/SharedWorker.cpp:85:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/Modules/workers/WorkerThread.cpp:72:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/workers/WorkerScriptLoader.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/Worker.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/workers/Worker.h:46:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/DedicatedWorkerContext.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/DedicatedWorkerContext.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/workers/WorkerMessagingProxy.h:45:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/WorkerMessagingProxy.h:50:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/workers/WorkerReportingProxy.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/WorkerReportingProxy.h:44:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/Modules/workers/DefaultSharedWorkerRepository.h:48:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/DefaultSharedWorkerRepository.h:59:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/workers/SharedWorkerThread.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/WorkerRunLoop.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/WorkerRunLoop.h:71:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/workers/WorkerRunLoop.h:73:  The parameter name &quot;task&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/workers/WorkerRunLoop.h:79:  The parameter name &quot;task&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/workers/WorkerRunLoop.cpp:35:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/Modules/workers/WorkerRunLoop.cpp:39:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/Modules/workers/WorkerRunLoop.cpp:160:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/Modules/workers/WorkerMessagingProxy.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/workers/SharedWorker.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/WorkerThread.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/WorkerScriptLoaderClient.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/DedicatedWorkerThread.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/WorkerLocation.h:40:  Code inside a namespace sFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
hould not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/WorkerContext.h:49:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/DefaultSharedWorkerRepository.cpp:77:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/Modules/workers/WorkerObjectProxy.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/workers/WorkerObjectProxy.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/SharedWorkerRepository.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/AbstractWorker.h:47:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/Modules/workers/AbstractWorker.h:66:  The parameter name &quot;ec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 38 in 52 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>663255</commentid>
    <comment_count>3</comment_count>
      <attachid>150863</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-04 20:18:47 -0700</bug_when>
    <thetext>Comment on attachment 150863
Patch for EFL, GTK and QT.

Attachment 150863 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13141038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663261</commentid>
    <comment_count>4</comment_count>
      <attachid>150863</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-04 20:30:08 -0700</bug_when>
    <thetext>Comment on attachment 150863
Patch for EFL, GTK and QT.

Attachment 150863 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13136896</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663273</commentid>
    <comment_count>5</comment_count>
      <attachid>150863</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-04 20:57:38 -0700</bug_when>
    <thetext>Comment on attachment 150863
Patch for EFL, GTK and QT.

As discussed on Feb 28 on webkit-dev, workers are a hub, not a spoke, in WebCore and therefore should not be moved into Modules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663286</commentid>
    <comment_count>6</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-04 21:18:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 150863 [details])
&gt; As discussed on Feb 28 on webkit-dev, workers are a hub, not a spoke, in WebCore and therefore should not be moved into Modules.

I&apos;m sorry. I should have checked it first. BTW, could you review Bug 82121?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663290</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-04 21:39:22 -0700</bug_when>
    <thetext>&gt; I should have checked it first.

It was a long thread.  :)  We should have put up a wiki page to summarize it.

&gt; BTW, could you review Bug 82121?

Will do.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150863</attachid>
            <date>2012-07-04 20:10:29 -0700</date>
            <delta_ts>2012-07-04 20:57:37 -0700</delta_ts>
            <desc>Patch for EFL, GTK and QT.</desc>
            <filename>patch-workers.patch</filename>
            <type>text/plain</type>
            <size>458806</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMzUwZWI2Zi4uMmZjYzczOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTgsNiArOCw3IEBAIFNFVChXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAg
ICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy93ZWJhdWRpbyIKICAgICAiJHtXRUJDT1JFX0RJUn0v
TW9kdWxlcy93ZWJkYXRhYmFzZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy93ZWJzb2Nr
ZXRzIgorICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL3dvcmtlcnMiCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L2FjY2Vzc2liaWxpdHkiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzIgogICAg
ICIke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9nZW5lcmljIgpAQCAtNjgsNyArNjksNiBAQCBTRVQo
V2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3N2Zy9ncmFw
aGljcy9maWx0ZXJzIgogICAgICIke1dFQkNPUkVfRElSfS9zdmcvcHJvcGVydGllcyIKICAgICAi
JHtXRUJDT1JFX0RJUn0vd2Vic29ja2V0cyIKLSAgICAiJHtXRUJDT1JFX0RJUn0vd29ya2VycyIK
ICAgICAiJHtXRUJDT1JFX0RJUn0veG1sIgogICAgICIke1dFQkNPUkVfRElSfS94bWwvcGFyc2Vy
IgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0iCkBAIC0xMDMsNiArMTAzLDcgQEAgU0VUKFdl
YkNvcmVfSURMX0lOQ0xVREVTCiAgICAgTW9kdWxlcy93ZWJhdWRpbwogICAgIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UKICAgICBNb2R1bGVzL3dlYnNvY2tldHMKKyAgICBNb2R1bGVzL3dvcmtlcnMKICAg
ICBiaW5kaW5ncy9nZW5lcmljCiAgICAgY3NzCiAgICAgZG9tCkBAIC0xMTUsNyArMTE2LDYgQEAg
U0VUKFdlYkNvcmVfSURMX0lOQ0xVREVTCiAgICAgcGx1Z2lucwogICAgIHN0b3JhZ2UKICAgICBz
dmcKLSAgICB3b3JrZXJzCiAgICAgeG1sCiApCiAKQEAgLTIyMzEsNDEgKzIyMzEsNDEgQEAgSUYg
KEVOQUJMRV9XT1JLRVJTKQogCiAgICAgICAgIHBhZ2UvV29ya2VyTmF2aWdhdG9yLmNwcAogCi0g
ICAgICAgIHdvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCi0gICAgICAgIHdvcmtlcnMvRGVkaWNh
dGVkV29ya2VyQ29udGV4dC5jcHAKLSAgICAgICAgd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJl
YWQuY3BwCi0gICAgICAgIHdvcmtlcnMvV29ya2VyLmNwcAotICAgICAgICB3b3JrZXJzL1dvcmtl
ckNvbnRleHQuY3BwCi0gICAgICAgIHdvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKLSAgICAg
ICAgd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHAKLSAgICAgICAgd29ya2Vycy9Xb3JrZXJNZXNz
YWdpbmdQcm94eS5jcHAKLSAgICAgICAgd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcAotICAgICAg
ICB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAKLSAgICAgICAgd29ya2Vycy9Xb3JrZXJU
aHJlYWQuY3BwCisgICAgICAgIE1vZHVsZXMvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAKKyAg
ICAgICAgTW9kdWxlcy93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwCisgICAgICAg
IE1vZHVsZXMvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwCisgICAgICAgIE1vZHVs
ZXMvd29ya2Vycy9Xb3JrZXIuY3BwCisgICAgICAgIE1vZHVsZXMvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmNwcAorICAgICAgICBNb2R1bGVzL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAKKyAg
ICAgICAgTW9kdWxlcy93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcAorICAgICAgICBNb2R1bGVz
L3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCisgICAgICAgIE1vZHVsZXMvd29ya2Vy
cy9Xb3JrZXJSdW5Mb29wLmNwcAorICAgICAgICBNb2R1bGVzL3dvcmtlcnMvV29ya2VyU2NyaXB0
TG9hZGVyLmNwcAorICAgICAgICBNb2R1bGVzL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAogICAg
ICkKIAogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfSURMX0ZJTEVTCiAgICAgICAgIHBhZ2UvV29y
a2VyTmF2aWdhdG9yLmlkbAogCi0gICAgICAgIHdvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRsCi0g
ICAgICAgIHdvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5pZGwKLSAgICAgICAgd29ya2Vy
cy9Xb3JrZXIuaWRsCi0gICAgICAgIHdvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKLSAgICAgICAg
d29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5pZGwKKyAgICAgICAgTW9kdWxlcy93b3JrZXJzL0Fic3Ry
YWN0V29ya2VyLmlkbAorICAgICAgICBNb2R1bGVzL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29u
dGV4dC5pZGwKKyAgICAgICAgTW9kdWxlcy93b3JrZXJzL1dvcmtlci5pZGwKKyAgICAgICAgTW9k
dWxlcy93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCisgICAgICAgIE1vZHVsZXMvd29ya2Vycy9X
b3JrZXJMb2NhdGlvbi5pZGwKICAgICApCiBFTkRJRiAoKQogCiBJRiAoRU5BQkxFX1NIQVJFRF9X
T1JLRVJTKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwotICAgICAgICB3b3JrZXJz
L0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcAotICAgICAgICB3b3JrZXJzL1NoYXJl
ZFdvcmtlci5jcHAKLSAgICAgICAgd29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0LmNwcAotICAg
ICAgICB3b3JrZXJzL1NoYXJlZFdvcmtlclRocmVhZC5jcHAKKyAgICAgICAgTW9kdWxlcy93b3Jr
ZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcAorICAgICAgICBNb2R1bGVzL3dv
cmtlcnMvU2hhcmVkV29ya2VyLmNwcAorICAgICAgICBNb2R1bGVzL3dvcmtlcnMvU2hhcmVkV29y
a2VyQ29udGV4dC5jcHAKKyAgICAgICAgTW9kdWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlclRocmVh
ZC5jcHAKICAgICApCiAKICAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0lETF9GSUxFUwotICAgICAg
ICB3b3JrZXJzL1NoYXJlZFdvcmtlci5pZGwKLSAgICAgICAgd29ya2Vycy9TaGFyZWRXb3JrZXJD
b250ZXh0LmlkbAorICAgICAgICBNb2R1bGVzL3dvcmtlcnMvU2hhcmVkV29ya2VyLmlkbAorICAg
ICAgICBNb2R1bGVzL3dvcmtlcnMvU2hhcmVkV29ya2VyQ29udGV4dC5pZGwKICAgICApCiBFTkRJ
RiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggM2RjZmViMy4uOTNmMDgxNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQ1NiBAQAorMjAxMi0wNy0wNCAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1
bmcuY29tPgorCisgICAgICAgIHdvcmtlcnMgc2hvdWxkIGJlIGluIE1vZHVsZXMvd29ya2Vycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA1ODAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgd29ya2Vy
cyBkaXJlY3RvcnkgaXMgbm93IHNlbGYtY29udGFpbmVkLiBUaGlzIHBhdGNoIG1vdmVzIGl0IHRv
IHRoZSBNb2R1bGVzIGRpcmVjdG9yeS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIENvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBEZXJpdmVkU291cmNlcy5wcmk6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL3dvcmtlcnMvQWJzdHJh
Y3RXb3JrZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFj
dFdvcmtlci5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3Ry
YWN0V29ya2VyOjpBYnN0cmFjdFdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdFdv
cmtlcjo6fkFic3RyYWN0V29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0V29ya2Vy
OjpvbkRlc3Ryb3lXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RXb3JrZXI6OmNv
bnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RXb3JrZXI6OnJlc29s
dmVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RXb3JrZXI6OmV2ZW50VGFyZ2V0RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpBYnN0cmFjdFdvcmtlcjo6ZW5zdXJlRXZlbnRUYXJnZXRE
YXRhKToKKyAgICAgICAgKiBNb2R1bGVzL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoQWJzdHJhY3RXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QWJzdHJhY3RXb3JrZXI6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6QWJzdHJhY3RXb3JrZXI6OmFzSUQpOgorICAgICAgICAoV2ViQ29yZTo6QWJzdHJhY3RXb3Jr
ZXI6OnJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFic3RyYWN0V29ya2VyOjpk
ZXJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKiBNb2R1bGVzL3dvcmtlcnMvQWJzdHJhY3RXb3Jr
ZXIuaWRsOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtl
ci5pZGwuCisgICAgICAgICogTW9kdWxlcy93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJD
b250ZXh0LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGVkaWNh
dGVkV29ya2VyQ29udGV4dDo6RGVkaWNhdGVkV29ya2VyQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpEZWRpY2F0ZWRXb3JrZXJDb250ZXh0OjppbnRlcmZhY2VOYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlZGljYXRlZFdvcmtlckNvbnRleHQ6OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlZGljYXRlZFdvcmtlckNvbnRleHQ6OmltcG9ydFNjcmlwdHMpOgorICAgICAgICAo
V2ViQ29yZTo6RGVkaWNhdGVkV29ya2VyQ29udGV4dDo6dGhyZWFkKToKKyAgICAgICAgKiBNb2R1
bGVzL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmguCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKERlZGljYXRlZFdvcmtlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVkaWNhdGVkV29ya2VyQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRl
ZGljYXRlZFdvcmtlckNvbnRleHQ6OmlzRGVkaWNhdGVkV29ya2VyQ29udGV4dCk6CisgICAgICAg
ICogTW9kdWxlcy93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaWRsOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmlkbC4KKyAg
ICAgICAgKiBNb2R1bGVzL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGVkaWNhdGVkV29ya2VyVGhy
ZWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGVkaWNhdGVkV29ya2VyVGhyZWFkOjpE
ZWRpY2F0ZWRXb3JrZXJUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RGVkaWNhdGVkV29ya2Vy
VGhyZWFkOjp+RGVkaWNhdGVkV29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZGlj
YXRlZFdvcmtlclRocmVhZDo6Y3JlYXRlV29ya2VyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ6OnJ1bkV2ZW50TG9vcCk6CisgICAgICAgICogTW9kdWxl
cy93b3JrZXJzL0RlZGljYXRlZFdvcmtlclRocmVhZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRGVkaWNhdGVkV29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkRl
ZGljYXRlZFdvcmtlclRocmVhZDo6d29ya2VyT2JqZWN0UHJveHkpOgorICAgICAgICAqIE1vZHVs
ZXMvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNw
cC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2hhcmVkV29ya2VyUHJveHkpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6c2V0VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZFdvcmtlclByb3h5Ojp0aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2Vy
UHJveHk6OmlzQ2xvc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6
dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5OjpuYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5Ojppc0luV29ya2VyRG9jdW1lbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5OjpTaGFyZWRXb3JrZXJQcm94eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6bWF0Y2hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6cG9zdFRhc2tUb0xvYWRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5Ojpncm91cFNldHRpbmdzKToK
KyAgICAgICAgKFdlYkNvcmU6OnBvc3RFeGNlcHRpb25UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZFdvcmtlclByb3h5Ojpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6cG9zdENvbnNvbGVNZXNzYWdlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFyZWRXb3JrZXJQcm94eTo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyUHJveHk6OnBvc3RNZXNzYWdlVG9QYWdlSW5zcGVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5Ojp1cGRhdGVJbnNwZWN0
b3JTdGF0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6d29y
a2VyQ29udGV4dENsb3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6
d29ya2VyQ29udGV4dERlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJQ
cm94eTo6YWRkVG9Xb3JrZXJEb2N1bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29y
a2VyUHJveHk6OmRvY3VtZW50RGV0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29y
a2VyUHJveHk6OmNsb3NlKToKKyAgICAgICAgKFNoYXJlZFdvcmtlckNvbm5lY3RUYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlckNvbm5lY3RUYXNrOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyQ29ubmVjdFRhc2s6OlNoYXJlZFdvcmtlckNvbm5lY3RU
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlckNvbm5lY3RUYXNrOjpwZXJmb3Jt
VGFzayk6CisgICAgICAgIChTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyOjpTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyOjpsb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclNjcmlwdExvYWRlcjo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclNjcmlwdExvYWRlcjo6bm90aWZ5
RmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRv
cnk6Omluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTaGFyZWRXb3JrZXJSZXBv
c2l0b3J5Ojp3b3JrZXJTY3JpcHRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29y
a2VyUmVwb3NpdG9yeTo6aXNBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29y
a2VyUmVwb3NpdG9yeTo6Y29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJS
ZXBvc2l0b3J5Ojpkb2N1bWVudERldGFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdv
cmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RGVm
YXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OnJlbW92ZVByb3h5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpkb2N1bWVudERl
dGFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5
Ojpjb25uZWN0VG9Xb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNoYXJlZFdvcmtl
clJlcG9zaXRvcnk6OmdldFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTaGFyZWRX
b3JrZXJSZXBvc2l0b3J5OjpEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeSk6CisgICAgICAg
IChXZWJDb3JlOjpEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6fkRlZmF1bHRTaGFyZWRX
b3JrZXJSZXBvc2l0b3J5KToKKyAgICAgICAgKiBNb2R1bGVzL3dvcmtlcnMvRGVmYXVsdFNoYXJl
ZFdvcmtlclJlcG9zaXRvcnkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkpOgorICAgICAgICAqIE1vZHVsZXMv
d29ya2Vycy9TaGFyZWRXb3JrZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29y
a2Vycy9TaGFyZWRXb3JrZXIuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRXb3JrZXI6OlNoYXJlZFdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFy
ZWRXb3JrZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXI6On5TaGFy
ZWRXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyOjppbnRlcmZhY2VOYW1l
KToKKyAgICAgICAgKiBNb2R1bGVzL3dvcmtlcnMvU2hhcmVkV29ya2VyLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlci5oLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChTaGFyZWRXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29y
a2VyOjpwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlcjo6dG9TaGFyZWRXb3Jr
ZXIpOgorICAgICAgICAqIE1vZHVsZXMvd29ya2Vycy9TaGFyZWRXb3JrZXIuaWRsOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXIuaWRsLgorICAgICAgICAq
IE1vZHVsZXMvd29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0LmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyQ29udGV4dC5jcHAuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbm5lY3RFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRXb3JrZXJDb250ZXh0OjpTaGFyZWRXb3JrZXJDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlckNvbnRleHQ6On5TaGFyZWRXb3JrZXJDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlckNvbnRleHQ6OmludGVyZmFjZU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkV29ya2VyQ29udGV4dDo6dGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlckNvbnRleHQ6OmxvZ0V4Y2VwdGlvblRvQ29uc29sZSk6
CisgICAgICAgICogTW9kdWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRleHQuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyQ29udGV4dC5oLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTaGFyZWRXb3JrZXJDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZFdvcmtlckNvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRXb3JrZXJDb250ZXh0Ojppc1NoYXJlZFdvcmtlckNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkV29ya2VyQ29udGV4dDo6bmFtZSk6CisgICAgICAgICogTW9kdWxlcy93
b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRleHQuaWRsOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvd29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dv
cmtlcnMvU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvd29ya2Vycy9TaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmguCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFNoYXJlZFdvcmtlclJlcG9zaXRvcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkV29ya2VyUmVwb3NpdG9yeTo6U2hhcmVkV29ya2VyUmVwb3NpdG9yeSk6CisgICAgICAgICog
TW9kdWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlclRocmVhZC5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlclRocmVhZC5jcHAuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclRocmVhZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclRocmVhZDo6U2hhcmVkV29ya2VyVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclRocmVhZDo6flNoYXJlZFdvcmtlclRocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJUaHJlYWQ6OmNyZWF0ZVdvcmtlckNv
bnRleHQpOgorICAgICAgICAqIE1vZHVsZXMvd29ya2Vycy9TaGFyZWRXb3JrZXJUaHJlYWQuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyVGhyZWFkLmgu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNoYXJlZFdvcmtlclRocmVhZCk6CisgICAg
ICAgICogTW9kdWxlcy93b3JrZXJzL1dvcmtlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlci5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6Oldvcmtlcjo6V29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6fldvcmtlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXI6OmludGVyZmFjZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjpwb3N0
TWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6OnRlcm1pbmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXI6OmNhblN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6aGFzUGVuZGluZ0FjdGl2aXR5KToK
KyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAg
KFdlYkNvcmU6Oldvcmtlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAqIE1vZHVsZXMvd29y
a2Vycy9Xb3JrZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
LmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdvcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXI6OnJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlcjo6
ZGVyZWZFdmVudFRhcmdldCk6CisgICAgICAgICogTW9kdWxlcy93b3JrZXJzL1dvcmtlci5pZGw6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5pZGwuCisgICAgICAg
ICogTW9kdWxlcy93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQ2xvc2VXb3JrZXJDb250ZXh0VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpDbG9z
ZVdvcmtlckNvbnRleHRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvc2VXb3Jr
ZXJDb250ZXh0VGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q2xvc2VXb3Jr
ZXJDb250ZXh0VGFzazo6aXNDbGVhbnVwVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0OjpXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6
On5Xb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6dmly
dHVhbFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojp2aXJ0dWFsQ29tcGxl
dGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6Y29tcGxldGVVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6dXNlckFnZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckNvbnRleHQ6OmRpc2FibGVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckNvbnRleHQ6OmxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6
OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6Om5hdmlnYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6cG9zdFRhc2spOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyQ29udGV4dDo6c2V0VGltZW91dCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0OjpjbGVhclRpbWVvdXQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6
Y2xlYXJJbnNwZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6c2V0SW50
ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6Y2xlYXJJbnRlcnZhbCk6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmVycm9yRXZlbnRUYXJnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dDo6bG9nRXhjZXB0aW9uVG9Db25zb2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmFkZE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyQ29udGV4dDo6YWRkTWVzc2FnZVRvV29ya2VyQ29uc29sZSk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJDb250ZXh0Ojppc0NvbnRleHRUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyQ29udGV4dDo6aXNKU0V4ZWN1dGlvbkZvcmJpZGRlbik6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJDb250ZXh0OjpldmVudFRhcmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyQ29udGV4dDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckNvbnRleHQ6Ok9ic2VydmVyOjpPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJDb250ZXh0OjpPYnNlcnZlcjo6fk9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
ckNvbnRleHQ6Ok9ic2VydmVyOjpzdG9wT2JzZXJ2aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckNvbnRleHQ6OnJlZ2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
Q29udGV4dDo6dW5yZWdpc3Rlck9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNv
bnRleHQ6Om5vdGlmeU9ic2VydmVyc09mU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0OjpldmVudFF1ZXVlKToKKyAgICAgICAgKiBNb2R1bGVzL3dvcmtlcnMvV29ya2VyQ29u
dGV4dC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0
LmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdvcmtlckNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6aXNXb3JrZXJDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckNvbnRleHQ6OmlzU2hhcmVkV29ya2VyQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojppc0RlZGljYXRlZFdvcmtlckNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
ckNvbnRleHQ6OnNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpjbGVh
clNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0Ojp0aHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6c2VsZik6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJDb250ZXh0Ojp3b3JrZXJJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6Om9wdGlvbmFsTmF2aWdhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlckNvbnRleHQ6Om9wdGlvbmFsTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyQ29udGV4dDo6aXNDbG9zaW5nKToKKyAgICAgICAgKE9ic2VydmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckNvbnRleHQ6OnJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6ZGVyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OnJlZkV2ZW50VGFyZ2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHQ6OmRlcmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAq
IE1vZHVsZXMvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwuCisgICAgICAgICogTW9kdWxlcy93b3Jr
ZXJzL1dvcmtlckNvbnRleHRQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V29ya2VyQ29udGV4dFByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94
eTo6fldvcmtlckNvbnRleHRQcm94eSk6CisgICAgICAgIChQYWdlSW5zcGVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94eTo6UGFnZUluc3BlY3Rvcjo6flBhZ2VJbnNw
ZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5Ojpjb25uZWN0VG9J
bnNwZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5OjpkaXNjb25u
ZWN0RnJvbUluc3BlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHk6
OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3IpOgorICAgICAgICAqIE1vZHVsZXMvd29ya2Vycy9Xb3Jr
ZXJFdmVudFF1ZXVlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyRXZlbnRRdWV1ZS5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlckV2ZW50UXVldWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJFdmVu
dFF1ZXVlOjpXb3JrZXJFdmVudFF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV2ZW50
UXVldWU6On5Xb3JrZXJFdmVudFF1ZXVlKToKKyAgICAgICAgKFdvcmtlckV2ZW50UXVldWU6OkV2
ZW50RGlzcGF0Y2hlclRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXZlbnRRdWV1ZTo6
RXZlbnREaXNwYXRjaGVyVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckV2
ZW50UXVldWU6OkV2ZW50RGlzcGF0Y2hlclRhc2s6On5FdmVudERpc3BhdGNoZXJUYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlckV2ZW50UXVldWU6OkV2ZW50RGlzcGF0Y2hlclRhc2s6OmRp
c3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXZlbnRRdWV1ZTo6RXZlbnRE
aXNwYXRjaGVyVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXZl
bnRRdWV1ZTo6RXZlbnREaXNwYXRjaGVyVGFzazo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlckV2ZW50UXVldWU6OkV2ZW50RGlzcGF0Y2hlclRhc2s6OkV2ZW50RGlzcGF0Y2hlclRh
c2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXZlbnRRdWV1ZTo6cmVtb3ZlRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlckV2ZW50UXVldWU6OmNhbmNlbEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckV2ZW50UXVldWU6OmNsb3NlKToKKyAgICAgICAgKiBNb2R1bGVzL3dvcmtl
cnMvV29ya2VyRXZlbnRRdWV1ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJFdmVudFF1ZXVlLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdvcmtl
ckV2ZW50UXVldWUpOgorICAgICAgICAqIE1vZHVsZXMvd29ya2Vycy9Xb3JrZXJMb2FkZXJQcm94
eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2FkZXJQcm94
eS5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXb3JrZXJMb2FkZXJQcm94eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eTo6fldvcmtlckxvYWRlclByb3h5KToK
KyAgICAgICAgKiBNb2R1bGVzL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHAuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckxvY2F0aW9uOjpocmVmKToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlckxvY2F0aW9uOjpwcm90b2NvbCk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJMb2NhdGlvbjo6aG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJMb2NhdGlv
bjo6aG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTG9jYXRpb246OnBvcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyTG9jYXRpb246OnBhdGhuYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckxvY2F0aW9uOjpzZWFyY2gpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
TG9jYXRpb246Omhhc2gpOgorICAgICAgICAqIE1vZHVsZXMvd29ya2Vycy9Xb3JrZXJMb2NhdGlv
bi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5o
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXb3JrZXJMb2NhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJMb2NhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckxvY2F0aW9uOjp1cmwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTG9jYXRpb246OnRv
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckxvY2F0aW9uOjpXb3JrZXJMb2NhdGlv
bik6CisgICAgICAgICogTW9kdWxlcy93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmlkbDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uaWRsLgorICAgICAg
ICAqIE1vZHVsZXMvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzazo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzazo6TWVzc2FnZVdvcmtlckNvbnRleHRU
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzazo6cGVyZm9y
bVRhc2spOgorICAgICAgICAoTWVzc2FnZVdvcmtlclRhc2spOgorICAgICAgICAoV2ViQ29yZTo6
TWVzc2FnZVdvcmtlclRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlV29y
a2VyVGFzazo6TWVzc2FnZVdvcmtlclRhc2spOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVdv
cmtlclRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdvcmtlckV4Y2VwdGlvblRhc2spOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyRXhjZXB0aW9uVGFzazo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckV4Y2VwdGlvblRhc2s6OldvcmtlckV4Y2VwdGlvblRhc2spOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyRXhjZXB0aW9uVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAg
ICAoV29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
Q29udGV4dERlc3Ryb3llZFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b250ZXh0RGVzdHJveWVkVGFzazo6V29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2spOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2s6OnBlcmZvcm1UYXNrKToKKyAg
ICAgICAgKFdvcmtlclRlcm1pbmF0ZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGVy
bWluYXRlVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRlcm1pbmF0ZVRh
c2s6OldvcmtlclRlcm1pbmF0ZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGVybWlu
YXRlVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBv
cnRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFz
azo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0
VGFzazo6V29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAo
UG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc3RN
ZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
c3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzazo6UG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JU
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzazo6
cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5OjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6Oldvcmtlck1lc3Nh
Z2luZ1Byb3h5KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojp+V29y
a2VyTWVzc2FnaW5nUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJv
eHk6OnN0YXJ0V29ya2VyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdp
bmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2Vy
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdFRh
c2tUb0xvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9z
dEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBvc3RDb25zb2xl
TWVzc2FnZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnBv
c3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
ck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJUaHJlYWRDcmVhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJPYmplY3REZXN0cm95ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6Ondvcmtlck9iamVjdERlc3Ryb3llZEludGVy
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbm5lY3RUb1dvcmtlckNvbnRleHRJbnNwZWN0b3JU
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojpjb25uZWN0VG9J
bnNwZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzY29ubmVjdEZyb21Xb3JrZXJDb250ZXh0
SW5zcGVjdG9yVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6
ZGlzY29ubmVjdEZyb21JbnNwZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0Y2hPbklu
c3BlY3RvckJhY2tlbmRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1By
b3h5OjpzZW5kTWVzc2FnZVRvSW5zcGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1l
c3NhZ2luZ1Byb3h5Ojp3b3JrZXJDb250ZXh0RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6
Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJDb250ZXh0Q2xvc2VkKToKKyAgICAgICAgKFdl
YkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJDb250ZXh0RGVzdHJveWVkSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnRlcm1pbmF0ZVdv
cmtlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnBv
c3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3Nh
Z2luZ1Byb3h5Ojp1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5OjpyZXBvcnRQZW5kaW5nQWN0
aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6OnJlcG9ydFBl
bmRpbmdBY3Rpdml0eUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2lu
Z1Byb3h5OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAqIE1vZHVsZXMvd29ya2Vycy9X
b3JrZXJNZXNzYWdpbmdQcm94eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
b3JrZXJNZXNzYWdpbmdQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQ
cm94eTo6YXNrZWRUb1Rlcm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdp
bmdQcm94eTo6d29ya2VyT2JqZWN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dvcmtlcnMvV29ya2Vy
T2JqZWN0UHJveHkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
T2JqZWN0UHJveHkuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV29ya2VyT2JqZWN0
UHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHk6OndvcmtlckNvbnRl
eHRDbG9zZWQpOgorICAgICAgICAqIE1vZHVsZXMvd29ya2Vycy9Xb3JrZXJSZXBvcnRpbmdQcm94
eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSZXBvcnRpbmdQ
cm94eS5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXb3JrZXJSZXBvcnRpbmdQcm94
eSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJSZXBvcnRpbmdQcm94eTo6fldvcmtlclJlcG9y
dGluZ1Byb3h5KToKKyAgICAgICAgKiBNb2R1bGVzL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXb3JrZXJTaGFyZWRUaW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJTaGFyZWRUaW1lcjo6V29ya2VyU2hhcmVkVGltZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyU2hhcmVkVGltZXI6OnNldEZpcmVkRnVuY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyU2hhcmVkVGltZXI6OnNldEZpcmVJbnRlcnZhbCk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJTaGFyZWRUaW1lcjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJTaGFyZWRUaW1lcjo6aXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2hh
cmVkVGltZXI6OmZpcmVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNoYXJlZFRpbWVy
OjpmaXJlKToKKyAgICAgICAgKE1vZGVQcmVkaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TW9k
ZVByZWRpY2F0ZTo6TW9kZVByZWRpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2RlUHJlZGlj
YXRlOjppc0RlZmF1bHRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vZGVQcmVkaWNhdGU6Om9w
ZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6V29ya2VyUnVuTG9v
cCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjp+V29ya2VyUnVuTG9vcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjpkZWZhdWx0TW9kZSk6CisgICAgICAgIChS
dW5Mb29wU2V0dXApOgorICAgICAgICAoV2ViQ29yZTo6UnVuTG9vcFNldHVwOjpSdW5Mb29wU2V0
dXApOgorICAgICAgICAoV2ViQ29yZTo6UnVuTG9vcFNldHVwOjp+UnVuTG9vcFNldHVwKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclJ1bkxvb3A6OnJ1bik6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJSdW5Mb29wOjpydW5Jbk1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9v
cDo6cnVuQ2xlYW51cFRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclJ1bkxvb3A6OnRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjpwb3N0VGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjpwb3N0VGFza0Zvck1vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6VGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlclJ1bkxvb3A6OlRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclJ1bkxvb3A6OlRhc2s6OlRhc2spOgorICAgICAgICAqIE1vZHVsZXMvd29ya2Vycy9X
b3JrZXJSdW5Mb29wLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
clJ1bkxvb3AuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV29ya2VyUnVuTG9vcCk6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjp0ZXJtaW5hdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclJ1bkxvb3A6OmNyZWF0ZVVuaXF1ZUlkKToKKyAgICAgICAgKFRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6VGFzazo6flRhc2spOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6VGFzazo6bW9kZSk6CisgICAgICAgICogTW9kdWxl
cy93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6V29ya2VyU2NyaXB0TG9hZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6fldvcmtlclNjcmlwdExv
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRTeW5jaHJv
bm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6bG9hZEFzeW5j
aHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6cmVzcG9u
c2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9hZGVyOjpjcmVhdGVSZXNv
dXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9hZGVyOjpkaWRS
ZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9hZGVyOjpk
aWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6OmRp
ZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9hZGVyOjpk
aWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6ZGlkRmFpbFJl
ZGlyZWN0Q2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9hZGVyOjpub3Rp
ZnlFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRMb2FkZXI6Om5vdGlmeUZp
bmlzaGVkKToKKyAgICAgICAgKiBNb2R1bGVzL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5o
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXb3JrZXJTY3JpcHRMb2FkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9hZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyU2NyaXB0TG9hZGVyOjpzY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyU2NyaXB0TG9hZGVyOjp1cmwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9h
ZGVyOjpmYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0TG9hZGVyOjppZGVu
dGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlcjo6c2V0VGFyZ2V0
VHlwZSk6CisgICAgICAgICogTW9kdWxlcy93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlckNsaWVu
dC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2Fk
ZXJDbGllbnQuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV29ya2VyU2NyaXB0TG9h
ZGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRlckNsaWVudDo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdExvYWRl
ckNsaWVudDo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0
TG9hZGVyQ2xpZW50Ojp+V29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50KToKKyAgICAgICAgKiBNb2R1
bGVzL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6dGhyZWFkQ291bnRNdXRleCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJl
YWQ6OndvcmtlclRocmVhZENvdW50KToKKyAgICAgICAgKFdvcmtlclRocmVhZFN0YXJ0dXBEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZFN0YXJ0dXBEYXRhOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkU3RhcnR1cERhdGE6OldvcmtlclRocmVhZFN0
YXJ0dXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6fldvcmtlclRocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
VGhyZWFkOjp3b3JrZXJUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjpy
dW5FdmVudExvb3ApOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjpncm91cFNldHRp
bmdzKToKKyAgICAgICAgKFdvcmtlclRocmVhZFNodXRkb3duRmluaXNoVGFzayk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJUaHJlYWRTaHV0ZG93bkZpbmlzaFRhc2s6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRTaHV0ZG93bkZpbmlzaFRhc2s6OnBlcmZvcm1UYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZFNodXRkb3duRmluaXNoVGFzazo6aXND
bGVhbnVwVGFzayk6CisgICAgICAgIChXb3JrZXJUaHJlYWRTaHV0ZG93blN0YXJ0VGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRTaHV0ZG93blN0YXJ0VGFzazo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZFNodXRkb3duU3RhcnRUYXNrOjpwZXJmb3Jt
VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRTaHV0ZG93blN0YXJ0VGFzazo6
aXNDbGVhbnVwVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OnN0b3ApOgor
ICAgICAgICAqIE1vZHVsZXMvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmguCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6
OnRocmVhZElEKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6cnVuTG9vcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlckxvYWRlclByb3h5KToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6d29ya2VyUmVwb3J0aW5nUHJveHkpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjpnZXROb3RpZmljYXRpb25DbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjpzZXROb3RpZmljYXRpb25DbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJDb250ZXh0KToKKyAgICAgICAgKiBUYXJn
ZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUucHJpOgorCiAyMDEyLTA3LTA0ICBMdWtlIE1hY3Bo
ZXJzb24gIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbnNwZWN0b3IgY3Jh
c2hlcyB3aGVuIHRyeWluZyB0byBpbnNwZWN0IGEgcGFnZSB3aXRoIENTUyB2YXJpYWJsZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLnByaSBiL1NvdXJjZS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLnByaQppbmRleCBlOTBiOTJkLi5jYjNiNTgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUv
RGVyaXZlZFNvdXJjZXMucHJpCkBAIC0xNzIsNiArMTcyLDEzIEBAIElETF9CSU5ESU5HUyArPSBc
CiAgICAgJCRQV0QvTW9kdWxlcy93ZWJzb2NrZXRzL0RPTVdpbmRvd1dlYlNvY2tldC5pZGwgXAog
ICAgICQkUFdEL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsIFwKICAgICAkJFBXRC9N
b2R1bGVzL3dlYnNvY2tldHMvV29ya2VyQ29udGV4dFdlYlNvY2tldC5pZGwgXAorICAgICQkUFdE
L01vZHVsZXMvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5pZGwgXAorICAgICQkUFdEL01vZHVsZXMv
d29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93
b3JrZXJzL1NoYXJlZFdvcmtlci5pZGwgXAorICAgICQkUFdEL01vZHVsZXMvd29ya2Vycy9TaGFy
ZWRXb3JrZXJDb250ZXh0LmlkbCBcCisgICAgJCRQV0QvTW9kdWxlcy93b3JrZXJzL1dvcmtlci5p
ZGwgXAorICAgICQkUFdEL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbCBcCisgICAg
JCRQV0QvTW9kdWxlcy93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmlkbCBcCiAgICAgJCRQV0QvY3Nz
L0NvdW50ZXIuaWRsIFwKICAgICAkJFBXRC9jc3MvQ1NTQ2hhcnNldFJ1bGUuaWRsIFwKICAgICAk
JFBXRC9jc3MvQ1NTRm9udEZhY2VSdWxlLmlkbCBcCkBAIC00NDEsMTMgKzQ0OCw2IEBAIElETF9C
SU5ESU5HUyArPSBcCiAgICAgJCRQV0Qvc3RvcmFnZS9TdG9yYWdlRXZlbnQuaWRsIFwKICAgICAk
JFBXRC90ZXN0aW5nL0ludGVybmFscy5pZGwgXAogICAgICQkUFdEL3Rlc3RpbmcvSW50ZXJuYWxT
ZXR0aW5ncy5pZGwgXAotICAgICQkUFdEL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRsIFwKLSAg
ICAkJFBXRC93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaWRsIFwKLSAgICAkJFBXRC93
b3JrZXJzL1NoYXJlZFdvcmtlci5pZGwgXAotICAgICQkUFdEL3dvcmtlcnMvU2hhcmVkV29ya2Vy
Q29udGV4dC5pZGwgXAotICAgICQkUFdEL3dvcmtlcnMvV29ya2VyLmlkbCBcCi0gICAgJCRQV0Qv
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbCBcCi0gICAgJCRQV0Qvd29ya2Vycy9Xb3JrZXJMb2Nh
dGlvbi5pZGwgXAogICAgICQkUFdEL3htbC9ET01QYXJzZXIuaWRsIFwKICAgICAkJFBXRC94bWwv
WE1MSHR0cFJlcXVlc3QuaWRsIFwKICAgICAkJFBXRC94bWwvWE1MSHR0cFJlcXVlc3RFeGNlcHRp
b24uaWRsIFwKQEAgLTcxNCw2ICs3MTQsNyBAQCBnZW5lcmF0ZUJpbmRpbmdzLmNvbW1hbmRzID0g
cGVybCAtSSQkUFdEL2JpbmRpbmdzL3NjcmlwdHMgJCRnZW5lcmF0ZUJpbmRpbmdzLnNjcgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9Nb2R1bGVzL3dlYmF1ZGlv
IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQV0QvTW9kdWxlcy93
ZWJkYXRhYmFzZSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNsdWRlICQkUFdE
L01vZHVsZXMvd2Vic29ja2V0cyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNs
dWRlICQkUFdEL01vZHVsZXMvd29ya2VycyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LS1pbmNsdWRlICQkUFdEL2RvbSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmNs
dWRlICQkUFdEL2ZpbGVhcGkgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVk
ZSAkJFBXRC9odG1sIFwKQEAgLTcyMiw3ICs3MjMsNiBAQCBnZW5lcmF0ZUJpbmRpbmdzLmNvbW1h
bmRzID0gcGVybCAtSSQkUFdEL2JpbmRpbmdzL3NjcmlwdHMgJCRnZW5lcmF0ZUJpbmRpbmdzLnNj
cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taW5jbHVkZSAkJFBXRC9zdG9yYWdlIFwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQV0QvY3NzIFwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgJCRQV0QvdGVzdGluZyBcCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLS1pbmNsdWRlICQkUFdEL3dvcmtlcnMgXAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0tb3V0cHV0RGlyICR7UU1BS0VfRlVOQ19GSUxFX09VVF9QQVRI
fSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1zdXBwbGVtZW50YWxEZXBlbmRlbmN5
RmlsZSAke1FNQUtFX0ZVTkNfRklMRV9PVVRfUEFUSH0vJCRTVVBQTEVNRU5UQUxfREVQRU5ERU5D
WV9GSUxFIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXByZXByb2Nlc3NvciBcIiQk
e1FNQUtFX01PQ30gLUVcIiAke1FNQUtFX0ZJTEVfTkFNRX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5k
ZXggZmIzMzljNy4uNDhiNWFlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE5LDYgKzE5LDcg
QEAgd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpbyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
IFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMgXAogCS1JJChz
cmNkaXIpL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkgXAogCS1JJChzcmNkaXIpL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9nZW5lcmljIFwKQEAgLTkyLDcgKzkzLDYgQEAgd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLUkk
KHNyY2RpcikvU291cmNlL1dlYkNvcmUvdGVzdGluZyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9qcyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0
cyBcCi0JLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvd29ya2VycyBcCiAJLUkkKHNyY2Rpcikv
U291cmNlL1dlYkNvcmUveG1sIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFy
c2VyIFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJDb3JlL2JpbmRpbmdzL2pzIFwKQEAgLTg3NSw2
ICs4NzUsNyBAQCBJRExfUEFUSCA6PSBcCiAgICAgJChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlv
IFwKICAgICAkKFdlYkNvcmUpL01vZHVsZXMvd2ViZGF0YWJhc2UgXAogICAgICQoV2ViQ29yZSkv
TW9kdWxlcy93ZWJzb2NrZXRzIFwKKyAgICAkKFdlYkNvcmUpL01vZHVsZXMvd29ya2VycyBcCiAg
ICAgJChXZWJDb3JlKS9iaW5kaW5ncy9qcyBcCiAgICAgJChXZWJDb3JlKS9jc3MgXAogICAgICQo
V2ViQ29yZSkvZG9tIFwKQEAgLTg5Miw3ICs4OTMsNiBAQCBJRExfUEFUSCA6PSBcCiAgICAgJChX
ZWJDb3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3N2ZyBcCiAgICAgJChXZWJDb3JlKS90
ZXN0aW5nIFwKLSAgICAkKFdlYkNvcmUpL3dvcmtlcnMgXAogICAgICQoV2ViQ29yZSkveG1sCiAK
IHZwYXRoICUuaWRsICQoSURMX1BBVEgpCkBAIC0xMDQzLDYgKzEwNDMsNyBAQCBFWFRSQV9ESVNU
ICs9IFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvLyouaWRsKSBcCiAJJChzaGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJkYXRhYmFzZS8qLmlkbCkgXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy8qLmlkbCkgXAorCSQoc2hlbGwgbHMgJChzcmNkaXIpL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy8qLmlkbCkgXAogCSQoc2hlbGwgbHMgJChzcmNk
aXIpL1NvdXJjZS9XZWJDb3JlL2Nzcy8qLmlkbCkgXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1Nv
dXJjZS9XZWJDb3JlL2RvbS8qLmlkbCkgXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvKi5pZGwpIFwKQEAgLTEwNTksNyArMTA2MCw2IEBAIEVYVFJBX0RJU1Qg
Kz0gXAogCSQoc2hlbGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvKi5pZGwp
IFwKIAkkKHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9zdmcvKi5pZGwpIFwKIAkk
KHNoZWxsIGxzICQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nLyouaWRsKSBcCi0JJChz
aGVsbCBscyAkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvd29ya2Vycy8qLmlkbCkgXAogCSQoc2hl
bGwgbHMgJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3htbC8qLmlkbCkgXAogCVNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmwgXAogCVNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLnkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KaW5kZXggZGU3YmNjNi4uNmJhNzJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CkBAIC03MTUsNiArNzE1LDEzIEBAIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAogCSQoV2ViQ29yZSkv
TW9kdWxlcy93ZWJhdWRpby9EeW5hbWljc0NvbXByZXNzb3JOb2RlLmlkbCBcCiAJJChXZWJDb3Jl
KS9Nb2R1bGVzL3dlYmF1ZGlvL0RPTVdpbmRvd1dlYkF1ZGlvLmlkbCBcCiAJJChXZWJDb3JlKS9N
b2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJOb2RlLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVz
L3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvd29ya2Vy
cy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dvcmtl
cnMvU2hhcmVkV29ya2VyLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL3dvcmtlcnMvU2hhcmVk
V29ya2VyQ29udGV4dC5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93b3JrZXJzL1dvcmtlci5p
ZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsIFwKKwkk
KFdlYkNvcmUpL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5pZGwgXAogCSQoV2ViQ29y
ZSkvY3NzL0NTU0NoYXJzZXRSdWxlLmlkbCBcCiAJJChXZWJDb3JlKS9jc3MvQ1NTRm9udEZhY2VS
dWxlLmlkbCBcCiAJJChXZWJDb3JlKS9jc3MvQ1NTSW1wb3J0UnVsZS5pZGwgXApAQCAtOTg1LDEz
ICs5OTIsNiBAQCBkb21fYmluZGluZ19pZGxzICs9IFwKIAkkKFdlYkNvcmUpL3N0b3JhZ2UvU3Rv
cmFnZUV2ZW50LmlkbCBcCiAJJChXZWJDb3JlKS90ZXN0aW5nL0ludGVybmFscy5pZGwgXAogCSQo
V2ViQ29yZSkvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbCBcCi0JJChXZWJDb3JlKS93b3Jr
ZXJzL0Fic3RyYWN0V29ya2VyLmlkbCBcCi0JJChXZWJDb3JlKS93b3JrZXJzL0RlZGljYXRlZFdv
cmtlckNvbnRleHQuaWRsIFwKLQkkKFdlYkNvcmUpL3dvcmtlcnMvU2hhcmVkV29ya2VyLmlkbCBc
Ci0JJChXZWJDb3JlKS93b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRleHQuaWRsIFwKLQkkKFdlYkNv
cmUpL3dvcmtlcnMvV29ya2VyLmlkbCBcCi0JJChXZWJDb3JlKS93b3JrZXJzL1dvcmtlckNvbnRl
eHQuaWRsIFwKLQkkKFdlYkNvcmUpL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uaWRsIFwKIAkkKFdl
YkNvcmUpL3htbC9ET01QYXJzZXIuaWRsIFwKIAkkKFdlYkNvcmUpL3htbC9YTUxIdHRwUmVxdWVz
dC5pZGwgXAogCSQoV2ViQ29yZSkveG1sL1hNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmlkbCBcCkBA
IC00NjEwLDQyICs0NjEwLDQyIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1pvb21FdmVudC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZl
bnQuaCBcCiAJU291cmNlL1dlYkNvcmUvV2ViQ29yZVByZWZpeC5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd29ya2Vycy9B
YnN0cmFjdFdvcmtlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtl
ckNvbnRleHQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNv
bnRleHQuaCBcCi0JU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlclRocmVhZC5oIFwK
LQlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9y
eS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRleHQuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRleHQuaCBcCi0JU291cmNl
L1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1NoYXJlZFdvcmtlci5oIFwKLQlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtl
clJlcG9zaXRvcnkuaCBcCi0JU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJUaHJl
YWQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlclRocmVhZC5oIFwK
LQlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwIFwKLQlTb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBcCi0JU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJDb250ZXh0UHJveHkuaCBcCi0JU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVu
dFF1ZXVlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmgg
XAotCVNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2FkZXJQ
cm94eS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5oIFwKLQlTb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oIFwKLQlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlck9iamVjdFByb3h5LmggXAotCVNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUmVwb3J0
aW5nUHJveHkuaCBcCi0JU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcCBc
Ci0JU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmggXAotCVNvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggXAotCVNvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJTY3JpcHRMb2FkZXIuaCBcCi0JU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJU
aHJlYWQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL0RlZGljYXRlZFdvcmtlclRocmVhZC5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJl
cG9zaXRvcnkuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvRGVmYXVsdFNo
YXJlZFdvcmtlclJlcG9zaXRvcnkuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJz
L1NoYXJlZFdvcmtlckNvbnRleHQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtl
cnMvU2hhcmVkV29ya2VyQ29udGV4dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtl
cnMvU2hhcmVkV29ya2VyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1No
YXJlZFdvcmtlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvU2hhcmVkV29y
a2VyUmVwb3NpdG9yeS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvU2hhcmVk
V29ya2VyVGhyZWFkLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1NoYXJl
ZFdvcmtlclRocmVhZC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJv
eHkuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dvcmtlcnMvV29ya2VyTG9hZGVyUHJveHkuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
b3JrZXJzL1dvcmtlckxvY2F0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vy
cy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29y
a2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dv
cmtlcnMvV29ya2VyT2JqZWN0UHJveHkuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3Jr
ZXJzL1dvcmtlclJlcG9ydGluZ1Byb3h5LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29y
a2Vycy9Xb3JrZXJSdW5Mb29wLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJz
L1dvcmtlclJ1bkxvb3AuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtl
clNjcmlwdExvYWRlckNsaWVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMv
V29ya2VyU2NyaXB0TG9hZGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJz
L1dvcmtlclNjcmlwdExvYWRlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMv
V29ya2VyVGhyZWFkLmNwcCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtl
clRocmVhZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5j
ZVBhcnNlcklubGluZU1ldGhvZHMuaCBcCiAJU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJr
dXBUb2tlbkJhc2UuaCBcCiAJU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9NYXJrdXBUb2tlbml6
ZXJCYXNlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL0Fi
c3RyYWN0V29ya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9BYnN0cmFj
dFdvcmtlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdjZjczZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9BYnN0cmFj
dFdvcmtlci5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIkFic3RyYWN0V29ya2VyLmgiCisKKyNpbmNsdWRl
ICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJFcnJvckV2ZW50LmgiCisjaW5j
bHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
QWJzdHJhY3RXb3JrZXI6OkFic3RyYWN0V29ya2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCisgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKK3sKK30KKworQWJz
dHJhY3RXb3JrZXI6On5BYnN0cmFjdFdvcmtlcigpCit7Cit9CisKK3ZvaWQgQWJzdHJhY3RXb3Jr
ZXI6Om9uRGVzdHJveVdvcmtlcigpCit7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWREZXN0cm95V29ya2VyKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYXNJRCgpKTsKK30KKwor
dm9pZCBBYnN0cmFjdFdvcmtlcjo6Y29udGV4dERlc3Ryb3llZCgpCit7CisgICAgb25EZXN0cm95
V29ya2VyKCk7CisgICAgQWN0aXZlRE9NT2JqZWN0Ojpjb250ZXh0RGVzdHJveWVkKCk7IAorfQor
CitLVVJMIEFic3RyYWN0V29ya2VyOjpyZXNvbHZlVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkgeworICAgICAgICBlYyA9
IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiBLVVJMKCk7CisgICAgfQorCisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgZHluYW1pYyBnbG9iYWwgc2NvcGUgKGJ1ZyAjMjc4ODcp
CisgICAgS1VSTCBzY3JpcHRVUkwgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmNvbXBsZXRl
VVJMKHVybCk7CisgICAgaWYgKCFzY3JpcHRVUkwuaXNWYWxpZCgpKSB7CisgICAgICAgIGVjID0g
U1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIEtVUkwoKTsKKyAgICB9CisKKyAgICBpZiAoIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChzY3Jp
cHRVUkwpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gS1VS
TCgpOworICAgIH0KKworICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmNvbnRlbnRT
ZWN1cml0eVBvbGljeSgpICYmICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmNvbnRlbnRTZWN1
cml0eVBvbGljeSgpLT5hbGxvd1NjcmlwdEZyb21Tb3VyY2Uoc2NyaXB0VVJMKSkgeworICAgICAg
ICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIEtVUkwoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc2NyaXB0VVJMOworfQorCitFdmVudFRhcmdldERhdGEqIEFic3RyYWN0V29ya2Vy
OjpldmVudFRhcmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9
CisKK0V2ZW50VGFyZ2V0RGF0YSogQWJzdHJhY3RXb3JrZXI6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0
YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmY0Y2M1MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaApAQCAtMCwwICsxLDgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBBYnN0cmFjdFdvcmtlcl9oCisjZGVmaW5lIEFic3RyYWN0V29ya2VyX2gKKworI2lmIEVOQUJM
RShXT1JLRVJTKQorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFdmVudFRh
cmdldC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bWljU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBLVVJM
OworICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKKyAgICBjbGFzcyBBYnN0cmFj
dFdvcmtlciA6IHB1YmxpYyBSZWZDb3VudGVkPEFic3RyYWN0V29ya2VyPiwgcHVibGljIEFjdGl2
ZURPTU9iamVjdCwgcHVibGljIEV2ZW50VGFyZ2V0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8v
IEV2ZW50VGFyZ2V0IEFQSXMKKyAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KKworICAgICAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKKworICAgICAgICB1c2luZyBSZWZDb3VudGVkPEFic3Ry
YWN0V29ya2VyPjo6cmVmOworICAgICAgICB1c2luZyBSZWZDb3VudGVkPEFic3RyYWN0V29ya2Vy
Pjo6ZGVyZWY7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKKyAg
ICAgICAgQWJzdHJhY3RXb3JrZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgICAgICB2
aXJ0dWFsIH5BYnN0cmFjdFdvcmtlcigpOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBhIFVSTCB0byBhbiBhYnNvbHV0ZSBVUkwgYW5k
IGNoZWNrcyB0aGUgcmVzdWx0IGZvciB2YWxpZGl0eS4KKyAgICAgICAgS1VSTCByZXNvbHZlVVJM
KGNvbnN0IFN0cmluZyYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAgIGludHB0cl90
IGFzSUQoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0aGlzKTsg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkg
eyByZWYoKTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVy
ZWYoKTsgfQorICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRh
KCk7CisgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERh
dGEoKTsKKyAgICAgICAgdm9pZCBvbkRlc3Ryb3lXb3JrZXIoKTsKKyAgICAgICAgCisgICAgICAg
IEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKyAgICB9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIEFi
c3RyYWN0V29ya2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vy
cy9BYnN0cmFjdFdvcmtlci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvQWJz
dHJhY3RXb3JrZXIuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOTBk
MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvQWJz
dHJhY3RXb3JrZXIuaWRsCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHRocmVhZHMgeworCisgICAgaW50
ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V09SS0VSUywKKyAgICAgICAgQWN0aXZlRE9N
T2JqZWN0LAorICAgICAgICBKU0N1c3RvbVRvSlNPYmplY3QsCisgICAgICAgIEV2ZW50VGFyZ2V0
CisgICAgXSBBYnN0cmFjdFdvcmtlciB7CisKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25lcnJvcjsKKworICAgICAgICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5n
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxp
c3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBib29s
ZWFuIHVzZUNhcHR1cmUpOworICAgICAgICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9N
U3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExp
c3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09w
dGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZl
bnQoaW4gRXZlbnQgZXZ0KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKKyAg
ICB9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvRGVk
aWNhdGVkV29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMv
RGVkaWNhdGVkV29ya2VyQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMjAyZTI5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcApAQCAtMCwwICsxLDkwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJEZWRpY2F0
ZWRXb3JrZXJDb250ZXh0LmgiCisKKyNpbmNsdWRlICJEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCIK
KyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKKyNpbmNs
dWRlICJXb3JrZXJPYmplY3RQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RlZGlj
YXRlZFdvcmtlckNvbnRleHQ6OkRlZGljYXRlZFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgRGVkaWNhdGVkV29ya2VyVGhyZWFkKiB0aHJlYWQs
IGNvbnN0IFN0cmluZyYgY29udGVudFNlY3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OkhlYWRlclR5cGUgY29udGVudFNlY3VyaXR5UG9saWN5VHlwZSkKKyAgICA6IFdvcmtlckNv
bnRleHQodXJsLCB1c2VyQWdlbnQsIHRocmVhZCwgY29udGVudFNlY3VyaXR5UG9saWN5LCBjb250
ZW50U2VjdXJpdHlQb2xpY3lUeXBlKQoreworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIERlZGlj
YXRlZFdvcmtlckNvbnRleHQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRGVkaWNhdGVkV29ya2VyQ29udGV4dDsKK30KKworLy8g
RklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gd2UgdXBkYXRlIHRoZSBPYmpDIGJpbmRpbmdzIChidWcg
IzI4Nzc0KS4KK3ZvaWQgRGVkaWNhdGVkV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBwb3J0LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRzOworICAgIGlm
IChwb3J0KQorICAgICAgICBwb3J0cy5hcHBlbmQocG9ydCk7CisgICAgcG9zdE1lc3NhZ2UobWVz
c2FnZSwgJnBvcnRzLCBlYyk7Cit9CisKK3ZvaWQgRGVkaWNhdGVkV29ya2VyQ29udGV4dDo6cG9z
dE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2UsIHN0YXRpY19jYXN0PE1l
c3NhZ2VQb3J0QXJyYXkqPigwKSwgZWMpOworfQorCit2b2lkIERlZGljYXRlZFdvcmtlckNvbnRl
eHQ6OnBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdl
LCBjb25zdCBNZXNzYWdlUG9ydEFycmF5KiBwb3J0cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgLy8gRGlzZW50YW5nbGUgdGhlIHBvcnQgaW4gcHJlcGFyYXRpb24gZm9yIHNlbmRpbmcgaXQg
dG8gdGhlIHJlbW90ZSBjb250ZXh0LgorICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJh
eT4gY2hhbm5lbHMgPSBNZXNzYWdlUG9ydDo6ZGlzZW50YW5nbGVQb3J0cyhwb3J0cywgZWMpOwor
ICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuOworICAgIHRocmVhZCgpLT53b3JrZXJPYmplY3RQ
cm94eSgpLnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QobWVzc2FnZSwgY2hhbm5lbHMucmVsZWFz
ZSgpKTsKK30KKwordm9pZCBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiB1cmxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBCYXNl
OjppbXBvcnRTY3JpcHRzKHVybHMsIGVjKTsKKyAgICB0aHJlYWQoKS0+d29ya2VyT2JqZWN0UHJv
eHkoKS5yZXBvcnRQZW5kaW5nQWN0aXZpdHkoaGFzUGVuZGluZ0FjdGl2aXR5KCkpOworfQorCitE
ZWRpY2F0ZWRXb3JrZXJUaHJlYWQqIERlZGljYXRlZFdvcmtlckNvbnRleHQ6OnRocmVhZCgpCit7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERlZGljYXRlZFdvcmtlclRocmVhZCo+KEJhc2U6OnRo
cmVhZCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdPUktFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvRGVk
aWNhdGVkV29ya2VyQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL0Rl
ZGljYXRlZFdvcmtlckNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iZTViZWZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3Jr
ZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZWRp
Y2F0ZWRXb3JrZXJDb250ZXh0X2gKKyNkZWZpbmUgRGVkaWNhdGVkV29ya2VyQ29udGV4dF9oCisK
KyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ7
CisKKyAgICBjbGFzcyBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0IDogcHVibGljIFdvcmtlckNvbnRl
eHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBXb3JrZXJDb250ZXh0IEJhc2U7Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlZGljYXRlZFdvcmtlckNvbnRleHQ+IGNyZWF0ZShj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBEZWRpY2F0ZWRXb3JrZXJU
aHJlYWQqIHRocmVhZCwgY29uc3QgU3RyaW5nJiBjb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRl
bnRTZWN1cml0eVBvbGljeTo6SGVhZGVyVHlwZSBjb250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlZGljYXRlZFdvcmtl
ckNvbnRleHQodXJsLCB1c2VyQWdlbnQsIHRocmVhZCwgY29udGVudFNlY3VyaXR5UG9saWN5LCBj
b250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKSk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
CisgICAgICAgIC8vIE92ZXJyaWRkZW4gdG8gYWxsb3cgdXMgdG8gY2hlY2sgb3VyIHBlbmRpbmcg
YWN0aXZpdHkgYWZ0ZXIgZXhlY3V0aW5nIGltcG9ydGVkIHNjcmlwdC4KKyAgICAgICAgdmlydHVh
bCB2b2lkIGltcG9ydFNjcmlwdHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHVybHMsIEV4Y2VwdGlv
bkNvZGUmKTsKKworICAgICAgICAvLyBFdmVudFRhcmdldAorICAgICAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworCisgICAgICAgIHZvaWQgcG9z
dE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCBjb25zdCBNZXNzYWdlUG9ydEFycmF5KiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAg
ICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSB1cGRhdGUgdGhlIE9iakMgYmluZGluZ3Mg
KGJ1ZyAjMjg3NzQpLgorICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiwgTWVzc2FnZVBvcnQqLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICAg
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihtZXNzYWdlKTsKKworICAgICAgICBE
ZWRpY2F0ZWRXb3JrZXJUaHJlYWQqIHRocmVhZCgpOworICAgIHByaXZhdGU6CisgICAgICAgIERl
ZGljYXRlZFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50
LCBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQqLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBv
bGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlKTsKKyAgICB9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlm
IC8vIERlZGljYXRlZFdvcmtlckNvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaWRsCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZWNmZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5pZGwKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK21vZHVsZSB0aHJlYWRzIHsKKworICAgIGludGVyZmFjZSBbCisg
ICAgICAgIENvbmRpdGlvbmFsPVdPUktFUlMsCisgICAgICAgIEV4dGVuZHNET01HbG9iYWxPYmpl
Y3QsCisgICAgICAgIElzV29ya2VyQ29udGV4dCwKKyAgICAgICAgSlNHZW5lcmF0ZVRvTmF0aXZl
T2JqZWN0LAorICAgICAgICBKU05vU3RhdGljVGFibGVzLAorICAgICAgICBPbWl0Q29uc3RydWN0
b3IKKyAgICBdIERlZGljYXRlZFdvcmtlckNvbnRleHQgOiBXb3JrZXJDb250ZXh0IHsKKworI2lm
ICFkZWZpbmVkKExBTkdVQUdFX0NQUCkgfHwgIUxBTkdVQUdFX0NQUAorI2lmIGRlZmluZWQoTEFO
R1VBR0VfSkFWQVNDUklQVCkgJiYgTEFOR1VBR0VfSkFWQVNDUklQVAorICAgICAgICBbQ3VzdG9t
XSB2b2lkIHBvc3RNZXNzYWdlKGluIGFueSBtZXNzYWdlLCBpbiBbT3B0aW9uYWxdIEFycmF5IG1l
c3NhZ2VQb3J0cykKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBb
Q3VzdG9tXSB2b2lkIHdlYmtpdFBvc3RNZXNzYWdlKGluIGFueSBtZXNzYWdlLCBpbiBbT3B0aW9u
YWxdIEFycmF5IHRyYW5zZmVyTGlzdCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24p
OworI2Vsc2UKKyAgICAgICAgLy8gVGhlcmUncyBubyBnb29kIHdheSB0byBleHBvc2UgYW4gYXJy
YXkgdmlhIHRoZSBPYmpDIGJpbmRpbmdzLCBzbyBmb3Igbm93IGp1c3QgYWxsb3cgcGFzc2luZyBp
biBhIHNpbmdsZSBwb3J0LgorICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGluIERPTVN0cmluZyBt
ZXNzYWdlLCBpbiBbT3B0aW9uYWxdIE1lc3NhZ2VQb3J0IG1lc3NhZ2VQb3J0KQorICAgICAgICAg
ICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisjZW5kaWYKKyNlbmRpZgorCisgICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubWVzc2FnZTsKKworICAgIH07CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJU
aHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL0RlZGljYXRlZFdvcmtl
clRocmVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4Y2U4Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9EZWRpY2F0
ZWRXb3JrZXJUaHJlYWQuY3BwCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIkRlZGljYXRlZFdvcmtlclRocmVhZC5o
IgorCisjaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtl
ck9iamVjdFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxEZWRp
Y2F0ZWRXb3JrZXJUaHJlYWQ+IERlZGljYXRlZFdvcmtlclRocmVhZDo6Y3JlYXRlKGNvbnN0IEtV
UkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IEdyb3VwU2V0dGlu
Z3MqIHNldHRpbmdzLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclByb3h5
JiB3b3JrZXJMb2FkZXJQcm94eSwgV29ya2VyT2JqZWN0UHJveHkmIHdvcmtlck9iamVjdFByb3h5
LCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRT
ZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlIGNvbnRlbnRT
ZWN1cml0eVBvbGljeVR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWRpY2F0ZWRX
b3JrZXJUaHJlYWQoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNldHRpbmdzLCBzb3VyY2VDb2RlLCB3
b3JrZXJMb2FkZXJQcm94eSwgd29ya2VyT2JqZWN0UHJveHksIHN0YXJ0TW9kZSwgY29udGVudFNl
Y3VyaXR5UG9saWN5LCBjb250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKSk7Cit9CisKK0RlZGljYXRl
ZFdvcmtlclRocmVhZDo6RGVkaWNhdGVkV29ya2VyVGhyZWFkKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IEdyb3VwU2V0dGluZ3MqIHNldHRpbmdzLCBjb25z
dCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclByb3h5JiB3b3JrZXJMb2FkZXJQcm94
eSwgV29ya2VyT2JqZWN0UHJveHkmIHdvcmtlck9iamVjdFByb3h5LCBXb3JrZXJUaHJlYWRTdGFy
dE1vZGUgc3RhcnRNb2RlLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5cGUp
CisgICAgOiBXb3JrZXJUaHJlYWQodXJsLCB1c2VyQWdlbnQsIHNldHRpbmdzLCBzb3VyY2VDb2Rl
LCB3b3JrZXJMb2FkZXJQcm94eSwgd29ya2VyT2JqZWN0UHJveHksIHN0YXJ0TW9kZSwgY29udGVu
dFNlY3VyaXR5UG9saWN5LCBjb250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKQorICAgICwgbV93b3Jr
ZXJPYmplY3RQcm94eSh3b3JrZXJPYmplY3RQcm94eSkKK3sKK30KKworRGVkaWNhdGVkV29ya2Vy
VGhyZWFkOjp+RGVkaWNhdGVkV29ya2VyVGhyZWFkKCkKK3sKK30KKworUGFzc1JlZlB0cjxXb3Jr
ZXJDb250ZXh0PiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ6OmNyZWF0ZVdvcmtlckNvbnRleHQoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBjb250
ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGVhZGVyVHlwZSBjb250
ZW50U2VjdXJpdHlQb2xpY3lUeXBlKQoreworICAgIHJldHVybiBEZWRpY2F0ZWRXb3JrZXJDb250
ZXh0OjpjcmVhdGUodXJsLCB1c2VyQWdlbnQsIHRoaXMsIGNvbnRlbnRTZWN1cml0eVBvbGljeSwg
Y29udGVudFNlY3VyaXR5UG9saWN5VHlwZSk7Cit9CisKK3ZvaWQgRGVkaWNhdGVkV29ya2VyVGhy
ZWFkOjpydW5FdmVudExvb3AoKQoreworICAgIC8vIE5vdGlmeSB0aGUgcGFyZW50IG9iamVjdCBv
ZiBvdXIgY3VycmVudCBhY3RpdmUgc3RhdGUgYmVmb3JlIGNhbGxpbmcgdGhlIHN1cGVyY2xhc3Mg
dG8gcnVuIHRoZSBldmVudCBsb29wLgorICAgIG1fd29ya2VyT2JqZWN0UHJveHkucmVwb3J0UGVu
ZGluZ0FjdGl2aXR5KHdvcmtlckNvbnRleHQoKS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpOworICAg
IFdvcmtlclRocmVhZDo6cnVuRXZlbnRMb29wKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93b3JrZXJzL0RlZGljYXRlZFdvcmtlclRocmVhZC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93b3JrZXJzL0RlZGljYXRlZFdvcmtlclRocmVhZC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZTRjODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyVGhyZWFkLmgKQEAgLTAsMCAr
MSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisjaWZuZGVmIERlZGljYXRlZFdvcmtlclRocmVhZF9oCisjZGVmaW5lIERlZGljYXRlZFdv
cmtlclRocmVhZF9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIkNvbnRlbnRT
ZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyAgICBjbGFzcyBXb3JrZXJPYmplY3RQcm94eTsKKworICAgIGNsYXNzIERl
ZGljYXRlZFdvcmtlclRocmVhZCA6IHB1YmxpYyBXb3JrZXJUaHJlYWQgeworICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVkaWNhdGVkV29ya2VyVGhyZWFkPiBjcmVhdGUo
Y29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgR3Jv
dXBTZXR0aW5ncyosIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkm
LCBXb3JrZXJPYmplY3RQcm94eSYsIFdvcmtlclRocmVhZFN0YXJ0TW9kZSwgY29uc3QgU3RyaW5n
JiBjb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGVhZGVyVHlw
ZSk7CisgICAgICAgIFdvcmtlck9iamVjdFByb3h5JiB3b3JrZXJPYmplY3RQcm94eSgpIGNvbnN0
IHsgcmV0dXJuIG1fd29ya2VyT2JqZWN0UHJveHk7IH0KKyAgICAgICAgfkRlZGljYXRlZFdvcmtl
clRocmVhZCgpOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
V29ya2VyQ29udGV4dD4gY3JlYXRlV29ya2VyQ29udGV4dChjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgY29udGVudFNlY3VyaXR5UG9saWN5LCBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcnVu
RXZlbnRMb29wKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBEZWRpY2F0ZWRXb3JrZXJUaHJl
YWQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBHcm91cFNldHRp
bmdzKiwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJMb2FkZXJQcm94eSYsIFdvcmtl
ck9iamVjdFByb3h5JiwgV29ya2VyVGhyZWFkU3RhcnRNb2RlLCBjb25zdCBTdHJpbmcmIGNvbnRl
bnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlKTsKKwor
ICAgICAgICBXb3JrZXJPYmplY3RQcm94eSYgbV93b3JrZXJPYmplY3RQcm94eTsKKyAgICB9Owor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNl
bmRpZiAvLyBEZWRpY2F0ZWRXb3JrZXJUaHJlYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9y
eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhOGEwMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9EZWZhdWx0U2hhcmVk
V29ya2VyUmVwb3NpdG9yeS5jcHAKQEAgLTAsMCArMSw0NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisKKyNpbmNsdWRlICJEZWZhdWx0U2hhcmVk
V29ya2VyUmVwb3NpdG9yeS5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5j
bHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgi
CisjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCisjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbkhhc2guaCIK
KyNpbmNsdWRlICJTaGFyZWRXb3JrZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRXb3JrZXJDb250ZXh0
LmgiCisjaW5jbHVkZSAiU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIlNoYXJl
ZFdvcmtlclRocmVhZC5oIgorI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCisjaW5jbHVk
ZSAiV29ya2VyUmVwb3J0aW5nUHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJTY3JpcHRMb2FkZXIu
aCIKKyNpbmNsdWRlICJXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBTaGFyZWRXb3JrZXJQcm94eSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxTaGFyZWRXb3JrZXJQcm94eT4sIHB1YmxpYyBXb3JrZXJMb2FkZXJQcm94eSwgcHVibGlj
IFdvcmtlclJlcG9ydGluZ1Byb3h5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
aGFyZWRXb3JrZXJQcm94eT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYg
dXJsLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4pIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTaGFyZWRXb3JrZXJQcm94eShuYW1lLCB1cmwsIG9yaWdpbikpOyB9CisKKyAgICB2b2lk
IHNldFRocmVhZChQYXNzUmVmUHRyPFNoYXJlZFdvcmtlclRocmVhZD4gdGhyZWFkKSB7IG1fdGhy
ZWFkID0gdGhyZWFkOyB9CisgICAgU2hhcmVkV29ya2VyVGhyZWFkKiB0aHJlYWQoKSB7IHJldHVy
biBtX3RocmVhZC5nZXQoKTsgfQorICAgIGJvb2wgaXNDbG9zaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9jbG9zaW5nOyB9CisgICAgS1VSTCB1cmwoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gRG9u
J3QgdXNlIG1fdXJsLmNvcHkoKSBiZWNhdXNlIGl0IGlzbid0IGEgdGhyZWFkc2FmZSBtZXRob2Qu
CisgICAgICAgIHJldHVybiBLVVJMKFBhcnNlZFVSTFN0cmluZywgbV91cmwuc3RyaW5nKCkuaXNv
bGF0ZWRDb3B5KCkpOworICAgIH0KKworICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9uYW1lLmlzb2xhdGVkQ29weSgpOyB9CisgICAgYm9vbCBtYXRjaGVzKGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luLCBjb25zdCBLVVJMJiB1cmxU
b01hdGNoKSBjb25zdDsKKworICAgIC8vIFdvcmtlckxvYWRlclByb3h5CisgICAgdmlydHVhbCB2
b2lkIHBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPik7CisgICAgdmlydHVhbCBib29sIHBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBjb25zdCBTdHJpbmcmKTsK
KworICAgIC8vIFdvcmtlclJlcG9ydGluZ1Byb3h5CisgICAgdmlydHVhbCB2b2lkIHBvc3RFeGNl
cHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVO
dW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdENv
bnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1l
c3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwpOworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgdmlydHVhbCB2
b2lkIHBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZShjb25zdCBTdHJpbmcmKTsKKyNlbmRp
ZgorICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCk7CisgICAgdmlydHVhbCB2
b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKKworICAgIC8vIFVwZGF0ZXMgdGhlIGxpc3Qg
b2YgdGhlIHdvcmtlcidzIGRvY3VtZW50cywgcGVyIHNlY3Rpb24gNC41IG9mIHRoZSBXZWJXb3Jr
ZXJzIHNwZWMuCisgICAgdm9pZCBhZGRUb1dvcmtlckRvY3VtZW50cyhTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7CisKKyAgICBib29sIGlzSW5Xb3JrZXJEb2N1bWVudHMoRG9jdW1lbnQqIGRvY3Vt
ZW50KSB7IHJldHVybiBtX3dvcmtlckRvY3VtZW50cy5jb250YWlucyhkb2N1bWVudCk7IH0KKwor
ICAgIC8vIFJlbW92ZXMgYSBkZXRhY2hlZCBkb2N1bWVudCBmcm9tIHRoZSBsaXN0IG9mIHdvcmtl
cidzIGRvY3VtZW50cy4gTWF5IHNldCB0aGUgY2xvc2luZyBmbGFnIGlmIHRoaXMgaXMgdGhlIGxh
c3QgZG9jdW1lbnQgaW4gdGhlIGxpc3QuCisgICAgdm9pZCBkb2N1bWVudERldGFjaGVkKERvY3Vt
ZW50Kik7CisKKyAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzKCkgY29uc3Q7IC8vIFBh
Z2UgR3JvdXBTZXR0aW5ncyB1c2VkIGJ5IHdvcmtlciB0aHJlYWQuCisKK3ByaXZhdGU6CisgICAg
U2hhcmVkV29ya2VyUHJveHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiwgUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4pOworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIGJvb2wgbV9j
bG9zaW5nOworICAgIFN0cmluZyBtX25hbWU7CisgICAgS1VSTCBtX3VybDsKKyAgICAvLyBUaGUg
dGhyZWFkIGlzIGZyZWVkIHdoZW4gdGhlIHByb3h5IGlzIGRlc3Ryb3llZCwgc28gd2UgbmVlZCB0
byBtYWtlIHN1cmUgdGhhdCB0aGUgcHJveHkgc3RheXMgYXJvdW5kIHVudGlsIHRoZSBTaGFyZWRX
b3JrZXJDb250ZXh0IGV4aXRzLgorICAgIFJlZlB0cjxTaGFyZWRXb3JrZXJUaHJlYWQ+IG1fdGhy
ZWFkOworICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9vcmlnaW47CisgICAgSGFzaFNldDxE
b2N1bWVudCo+IG1fd29ya2VyRG9jdW1lbnRzOworICAgIC8vIEVuc3VyZXMgZXhjbHVzaXZlIGFj
Y2VzcyB0byB0aGUgd29ya2VyIGRvY3VtZW50cy4gTXVzdCBub3QgZ3JhYiBhbnkgb3RoZXIgbG9j
a3MgKHN1Y2ggYXMgdGhlIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5IGxvY2spIHdoaWxl
IGhvbGRpbmcgdGhpcyBvbmUuCisgICAgTXV0ZXggbV93b3JrZXJEb2N1bWVudHNMb2NrOworfTsK
KworU2hhcmVkV29ya2VyUHJveHk6OlNoYXJlZFdvcmtlclByb3h5KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgS1VSTCYgdXJsLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4pCisg
ICAgOiBtX2Nsb3NpbmcoZmFsc2UpCisgICAgLCBtX25hbWUobmFtZS5pc29sYXRlZENvcHkoKSkK
KyAgICAsIG1fdXJsKHVybC5jb3B5KCkpCisgICAgLCBtX29yaWdpbihvcmlnaW4pCit7CisgICAg
Ly8gV2Ugc2hvdWxkIGJlIHRoZSBzb2xlIG93bmVyIG9mIHRoZSBTZWN1cml0eU9yaWdpbiwgYXMg
d2Ugd2lsbCBmcmVlIGl0IG9uIGFub3RoZXIgdGhyZWFkLgorICAgIEFTU0VSVChtX29yaWdpbi0+
aGFzT25lUmVmKCkpOworfQorCitib29sIFNoYXJlZFdvcmtlclByb3h5OjptYXRjaGVzKGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luLCBjb25zdCBL
VVJMJiB1cmxUb01hdGNoKSBjb25zdAoreworICAgIC8vIElmIHRoZSBvcmlnaW5zIGRvbid0IG1h
dGNoLCBvciB0aGUgbmFtZXMgZG9uJ3QgbWF0Y2gsIHRoZW4gdGhpcyBpcyBub3QgdGhlIHByb3h5
IHdlIGFyZSBsb29raW5nIGZvci4KKyAgICBpZiAoIW9yaWdpbi0+ZXF1YWwobV9vcmlnaW4uZ2V0
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiB0aGUgbmFtZXMgYXJlIGJv
dGggZW1wdHksIGNvbXBhcmVzIHRoZSBVUkxzIGluc3RlYWQgcGVyIHRoZSBXZWIgV29ya2VycyBz
cGVjLgorICAgIGlmIChuYW1lLmlzRW1wdHkoKSAmJiBtX25hbWUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gdXJsVG9NYXRjaCA9PSB1cmwoKTsKKworICAgIHJldHVybiBuYW1lID09IG1fbmFt
ZTsKK30KKwordm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6cG9zdFRhc2tUb0xvYWRlcihQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCit7CisgICAgTXV0ZXhMb2Nr
ZXIgbG9jayhtX3dvcmtlckRvY3VtZW50c0xvY2spOworCisgICAgaWYgKGlzQ2xvc2luZygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3ZSBhcmVuJ3QgY2xvc2luZywgdGhlbiB3ZSBt
dXN0IGhhdmUgYXQgbGVhc3Qgb25lIGRvY3VtZW50LgorICAgIEFTU0VSVChtX3dvcmtlckRvY3Vt
ZW50cy5zaXplKCkpOworCisgICAgLy8gSnVzdCBwaWNrIGFuIGFyYml0cmFyeSBhY3RpdmUgZG9j
dW1lbnQgZnJvbSB0aGUgSGFzaFNldCBhbmQgcGFzcyBsb2FkIHJlcXVlc3RzIHRvIGl0LgorICAg
IC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgdXNl
ciBjbG9zZXMgdGhlIGRvY3VtZW50IG1pZC1sb2FkLCB2aWEgYSBzaGFkb3cgZG9jdW1lbnQgb3Ig
c29tZSBvdGhlciBzb2x1dGlvbj8KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSAqKG1fd29ya2Vy
RG9jdW1lbnRzLmJlZ2luKCkpOworICAgIGRvY3VtZW50LT5wb3N0VGFzayh0YXNrKTsKK30KKwor
Ym9vbCBTaGFyZWRXb3JrZXJQcm94eTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBh
c3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5n
JiBtb2RlKQoreworICAgIGlmIChpc0Nsb3NpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIEFTU0VSVChtX3RocmVhZCk7CisgICAgbV90aHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFza0Zv
ck1vZGUodGFzaywgbW9kZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dyb3VwU2V0dGluZ3Mq
IFNoYXJlZFdvcmtlclByb3h5Ojpncm91cFNldHRpbmdzKCkgY29uc3QKK3sKKyAgICBpZiAoaXND
bG9zaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChtX3dvcmtlckRvY3VtZW50
cy5zaXplKCkpOworICAgIC8vIEp1c3QgcGljayB0aGUgZmlyc3QgYWN0aXZlIGRvY3VtZW50LCBh
bmQgdXNlIHRoZSBncm91cHNldHRpbmdzIG9mIHRoYXQgcGFnZS4KKyAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSAqKG1fd29ya2VyRG9jdW1lbnRzLmJlZ2luKCkpOworICAgIGlmIChkb2N1bWVudC0+
cGFnZSgpKQorICAgICAgICByZXR1cm4gZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNl
dHRpbmdzKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG9zdEV4Y2VwdGlv
blRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAg
ICBjb250ZXh0LT5yZXBvcnRFeGNlcHRpb24oZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3Vy
Y2VVUkwsIDApOworfQorCit2b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpwb3N0RXhjZXB0aW9uVG9X
b3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fd29ya2Vy
RG9jdW1lbnRzTG9jayk7CisgICAgZm9yIChIYXNoU2V0PERvY3VtZW50Kj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX3dvcmtlckRvY3VtZW50cy5iZWdpbigpOyBpdGVyICE9IG1fd29ya2VyRG9jdW1lbnRz
LmVuZCgpOyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNr
VGFzaygmcG9zdEV4Y2VwdGlvblRhc2ssIGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgc291cmNl
VVJMKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRhc2soU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogZG9jdW1lbnQsIE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlw
ZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCit7CisgICAgZG9jdW1lbnQt
PmFkZENvbnNvbGVNZXNzYWdlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIHNvdXJjZVVS
TCwgbGluZU51bWJlcik7Cit9CisKK3ZvaWQgU2hhcmVkV29ya2VyUHJveHk6OnBvc3RDb25zb2xl
TWVzc2FnZVRvV29ya2VyT2JqZWN0KE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0
eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVO
dW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIE11dGV4TG9ja2VyIGxvY2so
bV93b3JrZXJEb2N1bWVudHNMb2NrKTsKKyAgICBmb3IgKEhhc2hTZXQ8RG9jdW1lbnQqPjo6aXRl
cmF0b3IgaXRlciA9IG1fd29ya2VyRG9jdW1lbnRzLmJlZ2luKCk7IGl0ZXIgIT0gbV93b3JrZXJE
b2N1bWVudHMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+cG9zdFRhc2soY3JlYXRl
Q2FsbGJhY2tUYXNrKCZwb3N0Q29uc29sZU1lc3NhZ2VUYXNrLCBzb3VyY2UsIHR5cGUsIGxldmVs
LCBtZXNzYWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIpKTsKK30KKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCit2b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rv
cihjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU2hh
cmVkV29ya2VyUHJveHk6OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKGNvbnN0IFN0cmluZyYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCit2b2lkIFNoYXJlZFdvcmtl
clByb3h5Ojp3b3JrZXJDb250ZXh0Q2xvc2VkKCkKK3sKKyAgICBpZiAoaXNDbG9zaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBjbG9zZSgpOworfQorCit2b2lkIFNoYXJlZFdvcmtlclByb3h5
Ojp3b3JrZXJDb250ZXh0RGVzdHJveWVkKCkKK3sKKyAgICAvLyBUaGUgcHJveHkgbWF5IGJlIGZy
ZWVkIGJ5IHRoaXMgY2FsbCwgc28gZG8gbm90IHJlZmVyZW5jZSBpdCBhbnkgZnVydGhlci4KKyAg
ICBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aW5zdGFuY2UoKS5yZW1vdmVQcm94eSh0
aGlzKTsKK30KKwordm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6YWRkVG9Xb3JrZXJEb2N1bWVudHMo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3sKKyAgICAvLyBOZXN0ZWQgd29ya2Vy
cyBhcmUgbm90IHlldCBzdXBwb3J0ZWQsIHNvIHBhc3NlZC1pbiBjb250ZXh0IHNob3VsZCBhbHdh
eXMgYmUgYSBEb2N1bWVudC4KKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAg
ICBBU1NFUlQoIWlzQ2xvc2luZygpKTsKKyAgICBNdXRleExvY2tlciBsb2NrKG1fd29ya2VyRG9j
dW1lbnRzTG9jayk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1l
bnQqPihjb250ZXh0KTsKKyAgICBtX3dvcmtlckRvY3VtZW50cy5hZGQoZG9jdW1lbnQpOworfQor
Cit2b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpkb2N1bWVudERldGFjaGVkKERvY3VtZW50KiBkb2N1
bWVudCkKK3sKKyAgICBpZiAoaXNDbG9zaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBS
ZW1vdmUgdGhlIGRvY3VtZW50IGZyb20gb3VyIHNldCAoaWYgaXQncyB0aGVyZSkgYW5kIGlmIHRo
YXQgd2FzIHRoZSBsYXN0IGRvY3VtZW50IGluIHRoZSBzZXQsIG1hcmsgdGhlIHByb3h5IGFzIGNs
b3NlZC4KKyAgICBNdXRleExvY2tlciBsb2NrKG1fd29ya2VyRG9jdW1lbnRzTG9jayk7CisgICAg
bV93b3JrZXJEb2N1bWVudHMucmVtb3ZlKGRvY3VtZW50KTsKKyAgICBpZiAoIW1fd29ya2VyRG9j
dW1lbnRzLnNpemUoKSkKKyAgICAgICAgY2xvc2UoKTsKK30KKwordm9pZCBTaGFyZWRXb3JrZXJQ
cm94eTo6Y2xvc2UoKQoreworICAgIEFTU0VSVCghaXNDbG9zaW5nKCkpOworICAgIG1fY2xvc2lu
ZyA9IHRydWU7CisgICAgLy8gU3RvcCB0aGUgd29ya2VyIHRocmVhZCAtIHRoZSBwcm94eSB3aWxs
IHN0YXkgYXJvdW5kIHVudGlsIHdlIGdldCB3b3JrZXJUaHJlYWRFeGl0ZWQoKSBub3RpZmljYXRp
b24uCisgICAgaWYgKG1fdGhyZWFkKQorICAgICAgICBtX3RocmVhZC0+c3RvcCgpOworfQorCitj
bGFzcyBTaGFyZWRXb3JrZXJDb25uZWN0VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTaGFyZWRXb3JrZXJD
b25uZWN0VGFzaz4gY3JlYXRlKFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVs
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTaGFyZWRXb3JrZXJDb25uZWN0
VGFzayhjaGFubmVsKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFNoYXJlZFdvcmtlckNvbm5l
Y3RUYXNrKFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBjaGFubmVsKQorICAgICAgICA6
IG1fY2hhbm5lbChjaGFubmVsKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCkKKyAgICB7Cisg
ICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUoKnNj
cmlwdENvbnRleHQpOworICAgICAgICBwb3J0LT5lbnRhbmdsZShtX2NoYW5uZWwucmVsZWFzZSgp
KTsKKyAgICAgICAgQVNTRVJUKHNjcmlwdENvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAg
ICAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihzY3JpcHRDb250ZXh0KTsKKyAgICAgICAgLy8gU2luY2UgY2xvc2UoKSBzdG9wcyB0
aGUgdGhyZWFkIGV2ZW50IGxvb3AsIHRoaXMgc2hvdWxkIG5vdCBldmVyIGdldCBjYWxsZWQgd2hp
bGUgY2xvc2luZy4KKyAgICAgICAgQVNTRVJUKCF3b3JrZXJDb250ZXh0LT5pc0Nsb3NpbmcoKSk7
CisgICAgICAgIEFTU0VSVCh3b3JrZXJDb250ZXh0LT5pc1NoYXJlZFdvcmtlckNvbnRleHQoKSk7
CisgICAgICAgIHdvcmtlckNvbnRleHQtPmRpc3BhdGNoRXZlbnQoY3JlYXRlQ29ubmVjdEV2ZW50
KHBvcnQpKTsKKyAgICB9CisKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBtX2NoYW5u
ZWw7Cit9OworCisvLyBMb2FkcyB0aGUgc2NyaXB0IG9uIGJlaGFsZiBvZiBhIHdvcmtlci4KK2Ns
YXNzIFNoYXJlZFdvcmtlclNjcmlwdExvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZFdv
cmtlclNjcmlwdExvYWRlcj4sIHByaXZhdGUgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIoUGFzc1JlZlB0cjxTaGFyZWRXb3Jr
ZXI+LCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4sIFBhc3NSZWZQdHI8U2hhcmVkV29y
a2VyUHJveHk+KTsKKyAgICB2b2lkIGxvYWQoY29uc3QgS1VSTCYpOworCitwcml2YXRlOgorICAg
IC8vIFdvcmtlclNjcmlwdExvYWRlckNsaWVudCBjYWxsYmFja3MKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZCgpOworCisgICAg
UmVmUHRyPFNoYXJlZFdvcmtlcj4gbV93b3JrZXI7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hh
bm5lbD4gbV9wb3J0OworICAgIFJlZlB0cjxTaGFyZWRXb3JrZXJQcm94eT4gbV9wcm94eTsKKyAg
ICBSZWZQdHI8V29ya2VyU2NyaXB0TG9hZGVyPiBtX3NjcmlwdExvYWRlcjsKK307CisKK1NoYXJl
ZFdvcmtlclNjcmlwdExvYWRlcjo6U2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyKFBhc3NSZWZQdHI8
U2hhcmVkV29ya2VyPiB3b3JrZXIsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBwb3J0
LCBQYXNzUmVmUHRyPFNoYXJlZFdvcmtlclByb3h5PiBwcm94eSkKKyAgICA6IG1fd29ya2VyKHdv
cmtlcikKKyAgICAsIG1fcG9ydChwb3J0KQorICAgICwgbV9wcm94eShwcm94eSkKK3sKK30KKwor
dm9pZCBTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWQoY29uc3QgS1VSTCYgdXJsKQorewor
ICAgIC8vIFN0YXkgYWxpdmUgKGFuZCBrZWVwIHRoZSBTaGFyZWRXb3JrZXIgYW5kIEpTIHdyYXBw
ZXIgYWxpdmUpIHVudGlsIHRoZSBsb2FkIGZpbmlzaGVzLgorICAgIHRoaXMtPnJlZigpOworICAg
IG1fd29ya2VyLT5zZXRQZW5kaW5nQWN0aXZpdHkobV93b3JrZXIuZ2V0KCkpOworCisgICAgLy8g
TWFyayB0aGlzIG9iamVjdCBhcyBhY3RpdmUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgbG9hZC4K
KyAgICBtX3NjcmlwdExvYWRlciA9IFdvcmtlclNjcmlwdExvYWRlcjo6Y3JlYXRlKCk7CisjaWYg
UExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgbV9zY3JpcHRM
b2FkZXItPnNldFRhcmdldFR5cGUoUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRJc1NoYXJlZFdvcmtl
cik7CisjZW5kaWYKKyAgICBtX3NjcmlwdExvYWRlci0+bG9hZEFzeW5jaHJvbm91c2x5KG1fd29y
a2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHVybCwgRGVueUNyb3NzT3JpZ2luUmVxdWVz
dHMsIHRoaXMpOworfQorCit2b2lkIFNoYXJlZFdvcmtlclNjcmlwdExvYWRlcjo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpCit7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlU2NyaXB0UmVz
cG9uc2UobV93b3JrZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgaWRlbnRpZmllcik7Cit9
CisKK3ZvaWQgU2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyOjpub3RpZnlGaW5pc2hlZCgpCit7Cisg
ICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGludm9rZWQg
aWYgd2UgYXJlIGxvYWRpbmcgZnJvbSBXb3JrZXJDb250ZXh0IChzZWUgY29tbWVudCBmb3IgV29y
a2VyU2NyaXB0TG9hZGVyQ2xpZW50Ojpub3RpZnlGaW5pc2hlZCgpKS4KKyAgICAvLyBXZSBuZWVk
IHRvIGFkZHJlc3MgdGhpcyBiZWZvcmUgc3VwcG9ydGluZyBuZXN0ZWQgd29ya2Vycy4KKworICAg
IC8vIEhhbmQgb2ZmIHRoZSBqdXN0LWxvYWRlZCBjb2RlIHRvIHRoZSByZXBvc2l0b3J5IHRvIHN0
YXJ0IHVwIHRoZSB3b3JrZXIgdGhyZWFkLgorICAgIGlmIChtX3NjcmlwdExvYWRlci0+ZmFpbGVk
KCkpCisgICAgICAgIG1fd29ya2VyLT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCB0cnVlKSk7CisgICAgZWxzZSB7CisgICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2NyaXB0SW1wb3J0ZWQobV93b3JrZXItPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSwgbV9zY3JpcHRMb2FkZXItPmlkZW50aWZpZXIoKSwgbV9zY3JpcHRM
b2FkZXItPnNjcmlwdCgpKTsKKyAgICAgICAgRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6
Omluc3RhbmNlKCkud29ya2VyU2NyaXB0TG9hZGVkKCptX3Byb3h5LCBtX3dvcmtlci0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT51c2VyQWdlbnQobV9zY3JpcHRMb2FkZXItPnVybCgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSwgbV9wb3J0LnJlbGVhc2UoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fd29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmNvbnRlbnRTZWN1
cml0eVBvbGljeSgpLT5kZXByZWNhdGVkSGVhZGVyKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dvcmtlci0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+ZGVwcmVj
YXRlZEhlYWRlclR5cGUoKSk7CisgICAgfQorICAgIG1fd29ya2VyLT51bnNldFBlbmRpbmdBY3Rp
dml0eShtX3dvcmtlci5nZXQoKSk7CisgICAgdGhpcy0+ZGVyZWYoKTsgLy8gVGhpcyBmcmVlcyB0
aGlzIG9iamVjdCAtIG11c3QgYmUgdGhlIGxhc3QgYWN0aW9uIGluIHRoaXMgZnVuY3Rpb24uCit9
CisKK0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5JiBEZWZhdWx0U2hhcmVkV29ya2VyUmVw
b3NpdG9yeTo6aW5zdGFuY2UoKQoreworICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhE
ZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeSosIGluc3RhbmNlID0gbmV3IERlZmF1bHRTaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5KTsKKyAgICByZXR1cm4gKmluc3RhbmNlOworfQorCit2b2lkIERl
ZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojp3b3JrZXJTY3JpcHRMb2FkZWQoU2hhcmVkV29y
a2VyUHJveHkmIHByb3h5LCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3RyaW5nJiB3
b3JrZXJTY3JpcHQsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBwb3J0LCBjb25zdCBT
dHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFk
ZXJUeXBlIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5cGUpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9j
ayhtX2xvY2spOworICAgIGlmIChwcm94eS5pc0Nsb3NpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gQW5vdGhlciBsb2FkZXIgbWF5IGhhdmUgYWxyZWFkeSBzdGFydGVkIHVwIGEgdGhy
ZWFkIGZvciB0aGlzIHByb3h5IC0gaWYgc28sIGp1c3Qgc2VuZCBhIGNvbm5lY3QgdG8gdGhlIHBy
ZS1leGlzdGluZyB0aHJlYWQuCisgICAgaWYgKCFwcm94eS50aHJlYWQoKSkgeworICAgICAgICBS
ZWZQdHI8U2hhcmVkV29ya2VyVGhyZWFkPiB0aHJlYWQgPSBTaGFyZWRXb3JrZXJUaHJlYWQ6OmNy
ZWF0ZShwcm94eS5uYW1lKCksIHByb3h5LnVybCgpLCB1c2VyQWdlbnQsIHByb3h5Lmdyb3VwU2V0
dGluZ3MoKSwgd29ya2VyU2NyaXB0LCBwcm94eSwgcHJveHksIERvbnRQYXVzZVdvcmtlckNvbnRl
eHRPblN0YXJ0LCBjb250ZW50U2VjdXJpdHlQb2xpY3ksIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5
cGUpOworICAgICAgICBwcm94eS5zZXRUaHJlYWQodGhyZWFkKTsKKyAgICAgICAgdGhyZWFkLT5z
dGFydCgpOworICAgIH0KKyAgICBwcm94eS50aHJlYWQoKS0+cnVuTG9vcCgpLnBvc3RUYXNrKFNo
YXJlZFdvcmtlckNvbm5lY3RUYXNrOjpjcmVhdGUocG9ydCkpOworfQorCitib29sIFNoYXJlZFdv
cmtlclJlcG9zaXRvcnk6OmlzQXZhaWxhYmxlKCkKK3sKKyAgICAvLyBTaGFyZWRXb3JrZXJzIGFy
ZSBlbmFibGVkIG9uIHRoZSBkZWZhdWx0IFdlYktpdCBwbGF0Zm9ybS4KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpjb25uZWN0KFBhc3NSZWZQdHI8
U2hhcmVkV29ya2VyPiB3b3JrZXIsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBwb3J0
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omluc3RhbmNlKCkuY29ubmVj
dFRvV29ya2VyKHdvcmtlciwgcG9ydCwgdXJsLCBuYW1lLCBlYyk7Cit9CisKK3ZvaWQgU2hhcmVk
V29ya2VyUmVwb3NpdG9yeTo6ZG9jdW1lbnREZXRhY2hlZChEb2N1bWVudCogZG9jdW1lbnQpCit7
CisgICAgRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omluc3RhbmNlKCkuZG9jdW1lbnRE
ZXRhY2hlZChkb2N1bWVudCk7Cit9CisKK2Jvb2wgU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aGFz
U2hhcmVkV29ya2VycyhEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIERlZmF1bHRT
aGFyZWRXb3JrZXJSZXBvc2l0b3J5OjppbnN0YW5jZSgpLmhhc1NoYXJlZFdvcmtlcnMoZG9jdW1l
bnQpOworfQorCitib29sIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRX
b3JrZXJzKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbG9j
ayk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJveGllcy5zaXplKCk7IGkrKykg
eworICAgICAgICBpZiAobV9wcm94aWVzW2ldLT5pc0luV29ya2VyRG9jdW1lbnRzKGRvY3VtZW50
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OnJlbW92ZVByb3h5KFNoYXJl
ZFdvcmtlclByb3h5KiBwcm94eSkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbG9jayk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJveGllcy5zaXplKCk7IGkrKykgeworICAg
ICAgICBpZiAocHJveHkgPT0gbV9wcm94aWVzW2ldLmdldCgpKSB7CisgICAgICAgICAgICBtX3By
b3hpZXMucmVtb3ZlKGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Ojpkb2N1bWVudERldGFjaGVk
KERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbG9jayk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJveGllcy5zaXplKCk7IGkrKykKKyAgICAg
ICAgbV9wcm94aWVzW2ldLT5kb2N1bWVudERldGFjaGVkKGRvY3VtZW50KTsKK30KKwordm9pZCBE
ZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6Y29ubmVjdFRvV29ya2VyKFBhc3NSZWZQdHI8
U2hhcmVkV29ya2VyPiB3b3JrZXIsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBwb3J0
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2xvY2spOworICAgIEFTU0VSVCh3b3JrZXItPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzKFNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGUodXJsKS5nZXQoKSkpOworICAgIC8vIEZldGNoIGEgcHJveHkgY29y
cmVzcG9uZGluZyB0byB0aGlzIFNoYXJlZFdvcmtlci4KKyAgICBSZWZQdHI8U2hhcmVkV29ya2Vy
UHJveHk+IHByb3h5ID0gZ2V0UHJveHkobmFtZSwgdXJsKTsKKyAgICBwcm94eS0+YWRkVG9Xb3Jr
ZXJEb2N1bWVudHMod29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmIChw
cm94eS0+dXJsKCkgIT0gdXJsKSB7CisgICAgICAgIC8vIFByb3h5IGFscmVhZHkgZXhpc3RlZCB1
bmRlciBhbHRlcm5hdGUgVVJMIC0gcmV0dXJuIGFuIGVycm9yLgorICAgICAgICBlYyA9IFVSTF9N
SVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gSWYgcHJveHkgaXMg
YWxyZWFkeSBydW5uaW5nLCBqdXN0IGNvbm5lY3QgdG8gaXQgLSBvdGhlcndpc2UsIGtpY2sgb2Zm
IGEgbG9hZGVyIHRvIGxvYWQgdGhlIHNjcmlwdC4KKyAgICBpZiAocHJveHktPnRocmVhZCgpKQor
ICAgICAgICBwcm94eS0+dGhyZWFkKCktPnJ1bkxvb3AoKS5wb3N0VGFzayhTaGFyZWRXb3JrZXJD
b25uZWN0VGFzazo6Y3JlYXRlKHBvcnQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVmUHRyPFNo
YXJlZFdvcmtlclNjcmlwdExvYWRlcj4gbG9hZGVyID0gYWRvcHRSZWYobmV3IFNoYXJlZFdvcmtl
clNjcmlwdExvYWRlcih3b3JrZXIsIHBvcnQsIHByb3h5LnJlbGVhc2UoKSkpOworICAgICAgICBs
b2FkZXItPmxvYWQodXJsKTsKKyAgICB9Cit9CisKKy8vIENyZWF0ZXMgYSBuZXcgU2hhcmVkV29y
a2VyUHJveHkgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUgZnJvbSB0aGUgcmVwb3NpdG9yeS4g
TXVzdCBvbmx5IGJlIGNhbGxlZCB3aGlsZSB0aGUgcmVwb3NpdG9yeSBtdXRleCBpcyBoZWxkLgor
UGFzc1JlZlB0cjxTaGFyZWRXb3JrZXJQcm94eT4gRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRv
cnk6OmdldFByb3h5KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYgdXJsKQoreworICAg
IC8vIExvb2sgZm9yIGFuIGV4aXN0aW5nIHdvcmtlciwgYW5kIGNyZWF0ZSBvbmUgaWYgaXQgZG9l
c24ndCBleGlzdC4KKyAgICAvLyBJdGVtcyBpbiB0aGUgY2FjaGUgYXJlIGZyZWVkIG9uIGFub3Ro
ZXIgdGhyZWFkLCBzbyBkbyBhIHRocmVhZHNhZmUgY29weSBvZiB0aGUgVVJMIGJlZm9yZSBjcmVh
dGluZyB0aGUgb3JpZ2luLAorICAgIC8vIHRvIG1ha2Ugc3VyZSBubyByZWZlcmVuY2VzIHRvIGV4
dGVybmFsIHN0cmluZ3MgbGluZ2VyLgorICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2lu
ID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsLnN0cmlu
ZygpLmlzb2xhdGVkQ29weSgpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJv
eGllcy5zaXplKCk7IGkrKykgeworICAgICAgICBpZiAoIW1fcHJveGllc1tpXS0+aXNDbG9zaW5n
KCkgJiYgbV9wcm94aWVzW2ldLT5tYXRjaGVzKG5hbWUsIG9yaWdpbiwgdXJsKSkKKyAgICAgICAg
ICAgIHJldHVybiBtX3Byb3hpZXNbaV07CisgICAgfQorICAgIC8vIFByb3h5IGlzIG5vdCBpbiB0
aGUgcmVwb3NpdG9yeSBjdXJyZW50bHkgLSBjcmVhdGUgYSBuZXcgb25lLgorICAgIFJlZlB0cjxT
aGFyZWRXb3JrZXJQcm94eT4gcHJveHkgPSBTaGFyZWRXb3JrZXJQcm94eTo6Y3JlYXRlKG5hbWUs
IHVybCwgb3JpZ2luLnJlbGVhc2UoKSk7CisgICAgbV9wcm94aWVzLmFwcGVuZChwcm94eSk7Cisg
ICAgcmV0dXJuIHByb3h5LnJlbGVhc2UoKTsKK30KKworRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9z
aXRvcnk6OkRlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5KCkKK3sKK30KKworRGVmYXVsdFNo
YXJlZFdvcmtlclJlcG9zaXRvcnk6On5EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeSgpCit7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTSEFSRURf
V09SS0VSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9EZWZh
dWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3Jr
ZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzVkOTBlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oCkBAIC0wLDAg
KzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5X2gKKyNkZWZpbmUg
RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnlfaAorCisjaWYgRU5BQkxFKFNIQVJFRF9XT1JL
RVJTKQorCisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisgICAgY2xhc3MgRG9jdW1lbnQ7CisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFz
cyBNZXNzYWdlUG9ydENoYW5uZWw7CisgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
KyAgICBjbGFzcyBTaGFyZWRXb3JrZXI7CisgICAgY2xhc3MgU2hhcmVkV29ya2VyUHJveHk7CisK
KyAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCisgICAgLy8gUGxhdGZvcm0tc3BlY2lm
aWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJlZFdvcmtlclJlcG9zaXRvcnkgc3RhdGljIGlu
dGVyZmFjZS4KKyAgICBjbGFzcyBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeSB7CisgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5KTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICAvLyBJbnZva2Vk
IG9uY2UgdGhlIHdvcmtlciBzY3JpcHQgaGFzIGJlZW4gbG9hZGVkIHRvIGZpcmUgdXAgdGhlIHdv
cmtlciB0aHJlYWQuCisgICAgICAgIHZvaWQgd29ya2VyU2NyaXB0TG9hZGVkKFNoYXJlZFdvcmtl
clByb3h5JiwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgd29ya2VyU2Ny
aXB0LCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4sIGNvbnN0IFN0cmluZyYgY29udGVu
dFNlY3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUpOworCisg
ICAgICAgIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIFNoYXJlZFdvcmtlclJlcG9zaXRv
cnk6OmNvbm5lY3QoKQorICAgICAgICB2b2lkIGNvbm5lY3RUb1dvcmtlcihQYXNzUmVmUHRyPFNo
YXJlZFdvcmtlcj4sIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiwgY29uc3QgS1VSTCYs
IGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgICAgIC8vIE5vdGlm
aWNhdGlvbiB0aGF0IGEgZG9jdW1lbnQgaGFzIGJlZW4gZGV0YWNoZWQuCisgICAgICAgIHZvaWQg
ZG9jdW1lbnREZXRhY2hlZChEb2N1bWVudCopOworCisgICAgICAgIC8vIFJlbW92ZXMgdGhlIHBh
c3NlZCBTaGFyZWRXb3JrZXJQcm94eSBmcm9tIHRoZSByZXBvc2l0b3J5LgorICAgICAgICB2b2lk
IHJlbW92ZVByb3h5KFNoYXJlZFdvcmtlclByb3h5Kik7CisKKyAgICAgICAgYm9vbCBoYXNTaGFy
ZWRXb3JrZXJzKERvY3VtZW50Kik7CisKKyAgICAgICAgc3RhdGljIERlZmF1bHRTaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5JiBpbnN0YW5jZSgpOworICAgIHByaXZhdGU6CisgICAgICAgIERlZmF1bHRT
aGFyZWRXb3JrZXJSZXBvc2l0b3J5KCk7CisgICAgICAgIH5EZWZhdWx0U2hhcmVkV29ya2VyUmVw
b3NpdG9yeSgpOworCisgICAgICAgIFBhc3NSZWZQdHI8U2hhcmVkV29ya2VyUHJveHk+IGdldFBy
b3h5KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYpOworICAgICAgICAvLyBNdXRleCB1
c2VkIHRvIHByb3RlY3QgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLgorICAgICAgICBNdXRleCBt
X2xvY2s7CisKKyAgICAgICAgLy8gTGlzdCBvZiBzaGFyZWQgd29ya2Vycy4gRXhwZWN0YXRpb24g
aXMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgbGltaXRlZCBudW1iZXIgb2Ygc2hhcmVkIHdvcmtlcnMs
IGFuZCBzbyB0cmFja2luZyB0aGVtIGluIGEgVmVjdG9yIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4g
bmVzdGVkIEhhc2hNYXBzLgorICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8U2hhcmVkV29y
a2VyUHJveHk+ID4gU2hhcmVkV29ya2VyUHJveHlSZXBvc2l0b3J5OworICAgICAgICBTaGFyZWRX
b3JrZXJQcm94eVJlcG9zaXRvcnkgbV9wcm94aWVzOworICAgIH07CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VSUykKKworI2VuZGlmIC8v
IERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd29ya2Vycy9TaGFyZWRXb3JrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOWU5NGVlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd29ya2Vycy9TaGFyZWRXb3JrZXIuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorCisjaW5jbHVkZSAiU2hhcmVkV29y
a2VyLmgiCisKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRl
ICJLVVJMLmgiCisjaW5jbHVkZSAiTWVzc2FnZUNoYW5uZWwuaCIKKyNpbmNsdWRlICJNZXNzYWdl
UG9ydC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJT
aGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5l
IFNoYXJlZFdvcmtlcjo6U2hhcmVkV29ya2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCisgICAgOiBBYnN0cmFjdFdvcmtlcihjb250ZXh0KQoreworfQorCitQYXNzUmVmUHRyPFNo
YXJlZFdvcmtlcj4gU2hhcmVkV29ya2VyOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgUmVmUHRyPFNoYXJlZFdvcmtlcj4gd29ya2VyID0gYWRvcHRSZWYo
bmV3IFNoYXJlZFdvcmtlcihjb250ZXh0KSk7CisKKyAgICBSZWZQdHI8TWVzc2FnZUNoYW5uZWw+
IGNoYW5uZWwgPSBNZXNzYWdlQ2hhbm5lbDo6Y3JlYXRlKGNvbnRleHQpOworICAgIHdvcmtlci0+
bV9wb3J0ID0gY2hhbm5lbC0+cG9ydDEoKTsKKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVs
PiByZW1vdGVQb3J0ID0gY2hhbm5lbC0+cG9ydDIoKS0+ZGlzZW50YW5nbGUoZWMpOworICAgIEFT
U0VSVChyZW1vdGVQb3J0KTsKKworICAgIHdvcmtlci0+c3VzcGVuZElmTmVlZGVkKCk7CisKKyAg
ICBLVVJMIHNjcmlwdFVSTCA9IHdvcmtlci0+cmVzb2x2ZVVSTCh1cmwsIGVjKTsKKyAgICBpZiAo
c2NyaXB0VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5Ojpjb25uZWN0KHdvcmtlci5nZXQoKSwgcmVtb3RlUG9ydC5yZWxlYXNlKCks
IHNjcmlwdFVSTCwgbmFtZSwgZWMpOworCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRDcmVhdGVXb3JrZXIoY29udGV4dCwgd29ya2VyLT5hc0lEKCksIHNjcmlwdFVSTC5zdHJpbmco
KSwgdHJ1ZSk7CisKKyAgICByZXR1cm4gd29ya2VyLnJlbGVhc2UoKTsKK30KKworU2hhcmVkV29y
a2VyOjp+U2hhcmVkV29ya2VyKCkKK3sKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBTaGFyZWRX
b3JrZXI6OmludGVyZmFjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yU2hhcmVkV29ya2VyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAgLy8gRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlci5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjAwMzYyYmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dvcmtlcnMvU2hhcmVkV29ya2VyLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNoYXJlZFdvcmtl
cl9oCisjZGVmaW5lIFNoYXJlZFdvcmtlcl9oCisKKyNpbmNsdWRlICJBYnN0cmFjdFdvcmtlci5o
IgorCisjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyAgICBjbGFzcyBTaGFyZWRXb3JrZXIgOiBwdWJsaWMgQWJzdHJhY3RXb3JrZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkV29ya2VyPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdmlydHVhbCB+U2hhcmVkV29ya2VyKCk7CisK
KyAgICAgICAgTWVzc2FnZVBvcnQqIHBvcnQoKSBjb25zdCB7IHJldHVybiBtX3BvcnQuZ2V0KCk7
IH0KKworICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgp
IGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2hhcmVkV29ya2VyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqKTsKKworICAgICAgICB2aXJ0dWFsIFNoYXJlZFdvcmtlciogdG9TaGFyZWRX
b3JrZXIoKSB7IHJldHVybiB0aGlzOyB9CisKKyAgICAgICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBt
X3BvcnQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFNIQVJFRF9XT1JLRVJTKQorCisjZW5kaWYgLy8gU2hhcmVkV29ya2VyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9TaGFyZWRXb3JrZXIuaWRsIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlci5pZGwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjY2RkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9TaGFyZWRXb3JrZXIuaWRsCkBAIC0wLDAgKzEsNDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
bW9kdWxlIHRocmVhZHMgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9
U0hBUkVEX1dPUktFUlMsCisgICAgICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICAgICAgSlNDdXN0
b21Db25zdHJ1Y3RvciwKKyAgICAgICAgQ29uc3RydWN0b3IoaW4gRE9NU3RyaW5nIHNjcmlwdFVS
TCwgaW4gW09wdGlvbmFsPURlZmF1bHRJc051bGxTdHJpbmddIERPTVN0cmluZyBuYW1lKSwKKyAg
ICAgICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwKKyAgICAgICAgQ29uc3RydWN0
b3JSYWlzZXNFeGNlcHRpb24sCisgICAgICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAorICAgICAg
ICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCisgICAgICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0
CisgICAgXSBTaGFyZWRXb3JrZXIgOiBBYnN0cmFjdFdvcmtlciB7CisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBNZXNzYWdlUG9ydCBwb3J0OworICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDJiYWY2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRleHQuY3Bw
CkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU0hBUkVE
X1dPUktFUlMpCisKKyNpbmNsdWRlICJTaGFyZWRXb3JrZXJDb250ZXh0LmgiCisKKyNpbmNsdWRl
ICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiTWVzc2Fn
ZUV2ZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JpcHRD
YWxsU3RhY2suaCIKKyNpbmNsdWRlICJTaGFyZWRXb3JrZXJUaHJlYWQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitQYXNzUmVmUHRyPE1lc3NhZ2VFdmVudD4gY3JlYXRlQ29ubmVjdEV2ZW50
KFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQpCit7CisgICAgUmVmUHRyPE1lc3NhZ2VFdmVu
dD4gZXZlbnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZShhZG9wdFB0cihuZXcgTWVzc2FnZVBvcnRB
cnJheSgxLCBwb3J0KSkpOworICAgIGV2ZW50LT5pbml0RXZlbnQoZXZlbnROYW1lcygpLmNvbm5l
Y3RFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICByZXR1cm4gZXZlbnQucmVsZWFzZSgpOworfQor
CitTaGFyZWRXb3JrZXJDb250ZXh0OjpTaGFyZWRXb3JrZXJDb250ZXh0KGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgU2hhcmVkV29y
a2VyVGhyZWFkKiB0aHJlYWQsIGNvbnN0IFN0cmluZyYgY29udGVudFNlY3VyaXR5UG9saWN5LCBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUgY29udGVudFNlY3VyaXR5UG9saWN5VHlw
ZSkKKyAgICA6IFdvcmtlckNvbnRleHQodXJsLCB1c2VyQWdlbnQsIHRocmVhZCwgY29udGVudFNl
Y3VyaXR5UG9saWN5LCBjb250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKQorICAgICwgbV9uYW1lKG5h
bWUpCit7Cit9CisKK1NoYXJlZFdvcmtlckNvbnRleHQ6On5TaGFyZWRXb3JrZXJDb250ZXh0KCkK
K3sKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBTaGFyZWRXb3JrZXJDb250ZXh0OjppbnRlcmZh
Y2VOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclNo
YXJlZFdvcmtlckNvbnRleHQ7Cit9CisKK1NoYXJlZFdvcmtlclRocmVhZCogU2hhcmVkV29ya2Vy
Q29udGV4dDo6dGhyZWFkKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2hhcmVkV29ya2Vy
VGhyZWFkKj4oQmFzZTo6dGhyZWFkKCkpOworfQorCit2b2lkIFNoYXJlZFdvcmtlckNvbnRleHQ6
OmxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4gY2FsbFN0YWNrKQoreworICAgIFdvcmtlckNvbnRleHQ6OmxvZ0V4Y2VwdGlvblRvQ29u
c29sZShlcnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY2FsbFN0YWNrKTsKKyAg
ICBhZGRNZXNzYWdlVG9Xb3JrZXJDb25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5
cGUsIEVycm9yTWVzc2FnZUxldmVsLCBlcnJvck1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJl
ciwgY2FsbFN0YWNrKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNIQVJFRF9XT1JLRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNWU4ZTU5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U2hhcmVkV29ya2VyQ29udGV4dF9oCisjZGVmaW5lIFNoYXJlZFdvcmtlckNvbnRleHRfaAorCisj
aWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorCisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9s
aWN5LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBNZXNzYWdlRXZlbnQ7CisgICAgY2xhc3MgU2hhcmVkV29ya2VyVGhyZWFk
OworCisgICAgY2xhc3MgU2hhcmVkV29ya2VyQ29udGV4dCA6IHB1YmxpYyBXb3JrZXJDb250ZXh0
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgV29ya2VyQ29udGV4dCBCYXNlOworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXJDb250ZXh0PiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBT
aGFyZWRXb3JrZXJUaHJlYWQqIHRocmVhZCwgY29uc3QgU3RyaW5nJiBjb250ZW50U2VjdXJpdHlQ
b2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGVhZGVyVHlwZSBjb250ZW50U2VjdXJpdHlQ
b2xpY3lUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNo
YXJlZFdvcmtlckNvbnRleHQobmFtZSwgdXJsLCB1c2VyQWdlbnQsIHRocmVhZCwgY29udGVudFNl
Y3VyaXR5UG9saWN5LCBjb250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKSk7CisgICAgICAgIH0KKyAg
ICAgICAgdmlydHVhbCB+U2hhcmVkV29ya2VyQ29udGV4dCgpOworCisgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1NoYXJlZFdvcmtlckNvbnRleHQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICAgICAgLy8gRXZlbnRUYXJnZXQKKyAgICAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcm
IGludGVyZmFjZU5hbWUoKSBjb25zdDsKKworICAgICAgICAvLyBTZXR0ZXJzL0dldHRlcnMgZm9y
IGF0dHJpYnV0ZXMgaW4gU2hhcmVkV29ya2VyQ29udGV4dC5pZGwKKyAgICAgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihjb25uZWN0KTsKKyAgICAgICAgU3RyaW5nIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KKworICAgICAgICBTaGFyZWRXb3JrZXJUaHJlYWQqIHRo
cmVhZCgpOworICAgIHByaXZhdGU6CisgICAgICAgIFNoYXJlZFdvcmtlckNvbnRleHQoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiwgU2hhcmVkV29ya2VyVGhy
ZWFkKiwgY29uc3QgU3RyaW5nJiBjb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6SGVhZGVyVHlwZSk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGxvZ0V4Y2VwdGlv
blRvQ29uc29sZShjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwsIGludCBsaW5lTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4pOworCisg
ICAgICAgIFN0cmluZyBtX25hbWU7CisgICAgfTsKKworICAgIFBhc3NSZWZQdHI8TWVzc2FnZUV2
ZW50PiBjcmVhdGVDb25uZWN0RXZlbnQoUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4pOworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisK
KyNlbmRpZiAvLyBTaGFyZWRXb3JrZXJDb250ZXh0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0LmlkbCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0LmlkbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzY5ODExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRleHQuaWRsCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCittb2R1bGUgdGhyZWFkcyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25k
aXRpb25hbD1TSEFSRURfV09SS0VSUywKKyAgICAgICAgRXh0ZW5kc0RPTUdsb2JhbE9iamVjdCwK
KyAgICAgICAgSXNXb3JrZXJDb250ZXh0LAorICAgICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmpl
Y3QsCisgICAgICAgIEpTTm9TdGF0aWNUYWJsZXMsCisgICAgICAgIE9taXRDb25zdHJ1Y3Rvcgor
ICAgIF0gU2hhcmVkV29ya2VyQ29udGV4dCA6IFdvcmtlckNvbnRleHQgeworCisgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAgICAgICAgICAgYXR0cmli
dXRlIEV2ZW50TGlzdGVuZXIgb25jb25uZWN0OworCisgICAgfTsKKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9TaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkODdlYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9TaGFyZWRXb3JrZXJSZXBvc2l0
b3J5LmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcmVkV29ya2VyUmVwb3NpdG9yeV9oCisj
ZGVmaW5lIFNoYXJlZFdvcmtlclJlcG9zaXRvcnlfaAorCisjaWYgRU5BQkxFKFNIQVJFRF9XT1JL
RVJTKQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIGNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3MgTWVzc2Fn
ZVBvcnRDaGFubmVsOworICAgIGNsYXNzIFNoYXJlZFdvcmtlcjsKKworICAgIHR5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7CisKKyAgICAvLyBJbnRlcmZhY2UgdG8gYSByZXBvc2l0b3J5IHdoaWNo
IG1hbmFnZXMgcmVmZXJlbmNlcyB0byB0aGUgc2V0IG9mIGFjdGl2ZSBzaGFyZWQgd29ya2Vycy4K
KyAgICBjbGFzcyBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgU2hhcmVkV29ya2Vycywg
b3RoZXJ3aXNlIGZhbHNlLgorICAgICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOworCisg
ICAgICAgIC8vIENvbm5lY3RzIHRoZSBwYXNzZWQgU2hhcmVkV29ya2VyIG9iamVjdCB3aXRoIHRo
ZSBzcGVjaWZpZWQgd29ya2VyIHRocmVhZCwgY3JlYXRpbmcgYSBuZXcgdGhyZWFkIGlmIG5lY2Vz
c2FyeS4KKyAgICAgICAgc3RhdGljIHZvaWQgY29ubmVjdChQYXNzUmVmUHRyPFNoYXJlZFdvcmtl
cj4sIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgICAgIC8vIEludm9rZWQgd2hlbiBh
IGRvY3VtZW50IGhhcyBiZWVuIGRldGFjaGVkLgorICAgICAgICBzdGF0aWMgdm9pZCBkb2N1bWVu
dERldGFjaGVkKERvY3VtZW50Kik7CisKKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBw
YXNzZWQgZG9jdW1lbnQgaXMgYXNzb2NpYXRlZCB3aXRoIGFueSBTaGFyZWRXb3JrZXJzLgorICAg
ICAgICBzdGF0aWMgYm9vbCBoYXNTaGFyZWRXb3JrZXJzKERvY3VtZW50Kik7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgU2hhcmVkV29ya2VyUmVwb3NpdG9yeSgpIHsgfQorICAgIH07CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VSUykKKwor
I2VuZGlmIC8vIFNoYXJlZFdvcmtlclJlcG9zaXRvcnlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlclRocmVhZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dvcmtlcnMvU2hhcmVkV29ya2VyVGhyZWFkLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGE4OWM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlclRocmVhZC5jcHAKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykK
KworI2luY2x1ZGUgIlNoYXJlZFdvcmtlclRocmVhZC5oIgorCisjaW5jbHVkZSAiU2hhcmVkV29y
a2VyQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8U2hhcmVk
V29ya2VyVGhyZWFkPiBTaGFyZWRXb3JrZXJUaHJlYWQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0
IEdyb3VwU2V0dGluZ3MqIHNldHRpbmdzLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtl
ckxvYWRlclByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSwgV29ya2VyUmVwb3J0aW5nUHJveHkmIHdv
cmtlclJlcG9ydGluZ1Byb3h5LCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpI
ZWFkZXJUeXBlIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTaGFyZWRXb3JrZXJUaHJlYWQobmFtZSwgc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNl
dHRpbmdzLCBzb3VyY2VDb2RlLCB3b3JrZXJMb2FkZXJQcm94eSwgd29ya2VyUmVwb3J0aW5nUHJv
eHksIHN0YXJ0TW9kZSwgY29udGVudFNlY3VyaXR5UG9saWN5LCBjb250ZW50U2VjdXJpdHlQb2xp
Y3lUeXBlKSk7Cit9CisKK1NoYXJlZFdvcmtlclRocmVhZDo6U2hhcmVkV29ya2VyVGhyZWFkKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2Vu
dCwgY29uc3QgR3JvdXBTZXR0aW5ncyogc2V0dGluZ3MsIGNvbnN0IFN0cmluZyYgc291cmNlQ29k
ZSwgV29ya2VyTG9hZGVyUHJveHkmIHdvcmtlckxvYWRlclByb3h5LCBXb3JrZXJSZXBvcnRpbmdQ
cm94eSYgd29ya2VyUmVwb3J0aW5nUHJveHksIFdvcmtlclRocmVhZFN0YXJ0TW9kZSBzdGFydE1v
ZGUsIGNvbnN0IFN0cmluZyYgY29udGVudFNlY3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OkhlYWRlclR5cGUgY29udGVudFNlY3VyaXR5UG9saWN5VHlwZSkKKyAgICA6IFdvcmtl
clRocmVhZCh1cmwsIHVzZXJBZ2VudCwgc2V0dGluZ3MsIHNvdXJjZUNvZGUsIHdvcmtlckxvYWRl
clByb3h5LCB3b3JrZXJSZXBvcnRpbmdQcm94eSwgc3RhcnRNb2RlLCBjb250ZW50U2VjdXJpdHlQ
b2xpY3ksIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5cGUpCisgICAgLCBtX25hbWUobmFtZS5pc29s
YXRlZENvcHkoKSkKK3sKK30KKworU2hhcmVkV29ya2VyVGhyZWFkOjp+U2hhcmVkV29ya2VyVGhy
ZWFkKCkKK3sKK30KKworUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0PiBTaGFyZWRXb3JrZXJUaHJl
YWQ6OmNyZWF0ZVdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVz
ZXJBZ2VudCwgY29uc3QgU3RyaW5nJiBjb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1
cml0eVBvbGljeTo6SGVhZGVyVHlwZSBjb250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKQoreworICAg
IHJldHVybiBTaGFyZWRXb3JrZXJDb250ZXh0OjpjcmVhdGUobV9uYW1lLCB1cmwsIHVzZXJBZ2Vu
dCwgdGhpcywgY29udGVudFNlY3VyaXR5UG9saWN5LCBjb250ZW50U2VjdXJpdHlQb2xpY3lUeXBl
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNIQVJF
RF9XT1JLRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1No
YXJlZFdvcmtlclRocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1NoYXJl
ZFdvcmtlclRocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMzVl
ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvU2hh
cmVkV29ya2VyVGhyZWFkLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFNoYXJlZFdvcmtlclRocmVh
ZF9oCisjZGVmaW5lIFNoYXJlZFdvcmtlclRocmVhZF9oCisKKyNpZiBFTkFCTEUoU0hBUkVEX1dP
UktFUlMpCisKKyNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJX
b3JrZXJUaHJlYWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU2hhcmVk
V29ya2VyVGhyZWFkIDogcHVibGljIFdvcmtlclRocmVhZCB7CisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXJUaHJlYWQ+IGNyZWF0ZShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgR3Jv
dXBTZXR0aW5ncyosIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkm
LCBXb3JrZXJSZXBvcnRpbmdQcm94eSYsIFdvcmtlclRocmVhZFN0YXJ0TW9kZSwgY29uc3QgU3Ry
aW5nJiBjb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGVhZGVy
VHlwZSk7CisgICAgICAgIH5TaGFyZWRXb3JrZXJUaHJlYWQoKTsKKworICAgIHByb3RlY3RlZDoK
KyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdvcmtlckNvbnRleHQ+IGNyZWF0ZVdvcmtlckNv
bnRleHQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29udGVudFNl
Y3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUpOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgU2hhcmVkV29ya2VyVGhyZWFkKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBHcm91cFNldHRpbmdz
KiwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJMb2FkZXJQcm94eSYsIFdvcmtlclJl
cG9ydGluZ1Byb3h5JiwgV29ya2VyVGhyZWFkU3RhcnRNb2RlLCBjb25zdCBTdHJpbmcmIGNvbnRl
bnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlKTsKKwor
ICAgICAgICBTdHJpbmcgbV9uYW1lOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCisKKyNlbmRpZiAvLyBTaGFyZWRXb3Jr
ZXJUaHJlYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dv
cmtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDI5OGYxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlci5jcHAKQEAgLTAsMCArMSwx
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoV09SS0VSUykKKworI2luY2x1ZGUgIldvcmtlci5oIgorCisjaW5jbHVkZSAiRE9NV2luZG93
LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5l
ci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUg
Ikluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgor
I2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHRQcm94eS5o
IgorI2luY2x1ZGUgIldvcmtlclNjcmlwdExvYWRlci5oIgorI2luY2x1ZGUgIldvcmtlclRocmVh
ZC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworaW5saW5lIFdvcmtlcjo6V29ya2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQp
CisgICAgOiBBYnN0cmFjdFdvcmtlcihjb250ZXh0KQorICAgICwgbV9jb250ZXh0UHJveHkoV29y
a2VyQ29udGV4dFByb3h5OjpjcmVhdGUodGhpcykpCit7Cit9CisKK1Bhc3NSZWZQdHI8V29ya2Vy
PiBXb3JrZXI6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIHVybCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgUmVmUHRyPFdvcmtlcj4gd29y
a2VyID0gYWRvcHRSZWYobmV3IFdvcmtlcihjb250ZXh0KSk7CisKKyAgICB3b3JrZXItPnN1c3Bl
bmRJZk5lZWRlZCgpOworCisgICAgS1VSTCBzY3JpcHRVUkwgPSB3b3JrZXItPnJlc29sdmVVUkwo
dXJsLCBlYyk7CisgICAgaWYgKHNjcmlwdFVSTC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgLy8gVGhlIHdvcmtlciBjb250ZXh0IGRvZXMgbm90IGV4aXN0IHdoaWxlIGxvYWRp
bmcsIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhlIHdvcmtlciBvYmplY3QgaXMgbm90IGNvbGxl
Y3RlZCwgbm9yIGFyZSBpdHMgZXZlbnQgbGlzdGVuZXJzLgorICAgIHdvcmtlci0+c2V0UGVuZGlu
Z0FjdGl2aXR5KHdvcmtlci5nZXQoKSk7CisKKyAgICB3b3JrZXItPm1fc2NyaXB0TG9hZGVyID0g
V29ya2VyU2NyaXB0TG9hZGVyOjpjcmVhdGUoKTsKKyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQor
ICAgIHdvcmtlci0+bV9zY3JpcHRMb2FkZXItPnNldFRhcmdldFR5cGUoUmVzb3VyY2VSZXF1ZXN0
OjpUYXJnZXRJc1dvcmtlcik7CisjZW5kaWYKKyAgICB3b3JrZXItPm1fc2NyaXB0TG9hZGVyLT5s
b2FkQXN5bmNocm9ub3VzbHkoY29udGV4dCwgc2NyaXB0VVJMLCBEZW55Q3Jvc3NPcmlnaW5SZXF1
ZXN0cywgd29ya2VyLmdldCgpKTsKKworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
Q3JlYXRlV29ya2VyKGNvbnRleHQsIHdvcmtlci0+YXNJRCgpLCBzY3JpcHRVUkwuc3RyaW5nKCks
IGZhbHNlKTsKKworICAgIHJldHVybiB3b3JrZXIucmVsZWFzZSgpOworfQorCitXb3JrZXI6On5X
b3JrZXIoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSk7IC8vIFRoZSBjb250ZXh0IGlzIHByb3RlY3RlZCBieSB3b3Jr
ZXIgY29udGV4dCBwcm94eSwgc28gaXQgY2Fubm90IGJlIGRlc3Ryb3llZCB3aGlsZSBhIFdvcmtl
ciBleGlzdHMuCisgICAgbV9jb250ZXh0UHJveHktPndvcmtlck9iamVjdERlc3Ryb3llZCgpOwor
fQorCitjb25zdCBBdG9taWNTdHJpbmcmIFdvcmtlcjo6aW50ZXJmYWNlTmFtZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXb3JrZXI7Cit9CisKKy8vIEZJ
WE1FOiByZW1vdmUgdGhpcyB3aGVuIHdlIHVwZGF0ZSB0aGUgT2JqQyBiaW5kaW5ncyAoYnVnICMy
ODc3NCkuCit2b2lkIFdvcmtlcjo6cG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBwb3J0LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRzOworICAgIGlmIChwb3J0KQorICAgICAgICBw
b3J0cy5hcHBlbmQocG9ydCk7CisgICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgJnBvcnRzLCBlYyk7
Cit9CisKK3ZvaWQgV29ya2VyOjpwb3N0TWVzc2FnZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcG9zdE1lc3NhZ2Uo
bWVzc2FnZSwgc3RhdGljX2Nhc3Q8TWVzc2FnZVBvcnRBcnJheSo+KDApLCBlYyk7Cit9CisKK3Zv
aWQgV29ya2VyOjpwb3N0TWVzc2FnZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
bWVzc2FnZSwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSogcG9ydHMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIC8vIERpc2VudGFuZ2xlIHRoZSBwb3J0IGluIHByZXBhcmF0aW9uIGZvciBzZW5k
aW5nIGl0IHRvIHRoZSByZW1vdGUgY29udGV4dC4KKyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFu
bmVsQXJyYXk+IGNoYW5uZWxzID0gTWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlUG9ydHMocG9ydHMs
IGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHRQcm94eS0+
cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQobWVzc2FnZSwgY2hhbm5lbHMucmVsZWFzZSgpKTsK
K30KKwordm9pZCBXb3JrZXI6OnRlcm1pbmF0ZSgpCit7CisgICAgbV9jb250ZXh0UHJveHktPnRl
cm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKK30KKworYm9vbCBXb3JrZXI6OmNhblN1c3BlbmQoKSBj
b25zdAoreworICAgIC8vIEZJWE1FOiBJdCBpcyBub3QgY3VycmVudGx5IHBvc3NpYmxlIHRvIHN1
c3BlbmQgYSB3b3JrZXIsIHNvIHBhZ2VzIHdpdGggd29ya2VycyBjYW4gbm90IGdvIGludG8gcGFn
ZSBjYWNoZS4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV29ya2VyOjpzdG9wKCkKK3sK
KyAgICB0ZXJtaW5hdGUoKTsKK30KKworYm9vbCBXb3JrZXI6Omhhc1BlbmRpbmdBY3Rpdml0eSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dFByb3h5LT5oYXNQZW5kaW5nQWN0aXZpdHko
KSB8fCBBY3RpdmVET01PYmplY3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOworfQorCit2b2lkIFdv
cmtlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRS
ZWNlaXZlU2NyaXB0UmVzcG9uc2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBpZGVudGlmaWVy
KTsKK30KKwordm9pZCBXb3JrZXI6Om5vdGlmeUZpbmlzaGVkKCkKK3sKKyAgICBpZiAobV9zY3Jp
cHRMb2FkZXItPmZhaWxlZCgpKQorICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCB0cnVlKSk7CisgICAgZWxzZSB7CisgICAg
ICAgIFdvcmtlclRocmVhZFN0YXJ0TW9kZSBzdGFydE1vZGUgPSBEb250UGF1c2VXb3JrZXJDb250
ZXh0T25TdGFydDsKKyAgICAgICAgaWYgKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c2hvdWxk
UGF1c2VEZWRpY2F0ZWRXb3JrZXJPblN0YXJ0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpCisg
ICAgICAgICAgICBzdGFydE1vZGUgPSBQYXVzZVdvcmtlckNvbnRleHRPblN0YXJ0OworICAgICAg
ICBtX2NvbnRleHRQcm94eS0+c3RhcnRXb3JrZXJDb250ZXh0KG1fc2NyaXB0TG9hZGVyLT51cmwo
KSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51c2VyQWdlbnQobV9zY3JpcHRMb2FkZXItPnVy
bCgpKSwgbV9zY3JpcHRMb2FkZXItPnNjcmlwdCgpLCBzdGFydE1vZGUpOworICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEltcG9ydGVkKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSwgbV9zY3JpcHRMb2FkZXItPmlkZW50aWZpZXIoKSwgbV9zY3JpcHRMb2FkZXItPnNjcmlw
dCgpKTsKKyAgICB9CisgICAgbV9zY3JpcHRMb2FkZXIgPSBudWxscHRyOworCisgICAgdW5zZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93b3JrZXJzL1dvcmtlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYTFhNjQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyLmgKQEAgLTAs
MCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaWZuZGVmIFdvcmtlcl9oCisjZGVmaW5l
IFdvcmtlcl9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIkFic3RyYWN0V29y
a2VyLmgiCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0
ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVy
Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
aWNTdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CisgICAgY2xhc3MgV29ya2VyQ29udGV4dFByb3h5OworICAgIGNs
YXNzIFdvcmtlclNjcmlwdExvYWRlcjsKKworICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
CisKKyAgICBjbGFzcyBXb3JrZXIgOiBwdWJsaWMgQWJzdHJhY3RXb3JrZXIsIHByaXZhdGUgV29y
a2VyU2NyaXB0TG9hZGVyQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdvcmtlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJp
bmcmIHVybCwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2aXJ0dWFsIH5Xb3JrZXIoKTsKKwor
ICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0
OworCisgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCBwb3N0TWVzc2Fn
ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgY29uc3QgTWVzc2Fn
ZVBvcnRBcnJheSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0
aGlzIHdoZW4gd2UgdXBkYXRlIHRoZSBPYmpDIGJpbmRpbmdzIChidWcgIzI4Nzc0KS4KKyAgICAg
ICAgdm9pZCBwb3N0TWVzc2FnZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVz
c2FnZSwgTWVzc2FnZVBvcnQqLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICAgICAgdm9pZCB0ZXJt
aW5hdGUoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KCkgY29uc3Q7CisgICAgCisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIobWVzc2FnZSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBXb3JrZXIoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCopOworCisgICAgICAgIC8vIFdvcmtlclNjcmlwdExvYWRlckNsaWVu
dCBjYWxsYmFja3MKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHJl
ZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVu
dFRhcmdldCgpIHsgZGVyZWYoKTsgfQorCisgICAgICAgIFJlZlB0cjxXb3JrZXJTY3JpcHRMb2Fk
ZXI+IG1fc2NyaXB0TG9hZGVyOworICAgICAgICBXb3JrZXJDb250ZXh0UHJveHkqIG1fY29udGV4
dFByb3h5OyAvLyBUaGUgcHJveHkgb3V0bGl2ZXMgdGhlIHdvcmtlciB0byBwZXJmb3JtIHRocmVh
ZCBzaHV0ZG93bi4KKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIFdvcmtlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd29ya2Vycy9Xb3JrZXIuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjA4MzM1M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dv
cmtlcnMvV29ya2VyLmlkbApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworbW9k
dWxlIHRocmVhZHMgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V09S
S0VSUywKKyAgICAgICAgQWN0aXZlRE9NT2JqZWN0LAorICAgICAgICBKU0N1c3RvbUNvbnN0cnVj
dG9yLAorICAgICAgICBDb25zdHJ1Y3RvcihpbiBET01TdHJpbmcgc2NyaXB0VXJsKSwKKyAgICAg
ICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwKKyAgICAgICAgQ29uc3RydWN0b3JS
YWlzZXNFeGNlcHRpb24sCisgICAgICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKKyAgICAg
ICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKKyAgICBdIFdvcmtlciA6IEFic3RyYWN0V29ya2VyIHsK
KworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7CisKKyNpZiBkZWZp
bmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExBTkdVQUdFX0pBVkFTQ1JJUFQKKyAgICAgICAg
W0N1c3RvbV0gdm9pZCBwb3N0TWVzc2FnZShpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgbWVzc2Fn
ZSwgaW4gW09wdGlvbmFsXSBBcnJheSBtZXNzYWdlUG9ydHMpCisgICAgICAgICAgICByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB3ZWJraXRQb3N0TWVzc2FnZShp
biBTZXJpYWxpemVkU2NyaXB0VmFsdWUgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBBcnJheSBtZXNz
YWdlUG9ydHMpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyNlbHNlCisgICAg
ICAgIC8vIFRoZXJlJ3Mgbm8gZ29vZCB3YXkgdG8gZXhwb3NlIGFuIGFycmF5IHZpYSB0aGUgT2Jq
QyBiaW5kaW5ncywgc28gZm9yIG5vdyBqdXN0IGFsbG93IHBhc3NpbmcgaW4gYSBzaW5nbGUgcG9y
dC4KKyAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgbWVz
c2FnZSwgaW4gW09wdGlvbmFsXSBNZXNzYWdlUG9ydCBtZXNzYWdlUG9ydCkKKyAgICAgICAgICAg
IHJhaXNlcyhET01FeGNlcHRpb24pOworI2VuZGlmCisKKyAgICAgICAgdm9pZCB0ZXJtaW5hdGUo
KTsKKyAgICB9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtl
cnMvV29ya2VyQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwYzE0
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmNwcApAQCAtMCwwICsxLDM2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiV29ya2Vy
Q29udGV4dC5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQ29u
dGVudFNlY3VyaXR5UG9saWN5LmgiCisjaW5jbHVkZSAiRE9NVGltZXIuaCIKKyNpbmNsdWRlICJE
T01VUkwuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJFcnJvckV2ZW50Lmgi
CisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1
ZGUgIkluc3BlY3RvckNvbnNvbGVJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgorI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5o
IgorI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5o
IgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiV29ya2VySW5zcGVjdG9y
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIldvcmtlckxvY2F0aW9uLmgiCisjaW5jbHVkZSAiV29y
a2VyTmF2aWdhdG9yLmgiCisjaW5jbHVkZSAiV29ya2VyT2JqZWN0UHJveHkuaCIKKyNpbmNsdWRl
ICJXb3JrZXJTY3JpcHRMb2FkZXIuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKyNpbmNs
dWRlICJXb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RF
eGNlcHRpb24uaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1VudXNl
ZFBhcmFtLmg+CisKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9O
T1RJRklDQVRJT05TKQorI2luY2x1ZGUgIk5vdGlmaWNhdGlvbkNlbnRlci5oIgorI2VuZGlmCisK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ2xvc2VXb3JrZXJDb250ZXh0VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDbG9zZVdvcmtlckNvbnRl
eHRUYXNrPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDbG9z
ZVdvcmtlckNvbnRleHRUYXNrKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRh
c2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCAqY29udGV4dCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CisgICAgICAgIFdvcmtlckNvbnRleHQqIHdv
cmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7CisgICAg
ICAgIC8vIE5vdGlmeSBwYXJlbnQgdGhhdCB0aGlzIGNvbnRleHQgaXMgY2xvc2VkLiBQYXJlbnQg
aXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgV29ya2VyVGhyZWFkOjpzdG9wKCkuCisgICAgICAg
IHdvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJSZXBvcnRpbmdQcm94eSgpLndvcmtlckNv
bnRleHRDbG9zZWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDbGVhbnVwVGFzaygp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK307CisKK1dvcmtlckNvbnRleHQ6OldvcmtlckNvbnRl
eHQoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgV29ya2VyVGhyZWFk
KiB0aHJlYWQsIGNvbnN0IFN0cmluZyYgcG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6Okhl
YWRlclR5cGUgY29udGVudFNlY3VyaXR5UG9saWN5VHlwZSkKKyAgICA6IG1fdXJsKHVybCkKKyAg
ICAsIG1fdXNlckFnZW50KHVzZXJBZ2VudCkKKyAgICAsIG1fc2NyaXB0KGFkb3B0UHRyKG5ldyBX
b3JrZXJTY3JpcHRDb250cm9sbGVyKHRoaXMpKSkKKyAgICAsIG1fdGhyZWFkKHRocmVhZCkKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICwgbV93b3JrZXJJbnNwZWN0b3JDb250cm9sbGVyKGFk
b3B0UHRyKG5ldyBXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyKHRoaXMpKSkKKyNlbmRpZgorICAg
ICwgbV9jbG9zaW5nKGZhbHNlKQorICAgICwgbV9ldmVudFF1ZXVlKFdvcmtlckV2ZW50UXVldWU6
OmNyZWF0ZSh0aGlzKSkKK3sKKyAgICBzZXRTZWN1cml0eU9yaWdpbihTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKHVybCkpOworICAgIHNldENvbnRlbnRTZWN1cml0eVBvbGljeShDb250ZW50U2VjdXJp
dHlQb2xpY3k6OmNyZWF0ZSh0aGlzKSk7CisgICAgY29udGVudFNlY3VyaXR5UG9saWN5KCktPmRp
ZFJlY2VpdmVIZWFkZXIocG9saWN5LCBjb250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKTsKK30KKwor
V29ya2VyQ29udGV4dDo6fldvcmtlckNvbnRleHQoKQoreworICAgIEFTU0VSVChjdXJyZW50VGhy
ZWFkKCkgPT0gdGhyZWFkKCktPnRocmVhZElEKCkpOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGhh
dmUgbm8gb2JzZXJ2ZXJzLgorICAgIG5vdGlmeU9ic2VydmVyc09mU3RvcCgpOworCisgICAgLy8g
Tm90aWZ5IHByb3h5IHRoYXQgd2UgYXJlIGdvaW5nIGF3YXkuIFRoaXMgY2FuIGZyZWUgdGhlIFdv
cmtlclRocmVhZCBvYmplY3QsIHNvIGRvIG5vdCBhY2Nlc3MgaXQgYWZ0ZXIgdGhpcy4KKyAgICB0
aHJlYWQoKS0+d29ya2VyUmVwb3J0aW5nUHJveHkoKS53b3JrZXJDb250ZXh0RGVzdHJveWVkKCk7
Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdvcmtlckNvbnRleHQ6OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFdvcmtlckNvbnRl
eHQqPih0aGlzKTsKK30KKworY29uc3QgS1VSTCYgV29ya2VyQ29udGV4dDo6dmlydHVhbFVSTCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsOworfQorCitLVVJMIFdvcmtlckNvbnRleHQ6OnZp
cnR1YWxDb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y29tcGxldGVVUkwodXJsKTsKK30KKworS1VSTCBXb3JrZXJDb250ZXh0Ojpjb21wbGV0ZVVSTChj
b25zdCBTdHJpbmcmIHVybCkgY29uc3QKK3sKKyAgICAvLyBBbHdheXMgcmV0dXJuIGEgbnVsbCBV
Ukwgd2hlbiBwYXNzZWQgYSBudWxsIHN0cmluZy4KKyAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNo
YW5nZSB0aGUgS1VSTCBjb25zdHJ1Y3RvciB0byBoYXZlIHRoaXMgYmVoYXZpb3I/CisgICAgaWYg
KHVybC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIEtVUkwoKTsKKyAgICAvLyBBbHdheXMgdXNl
IFVURi04IGluIFdvcmtlcnMuCisgICAgcmV0dXJuIEtVUkwobV91cmwsIHVybCk7Cit9CisKK1N0
cmluZyBXb3JrZXJDb250ZXh0Ojp1c2VyQWdlbnQoY29uc3QgS1VSTCYpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fdXNlckFnZW50OworfQorCit2b2lkIFdvcmtlckNvbnRleHQ6OmRpc2FibGVFdmFs
KCkKK3sKKyAgICBtX3NjcmlwdC0+ZGlzYWJsZUV2YWwoKTsKK30KKworV29ya2VyTG9jYXRpb24q
IFdvcmtlckNvbnRleHQ6OmxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbG9jYXRpb24p
CisgICAgICAgIG1fbG9jYXRpb24gPSBXb3JrZXJMb2NhdGlvbjo6Y3JlYXRlKG1fdXJsKTsKKyAg
ICByZXR1cm4gbV9sb2NhdGlvbi5nZXQoKTsKK30KKwordm9pZCBXb3JrZXJDb250ZXh0OjpjbG9z
ZSgpCit7CisgICAgaWYgKG1fY2xvc2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTGV0
IGN1cnJlbnQgc2NyaXB0IHJ1biB0byBjb21wbGV0aW9uIGJ1dCBwcmV2ZW50IGZ1dHVyZSBzY3Jp
cHQgZXZhbHVhdGlvbnMuCisgICAgLy8gQWZ0ZXIgbV9jbG9zaW5nIGlzIHNldCwgYWxsIHRoZSB0
YXNrcyBpbiB0aGUgcXVldWUgY29udGludWUgdG8gYmUgZmV0Y2hlZCBidXQgb25seQorICAgIC8v
IHRhc2tzIHdpdGggaXNDbGVhbnVwVGFzaygpPT10cnVlIHdpbGwgYmUgZXhlY3V0ZWQuCisgICAg
bV9jbG9zaW5nID0gdHJ1ZTsKKyAgICBwb3N0VGFzayhDbG9zZVdvcmtlckNvbnRleHRUYXNrOjpj
cmVhdGUoKSk7Cit9CisKK1dvcmtlck5hdmlnYXRvciogV29ya2VyQ29udGV4dDo6bmF2aWdhdG9y
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbmF2aWdhdG9yKQorICAgICAgICBtX25hdmlnYXRvciA9
IFdvcmtlck5hdmlnYXRvcjo6Y3JlYXRlKG1fdXNlckFnZW50KTsKKyAgICByZXR1cm4gbV9uYXZp
Z2F0b3IuZ2V0KCk7Cit9CisKK2Jvb2wgV29ya2VyQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5
KCkgY29uc3QKK3sKKyAgICBBY3RpdmVET01PYmplY3RzTWFwJiBhY3RpdmVPYmplY3RzID0gYWN0
aXZlRE9NT2JqZWN0cygpOworICAgIEFjdGl2ZURPTU9iamVjdHNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGFjdGl2ZU9iamVjdHNFbmQgPSBhY3RpdmVPYmplY3RzLmVuZCgpOworICAgIGZvciAoQWN0aXZl
RE9NT2JqZWN0c01hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGFjdGl2ZU9iamVjdHMuYmVnaW4o
KTsgaXRlciAhPSBhY3RpdmVPYmplY3RzRW5kOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXIt
PmZpcnN0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIEhhc2hTZXQ8TWVzc2FnZVBvcnQqPjo6Y29uc3RfaXRlcmF0b3IgbWVzc2Fn
ZVBvcnRzRW5kID0gbWVzc2FnZVBvcnRzKCkuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PE1lc3Nh
Z2VQb3J0Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtZXNzYWdlUG9ydHMoKS5iZWdpbigpOyBp
dGVyICE9IG1lc3NhZ2VQb3J0c0VuZDsgKytpdGVyKSB7CisgICAgICAgIGlmICgoKml0ZXIpLT5o
YXNQZW5kaW5nQWN0aXZpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXb3JrZXJDb250ZXh0Ojpwb3N0VGFzayhQYXNz
T3duUHRyPFRhc2s+IHRhc2spCit7CisgICAgdGhyZWFkKCktPnJ1bkxvb3AoKS5wb3N0VGFzayh0
YXNrKTsKK30KKworaW50IFdvcmtlckNvbnRleHQ6OnNldFRpbWVvdXQoUGFzc093blB0cjxTY2hl
ZHVsZWRBY3Rpb24+IGFjdGlvbiwgaW50IHRpbWVvdXQpCit7CisgICAgcmV0dXJuIERPTVRpbWVy
OjppbnN0YWxsKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYWN0aW9uLCB0aW1lb3V0LCB0cnVl
KTsKK30KKwordm9pZCBXb3JrZXJDb250ZXh0OjpjbGVhclRpbWVvdXQoaW50IHRpbWVvdXRJZCkK
K3sKKyAgICBET01UaW1lcjo6cmVtb3ZlQnlJZChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRp
bWVvdXRJZCk7Cit9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQordm9pZCBXb3JrZXJDb250ZXh0
OjpjbGVhckluc3BlY3RvcigpCit7CisgICAgbV93b3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmNs
ZWFyKCk7Cit9CisjZW5kaWYKKworaW50IFdvcmtlckNvbnRleHQ6OnNldEludGVydmFsKFBhc3NP
d25QdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24sIGludCB0aW1lb3V0KQoreworICAgIHJldHVy
biBET01UaW1lcjo6aW5zdGFsbChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGFjdGlvbiwgdGlt
ZW91dCwgZmFsc2UpOworfQorCit2b2lkIFdvcmtlckNvbnRleHQ6OmNsZWFySW50ZXJ2YWwoaW50
IHRpbWVvdXRJZCkKK3sKKyAgICBET01UaW1lcjo6cmVtb3ZlQnlJZChzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCksIHRpbWVvdXRJZCk7Cit9CisKK3ZvaWQgV29ya2VyQ29udGV4dDo6aW1wb3J0U2Ny
aXB0cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgdXJscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgZWMgPSAwOworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciB1cmxzRW5kID0g
dXJscy5lbmQoKTsKKyAgICBWZWN0b3I8S1VSTD4gY29tcGxldGVkVVJMczsKKyAgICBmb3IgKFZl
Y3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHVybHMuYmVnaW4oKTsgaXQgIT0gdXJs
c0VuZDsgKytpdCkgeworICAgICAgICBjb25zdCBLVVJMJiB1cmwgPSBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmNvbXBsZXRlVVJMKCppdCk7CisgICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkg
eworICAgICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGNvbXBsZXRlZFVSTHMuYXBwZW5kKHVybCk7CisgICAgfQorICAgIFZl
Y3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY29tcGxldGVkVVJMcy5lbmQoKTsKKwor
ICAgIGZvciAoVmVjdG9yPEtVUkw+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNvbXBsZXRlZFVSTHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlZlB0cjxXb3JrZXJTY3JpcHRM
b2FkZXI+IHNjcmlwdExvYWRlcihXb3JrZXJTY3JpcHRMb2FkZXI6OmNyZWF0ZSgpKTsKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICAgICAgc2NyaXB0
TG9hZGVyLT5zZXRUYXJnZXRUeXBlKFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNTY3JpcHQpOwor
I2VuZGlmCisgICAgICAgIHNjcmlwdExvYWRlci0+bG9hZFN5bmNocm9ub3VzbHkoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCAqaXQsIEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0cyk7CisKKyAgICAg
ICAgLy8gSWYgdGhlIGZldGNoaW5nIGF0dGVtcHQgZmFpbGVkLCB0aHJvdyBhIE5FVFdPUktfRVJS
IGV4Y2VwdGlvbiBhbmQgYWJvcnQgYWxsIHRoZXNlIHN0ZXBzLgorICAgICAgICBpZiAoc2NyaXB0
TG9hZGVyLT5mYWlsZWQoKSkgeworICAgICAgICAgICAgZWMgPSBYTUxIdHRwUmVxdWVzdEV4Y2Vw
dGlvbjo6TkVUV09SS19FUlI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNjcmlwdEltcG9ydGVkKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgc2NyaXB0TG9hZGVyLT5pZGVudGlmaWVyKCksIHNjcmlwdExvYWRlci0+
c2NyaXB0KCkpOworCisgICAgICAgIFNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsKKyAgICAgICAgbV9z
Y3JpcHQtPmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSwg
c2NyaXB0TG9hZGVyLT5yZXNwb25zZVVSTCgpKSwgJmV4Y2VwdGlvbik7CisgICAgICAgIGlmICgh
ZXhjZXB0aW9uLmhhc05vVmFsdWUoKSkgeworICAgICAgICAgICAgbV9zY3JpcHQtPnNldEV4Y2Vw
dGlvbihleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
fQorCitFdmVudFRhcmdldCogV29ya2VyQ29udGV4dDo6ZXJyb3JFdmVudFRhcmdldCgpCit7Cisg
ICAgcmV0dXJuIHRoaXM7Cit9CisKK3ZvaWQgV29ya2VyQ29udGV4dDo6bG9nRXhjZXB0aW9uVG9D
b25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgaW50IGxpbmVOdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPikKK3sKKyAgICB0
aHJlYWQoKS0+d29ya2VyUmVwb3J0aW5nUHJveHkoKS5wb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmpl
Y3QoZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworfQorCit2b2lkIFdvcmtl
ckNvbnRleHQ6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5
cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxs
U3RhY2s+IGNhbGxTdGFjaykKK3sKKyAgICBpZiAoIWlzQ29udGV4dFRocmVhZCgpKSB7CisgICAg
ICAgIHBvc3RUYXNrKEFkZENvbnNvbGVNZXNzYWdlVGFzazo6Y3JlYXRlKHNvdXJjZSwgdHlwZSwg
bGV2ZWwsIG1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aHJlYWQoKS0+
d29ya2VyUmVwb3J0aW5nUHJveHkoKS5wb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChz
b3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworICAg
IGFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwg
c291cmNlVVJMLCBsaW5lTnVtYmVyLCBjYWxsU3RhY2spOworfQorCit2b2lkIFdvcmtlckNvbnRl
eHQ6OmFkZE1lc3NhZ2VUb1dvcmtlckNvbnNvbGUoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3Nh
Z2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgUGFzc1JlZlB0cjxT
Y3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKK3sKKyAgICBBU1NFUlQoaXNDb250ZXh0VGhyZWFk
KCkpOworICAgIGlmIChjYWxsU3RhY2spCisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6YWRkTWVzc2FnZVRvQ29uc29sZSh0aGlzLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdl
LCAwLCBjYWxsU3RhY2spOworICAgIGVsc2UKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjphZGRNZXNzYWdlVG9Db25zb2xlKHRoaXMsIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3Nh
Z2UsIHNvdXJjZVVSTCwgbGluZU51bWJlcik7Cit9CisKK2Jvb2wgV29ya2VyQ29udGV4dDo6aXND
b250ZXh0VGhyZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY3VycmVudFRocmVhZCgpID09IHRo
cmVhZCgpLT50aHJlYWRJRCgpOworfQorCitib29sIFdvcmtlckNvbnRleHQ6OmlzSlNFeGVjdXRp
b25Gb3JiaWRkZW4oKSBjb25zdAoreworICAgIHJldHVybiBtX3NjcmlwdC0+aXNFeGVjdXRpb25G
b3JiaWRkZW4oKTsKK30KKworRXZlbnRUYXJnZXREYXRhKiBXb3JrZXJDb250ZXh0OjpldmVudFRh
cmdldERhdGEoKQoreworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9CisKK0V2ZW50
VGFyZ2V0RGF0YSogV29ya2VyQ29udGV4dDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKK3sKKyAg
ICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOworfQorCitXb3JrZXJDb250ZXh0OjpPYnNlcnZl
cjo6T2JzZXJ2ZXIoV29ya2VyQ29udGV4dCogY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250
ZXh0KQoreworICAgIEFTU0VSVChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pc0NvbnRleHRUaHJl
YWQoKSk7CisgICAgbV9jb250ZXh0LT5yZWdpc3Rlck9ic2VydmVyKHRoaXMpOworfQorCitXb3Jr
ZXJDb250ZXh0OjpPYnNlcnZlcjo6fk9ic2VydmVyKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dCkK
KyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgp
KTsKKyAgICBtX2NvbnRleHQtPnVucmVnaXN0ZXJPYnNlcnZlcih0aGlzKTsKK30KKwordm9pZCBX
b3JrZXJDb250ZXh0OjpPYnNlcnZlcjo6c3RvcE9ic2VydmluZygpCit7CisgICAgaWYgKCFtX2Nv
bnRleHQpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9jb250ZXh0LT5pc0NvbnRleHRU
aHJlYWQoKSk7CisgICAgbV9jb250ZXh0LT51bnJlZ2lzdGVyT2JzZXJ2ZXIodGhpcyk7CisgICAg
bV9jb250ZXh0ID0gMDsKK30KKwordm9pZCBXb3JrZXJDb250ZXh0OjpyZWdpc3Rlck9ic2VydmVy
KE9ic2VydmVyKiBvYnNlcnZlcikKK3sKKyAgICBBU1NFUlQob2JzZXJ2ZXIpOworICAgIG1fd29y
a2VyT2JzZXJ2ZXJzLmFkZChvYnNlcnZlcik7Cit9CisKK3ZvaWQgV29ya2VyQ29udGV4dDo6dW5y
ZWdpc3Rlck9ic2VydmVyKE9ic2VydmVyKiBvYnNlcnZlcikKK3sKKyAgICBBU1NFUlQob2JzZXJ2
ZXIpOworICAgIG1fd29ya2VyT2JzZXJ2ZXJzLnJlbW92ZShvYnNlcnZlcik7Cit9CisKK3ZvaWQg
V29ya2VyQ29udGV4dDo6bm90aWZ5T2JzZXJ2ZXJzT2ZTdG9wKCkKK3sKKyAgICBIYXNoU2V0PE9i
c2VydmVyKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3dvcmtlck9ic2VydmVycy5iZWdpbigpOworICAg
IHdoaWxlIChpdGVyICE9IG1fd29ya2VyT2JzZXJ2ZXJzLmVuZCgpKSB7CisgICAgICAgIFdvcmtl
ckNvbnRleHQ6Ok9ic2VydmVyKiBvYnNlcnZlciA9ICppdGVyOworICAgICAgICBvYnNlcnZlci0+
c3RvcE9ic2VydmluZygpOworICAgICAgICBvYnNlcnZlci0+bm90aWZ5U3RvcCgpOworICAgICAg
ICBpdGVyID0gbV93b3JrZXJPYnNlcnZlcnMuYmVnaW4oKTsKKyAgICB9Cit9CisKK1dvcmtlckV2
ZW50UXVldWUqIFdvcmtlckNvbnRleHQ6OmV2ZW50UXVldWUoKSBjb25zdAoreworICAgIHJldHVy
biBtX2V2ZW50UXVldWUuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIy
ZjZhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9X
b3JrZXJDb250ZXh0LmgKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZu
ZGVmIFdvcmtlckNvbnRleHRfaAorI2RlZmluZSBXb3JrZXJDb250ZXh0X2gKKworI2lmIEVOQUJM
RShXT1JLRVJTKQorCisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCisjaW5jbHVk
ZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJF
dmVudFRhcmdldC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNs
dWRlICJXb3JrZXJFdmVudFF1ZXVlLmgiCisjaW5jbHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworICAgIGNsYXNzIEJsb2I7CisgICAgY2xhc3MgRE9NVVJMOworICAgIGNsYXNzIFNjaGVk
dWxlZEFjdGlvbjsKKyAgICBjbGFzcyBXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyOworICAgIGNs
YXNzIFdvcmtlckxvY2F0aW9uOworICAgIGNsYXNzIFdvcmtlck5hdmlnYXRvcjsKKyAgICBjbGFz
cyBXb3JrZXJUaHJlYWQ7CisKKyAgICBjbGFzcyBXb3JrZXJDb250ZXh0IDogcHVibGljIFJlZkNv
dW50ZWQ8V29ya2VyQ29udGV4dD4sIHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0LCBwdWJs
aWMgRXZlbnRUYXJnZXQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+V29ya2VyQ29u
dGV4dCgpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1dvcmtlckNvbnRleHQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBib29s
IGlzU2hhcmVkV29ya2VyQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0RlZGljYXRlZFdvcmtlckNvbnRleHQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorCisgICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJs
OyB9CisgICAgICAgIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJikgY29uc3Q7CisKKyAg
ICAgICAgdmlydHVhbCBTdHJpbmcgdXNlckFnZW50KGNvbnN0IEtVUkwmKSBjb25zdDsKKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZUV2YWwoKTsKKworICAgICAgICBXb3JrZXJTY3JpcHRD
b250cm9sbGVyKiBzY3JpcHQoKSB7IHJldHVybiBtX3NjcmlwdC5nZXQoKTsgfQorICAgICAgICB2
b2lkIGNsZWFyU2NyaXB0KCkgeyBtX3NjcmlwdC5jbGVhcigpOyB9CisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKyAgICAgICAgdm9pZCBjbGVhckluc3BlY3RvcigpOworI2VuZGlmCisKKyAgICAgICAg
V29ya2VyVGhyZWFkKiB0aHJlYWQoKSBjb25zdCB7IHJldHVybiBtX3RocmVhZDsgfQorCisgICAg
ICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4pOyAvLyBFeGVjdXRlcyB0aGUgdGFzayBvbiBj
b250ZXh0J3MgdGhyZWFkIGFzeW5jaHJvbm91c2x5LgorCisgICAgICAgIC8vIFdvcmtlckdsb2Jh
bFNjb3BlCisgICAgICAgIFdvcmtlckNvbnRleHQqIHNlbGYoKSB7IHJldHVybiB0aGlzOyB9Cisg
ICAgICAgIFdvcmtlckxvY2F0aW9uKiBsb2NhdGlvbigpIGNvbnN0OworICAgICAgICB2b2lkIGNs
b3NlKCk7CisKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJvcik7
CisKKyAgICAgICAgLy8gV29ya2VyVXRpbHMKKyAgICAgICAgdmlydHVhbCB2b2lkIGltcG9ydFNj
cmlwdHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHVybHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAg
ICAgV29ya2VyTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSBjb25zdDsKKworICAgICAgICAvLyBUaW1l
cnMKKyAgICAgICAgaW50IHNldFRpbWVvdXQoUGFzc093blB0cjxTY2hlZHVsZWRBY3Rpb24+LCBp
bnQgdGltZW91dCk7CisgICAgICAgIHZvaWQgY2xlYXJUaW1lb3V0KGludCB0aW1lb3V0SWQpOwor
ICAgICAgICBpbnQgc2V0SW50ZXJ2YWwoUGFzc093blB0cjxTY2hlZHVsZWRBY3Rpb24+LCBpbnQg
dGltZW91dCk7CisgICAgICAgIHZvaWQgY2xlYXJJbnRlcnZhbChpbnQgdGltZW91dElkKTsKKwor
ICAgICAgICAvLyBTY3JpcHRFeGVjdXRpb25Db250ZXh0CisgICAgICAgIHZpcnR1YWwgV29ya2Vy
RXZlbnRRdWV1ZSogZXZlbnRRdWV1ZSgpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgYm9vbCBp
c0NvbnRleHRUaHJlYWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRp
b25Gb3JiaWRkZW4oKSBjb25zdDsKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgICAgIFdv
cmtlckluc3BlY3RvckNvbnRyb2xsZXIqIHdvcmtlckluc3BlY3RvckNvbnRyb2xsZXIoKSB7IHJl
dHVybiBtX3dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuZ2V0KCk7IH0KKyNlbmRpZgorICAgICAg
ICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGZvciBHQyBtYXJraW5nLiBTZWUgSlNXb3JrZXJD
b250ZXh0Ojp2aXNpdENoaWxkcmVuVmlydHVhbChTbG90VmlzaXRvciYpIGluCisgICAgICAgIC8v
IEpTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAuCisgICAgICAgIFdvcmtlck5hdmlnYXRvciogb3B0
aW9uYWxOYXZpZ2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRvci5nZXQoKTsgfQorICAg
ICAgICBXb3JrZXJMb2NhdGlvbiogb3B0aW9uYWxMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
bG9jYXRpb24uZ2V0KCk7IH0KKworICAgICAgICB1c2luZyBSZWZDb3VudGVkPFdvcmtlckNvbnRl
eHQ+OjpyZWY7CisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8V29ya2VyQ29udGV4dD46OmRlcmVm
OworCisgICAgICAgIGJvb2wgaXNDbG9zaW5nKCkgeyByZXR1cm4gbV9jbG9zaW5nOyB9CisKKyAg
ICAgICAgLy8gQW4gb2JzZXJ2ZXIgaW50ZXJmYWNlIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIHdv
cmtlciB0aHJlYWQgaXMgZ2V0dGluZyBzdG9wcGVkLgorICAgICAgICBjbGFzcyBPYnNlcnZlciB7
CisgICAgICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPYnNlcnZlcik7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIE9ic2VydmVyKFdvcmtlckNvbnRleHQqKTsKKyAgICAgICAgICAg
IHZpcnR1YWwgfk9ic2VydmVyKCk7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3Rv
cCgpID0gMDsKKyAgICAgICAgICAgIHZvaWQgc3RvcE9ic2VydmluZygpOworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgV29ya2VyQ29udGV4dCogbV9jb250ZXh0OworICAgICAgICB9Owor
ICAgICAgICBmcmllbmQgY2xhc3MgT2JzZXJ2ZXI7CisgICAgICAgIHZvaWQgcmVnaXN0ZXJPYnNl
cnZlcihPYnNlcnZlciopOworICAgICAgICB2b2lkIHVucmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZl
ciopOworICAgICAgICB2b2lkIG5vdGlmeU9ic2VydmVyc09mU3RvcCgpOworCisgICAgcHJvdGVj
dGVkOgorICAgICAgICBXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBX
b3JrZXJUaHJlYWQqLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVu
dFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgbG9n
RXhjZXB0aW9uVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNr
Pik7CisgICAgICAgIHZvaWQgYWRkTWVzc2FnZVRvV29ya2VyQ29uc29sZShNZXNzYWdlU291cmNl
LCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlw
dENhbGxTdGFjaz4pOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB7IHJlZigpOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
ZXJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB7IGRlcmVmKCk7IH0KKworICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAgICAgIHZpcnR1YWwgRXZlbnRU
YXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKKyAgICAgICAgdmlydHVhbCBFdmVudFRhcmdl
dERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOworCisgICAgICAgIHZpcnR1YWwgY29uc3Qg
S1VSTCYgdmlydHVhbFVSTCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEtVUkwgdmlydHVhbENv
bXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBh
ZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPik7CisKKyAgICAgICAgdmlydHVhbCBF
dmVudFRhcmdldCogZXJyb3JFdmVudFRhcmdldCgpOworCisgICAgICAgIEtVUkwgbV91cmw7Cisg
ICAgICAgIFN0cmluZyBtX3VzZXJBZ2VudDsKKworICAgICAgICBtdXRhYmxlIFJlZlB0cjxXb3Jr
ZXJMb2NhdGlvbj4gbV9sb2NhdGlvbjsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8V29ya2VyTmF2
aWdhdG9yPiBtX25hdmlnYXRvcjsKKworICAgICAgICBPd25QdHI8V29ya2VyU2NyaXB0Q29udHJv
bGxlcj4gbV9zY3JpcHQ7CisgICAgICAgIFdvcmtlclRocmVhZCogbV90aHJlYWQ7CisKKyNpZiBF
TkFCTEUoQkxPQikKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8RE9NVVJMPiBtX2RvbVVSTDsKKyNl
bmRpZgorI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgICAgIE93blB0cjxXb3JrZXJJbnNwZWN0
b3JDb250cm9sbGVyPiBtX3dvcmtlckluc3BlY3RvckNvbnRyb2xsZXI7CisjZW5kaWYKKyAgICAg
ICAgYm9vbCBtX2Nsb3Npbmc7CisgICAgICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0
RGF0YTsKKworICAgICAgICBIYXNoU2V0PE9ic2VydmVyKj4gbV93b3JrZXJPYnNlcnZlcnM7CisK
KyAgICAgICAgT3duUHRyPFdvcmtlckV2ZW50UXVldWU+IG1fZXZlbnRRdWV1ZTsKKyAgICB9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKwor
I2VuZGlmIC8vIFdvcmtlckNvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjY1YTY0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5pZGwKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKwor
bW9kdWxlIHRocmVhZHMgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9
V09SS0VSUywKKyAgICAgICAgSlNDdXN0b21NYXJrRnVuY3Rpb24sCisgICAgICAgIEpTQ3VzdG9t
R2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKKyAgICAgICAgRXZlbnRUYXJnZXQsCisg
ICAgICAgIEV4dGVuZHNET01HbG9iYWxPYmplY3QsCisgICAgICAgIElzV29ya2VyQ29udGV4dCwK
KyAgICAgICAgSlNMZWdhY3lQYXJlbnQ9SlNXb3JrZXJDb250ZXh0QmFzZSwKKyAgICAgICAgSlNO
b1N0YXRpY1RhYmxlcywKKyAgICAgICAgT21pdENvbnN0cnVjdG9yLAorICAgICAgICBWOEN1c3Rv
bVRvSlNPYmplY3QKKyAgICBdIFdvcmtlckNvbnRleHQgeworCisgICAgICAgIC8vIFdvcmtlckds
b2JhbFNjb3BlCisjaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5HVUFHRV9K
QVZBU0NSSVBUCisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbUmVwbGFjZWFibGVdIFdvcmtl
ckNvbnRleHQgc2VsZjsKKyNlbmRpZgorICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW1JlcGxh
Y2VhYmxlXSBXb3JrZXJMb2NhdGlvbiBsb2NhdGlvbjsKKyAgICAgICAgdm9pZCBjbG9zZSgpOwor
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOworCisgICAg
ICAgIC8vIFdvcmtlclV0aWxzCisgICAgICAgIFtDdXN0b21dIHZvaWQgaW1wb3J0U2NyaXB0cygv
KltWYXJpYWRpY10gaW4gRE9NU3RyaW5nIHVybHMgKi8pOworICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGUgW1JlcGxhY2VhYmxlXSBXb3JrZXJOYXZpZ2F0b3IgbmF2aWdhdG9yOworCisgICAgICAg
IC8vIFRpbWVycworICAgICAgICBbQ3VzdG9tXSBsb25nIHNldFRpbWVvdXQoaW4gVGltZW91dEhh
bmRsZXIgaGFuZGxlciwgaW4gbG9uZyB0aW1lb3V0KTsKKyAgICAgICAgLy8gW0N1c3RvbV0gbG9u
ZyBzZXRUaW1lb3V0KGluIERPTVN0cmluZyBjb2RlLCBpbiBsb25nIHRpbWVvdXQpOworICAgICAg
ICB2b2lkIGNsZWFyVGltZW91dChpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSBsb25n
IGhhbmRsZSk7CisgICAgICAgIFtDdXN0b21dIGxvbmcgc2V0SW50ZXJ2YWwoaW4gVGltZW91dEhh
bmRsZXIgaGFuZGxlciwgaW4gbG9uZyB0aW1lb3V0KTsKKyAgICAgICAgLy8gW0N1c3RvbV0gbG9u
ZyBzZXRJbnRlcnZhbChpbiBET01TdHJpbmcgY29kZSwgaW4gbG9uZyB0aW1lb3V0KTsKKyAgICAg
ICAgdm9pZCBjbGVhckludGVydmFsKGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIGxv
bmcgaGFuZGxlKTsKKworCisgICAgICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQorICAgICAg
ICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Cisg
ICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9vbGVhbiB1
c2VDYXB0dXJlKTsKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2dCkK
KyAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisKKyNpZiAhZGVmaW5lZChMQU5H
VUFHRV9DUFApIHx8ICFMQU5HVUFHRV9DUFAKKyAgICAgICAgLy8gQ29uc3RydWN0b3JzCisgICAg
ICAgIGF0dHJpYnV0ZSBNZXNzYWdlRXZlbnRDb25zdHJ1Y3RvciBNZXNzYWdlRXZlbnQ7CisgICAg
ICAgIGF0dHJpYnV0ZSBXb3JrZXJMb2NhdGlvbkNvbnN0cnVjdG9yIFdvcmtlckxvY2F0aW9uOwor
CisjaWYgRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HCisgICAgICAgIGF0dHJpYnV0ZSBbSlNDdXN0
b21HZXR0ZXJdIE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IgTWVzc2FnZUNoYW5uZWw7CisjZW5k
aWYKKyAgICAgICAgYXR0cmlidXRlIFtKU0N1c3RvbUdldHRlcl0gRXZlbnRTb3VyY2VDb25zdHJ1
Y3RvciBFdmVudFNvdXJjZTsKKyAgICAgICAgYXR0cmlidXRlIFtKU0N1c3RvbUdldHRlcl0gWE1M
SHR0cFJlcXVlc3RDb25zdHJ1Y3RvciBYTUxIdHRwUmVxdWVzdDsKKyNlbmRpZgorCisjaWYgZGVm
aW5lZChFTkFCTEVfQkxPQikgJiYgRU5BQkxFX0JMT0IKKyAgICAgICAgYXR0cmlidXRlIFtDb25k
aXRpb25hbD1MRUdBQ1lfV0VCS0lUX0JMT0JfQlVJTERFUl0gV2ViS2l0QmxvYkJ1aWxkZXJDb25z
dHJ1Y3RvciBXZWJLaXRCbG9iQnVpbGRlcjsKKyAgICAgICAgYXR0cmlidXRlIEJsb2JDb25zdHJ1
Y3RvciBCbG9iOworICAgICAgICBhdHRyaWJ1dGUgRmlsZVJlYWRlckNvbnN0cnVjdG9yIEZpbGVS
ZWFkZXI7CisgICAgICAgIGF0dHJpYnV0ZSBGaWxlUmVhZGVyU3luY0NvbnN0cnVjdG9yIEZpbGVS
ZWFkZXJTeW5jOworI2VuZGlmCisKKyAgICAgICAgYXR0cmlidXRlIFtDb25kaXRpb25hbD1CTE9C
XSBET01VUkxDb25zdHJ1Y3RvciB3ZWJraXRVUkw7CisKKyAgICAgICAgYXR0cmlidXRlIEFycmF5
QnVmZmVyQ29uc3RydWN0b3IgQXJyYXlCdWZmZXI7IC8vIFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRv
cgorICAgICAgICBhdHRyaWJ1dGUgSW50OEFycmF5Q29uc3RydWN0b3IgSW50OEFycmF5OyAvLyBV
c2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRlIFVpbnQ4QXJyYXlDb25z
dHJ1Y3RvciBVaW50OEFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKKyAgICAgICAg
YXR0cmlidXRlIFVpbnQ4QXJyYXlDb25zdHJ1Y3RvciBVaW50OENsYW1wZWRBcnJheTsgLy8gVXNh
YmxlIHdpdGggbmV3IG9wZXJhdG9yCisgICAgICAgIGF0dHJpYnV0ZSBJbnQxNkFycmF5Q29uc3Ry
dWN0b3IgSW50MTZBcnJheTsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCisgICAgICAgIGF0
dHJpYnV0ZSBVaW50MTZBcnJheUNvbnN0cnVjdG9yIFVpbnQxNkFycmF5OyAvLyBVc2FibGUgd2l0
aCBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRlIEludDMyQXJyYXlDb25zdHJ1Y3RvciBJ
bnQzMkFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRl
IFVpbnQzMkFycmF5Q29uc3RydWN0b3IgVWludDMyQXJyYXk7IC8vIFVzYWJsZSB3aXRoIG5ldyBv
cGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgRmxvYXQzMkFycmF5Q29uc3RydWN0b3IgRmxvYXQz
MkFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRlIEZs
b2F0NjRBcnJheUNvbnN0cnVjdG9yIEZsb2F0NjRBcnJheTsgLy8gVXNhYmxlIHdpdGggbmV3IG9w
ZXJhdG9yCisgICAgICAgIGF0dHJpYnV0ZSBEYXRhVmlld0NvbnN0cnVjdG9yIERhdGFWaWV3OyAv
LyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKKyAgICB9OworCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyQ29udGV4dFByb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyQ29udGV4dFByb3h5LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5NzZhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaApAQCAtMCwwICsx
LDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXb3JrZXJDb250ZXh0UHJveHlfaAorI2RlZmluZSBXb3JrZXJDb250ZXh0
UHJveHlfaAorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5o
IgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAg
Y2xhc3MgS1VSTDsKKyAgICBjbGFzcyBXb3JrZXI7CisKKyAgICAvLyBBIHByb3h5IHRvIHRhbGsg
dG8gdGhlIHdvcmtlciBjb250ZXh0LgorICAgIGNsYXNzIFdvcmtlckNvbnRleHRQcm94eSB7Cisg
ICAgcHVibGljOgorICAgICAgICBzdGF0aWMgV29ya2VyQ29udGV4dFByb3h5KiBjcmVhdGUoV29y
a2VyKik7CisKKyAgICAgICAgdmlydHVhbCB+V29ya2VyQ29udGV4dFByb3h5KCkge30KKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlwdFVS
TCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29y
a2VyVGhyZWFkU3RhcnRNb2RlKSA9IDA7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0
ZVdvcmtlckNvbnRleHQoKSA9IDA7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdl
VG9Xb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc093
blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4pID0gMDsKKworICAgICAgICB2aXJ0dWFsIGJv
b2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgPSAwOworCisgICAgICAgIHZpcnR1YWwgdm9p
ZCB3b3JrZXJPYmplY3REZXN0cm95ZWQoKSA9IDA7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
ICAgICAgICBjbGFzcyBQYWdlSW5zcGVjdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgdmlydHVhbCB+UGFnZUluc3BlY3RvcigpIHsgfQorICAgICAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoTWVzc2FnZUZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJikgPSAwOworICAgICAgICB9
OworICAgICAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdFRvSW5zcGVjdG9yKFBhZ2VJbnNwZWN0b3Iq
KSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RGcm9tSW5zcGVjdG9yKCkgeyB9
CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvSW5zcGVjdG9yKGNvbnN0IFN0cmlu
ZyYpIHsgfQorI2VuZGlmCisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNlbmRpZiAvLyBXb3JrZXJDb250ZXh0UHJveHlfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlckV2ZW50UXVl
dWUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YTkzMDcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1
ZS5jcHAKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXb3JrZXJFdmVudFF1ZXVlLmgiCisKKyNpbmNsdWRlICJET01XaW5kb3cu
aCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQYXNzT3duUHRyPFdvcmtlckV2ZW50UXVldWU+IFdvcmtlckV2
ZW50UXVldWU6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgV29ya2VyRXZlbnRRdWV1ZShjb250ZXh0KSk7Cit9CisKK1dv
cmtlckV2ZW50UXVldWU6OldvcmtlckV2ZW50UXVldWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKKyAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgICwg
bV9pc0Nsb3NlZChmYWxzZSkKK3sKK30KKworV29ya2VyRXZlbnRRdWV1ZTo6fldvcmtlckV2ZW50
UXVldWUoKQoreworICAgIGNsb3NlKCk7Cit9CisKK2NsYXNzIFdvcmtlckV2ZW50UXVldWU6OkV2
ZW50RGlzcGF0Y2hlclRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RXZlbnREaXNwYXRjaGVyVGFzaz4gY3Jl
YXRlKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBXb3JrZXJFdmVudFF1ZXVlKiBldmVudFF1ZXVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFdmVudERpc3BhdGNoZXJUYXNr
KGV2ZW50LCBldmVudFF1ZXVlKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+RXZlbnREaXNwYXRj
aGVyVGFzaygpCisgICAgeworICAgICAgICBpZiAobV9ldmVudCkKKyAgICAgICAgICAgIG1fZXZl
bnRRdWV1ZS0+cmVtb3ZlRXZlbnQobV9ldmVudC5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBk
aXNwYXRjaEV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKKyAgICB7CisgICAgICAgIGV2ZW50LT50YXJnZXQoKS0+ZGlzcGF0Y2hFdmVudChldmVu
dCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCisgICAgeworICAgICAgICBpZiAobV9pc0NhbmNlbGxlZCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9ldmVudFF1ZXVlLT5yZW1vdmVFdmVudChtX2V2
ZW50LmdldCgpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChjb250ZXh0LCBtX2V2ZW50KTsKKyAg
ICAgICAgbV9ldmVudC5jbGVhcigpOworICAgIH0KKworICAgIHZvaWQgY2FuY2VsKCkKKyAgICB7
CisgICAgICAgIG1faXNDYW5jZWxsZWQgPSB0cnVlOworICAgICAgICBtX2V2ZW50LmNsZWFyKCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIEV2ZW50RGlzcGF0Y2hlclRhc2soUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQsIFdvcmtlckV2ZW50UXVldWUqIGV2ZW50UXVldWUpCisgICAgICAgIDogbV9l
dmVudChldmVudCkKKyAgICAgICAgLCBtX2V2ZW50UXVldWUoZXZlbnRRdWV1ZSkKKyAgICAgICAg
LCBtX2lzQ2FuY2VsbGVkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8RXZlbnQ+
IG1fZXZlbnQ7CisgICAgV29ya2VyRXZlbnRRdWV1ZSogbV9ldmVudFF1ZXVlOworICAgIGJvb2wg
bV9pc0NhbmNlbGxlZDsKK307CisKK3ZvaWQgV29ya2VyRXZlbnRRdWV1ZTo6cmVtb3ZlRXZlbnQo
RXZlbnQqIGV2ZW50KQoreworICAgIG1fZXZlbnRUYXNrTWFwLnJlbW92ZShldmVudCk7Cit9CisK
K2Jvb2wgV29ya2VyRXZlbnRRdWV1ZTo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IHBy
cEV2ZW50KQoreworICAgIGlmIChtX2lzQ2xvc2VkKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OworICAgIE93blB0cjxFdmVudERpc3Bh
dGNoZXJUYXNrPiB0YXNrID0gRXZlbnREaXNwYXRjaGVyVGFzazo6Y3JlYXRlKGV2ZW50LCB0aGlz
KTsKKyAgICBtX2V2ZW50VGFza01hcC5hZGQoZXZlbnQucmVsZWFzZSgpLCB0YXNrLmdldCgpKTsK
KyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKHRhc2sucmVsZWFzZSgpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXb3JrZXJFdmVudFF1ZXVlOjpjYW5jZWxFdmVu
dChFdmVudCogZXZlbnQpCit7CisgICAgRXZlbnREaXNwYXRjaGVyVGFzayogdGFzayA9IG1fZXZl
bnRUYXNrTWFwLmdldChldmVudCk7CisgICAgaWYgKCF0YXNrKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgdGFzay0+Y2FuY2VsKCk7CisgICAgcmVtb3ZlRXZlbnQoZXZlbnQpOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFdvcmtlckV2ZW50UXVldWU6OmNsb3NlKCkKK3sKKyAgICBt
X2lzQ2xvc2VkID0gdHJ1ZTsKKyAgICBmb3IgKEV2ZW50VGFza01hcDo6aXRlcmF0b3IgaXQgPSBt
X2V2ZW50VGFza01hcC5iZWdpbigpOyBpdCAhPSBtX2V2ZW50VGFza01hcC5lbmQoKTsgKytpdCkg
eworICAgICAgICBFdmVudERpc3BhdGNoZXJUYXNrKiB0YXNrID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgdGFzay0+Y2FuY2VsKCk7CisgICAgfQorICAgIG1fZXZlbnRUYXNrTWFwLmNsZWFyKCk7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJF
dmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyRXZlbnRR
dWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMGYxZmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyRXZlbnRR
dWV1ZS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpZm5kZWYgV29ya2VyRXZl
bnRRdWV1ZV9oCisjZGVmaW5lIFdvcmtlckV2ZW50UXVldWVfaAorCisjaW5jbHVkZSAiRXZlbnRR
dWV1ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXZlbnQ7CitjbGFzcyBOb2RlOwor
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgV29ya2VyRXZlbnRRdWV1ZSA6
IHB1YmxpYyBFdmVudFF1ZXVlIHsKK3B1YmxpYzoKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPFdv
cmtlckV2ZW50UXVldWU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgdmly
dHVhbCB+V29ya2VyRXZlbnRRdWV1ZSgpOworCisgICAgLy8gRXZlbnRRdWV1ZQorICAgIHZpcnR1
YWwgYm9vbCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIE9WRVJSSURFOworICAgIHZp
cnR1YWwgYm9vbCBjYW5jZWxFdmVudChFdmVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZSgpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFdvcmtlckV2ZW50
UXVldWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHZvaWQgcmVtb3ZlRXZlbnQoRXZl
bnQqKTsKKworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKKyAgICBib29sIG1faXNDbG9zZWQ7CisKKyAgICBjbGFzcyBFdmVudERpc3BhdGNoZXJU
YXNrOworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RXZlbnQ+LCBFdmVudERpc3BhdGNoZXJU
YXNrKj4gRXZlbnRUYXNrTWFwOworICAgIEV2ZW50VGFza01hcCBtX2V2ZW50VGFza01hcDsKK307
CisKK30KKworI2VuZGlmIC8vIFdvcmtlckV2ZW50UXVldWVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlckxvYWRlclByb3h5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyTG9hZGVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5kMmZjZjk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlckxvYWRlclByb3h5LmgKQEAgLTAsMCArMSw2NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV29ya2VyTG9hZGVyUHJveHlfaAorI2RlZmluZSBXb3JrZXJMb2FkZXJQcm94eV9o
CisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIC8vIEEgcHJveHkgdG8gdGFsayB0byB0
aGUgbG9hZGVyIGNvbnRleHQuIE5vcm1hbGx5LCB0aGUgZG9jdW1lbnQgb24gdGhlIG1haW4gdGhy
ZWFkCisgICAgLy8gcHJvdmlkZXMgbG9hZGluZyBzZXJ2aWNlcyBmb3IgdGhlIHN1Ym9yZGluYXRl
IHdvcmtlcnMuIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIDItd2F5CisgICAgLy8gY29tbXVuaWNh
dGlvbnMgdG8gdGhlIERvY3VtZW50IGNvbnRleHQgYW5kIGJhY2sgdG8gdGhlIHdvcmtlci4KKyAg
ICAvLyBOb3RlIHRoYXQgaW4gbXVsdGktcHJvY2VzcyBicm93c2VycywgdGhlIFdvcmtlciBvYmpl
Y3QgY29udGV4dCBhbmQgdGhlIERvY3VtZW50CisgICAgLy8gY29udGV4dCBjYW4gYmUgZGlzdGlu
Y3QuCisgICAgY2xhc3MgV29ya2VyTG9hZGVyUHJveHkgeworICAgIHB1YmxpYzoKKyAgICAgICAg
dmlydHVhbCB+V29ya2VyTG9hZGVyUHJveHkoKSB7IH0KKworICAgICAgICAvLyBQb3N0cyBhIHRh
c2sgdG8gdGhlIHRocmVhZCB3aGljaCBydW5zIHRoZSBsb2FkaW5nIGNvZGUgKG5vcm1hbGx5LCB0
aGUgbWFpbiB0aHJlYWQpLgorICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tUb0xvYWRlcihQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KSA9IDA7CisKKyAgICAgICAg
Ly8gUG9zdHMgY2FsbGJhY2tzIGZyb20gbG9hZGluZyBjb2RlIHRvIHRoZSBXb3JrZXJDb250ZXh0
LiBUaGUgJ21vZGUnIGlzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZQorICAgICAgICAvLyBzcGVjaWZp
YyBzeW5jaHJvbm91cyBsb2FkaW5nIHJlcXVlc3RzIHNvIHRoZXkgY2FuIGJlICduZXN0ZWQnLCBw
ZXIgc3BlYy4KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB0YXNrIHdhcyBwb3N0ZWQg
c3VjY2Vzc2Z1bGx5LgorICAgICAgICB2aXJ0dWFsIGJvb2wgcG9zdFRhc2tGb3JNb2RlVG9Xb3Jr
ZXJDb250ZXh0KFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0
IFN0cmluZyYgbW9kZSkgPSAwOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQorCisjZW5kaWYgLy8gV29ya2VyTG9hZGVyUHJveHlf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlckxvY2F0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI3NmE4YgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5j
cHAKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIldvcmtlckxvY2F0aW9uLmgiCisKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmlu
ZyBXb3JrZXJMb2NhdGlvbjo6aHJlZigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsLnN0cmlu
ZygpOworfQorCitTdHJpbmcgV29ya2VyTG9jYXRpb246OnByb3RvY29sKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV91cmwucHJvdG9jb2woKSArICI6IjsKK30KKworU3RyaW5nIFdvcmtlckxvY2F0
aW9uOjpob3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91cmwucG9ydCgpID8gbV91cmwuaG9z
dCgpICsgIjoiICsgU3RyaW5nOjpudW1iZXIobV91cmwucG9ydCgpKSA6IG1fdXJsLmhvc3QoKTsK
K30KKworU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpob3N0bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdXJsLmhvc3QoKTsKK30KKworU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpwb3J0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV91cmwucG9ydCgpID8gU3RyaW5nOjpudW1iZXIobV91cmwucG9y
dCgpKSA6ICIiOworfQorCitTdHJpbmcgV29ya2VyTG9jYXRpb246OnBhdGhuYW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV91cmwucGF0aCgpLmlzRW1wdHkoKSA/ICIvIiA6IG1fdXJsLnBhdGgo
KTsKK30KKworU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpzZWFyY2goKSBjb25zdAoreworICAgIHJl
dHVybiBtX3VybC5xdWVyeSgpLmlzRW1wdHkoKSA/IGVtcHR5U3RyaW5nKCkgOiAiPyIgKyBtX3Vy
bC5xdWVyeSgpOworfQorCitTdHJpbmcgV29ya2VyTG9jYXRpb246Omhhc2goKSBjb25zdAorewor
ICAgIHJldHVybiBtX3VybC5mcmFnbWVudElkZW50aWZpZXIoKS5pc0VtcHR5KCkgPyBlbXB0eVN0
cmluZygpIDogIiMiICsgbV91cmwuZnJhZ21lbnRJZGVudGlmaWVyKCk7Cit9CisKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MmMwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uaApAQCAtMCwwICsxLDcyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKgorICovCisKKyNpZm5kZWYgV29ya2VyTG9jYXRpb25faAorI2RlZmluZSBXb3JrZXJM
b2NhdGlvbl9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIktVUkwuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBXb3JrZXJMb2NhdGlvbiA6IHB1Ymxp
YyBSZWZDb3VudGVkPFdvcmtlckxvY2F0aW9uPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXb3JrZXJMb2NhdGlvbj4gY3JlYXRlKGNvbnN0IEtVUkwmIHVybCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJMb2NhdGlvbih1
cmwpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0
dXJuIG1fdXJsOyB9CisKKyAgICAgICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKKworICAgICAgICAv
LyBVUkkgZGVjb21wb3NpdGlvbiBhdHRyaWJ1dGVzCisgICAgICAgIFN0cmluZyBwcm90b2NvbCgp
IGNvbnN0OworICAgICAgICBTdHJpbmcgaG9zdCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgaG9z
dG5hbWUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHBvcnQoKSBjb25zdDsKKyAgICAgICAgU3Ry
aW5nIHBhdGhuYW1lKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBzZWFyY2goKSBjb25zdDsKKyAg
ICAgICAgU3RyaW5nIGhhc2goKSBjb25zdDsKKworICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKSBj
b25zdCB7IHJldHVybiBocmVmKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFdvcmtlckxv
Y2F0aW9uKGNvbnN0IEtVUkwmIHVybCkgOiBtX3VybCh1cmwpIHsgfQorCisgICAgICAgIEtVUkwg
bV91cmw7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdPUktFUlMpCisKKyNlbmRpZiAvLyBXb3JrZXJMb2NhdGlvbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uaWRsIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmlkbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjMwMmM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmlkbApAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworbW9kdWxlIHRocmVhZHMgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29u
ZGl0aW9uYWw9V09SS0VSUywKKyAgICAgICAgSlNHZW5lcmF0ZUlzUmVhY2hhYmxlPUltcGwsCisg
ICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKKyAgICBdIFdvcmtlckxvY2F0aW9uIHsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBocmVmOworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHByb3RvY29sOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIGhvc3Q7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgaG9zdG5h
bWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgcG9ydDsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwYXRobmFtZTsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBzZWFyY2g7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgaGFzaDsKKworICAgICAgICBbTm90RW51bWVyYWJsZV0gRE9NU3RyaW5nIHRvU3Ry
aW5nKCk7CisgICAgfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNmY4MzlmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKQEAgLTAsMCArMSw1MTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXT1JLRVJTKQor
CisjaW5jbHVkZSAiV29ya2VyTWVzc2FnaW5nUHJveHkuaCIKKworI2luY2x1ZGUgIkNvbnRlbnRT
ZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUg
IkRlZGljYXRlZFdvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJEZWRpY2F0ZWRXb3JrZXJUaHJl
YWQuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkVycm9yRXZlbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTWVzc2FnZUV2ZW50Lmgi
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNp
bmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyLmgiCisjaW5jbHVkZSAiV29ya2VyRGVidWdnZXJBZ2Vu
dC5oIgorI2luY2x1ZGUgIldvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lc3NhZ2VX
b3JrZXJDb250ZXh0VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s+
IGNyZWF0ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgUGFzc093
blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IE1lc3NhZ2VXb3JrZXJDb250ZXh0VGFzayhtZXNzYWdlLCBjaGFu
bmVscykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXNzYWdlV29ya2VyQ29udGV4dFRhc2so
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsIFBhc3NPd25QdHI8TWVz
c2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQorICAgICAgICA6IG1fbWVzc2FnZShtZXNz
YWdlKQorICAgICAgICAsIG1fY2hhbm5lbHMoY2hhbm5lbHMpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRD
b250ZXh0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNjcmlwdENvbnRleHQtPmlzV29ya2VyQ29u
dGV4dCgpKTsKKyAgICAgICAgRGVkaWNhdGVkV29ya2VyQ29udGV4dCogY29udGV4dCA9IHN0YXRp
Y19jYXN0PERlZGljYXRlZFdvcmtlckNvbnRleHQqPihzY3JpcHRDb250ZXh0KTsKKyAgICAgICAg
T3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+IHBvcnRzID0gTWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9y
dHMoKnNjcmlwdENvbnRleHQsIG1fY2hhbm5lbHMucmVsZWFzZSgpKTsKKyAgICAgICAgY29udGV4
dC0+ZGlzcGF0Y2hFdmVudChNZXNzYWdlRXZlbnQ6OmNyZWF0ZShwb3J0cy5yZWxlYXNlKCksIG1f
bWVzc2FnZSkpOworICAgICAgICBjb250ZXh0LT50aHJlYWQoKS0+d29ya2VyT2JqZWN0UHJveHko
KS5jb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoY29udGV4dC0+aGFzUGVuZGluZ0FjdGl2
aXR5KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBtX21lc3NhZ2U7CisgICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBtX2No
YW5uZWxzOworfTsKKworY2xhc3MgTWVzc2FnZVdvcmtlclRhc2sgOiBwdWJsaWMgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TWVz
c2FnZVdvcmtlclRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
bWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMsIFdv
cmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgTWVzc2FnZVdvcmtlclRhc2sobWVzc2FnZSwgY2hhbm5lbHMsIG1lc3Nh
Z2luZ1Byb3h5KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1lc3NhZ2VXb3JrZXJUYXNrKFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLCBQYXNzT3duUHRyPE1lc3Nh
Z2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscywgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3Nh
Z2luZ1Byb3h5KQorICAgICAgICA6IG1fbWVzc2FnZShtZXNzYWdlKQorICAgICAgICAsIG1fY2hh
bm5lbHMoY2hhbm5lbHMpCisgICAgICAgICwgbV9tZXNzYWdpbmdQcm94eShtZXNzYWdpbmdQcm94
eSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQpCisgICAgeworICAgICAgICBXb3JrZXIqIHdv
cmtlck9iamVjdCA9IG1fbWVzc2FnaW5nUHJveHktPndvcmtlck9iamVjdCgpOworICAgICAgICBp
ZiAoIXdvcmtlck9iamVjdCB8fCBtX21lc3NhZ2luZ1Byb3h5LT5hc2tlZFRvVGVybWluYXRlKCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgT3duUHRyPE1lc3NhZ2VQb3J0QXJyYXk+
IHBvcnRzID0gTWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKnNjcmlwdENvbnRleHQsIG1fY2hh
bm5lbHMucmVsZWFzZSgpKTsKKyAgICAgICAgd29ya2VyT2JqZWN0LT5kaXNwYXRjaEV2ZW50KE1l
c3NhZ2VFdmVudDo6Y3JlYXRlKHBvcnRzLnJlbGVhc2UoKSwgbV9tZXNzYWdlKSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fbWVzc2FnZTsK
KyAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IG1fY2hhbm5lbHM7CisgICAgV29y
a2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7Cit9OworCitjbGFzcyBXb3JrZXJF
eGNlcHRpb25UYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdvcmtlckV4Y2VwdGlvblRhc2s+IGNyZWF0ZShj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdvcmtlckV4Y2VwdGlvblRhc2soZXJyb3JNZXNz
YWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwsIG1lc3NhZ2luZ1Byb3h5KSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIFdvcmtlckV4Y2VwdGlvblRhc2soY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgV29ya2VyTWVzc2Fn
aW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQorICAgICAgICA6IG1fZXJyb3JNZXNzYWdlKGVycm9y
TWVzc2FnZS5pc29sYXRlZENvcHkoKSkKKyAgICAgICAgLCBtX2xpbmVOdW1iZXIobGluZU51bWJl
cikKKyAgICAgICAgLCBtX3NvdXJjZVVSTChzb3VyY2VVUkwuaXNvbGF0ZWRDb3B5KCkpCisgICAg
ICAgICwgbV9tZXNzYWdpbmdQcm94eShtZXNzYWdpbmdQcm94eSkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCisgICAgeworICAgICAgICBXb3JrZXIqIHdvcmtlck9iamVjdCA9IG1fbWVzc2FnaW5nUHJv
eHktPndvcmtlck9iamVjdCgpOworICAgICAgICBpZiAoIXdvcmtlck9iamVjdCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAvLyBXZSBkb24ndCBib3RoZXIgY2hlY2tpbmcgdGhlIGFz
a2VkVG9UZXJtaW5hdGUoKSBmbGFnIGhlcmUsIGJlY2F1c2UgZXhjZXB0aW9ucyBzaG91bGQgKmFs
d2F5cyogYmUgcmVwb3J0ZWQgZXZlbiBpZiB0aGUgdGhyZWFkIGlzIHRlcm1pbmF0ZWQuCisgICAg
ICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBkaWZmZXJlbnQgdGhhbiB0aGUgYmVoYXZpb3Ig
aW4gTWVzc2FnZVdvcmtlclRhc2ssIGJlY2F1c2UgdGVybWluYXRlZCB3b3JrZXJzIG5vIGxvbmdl
ciBkZWxpdmVyIG1lc3NhZ2VzIChzZWN0aW9uIDQuNiBvZiB0aGUgV2ViV29ya2VyIHNwZWMpLCBi
dXQgdGhleSBkbyByZXBvcnQgZXhjZXB0aW9ucy4KKworICAgICAgICBib29sIGVycm9ySGFuZGxl
ZCA9ICF3b3JrZXJPYmplY3QtPmRpc3BhdGNoRXZlbnQoRXJyb3JFdmVudDo6Y3JlYXRlKG1fZXJy
b3JNZXNzYWdlLCBtX3NvdXJjZVVSTCwgbV9saW5lTnVtYmVyKSk7CisgICAgICAgIGlmICghZXJy
b3JIYW5kbGVkKQorICAgICAgICAgICAgY29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKG1fZXJyb3JN
ZXNzYWdlLCBtX2xpbmVOdW1iZXIsIG1fc291cmNlVVJMLCAwKTsKKyAgICB9CisKKyAgICBTdHJp
bmcgbV9lcnJvck1lc3NhZ2U7CisgICAgaW50IG1fbGluZU51bWJlcjsKKyAgICBTdHJpbmcgbV9z
b3VyY2VVUkw7CisgICAgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7Cit9
OworCitjbGFzcyBXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXb3Jr
ZXJDb250ZXh0RGVzdHJveWVkVGFzaz4gY3JlYXRlKFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNz
YWdpbmdQcm94eSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV29ya2VyQ29u
dGV4dERlc3Ryb3llZFRhc2sobWVzc2FnaW5nUHJveHkpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgV29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2soV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3Nh
Z2luZ1Byb3h5KQorICAgICAgICA6IG1fbWVzc2FnaW5nUHJveHkobWVzc2FnaW5nUHJveHkpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KikKKyAgICB7CisgICAgICAgIG1fbWVzc2FnaW5nUHJveHktPndvcmtlckNvbnRl
eHREZXN0cm95ZWRJbnRlcm5hbCgpOworICAgIH0KKworICAgIFdvcmtlck1lc3NhZ2luZ1Byb3h5
KiBtX21lc3NhZ2luZ1Byb3h5OworfTsKKworY2xhc3MgV29ya2VyVGVybWluYXRlVGFzayA6IHB1
YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxXb3JrZXJUZXJtaW5hdGVUYXNrPiBjcmVhdGUoV29ya2VyTWVzc2FnaW5nUHJv
eHkqIG1lc3NhZ2luZ1Byb3h5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBX
b3JrZXJUZXJtaW5hdGVUYXNrKG1lc3NhZ2luZ1Byb3h5KSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFdvcmtlclRlcm1pbmF0ZVRhc2soV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1By
b3h5KQorICAgICAgICA6IG1fbWVzc2FnaW5nUHJveHkobWVzc2FnaW5nUHJveHkpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KikKKyAgICB7CisgICAgICAgIG1fbWVzc2FnaW5nUHJveHktPnRlcm1pbmF0ZVdvcmtlckNv
bnRleHQoKTsKKyAgICB9CisKKyAgICBXb3JrZXJNZXNzYWdpbmdQcm94eSogbV9tZXNzYWdpbmdQ
cm94eTsKK307CisKK2NsYXNzIFdvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzayA6IHB1Ymxp
YyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c093blB0cjxXb3JrZXJUaHJlYWRBY3Rpdml0eVJlcG9ydFRhc2s+IGNyZWF0ZShXb3JrZXJNZXNz
YWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHksIGJvb2wgY29uZmlybWluZ01lc3NhZ2UsIGJvb2wg
aGFzUGVuZGluZ0FjdGl2aXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBX
b3JrZXJUaHJlYWRBY3Rpdml0eVJlcG9ydFRhc2sobWVzc2FnaW5nUHJveHksIGNvbmZpcm1pbmdN
ZXNzYWdlLCBoYXNQZW5kaW5nQWN0aXZpdHkpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV29y
a2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrKFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdp
bmdQcm94eSwgYm9vbCBjb25maXJtaW5nTWVzc2FnZSwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkp
CisgICAgICAgIDogbV9tZXNzYWdpbmdQcm94eShtZXNzYWdpbmdQcm94eSkKKyAgICAgICAgLCBt
X2NvbmZpcm1pbmdNZXNzYWdlKGNvbmZpcm1pbmdNZXNzYWdlKQorICAgICAgICAsIG1faGFzUGVu
ZGluZ0FjdGl2aXR5KGhhc1BlbmRpbmdBY3Rpdml0eSkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQorICAgIHsKKyAg
ICAgICAgbV9tZXNzYWdpbmdQcm94eS0+cmVwb3J0UGVuZGluZ0FjdGl2aXR5SW50ZXJuYWwobV9j
b25maXJtaW5nTWVzc2FnZSwgbV9oYXNQZW5kaW5nQWN0aXZpdHkpOworICAgIH0KKworICAgIFdv
cmtlck1lc3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5OworICAgIGJvb2wgbV9jb25maXJt
aW5nTWVzc2FnZTsKKyAgICBib29sIG1faGFzUGVuZGluZ0FjdGl2aXR5OworfTsKKworY2xhc3Mg
UG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFBvc3RNZXNzYWdl
VG9QYWdlSW5zcGVjdG9yVGFzaz4gY3JlYXRlKFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdp
bmdQcm94eSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBQb3N0TWVzc2FnZVRvUGFnZUluc3BlY3RvclRhc2sobWVzc2FnaW5nUHJveHks
IG1lc3NhZ2UpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUG9zdE1lc3NhZ2VUb1BhZ2VJbnNw
ZWN0b3JUYXNrKFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQorICAgICAgICA6IG1fbWVzc2FnaW5nUHJveHkobWVzc2FnaW5nUHJveHkp
CisgICAgICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UuaXNvbGF0ZWRDb3B5KCkpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KikKKyAgICB7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAgICAgaWYgKFdvcmtlckNvbnRl
eHRQcm94eTo6UGFnZUluc3BlY3RvciogcGFnZUluc3BlY3RvciA9IG1fbWVzc2FnaW5nUHJveHkt
Pm1fcGFnZUluc3BlY3RvcikKKyAgICAgICAgICAgIHBhZ2VJbnNwZWN0b3ItPmRpc3BhdGNoTWVz
c2FnZUZyb21Xb3JrZXIobV9tZXNzYWdlKTsKKyNlbmRpZgorICAgIH0KKworICAgIFdvcmtlck1l
c3NhZ2luZ1Byb3h5KiBtX21lc3NhZ2luZ1Byb3h5OworICAgIFN0cmluZyBtX21lc3NhZ2U7Cit9
OworCisKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pCitXb3JrZXJDb250ZXh0UHJveHkqIFdvcmtl
ckNvbnRleHRQcm94eTo6Y3JlYXRlKFdvcmtlciogd29ya2VyKQoreworICAgIHJldHVybiBuZXcg
V29ya2VyTWVzc2FnaW5nUHJveHkod29ya2VyKTsKK30KKyNlbmRpZgorCitXb3JrZXJNZXNzYWdp
bmdQcm94eTo6V29ya2VyTWVzc2FnaW5nUHJveHkoV29ya2VyKiB3b3JrZXJPYmplY3QpCisgICAg
OiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQod29ya2VyT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpCisgICAgLCBtX3dvcmtlck9iamVjdCh3b3JrZXJPYmplY3QpCisgICAgLCBtX21h
eUJlRGVzdHJveWVkKGZhbHNlKQorICAgICwgbV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudCgwKQor
ICAgICwgbV93b3JrZXJUaHJlYWRIYWRQZW5kaW5nQWN0aXZpdHkoZmFsc2UpCisgICAgLCBtX2Fz
a2VkVG9UZXJtaW5hdGUoZmFsc2UpCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAsIG1fcGFn
ZUluc3BlY3RvcigwKQorI2VuZGlmCit7CisgICAgQVNTRVJUKG1fd29ya2VyT2JqZWN0KTsKKyAg
ICBBU1NFUlQoKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpICYmIGlzTWFp
blRocmVhZCgpKQorICAgICAgICAgICB8fCAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dv
cmtlckNvbnRleHQoKSAmJiBjdXJyZW50VGhyZWFkKCkgPT0gc3RhdGljX2Nhc3Q8V29ya2VyQ29u
dGV4dCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSktPnRocmVhZCgpLT50aHJlYWRJ
RCgpKSk7Cit9CisKK1dvcmtlck1lc3NhZ2luZ1Byb3h5Ojp+V29ya2VyTWVzc2FnaW5nUHJveHko
KQoreworICAgIEFTU0VSVCghbV93b3JrZXJPYmplY3QpOworICAgIEFTU0VSVCgobV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkgJiYgaXNNYWluVGhyZWFkKCkpCisgICAgICAg
ICAgIHx8IChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpICYmIGN1
cnJlbnRUaHJlYWQoKSA9PSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4obV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LmdldCgpKS0+dGhyZWFkKCktPnRocmVhZElEKCkpKTsKK30KKwordm9pZCBX
b3JrZXJNZXNzYWdpbmdQcm94eTo6c3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHNjcmlw
dFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwg
V29ya2VyVGhyZWFkU3RhcnRNb2RlIHN0YXJ0TW9kZSkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBu
ZWVkIHRvIGJlIHJldmlzaXRlZCB3aGVuIHdlIHN1cHBvcnQgbmVzdGVkIHdvcmtlciBvbmUgZGF5
CisgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5nZXQoKSk7CisgICAgR3JvdXBTZXR0aW5ncyogc2V0dGluZ3MgPSAwOwor
ICAgIGlmIChkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICBzZXR0aW5ncyA9IGRvY3VtZW50LT5w
YWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOworICAgIFJlZlB0cjxEZWRpY2F0ZWRXb3Jr
ZXJUaHJlYWQ+IHRocmVhZCA9IERlZGljYXRlZFdvcmtlclRocmVhZDo6Y3JlYXRlKHNjcmlwdFVS
TCwgdXNlckFnZW50LCBzZXR0aW5ncywgc291cmNlQ29kZSwgKnRoaXMsICp0aGlzLCBzdGFydE1v
ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5jb250ZW50U2Vj
dXJpdHlQb2xpY3koKS0+ZGVwcmVjYXRlZEhlYWRlcigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmRlcHJlY2F0ZWRI
ZWFkZXJUeXBlKCkpOworICAgIHdvcmtlclRocmVhZENyZWF0ZWQodGhyZWFkKTsKKyAgICB0aHJl
YWQtPnN0YXJ0KCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTdGFydFdvcmtl
ckNvbnRleHQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCB0aGlzLCBzY3JpcHRVUkwp
OworfQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2VyT2Jq
ZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLCBQYXNzT3duUHRy
PE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykKK3sKKyAgICBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPnBvc3RUYXNrKE1lc3NhZ2VXb3JrZXJUYXNrOjpjcmVhdGUobWVzc2FnZSwg
Y2hhbm5lbHMsIHRoaXMpKTsKK30KKwordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdE1l
c3NhZ2VUb1dvcmtlckNvbnRleHQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1l
c3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQorewor
ICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X3dvcmtlclRocmVhZCkgeworICAgICAgICArK21fdW5jb25maXJtZWRNZXNzYWdlQ291bnQ7Cisg
ICAgICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2soTWVzc2FnZVdvcmtlckNv
bnRleHRUYXNrOjpjcmVhdGUobWVzc2FnZSwgY2hhbm5lbHMpKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbV9xdWV1ZWRFYXJseVRhc2tzLmFwcGVuZChNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OmNy
ZWF0ZShtZXNzYWdlLCBjaGFubmVscykpOworfQorCitib29sIFdvcmtlck1lc3NhZ2luZ1Byb3h5
Ojpwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoUGFzc093blB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUpCit7CisgICAgaWYgKG1f
YXNrZWRUb1Rlcm1pbmF0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG1f
d29ya2VyVGhyZWFkKTsKKyAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9y
TW9kZSh0YXNrLCBtb2RlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXb3JrZXJNZXNz
YWdpbmdQcm94eTo6cG9zdFRhc2tUb0xvYWRlcihQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+IHRhc2spCit7CisgICAgLy8gRklYTUU6IEluIGNhc2Ugb2YgbmVzdGVkIHdv
cmtlcnMsIHRoaXMgc2hvdWxkIGdvIGRpcmVjdGx5IHRvIHRoZSByb290IERvY3VtZW50IGNvbnRl
eHQuCisgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKTsK
KyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKHRhc2spOworfQorCit2b2lk
IFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCkKK3sKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFdvcmtlckV4
Y2VwdGlvblRhc2s6OmNyZWF0ZShlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCwg
dGhpcykpOworfQorCitzdGF0aWMgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQ
cm94eSwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZl
bCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBpZiAobWVzc2FnaW5nUHJveHktPmFza2VkVG9U
ZXJtaW5hdGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvbnRleHQtPmFkZENvbnNvbGVNZXNz
YWdlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlcik7
Cit9CisKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RDb25zb2xlTWVzc2FnZVRvV29y
a2VyT2JqZWN0KE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdl
TGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0
IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9z
dFRhc2soCisgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdENvbnNvbGVNZXNzYWdlVGFz
aywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCkp
OworfQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJUaHJlYWRDcmVhdGVkKFBh
c3NSZWZQdHI8RGVkaWNhdGVkV29ya2VyVGhyZWFkPiB3b3JrZXJUaHJlYWQpCit7CisgICAgbV93
b3JrZXJUaHJlYWQgPSB3b3JrZXJUaHJlYWQ7CisKKyAgICBpZiAobV9hc2tlZFRvVGVybWluYXRl
KSB7CisgICAgICAgIC8vIFdvcmtlci50ZXJtaW5hdGUoKSBjb3VsZCBiZSBjYWxsZWQgZnJvbSBK
UyBiZWZvcmUgdGhlIHRocmVhZCB3YXMgY3JlYXRlZC4KKyAgICAgICAgbV93b3JrZXJUaHJlYWQt
PnN0b3AoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1bnNpZ25lZCB0YXNrQ291bnQgPSBtX3F1
ZXVlZEVhcmx5VGFza3Muc2l6ZSgpOworICAgICAgICBBU1NFUlQoIW1fdW5jb25maXJtZWRNZXNz
YWdlQ291bnQpOworICAgICAgICBtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50ID0gdGFza0NvdW50
OworICAgICAgICBtX3dvcmtlclRocmVhZEhhZFBlbmRpbmdBY3Rpdml0eSA9IHRydWU7IC8vIFdv
cmtlciBpbml0aWFsaXphdGlvbiBtZWFucyBhIHBlbmRpbmcgYWN0aXZpdHkuCisKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhc2tDb3VudDsgKytpKQorICAgICAgICAgICAgbV93
b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFzayhtX3F1ZXVlZEVhcmx5VGFza3NbaV0ucmVs
ZWFzZSgpKTsKKyAgICAgICAgbV9xdWV1ZWRFYXJseVRhc2tzLmNsZWFyKCk7CisgICAgfQorfQor
Cit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJPYmplY3REZXN0cm95ZWQoKQorewor
ICAgIG1fd29ya2VyT2JqZWN0ID0gMDsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBv
c3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyT2JqZWN0RGVzdHJveWVkSW50ZXJuYWws
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKK30KKwordm9pZCBXb3JrZXJNZXNzYWdp
bmdQcm94eTo6d29ya2VyT2JqZWN0RGVzdHJveWVkSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBwcm94eSkKK3sKKyAgICBwcm94eS0+bV9tYXlC
ZURlc3Ryb3llZCA9IHRydWU7CisgICAgaWYgKHByb3h5LT5tX3dvcmtlclRocmVhZCkKKyAgICAg
ICAgcHJveHktPnRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKKyAgICBlbHNlCisgICAgICAgIHBy
b3h5LT53b3JrZXJDb250ZXh0RGVzdHJveWVkSW50ZXJuYWwoKTsKK30KKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCitzdGF0aWMgdm9pZCBj
b25uZWN0VG9Xb3JrZXJDb250ZXh0SW5zcGVjdG9yVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBib29sKQoreworICAgIEFTU0VSVChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQo
KSk7CisgICAgc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLT53b3JrZXJJbnNw
ZWN0b3JDb250cm9sbGVyKCktPmNvbm5lY3RGcm9udGVuZCgpOworfQorI2VuZGlmCisKK3ZvaWQg
V29ya2VyTWVzc2FnaW5nUHJveHk6OmNvbm5lY3RUb0luc3BlY3RvcihXb3JrZXJDb250ZXh0UHJv
eHk6OlBhZ2VJbnNwZWN0b3IqIHBhZ2VJbnNwZWN0b3IpCit7CisgICAgaWYgKG1fYXNrZWRUb1Rl
cm1pbmF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghbV9wYWdlSW5zcGVjdG9yKTsK
KyAgICBtX3BhZ2VJbnNwZWN0b3IgPSBwYWdlSW5zcGVjdG9yOworI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQorICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2tGb3JN
b2RlKGNyZWF0ZUNhbGxiYWNrVGFzayhjb25uZWN0VG9Xb3JrZXJDb250ZXh0SW5zcGVjdG9yVGFz
aywgdHJ1ZSksIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyVGFza01vZGUpOworI2VuZGlm
Cit9CisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKK3N0YXRpYyB2b2lkIGRpc2Nv
bm5lY3RGcm9tV29ya2VyQ29udGV4dEluc3BlY3RvclRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgYm9vbCkKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0
KCkpOworICAgIHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KS0+d29ya2VySW5z
cGVjdG9yQ29udHJvbGxlcigpLT5kaXNjb25uZWN0RnJvbnRlbmQoKTsKK30KKyNlbmRpZgorCit2
b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpkaXNjb25uZWN0RnJvbUluc3BlY3RvcigpCit7Cisg
ICAgbV9wYWdlSW5zcGVjdG9yID0gMDsKKyAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQorICAg
ICAgICByZXR1cm47CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgbV93b3Jr
ZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFza0Zvck1vZGUoY3JlYXRlQ2FsbGJhY2tUYXNrKGRp
c2Nvbm5lY3RGcm9tV29ya2VyQ29udGV4dEluc3BlY3RvclRhc2ssIHRydWUpLCBXb3JrZXJEZWJ1
Z2dlckFnZW50OjpkZWJ1Z2dlclRhc2tNb2RlKTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCitzdGF0aWMgdm9pZCBkaXNwYXRjaE9uSW5zcGVjdG9yQmFja2Vu
ZFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQoreworICAgIEFTU0VSVChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CisgICAgc3Rh
dGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLT53b3JrZXJJbnNwZWN0b3JDb250cm9s
bGVyKCktPmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChtZXNzYWdlKTsKK30KKyNlbmRpZgor
Cit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpzZW5kTWVzc2FnZVRvSW5zcGVjdG9yKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQorICAgICAg
ICByZXR1cm47CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgbV93b3JrZXJU
aHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFza0Zvck1vZGUoY3JlYXRlQ2FsbGJhY2tUYXNrKGRpc3Bh
dGNoT25JbnNwZWN0b3JCYWNrZW5kVGFzaywgU3RyaW5nKG1lc3NhZ2UpKSwgV29ya2VyRGVidWdn
ZXJBZ2VudDo6ZGVidWdnZXJUYXNrTW9kZSk7CisgICAgV29ya2VyRGVidWdnZXJBZ2VudDo6aW50
ZXJydXB0QW5kRGlzcGF0Y2hJbnNwZWN0b3JDb21tYW5kcyhtX3dvcmtlclRocmVhZC5nZXQoKSk7
CisjZW5kaWYKK30KKyNlbmRpZgorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJD
b250ZXh0RGVzdHJveWVkKCkKK3sKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RU
YXNrKFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrOjpjcmVhdGUodGhpcykpOworICAgIC8vIFdp
bGwgZXhlY3V0ZSB3b3JrZXJDb250ZXh0RGVzdHJveWVkSW50ZXJuYWwoKSBvbiBjb250ZXh0J3Mg
dGhyZWFkLgorfQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJDb250ZXh0Q2xv
c2VkKCkKK3sKKyAgICAvLyBFeGVjdXRlcyB0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCkgb24gcGFy
ZW50IGNvbnRleHQncyB0aHJlYWQuCisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0
VGFzayhXb3JrZXJUZXJtaW5hdGVUYXNrOjpjcmVhdGUodGhpcykpOworfQorCit2b2lkIFdvcmtl
ck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJDb250ZXh0RGVzdHJveWVkSW50ZXJuYWwoKQoreworICAg
IC8vIFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrIGlzIGFsd2F5cyB0aGUgbGFzdCB0byBiZSBw
ZXJmb3JtZWQsIHNvIHRoZSBwcm94eSBpcyBub3QgbmVlZGVkIGZvciBjb21tdW5pY2F0aW9uCisg
ICAgLy8gaW4gZWl0aGVyIHNpZGUgYW55IG1vcmUuIEhvd2V2ZXIsIHRoZSBXb3JrZXIgb2JqZWN0
IG1heSBzdGlsbCBleGlzdCwgYW5kIGl0IGFzc3VtZXMgdGhhdCB0aGUgcHJveHkgZXhpc3RzLCB0
b28uCisgICAgbV9hc2tlZFRvVGVybWluYXRlID0gdHJ1ZTsKKyAgICBtX3dvcmtlclRocmVhZCA9
IDA7CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndvcmtlckNvbnRleHRUZXJtaW5h
dGVkKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSwgdGhpcyk7CisKKyAgICBpZiAobV9t
YXlCZURlc3Ryb3llZCkKKyAgICAgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgV29ya2VyTWVz
c2FnaW5nUHJveHk6OnRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKQoreworICAgIGlmIChtX2Fza2Vk
VG9UZXJtaW5hdGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0
cnVlOworCisgICAgaWYgKG1fd29ya2VyVGhyZWFkKQorICAgICAgICBtX3dvcmtlclRocmVhZC0+
c3RvcCgpOworCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3b3JrZXJDb250ZXh0VGVy
bWluYXRlZChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCksIHRoaXMpOworfQorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RNZXNzYWdl
VG9QYWdlSW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzazo6
Y3JlYXRlKHRoaXMsIG1lc3NhZ2UpKTsKK30KKwordm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6
dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorI2VuZGlmCisKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OmNvbmZp
cm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sKKyAg
ICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFdvcmtlclRocmVhZEFjdGl2aXR5
UmVwb3J0VGFzazo6Y3JlYXRlKHRoaXMsIHRydWUsIGhhc1BlbmRpbmdBY3Rpdml0eSkpOworICAg
IC8vIFdpbGwgZXhlY3V0ZSByZXBvcnRQZW5kaW5nQWN0aXZpdHlJbnRlcm5hbCgpIG9uIGNvbnRl
eHQncyB0aHJlYWQuCit9CisKK3ZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnJlcG9ydFBlbmRp
bmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sKKyAgICBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPnBvc3RUYXNrKFdvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzazo6Y3Jl
YXRlKHRoaXMsIGZhbHNlLCBoYXNQZW5kaW5nQWN0aXZpdHkpKTsKKyAgICAvLyBXaWxsIGV4ZWN1
dGUgcmVwb3J0UGVuZGluZ0FjdGl2aXR5SW50ZXJuYWwoKSBvbiBjb250ZXh0J3MgdGhyZWFkLgor
fQorCit2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpyZXBvcnRQZW5kaW5nQWN0aXZpdHlJbnRl
cm5hbChib29sIGNvbmZpcm1pbmdNZXNzYWdlLCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sK
KyAgICBpZiAoY29uZmlybWluZ01lc3NhZ2UgJiYgIW1fYXNrZWRUb1Rlcm1pbmF0ZSkgeworICAg
ICAgICBBU1NFUlQobV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudCk7CisgICAgICAgIC0tbV91bmNv
bmZpcm1lZE1lc3NhZ2VDb3VudDsKKyAgICB9CisKKyAgICBtX3dvcmtlclRocmVhZEhhZFBlbmRp
bmdBY3Rpdml0eSA9IGhhc1BlbmRpbmdBY3Rpdml0eTsKK30KKworYm9vbCBXb3JrZXJNZXNzYWdp
bmdQcm94eTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fdW5j
b25maXJtZWRNZXNzYWdlQ291bnQgfHwgbV93b3JrZXJUaHJlYWRIYWRQZW5kaW5nQWN0aXZpdHkp
ICYmICFtX2Fza2VkVG9UZXJtaW5hdGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iN2NiZTUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKQEAgLTAsMCArMSwxMjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqCisgKi8KKworI2lmbmRlZiBXb3JrZXJNZXNzYWdpbmdQcm94eV9oCisjZGVmaW5lIFdv
cmtlck1lc3NhZ2luZ1Byb3h5X2gKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHRQcm94eS5o
IgorI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyT2JqZWN0
UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBEZWRpY2F0ZWRXb3JrZXJUaHJl
YWQ7CisgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBjbGFzcyBXb3JrZXI7
CisKKyAgICBjbGFzcyBXb3JrZXJNZXNzYWdpbmdQcm94eSA6IHB1YmxpYyBXb3JrZXJDb250ZXh0
UHJveHksIHB1YmxpYyBXb3JrZXJPYmplY3RQcm94eSwgcHVibGljIFdvcmtlckxvYWRlclByb3h5
IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV29ya2VyTWVzc2FnaW5nUHJveHkpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5KFdvcmtlciopOworCisgICAgICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBXb3Jr
ZXJDb250ZXh0UHJveHkuCisgICAgICAgIC8vIChPbmx5IHVzZSB0aGVzZSBtZXRob2RzIGluIHRo
ZSB3b3JrZXIgb2JqZWN0IHRocmVhZC4pCisgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydFdvcmtl
ckNvbnRleHQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJUaHJlYWRTdGFydE1vZGUpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgdGVybWluYXRlV29ya2VyQ29udGV4dCgpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+LCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5Pik7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHdvcmtlck9iamVjdERlc3Ryb3llZCgpOworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0VG9JbnNwZWN0b3IoV29ya2VyQ29udGV4dFByb3h5
OjpQYWdlSW5zcGVjdG9yKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0RnJvbUlu
c3BlY3RvcigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb0luc3BlY3Rvcihj
b25zdCBTdHJpbmcmKTsKKyNlbmRpZgorCisgICAgICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBX
b3JrZXJPYmplY3RQcm94eS4KKyAgICAgICAgLy8gKE9ubHkgdXNlIHRoZXNlIG1ldGhvZHMgaW4g
dGhlIHdvcmtlciBjb250ZXh0IHRocmVhZC4pCisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVz
c2FnZVRvV29ya2VyT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFz
c093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4pOworICAgICAgICB2aXJ0dWFsIHZvaWQg
cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBp
bnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZVNvdXJjZSwgTWVz
c2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51
bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rvcihjb25zdCBTdHJp
bmcmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKGNv
bnN0IFN0cmluZyYpOworI2VuZGlmCisgICAgICAgIHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2Fn
ZUZyb21Xb3JrZXJPYmplY3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHRDbG9zZWQoKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKKworICAgICAgICAvLyBJbXBsZW1l
bnRhdGlvbiBvZiBXb3JrZXJMb2FkZXJQcm94eS4KKyAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBh
cmUgY2FsbGVkIG9uIGRpZmZlcmVudCB0aHJlYWRzIHRvIHNjaGVkdWxlIGxvYWRpbmcKKyAgICAg
ICAgLy8gcmVxdWVzdHMgYW5kIHRvIHNlbmQgY2FsbGJhY2tzIGJhY2sgdG8gV29ya2VyQ29udGV4
dC4KKyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwb3N0VGFz
a0Zvck1vZGVUb1dvcmtlckNvbnRleHQoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKworICAgICAgICB2b2lkIHdvcmtlclRocmVh
ZENyZWF0ZWQoUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ+KTsKKworICAgICAgICAv
LyBPbmx5IHVzZSB0aGlzIG1ldGhvZCBvbiB0aGUgd29ya2VyIG9iamVjdCB0aHJlYWQuCisgICAg
ICAgIGJvb2wgYXNrZWRUb1Rlcm1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXNrZWRUb1Rlcm1p
bmF0ZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2VXb3Jr
ZXJUYXNrOworICAgICAgICBmcmllbmQgY2xhc3MgUG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JU
YXNrOworICAgICAgICBmcmllbmQgY2xhc3MgV29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2s7Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBXb3JrZXJFeGNlcHRpb25UYXNrOworICAgICAgICBmcmllbmQg
Y2xhc3MgV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrOworCisgICAgICAgIHZpcnR1YWwg
fldvcmtlck1lc3NhZ2luZ1Byb3h5KCk7CisKKyAgICAgICAgdm9pZCB3b3JrZXJDb250ZXh0RGVz
dHJveWVkSW50ZXJuYWwoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgd29ya2VyT2JqZWN0RGVzdHJv
eWVkSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdvcmtlck1lc3NhZ2luZ1Byb3h5
Kik7CisgICAgICAgIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5SW50ZXJuYWwoYm9vbCBjb25m
aXJtaW5nTWVzc2FnZSwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOworICAgICAgICBXb3JrZXIq
IHdvcmtlck9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2VyT2JqZWN0OyB9CisKKyAgICAg
ICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKKyAgICAgICAgV29ya2VyKiBtX3dvcmtlck9iamVjdDsKKyAgICAgICAgYm9vbCBtX21heUJl
RGVzdHJveWVkOworICAgICAgICBSZWZQdHI8RGVkaWNhdGVkV29ya2VyVGhyZWFkPiBtX3dvcmtl
clRocmVhZDsKKworICAgICAgICB1bnNpZ25lZCBtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50OyAv
LyBVbmNvbmZpcm1lZCBtZXNzYWdlcyBmcm9tIHdvcmtlciBvYmplY3QgdG8gd29ya2VyIHRocmVh
ZC4KKyAgICAgICAgYm9vbCBtX3dvcmtlclRocmVhZEhhZFBlbmRpbmdBY3Rpdml0eTsgLy8gVGhl
IGxhdGVzdCBjb25maXJtYXRpb24gZnJvbSB3b3JrZXIgdGhyZWFkIHJlcG9ydGVkIHRoYXQgaXQg
d2FzIHN0aWxsIGFjdGl2ZS4KKworICAgICAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0ZTsKKwor
ICAgICAgICBWZWN0b3I8T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+ID4gbV9x
dWV1ZWRFYXJseVRhc2tzOyAvLyBUYXNrcyBhcmUgcXVldWVkIGhlcmUgdW50aWwgdGhlcmUncyBh
IHRocmVhZCBvYmplY3QgY3JlYXRlZC4KKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICBX
b3JrZXJDb250ZXh0UHJveHk6OlBhZ2VJbnNwZWN0b3IqIG1fcGFnZUluc3BlY3RvcjsKKyNlbmRp
ZgorICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
T1JLRVJTKQorCisjZW5kaWYgLy8gV29ya2VyTWVzc2FnaW5nUHJveHlfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlck9iamVjdFByb3h5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyT2JqZWN0UHJveHkuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2UwYmMzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlck9iamVjdFByb3h5LmgKQEAgLTAsMCAr
MSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV29ya2VyT2JqZWN0UHJveHlfaAorI2RlZmluZSBXb3JrZXJPYmplY3RQ
cm94eV9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIldvcmtlclJlcG9ydGlu
Z1Byb3h5LmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBNZXNzYWdlUG9ydENo
YW5uZWw7CisKKyAgICAvLyBBIHByb3h5IHRvIHRhbGsgdG8gdGhlIHdvcmtlciBvYmplY3QuCisg
ICAgY2xhc3MgV29ya2VyT2JqZWN0UHJveHkgOiBwdWJsaWMgV29ya2VyUmVwb3J0aW5nUHJveHkg
eworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJP
YmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzT3duUHRyPE1lc3Nh
Z2VQb3J0Q2hhbm5lbEFycmF5PikgPSAwOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBjb25maXJt
TWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpID0gMDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdB
Y3Rpdml0eSkgPSAwOworCisgICAgICAgIC8vIE5vIG5lZWQgdG8gbm90aWZ5IHRoZSBwYXJlbnQg
cGFnZSBjb250ZXh0IHdoZW4gZGVkaWNhdGVkIHdvcmtlcnMgYXJlIGNsb3NpbmcuCisgICAgICAg
IHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCkgeyB9CisgICAgfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNlbmRpZiAv
LyBXb3JrZXJPYmplY3RQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dvcmtlcnMvV29ya2VyUmVwb3J0aW5nUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d29ya2Vycy9Xb3JrZXJSZXBvcnRpbmdQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjgwNGFmMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dvcmtlcnMvV29ya2VyUmVwb3J0aW5nUHJveHkuaApAQCAtMCwwICsxLDY0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXb3JrZXJSZXBvcnRpbmdQcm94eV9oCisjZGVmaW5lIFdvcmtlclJlcG9ydGluZ1Byb3h5X2gK
KworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiQ29uc29sZVR5cGVzLmgiCisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gQVBJ
cyB1c2VkIGJ5IHdvcmtlcnMgdG8gcmVwb3J0IGNvbnNvbGUgYWN0aXZpdHkuCisgICAgY2xhc3Mg
V29ya2VyUmVwb3J0aW5nUHJveHkgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+V29y
a2VyUmVwb3J0aW5nUHJveHkoKSB7fQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0
aW9uVG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkgPSAwOworCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChNZXNzYWdlU291cmNlLCBNZXNzYWdl
VHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkgPSAwOworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rvcihjb25zdCBTdHJp
bmcmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tp
ZShjb25zdCBTdHJpbmcmKSA9IDA7CisjZW5kaWYKKyAgICAgICAgLy8gSW52b2tlZCB3aGVuIGNs
b3NlKCkgaXMgaW52b2tlZCBvbiB0aGUgd29ya2VyIGNvbnRleHQuCisgICAgICAgIHZpcnR1YWwg
dm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCkgPSAwOworCisgICAgICAgIC8vIEludm9rZWQgd2hl
biB0aGUgdGhyZWFkIGhhcyBzdG9wcGVkLgorICAgICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29u
dGV4dERlc3Ryb3llZCgpID0gMDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIFdvcmtlclJlcG9ydGluZ1By
b3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJS
dW5Mb29wLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJSdW5Mb29w
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjY2NWQyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlclJ1bkxvb3Au
Y3BwCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXT1JLRVJTKQorCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgIlNoYXJlZFRpbWVyLmgiCisjaW5jbHVkZSAiVGhyZWFkR2xvYmFsRGF0YS5oIgorI2luY2x1
ZGUgIlRocmVhZFRpbWVycy5oIgorI2luY2x1ZGUgIldvcmtlclJ1bkxvb3AuaCIKKyNpbmNsdWRl
ICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV29ya2Vy
U2hhcmVkVGltZXIgOiBwdWJsaWMgU2hhcmVkVGltZXIgeworcHVibGljOgorICAgIFdvcmtlclNo
YXJlZFRpbWVyKCkKKyAgICAgICAgOiBtX3NoYXJlZFRpbWVyRnVuY3Rpb24oMCkKKyAgICAgICAg
LCBtX25leHRGaXJlVGltZSgwKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTaGFyZWRUaW1lciBp
bnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lkIHNldEZpcmVkRnVuY3Rpb24odm9pZCAoKmZ1bmN0
aW9uKSgpKSB7IG1fc2hhcmVkVGltZXJGdW5jdGlvbiA9IGZ1bmN0aW9uOyB9CisgICAgdmlydHVh
bCB2b2lkIHNldEZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpIHsgbV9uZXh0RmlyZVRpbWUg
PSBpbnRlcnZhbCArIGN1cnJlbnRUaW1lKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIHsg
bV9uZXh0RmlyZVRpbWUgPSAwOyB9CisKKyAgICBib29sIGlzQWN0aXZlKCkgeyByZXR1cm4gbV9z
aGFyZWRUaW1lckZ1bmN0aW9uICYmIG1fbmV4dEZpcmVUaW1lOyB9CisgICAgZG91YmxlIGZpcmVU
aW1lKCkgeyByZXR1cm4gbV9uZXh0RmlyZVRpbWU7IH0KKyAgICB2b2lkIGZpcmUoKSB7IG1fc2hh
cmVkVGltZXJGdW5jdGlvbigpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCAoKm1fc2hhcmVkVGlt
ZXJGdW5jdGlvbikoKTsKKyAgICBkb3VibGUgbV9uZXh0RmlyZVRpbWU7Cit9OworCitjbGFzcyBN
b2RlUHJlZGljYXRlIHsKK3B1YmxpYzoKKyAgICBNb2RlUHJlZGljYXRlKGNvbnN0IFN0cmluZyYg
bW9kZSkKKyAgICAgICAgOiBtX21vZGUobW9kZSkKKyAgICAgICAgLCBtX2RlZmF1bHRNb2RlKG1v
ZGUgPT0gV29ya2VyUnVuTG9vcDo6ZGVmYXVsdE1vZGUoKSkKKyAgICB7CisgICAgfQorCisgICAg
Ym9vbCBpc0RlZmF1bHRNb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RlZmF1
bHRNb2RlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IoKShXb3JrZXJSdW5Mb29wOjpUYXNr
KiB0YXNrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGVmYXVsdE1vZGUgfHwgbV9t
b2RlID09IHRhc2stPm1vZGUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fbW9k
ZTsKKyAgICBib29sIG1fZGVmYXVsdE1vZGU7Cit9OworCitXb3JrZXJSdW5Mb29wOjpXb3JrZXJS
dW5Mb29wKCkKKyAgICA6IG1fc2hhcmVkVGltZXIoYWRvcHRQdHIobmV3IFdvcmtlclNoYXJlZFRp
bWVyKSkKKyAgICAsIG1fbmVzdGVkQ291bnQoMCkKKyAgICAsIG1fdW5pcXVlSWQoMCkKK3sKK30K
KworV29ya2VyUnVuTG9vcDo6fldvcmtlclJ1bkxvb3AoKQoreworICAgIEFTU0VSVCghbV9uZXN0
ZWRDb3VudCk7Cit9CisKK1N0cmluZyBXb3JrZXJSdW5Mb29wOjpkZWZhdWx0TW9kZSgpCit7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorCitjbGFzcyBSdW5Mb29wU2V0dXAgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFJ1bkxvb3BTZXR1cCk7CitwdWJsaWM6CisgICAgUnVuTG9vcFNldHVw
KFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3ApCisgICAgICAgIDogbV9ydW5Mb29wKHJ1bkxvb3ApCisg
ICAgeworICAgICAgICBpZiAoIW1fcnVuTG9vcC5tX25lc3RlZENvdW50KQorICAgICAgICAgICAg
dGhyZWFkR2xvYmFsRGF0YSgpLnRocmVhZFRpbWVycygpLnNldFNoYXJlZFRpbWVyKG1fcnVuTG9v
cC5tX3NoYXJlZFRpbWVyLmdldCgpKTsKKyAgICAgICAgbV9ydW5Mb29wLm1fbmVzdGVkQ291bnQr
KzsKKyAgICB9CisKKyAgICB+UnVuTG9vcFNldHVwKCkKKyAgICB7CisgICAgICAgIG1fcnVuTG9v
cC5tX25lc3RlZENvdW50LS07CisgICAgICAgIGlmICghbV9ydW5Mb29wLm1fbmVzdGVkQ291bnQp
CisgICAgICAgICAgICB0aHJlYWRHbG9iYWxEYXRhKCkudGhyZWFkVGltZXJzKCkuc2V0U2hhcmVk
VGltZXIoMCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBXb3JrZXJSdW5Mb29wJiBtX3J1bkxvb3A7
Cit9OworCit2b2lkIFdvcmtlclJ1bkxvb3A6OnJ1bihXb3JrZXJDb250ZXh0KiBjb250ZXh0KQor
eworICAgIFJ1bkxvb3BTZXR1cCBzZXR1cCgqdGhpcyk7CisgICAgTW9kZVByZWRpY2F0ZSBtb2Rl
UHJlZGljYXRlKGRlZmF1bHRNb2RlKCkpOworICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgcmVz
dWx0OworICAgIGRvIHsKKyAgICAgICAgcmVzdWx0ID0gcnVuSW5Nb2RlKGNvbnRleHQsIG1vZGVQ
cmVkaWNhdGUsIFdhaXRGb3JNZXNzYWdlKTsKKyAgICB9IHdoaWxlIChyZXN1bHQgIT0gTWVzc2Fn
ZVF1ZXVlVGVybWluYXRlZCk7CisgICAgcnVuQ2xlYW51cFRhc2tzKGNvbnRleHQpOworfQorCitN
ZXNzYWdlUXVldWVXYWl0UmVzdWx0IFdvcmtlclJ1bkxvb3A6OnJ1bkluTW9kZShXb3JrZXJDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG1vZGUsIFdhaXRNb2RlIHdhaXRNb2RlKQorewor
ICAgIFJ1bkxvb3BTZXR1cCBzZXR1cCgqdGhpcyk7CisgICAgTW9kZVByZWRpY2F0ZSBtb2RlUHJl
ZGljYXRlKG1vZGUpOworICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgcmVzdWx0ID0gcnVuSW5N
b2RlKGNvbnRleHQsIG1vZGVQcmVkaWNhdGUsIHdhaXRNb2RlKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitNZXNzYWdlUXVldWVXYWl0UmVzdWx0IFdvcmtlclJ1bkxvb3A6OnJ1bkluTW9kZShX
b3JrZXJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBNb2RlUHJlZGljYXRlJiBwcmVkaWNhdGUsIFdh
aXRNb2RlIHdhaXRNb2RlKQoreworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQoY29u
dGV4dC0+dGhyZWFkKCkpOworICAgIEFTU0VSVChjb250ZXh0LT50aHJlYWQoKS0+dGhyZWFkSUQo
KSA9PSBjdXJyZW50VGhyZWFkKCkpOworCisgICAgZG91YmxlIGFic29sdXRlVGltZSA9IDAuMDsK
KyAgICBpZiAod2FpdE1vZGUgPT0gV2FpdEZvck1lc3NhZ2UpCisgICAgICAgIGFic29sdXRlVGlt
ZSA9IChwcmVkaWNhdGUuaXNEZWZhdWx0TW9kZSgpICYmIG1fc2hhcmVkVGltZXItPmlzQWN0aXZl
KCkpID8gbV9zaGFyZWRUaW1lci0+ZmlyZVRpbWUoKSA6IE1lc3NhZ2VRdWV1ZTxUYXNrPjo6aW5m
aW5pdGVUaW1lKCk7CisgICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCByZXN1bHQ7CisgICAgT3du
UHRyPFdvcmtlclJ1bkxvb3A6OlRhc2s+IHRhc2sgPSBtX21lc3NhZ2VRdWV1ZS53YWl0Rm9yTWVz
c2FnZUZpbHRlcmVkV2l0aFRpbWVvdXQocmVzdWx0LCBwcmVkaWNhdGUsIGFic29sdXRlVGltZSk7
CisKKyAgICAvLyBJZiB0aGUgY29udGV4dCBpcyBjbG9zaW5nLCBkb24ndCBleGVjdXRlIGFueSBm
dXJ0aGVyIEphdmFTY3JpcHQgdGFza3MgKHBlciBzZWN0aW9uIDQuMS4xIG9mIHRoZSBXZWIgV29y
a2VycyBzcGVjKS4gIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBpbXBsZW1lbnRhdGlvbiBjbGVhbnVw
IHRhc2tzIGluIHRoZSBxdWV1ZSwgc28ga2VlcCBydW5uaW5nIHRocm91Z2ggaXQuCisKKyAgICBz
d2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgTWVzc2FnZVF1ZXVlVGVybWluYXRlZDoKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIE1lc3NhZ2VRdWV1ZU1lc3NhZ2VSZWNlaXZlZDoKKyAgICAg
ICAgdGFzay0+cGVyZm9ybVRhc2soKnRoaXMsIGNvbnRleHQpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgTWVzc2FnZVF1ZXVlVGltZW91dDoKKyAgICAgICAgaWYgKCFjb250ZXh0LT5pc0Ns
b3NpbmcoKSkKKyAgICAgICAgICAgIG1fc2hhcmVkVGltZXItPmZpcmUoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBXb3JrZXJSdW5Mb29w
OjpydW5DbGVhbnVwVGFza3MoV29ya2VyQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBBU1NFUlQo
Y29udGV4dCk7CisgICAgQVNTRVJUKGNvbnRleHQtPnRocmVhZCgpKTsKKyAgICBBU1NFUlQoY29u
dGV4dC0+dGhyZWFkKCktPnRocmVhZElEKCkgPT0gY3VycmVudFRocmVhZCgpKTsKKyAgICBBU1NF
UlQobV9tZXNzYWdlUXVldWUua2lsbGVkKCkpOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgT3duUHRyPFdvcmtlclJ1bkxvb3A6OlRhc2s+IHRhc2sgPSBtX21lc3NhZ2VRdWV1ZS50cnlH
ZXRNZXNzYWdlSWdub3JpbmdLaWxsZWQoKTsKKyAgICAgICAgaWYgKCF0YXNrKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygqdGhpcywgY29udGV4dCk7Cisg
ICAgfQorfQorCit2b2lkIFdvcmtlclJ1bkxvb3A6OnRlcm1pbmF0ZSgpCit7CisgICAgbV9tZXNz
YWdlUXVldWUua2lsbCgpOworfQorCit2b2lkIFdvcmtlclJ1bkxvb3A6OnBvc3RUYXNrKFBhc3NP
d25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKK3sKKyAgICBwb3N0VGFz
a0Zvck1vZGUodGFzaywgZGVmYXVsdE1vZGUoKSk7Cit9CisKK3ZvaWQgV29ya2VyUnVuTG9vcDo6
cG9zdFRhc2tGb3JNb2RlKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4g
dGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQoreworICAgIG1fbWVzc2FnZVF1ZXVlLmFwcGVuZChU
YXNrOjpjcmVhdGUodGFzaywgbW9kZS5pc29sYXRlZENvcHkoKSkpOworfQorCitQYXNzT3duUHRy
PFdvcmtlclJ1bkxvb3A6OlRhc2s+IFdvcmtlclJ1bkxvb3A6OlRhc2s6OmNyZWF0ZShQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9k
ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRhc2sodGFzaywgbW9kZSkpOworfQorCit2
b2lkIFdvcmtlclJ1bkxvb3A6OlRhc2s6OnBlcmZvcm1UYXNrKGNvbnN0IFdvcmtlclJ1bkxvb3Am
IHJ1bkxvb3AsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgV29ya2Vy
Q29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQgKj4oY29u
dGV4dCk7CisgICAgaWYgKCghd29ya2VyQ29udGV4dC0+aXNDbG9zaW5nKCkgJiYgIXJ1bkxvb3Au
dGVybWluYXRlZCgpKSB8fCBtX3Rhc2stPmlzQ2xlYW51cFRhc2soKSkKKyAgICAgICAgbV90YXNr
LT5wZXJmb3JtVGFzayhjb250ZXh0KTsKK30KKworV29ya2VyUnVuTG9vcDo6VGFzazo6VGFzayhQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmlu
ZyYgbW9kZSkKKyAgICA6IG1fdGFzayh0YXNrKQorICAgICwgbV9tb2RlKG1vZGUuaXNvbGF0ZWRD
b3B5KCkpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dv
cmtlclJ1bkxvb3AuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJSdW5M
b29wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkxNmQ2YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJSdW5Mb29w
LmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdvcmtlclJ1bkxvb3BfaAorI2RlZmluZSBX
b3JrZXJSdW5Mb29wX2gKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9NZXNzYWdlUXVldWUuaD4KKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgTW9kZVByZWRpY2F0ZTsKKyAgICBjbGFzcyBXb3Jr
ZXJDb250ZXh0OworICAgIGNsYXNzIFdvcmtlclNoYXJlZFRpbWVyOworCisgICAgY2xhc3MgV29y
a2VyUnVuTG9vcCB7CisgICAgcHVibGljOgorICAgICAgICBXb3JrZXJSdW5Mb29wKCk7CisgICAg
ICAgIH5Xb3JrZXJSdW5Mb29wKCk7CisgICAgICAgIAorICAgICAgICAvLyBCbG9ja2luZyBjYWxs
LiBXYWl0cyBmb3IgdGFza3MgYW5kIHRpbWVycywgaW52b2tlcyB0aGUgY2FsbGJhY2tzLgorICAg
ICAgICB2b2lkIHJ1bihXb3JrZXJDb250ZXh0Kik7CisKKyAgICAgICAgZW51bSBXYWl0TW9kZSB7
IFdhaXRGb3JNZXNzYWdlLCBEb250V2FpdEZvck1lc3NhZ2UgfTsKKworICAgICAgICAvLyBXYWl0
cyBmb3IgYSBzaW5nbGUgdGFzayBhbmQgcmV0dXJucy4KKyAgICAgICAgTWVzc2FnZVF1ZXVlV2Fp
dFJlc3VsdCBydW5Jbk1vZGUoV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbW9kZSwgV2Fp
dE1vZGUgPSBXYWl0Rm9yTWVzc2FnZSk7CisKKyAgICAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKKyAg
ICAgICAgYm9vbCB0ZXJtaW5hdGVkKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlUXVldWUua2ls
bGVkKCk7IH0KKworICAgICAgICB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4pOworICAgICAgICB2b2lkIHBvc3RUYXNrRm9yTW9kZShQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBjb25zdCBTdHJpbmcmIG1vZGUpOwor
CisgICAgICAgIHVuc2lnbmVkIGxvbmcgY3JlYXRlVW5pcXVlSWQoKSB7IHJldHVybiArK21fdW5p
cXVlSWQ7IH0KKworICAgICAgICBzdGF0aWMgU3RyaW5nIGRlZmF1bHRNb2RlKCk7CisKKyAgICAg
ICAgY2xhc3MgVGFzayB7CisgICAgICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUYXNrKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHN0
YXRpYyBQYXNzT3duUHRyPFRhc2s+IGNyZWF0ZShQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgICAgICAgICB+VGFz
aygpIHsgfQorICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9tb2RlOyB9CisgICAgICAgICAgICB2b2lkIHBlcmZvcm1UYXNrKGNvbnN0IFdvcmtlclJ1bkxv
b3AmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIFRhc2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNr
LCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgICAgICAKKyAgICAgICAgICAgIE93blB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBtX3Rhc2s7CisgICAgICAgICAgICBTdHJpbmcgbV9t
b2RlOworICAgICAgICB9OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFJ1
bkxvb3BTZXR1cDsKKyAgICAgICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCBydW5Jbk1vZGUoV29y
a2VyQ29udGV4dCosIGNvbnN0IE1vZGVQcmVkaWNhdGUmLCBXYWl0TW9kZSk7CisKKyAgICAgICAg
Ly8gUnVucyBhbnkgY2xlYW4gdXAgdGFza3MgdGhhdCBhcmUgY3VycmVudGx5IGluIHRoZSBxdWV1
ZSBhbmQgcmV0dXJucy4KKyAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hl
biB0aGUgY29udGV4dCBpcyBjbG9zZWQgb3IgbG9vcCBoYXMgYmVlbiB0ZXJtaW5hdGVkLgorICAg
ICAgICB2b2lkIHJ1bkNsZWFudXBUYXNrcyhXb3JrZXJDb250ZXh0Kik7CisKKyAgICAgICAgTWVz
c2FnZVF1ZXVlPFRhc2s+IG1fbWVzc2FnZVF1ZXVlOworICAgICAgICBPd25QdHI8V29ya2VyU2hh
cmVkVGltZXI+IG1fc2hhcmVkVGltZXI7CisgICAgICAgIGludCBtX25lc3RlZENvdW50OworICAg
ICAgICB1bnNpZ25lZCBsb25nIG1fdW5pcXVlSWQ7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNlbmRpZiAvLyBXb3JrZXJS
dW5Mb29wX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3Jr
ZXJTY3JpcHRMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtl
clNjcmlwdExvYWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkz
MmJlOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9X
b3JrZXJTY3JpcHRMb2FkZXIuY3BwCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRl
ICJXb3JrZXJTY3JpcHRMb2FkZXIuaCIKKworI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgor
I2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJUZXh0UmVz
b3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldv
cmtlclNjcmlwdExvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIldvcmtlclRocmVhZGFibGVMb2Fk
ZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
V29ya2VyU2NyaXB0TG9hZGVyOjpXb3JrZXJTY3JpcHRMb2FkZXIoKQorICAgIDogbV9jbGllbnQo
MCkKKyAgICAsIG1fc2NyaXB0KCIiKQorICAgICwgbV9mYWlsZWQoZmFsc2UpCisgICAgLCBtX2lk
ZW50aWZpZXIoMCkKKyAgICAsIG1fZmluaXNoaW5nKGZhbHNlKQorI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQorICAgICwgbV90YXJnZXRUeXBlKFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNXb3JrZXIp
CisjZW5kaWYKK3sKK30KKworV29ya2VyU2NyaXB0TG9hZGVyOjp+V29ya2VyU2NyaXB0TG9hZGVy
KCkKK3sKK30KKwordm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRTeW5jaHJvbm91c2x5KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IEtVUkwm
IHVybCwgQ3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5IGNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSkK
K3sKKyAgICBtX3VybCA9IHVybDsKKworICAgIE93blB0cjxSZXNvdXJjZVJlcXVlc3Q+IHJlcXVl
c3QoY3JlYXRlUmVzb3VyY2VSZXF1ZXN0KCkpOworICAgIGlmICghcmVxdWVzdCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyQ29u
dGV4dCgpKTsKKworICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0
aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gQWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKyAgICBvcHRp
b25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IGNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeTsK
KyAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzID0gU2VuZENhbGxiYWNrczsKKworICAgIFdv
cmtlclRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc3RhdGljX2Nh
c3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLCAqcmVxdWVzdCwgKnRo
aXMsIG9wdGlvbnMpOworfQorICAgIAordm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmxvYWRBc3lu
Y2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBjb25zdCBLVVJMJiB1cmwsIENyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSBjcm9zc09yaWdpblJl
cXVlc3RQb2xpY3ksIFdvcmtlclNjcmlwdExvYWRlckNsaWVudCogY2xpZW50KQoreworICAgIEFT
U0VSVChjbGllbnQpOworICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIG1fdXJsID0gdXJsOwor
CisgICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4gcmVxdWVzdChjcmVhdGVSZXNvdXJjZVJlcXVl
c3QoKSk7CisgICAgaWYgKCFyZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBUaHJlYWRh
YmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9
IEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQ
b2xpY3kgPSBjcm9zc09yaWdpblJlcXVlc3RQb2xpY3k7CisgICAgb3B0aW9ucy5zZW5kTG9hZENh
bGxiYWNrcyA9IFNlbmRDYWxsYmFja3M7CisKKyAgICAvLyBEdXJpbmcgY3JlYXRlLCBjYWxsYmFj
a3MgbWF5IGhhcHBlbiB3aGljaCByZW1vdmUgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2Jq
ZWN0LgorICAgIFJlZlB0cjxXb3JrZXJTY3JpcHRMb2FkZXI+IHByb3RlY3QodGhpcyk7CisgICAg
bV90aHJlYWRhYmxlTG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIHRoaXMsICpyZXF1ZXN0LCBvcHRpb25zKTsKK30KKworY29uc3QgS1VSTCYg
V29ya2VyU2NyaXB0TG9hZGVyOjpyZXNwb25zZVVSTCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFm
YWlsZWQoKSk7CisgICAgcmV0dXJuIG1fcmVzcG9uc2VVUkw7Cit9CisKK1Bhc3NPd25QdHI8UmVz
b3VyY2VSZXF1ZXN0PiBXb3JrZXJTY3JpcHRMb2FkZXI6OmNyZWF0ZVJlc291cmNlUmVxdWVzdCgp
Cit7CisgICAgT3duUHRyPFJlc291cmNlUmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0UHRyKG5ldyBS
ZXNvdXJjZVJlcXVlc3QobV91cmwpKTsKKyAgICByZXF1ZXN0LT5zZXRIVFRQTWV0aG9kKCJHRVQi
KTsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBy
ZXF1ZXN0LT5zZXRUYXJnZXRUeXBlKG1fdGFyZ2V0VHlwZSk7CisjZW5kaWYKKyAgICByZXR1cm4g
cmVxdWVzdC5yZWxlYXNlKCk7Cit9CisgICAgCit2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaWYgKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkg
LyAxMDAgIT0gMiAmJiByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKSB7CisgICAgICAgIG1fZmFp
bGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3Jlc3BvbnNlVVJMID0g
cmVzcG9uc2UudXJsKCk7CisgICAgbV9yZXNwb25zZUVuY29kaW5nID0gcmVzcG9uc2UudGV4dEVu
Y29kaW5nTmFtZSgpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFJl
Y2VpdmVSZXNwb25zZShpZGVudGlmaWVyLCByZXNwb25zZSk7Cit9CisKK3ZvaWQgV29ya2VyU2Ny
aXB0TG9hZGVyOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKQorewor
ICAgIGlmIChtX2ZhaWxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2RlY29kZXIp
IHsKKyAgICAgICAgaWYgKCFtX3Jlc3BvbnNlRW5jb2RpbmcuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2phdmFzY3Jp
cHQiLCBtX3Jlc3BvbnNlRW5jb2RpbmcpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Rl
Y29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvamF2YXNjcmlwdCIsICJV
VEYtOCIpOworICAgIH0KKworICAgIGlmICghbGVuKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgaWYgKGxlbiA9PSAtMSkKKyAgICAgICAgbGVuID0gc3RybGVuKGRhdGEpOworICAgIAorICAg
IG1fc2NyaXB0ICs9IG1fZGVjb2Rlci0+ZGVjb2RlKGRhdGEsIGxlbik7Cit9CisKK3ZvaWQgV29y
a2VyU2NyaXB0TG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgZG91YmxlKQoreworICAgIGlmIChtX2ZhaWxlZCkgeworICAgICAgICBub3RpZnlFcnJvcigp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAgICAg
bV9zY3JpcHQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOworCisgICAgbV9pZGVudGlmaWVyID0gaWRl
bnRpZmllcjsKKyAgICBub3RpZnlGaW5pc2hlZCgpOworfQorCit2b2lkIFdvcmtlclNjcmlwdExv
YWRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikKK3sKKyAgICBub3RpZnlFcnJvcigp
OworfQorCit2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6ZGlkRmFpbFJlZGlyZWN0Q2hlY2soKQor
eworICAgIG5vdGlmeUVycm9yKCk7Cit9CisKK3ZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpub3Rp
ZnlFcnJvcigpCit7CisgICAgbV9mYWlsZWQgPSB0cnVlOworICAgIG5vdGlmeUZpbmlzaGVkKCk7
Cit9CisgICAgCit2b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6bm90aWZ5RmluaXNoZWQoKQorewor
ICAgIGlmICghbV9jbGllbnQgfHwgbV9maW5pc2hpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fZmluaXNoaW5nID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+bm90aWZ5RmluaXNoZWQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9h
ZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGViYjc2MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2Fk
ZXIuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29v
Z2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpZm5kZWYgV29ya2Vy
U2NyaXB0TG9hZGVyX2gKKyNkZWZpbmUgV29ya2VyU2NyaXB0TG9hZGVyX2gKKworI2lmIEVOQUJM
RShXT1JLRVJTKQorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50LmgiCisKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworICAgIGNsYXNz
IFJlc291cmNlUmVzcG9uc2U7CisgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAg
ICBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOworICAgIGNsYXNzIFdvcmtlclNjcmlwdExvYWRl
ckNsaWVudDsKKworICAgIGNsYXNzIFdvcmtlclNjcmlwdExvYWRlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFdvcmtlclNjcmlwdExvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsK
KyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJTY3JpcHRMb2FkZXI+IGNyZWF0ZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyU2NyaXB0TG9hZGVyKCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBsb2FkU3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgS1VSTCYsIENyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSk7CisgICAg
ICAgIHZvaWQgbG9hZEFzeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBLVVJMJiwgQ3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5LCBXb3JrZXJTY3JpcHRMb2FkZXJDbGll
bnQqKTsKKworICAgICAgICB2b2lkIG5vdGlmeUVycm9yKCk7CisKKyAgICAgICAgY29uc3QgU3Ry
aW5nJiBzY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdDsgfQorICAgICAgICBjb25zdCBL
VVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQorICAgICAgICBjb25zdCBLVVJMJiBy
ZXNwb25zZVVSTCgpIGNvbnN0OworICAgICAgICBib29sIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZmFpbGVkOyB9CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1faWRlbnRpZmllcjsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UodW5zaWduZWQgbG9uZyAvKmlkZW50aWZpZXIqLywgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciog
ZGF0YSwgaW50IGRhdGFMZW5ndGgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9h
ZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CisKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExB
VEZPUk0oQkxBQ0tCRVJSWSkKKyAgICAgICAgdm9pZCBzZXRUYXJnZXRUeXBlKFJlc291cmNlUmVx
dWVzdDo6VGFyZ2V0VHlwZSB0YXJnZXRUeXBlKSB7IG1fdGFyZ2V0VHlwZSA9IHRhcmdldFR5cGU7
IH0KKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFdURjo6UmVm
Q291bnRlZDxXb3JrZXJTY3JpcHRMb2FkZXI+OworCisgICAgICAgIFdvcmtlclNjcmlwdExvYWRl
cigpOworICAgICAgICB+V29ya2VyU2NyaXB0TG9hZGVyKCk7CisKKyAgICAgICAgUGFzc093blB0
cjxSZXNvdXJjZVJlcXVlc3Q+IGNyZWF0ZVJlc291cmNlUmVxdWVzdCgpOworICAgICAgICB2b2lk
IG5vdGlmeUZpbmlzaGVkKCk7CisKKyAgICAgICAgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50KiBt
X2NsaWVudDsKKyAgICAgICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IG1fdGhyZWFkYWJsZUxv
YWRlcjsKKyAgICAgICAgU3RyaW5nIG1fcmVzcG9uc2VFbmNvZGluZzsgICAgICAgIAorICAgICAg
ICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAgICAgICBTdHJpbmcg
bV9zY3JpcHQ7CisgICAgICAgIEtVUkwgbV91cmw7CisgICAgICAgIEtVUkwgbV9yZXNwb25zZVVS
TDsKKyAgICAgICAgYm9vbCBtX2ZhaWxlZDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtX2lkZW50
aWZpZXI7CisgICAgICAgIGJvb2wgbV9maW5pc2hpbmc7CisjaWYgUExBVEZPUk0oQ0hST01JVU0p
IHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgICAgIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0
VHlwZSBtX3RhcmdldFR5cGU7CisjZW5kaWYKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIFdvcmtlclNjcmlw
dExvYWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29y
a2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMv
V29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMzcxZjliNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaApAQCAtMCwwICsxLDUzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
CisgKi8KKworI2lmbmRlZiBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnRfaAorI2RlZmluZSBXb3Jr
ZXJTY3JpcHRMb2FkZXJDbGllbnRfaAorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CisKKyAgICBjbGFzcyBX
b3JrZXJTY3JpcHRMb2FkZXJDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CisKKyAgICAgICAgLy8gRklYTUU6IG5vdGlmeUZpbmlz
aGVkKCkgaXMgbm90IGN1cnJlbnRseSBndWFyYW50ZWVkIHRvIGJlIGludm9rZWQgaWYgdXNlZCBm
cm9tIHdvcmtlciBjb250ZXh0IGFuZCB0aGUgd29ya2VyIHNodXRzIGRvd24gaW4gdGhlIG1pZGRs
ZSBvZiBhbiBvcGVyYXRpb24uCisgICAgICAgIC8vIFRoaXMgd2lsbCBjYXVzZSBsZWFrcyB3aGVu
IHdlIHN1cHBvcnQgbmVzdGVkIHdvcmtlcnMuCisgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlG
aW5pc2hlZCgpIHsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIH5Xb3JrZXJT
Y3JpcHRMb2FkZXJDbGllbnQoKSB7IH0KKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIFdvcmtlclNjcmlwdExv
YWRlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMv
V29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd29ya2Vycy9Xb3JrZXJU
aHJlYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZGU4MDAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyVGhy
ZWFkLmNwcApAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisK
KyNpbmNsdWRlICJEYXRhYmFzZUNvbnRleHQuaCIKKyNpbmNsdWRlICJEZWRpY2F0ZWRXb3JrZXJD
b250ZXh0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVk
ZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0
U291cmNlQ29kZS5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSAiVGhyZWFk
R2xvYmFsRGF0YS5oIgorCisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisjaW5jbHVkZSAiRGF0YWJhc2VU
YXNrLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCisjZW5kaWYKKworI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQorI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHB1
YmxpYy9XZWJXb3JrZXJSdW5Mb29wLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgTXV0ZXgmIHRocmVhZENvdW50TXV0ZXgoKQoreworICAgIEF0b21pY2FsbHlJbml0
aWFsaXplZFN0YXRpYyhNdXRleCYsIG11dGV4ID0gKm5ldyBNdXRleCk7CisgICAgcmV0dXJuIG11
dGV4OworfQorCit1bnNpZ25lZCBXb3JrZXJUaHJlYWQ6Om1fdGhyZWFkQ291bnQgPSAwOworCit1
bnNpZ25lZCBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZENvdW50KCkKK3sKKyAgICBNdXRleExv
Y2tlciBsb2NrKHRocmVhZENvdW50TXV0ZXgoKSk7CisgICAgcmV0dXJuIG1fdGhyZWFkQ291bnQ7
Cit9CisKK3N0cnVjdCBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YSB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoV29ya2VyVGhyZWFkU3RhcnR1cERhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxXb3JrZXJUaHJlYWRTdGFydHVwRGF0
YT4gY3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQs
IGNvbnN0IEdyb3VwU2V0dGluZ3MqIHNldHRpbmdzLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUs
IFdvcmtlclRocmVhZFN0YXJ0TW9kZSBzdGFydE1vZGUsIGNvbnN0IFN0cmluZyYgY29udGVudFNl
Y3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUgY29udGVudFNl
Y3VyaXR5UG9saWN5VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV29y
a2VyVGhyZWFkU3RhcnR1cERhdGEoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNldHRpbmdzLCBzb3Vy
Y2VDb2RlLCBzdGFydE1vZGUsIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgY29udGVudFNlY3VyaXR5
UG9saWN5VHlwZSkpOworICAgIH0KKworICAgIEtVUkwgbV9zY3JpcHRVUkw7CisgICAgU3RyaW5n
IG1fdXNlckFnZW50OworICAgIE93blB0cjxHcm91cFNldHRpbmdzPiBtX2dyb3VwU2V0dGluZ3M7
CisgICAgU3RyaW5nIG1fc291cmNlQ29kZTsKKyAgICBXb3JrZXJUaHJlYWRTdGFydE1vZGUgbV9z
dGFydE1vZGU7CisgICAgU3RyaW5nIG1fY29udGVudFNlY3VyaXR5UG9saWN5OworICAgIENvbnRl
bnRTZWN1cml0eVBvbGljeTo6SGVhZGVyVHlwZSBtX2NvbnRlbnRTZWN1cml0eVBvbGljeVR5cGU7
Citwcml2YXRlOgorICAgIFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhKGNvbnN0IEtVUkwmIHNjcmlw
dFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IEdyb3VwU2V0dGluZ3MqLCBjb25z
dCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlclRocmVhZFN0YXJ0TW9kZSwgY29uc3QgU3RyaW5n
JiBjb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGVhZGVyVHlw
ZSBjb250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKTsKK307CisKK1dvcmtlclRocmVhZFN0YXJ0dXBE
YXRhOjpXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0
IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBHcm91cFNldHRpbmdzKiBzZXR0aW5ncywgY29uc3Qg
U3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpI
ZWFkZXJUeXBlIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5cGUpCisgICAgOiBtX3NjcmlwdFVSTChz
Y3JpcHRVUkwuY29weSgpKQorICAgICwgbV91c2VyQWdlbnQodXNlckFnZW50Lmlzb2xhdGVkQ29w
eSgpKQorICAgICwgbV9zb3VyY2VDb2RlKHNvdXJjZUNvZGUuaXNvbGF0ZWRDb3B5KCkpCisgICAg
LCBtX3N0YXJ0TW9kZShzdGFydE1vZGUpCisgICAgLCBtX2NvbnRlbnRTZWN1cml0eVBvbGljeShj
b250ZW50U2VjdXJpdHlQb2xpY3kuaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX2NvbnRlbnRTZWN1
cml0eVBvbGljeVR5cGUoY29udGVudFNlY3VyaXR5UG9saWN5VHlwZSkKK3sKKyAgICBpZiAoIXNl
dHRpbmdzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2dyb3VwU2V0dGluZ3MgPSBHcm91cFNl
dHRpbmdzOjpjcmVhdGUoKTsKKyAgICBtX2dyb3VwU2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZVF1
b3RhQnl0ZXMoc2V0dGluZ3MtPmxvY2FsU3RvcmFnZVF1b3RhQnl0ZXMoKSk7CisgICAgbV9ncm91
cFNldHRpbmdzLT5zZXRJbmRleGVkREJRdW90YUJ5dGVzKHNldHRpbmdzLT5pbmRleGVkREJRdW90
YUJ5dGVzKCkpOworICAgIG1fZ3JvdXBTZXR0aW5ncy0+c2V0SW5kZXhlZERCRGF0YWJhc2VQYXRo
KHNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKS5pc29sYXRlZENvcHkoKSk7Cit9CisK
K1dvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3Qg
U3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IEdyb3VwU2V0dGluZ3MqIHNldHRpbmdzLCBjb25zdCBT
dHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSwg
V29ya2VyUmVwb3J0aW5nUHJveHkmIHdvcmtlclJlcG9ydGluZ1Byb3h5LCBXb3JrZXJUaHJlYWRT
dGFydE1vZGUgc3RhcnRNb2RlLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwg
Q29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5
cGUpCisgICAgOiBtX3RocmVhZElEKDApCisgICAgLCBtX3dvcmtlckxvYWRlclByb3h5KHdvcmtl
ckxvYWRlclByb3h5KQorICAgICwgbV93b3JrZXJSZXBvcnRpbmdQcm94eSh3b3JrZXJSZXBvcnRp
bmdQcm94eSkKKyAgICAsIG1fc3RhcnR1cERhdGEoV29ya2VyVGhyZWFkU3RhcnR1cERhdGE6OmNy
ZWF0ZShzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc2V0dGluZ3MsIHNvdXJjZUNvZGUsIHN0YXJ0TW9k
ZSwgY29udGVudFNlY3VyaXR5UG9saWN5LCBjb250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKSkKKyNp
ZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQor
ICAgICwgbV9ub3RpZmljYXRpb25DbGllbnQoMCkKKyNlbmRpZgoreworICAgIE11dGV4TG9ja2Vy
IGxvY2sodGhyZWFkQ291bnRNdXRleCgpKTsKKyAgICBtX3RocmVhZENvdW50Kys7Cit9CisKK1dv
cmtlclRocmVhZDo6fldvcmtlclRocmVhZCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayh0aHJl
YWRDb3VudE11dGV4KCkpOworICAgIEFTU0VSVChtX3RocmVhZENvdW50ID4gMCk7CisgICAgbV90
aHJlYWRDb3VudC0tOworfQorCitib29sIFdvcmtlclRocmVhZDo6c3RhcnQoKQoreworICAgIC8v
IE11dGV4IHByb3RlY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IG1fdGhyZWFkSUQg
aXMgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgdGhyZWFkIHN0YXJ0cy4KKyAgICBNdXRleExvY2tlciBs
b2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CisKKyAgICBpZiAobV90aHJlYWRJRCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKFdvcmtlclRo
cmVhZDo6d29ya2VyVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOiBXb3JrZXIiKTsKKworICAg
IHJldHVybiBtX3RocmVhZElEOworfQorCit2b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFk
U3RhcnQodm9pZCogdGhyZWFkKQoreworICAgIHN0YXRpY19jYXN0PFdvcmtlclRocmVhZCo+KHRo
cmVhZCktPndvcmtlclRocmVhZCgpOworfQorCit2b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhy
ZWFkKCkKK3sKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlv
bk11dGV4KTsKKyAgICAgICAgbV93b3JrZXJDb250ZXh0ID0gY3JlYXRlV29ya2VyQ29udGV4dCht
X3N0YXJ0dXBEYXRhLT5tX3NjcmlwdFVSTCwgbV9zdGFydHVwRGF0YS0+bV91c2VyQWdlbnQsIG1f
c3RhcnR1cERhdGEtPm1fY29udGVudFNlY3VyaXR5UG9saWN5LCBtX3N0YXJ0dXBEYXRhLT5tX2Nv
bnRlbnRTZWN1cml0eVBvbGljeVR5cGUpOworCisgICAgICAgIGlmIChtX3J1bkxvb3AudGVybWlu
YXRlZCgpKSB7CisgICAgICAgICAgICAvLyBUaGUgd29ya2VyIHdhcyB0ZXJtaW5hdGVkIGJlZm9y
ZSB0aGUgdGhyZWFkIGhhZCBhIGNoYW5jZSB0byBydW4uIFNpbmNlIHRoZSBjb250ZXh0IGRpZG4n
dCBleGlzdCB5ZXQsCisgICAgICAgICAgICAvLyBmb3JiaWRFeGVjdXRpb24oKSBjb3VsZG4ndCBi
ZSBjYWxsZWQgZnJvbSBzdG9wKCkuCisgICAgICAgICAgIG1fd29ya2VyQ29udGV4dC0+c2NyaXB0
KCktPmZvcmJpZEV4ZWN1dGlvbigpOworICAgICAgICB9CisgICAgfQorI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKQorICAgIC8vIFRoZSBjb3JyZXNwb25kaW5nIGNhbGwgdG8gZGlkU3RvcFdvcmtlclJ1
bkxvb3AgaXMgaW4KKyAgICAvLyB+V29ya2VyU2NyaXB0Q29udHJvbGxlci4KKyAgICBXZWJLaXQ6
OlBsYXRmb3JtOjpjdXJyZW50KCktPmRpZFN0YXJ0V29ya2VyUnVuTG9vcChXZWJLaXQ6OldlYldv
cmtlclJ1bkxvb3AoJm1fcnVuTG9vcCkpOworI2VuZGlmCisKKyAgICBXb3JrZXJTY3JpcHRDb250
cm9sbGVyKiBzY3JpcHQgPSBtX3dvcmtlckNvbnRleHQtPnNjcmlwdCgpOworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVXb3Jr
ZXJTY3JpcHQod29ya2VyQ29udGV4dCgpLCBtX3N0YXJ0dXBEYXRhLT5tX3N0YXJ0TW9kZSk7Cisj
ZW5kaWYKKyAgICBzY3JpcHQtPmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUobV9zdGFydHVwRGF0
YS0+bV9zb3VyY2VDb2RlLCBtX3N0YXJ0dXBEYXRhLT5tX3NjcmlwdFVSTCkpOworICAgIC8vIEZy
ZWUgdGhlIHN0YXJ0dXAgZGF0YSB0byBjYXVzZSBpdHMgbWVtYmVyIHZhcmlhYmxlIGRlcmVmJ3Mg
aGFwcGVuIG9uIHRoZSB3b3JrZXIncyB0aHJlYWQgKHNpbmNlCisgICAgLy8gYWxsIHJlZi9kZXJl
ZnMgb2YgdGhlc2Ugb2JqZWN0cyBhcmUgaGFwcGVuaW5nIG9uIHRoZSB0aHJlYWQgYXQgdGhpcyBw
b2ludCkuIE5vdGUgdGhhdAorICAgIC8vIFdvcmtlclRocmVhZDo6fldvcmtlclRocmVhZCBoYXBw
ZW5zIG9uIGEgZGlmZmVyZW50IHRocmVhZCB3aGVyZSBpdCB3YXMgY3JlYXRlZC4KKyAgICBtX3N0
YXJ0dXBEYXRhLmNsZWFyKCk7CisKKyAgICBydW5FdmVudExvb3AoKTsKKworICAgIFRocmVhZElk
ZW50aWZpZXIgdGhyZWFkSUQgPSBtX3RocmVhZElEOworCisgICAgQVNTRVJUKG1fd29ya2VyQ29u
dGV4dC0+aGFzT25lUmVmKCkpOworCisgICAgLy8gVGhlIGJlbG93IGFzc2lnbm1lbnQgd2lsbCBk
ZXN0cm95IHRoZSBjb250ZXh0LCB3aGljaCB3aWxsIGluIHR1cm4gbm90aWZ5IG1lc3NhZ2luZyBw
cm94eS4KKyAgICAvLyBXZSBjYW5ub3QgbGV0IGFueSBvYmplY3RzIHN1cnZpdmUgcGFzdCB0aHJl
YWQgZXhpdCwgYmVjYXVzZSBubyBvdGhlciB0aHJlYWQgd2lsbCBydW4gR0Mgb3Igb3RoZXJ3aXNl
IGRlc3Ryb3kgdGhlbS4KKyAgICBtX3dvcmtlckNvbnRleHQgPSAwOworCisgICAgLy8gQ2xlYW4g
dXAgV2ViQ29yZTo6VGhyZWFkR2xvYmFsRGF0YSBiZWZvcmUgV1RGOjpXVEZUaHJlYWREYXRhIGdv
ZXMgYXdheSEKKyAgICB0aHJlYWRHbG9iYWxEYXRhKCkuZGVzdHJveSgpOworCisgICAgLy8gVGhl
IHRocmVhZCBvYmplY3QgbWF5IGJlIGFscmVhZHkgZGVzdHJveWVkIGZyb20gbm90aWZpY2F0aW9u
IG5vdywgZG9uJ3QgdHJ5IHRvIGFjY2VzcyAidGhpcyIuCisgICAgZGV0YWNoVGhyZWFkKHRocmVh
ZElEKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWQ6OnJ1bkV2ZW50TG9vcCgpCit7CisgICAgLy8g
RG9lcyBub3QgcmV0dXJuIHVudGlsIHRlcm1pbmF0ZWQuCisgICAgbV9ydW5Mb29wLnJ1bihtX3dv
cmtlckNvbnRleHQuZ2V0KCkpOworfQorCitHcm91cFNldHRpbmdzKiBXb3JrZXJUaHJlYWQ6Omdy
b3VwU2V0dGluZ3MoKQoreworICAgIHJldHVybiBtX3N0YXJ0dXBEYXRhLT5tX2dyb3VwU2V0dGlu
Z3MuZ2V0KCk7Cit9CisKK2NsYXNzIFdvcmtlclRocmVhZFNodXRkb3duRmluaXNoVGFzayA6IHB1
YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxXb3JrZXJUaHJlYWRTaHV0ZG93bkZpbmlzaFRhc2s+IGNyZWF0ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdvcmtlclRocmVhZFNodXRkb3duRmluaXNo
VGFzaygpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCAqY29udGV4dCkKKyAgICB7CisgICAgICAgIEFTU0VSVChjb250ZXh0LT5p
c1dvcmtlckNvbnRleHQoKSk7CisgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQg
PSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKyAgICAgICAgd29ya2VyQ29udGV4dC0+Y2xlYXJJbnNwZWN0b3IoKTsKKyNlbmRpZgor
ICAgICAgICAvLyBJdCdzIG5vdCBzYWZlIHRvIGNhbGwgY2xlYXJTY3JpcHQgdW50aWwgYWxsIHRo
ZSBjbGVhbnVwIHRhc2tzIHBvc3RlZCBieSBmdW5jdGlvbnMgaW5pdGlhdGVkIGJ5IFdvcmtlclRo
cmVhZFNodXRkb3duU3RhcnRUYXNrIGhhdmUgY29tcGxldGVkLgorICAgICAgICB3b3JrZXJDb250
ZXh0LT5jbGVhclNjcmlwdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0NsZWFudXBU
YXNrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworY2xhc3MgV29ya2VyVGhyZWFkU2h1
dGRvd25TdGFydFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8V29ya2VyVGhyZWFkU2h1dGRvd25TdGFydFRh
c2s+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFdvcmtlclRo
cmVhZFNodXRkb3duU3RhcnRUYXNrKCkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJm
b3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0ICpjb250ZXh0KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICAgICAgV29ya2VyQ29udGV4
dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KTsK
KworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
c3RvcCB0aGUgZGF0YWJhc2VzIGFzIHBhcnQgb2Ygc3RvcEFjdGl2ZURPTU9iamVjdHMoKSBiZWxv
dz8KKyAgICAgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIGNsZWFudXBTeW5jOworICAgICAg
ICBEYXRhYmFzZUNvbnRleHQ6OnN0b3BEYXRhYmFzZXMod29ya2VyQ29udGV4dCwgJmNsZWFudXBT
eW5jKTsKKyNlbmRpZgorCisgICAgICAgIHdvcmtlckNvbnRleHQtPnN0b3BBY3RpdmVET01PYmpl
Y3RzKCk7CisKKyAgICAgICAgd29ya2VyQ29udGV4dC0+bm90aWZ5T2JzZXJ2ZXJzT2ZTdG9wKCk7
CisKKyAgICAgICAgLy8gRXZlbnQgbGlzdGVuZXJzIHdvdWxkIGtlZXAgRE9NV3JhcHBlcldvcmxk
IG9iamVjdHMgYWxpdmUgZm9yIHRvbyBsb25nLiBBbHNvLCB0aGV5IGhhdmUgcmVmZXJlbmNlcyB0
byBKUyBvYmplY3RzLAorICAgICAgICAvLyB3aGljaCBiZWNvbWUgZGFuZ2xpbmcgb25jZSBIZWFw
IGlzIGRlc3Ryb3llZC4KKyAgICAgICAgd29ya2VyQ29udGV4dC0+cmVtb3ZlQWxsRXZlbnRMaXN0
ZW5lcnMoKTsKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisgICAgICAgIC8vIFdlIHdhaXQg
Zm9yIHRoZSBkYXRhYmFzZSB0aHJlYWQgdG8gY2xlYW4gdXAgYWxsIGl0cyBzdHVmZiBzbyB0aGF0
IHdlCisgICAgICAgIC8vIGNhbiBkbyBtb3JlIHN0cmluZ2VudCBsZWFrIGNoZWNrcyBhcyB3ZSBl
eGl0LgorICAgICAgICBjbGVhbnVwU3luYy53YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKKyNlbmRp
ZgorCisgICAgICAgIC8vIFN0aWNrIGEgc2h1dGRvd24gY29tbWFuZCBhdCB0aGUgZW5kIG9mIHRo
ZSBxdWV1ZSwgc28gdGhhdCB3ZSBkZWFsCisgICAgICAgIC8vIHdpdGggYWxsIHRoZSBjbGVhbnVw
IHRhc2tzIHRoZSBkYXRhYmFzZXMgcG9zdCBmaXJzdC4KKyAgICAgICAgd29ya2VyQ29udGV4dC0+
cG9zdFRhc2soV29ya2VyVGhyZWFkU2h1dGRvd25GaW5pc2hUYXNrOjpjcmVhdGUoKSk7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIGlzQ2xlYW51cFRhc2soKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Cit9OworCit2b2lkIFdvcmtlclRocmVhZDo6c3RvcCgpCit7CisgICAgLy8gTXV0ZXggcHJv
dGVjdGlvbiBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzdG9wKCkgY2FuIGJlIGNhbGxlZCBiZWZvcmUg
dGhlIGNvbnRleHQgaXMgZnVsbHkgY3JlYXRlZC4KKyAgICBNdXRleExvY2tlciBsb2NrKG1fdGhy
ZWFkQ3JlYXRpb25NdXRleCk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCB0YXNrcyBhcmUgYmVpbmcg
aGFuZGxlZCBieSB0aHJlYWQgZXZlbnQgbG9vcC4gSWYgc2NyaXB0IGV4ZWN1dGlvbiB3ZXJlbid0
IGZvcmJpZGRlbiwgYSB3aGlsZSgxKSBsb29wIGluIEpTIGNvdWxkIGtlZXAgdGhlIHRocmVhZCBh
bGl2ZSBmb3JldmVyLgorICAgIGlmIChtX3dvcmtlckNvbnRleHQpIHsKKyAgICAgICAgbV93b3Jr
ZXJDb250ZXh0LT5zY3JpcHQoKS0+c2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpOworCisj
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKyAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2Vy
KCkuaW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChtX3dvcmtlckNvbnRleHQuZ2V0KCkp
OworI2VuZGlmCisgICAgICAgIG1fcnVuTG9vcC5wb3N0VGFzayhXb3JrZXJUaHJlYWRTaHV0ZG93
blN0YXJ0VGFzazo6Y3JlYXRlKCkpOworICAgIH0KKyAgICBtX3J1bkxvb3AudGVybWluYXRlKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlclRocmVh
ZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93b3JrZXJzL1dvcmtlclRocmVhZC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTc1MTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dvcmtlcnMvV29ya2VyVGhyZWFkLmgKQEAgLTAsMCAr
MSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lmbmRlZiBXb3JrZXJUaHJlYWRfaAorI2RlZmluZSBX
b3JrZXJUaHJlYWRfaAorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJDb250ZW50
U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJHcm91cFNldHRpbmdzLmgiCisjaW5jbHVkZSAi
V29ya2VyUnVuTG9vcC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgS1VSTDsKKyAg
ICBjbGFzcyBOb3RpZmljYXRpb25DbGllbnQ7CisgICAgY2xhc3MgV29ya2VyQ29udGV4dDsKKyAg
ICBjbGFzcyBXb3JrZXJMb2FkZXJQcm94eTsKKyAgICBjbGFzcyBXb3JrZXJSZXBvcnRpbmdQcm94
eTsKKyAgICBzdHJ1Y3QgV29ya2VyVGhyZWFkU3RhcnR1cERhdGE7CisKKyAgICBlbnVtIFdvcmtl
clRocmVhZFN0YXJ0TW9kZSB7IERvbnRQYXVzZVdvcmtlckNvbnRleHRPblN0YXJ0LCBQYXVzZVdv
cmtlckNvbnRleHRPblN0YXJ0IH07CisKKyAgICBjbGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMg
UmVmQ291bnRlZDxXb3JrZXJUaHJlYWQ+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwg
fldvcmtlclRocmVhZCgpOworCisgICAgICAgIGJvb2wgc3RhcnQoKTsKKyAgICAgICAgdm9pZCBz
dG9wKCk7CisKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGhyZWFkSUQ7IH0KKyAgICAgICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCgpIHsgcmV0
dXJuIG1fcnVuTG9vcDsgfQorICAgICAgICBXb3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVy
UHJveHkoKSBjb25zdCB7IHJldHVybiBtX3dvcmtlckxvYWRlclByb3h5OyB9CisgICAgICAgIFdv
cmtlclJlcG9ydGluZ1Byb3h5JiB3b3JrZXJSZXBvcnRpbmdQcm94eSgpIGNvbnN0IHsgcmV0dXJu
IG1fd29ya2VyUmVwb3J0aW5nUHJveHk7IH0KKworICAgICAgICAvLyBOdW1iZXIgb2YgYWN0aXZl
IHdvcmtlciB0aHJlYWRzLgorICAgICAgICBzdGF0aWMgdW5zaWduZWQgd29ya2VyVGhyZWFkQ291
bnQoKTsKKyAgICAgICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncygpOworCisjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKKyAgICAg
ICAgTm90aWZpY2F0aW9uQ2xpZW50KiBnZXROb3RpZmljYXRpb25DbGllbnQoKSB7IHJldHVybiBt
X25vdGlmaWNhdGlvbkNsaWVudDsgfQorICAgICAgICB2b2lkIHNldE5vdGlmaWNhdGlvbkNsaWVu
dChOb3RpZmljYXRpb25DbGllbnQqIGNsaWVudCkgeyBtX25vdGlmaWNhdGlvbkNsaWVudCA9IGNs
aWVudDsgfQorI2VuZGlmCisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFdvcmtlclRocmVhZChj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IEdyb3VwU2V0dGluZ3Mq
LCAgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJMb2FkZXJQcm94eSYsIFdvcmtlclJl
cG9ydGluZ1Byb3h5JiwgV29ya2VyVGhyZWFkU3RhcnRNb2RlLCBjb25zdCBTdHJpbmcmIGNvbnRl
bnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlKTsKKwor
ICAgICAgICAvLyBGYWN0b3J5IG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBuZXcgd29ya2VyIGNvbnRl
eHQgZm9yIHRoZSB0aHJlYWQuCisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXb3JrZXJDb250
ZXh0PiBjcmVhdGVXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHVzZXJB
Z2VudCwgY29uc3QgU3RyaW5nJiBjb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6SGVhZGVyVHlwZSkgPSAwOworCisgICAgICAgIC8vIEV4ZWN1dGVzIHRoZSBldmVu
dCBsb29wIGZvciB0aGUgd29ya2VyIHRocmVhZC4gRGVyaXZlZCBjbGFzc2VzIGNhbiBvdmVycmlk
ZSB0byBwZXJmb3JtIGFjdGlvbnMgYmVmb3JlL2FmdGVyIGVudGVyaW5nIHRoZSBldmVudCBsb29w
LgorICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuRXZlbnRMb29wKCk7CisKKyAgICAgICAgV29ya2Vy
Q29udGV4dCogd29ya2VyQ29udGV4dCgpIHsgcmV0dXJuIG1fd29ya2VyQ29udGV4dC5nZXQoKTsg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gU3RhdGljIGZ1bmN0aW9uIGV4ZWN1dGVkIGFz
IHRoZSBjb3JlIHJvdXRpbmUgb24gdGhlIG5ldyB0aHJlYWQuIFBhc3NlZCBhIHBvaW50ZXIgdG8g
YSBXb3JrZXJUaHJlYWQgb2JqZWN0LgorICAgICAgICBzdGF0aWMgdm9pZCB3b3JrZXJUaHJlYWRT
dGFydCh2b2lkKik7CisgICAgICAgIHZvaWQgd29ya2VyVGhyZWFkKCk7CisKKyAgICAgICAgVGhy
ZWFkSWRlbnRpZmllciBtX3RocmVhZElEOworICAgICAgICBXb3JrZXJSdW5Mb29wIG1fcnVuTG9v
cDsKKyAgICAgICAgV29ya2VyTG9hZGVyUHJveHkmIG1fd29ya2VyTG9hZGVyUHJveHk7CisgICAg
ICAgIFdvcmtlclJlcG9ydGluZ1Byb3h5JiBtX3dvcmtlclJlcG9ydGluZ1Byb3h5OworCisgICAg
ICAgIFJlZlB0cjxXb3JrZXJDb250ZXh0PiBtX3dvcmtlckNvbnRleHQ7CisgICAgICAgIE11dGV4
IG1fdGhyZWFkQ3JlYXRpb25NdXRleDsKKworICAgICAgICBPd25QdHI8V29ya2VyVGhyZWFkU3Rh
cnR1cERhdGE+IG1fc3RhcnR1cERhdGE7CisKKyNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwg
RU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQorICAgICAgICBOb3RpZmljYXRpb25DbGllbnQq
IG1fbm90aWZpY2F0aW9uQ2xpZW50OworI2VuZGlmCisKKyAgICAgICAgLy8gVHJhY2sgdGhlIG51
bWJlciBvZiBXb3JrZXJUaHJlYWQgaW5zdGFuY2VzIGZvciB1c2UgaW4gbGF5b3V0IHRlc3RzLgor
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgbV90aHJlYWRDb3VudDsKKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8v
IFdvcmtlclRocmVhZF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkg
Yi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDY2NWYwM2QuLjBlNDRkNTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQpAQCAtMTYxMSw2ICsxNjExLDE5IEBAIEhFQURFUlMgKz0gXAogICAgIE1vZHVsZXMv
d2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCBcCiAgICAgTW9kdWxlcy93
ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuaCBcCiAgICAgXAorICAgIE1vZHVs
ZXMvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oIFwKKyAgICBNb2R1bGVzL3dvcmtlcnMvRGVkaWNh
dGVkV29ya2VyQ29udGV4dC5oIFwKKyAgICBNb2R1bGVzL3dvcmtlcnMvRGVkaWNhdGVkV29ya2Vy
VGhyZWFkLmggXAorICAgIE1vZHVsZXMvd29ya2Vycy9TaGFyZWRXb3JrZXIuaCBcCisgICAgTW9k
dWxlcy93b3JrZXJzL1dvcmtlckNvbnRleHQuaCBcCisgICAgTW9kdWxlcy93b3JrZXJzL1dvcmtl
ckV2ZW50UXVldWUuaCBcCisgICAgTW9kdWxlcy93b3JrZXJzL1dvcmtlci5oIFwKKyAgICBNb2R1
bGVzL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uaCBcCisgICAgTW9kdWxlcy93b3JrZXJzL1dvcmtl
ck1lc3NhZ2luZ1Byb3h5LmggXAorICAgIE1vZHVsZXMvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmgg
XAorICAgIE1vZHVsZXMvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaCBcCisgICAgTW9kdWxl
cy93b3JrZXJzL1dvcmtlclRocmVhZC5oIFwKKyAgICBcCiAgICAgY3NzL0NTU0FzcGVjdFJhdGlv
VmFsdWUuaCBcCiAgICAgY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oIFwKICAgICBjc3Mv
Q1NTQm9yZGVySW1hZ2UuaCBcCkBAIC0yODU4LDE4ICsyODcxLDYgQEAgSEVBREVSUyArPSBcCiAg
ICAgc3ZnL1NWR1pvb21FdmVudC5oIFwKICAgICB0ZXN0aW5nL0ludGVybmFscy5oIFwKICAgICB0
ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaCBcCi0gICAgd29ya2Vycy9BYnN0cmFjdFdvcmtlci5o
IFwKLSAgICB3b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaCBcCi0gICAgd29ya2Vycy9E
ZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCBcCi0gICAgd29ya2Vycy9TaGFyZWRXb3JrZXIuaCBcCi0g
ICAgd29ya2Vycy9Xb3JrZXJDb250ZXh0LmggXAotICAgIHdvcmtlcnMvV29ya2VyRXZlbnRRdWV1
ZS5oIFwKLSAgICB3b3JrZXJzL1dvcmtlci5oIFwKLSAgICB3b3JrZXJzL1dvcmtlckxvY2F0aW9u
LmggXAotICAgIHdvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuaCBcCi0gICAgd29ya2Vycy9X
b3JrZXJSdW5Mb29wLmggXAotICAgIHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmggXAotICAg
IHdvcmtlcnMvV29ya2VyVGhyZWFkLmggXAogICAgIHhtbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJl
bmNlUGFyc2VySW5saW5lTWV0aG9kcy5oIFwKICAgICB4bWwvcGFyc2VyL01hcmt1cFRva2VuQmFz
ZS5oIFwKICAgICB4bWwvcGFyc2VyL01hcmt1cFRva2VuaXplckJhc2UuaCBcCkBAIC0zMjQ4LDE5
ICszMjQ5LDE5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XT1JLRVJTPTEpIHsKICAgICAg
ICAgICAgIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcAogICAgIH0KICAg
ICBTT1VSQ0VTICs9IFwKKyAgICAgICAgTW9kdWxlcy93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNw
cCBcCisgICAgICAgIE1vZHVsZXMvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmNwcCBc
CisgICAgICAgIE1vZHVsZXMvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwIFwKKyAg
ICAgICAgTW9kdWxlcy93b3JrZXJzL1dvcmtlci5jcHAgXAorICAgICAgICBNb2R1bGVzL3dvcmtl
cnMvV29ya2VyQ29udGV4dC5jcHAgXAorICAgICAgICBNb2R1bGVzL3dvcmtlcnMvV29ya2VyRXZl
bnRRdWV1ZS5jcHAgXAorICAgICAgICBNb2R1bGVzL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uY3Bw
IFwKKyAgICAgICAgTW9kdWxlcy93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcCBcCisg
ICAgICAgIE1vZHVsZXMvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcCBcCisgICAgICAgIE1vZHVs
ZXMvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwIFwKKyAgICAgICAgTW9kdWxlcy93b3JrZXJzL1dv
cmtlclNjcmlwdExvYWRlci5jcHAgXAogICAgICAgICBsb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxv
YWRlci5jcHAgXAotICAgICAgICBwYWdlL1dvcmtlck5hdmlnYXRvci5jcHAgXAotICAgICAgICB3
b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcCBcCi0gICAgICAgIHdvcmtlcnMvRGVkaWNhdGVkV29y
a2VyQ29udGV4dC5jcHAgXAotICAgICAgICB3b3JrZXJzL0RlZGljYXRlZFdvcmtlclRocmVhZC5j
cHAgXAotICAgICAgICB3b3JrZXJzL1dvcmtlci5jcHAgXAotICAgICAgICB3b3JrZXJzL1dvcmtl
ckNvbnRleHQuY3BwIFwKLSAgICAgICAgd29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmNwcCBcCi0g
ICAgICAgIHdvcmtlcnMvV29ya2VyTG9jYXRpb24uY3BwIFwKLSAgICAgICAgd29ya2Vycy9Xb3Jr
ZXJNZXNzYWdpbmdQcm94eS5jcHAgXAotICAgICAgICB3b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3Bw
IFwKLSAgICAgICAgd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwIFwKLSAgICAgICAgd29ya2Vycy9X
b3JrZXJTY3JpcHRMb2FkZXIuY3BwCisgICAgICAgIHBhZ2UvV29ya2VyTmF2aWdhdG9yLmNwcAog
fQogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU0hBUkVEX1dPUktFUlM9MSkgewpAQCAtMzI2
OSwxMCArMzI3MCwxMCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU0hBUkVEX1dPUktFUlM9
MSkgewogICAgICAgICAgICAgYmluZGluZ3MvanMvSlNTaGFyZWRXb3JrZXJDdXN0b20uY3BwCiAg
ICAgfQogICAgIFNPVVJDRVMgKz0gXAotICAgICAgICB3b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5LmNwcCBcCi0gICAgICAgIHdvcmtlcnMvU2hhcmVkV29ya2VyLmNwcCBcCi0g
ICAgICAgIHdvcmtlcnMvU2hhcmVkV29ya2VyQ29udGV4dC5jcHAgXAotICAgICAgICB3b3JrZXJz
L1NoYXJlZFdvcmtlclRocmVhZC5jcHAKKyAgICAgICAgTW9kdWxlcy93b3JrZXJzL0RlZmF1bHRT
aGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcCBcCisgICAgICAgIE1vZHVsZXMvd29ya2Vycy9TaGFy
ZWRXb3JrZXIuY3BwIFwKKyAgICAgICAgTW9kdWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRl
eHQuY3BwIFwKKyAgICAgICAgTW9kdWxlcy93b3JrZXJzL1NoYXJlZFdvcmtlclRocmVhZC5jcHAK
IH0KIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0lOUFVUX1NQRUVDSD0xKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJpCmluZGV4IDE2YWViYmMuLmU5MWNhMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCkBAIC0yNCw2ICsyNCw3
IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9ESVIvTW9kdWxlcy93ZWJhdWRpbyBc
CiAgICAgJCRTT1VSQ0VfRElSL01vZHVsZXMvd2ViZGF0YWJhc2UgXAogICAgICQkU09VUkNFX0RJ
Ui9Nb2R1bGVzL3dlYnNvY2tldHMgXAorICAgICQkU09VUkNFX0RJUi9Nb2R1bGVzL3dvcmtlcnMg
XAogICAgICQkU09VUkNFX0RJUi9hY2Nlc3NpYmlsaXR5IFwKICAgICAkJFNPVVJDRV9ESVIvYmlu
ZGluZ3MgXAogICAgICQkU09VUkNFX0RJUi9iaW5kaW5ncy9nZW5lcmljIFwKQEAgLTkxLDcgKzky
LDYgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9zdmcvcHJvcGVydGllcyBc
CiAgICAgJCRTT1VSQ0VfRElSL3Rlc3RpbmcgXAogICAgICQkU09VUkNFX0RJUi93ZWJzb2NrZXRz
IFwKLSAgICAkJFNPVVJDRV9ESVIvd29ya2VycyBcCiAgICAgJCRTT1VSQ0VfRElSL3htbCBcCiAg
ICAgJCRTT1VSQ0VfRElSL3htbC9wYXJzZXIgXAogICAgICQkU09VUkNFX0RJUi8uLi9UaGlyZFBh
cnR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwN2NmNzNmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUg
IkFic3RyYWN0V29ya2VyLmgiCi0KLSNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIK
LSNpbmNsdWRlICJFcnJvckV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJF
dmVudEV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQWJzdHJhY3RXb3JrZXI6OkFic3RyYWN0V29y
a2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBBY3RpdmVET01PYmpl
Y3QoY29udGV4dCwgdGhpcykKLXsKLX0KLQotQWJzdHJhY3RXb3JrZXI6On5BYnN0cmFjdFdvcmtl
cigpCi17Ci19Ci0KLXZvaWQgQWJzdHJhY3RXb3JrZXI6Om9uRGVzdHJveVdvcmtlcigpCi17Ci0g
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREZXN0cm95V29ya2VyKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgYXNJRCgpKTsKLX0KLQotdm9pZCBBYnN0cmFjdFdvcmtlcjo6Y29udGV4
dERlc3Ryb3llZCgpCi17Ci0gICAgb25EZXN0cm95V29ya2VyKCk7Ci0gICAgQWN0aXZlRE9NT2Jq
ZWN0Ojpjb250ZXh0RGVzdHJveWVkKCk7IAotfQotCi1LVVJMIEFic3RyYWN0V29ya2VyOjpyZXNv
bHZlVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAo
dXJsLmlzRW1wdHkoKSkgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVy
biBLVVJMKCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgZHlu
YW1pYyBnbG9iYWwgc2NvcGUgKGJ1ZyAjMjc4ODcpCi0gICAgS1VSTCBzY3JpcHRVUkwgPSBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmNvbXBsZXRlVVJMKHVybCk7Ci0gICAgaWYgKCFzY3JpcHRV
UkwuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJu
IEtVUkwoKTsKLSAgICB9Ci0KLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChzY3JpcHRVUkwpKSB7Ci0gICAgICAgIGVjID0gU0VD
VVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gS1VSTCgpOwotICAgIH0KLQotICAgIGlmIChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpICYmICFzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd1NjcmlwdEZy
b21Tb3VyY2Uoc2NyaXB0VVJMKSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAg
ICAgcmV0dXJuIEtVUkwoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2NyaXB0VVJMOwotfQotCi1F
dmVudFRhcmdldERhdGEqIEFic3RyYWN0V29ya2VyOjpldmVudFRhcmdldERhdGEoKQotewotICAg
IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Ci19Ci0KLUV2ZW50VGFyZ2V0RGF0YSogQWJzdHJh
Y3RXb3JrZXI6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCi17Ci0gICAgcmV0dXJuICZtX2V2ZW50
VGFyZ2V0RGF0YTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0
V29ya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0Fic3RyYWN0V29ya2VyLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0Y2M1MGIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgQWJzdHJhY3RXb3JrZXJfaAotI2RlZmluZSBBYnN0cmFjdFdvcmtlcl9oCi0K
LSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2lu
Y2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVk
ZSAiRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAg
Y2xhc3MgS1VSTDsKLSAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi0gICAgY2xh
c3MgQWJzdHJhY3RXb3JrZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBYnN0cmFjdFdvcmtlcj4sIHB1
YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBFdmVudFRhcmdldCB7Ci0gICAgcHVibGljOgot
ICAgICAgICAvLyBFdmVudFRhcmdldCBBUElzCi0gICAgICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIEFjdGl2
ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9Ci0KLSAgICAgICAgREVGSU5F
X0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJvcik7Ci0KLSAgICAgICAgdXNpbmcgUmVmQ291
bnRlZDxBYnN0cmFjdFdvcmtlcj46OnJlZjsKLSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxBYnN0
cmFjdFdvcmtlcj46OmRlcmVmOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJv
eWVkKCk7Ci0gICAgICAgIEFic3RyYWN0V29ya2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsK
LSAgICAgICAgdmlydHVhbCB+QWJzdHJhY3RXb3JrZXIoKTsKLQotICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgYSBVUkwgdG8gYW4gYWJzb2x1
dGUgVVJMIGFuZCBjaGVja3MgdGhlIHJlc3VsdCBmb3IgdmFsaWRpdHkuCi0gICAgICAgIEtVUkwg
cmVzb2x2ZVVSTChjb25zdCBTdHJpbmcmIHVybCwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgICAg
ICBpbnRwdHJfdCBhc0lEKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4odGhpcyk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVu
dFRhcmdldCgpIHsgcmVmKCk7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJn
ZXQoKSB7IGRlcmVmKCk7IH0KLSAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50
VGFyZ2V0RGF0YSgpOwotICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZl
bnRUYXJnZXREYXRhKCk7Ci0gICAgICAgIHZvaWQgb25EZXN0cm95V29ya2VyKCk7Ci0gICAgICAg
IAotICAgICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7Ci0gICAgfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCi0KLSNl
bmRpZiAvLyBBYnN0cmFjdFdvcmtlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL0Fic3RyYWN0V29ya2VyLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RX
b3JrZXIuaWRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzkwZDFlLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvQWJzdHJhY3RXb3JrZXIuaWRsCisrKyAvZGV2
L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgdGhyZWFkcyB7Ci0KLSAgICBpbnRlcmZhY2UgWwot
ICAgICAgICBDb25kaXRpb25hbD1XT1JLRVJTLAotICAgICAgICBBY3RpdmVET01PYmplY3QsCi0g
ICAgICAgIEpTQ3VzdG9tVG9KU09iamVjdCwKLSAgICAgICAgRXZlbnRUYXJnZXQKLSAgICBdIEFi
c3RyYWN0V29ya2VyIHsKLQotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9y
OwotCi0gICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2Fw
dHVyZSk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlz
dGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJv
b2xlYW4gdXNlQ2FwdHVyZSk7Ci0gICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVu
dCBldnQpCi0gICAgICAgICAgICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOwotICAgIH07Ci0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDJlMjk5Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdP
UktFUlMpCi0KLSNpbmNsdWRlICJEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmgiCi0KLSNpbmNsdWRl
ICJEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNs
dWRlICJNZXNzYWdlRXZlbnQuaCIKLSNpbmNsdWRlICJXb3JrZXJPYmplY3RQcm94eS5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURlZGljYXRlZFdvcmtlckNvbnRleHQ6OkRlZGljYXRlZFdv
cmtlckNvbnRleHQoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgRGVk
aWNhdGVkV29ya2VyVGhyZWFkKiB0aHJlYWQsIGNvbnN0IFN0cmluZyYgY29udGVudFNlY3VyaXR5
UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUgY29udGVudFNlY3VyaXR5
UG9saWN5VHlwZSkKLSAgICA6IFdvcmtlckNvbnRleHQodXJsLCB1c2VyQWdlbnQsIHRocmVhZCwg
Y29udGVudFNlY3VyaXR5UG9saWN5LCBjb250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKQotewotfQot
Ci1jb25zdCBBdG9taWNTdHJpbmcmIERlZGljYXRlZFdvcmtlckNvbnRleHQ6OmludGVyZmFjZU5h
bWUoKSBjb25zdAotewotICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRGVkaWNh
dGVkV29ya2VyQ29udGV4dDsKLX0KLQotLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gd2UgdXBk
YXRlIHRoZSBPYmpDIGJpbmRpbmdzIChidWcgIzI4Nzc0KS4KLXZvaWQgRGVkaWNhdGVkV29ya2Vy
Q29udGV4dDo6cG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1l
c3NhZ2UsIE1lc3NhZ2VQb3J0KiBwb3J0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBNZXNz
YWdlUG9ydEFycmF5IHBvcnRzOwotICAgIGlmIChwb3J0KQotICAgICAgICBwb3J0cy5hcHBlbmQo
cG9ydCk7Ci0gICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgJnBvcnRzLCBlYyk7Ci19Ci0KLXZvaWQg
RGVkaWNhdGVkV29ya2VyQ29udGV4dDo6cG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHBvc3RNZXNz
YWdlKG1lc3NhZ2UsIHN0YXRpY19jYXN0PE1lc3NhZ2VQb3J0QXJyYXkqPigwKSwgZWMpOwotfQot
Ci12b2lkIERlZGljYXRlZFdvcmtlckNvbnRleHQ6OnBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5KiBwb3J0
cywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gRGlzZW50YW5nbGUgdGhlIHBvcnQgaW4g
cHJlcGFyYXRpb24gZm9yIHNlbmRpbmcgaXQgdG8gdGhlIHJlbW90ZSBjb250ZXh0LgotICAgIE93
blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMgPSBNZXNzYWdlUG9ydDo6ZGlz
ZW50YW5nbGVQb3J0cyhwb3J0cywgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwot
ICAgIHRocmVhZCgpLT53b3JrZXJPYmplY3RQcm94eSgpLnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmpl
Y3QobWVzc2FnZSwgY2hhbm5lbHMucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBEZWRpY2F0ZWRXb3Jr
ZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1cmxzLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBCYXNlOjppbXBvcnRTY3JpcHRzKHVybHMsIGVjKTsKLSAg
ICB0aHJlYWQoKS0+d29ya2VyT2JqZWN0UHJveHkoKS5yZXBvcnRQZW5kaW5nQWN0aXZpdHkoaGFz
UGVuZGluZ0FjdGl2aXR5KCkpOwotfQotCi1EZWRpY2F0ZWRXb3JrZXJUaHJlYWQqIERlZGljYXRl
ZFdvcmtlckNvbnRleHQ6OnRocmVhZCgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PERlZGlj
YXRlZFdvcmtlclRocmVhZCo+KEJhc2U6OnRocmVhZCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiZTViZWZjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVk
aWNhdGVkV29ya2VyQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgRGVkaWNhdGVkV29ya2VyQ29udGV4dF9oCi0jZGVmaW5lIERlZGljYXRlZFdvcmtlckNvbnRl
eHRfaAotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQ
b2xpY3kuaCIKLSNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgotI2luY2x1ZGUgIldvcmtlckNvbnRl
eHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgRGVkaWNhdGVkV29ya2Vy
VGhyZWFkOwotCi0gICAgY2xhc3MgRGVkaWNhdGVkV29ya2VyQ29udGV4dCA6IHB1YmxpYyBXb3Jr
ZXJDb250ZXh0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgV29ya2VyQ29udGV4dCBC
YXNlOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXJDb250ZXh0PiBj
cmVhdGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgRGVkaWNhdGVk
V29ya2VyVGhyZWFkKiB0aHJlYWQsIGNvbnN0IFN0cmluZyYgY29udGVudFNlY3VyaXR5UG9saWN5
LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUgY29udGVudFNlY3VyaXR5UG9saWN5
VHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWRpY2F0
ZWRXb3JrZXJDb250ZXh0KHVybCwgdXNlckFnZW50LCB0aHJlYWQsIGNvbnRlbnRTZWN1cml0eVBv
bGljeSwgY29udGVudFNlY3VyaXR5UG9saWN5VHlwZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmlydHVhbCBib29sIGlzRGVkaWNhdGVkV29ya2VyQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KLQotICAgICAgICAvLyBPdmVycmlkZGVuIHRvIGFsbG93IHVzIHRvIGNoZWNrIG91ciBw
ZW5kaW5nIGFjdGl2aXR5IGFmdGVyIGV4ZWN1dGluZyBpbXBvcnRlZCBzY3JpcHQuCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBpbXBvcnRTY3JpcHRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB1cmxzLCBF
eGNlcHRpb25Db2RlJik7Ci0KLSAgICAgICAgLy8gRXZlbnRUYXJnZXQKLSAgICAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKLQotICAgICAgICB2
b2lkIHBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiwgY29uc3QgTWVzc2FnZVBvcnRBcnJheSosIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gd2UgdXBkYXRlIHRoZSBPYmpDIGJp
bmRpbmdzIChidWcgIzI4Nzc0KS4KLSAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIE1lc3NhZ2VQb3J0KiwgRXhjZXB0aW9uQ29kZSYpOwot
Ci0gICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobWVzc2FnZSk7Ci0KLSAg
ICAgICAgRGVkaWNhdGVkV29ya2VyVGhyZWFkKiB0aHJlYWQoKTsKLSAgICBwcml2YXRlOgotICAg
ICAgICBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHVz
ZXJBZ2VudCwgRGVkaWNhdGVkV29ya2VyVGhyZWFkKiwgY29uc3QgU3RyaW5nJiBjb250ZW50U2Vj
dXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGVhZGVyVHlwZSk7Ci0gICAgfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCi0K
LSNlbmRpZiAvLyBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckNvbnRleHQuaWRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0OGVjZmRjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
RGVkaWNhdGVkV29ya2VyQ29udGV4dC5pZGwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotbW9kdWxlIHRocmVhZHMgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0
aW9uYWw9V09SS0VSUywKLSAgICAgICAgRXh0ZW5kc0RPTUdsb2JhbE9iamVjdCwKLSAgICAgICAg
SXNXb3JrZXJDb250ZXh0LAotICAgICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAg
ICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgICAgIE9taXRDb25zdHJ1Y3RvcgotICAgIF0gRGVk
aWNhdGVkV29ya2VyQ29udGV4dCA6IFdvcmtlckNvbnRleHQgewotCi0jaWYgIWRlZmluZWQoTEFO
R1VBR0VfQ1BQKSB8fCAhTEFOR1VBR0VfQ1BQCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NS
SVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBUCi0gICAgICAgIFtDdXN0b21dIHZvaWQgcG9zdE1l
c3NhZ2UoaW4gYW55IG1lc3NhZ2UsIGluIFtPcHRpb25hbF0gQXJyYXkgbWVzc2FnZVBvcnRzKQot
ICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQg
d2Via2l0UG9zdE1lc3NhZ2UoaW4gYW55IG1lc3NhZ2UsIGluIFtPcHRpb25hbF0gQXJyYXkgdHJh
bnNmZXJMaXN0KQotICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0jZWxzZQotICAg
ICAgICAvLyBUaGVyZSdzIG5vIGdvb2Qgd2F5IHRvIGV4cG9zZSBhbiBhcnJheSB2aWEgdGhlIE9i
akMgYmluZGluZ3MsIHNvIGZvciBub3cganVzdCBhbGxvdyBwYXNzaW5nIGluIGEgc2luZ2xlIHBv
cnQuCi0gICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoaW4gRE9NU3RyaW5nIG1lc3NhZ2UsIGluIFtP
cHRpb25hbF0gTWVzc2FnZVBvcnQgbWVzc2FnZVBvcnQpCi0gICAgICAgICAgICByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICAgYXR0cmlidXRl
IEV2ZW50TGlzdGVuZXIgb25tZXNzYWdlOwotCi0gICAgfTsKLQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2NzhjZTgzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvRGVkaWNhdGVkV29ya2VyVGhyZWFkLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUg
IkRlZGljYXRlZFdvcmtlclRocmVhZC5oIgotCi0jaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyQ29u
dGV4dC5oIgotI2luY2x1ZGUgIldvcmtlck9iamVjdFByb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ+IERlZGljYXRlZFdvcmtl
clRocmVhZDo6Y3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2Vy
QWdlbnQsIGNvbnN0IEdyb3VwU2V0dGluZ3MqIHNldHRpbmdzLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUNvZGUsIFdvcmtlckxvYWRlclByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSwgV29ya2VyT2JqZWN0
UHJveHkmIHdvcmtlck9iamVjdFByb3h5LCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2Rl
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpIZWFkZXJUeXBlIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5cGUpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQoc2NyaXB0VVJMLCB1c2VyQWdlbnQs
IHNldHRpbmdzLCBzb3VyY2VDb2RlLCB3b3JrZXJMb2FkZXJQcm94eSwgd29ya2VyT2JqZWN0UHJv
eHksIHN0YXJ0TW9kZSwgY29udGVudFNlY3VyaXR5UG9saWN5LCBjb250ZW50U2VjdXJpdHlQb2xp
Y3lUeXBlKSk7Ci19Ci0KLURlZGljYXRlZFdvcmtlclRocmVhZDo6RGVkaWNhdGVkV29ya2VyVGhy
ZWFkKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IEdyb3Vw
U2V0dGluZ3MqIHNldHRpbmdzLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRl
clByb3h5JiB3b3JrZXJMb2FkZXJQcm94eSwgV29ya2VyT2JqZWN0UHJveHkmIHdvcmtlck9iamVj
dFByb3h5LCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlIGNv
bnRlbnRTZWN1cml0eVBvbGljeVR5cGUpCi0gICAgOiBXb3JrZXJUaHJlYWQodXJsLCB1c2VyQWdl
bnQsIHNldHRpbmdzLCBzb3VyY2VDb2RlLCB3b3JrZXJMb2FkZXJQcm94eSwgd29ya2VyT2JqZWN0
UHJveHksIHN0YXJ0TW9kZSwgY29udGVudFNlY3VyaXR5UG9saWN5LCBjb250ZW50U2VjdXJpdHlQ
b2xpY3lUeXBlKQotICAgICwgbV93b3JrZXJPYmplY3RQcm94eSh3b3JrZXJPYmplY3RQcm94eSkK
LXsKLX0KLQotRGVkaWNhdGVkV29ya2VyVGhyZWFkOjp+RGVkaWNhdGVkV29ya2VyVGhyZWFkKCkK
LXsKLX0KLQotUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0PiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ6
OmNyZWF0ZVdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHVzZXJB
Z2VudCwgY29uc3QgU3RyaW5nJiBjb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6SGVhZGVyVHlwZSBjb250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKQotewotICAgIHJl
dHVybiBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0OjpjcmVhdGUodXJsLCB1c2VyQWdlbnQsIHRoaXMs
IGNvbnRlbnRTZWN1cml0eVBvbGljeSwgY29udGVudFNlY3VyaXR5UG9saWN5VHlwZSk7Ci19Ci0K
LXZvaWQgRGVkaWNhdGVkV29ya2VyVGhyZWFkOjpydW5FdmVudExvb3AoKQotewotICAgIC8vIE5v
dGlmeSB0aGUgcGFyZW50IG9iamVjdCBvZiBvdXIgY3VycmVudCBhY3RpdmUgc3RhdGUgYmVmb3Jl
IGNhbGxpbmcgdGhlIHN1cGVyY2xhc3MgdG8gcnVuIHRoZSBldmVudCBsb29wLgotICAgIG1fd29y
a2VyT2JqZWN0UHJveHkucmVwb3J0UGVuZGluZ0FjdGl2aXR5KHdvcmtlckNvbnRleHQoKS0+aGFz
UGVuZGluZ0FjdGl2aXR5KCkpOwotICAgIFdvcmtlclRocmVhZDo6cnVuRXZlbnRMb29wKCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQu
aCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyVGhyZWFkLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZTRjODIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotI2lmbmRlZiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWRfaAotI2RlZmluZSBEZWRpY2F0
ZWRXb3JrZXJUaHJlYWRfaAotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJDb250
ZW50U2VjdXJpdHlQb2xpY3kuaCIKLSNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgV29ya2VyT2JqZWN0UHJveHk7Ci0KLSAgICBjbGFz
cyBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQgOiBwdWJsaWMgV29ya2VyVGhyZWFkIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlZGljYXRlZFdvcmtlclRocmVhZD4gY3Jl
YXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0
IEdyb3VwU2V0dGluZ3MqLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlckxvYWRlclBy
b3h5JiwgV29ya2VyT2JqZWN0UHJveHkmLCBXb3JrZXJUaHJlYWRTdGFydE1vZGUsIGNvbnN0IFN0
cmluZyYgY29udGVudFNlY3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRl
clR5cGUpOwotICAgICAgICBXb3JrZXJPYmplY3RQcm94eSYgd29ya2VyT2JqZWN0UHJveHkoKSBj
b25zdCB7IHJldHVybiBtX3dvcmtlck9iamVjdFByb3h5OyB9Ci0gICAgICAgIH5EZWRpY2F0ZWRX
b3JrZXJUaHJlYWQoKTsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFdvcmtlckNvbnRleHQ+IGNyZWF0ZVdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwg
Q29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IHJ1bkV2ZW50TG9vcCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRGVkaWNhdGVkV29ya2Vy
VGhyZWFkKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgR3JvdXBT
ZXR0aW5ncyosIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkmLCBX
b3JrZXJPYmplY3RQcm94eSYsIFdvcmtlclRocmVhZFN0YXJ0TW9kZSwgY29uc3QgU3RyaW5nJiBj
b250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGVhZGVyVHlwZSk7
Ci0KLSAgICAgICAgV29ya2VyT2JqZWN0UHJveHkmIG1fd29ya2VyT2JqZWN0UHJveHk7Ci0gICAg
fTsKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQot
Ci0jZW5kaWYgLy8gRGVkaWNhdGVkV29ya2VyVGhyZWFkX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYThhMDAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0NjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShT
SEFSRURfV09SS0VSUykKLQotI2luY2x1ZGUgIkRlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5
LmgiCi0KLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJDcm9zc1RocmVh
ZFRhc2suaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKLSNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJNZXNz
YWdlRXZlbnQuaCIKLSNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW5jbHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKLSNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKLSNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luSGFzaC5oIgotI2luY2x1ZGUgIlNoYXJl
ZFdvcmtlci5oIgotI2luY2x1ZGUgIlNoYXJlZFdvcmtlckNvbnRleHQuaCIKLSNpbmNsdWRlICJT
aGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgiCi0jaW5jbHVkZSAiU2hhcmVkV29ya2VyVGhyZWFkLmgi
Ci0jaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKLSNpbmNsdWRlICJXb3JrZXJSZXBvcnRp
bmdQcm94eS5oIgotI2luY2x1ZGUgIldvcmtlclNjcmlwdExvYWRlci5oIgotI2luY2x1ZGUgIldv
cmtlclNjcmlwdExvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNo
YXJlZFdvcmtlclByb3h5IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZFdvcmtl
clByb3h5PiwgcHVibGljIFdvcmtlckxvYWRlclByb3h5LCBwdWJsaWMgV29ya2VyUmVwb3J0aW5n
UHJveHkgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZFdvcmtlclByb3h5
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IG9yaWdpbikgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZFdvcmtl
clByb3h5KG5hbWUsIHVybCwgb3JpZ2luKSk7IH0KLQotICAgIHZvaWQgc2V0VGhyZWFkKFBhc3NS
ZWZQdHI8U2hhcmVkV29ya2VyVGhyZWFkPiB0aHJlYWQpIHsgbV90aHJlYWQgPSB0aHJlYWQ7IH0K
LSAgICBTaGFyZWRXb3JrZXJUaHJlYWQqIHRocmVhZCgpIHsgcmV0dXJuIG1fdGhyZWFkLmdldCgp
OyB9Ci0gICAgYm9vbCBpc0Nsb3NpbmcoKSBjb25zdCB7IHJldHVybiBtX2Nsb3Npbmc7IH0KLSAg
ICBLVVJMIHVybCgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBEb24ndCB1c2UgbV91cmwuY29w
eSgpIGJlY2F1c2UgaXQgaXNuJ3QgYSB0aHJlYWRzYWZlIG1ldGhvZC4KLSAgICAgICAgcmV0dXJu
IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBtX3VybC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKSk7Ci0g
ICAgfQotCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWUuaXNvbGF0ZWRD
b3B5KCk7IH0KLSAgICBib29sIG1hdGNoZXMoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4sIGNvbnN0IEtVUkwmIHVybFRvTWF0Y2gpIGNvbnN0Owot
Ci0gICAgLy8gV29ya2VyTG9hZGVyUHJveHkKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tUb0xv
YWRlcihQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKLSAgICB2aXJ0
dWFsIGJvb2wgcG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KFBhc3NPd25QdHI8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0IFN0cmluZyYpOwotCi0gICAgLy8gV29ya2Vy
UmVwb3J0aW5nUHJveHkKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2Jq
ZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dv
cmtlck9iamVjdChNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCk7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VU
b1BhZ2VJbnNwZWN0b3IoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUlu
c3BlY3RvclN0YXRlQ29va2llKGNvbnN0IFN0cmluZyYpOwotI2VuZGlmCi0gICAgdmlydHVhbCB2
b2lkIHdvcmtlckNvbnRleHRDbG9zZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4
dERlc3Ryb3llZCgpOwotCi0gICAgLy8gVXBkYXRlcyB0aGUgbGlzdCBvZiB0aGUgd29ya2VyJ3Mg
ZG9jdW1lbnRzLCBwZXIgc2VjdGlvbiA0LjUgb2YgdGhlIFdlYldvcmtlcnMgc3BlYy4KLSAgICB2
b2lkIGFkZFRvV29ya2VyRG9jdW1lbnRzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLQotICAg
IGJvb2wgaXNJbldvcmtlckRvY3VtZW50cyhEb2N1bWVudCogZG9jdW1lbnQpIHsgcmV0dXJuIG1f
d29ya2VyRG9jdW1lbnRzLmNvbnRhaW5zKGRvY3VtZW50KTsgfQotCi0gICAgLy8gUmVtb3ZlcyBh
IGRldGFjaGVkIGRvY3VtZW50IGZyb20gdGhlIGxpc3Qgb2Ygd29ya2VyJ3MgZG9jdW1lbnRzLiBN
YXkgc2V0IHRoZSBjbG9zaW5nIGZsYWcgaWYgdGhpcyBpcyB0aGUgbGFzdCBkb2N1bWVudCBpbiB0
aGUgbGlzdC4KLSAgICB2b2lkIGRvY3VtZW50RGV0YWNoZWQoRG9jdW1lbnQqKTsKLQotICAgIEdy
b3VwU2V0dGluZ3MqIGdyb3VwU2V0dGluZ3MoKSBjb25zdDsgLy8gUGFnZSBHcm91cFNldHRpbmdz
IHVzZWQgYnkgd29ya2VyIHRocmVhZC4KLQotcHJpdmF0ZToKLSAgICBTaGFyZWRXb3JrZXJQcm94
eShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwmLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPik7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAgYm9vbCBtX2Nsb3Npbmc7Ci0gICAgU3Ry
aW5nIG1fbmFtZTsKLSAgICBLVVJMIG1fdXJsOwotICAgIC8vIFRoZSB0aHJlYWQgaXMgZnJlZWQg
d2hlbiB0aGUgcHJveHkgaXMgZGVzdHJveWVkLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0
IHRoZSBwcm94eSBzdGF5cyBhcm91bmQgdW50aWwgdGhlIFNoYXJlZFdvcmtlckNvbnRleHQgZXhp
dHMuCi0gICAgUmVmUHRyPFNoYXJlZFdvcmtlclRocmVhZD4gbV90aHJlYWQ7Ci0gICAgUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiBtX29yaWdpbjsKLSAgICBIYXNoU2V0PERvY3VtZW50Kj4gbV93b3Jr
ZXJEb2N1bWVudHM7Ci0gICAgLy8gRW5zdXJlcyBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSB3b3Jr
ZXIgZG9jdW1lbnRzLiBNdXN0IG5vdCBncmFiIGFueSBvdGhlciBsb2NrcyAoc3VjaCBhcyB0aGUg
RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkgbG9jaykgd2hpbGUgaG9sZGluZyB0aGlzIG9u
ZS4KLSAgICBNdXRleCBtX3dvcmtlckRvY3VtZW50c0xvY2s7Ci19OwotCi1TaGFyZWRXb3JrZXJQ
cm94eTo6U2hhcmVkV29ya2VyUHJveHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1
cmwsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbikKLSAgICA6IG1fY2xvc2luZyhm
YWxzZSkKLSAgICAsIG1fbmFtZShuYW1lLmlzb2xhdGVkQ29weSgpKQotICAgICwgbV91cmwodXJs
LmNvcHkoKSkKLSAgICAsIG1fb3JpZ2luKG9yaWdpbikKLXsKLSAgICAvLyBXZSBzaG91bGQgYmUg
dGhlIHNvbGUgb3duZXIgb2YgdGhlIFNlY3VyaXR5T3JpZ2luLCBhcyB3ZSB3aWxsIGZyZWUgaXQg
b24gYW5vdGhlciB0aHJlYWQuCi0gICAgQVNTRVJUKG1fb3JpZ2luLT5oYXNPbmVSZWYoKSk7Ci19
Ci0KLWJvb2wgU2hhcmVkV29ya2VyUHJveHk6Om1hdGNoZXMoY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4sIGNvbnN0IEtVUkwmIHVybFRvTWF0Y2gp
IGNvbnN0Ci17Ci0gICAgLy8gSWYgdGhlIG9yaWdpbnMgZG9uJ3QgbWF0Y2gsIG9yIHRoZSBuYW1l
cyBkb24ndCBtYXRjaCwgdGhlbiB0aGlzIGlzIG5vdCB0aGUgcHJveHkgd2UgYXJlIGxvb2tpbmcg
Zm9yLgotICAgIGlmICghb3JpZ2luLT5lcXVhbChtX29yaWdpbi5nZXQoKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIElmIHRoZSBuYW1lcyBhcmUgYm90aCBlbXB0eSwgY29tcGFy
ZXMgdGhlIFVSTHMgaW5zdGVhZCBwZXIgdGhlIFdlYiBXb3JrZXJzIHNwZWMuCi0gICAgaWYgKG5h
bWUuaXNFbXB0eSgpICYmIG1fbmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB1cmxUb01h
dGNoID09IHVybCgpOwotCi0gICAgcmV0dXJuIG5hbWUgPT0gbV9uYW1lOwotfQotCi12b2lkIFNo
YXJlZFdvcmtlclByb3h5Ojpwb3N0VGFza1RvTG9hZGVyKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKLXsKLSAgICBNdXRleExvY2tlciBsb2NrKG1fd29ya2Vy
RG9jdW1lbnRzTG9jayk7Ci0KLSAgICBpZiAoaXNDbG9zaW5nKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIElmIHdlIGFyZW4ndCBjbG9zaW5nLCB0aGVuIHdlIG11c3QgaGF2ZSBhdCBsZWFz
dCBvbmUgZG9jdW1lbnQuCi0gICAgQVNTRVJUKG1fd29ya2VyRG9jdW1lbnRzLnNpemUoKSk7Ci0K
LSAgICAvLyBKdXN0IHBpY2sgYW4gYXJiaXRyYXJ5IGFjdGl2ZSBkb2N1bWVudCBmcm9tIHRoZSBI
YXNoU2V0IGFuZCBwYXNzIGxvYWQgcmVxdWVzdHMgdG8gaXQuCi0gICAgLy8gRklYTUU6IERvIHdl
IG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyIGNsb3NlcyB0aGUgZG9j
dW1lbnQgbWlkLWxvYWQsIHZpYSBhIHNoYWRvdyBkb2N1bWVudCBvciBzb21lIG90aGVyIHNvbHV0
aW9uPwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9ICoobV93b3JrZXJEb2N1bWVudHMuYmVnaW4o
KSk7Ci0gICAgZG9jdW1lbnQtPnBvc3RUYXNrKHRhc2spOwotfQotCi1ib29sIFNoYXJlZFdvcmtl
clByb3h5Ojpwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoUGFzc093blB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUpCi17Ci0gICAg
aWYgKGlzQ2xvc2luZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKG1fdGhy
ZWFkKTsKLSAgICBtX3RocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZSh0YXNrLCBtb2Rl
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR3JvdXBTZXR0aW5ncyogU2hhcmVkV29ya2VyUHJv
eHk6Omdyb3VwU2V0dGluZ3MoKSBjb25zdAotewotICAgIGlmIChpc0Nsb3NpbmcoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgQVNTRVJUKG1fd29ya2VyRG9jdW1lbnRzLnNpemUoKSk7Ci0gICAg
Ly8gSnVzdCBwaWNrIHRoZSBmaXJzdCBhY3RpdmUgZG9jdW1lbnQsIGFuZCB1c2UgdGhlIGdyb3Vw
c2V0dGluZ3Mgb2YgdGhhdCBwYWdlLgotICAgIERvY3VtZW50KiBkb2N1bWVudCA9ICoobV93b3Jr
ZXJEb2N1bWVudHMuYmVnaW4oKSk7Ci0gICAgaWYgKGRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAg
IHJldHVybiBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsKLQotICAg
IHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwb3N0RXhjZXB0aW9uVGFzayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxp
bmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIGNvbnRleHQtPnJlcG9y
dEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCwgMCk7Ci19Ci0K
LXZvaWQgU2hhcmVkV29ya2VyUHJveHk6OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMKQotewotICAgIE11dGV4TG9ja2VyIGxvY2sobV93b3JrZXJEb2N1bWVudHNMb2NrKTsK
LSAgICBmb3IgKEhhc2hTZXQ8RG9jdW1lbnQqPjo6aXRlcmF0b3IgaXRlciA9IG1fd29ya2VyRG9j
dW1lbnRzLmJlZ2luKCk7IGl0ZXIgIT0gbV93b3JrZXJEb2N1bWVudHMuZW5kKCk7ICsraXRlcikK
LSAgICAgICAgKCppdGVyKS0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0RXhjZXB0
aW9uVGFzaywgZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpKTsKLX0KLQotc3Rh
dGljIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBk
b2N1bWVudCwgTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VM
ZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCwgdW5zaWduZWQgbGluZU51bWJlcikKLXsKLSAgICBkb2N1bWVudC0+YWRkQ29uc29sZU1lc3Nh
Z2Uoc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgc291cmNlVVJMLCBsaW5lTnVtYmVyKTsK
LX0KLQotdm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJP
YmplY3QoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3NhZ2VMZXZl
bCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX3dvcmtlckRvY3VtZW50
c0xvY2spOwotICAgIGZvciAoSGFzaFNldDxEb2N1bWVudCo+OjppdGVyYXRvciBpdGVyID0gbV93
b3JrZXJEb2N1bWVudHMuYmVnaW4oKTsgaXRlciAhPSBtX3dvcmtlckRvY3VtZW50cy5lbmQoKTsg
KytpdGVyKQotICAgICAgICAoKml0ZXIpLT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJnBv
c3RDb25zb2xlTWVzc2FnZVRhc2ssIHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIHNvdXJj
ZVVSTCwgbGluZU51bWJlcikpOwotfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLXZvaWQgU2hh
cmVkV29ya2VyUHJveHk6OnBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yKGNvbnN0IFN0cmluZyYp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6
dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotI2VuZGlmCi0KLXZvaWQgU2hhcmVkV29ya2VyUHJveHk6OndvcmtlckNv
bnRleHRDbG9zZWQoKQotewotICAgIGlmIChpc0Nsb3NpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNsb3NlKCk7Ci19Ci0KLXZvaWQgU2hhcmVkV29ya2VyUHJveHk6OndvcmtlckNvbnRleHRE
ZXN0cm95ZWQoKQotewotICAgIC8vIFRoZSBwcm94eSBtYXkgYmUgZnJlZWQgYnkgdGhpcyBjYWxs
LCBzbyBkbyBub3QgcmVmZXJlbmNlIGl0IGFueSBmdXJ0aGVyLgotICAgIERlZmF1bHRTaGFyZWRX
b3JrZXJSZXBvc2l0b3J5OjppbnN0YW5jZSgpLnJlbW92ZVByb3h5KHRoaXMpOwotfQotCi12b2lk
IFNoYXJlZFdvcmtlclByb3h5OjphZGRUb1dvcmtlckRvY3VtZW50cyhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQotewotICAgIC8vIE5lc3RlZCB3b3JrZXJzIGFyZSBub3QgeWV0IHN1
cHBvcnRlZCwgc28gcGFzc2VkLWluIGNvbnRleHQgc2hvdWxkIGFsd2F5cyBiZSBhIERvY3VtZW50
LgotICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwotICAgIEFTU0VSVCghaXNDbG9z
aW5nKCkpOwotICAgIE11dGV4TG9ja2VyIGxvY2sobV93b3JrZXJEb2N1bWVudHNMb2NrKTsKLSAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwot
ICAgIG1fd29ya2VyRG9jdW1lbnRzLmFkZChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgU2hhcmVkV29y
a2VyUHJveHk6OmRvY3VtZW50RGV0YWNoZWQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIGlm
IChpc0Nsb3NpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIFJlbW92ZSB0aGUgZG9jdW1l
bnQgZnJvbSBvdXIgc2V0IChpZiBpdCdzIHRoZXJlKSBhbmQgaWYgdGhhdCB3YXMgdGhlIGxhc3Qg
ZG9jdW1lbnQgaW4gdGhlIHNldCwgbWFyayB0aGUgcHJveHkgYXMgY2xvc2VkLgotICAgIE11dGV4
TG9ja2VyIGxvY2sobV93b3JrZXJEb2N1bWVudHNMb2NrKTsKLSAgICBtX3dvcmtlckRvY3VtZW50
cy5yZW1vdmUoZG9jdW1lbnQpOwotICAgIGlmICghbV93b3JrZXJEb2N1bWVudHMuc2l6ZSgpKQot
ICAgICAgICBjbG9zZSgpOwotfQotCi12b2lkIFNoYXJlZFdvcmtlclByb3h5OjpjbG9zZSgpCi17
Ci0gICAgQVNTRVJUKCFpc0Nsb3NpbmcoKSk7Ci0gICAgbV9jbG9zaW5nID0gdHJ1ZTsKLSAgICAv
LyBTdG9wIHRoZSB3b3JrZXIgdGhyZWFkIC0gdGhlIHByb3h5IHdpbGwgc3RheSBhcm91bmQgdW50
aWwgd2UgZ2V0IHdvcmtlclRocmVhZEV4aXRlZCgpIG5vdGlmaWNhdGlvbi4KLSAgICBpZiAobV90
aHJlYWQpCi0gICAgICAgIG1fdGhyZWFkLT5zdG9wKCk7Ci19Ci0KLWNsYXNzIFNoYXJlZFdvcmtl
ckNvbm5lY3RUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNoYXJlZFdvcmtlckNvbm5lY3RUYXNrPiBjcmVh
dGUoUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFNoYXJlZFdvcmtlckNvbm5lY3RUYXNrKGNoYW5uZWwpKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU2hhcmVkV29ya2VyQ29ubmVjdFRhc2soUGFzc093blB0
cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWwpCi0gICAgICAgIDogbV9jaGFubmVsKGNoYW5u
ZWwpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0KQotICAgIHsKLSAgICAgICAgUmVmUHRyPE1l
c3NhZ2VQb3J0PiBwb3J0ID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZSgqc2NyaXB0Q29udGV4dCk7Ci0g
ICAgICAgIHBvcnQtPmVudGFuZ2xlKG1fY2hhbm5lbC5yZWxlYXNlKCkpOwotICAgICAgICBBU1NF
UlQoc2NyaXB0Q29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwotICAgICAgICBXb3JrZXJDb250
ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdENv
bnRleHQpOwotICAgICAgICAvLyBTaW5jZSBjbG9zZSgpIHN0b3BzIHRoZSB0aHJlYWQgZXZlbnQg
bG9vcCwgdGhpcyBzaG91bGQgbm90IGV2ZXIgZ2V0IGNhbGxlZCB3aGlsZSBjbG9zaW5nLgotICAg
ICAgICBBU1NFUlQoIXdvcmtlckNvbnRleHQtPmlzQ2xvc2luZygpKTsKLSAgICAgICAgQVNTRVJU
KHdvcmtlckNvbnRleHQtPmlzU2hhcmVkV29ya2VyQ29udGV4dCgpKTsKLSAgICAgICAgd29ya2Vy
Q29udGV4dC0+ZGlzcGF0Y2hFdmVudChjcmVhdGVDb25uZWN0RXZlbnQocG9ydCkpOwotICAgIH0K
LQotICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IG1fY2hhbm5lbDsKLX07Ci0KLS8vIExv
YWRzIHRoZSBzY3JpcHQgb24gYmVoYWxmIG9mIGEgd29ya2VyLgotY2xhc3MgU2hhcmVkV29ya2Vy
U2NyaXB0TG9hZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkV29ya2VyU2NyaXB0TG9hZGVy
PiwgcHJpdmF0ZSBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQgewotcHVibGljOgotICAgIFNoYXJl
ZFdvcmtlclNjcmlwdExvYWRlcihQYXNzUmVmUHRyPFNoYXJlZFdvcmtlcj4sIFBhc3NPd25QdHI8
TWVzc2FnZVBvcnRDaGFubmVsPiwgUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXJQcm94eT4pOwotICAg
IHZvaWQgbG9hZChjb25zdCBLVVJMJik7Ci0KLXByaXZhdGU6Ci0gICAgLy8gV29ya2VyU2NyaXB0
TG9hZGVyQ2xpZW50IGNhbGxiYWNrcwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKCk7Ci0KLSAgICBSZWZQdHI8U2hhcmVkV29y
a2VyPiBtX3dvcmtlcjsKLSAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBtX3BvcnQ7Ci0g
ICAgUmVmUHRyPFNoYXJlZFdvcmtlclByb3h5PiBtX3Byb3h5OwotICAgIFJlZlB0cjxXb3JrZXJT
Y3JpcHRMb2FkZXI+IG1fc2NyaXB0TG9hZGVyOwotfTsKLQotU2hhcmVkV29ya2VyU2NyaXB0TG9h
ZGVyOjpTaGFyZWRXb3JrZXJTY3JpcHRMb2FkZXIoUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXI+IHdv
cmtlciwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IHBvcnQsIFBhc3NSZWZQdHI8U2hh
cmVkV29ya2VyUHJveHk+IHByb3h5KQotICAgIDogbV93b3JrZXIod29ya2VyKQotICAgICwgbV9w
b3J0KHBvcnQpCi0gICAgLCBtX3Byb3h5KHByb3h5KQotewotfQotCi12b2lkIFNoYXJlZFdvcmtl
clNjcmlwdExvYWRlcjo6bG9hZChjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgLy8gU3RheSBhbGl2
ZSAoYW5kIGtlZXAgdGhlIFNoYXJlZFdvcmtlciBhbmQgSlMgd3JhcHBlciBhbGl2ZSkgdW50aWwg
dGhlIGxvYWQgZmluaXNoZXMuCi0gICAgdGhpcy0+cmVmKCk7Ci0gICAgbV93b3JrZXItPnNldFBl
bmRpbmdBY3Rpdml0eShtX3dvcmtlci5nZXQoKSk7Ci0KLSAgICAvLyBNYXJrIHRoaXMgb2JqZWN0
IGFzIGFjdGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBsb2FkLgotICAgIG1fc2NyaXB0TG9h
ZGVyID0gV29ya2VyU2NyaXB0TG9hZGVyOjpjcmVhdGUoKTsKLSNpZiBQTEFURk9STShDSFJPTUlV
TSkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICBtX3NjcmlwdExvYWRlci0+c2V0VGFyZ2V0
VHlwZShSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzU2hhcmVkV29ya2VyKTsKLSNlbmRpZgotICAg
IG1fc2NyaXB0TG9hZGVyLT5sb2FkQXN5bmNocm9ub3VzbHkobV93b3JrZXItPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgdXJsLCBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0cywgdGhpcyk7Ci19Ci0K
LXZvaWQgU2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKLXsKLSAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVTY3JpcHRSZXNwb25zZShtX3dvcmtlci0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBpZGVudGlmaWVyKTsKLX0KLQotdm9pZCBTaGFyZWRX
b3JrZXJTY3JpcHRMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKCkKLXsKLSAgICAvLyBGSVhNRTogVGhp
cyBtZXRob2QgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgaW52b2tlZCBpZiB3ZSBhcmUgbG9hZGlu
ZyBmcm9tIFdvcmtlckNvbnRleHQgKHNlZSBjb21tZW50IGZvciBXb3JrZXJTY3JpcHRMb2FkZXJD
bGllbnQ6Om5vdGlmeUZpbmlzaGVkKCkpLgotICAgIC8vIFdlIG5lZWQgdG8gYWRkcmVzcyB0aGlz
IGJlZm9yZSBzdXBwb3J0aW5nIG5lc3RlZCB3b3JrZXJzLgotCi0gICAgLy8gSGFuZCBvZmYgdGhl
IGp1c3QtbG9hZGVkIGNvZGUgdG8gdGhlIHJlcG9zaXRvcnkgdG8gc3RhcnQgdXAgdGhlIHdvcmtl
ciB0aHJlYWQuCi0gICAgaWYgKG1fc2NyaXB0TG9hZGVyLT5mYWlsZWQoKSkKLSAgICAgICAgbV93
b3JrZXItPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVu
dCwgZmFsc2UsIHRydWUpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpzY3JpcHRJbXBvcnRlZChtX3dvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCBtX3NjcmlwdExvYWRlci0+aWRlbnRpZmllcigpLCBtX3NjcmlwdExvYWRlci0+c2NyaXB0KCkp
OwotICAgICAgICBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aW5zdGFuY2UoKS53b3Jr
ZXJTY3JpcHRMb2FkZWQoKm1fcHJveHksIG1fd29ya2VyLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPnVzZXJBZ2VudChtX3NjcmlwdExvYWRlci0+dXJsKCkpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zY3Jp
cHRMb2FkZXItPnNjcmlwdCgpLCBtX3BvcnQucmVsZWFzZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV93b3Jr
ZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmRl
cHJlY2F0ZWRIZWFkZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fd29ya2VyLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5kZXByZWNhdGVkSGVhZGVyVHlwZSgp
KTsKLSAgICB9Ci0gICAgbV93b3JrZXItPnVuc2V0UGVuZGluZ0FjdGl2aXR5KG1fd29ya2VyLmdl
dCgpKTsKLSAgICB0aGlzLT5kZXJlZigpOyAvLyBUaGlzIGZyZWVzIHRoaXMgb2JqZWN0IC0gbXVz
dCBiZSB0aGUgbGFzdCBhY3Rpb24gaW4gdGhpcyBmdW5jdGlvbi4KLX0KLQotRGVmYXVsdFNoYXJl
ZFdvcmtlclJlcG9zaXRvcnkmIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjppbnN0YW5j
ZSgpCi17Ci0gICAgQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljKERlZmF1bHRTaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5KiwgaW5zdGFuY2UgPSBuZXcgRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRv
cnkpOwotICAgIHJldHVybiAqaW5zdGFuY2U7Ci19Ci0KLXZvaWQgRGVmYXVsdFNoYXJlZFdvcmtl
clJlcG9zaXRvcnk6OndvcmtlclNjcmlwdExvYWRlZChTaGFyZWRXb3JrZXJQcm94eSYgcHJveHks
IGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHdvcmtlclNjcmlwdCwgUGFz
c093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IHBvcnQsIGNvbnN0IFN0cmluZyYgY29udGVudFNl
Y3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUgY29udGVudFNl
Y3VyaXR5UG9saWN5VHlwZSkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrKG1fbG9jayk7Ci0gICAg
aWYgKHByb3h5LmlzQ2xvc2luZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBBbm90aGVy
IGxvYWRlciBtYXkgaGF2ZSBhbHJlYWR5IHN0YXJ0ZWQgdXAgYSB0aHJlYWQgZm9yIHRoaXMgcHJv
eHkgLSBpZiBzbywganVzdCBzZW5kIGEgY29ubmVjdCB0byB0aGUgcHJlLWV4aXN0aW5nIHRocmVh
ZC4KLSAgICBpZiAoIXByb3h5LnRocmVhZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRXb3Jr
ZXJUaHJlYWQ+IHRocmVhZCA9IFNoYXJlZFdvcmtlclRocmVhZDo6Y3JlYXRlKHByb3h5Lm5hbWUo
KSwgcHJveHkudXJsKCksIHVzZXJBZ2VudCwgcHJveHkuZ3JvdXBTZXR0aW5ncygpLCB3b3JrZXJT
Y3JpcHQsIHByb3h5LCBwcm94eSwgRG9udFBhdXNlV29ya2VyQ29udGV4dE9uU3RhcnQsIGNvbnRl
bnRTZWN1cml0eVBvbGljeSwgY29udGVudFNlY3VyaXR5UG9saWN5VHlwZSk7Ci0gICAgICAgIHBy
b3h5LnNldFRocmVhZCh0aHJlYWQpOwotICAgICAgICB0aHJlYWQtPnN0YXJ0KCk7Ci0gICAgfQot
ICAgIHByb3h5LnRocmVhZCgpLT5ydW5Mb29wKCkucG9zdFRhc2soU2hhcmVkV29ya2VyQ29ubmVj
dFRhc2s6OmNyZWF0ZShwb3J0KSk7Ci19Ci0KLWJvb2wgU2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6
aXNBdmFpbGFibGUoKQotewotICAgIC8vIFNoYXJlZFdvcmtlcnMgYXJlIGVuYWJsZWQgb24gdGhl
IGRlZmF1bHQgV2ViS2l0IHBsYXRmb3JtLgotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNo
YXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm5lY3QoUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXI+IHdv
cmtlciwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IHBvcnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBEZWZhdWx0
U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6aW5zdGFuY2UoKS5jb25uZWN0VG9Xb3JrZXIod29ya2Vy
LCBwb3J0LCB1cmwsIG5hbWUsIGVjKTsKLX0KLQotdm9pZCBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5
Ojpkb2N1bWVudERldGFjaGVkKERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBEZWZhdWx0U2hh
cmVkV29ya2VyUmVwb3NpdG9yeTo6aW5zdGFuY2UoKS5kb2N1bWVudERldGFjaGVkKGRvY3VtZW50
KTsKLX0KLQotYm9vbCBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5OjpoYXNTaGFyZWRXb3JrZXJzKERv
Y3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9z
aXRvcnk6Omluc3RhbmNlKCkuaGFzU2hhcmVkV29ya2Vycyhkb2N1bWVudCk7Ci19Ci0KLWJvb2wg
RGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMoRG9jdW1lbnQq
IGRvY3VtZW50KQotewotICAgIE11dGV4TG9ja2VyIGxvY2sobV9sb2NrKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9wcm94aWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmICht
X3Byb3hpZXNbaV0tPmlzSW5Xb3JrZXJEb2N1bWVudHMoZG9jdW1lbnQpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBEZWZhdWx0
U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6cmVtb3ZlUHJveHkoU2hhcmVkV29ya2VyUHJveHkqIHBy
b3h5KQotewotICAgIE11dGV4TG9ja2VyIGxvY2sobV9sb2NrKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9wcm94aWVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChwcm94eSA9
PSBtX3Byb3hpZXNbaV0uZ2V0KCkpIHsKLSAgICAgICAgICAgIG1fcHJveGllcy5yZW1vdmUoaSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRGVmYXVs
dFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmRvY3VtZW50RGV0YWNoZWQoRG9jdW1lbnQqIGRvY3Vt
ZW50KQotewotICAgIE11dGV4TG9ja2VyIGxvY2sobV9sb2NrKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9wcm94aWVzLnNpemUoKTsgaSsrKQotICAgICAgICBtX3Byb3hpZXNbaV0t
PmRvY3VtZW50RGV0YWNoZWQoZG9jdW1lbnQpOwotfQotCi12b2lkIERlZmF1bHRTaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5Ojpjb25uZWN0VG9Xb3JrZXIoUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXI+IHdv
cmtlciwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWw+IHBvcnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBNdXRleExv
Y2tlciBsb2NrKG1fbG9jayk7Ci0gICAgQVNTRVJUKHdvcmtlci0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3MoU2VjdXJpdHlPcmlnaW46OmNyZWF0
ZSh1cmwpLmdldCgpKSk7Ci0gICAgLy8gRmV0Y2ggYSBwcm94eSBjb3JyZXNwb25kaW5nIHRvIHRo
aXMgU2hhcmVkV29ya2VyLgotICAgIFJlZlB0cjxTaGFyZWRXb3JrZXJQcm94eT4gcHJveHkgPSBn
ZXRQcm94eShuYW1lLCB1cmwpOwotICAgIHByb3h5LT5hZGRUb1dvcmtlckRvY3VtZW50cyh3b3Jr
ZXItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgaWYgKHByb3h5LT51cmwoKSAhPSB1
cmwpIHsKLSAgICAgICAgLy8gUHJveHkgYWxyZWFkeSBleGlzdGVkIHVuZGVyIGFsdGVybmF0ZSBV
UkwgLSByZXR1cm4gYW4gZXJyb3IuCi0gICAgICAgIGVjID0gVVJMX01JU01BVENIX0VSUjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBJZiBwcm94eSBpcyBhbHJlYWR5IHJ1bm5pbmcs
IGp1c3QgY29ubmVjdCB0byBpdCAtIG90aGVyd2lzZSwga2ljayBvZmYgYSBsb2FkZXIgdG8gbG9h
ZCB0aGUgc2NyaXB0LgotICAgIGlmIChwcm94eS0+dGhyZWFkKCkpCi0gICAgICAgIHByb3h5LT50
aHJlYWQoKS0+cnVuTG9vcCgpLnBvc3RUYXNrKFNoYXJlZFdvcmtlckNvbm5lY3RUYXNrOjpjcmVh
dGUocG9ydCkpOwotICAgIGVsc2UgewotICAgICAgICBSZWZQdHI8U2hhcmVkV29ya2VyU2NyaXB0
TG9hZGVyPiBsb2FkZXIgPSBhZG9wdFJlZihuZXcgU2hhcmVkV29ya2VyU2NyaXB0TG9hZGVyKHdv
cmtlciwgcG9ydCwgcHJveHkucmVsZWFzZSgpKSk7Ci0gICAgICAgIGxvYWRlci0+bG9hZCh1cmwp
OwotICAgIH0KLX0KLQotLy8gQ3JlYXRlcyBhIG5ldyBTaGFyZWRXb3JrZXJQcm94eSBvciByZXR1
cm5zIGFuIGV4aXN0aW5nIG9uZSBmcm9tIHRoZSByZXBvc2l0b3J5LiBNdXN0IG9ubHkgYmUgY2Fs
bGVkIHdoaWxlIHRoZSByZXBvc2l0b3J5IG11dGV4IGlzIGhlbGQuCi1QYXNzUmVmUHRyPFNoYXJl
ZFdvcmtlclByb3h5PiBEZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6Z2V0UHJveHkoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgLy8gTG9vayBmb3IgYW4g
ZXhpc3Rpbmcgd29ya2VyLCBhbmQgY3JlYXRlIG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0LgotICAg
IC8vIEl0ZW1zIGluIHRoZSBjYWNoZSBhcmUgZnJlZWQgb24gYW5vdGhlciB0aHJlYWQsIHNvIGRv
IGEgdGhyZWFkc2FmZSBjb3B5IG9mIHRoZSBVUkwgYmVmb3JlIGNyZWF0aW5nIHRoZSBvcmlnaW4s
Ci0gICAgLy8gdG8gbWFrZSBzdXJlIG5vIHJlZmVyZW5jZXMgdG8gZXh0ZXJuYWwgc3RyaW5ncyBs
aW5nZXIuCi0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwuc3RyaW5nKCkuaXNvbGF0ZWRDb3B5
KCkpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm94aWVzLnNpemUoKTsgaSsr
KSB7Ci0gICAgICAgIGlmICghbV9wcm94aWVzW2ldLT5pc0Nsb3NpbmcoKSAmJiBtX3Byb3hpZXNb
aV0tPm1hdGNoZXMobmFtZSwgb3JpZ2luLCB1cmwpKQotICAgICAgICAgICAgcmV0dXJuIG1fcHJv
eGllc1tpXTsKLSAgICB9Ci0gICAgLy8gUHJveHkgaXMgbm90IGluIHRoZSByZXBvc2l0b3J5IGN1
cnJlbnRseSAtIGNyZWF0ZSBhIG5ldyBvbmUuCi0gICAgUmVmUHRyPFNoYXJlZFdvcmtlclByb3h5
PiBwcm94eSA9IFNoYXJlZFdvcmtlclByb3h5OjpjcmVhdGUobmFtZSwgdXJsLCBvcmlnaW4ucmVs
ZWFzZSgpKTsKLSAgICBtX3Byb3hpZXMuYXBwZW5kKHByb3h5KTsKLSAgICByZXR1cm4gcHJveHku
cmVsZWFzZSgpOwotfQotCi1EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeTo6RGVmYXVsdFNo
YXJlZFdvcmtlclJlcG9zaXRvcnkoKQotewotfQotCi1EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3Np
dG9yeTo6fkRlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5KCkKLXsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9y
eS5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9y
eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWQ5MGUwLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaAor
KysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERlZmF1bHRTaGFyZWRXb3JrZXJS
ZXBvc2l0b3J5X2gKLSNkZWZpbmUgRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnlfaAotCi0j
aWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQotCi0jaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9s
aWN5LmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgRG9jdW1lbnQ7Ci0gICAg
Y2xhc3MgS1VSTDsKLSAgICBjbGFzcyBNZXNzYWdlUG9ydENoYW5uZWw7Ci0gICAgY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICBjbGFzcyBTaGFyZWRXb3JrZXI7Ci0gICAgY2xhc3Mg
U2hhcmVkV29ya2VyUHJveHk7Ci0KLSAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi0g
ICAgLy8gUGxhdGZvcm0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJlZFdvcmtl
clJlcG9zaXRvcnkgc3RhdGljIGludGVyZmFjZS4KLSAgICBjbGFzcyBEZWZhdWx0U2hhcmVkV29y
a2VyUmVwb3NpdG9yeSB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmF1bHRTaGFy
ZWRXb3JrZXJSZXBvc2l0b3J5KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGlj
OgotICAgICAgICAvLyBJbnZva2VkIG9uY2UgdGhlIHdvcmtlciBzY3JpcHQgaGFzIGJlZW4gbG9h
ZGVkIHRvIGZpcmUgdXAgdGhlIHdvcmtlciB0aHJlYWQuCi0gICAgICAgIHZvaWQgd29ya2VyU2Ny
aXB0TG9hZGVkKFNoYXJlZFdvcmtlclByb3h5JiwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNv
bnN0IFN0cmluZyYgd29ya2VyU2NyaXB0LCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4s
IGNvbnN0IFN0cmluZyYgY29udGVudFNlY3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OkhlYWRlclR5cGUpOwotCi0gICAgICAgIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9m
IFNoYXJlZFdvcmtlclJlcG9zaXRvcnk6OmNvbm5lY3QoKQotICAgICAgICB2b2lkIGNvbm5lY3RU
b1dvcmtlcihQYXNzUmVmUHRyPFNoYXJlZFdvcmtlcj4sIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRD
aGFubmVsPiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYp
OwotCi0gICAgICAgIC8vIE5vdGlmaWNhdGlvbiB0aGF0IGEgZG9jdW1lbnQgaGFzIGJlZW4gZGV0
YWNoZWQuCi0gICAgICAgIHZvaWQgZG9jdW1lbnREZXRhY2hlZChEb2N1bWVudCopOwotCi0gICAg
ICAgIC8vIFJlbW92ZXMgdGhlIHBhc3NlZCBTaGFyZWRXb3JrZXJQcm94eSBmcm9tIHRoZSByZXBv
c2l0b3J5LgotICAgICAgICB2b2lkIHJlbW92ZVByb3h5KFNoYXJlZFdvcmtlclByb3h5Kik7Ci0K
LSAgICAgICAgYm9vbCBoYXNTaGFyZWRXb3JrZXJzKERvY3VtZW50Kik7Ci0KLSAgICAgICAgc3Rh
dGljIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5JiBpbnN0YW5jZSgpOwotICAgIHByaXZh
dGU6Ci0gICAgICAgIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5KCk7Ci0gICAgICAgIH5E
ZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeSgpOwotCi0gICAgICAgIFBhc3NSZWZQdHI8U2hh
cmVkV29ya2VyUHJveHk+IGdldFByb3h5KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYp
OwotICAgICAgICAvLyBNdXRleCB1c2VkIHRvIHByb3RlY3QgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1
cmVzLgotICAgICAgICBNdXRleCBtX2xvY2s7Ci0KLSAgICAgICAgLy8gTGlzdCBvZiBzaGFyZWQg
d29ya2Vycy4gRXhwZWN0YXRpb24gaXMgdGhhdCB0aGVyZSB3aWxsIGJlIGEgbGltaXRlZCBudW1i
ZXIgb2Ygc2hhcmVkIHdvcmtlcnMsIGFuZCBzbyB0cmFja2luZyB0aGVtIGluIGEgVmVjdG9yIGlz
IG1vcmUgZWZmaWNpZW50IHRoYW4gbmVzdGVkIEhhc2hNYXBzLgotICAgICAgICB0eXBlZGVmIFZl
Y3RvcjxSZWZQdHI8U2hhcmVkV29ya2VyUHJveHk+ID4gU2hhcmVkV29ya2VyUHJveHlSZXBvc2l0
b3J5OwotICAgICAgICBTaGFyZWRXb3JrZXJQcm94eVJlcG9zaXRvcnkgbV9wcm94aWVzOwotICAg
IH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTSEFSRURf
V09SS0VSUykKLQotI2VuZGlmIC8vIERlZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOWU5NGVlNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1No
YXJlZFdvcmtlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKLQotI2luY2x1ZGUgIlNoYXJlZFdv
cmtlci5oIgotCi0jaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVk
ZSAiS1VSTC5oIgotI2luY2x1ZGUgIk1lc3NhZ2VDaGFubmVsLmgiCi0jaW5jbHVkZSAiTWVzc2Fn
ZVBvcnQuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAi
U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWlubGlu
ZSBTaGFyZWRXb3JrZXI6OlNoYXJlZFdvcmtlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQotICAgIDogQWJzdHJhY3RXb3JrZXIoY29udGV4dCkKLXsKLX0KLQotUGFzc1JlZlB0cjxT
aGFyZWRXb3JrZXI+IFNoYXJlZFdvcmtlcjo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFJlZlB0cjxTaGFyZWRXb3JrZXI+IHdvcmtlciA9IGFkb3B0UmVm
KG5ldyBTaGFyZWRXb3JrZXIoY29udGV4dCkpOwotCi0gICAgUmVmUHRyPE1lc3NhZ2VDaGFubmVs
PiBjaGFubmVsID0gTWVzc2FnZUNoYW5uZWw6OmNyZWF0ZShjb250ZXh0KTsKLSAgICB3b3JrZXIt
Pm1fcG9ydCA9IGNoYW5uZWwtPnBvcnQxKCk7Ci0gICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5l
bD4gcmVtb3RlUG9ydCA9IGNoYW5uZWwtPnBvcnQyKCktPmRpc2VudGFuZ2xlKGVjKTsKLSAgICBB
U1NFUlQocmVtb3RlUG9ydCk7Ci0KLSAgICB3b3JrZXItPnN1c3BlbmRJZk5lZWRlZCgpOwotCi0g
ICAgS1VSTCBzY3JpcHRVUkwgPSB3b3JrZXItPnJlc29sdmVVUkwodXJsLCBlYyk7Ci0gICAgaWYg
KHNjcmlwdFVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU2hhcmVkV29y
a2VyUmVwb3NpdG9yeTo6Y29ubmVjdCh3b3JrZXIuZ2V0KCksIHJlbW90ZVBvcnQucmVsZWFzZSgp
LCBzY3JpcHRVUkwsIG5hbWUsIGVjKTsKLQotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkQ3JlYXRlV29ya2VyKGNvbnRleHQsIHdvcmtlci0+YXNJRCgpLCBzY3JpcHRVUkwuc3RyaW5n
KCksIHRydWUpOwotCi0gICAgcmV0dXJuIHdvcmtlci5yZWxlYXNlKCk7Ci19Ci0KLVNoYXJlZFdv
cmtlcjo6flNoYXJlZFdvcmtlcigpCi17Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgU2hhcmVk
V29ya2VyOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZXZlbnROYW1lcygp
LmludGVyZmFjZUZvclNoYXJlZFdvcmtlcjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgIC8vIEVOQUJMRShTSEFSRURfV09SS0VSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1No
YXJlZFdvcmtlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDM2MmJhLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2hhcmVkV29ya2VyX2gKLSNkZWZpbmUgU2hhcmVk
V29ya2VyX2gKLQotI2luY2x1ZGUgIkFic3RyYWN0V29ya2VyLmgiCi0KLSNpZiBFTkFCTEUoU0hB
UkVEX1dPUktFUlMpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFNoYXJlZFdv
cmtlciA6IHB1YmxpYyBBYnN0cmFjdFdvcmtlciB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgICAgICB2aXJ0dWFsIH5TaGFyZWRXb3JrZXIoKTsKLQotICAgICAgICBNZXNzYWdlUG9y
dCogcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9ydC5nZXQoKTsgfQotCi0gICAgICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBTaGFyZWRXb3JrZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotCi0g
ICAgICAgIHZpcnR1YWwgU2hhcmVkV29ya2VyKiB0b1NoYXJlZFdvcmtlcigpIHsgcmV0dXJuIHRo
aXM7IH0KLQotICAgICAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IG1fcG9ydDsKLSAgICB9OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1dPUktFUlMp
Ci0KLSNlbmRpZiAvLyBTaGFyZWRXb3JrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9TaGFyZWRXb3JrZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRX
b3JrZXIuaWRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGNjZGQ0Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyLmlkbAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIHRocmVhZHMgewotCi0gICAgaW50ZXJmYWNlIFsKLSAg
ICAgICAgQ29uZGl0aW9uYWw9U0hBUkVEX1dPUktFUlMsCi0gICAgICAgIEFjdGl2ZURPTU9iamVj
dCwKLSAgICAgICAgSlNDdXN0b21Db25zdHJ1Y3RvciwKLSAgICAgICAgQ29uc3RydWN0b3IoaW4g
RE9NU3RyaW5nIHNjcmlwdFVSTCwgaW4gW09wdGlvbmFsPURlZmF1bHRJc051bGxTdHJpbmddIERP
TVN0cmluZyBuYW1lKSwKLSAgICAgICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwK
LSAgICAgICAgQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb24sCi0gICAgICAgIEpTQ3VzdG9tTWFy
a0Z1bmN0aW9uLAotICAgICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgICAgIEpT
R2VuZXJhdGVUb0pTT2JqZWN0Ci0gICAgXSBTaGFyZWRXb3JrZXIgOiBBYnN0cmFjdFdvcmtlciB7
Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBNZXNzYWdlUG9ydCBwb3J0OwotICAgIH07Ci0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlckNvbnRleHQuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDJiYWY2Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFNIQVJFRF9X
T1JLRVJTKQotCi0jaW5jbHVkZSAiU2hhcmVkV29ya2VyQ29udGV4dC5oIgotCi0jaW5jbHVkZSAi
RE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIk1lc3NhZ2VF
dmVudC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q2Fs
bFN0YWNrLmgiCi0jaW5jbHVkZSAiU2hhcmVkV29ya2VyVGhyZWFkLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IGNyZWF0ZUNvbm5lY3RFdmVudChQ
YXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0KQotewotICAgIFJlZlB0cjxNZXNzYWdlRXZlbnQ+
IGV2ZW50ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUoYWRvcHRQdHIobmV3IE1lc3NhZ2VQb3J0QXJy
YXkoMSwgcG9ydCkpKTsKLSAgICBldmVudC0+aW5pdEV2ZW50KGV2ZW50TmFtZXMoKS5jb25uZWN0
RXZlbnQsIGZhbHNlLCBmYWxzZSk7Ci0gICAgcmV0dXJuIGV2ZW50LnJlbGVhc2UoKTsKLX0KLQot
U2hhcmVkV29ya2VyQ29udGV4dDo6U2hhcmVkV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFNoYXJlZFdvcmtl
clRocmVhZCogdGhyZWFkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5cGUp
Ci0gICAgOiBXb3JrZXJDb250ZXh0KHVybCwgdXNlckFnZW50LCB0aHJlYWQsIGNvbnRlbnRTZWN1
cml0eVBvbGljeSwgY29udGVudFNlY3VyaXR5UG9saWN5VHlwZSkKLSAgICAsIG1fbmFtZShuYW1l
KQotewotfQotCi1TaGFyZWRXb3JrZXJDb250ZXh0Ojp+U2hhcmVkV29ya2VyQ29udGV4dCgpCi17
Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgU2hhcmVkV29ya2VyQ29udGV4dDo6aW50ZXJmYWNl
TmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTaGFy
ZWRXb3JrZXJDb250ZXh0OwotfQotCi1TaGFyZWRXb3JrZXJUaHJlYWQqIFNoYXJlZFdvcmtlckNv
bnRleHQ6OnRocmVhZCgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFNoYXJlZFdvcmtlclRo
cmVhZCo+KEJhc2U6OnRocmVhZCgpKTsKLX0KLQotdm9pZCBTaGFyZWRXb3JrZXJDb250ZXh0Ojps
b2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+IGNhbGxTdGFjaykKLXsKLSAgICBXb3JrZXJDb250ZXh0Ojpsb2dFeGNlcHRpb25Ub0NvbnNv
bGUoZXJyb3JNZXNzYWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNhbGxTdGFjayk7Ci0gICAg
YWRkTWVzc2FnZVRvV29ya2VyQ29uc29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBl
LCBFcnJvck1lc3NhZ2VMZXZlbCwgZXJyb3JNZXNzYWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIs
IGNhbGxTdGFjayk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShTSEFSRURfV09SS0VSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
U2hhcmVkV29ya2VyQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3Jr
ZXJDb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOGU1OWIuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0LmgKKysr
IC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTaGFyZWRXb3JrZXJDb250ZXh0X2gK
LSNkZWZpbmUgU2hhcmVkV29ya2VyQ29udGV4dF9oCi0KLSNpZiBFTkFCTEUoU0hBUkVEX1dPUktF
UlMpCi0KLSNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKLSNpbmNsdWRlICJXb3Jr
ZXJDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIE1lc3NhZ2VF
dmVudDsKLSAgICBjbGFzcyBTaGFyZWRXb3JrZXJUaHJlYWQ7Ci0KLSAgICBjbGFzcyBTaGFyZWRX
b3JrZXJDb250ZXh0IDogcHVibGljIFdvcmtlckNvbnRleHQgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgdHlwZWRlZiBXb3JrZXJDb250ZXh0IEJhc2U7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNoYXJlZFdvcmtlckNvbnRleHQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFNoYXJlZFdvcmtlclRocmVhZCogdGhy
ZWFkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5
UG9saWN5OjpIZWFkZXJUeXBlIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5cGUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hhcmVkV29ya2VyQ29udGV4dChuYW1l
LCB1cmwsIHVzZXJBZ2VudCwgdGhyZWFkLCBjb250ZW50U2VjdXJpdHlQb2xpY3ksIGNvbnRlbnRT
ZWN1cml0eVBvbGljeVR5cGUpKTsKLSAgICAgICAgfQotICAgICAgICB2aXJ0dWFsIH5TaGFyZWRX
b3JrZXJDb250ZXh0KCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGlzU2hhcmVkV29ya2VyQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAgICAvLyBFdmVudFRhcmdldAot
ICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0
OwotCi0gICAgICAgIC8vIFNldHRlcnMvR2V0dGVycyBmb3IgYXR0cmlidXRlcyBpbiBTaGFyZWRX
b3JrZXJDb250ZXh0LmlkbAotICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KGNvbm5lY3QpOwotICAgICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQotCi0gICAgICAgIFNoYXJlZFdvcmtlclRocmVhZCogdGhyZWFkKCk7Ci0gICAgcHJpdmF0ZToK
LSAgICAgICAgU2hhcmVkV29ya2VyQ29udGV4dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtV
UkwmLCBjb25zdCBTdHJpbmcmLCBTaGFyZWRXb3JrZXJUaHJlYWQqLCBjb25zdCBTdHJpbmcmIGNv
bnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlKTsK
LQotICAgICAgICB2aXJ0dWFsIHZvaWQgbG9nRXhjZXB0aW9uVG9Db25zb2xlKGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIs
IFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPik7Ci0KLSAgICAgICAgU3RyaW5nIG1fbmFtZTsK
LSAgICB9OwotCi0gICAgUGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IGNyZWF0ZUNvbm5lY3RFdmVu
dChQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0Pik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VSUykKLQotI2VuZGlmIC8vIFNoYXJlZFdvcmtl
ckNvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3Jr
ZXJDb250ZXh0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvU2hhcmVkV29ya2VyQ29udGV4
dC5pZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3Njk4MTEuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJDb250ZXh0LmlkbAorKysgL2Rl
di9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgdGhyZWFkcyB7Ci0KLSAgICBpbnRlcmZhY2Ug
WwotICAgICAgICBDb25kaXRpb25hbD1TSEFSRURfV09SS0VSUywKLSAgICAgICAgRXh0ZW5kc0RP
TUdsb2JhbE9iamVjdCwKLSAgICAgICAgSXNXb3JrZXJDb250ZXh0LAotICAgICAgICBKU0dlbmVy
YXRlVG9OYXRpdmVPYmplY3QsCi0gICAgICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgICAgIE9t
aXRDb25zdHJ1Y3RvcgotICAgIF0gU2hhcmVkV29ya2VyQ29udGV4dCA6IFdvcmtlckNvbnRleHQg
ewotCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKLSAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25jb25uZWN0OwotCi0gICAgfTsKLQot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9TaGFyZWRXb3JrZXJSZXBvc2l0
b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNkODdlYy4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuaAorKysgL2Rldi9udWxs
CkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNoYXJlZFdvcmtlclJlcG9zaXRvcnlfaAotI2RlZmlu
ZSBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5X2gKLQotI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykK
LQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAg
ICBjbGFzcyBEb2N1bWVudDsKLSAgICBjbGFzcyBLVVJMOwotICAgIGNsYXNzIE1lc3NhZ2VQb3J0
Q2hhbm5lbDsKLSAgICBjbGFzcyBTaGFyZWRXb3JrZXI7Ci0KLSAgICB0eXBlZGVmIGludCBFeGNl
cHRpb25Db2RlOwotCi0gICAgLy8gSW50ZXJmYWNlIHRvIGEgcmVwb3NpdG9yeSB3aGljaCBtYW5h
Z2VzIHJlZmVyZW5jZXMgdG8gdGhlIHNldCBvZiBhY3RpdmUgc2hhcmVkIHdvcmtlcnMuCi0gICAg
Y2xhc3MgU2hhcmVkV29ya2VyUmVwb3NpdG9yeSB7Ci0gICAgcHVibGljOgotICAgICAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIFNoYXJlZFdvcmtlcnMsIG90aGVy
d2lzZSBmYWxzZS4KLSAgICAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKLQotICAgICAg
ICAvLyBDb25uZWN0cyB0aGUgcGFzc2VkIFNoYXJlZFdvcmtlciBvYmplY3Qgd2l0aCB0aGUgc3Bl
Y2lmaWVkIHdvcmtlciB0aHJlYWQsIGNyZWF0aW5nIGEgbmV3IHRocmVhZCBpZiBuZWNlc3Nhcnku
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNvbm5lY3QoUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXI+LCBQ
YXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4sIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgICAgICAvLyBJbnZva2VkIHdoZW4gYSBkb2N1
bWVudCBoYXMgYmVlbiBkZXRhY2hlZC4KLSAgICAgICAgc3RhdGljIHZvaWQgZG9jdW1lbnREZXRh
Y2hlZChEb2N1bWVudCopOwotCi0gICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFzc2Vk
IGRvY3VtZW50IGlzIGFzc29jaWF0ZWQgd2l0aCBhbnkgU2hhcmVkV29ya2Vycy4KLSAgICAgICAg
c3RhdGljIGJvb2wgaGFzU2hhcmVkV29ya2VycyhEb2N1bWVudCopOwotICAgIHByaXZhdGU6Ci0g
ICAgICAgIFNoYXJlZFdvcmtlclJlcG9zaXRvcnkoKSB7IH0KLSAgICB9OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0KLSNlbmRp
ZiAvLyBTaGFyZWRXb3JrZXJSZXBvc2l0b3J5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvU2hhcmVkV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
U2hhcmVkV29ya2VyVGhyZWFkLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBh
ODljOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlclRo
cmVhZC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQotCi0jaW5jbHVkZSAiU2hhcmVkV29ya2Vy
VGhyZWFkLmgiCi0KLSNpbmNsdWRlICJTaGFyZWRXb3JrZXJDb250ZXh0LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXJUaHJlYWQ+IFNoYXJlZFdvcmtl
clRocmVhZDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYgc2NyaXB0VVJM
LCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgR3JvdXBTZXR0aW5ncyogc2V0dGluZ3Ms
IGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkmIHdvcmtlckxvYWRl
clByb3h5LCBXb3JrZXJSZXBvcnRpbmdQcm94eSYgd29ya2VyUmVwb3J0aW5nUHJveHksIFdvcmtl
clRocmVhZFN0YXJ0TW9kZSBzdGFydE1vZGUsIGNvbnN0IFN0cmluZyYgY29udGVudFNlY3VyaXR5
UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUgY29udGVudFNlY3VyaXR5
UG9saWN5VHlwZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZFdvcmtlclRocmVh
ZChuYW1lLCBzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc2V0dGluZ3MsIHNvdXJjZUNvZGUsIHdvcmtl
ckxvYWRlclByb3h5LCB3b3JrZXJSZXBvcnRpbmdQcm94eSwgc3RhcnRNb2RlLCBjb250ZW50U2Vj
dXJpdHlQb2xpY3ksIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5cGUpKTsKLX0KLQotU2hhcmVkV29y
a2VyVGhyZWFkOjpTaGFyZWRXb3JrZXJUaHJlYWQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBHcm91cFNldHRpbmdzKiBz
ZXR0aW5ncywgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJMb2FkZXJQcm94eSYgd29y
a2VyTG9hZGVyUHJveHksIFdvcmtlclJlcG9ydGluZ1Byb3h5JiB3b3JrZXJSZXBvcnRpbmdQcm94
eSwgV29ya2VyVGhyZWFkU3RhcnRNb2RlIHN0YXJ0TW9kZSwgY29uc3QgU3RyaW5nJiBjb250ZW50
U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGVhZGVyVHlwZSBjb250ZW50
U2VjdXJpdHlQb2xpY3lUeXBlKQotICAgIDogV29ya2VyVGhyZWFkKHVybCwgdXNlckFnZW50LCBz
ZXR0aW5ncywgc291cmNlQ29kZSwgd29ya2VyTG9hZGVyUHJveHksIHdvcmtlclJlcG9ydGluZ1By
b3h5LCBzdGFydE1vZGUsIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgY29udGVudFNlY3VyaXR5UG9s
aWN5VHlwZSkKLSAgICAsIG1fbmFtZShuYW1lLmlzb2xhdGVkQ29weSgpKQotewotfQotCi1TaGFy
ZWRXb3JrZXJUaHJlYWQ6On5TaGFyZWRXb3JrZXJUaHJlYWQoKQotewotfQotCi1QYXNzUmVmUHRy
PFdvcmtlckNvbnRleHQ+IFNoYXJlZFdvcmtlclRocmVhZDo6Y3JlYXRlV29ya2VyQ29udGV4dChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIGNv
bnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlIGNv
bnRlbnRTZWN1cml0eVBvbGljeVR5cGUpCi17Ci0gICAgcmV0dXJuIFNoYXJlZFdvcmtlckNvbnRl
eHQ6OmNyZWF0ZShtX25hbWUsIHVybCwgdXNlckFnZW50LCB0aGlzLCBjb250ZW50U2VjdXJpdHlQ
b2xpY3ksIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5cGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJlZFdvcmtlclRocmVhZC5oIGIvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9TaGFyZWRXb3JrZXJUaHJlYWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggM2IzNWVkMS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1NoYXJl
ZFdvcmtlclRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIFNoYXJl
ZFdvcmtlclRocmVhZF9oCi0jZGVmaW5lIFNoYXJlZFdvcmtlclRocmVhZF9oCi0KLSNpZiBFTkFC
TEUoU0hBUkVEX1dPUktFUlMpCi0KLSNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIK
LSNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAg
Y2xhc3MgU2hhcmVkV29ya2VyVGhyZWFkIDogcHVibGljIFdvcmtlclRocmVhZCB7Ci0gICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRXb3JrZXJUaHJlYWQ+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2Vu
dCwgY29uc3QgR3JvdXBTZXR0aW5ncyosIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2Vy
TG9hZGVyUHJveHkmLCBXb3JrZXJSZXBvcnRpbmdQcm94eSYsIFdvcmtlclRocmVhZFN0YXJ0TW9k
ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBv
bGljeTo6SGVhZGVyVHlwZSk7Ci0gICAgICAgIH5TaGFyZWRXb3JrZXJUaHJlYWQoKTsKLQotICAg
IHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdvcmtlckNvbnRleHQ+IGNy
ZWF0ZVdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgY29udGVudFNlY3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5
cGUpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgU2hhcmVkV29ya2VyVGhyZWFkKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50LCBjb25zdCBH
cm91cFNldHRpbmdzKiwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJMb2FkZXJQcm94
eSYsIFdvcmtlclJlcG9ydGluZ1Byb3h5JiwgV29ya2VyVGhyZWFkU3RhcnRNb2RlLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFk
ZXJUeXBlKTsKLQotICAgICAgICBTdHJpbmcgbV9uYW1lOwotICAgIH07Ci19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0KLSNlbmRpZiAv
LyBTaGFyZWRXb3JrZXJUaHJlYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9Xb3JrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDI5OGYxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdPUktF
UlMpCi0KLSNpbmNsdWRlICJXb3JrZXIuaCIKLQotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKLSNpbmNsdWRl
ICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRlICJXb3JrZXJDb250ZXh0UHJveHkuaCIKLSNpbmNs
dWRlICJXb3JrZXJTY3JpcHRMb2FkZXIuaCIKLSNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKLSNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWlubGlu
ZSBXb3JrZXI6OldvcmtlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgIDog
QWJzdHJhY3RXb3JrZXIoY29udGV4dCkKLSAgICAsIG1fY29udGV4dFByb3h5KFdvcmtlckNvbnRl
eHRQcm94eTo6Y3JlYXRlKHRoaXMpKQotewotfQotCi1QYXNzUmVmUHRyPFdvcmtlcj4gV29ya2Vy
OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiB1
cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFJlZlB0cjxXb3JrZXI+IHdvcmtlciA9IGFk
b3B0UmVmKG5ldyBXb3JrZXIoY29udGV4dCkpOwotCi0gICAgd29ya2VyLT5zdXNwZW5kSWZOZWVk
ZWQoKTsKLQotICAgIEtVUkwgc2NyaXB0VVJMID0gd29ya2VyLT5yZXNvbHZlVVJMKHVybCwgZWMp
OwotICAgIGlmIChzY3JpcHRVUkwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IC8vIFRoZSB3b3JrZXIgY29udGV4dCBkb2VzIG5vdCBleGlzdCB3aGlsZSBsb2FkaW5nLCBzbyB3
ZSBtdXN0IGVuc3VyZSB0aGF0IHRoZSB3b3JrZXIgb2JqZWN0IGlzIG5vdCBjb2xsZWN0ZWQsIG5v
ciBhcmUgaXRzIGV2ZW50IGxpc3RlbmVycy4KLSAgICB3b3JrZXItPnNldFBlbmRpbmdBY3Rpdml0
eSh3b3JrZXIuZ2V0KCkpOwotCi0gICAgd29ya2VyLT5tX3NjcmlwdExvYWRlciA9IFdvcmtlclNj
cmlwdExvYWRlcjo6Y3JlYXRlKCk7Ci0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSAgICB3b3Jr
ZXItPm1fc2NyaXB0TG9hZGVyLT5zZXRUYXJnZXRUeXBlKFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0
SXNXb3JrZXIpOwotI2VuZGlmCi0gICAgd29ya2VyLT5tX3NjcmlwdExvYWRlci0+bG9hZEFzeW5j
aHJvbm91c2x5KGNvbnRleHQsIHNjcmlwdFVSTCwgRGVueUNyb3NzT3JpZ2luUmVxdWVzdHMsIHdv
cmtlci5nZXQoKSk7Ci0KLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZVdv
cmtlcihjb250ZXh0LCB3b3JrZXItPmFzSUQoKSwgc2NyaXB0VVJMLnN0cmluZygpLCBmYWxzZSk7
Ci0KLSAgICByZXR1cm4gd29ya2VyLnJlbGVhc2UoKTsKLX0KLQotV29ya2VyOjp+V29ya2VyKCkK
LXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOyAvLyBUaGUgY29udGV4dCBpcyBwcm90ZWN0ZWQgYnkgd29ya2VyIGNvbnRl
eHQgcHJveHksIHNvIGl0IGNhbm5vdCBiZSBkZXN0cm95ZWQgd2hpbGUgYSBXb3JrZXIgZXhpc3Rz
LgotICAgIG1fY29udGV4dFByb3h5LT53b3JrZXJPYmplY3REZXN0cm95ZWQoKTsKLX0KLQotY29u
c3QgQXRvbWljU3RyaW5nJiBXb3JrZXI6OmludGVyZmFjZU5hbWUoKSBjb25zdAotewotICAgIHJl
dHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV29ya2VyOwotfQotCi0vLyBGSVhNRTogcmVt
b3ZlIHRoaXMgd2hlbiB3ZSB1cGRhdGUgdGhlIE9iakMgYmluZGluZ3MgKGJ1ZyAjMjg3NzQpLgot
dm9pZCBXb3JrZXI6OnBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBtZXNzYWdlLCBNZXNzYWdlUG9ydCogcG9ydCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
TWVzc2FnZVBvcnRBcnJheSBwb3J0czsKLSAgICBpZiAocG9ydCkKLSAgICAgICAgcG9ydHMuYXBw
ZW5kKHBvcnQpOwotICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2UsICZwb3J0cywgZWMpOwotfQotCi12
b2lkIFdvcmtlcjo6cG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2Us
IHN0YXRpY19jYXN0PE1lc3NhZ2VQb3J0QXJyYXkqPigwKSwgZWMpOwotfQotCi12b2lkIFdvcmtl
cjo6cG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2Us
IGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkqIHBvcnRzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICAvLyBEaXNlbnRhbmdsZSB0aGUgcG9ydCBpbiBwcmVwYXJhdGlvbiBmb3Igc2VuZGluZyBpdCB0
byB0aGUgcmVtb3RlIGNvbnRleHQuCi0gICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5
PiBjaGFubmVscyA9IE1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZVBvcnRzKHBvcnRzLCBlYyk7Ci0g
ICAgaWYgKGVjKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0UHJveHktPnBvc3RNZXNz
YWdlVG9Xb3JrZXJDb250ZXh0KG1lc3NhZ2UsIGNoYW5uZWxzLnJlbGVhc2UoKSk7Ci19Ci0KLXZv
aWQgV29ya2VyOjp0ZXJtaW5hdGUoKQotewotICAgIG1fY29udGV4dFByb3h5LT50ZXJtaW5hdGVX
b3JrZXJDb250ZXh0KCk7Ci19Ci0KLWJvb2wgV29ya2VyOjpjYW5TdXNwZW5kKCkgY29uc3QKLXsK
LSAgICAvLyBGSVhNRTogSXQgaXMgbm90IGN1cnJlbnRseSBwb3NzaWJsZSB0byBzdXNwZW5kIGEg
d29ya2VyLCBzbyBwYWdlcyB3aXRoIHdvcmtlcnMgY2FuIG5vdCBnbyBpbnRvIHBhZ2UgY2FjaGUu
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdvcmtlcjo6c3RvcCgpCi17Ci0gICAgdGVy
bWluYXRlKCk7Ci19Ci0KLWJvb2wgV29ya2VyOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2NvbnRleHRQcm94eS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkgfHwgQWN0
aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKTsKLX0KLQotdm9pZCBXb3JrZXI6OmRp
ZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKQotewotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVNj
cmlwdFJlc3BvbnNlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgaWRlbnRpZmllcik7Ci19Ci0K
LXZvaWQgV29ya2VyOjpub3RpZnlGaW5pc2hlZCgpCi17Ci0gICAgaWYgKG1fc2NyaXB0TG9hZGVy
LT5mYWlsZWQoKSkKLSAgICAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5lcnJvckV2ZW50LCBmYWxzZSwgdHJ1ZSkpOwotICAgIGVsc2UgewotICAgICAgICBXb3Jr
ZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlID0gRG9udFBhdXNlV29ya2VyQ29udGV4dE9uU3Rh
cnQ7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNob3VsZFBhdXNlRGVk
aWNhdGVkV29ya2VyT25TdGFydChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKQotICAgICAgICAg
ICAgc3RhcnRNb2RlID0gUGF1c2VXb3JrZXJDb250ZXh0T25TdGFydDsKLSAgICAgICAgbV9jb250
ZXh0UHJveHktPnN0YXJ0V29ya2VyQ29udGV4dChtX3NjcmlwdExvYWRlci0+dXJsKCksIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+dXNlckFnZW50KG1fc2NyaXB0TG9hZGVyLT51cmwoKSksIG1f
c2NyaXB0TG9hZGVyLT5zY3JpcHQoKSwgc3RhcnRNb2RlKTsKLSAgICAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpzY3JpcHRJbXBvcnRlZChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1f
c2NyaXB0TG9hZGVyLT5pZGVudGlmaWVyKCksIG1fc2NyaXB0TG9hZGVyLT5zY3JpcHQoKSk7Ci0g
ICAgfQotICAgIG1fc2NyaXB0TG9hZGVyID0gbnVsbHB0cjsKLQotICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KHRoaXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjZWExYTY0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICov
Ci0KLSNpZm5kZWYgV29ya2VyX2gKLSNkZWZpbmUgV29ya2VyX2gKLQotI2lmIEVOQUJMRShXT1JL
RVJTKQotCi0jaW5jbHVkZSAiQWJzdHJhY3RXb3JrZXIuaCIKLSNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIK
LSNpbmNsdWRlICJXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0gICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICBjbGFz
cyBXb3JrZXJDb250ZXh0UHJveHk7Ci0gICAgY2xhc3MgV29ya2VyU2NyaXB0TG9hZGVyOwotCi0g
ICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotICAgIGNsYXNzIFdvcmtlciA6IHB1Ymxp
YyBBYnN0cmFjdFdvcmtlciwgcHJpdmF0ZSBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQgewotICAg
IHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyPiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgdXJsLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgICAgIHZpcnR1YWwgfldvcmtlcigpOwotCi0gICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBwb3N0TWVzc2Fn
ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBtZXNzYWdlLCBjb25zdCBNZXNzYWdlUG9ydEFycmF5KiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiB3ZSB1cGRhdGUgdGhlIE9iakMg
YmluZGluZ3MgKGJ1ZyAjMjg3NzQpLgotICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLCBNZXNzYWdlUG9ydCosIEV4Y2VwdGlv
bkNvZGUmKTsKLQotICAgICAgICB2b2lkIHRlcm1pbmF0ZSgpOwotCi0gICAgICAgIHZpcnR1YWwg
Ym9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKLSAgICAKLSAg
ICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihtZXNzYWdlKTsKLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIFdvcmtlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0KLSAgICAg
ICAgLy8gV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50IGNhbGxiYWNrcwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQo
KTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9Ci0KLSAg
ICAgICAgUmVmUHRyPFdvcmtlclNjcmlwdExvYWRlcj4gbV9zY3JpcHRMb2FkZXI7Ci0gICAgICAg
IFdvcmtlckNvbnRleHRQcm94eSogbV9jb250ZXh0UHJveHk7IC8vIFRoZSBwcm94eSBvdXRsaXZl
cyB0aGUgd29ya2VyIHRvIHBlcmZvcm0gdGhyZWFkIHNodXRkb3duLgotICAgIH07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi0jZW5kaWYg
Ly8gV29ya2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmlkbApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDgzMzUzYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlci5pZGwKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0g
Ki8KLQotbW9kdWxlIHRocmVhZHMgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0
aW9uYWw9V09SS0VSUywKLSAgICAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgICAgICBKU0N1c3Rv
bUNvbnN0cnVjdG9yLAotICAgICAgICBDb25zdHJ1Y3RvcihpbiBET01TdHJpbmcgc2NyaXB0VXJs
KSwKLSAgICAgICAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwKLSAgICAgICAgQ29u
c3RydWN0b3JSYWlzZXNFeGNlcHRpb24sCi0gICAgICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVj
dCwKLSAgICAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKLSAgICBdIFdvcmtlciA6IEFic3RyYWN0
V29ya2VyIHsKLQotICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7Ci0K
LSNpZiBkZWZpbmVkKExBTkdVQUdFX0pBVkFTQ1JJUFQpICYmIExBTkdVQUdFX0pBVkFTQ1JJUFQK
LSAgICAgICAgW0N1c3RvbV0gdm9pZCBwb3N0TWVzc2FnZShpbiBTZXJpYWxpemVkU2NyaXB0VmFs
dWUgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBBcnJheSBtZXNzYWdlUG9ydHMpCi0gICAgICAgICAg
ICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB3ZWJraXRQb3N0
TWVzc2FnZShpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBB
cnJheSBtZXNzYWdlUG9ydHMpCi0gICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSNl
bHNlCi0gICAgICAgIC8vIFRoZXJlJ3Mgbm8gZ29vZCB3YXkgdG8gZXhwb3NlIGFuIGFycmF5IHZp
YSB0aGUgT2JqQyBiaW5kaW5ncywgc28gZm9yIG5vdyBqdXN0IGFsbG93IHBhc3NpbmcgaW4gYSBz
aW5nbGUgcG9ydC4KLSAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShpbiBTZXJpYWxpemVkU2NyaXB0
VmFsdWUgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBNZXNzYWdlUG9ydCBtZXNzYWdlUG9ydCkKLSAg
ICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwotI2VuZGlmCi0KLSAgICAgICAgdm9pZCB0
ZXJtaW5hdGUoKTsKLSAgICB9OwotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwYzE0Ny4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2ds
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIK
LQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0
eVBvbGljeS5oIgotI2luY2x1ZGUgIkRPTVRpbWVyLmgiCi0jaW5jbHVkZSAiRE9NVVJMLmgiCi0j
aW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRXJyb3JFdmVudC5oIgotI2luY2x1ZGUg
IkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJbnNwZWN0
b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUg
Ik1lc3NhZ2VQb3J0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJT
Y2hlZHVsZWRBY3Rpb24uaCIKLSNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKLSNpbmNsdWRl
ICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIldvcmtlckluc3BlY3RvckNvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJXb3JrZXJMb2NhdGlvbi5oIgotI2luY2x1ZGUgIldvcmtlck5hdmlnYXRv
ci5oIgotI2luY2x1ZGUgIldvcmtlck9iamVjdFByb3h5LmgiCi0jaW5jbHVkZSAiV29ya2VyU2Ny
aXB0TG9hZGVyLmgiCi0jaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCi0jaW5jbHVkZSAiV29ya2Vy
VGhyZWFkYWJsZUxvYWRlci5oIgotI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmgi
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgot
Ci0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9O
UykKLSNpbmNsdWRlICJOb3RpZmljYXRpb25DZW50ZXIuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENsb3NlV29y
a2VyQ29udGV4dFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q2xvc2VXb3JrZXJDb250ZXh0VGFzaz4gY3Jl
YXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ2xvc2VXb3JrZXJDb250
ZXh0VGFzayk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgKmNvbnRleHQpCi0gICAgewotICAgICAgICBBU1NFUlQoY29udGV4dC0+
aXNXb3JrZXJDb250ZXh0KCkpOwotICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0
ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOwotICAgICAgICAvLyBOb3Rp
ZnkgcGFyZW50IHRoYXQgdGhpcyBjb250ZXh0IGlzIGNsb3NlZC4gUGFyZW50IGlzIHJlc3BvbnNp
YmxlIGZvciBjYWxsaW5nIFdvcmtlclRocmVhZDo6c3RvcCgpLgotICAgICAgICB3b3JrZXJDb250
ZXh0LT50aHJlYWQoKS0+d29ya2VyUmVwb3J0aW5nUHJveHkoKS53b3JrZXJDb250ZXh0Q2xvc2Vk
KCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIGlzQ2xlYW51cFRhc2soKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9Ci19OwotCi1Xb3JrZXJDb250ZXh0OjpXb3JrZXJDb250ZXh0KGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIFdvcmtlclRocmVhZCogdGhyZWFkLCBj
b25zdCBTdHJpbmcmIHBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlIGNv
bnRlbnRTZWN1cml0eVBvbGljeVR5cGUpCi0gICAgOiBtX3VybCh1cmwpCi0gICAgLCBtX3VzZXJB
Z2VudCh1c2VyQWdlbnQpCi0gICAgLCBtX3NjcmlwdChhZG9wdFB0cihuZXcgV29ya2VyU2NyaXB0
Q29udHJvbGxlcih0aGlzKSkpCi0gICAgLCBtX3RocmVhZCh0aHJlYWQpCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUikKLSAgICAsIG1fd29ya2VySW5zcGVjdG9yQ29udHJvbGxlcihhZG9wdFB0cihuZXcg
V29ya2VySW5zcGVjdG9yQ29udHJvbGxlcih0aGlzKSkpCi0jZW5kaWYKLSAgICAsIG1fY2xvc2lu
ZyhmYWxzZSkKLSAgICAsIG1fZXZlbnRRdWV1ZShXb3JrZXJFdmVudFF1ZXVlOjpjcmVhdGUodGhp
cykpCi17Ci0gICAgc2V0U2VjdXJpdHlPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwp
KTsKLSAgICBzZXRDb250ZW50U2VjdXJpdHlQb2xpY3koQ29udGVudFNlY3VyaXR5UG9saWN5Ojpj
cmVhdGUodGhpcykpOwotICAgIGNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5kaWRSZWNlaXZlSGVh
ZGVyKHBvbGljeSwgY29udGVudFNlY3VyaXR5UG9saWN5VHlwZSk7Ci19Ci0KLVdvcmtlckNvbnRl
eHQ6On5Xb3JrZXJDb250ZXh0KCkKLXsKLSAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IHRo
cmVhZCgpLT50aHJlYWRJRCgpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIG5vIG9ic2Vy
dmVycy4KLSAgICBub3RpZnlPYnNlcnZlcnNPZlN0b3AoKTsKLQotICAgIC8vIE5vdGlmeSBwcm94
eSB0aGF0IHdlIGFyZSBnb2luZyBhd2F5LiBUaGlzIGNhbiBmcmVlIHRoZSBXb3JrZXJUaHJlYWQg
b2JqZWN0LCBzbyBkbyBub3QgYWNjZXNzIGl0IGFmdGVyIHRoaXMuCi0gICAgdGhyZWFkKCktPndv
cmtlclJlcG9ydGluZ1Byb3h5KCkud29ya2VyQ29udGV4dERlc3Ryb3llZCgpOwotfQotCi1TY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBXb3JrZXJDb250ZXh0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxXb3JrZXJDb250ZXh0Kj4odGhpcyk7
Ci19Ci0KLWNvbnN0IEtVUkwmIFdvcmtlckNvbnRleHQ6OnZpcnR1YWxVUkwoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3VybDsKLX0KLQotS1VSTCBXb3JrZXJDb250ZXh0Ojp2aXJ0dWFsQ29tcGxl
dGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbXBsZXRlVVJM
KHVybCk7Ci19Ci0KLUtVUkwgV29ya2VyQ29udGV4dDo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5n
JiB1cmwpIGNvbnN0Ci17Ci0gICAgLy8gQWx3YXlzIHJldHVybiBhIG51bGwgVVJMIHdoZW4gcGFz
c2VkIGEgbnVsbCBzdHJpbmcuCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjaGFuZ2UgdGhlIEtV
UkwgY29uc3RydWN0b3IgdG8gaGF2ZSB0aGlzIGJlaGF2aW9yPwotICAgIGlmICh1cmwuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBLVVJMKCk7Ci0gICAgLy8gQWx3YXlzIHVzZSBVVEYtOCBpbiBX
b3JrZXJzLgotICAgIHJldHVybiBLVVJMKG1fdXJsLCB1cmwpOwotfQotCi1TdHJpbmcgV29ya2Vy
Q29udGV4dDo6dXNlckFnZW50KGNvbnN0IEtVUkwmKSBjb25zdAotewotICAgIHJldHVybiBtX3Vz
ZXJBZ2VudDsKLX0KLQotdm9pZCBXb3JrZXJDb250ZXh0OjpkaXNhYmxlRXZhbCgpCi17Ci0gICAg
bV9zY3JpcHQtPmRpc2FibGVFdmFsKCk7Ci19Ci0KLVdvcmtlckxvY2F0aW9uKiBXb3JrZXJDb250
ZXh0Ojpsb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2xvY2F0aW9uKQotICAgICAgICBt
X2xvY2F0aW9uID0gV29ya2VyTG9jYXRpb246OmNyZWF0ZShtX3VybCk7Ci0gICAgcmV0dXJuIG1f
bG9jYXRpb24uZ2V0KCk7Ci19Ci0KLXZvaWQgV29ya2VyQ29udGV4dDo6Y2xvc2UoKQotewotICAg
IGlmIChtX2Nsb3NpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIExldCBjdXJyZW50IHNj
cmlwdCBydW4gdG8gY29tcGxldGlvbiBidXQgcHJldmVudCBmdXR1cmUgc2NyaXB0IGV2YWx1YXRp
b25zLgotICAgIC8vIEFmdGVyIG1fY2xvc2luZyBpcyBzZXQsIGFsbCB0aGUgdGFza3MgaW4gdGhl
IHF1ZXVlIGNvbnRpbnVlIHRvIGJlIGZldGNoZWQgYnV0IG9ubHkKLSAgICAvLyB0YXNrcyB3aXRo
IGlzQ2xlYW51cFRhc2soKT09dHJ1ZSB3aWxsIGJlIGV4ZWN1dGVkLgotICAgIG1fY2xvc2luZyA9
IHRydWU7Ci0gICAgcG9zdFRhc2soQ2xvc2VXb3JrZXJDb250ZXh0VGFzazo6Y3JlYXRlKCkpOwot
fQotCi1Xb3JrZXJOYXZpZ2F0b3IqIFdvcmtlckNvbnRleHQ6Om5hdmlnYXRvcigpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX25hdmlnYXRvcikKLSAgICAgICAgbV9uYXZpZ2F0b3IgPSBXb3JrZXJOYXZp
Z2F0b3I6OmNyZWF0ZShtX3VzZXJBZ2VudCk7Ci0gICAgcmV0dXJuIG1fbmF2aWdhdG9yLmdldCgp
OwotfQotCi1ib29sIFdvcmtlckNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17
Ci0gICAgQWN0aXZlRE9NT2JqZWN0c01hcCYgYWN0aXZlT2JqZWN0cyA9IGFjdGl2ZURPTU9iamVj
dHMoKTsKLSAgICBBY3RpdmVET01PYmplY3RzTWFwOjpjb25zdF9pdGVyYXRvciBhY3RpdmVPYmpl
Y3RzRW5kID0gYWN0aXZlT2JqZWN0cy5lbmQoKTsKLSAgICBmb3IgKEFjdGl2ZURPTU9iamVjdHNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhY3RpdmVPYmplY3RzLmJlZ2luKCk7IGl0ZXIgIT0g
YWN0aXZlT2JqZWN0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLT5maXJzdC0+aGFz
UGVuZGluZ0FjdGl2aXR5KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46OmNvbnN0X2l0ZXJhdG9yIG1lc3NhZ2VQb3J0c0VuZCA9
IG1lc3NhZ2VQb3J0cygpLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxNZXNzYWdlUG9ydCo+Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gbWVzc2FnZVBvcnRzKCkuYmVnaW4oKTsgaXRlciAhPSBtZXNz
YWdlUG9ydHNFbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVyKS0+aGFzUGVuZGluZ0Fj
dGl2aXR5KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgV29ya2VyQ29udGV4dDo6cG9zdFRhc2soUGFzc093blB0cjxUYXNr
PiB0YXNrKQotewotICAgIHRocmVhZCgpLT5ydW5Mb29wKCkucG9zdFRhc2sodGFzayk7Ci19Ci0K
LWludCBXb3JrZXJDb250ZXh0OjpzZXRUaW1lb3V0KFBhc3NPd25QdHI8U2NoZWR1bGVkQWN0aW9u
PiBhY3Rpb24sIGludCB0aW1lb3V0KQotewotICAgIHJldHVybiBET01UaW1lcjo6aW5zdGFsbChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGFjdGlvbiwgdGltZW91dCwgdHJ1ZSk7Ci19Ci0KLXZv
aWQgV29ya2VyQ29udGV4dDo6Y2xlYXJUaW1lb3V0KGludCB0aW1lb3V0SWQpCi17Ci0gICAgRE9N
VGltZXI6OnJlbW92ZUJ5SWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aW1lb3V0SWQpOwot
fQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLXZvaWQgV29ya2VyQ29udGV4dDo6Y2xlYXJJbnNw
ZWN0b3IoKQotewotICAgIG1fd29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5jbGVhcigpOwotfQot
I2VuZGlmCi0KLWludCBXb3JrZXJDb250ZXh0OjpzZXRJbnRlcnZhbChQYXNzT3duUHRyPFNjaGVk
dWxlZEFjdGlvbj4gYWN0aW9uLCBpbnQgdGltZW91dCkKLXsKLSAgICByZXR1cm4gRE9NVGltZXI6
Omluc3RhbGwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBhY3Rpb24sIHRpbWVvdXQsIGZhbHNl
KTsKLX0KLQotdm9pZCBXb3JrZXJDb250ZXh0OjpjbGVhckludGVydmFsKGludCB0aW1lb3V0SWQp
Ci17Ci0gICAgRE9NVGltZXI6OnJlbW92ZUJ5SWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0
aW1lb3V0SWQpOwotfQotCi12b2lkIFdvcmtlckNvbnRleHQ6OmltcG9ydFNjcmlwdHMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHVybHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsK
LSAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgdXJsc0VuZCA9IHVybHMuZW5kKCk7
Ci0gICAgVmVjdG9yPEtVUkw+IGNvbXBsZXRlZFVSTHM7Ci0gICAgZm9yIChWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB1cmxzLmJlZ2luKCk7IGl0ICE9IHVybHNFbmQ7ICsraXQp
IHsKLSAgICAgICAgY29uc3QgS1VSTCYgdXJsID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5j
b21wbGV0ZVVSTCgqaXQpOwotICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
ICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBjb21wbGV0ZWRVUkxzLmFwcGVuZCh1cmwpOwotICAgIH0KLSAgICBWZWN0b3I8S1VSTD46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNvbXBsZXRlZFVSTHMuZW5kKCk7Ci0KLSAgICBmb3IgKFZl
Y3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjb21wbGV0ZWRVUkxzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8V29ya2VyU2NyaXB0TG9hZGVyPiBzY3Jp
cHRMb2FkZXIoV29ya2VyU2NyaXB0TG9hZGVyOjpjcmVhdGUoKSk7Ci0jaWYgUExBVEZPUk0oQ0hS
T01JVU0pIHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0gICAgICAgIHNjcmlwdExvYWRlci0+c2V0
VGFyZ2V0VHlwZShSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldElzU2NyaXB0KTsKLSNlbmRpZgotICAg
ICAgICBzY3JpcHRMb2FkZXItPmxvYWRTeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSwgKml0LCBBbGxvd0Nyb3NzT3JpZ2luUmVxdWVzdHMpOwotCi0gICAgICAgIC8vIElmIHRo
ZSBmZXRjaGluZyBhdHRlbXB0IGZhaWxlZCwgdGhyb3cgYSBORVRXT1JLX0VSUiBleGNlcHRpb24g
YW5kIGFib3J0IGFsbCB0aGVzZSBzdGVwcy4KLSAgICAgICAgaWYgKHNjcmlwdExvYWRlci0+ZmFp
bGVkKCkpIHsKLSAgICAgICAgICAgIGVjID0gWE1MSHR0cFJlcXVlc3RFeGNlcHRpb246Ok5FVFdP
UktfRVJSOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpzY3JpcHRJbXBvcnRlZChzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCksIHNjcmlwdExvYWRlci0+aWRlbnRpZmllcigpLCBzY3JpcHRMb2FkZXItPnNjcmlwdCgpKTsK
LQotICAgICAgICBTY3JpcHRWYWx1ZSBleGNlcHRpb247Ci0gICAgICAgIG1fc2NyaXB0LT5ldmFs
dWF0ZShTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdExvYWRlci0+c2NyaXB0KCksIHNjcmlwdExvYWRl
ci0+cmVzcG9uc2VVUkwoKSksICZleGNlcHRpb24pOwotICAgICAgICBpZiAoIWV4Y2VwdGlvbi5o
YXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIG1fc2NyaXB0LT5zZXRFeGNlcHRpb24oZXhjZXB0
aW9uKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotRXZlbnRU
YXJnZXQqIFdvcmtlckNvbnRleHQ6OmVycm9yRXZlbnRUYXJnZXQoKQotewotICAgIHJldHVybiB0
aGlzOwotfQotCi12b2lkIFdvcmtlckNvbnRleHQ6OmxvZ0V4Y2VwdGlvblRvQ29uc29sZShjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5l
TnVtYmVyLCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4pCi17Ci0gICAgdGhyZWFkKCktPndv
cmtlclJlcG9ydGluZ1Byb3h5KCkucG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGVycm9yTWVz
c2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKLX0KLQotdm9pZCBXb3JrZXJDb250ZXh0Ojph
ZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdl
TGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxs
U3RhY2spCi17Ci0gICAgaWYgKCFpc0NvbnRleHRUaHJlYWQoKSkgewotICAgICAgICBwb3N0VGFz
ayhBZGRDb25zb2xlTWVzc2FnZVRhc2s6OmNyZWF0ZShzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNz
YWdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdGhyZWFkKCktPndvcmtlclJlcG9y
dGluZ1Byb3h5KCkucG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3Qoc291cmNlLCB0eXBl
LCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKLSAgICBhZGRNZXNzYWdl
VG9Xb3JrZXJDb25zb2xlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIHNvdXJjZVVSTCwg
bGluZU51bWJlciwgY2FsbFN0YWNrKTsKLX0KLQotdm9pZCBXb3JrZXJDb250ZXh0OjphZGRNZXNz
YWdlVG9Xb3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBl
LCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0
YWNrPiBjYWxsU3RhY2spCi17Ci0gICAgQVNTRVJUKGlzQ29udGV4dFRocmVhZCgpKTsKLSAgICBp
ZiAoY2FsbFN0YWNrKQotICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZE1lc3Nh
Z2VUb0NvbnNvbGUodGhpcywgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgMCwgY2FsbFN0
YWNrKTsKLSAgICBlbHNlCi0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkTWVz
c2FnZVRvQ29uc29sZSh0aGlzLCBzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdlLCBzb3VyY2VV
UkwsIGxpbmVOdW1iZXIpOwotfQotCi1ib29sIFdvcmtlckNvbnRleHQ6OmlzQ29udGV4dFRocmVh
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSB0aHJlYWQoKS0+dGhy
ZWFkSUQoKTsKLX0KLQotYm9vbCBXb3JrZXJDb250ZXh0Ojppc0pTRXhlY3V0aW9uRm9yYmlkZGVu
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zY3JpcHQtPmlzRXhlY3V0aW9uRm9yYmlkZGVuKCk7
Ci19Ci0KLUV2ZW50VGFyZ2V0RGF0YSogV29ya2VyQ29udGV4dDo6ZXZlbnRUYXJnZXREYXRhKCkK
LXsKLSAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwotfQotCi1FdmVudFRhcmdldERhdGEq
IFdvcmtlckNvbnRleHQ6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCi17Ci0gICAgcmV0dXJuICZt
X2V2ZW50VGFyZ2V0RGF0YTsKLX0KLQotV29ya2VyQ29udGV4dDo6T2JzZXJ2ZXI6Ok9ic2VydmVy
KFdvcmtlckNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLXsKLSAg
ICBBU1NFUlQobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwotICAg
IG1fY29udGV4dC0+cmVnaXN0ZXJPYnNlcnZlcih0aGlzKTsKLX0KLQotV29ya2VyQ29udGV4dDo6
T2JzZXJ2ZXI6On5PYnNlcnZlcigpCi17Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJl
dHVybjsKLSAgICBBU1NFUlQobV9jb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgbV9j
b250ZXh0LT51bnJlZ2lzdGVyT2JzZXJ2ZXIodGhpcyk7Ci19Ci0KLXZvaWQgV29ya2VyQ29udGV4
dDo6T2JzZXJ2ZXI6OnN0b3BPYnNlcnZpbmcoKQotewotICAgIGlmICghbV9jb250ZXh0KQotICAg
ICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOwot
ICAgIG1fY29udGV4dC0+dW5yZWdpc3Rlck9ic2VydmVyKHRoaXMpOwotICAgIG1fY29udGV4dCA9
IDA7Ci19Ci0KLXZvaWQgV29ya2VyQ29udGV4dDo6cmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciog
b2JzZXJ2ZXIpCi17Ci0gICAgQVNTRVJUKG9ic2VydmVyKTsKLSAgICBtX3dvcmtlck9ic2VydmVy
cy5hZGQob2JzZXJ2ZXIpOwotfQotCi12b2lkIFdvcmtlckNvbnRleHQ6OnVucmVnaXN0ZXJPYnNl
cnZlcihPYnNlcnZlciogb2JzZXJ2ZXIpCi17Ci0gICAgQVNTRVJUKG9ic2VydmVyKTsKLSAgICBt
X3dvcmtlck9ic2VydmVycy5yZW1vdmUob2JzZXJ2ZXIpOwotfQotCi12b2lkIFdvcmtlckNvbnRl
eHQ6Om5vdGlmeU9ic2VydmVyc09mU3RvcCgpCi17Ci0gICAgSGFzaFNldDxPYnNlcnZlcio+Ojpp
dGVyYXRvciBpdGVyID0gbV93b3JrZXJPYnNlcnZlcnMuYmVnaW4oKTsKLSAgICB3aGlsZSAoaXRl
ciAhPSBtX3dvcmtlck9ic2VydmVycy5lbmQoKSkgewotICAgICAgICBXb3JrZXJDb250ZXh0OjpP
YnNlcnZlciogb2JzZXJ2ZXIgPSAqaXRlcjsKLSAgICAgICAgb2JzZXJ2ZXItPnN0b3BPYnNlcnZp
bmcoKTsKLSAgICAgICAgb2JzZXJ2ZXItPm5vdGlmeVN0b3AoKTsKLSAgICAgICAgaXRlciA9IG1f
d29ya2VyT2JzZXJ2ZXJzLmJlZ2luKCk7Ci0gICAgfQotfQotCi1Xb3JrZXJFdmVudFF1ZXVlKiBX
b3JrZXJDb250ZXh0OjpldmVudFF1ZXVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ldmVudFF1
ZXVlLmdldCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29u
dGV4dC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMmY2YTEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKgotICovCi0KLSNpZm5kZWYgV29ya2VyQ29udGV4dF9oCi0jZGVmaW5lIFdv
cmtlckNvbnRleHRfaAotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJDb250ZW50
U2VjdXJpdHlQb2xpY3kuaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIldvcmtlckV2ZW50UXVldWUuaCIKLSNpbmNs
dWRlICJXb3JrZXJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hh
c2guaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgQmxvYjsKLSAgICBjbGFz
cyBET01VUkw7Ci0gICAgY2xhc3MgU2NoZWR1bGVkQWN0aW9uOwotICAgIGNsYXNzIFdvcmtlcklu
c3BlY3RvckNvbnRyb2xsZXI7Ci0gICAgY2xhc3MgV29ya2VyTG9jYXRpb247Ci0gICAgY2xhc3Mg
V29ya2VyTmF2aWdhdG9yOwotICAgIGNsYXNzIFdvcmtlclRocmVhZDsKLQotICAgIGNsYXNzIFdv
cmtlckNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJDb250ZXh0PiwgcHVibGljIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIHB1YmxpYyBFdmVudFRhcmdldCB7Ci0gICAgcHVibGljOgot
ICAgICAgICB2aXJ0dWFsIH5Xb3JrZXJDb250ZXh0KCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29s
IGlzV29ya2VyQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAgICB2aXJ0
dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dDsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaGFyZWRXb3JrZXJDb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGlzRGVkaWNhdGVkV29ya2Vy
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAgICAgY29uc3QgS1VSTCYg
dXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KLSAgICAgICAgS1VSTCBjb21wbGV0ZVVSTChj
b25zdCBTdHJpbmcmKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQo
Y29uc3QgS1VSTCYpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlRXZhbCgp
OwotCi0gICAgICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCgpIHsgcmV0dXJuIG1f
c2NyaXB0LmdldCgpOyB9Ci0gICAgICAgIHZvaWQgY2xlYXJTY3JpcHQoKSB7IG1fc2NyaXB0LmNs
ZWFyKCk7IH0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICB2b2lkIGNsZWFySW5zcGVj
dG9yKCk7Ci0jZW5kaWYKLQotICAgICAgICBXb3JrZXJUaHJlYWQqIHRocmVhZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGhyZWFkOyB9Ci0KLSAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBj
b25zdDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2soUGFzc093blB0cjxUYXNrPik7
IC8vIEV4ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRleHQncyB0aHJlYWQgYXN5bmNocm9ub3VzbHku
Ci0KLSAgICAgICAgLy8gV29ya2VyR2xvYmFsU2NvcGUKLSAgICAgICAgV29ya2VyQ29udGV4dCog
c2VsZigpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICAgICAgV29ya2VyTG9jYXRpb24qIGxvY2F0aW9u
KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgY2xvc2UoKTsKLQotICAgICAgICBERUZJTkVfQVRUUklC
VVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKLQotICAgICAgICAvLyBXb3JrZXJVdGlscwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgaW1wb3J0U2NyaXB0cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgdXJs
cywgRXhjZXB0aW9uQ29kZSYpOwotICAgICAgICBXb3JrZXJOYXZpZ2F0b3IqIG5hdmlnYXRvcigp
IGNvbnN0OwotCi0gICAgICAgIC8vIFRpbWVycwotICAgICAgICBpbnQgc2V0VGltZW91dChQYXNz
T3duUHRyPFNjaGVkdWxlZEFjdGlvbj4sIGludCB0aW1lb3V0KTsKLSAgICAgICAgdm9pZCBjbGVh
clRpbWVvdXQoaW50IHRpbWVvdXRJZCk7Ci0gICAgICAgIGludCBzZXRJbnRlcnZhbChQYXNzT3du
UHRyPFNjaGVkdWxlZEFjdGlvbj4sIGludCB0aW1lb3V0KTsKLSAgICAgICAgdm9pZCBjbGVhcklu
dGVydmFsKGludCB0aW1lb3V0SWQpOwotCi0gICAgICAgIC8vIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQKLSAgICAgICAgdmlydHVhbCBXb3JrZXJFdmVudFF1ZXVlKiBldmVudFF1ZXVlKCkgY29uc3Q7
Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGlzQ29udGV4dFRocmVhZCgpIGNvbnN0OwotICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNKU0V4ZWN1dGlvbkZvcmJpZGRlbigpIGNvbnN0OwotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUikKLSAgICAgICAgV29ya2VySW5zcGVjdG9yQ29udHJvbGxlciogd29ya2Vy
SW5zcGVjdG9yQ29udHJvbGxlcigpIHsgcmV0dXJuIG1fd29ya2VySW5zcGVjdG9yQ29udHJvbGxl
ci5nZXQoKTsgfQotI2VuZGlmCi0gICAgICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgZm9y
IEdDIG1hcmtpbmcuIFNlZSBKU1dvcmtlckNvbnRleHQ6OnZpc2l0Q2hpbGRyZW5WaXJ0dWFsKFNs
b3RWaXNpdG9yJikgaW4KLSAgICAgICAgLy8gSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcC4KLSAg
ICAgICAgV29ya2VyTmF2aWdhdG9yKiBvcHRpb25hbE5hdmlnYXRvcigpIGNvbnN0IHsgcmV0dXJu
IG1fbmF2aWdhdG9yLmdldCgpOyB9Ci0gICAgICAgIFdvcmtlckxvY2F0aW9uKiBvcHRpb25hbExv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi5nZXQoKTsgfQotCi0gICAgICAgIHVz
aW5nIFJlZkNvdW50ZWQ8V29ya2VyQ29udGV4dD46OnJlZjsKLSAgICAgICAgdXNpbmcgUmVmQ291
bnRlZDxXb3JrZXJDb250ZXh0Pjo6ZGVyZWY7Ci0KLSAgICAgICAgYm9vbCBpc0Nsb3NpbmcoKSB7
IHJldHVybiBtX2Nsb3Npbmc7IH0KLQotICAgICAgICAvLyBBbiBvYnNlcnZlciBpbnRlcmZhY2Ug
dG8gYmUgbm90aWZpZWQgd2hlbiB0aGUgd29ya2VyIHRocmVhZCBpcyBnZXR0aW5nIHN0b3BwZWQu
Ci0gICAgICAgIGNsYXNzIE9ic2VydmVyIHsKLSAgICAgICAgICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKE9ic2VydmVyKTsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgT2JzZXJ2ZXIoV29y
a2VyQ29udGV4dCopOwotICAgICAgICAgICAgdmlydHVhbCB+T2JzZXJ2ZXIoKTsKLSAgICAgICAg
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTdG9wKCkgPSAwOwotICAgICAgICAgICAgdm9pZCBzdG9w
T2JzZXJ2aW5nKCk7Ci0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBXb3JrZXJDb250ZXh0
KiBtX2NvbnRleHQ7Ci0gICAgICAgIH07Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBPYnNlcnZlcjsK
LSAgICAgICAgdm9pZCByZWdpc3Rlck9ic2VydmVyKE9ic2VydmVyKik7Ci0gICAgICAgIHZvaWQg
dW5yZWdpc3Rlck9ic2VydmVyKE9ic2VydmVyKik7Ci0gICAgICAgIHZvaWQgbm90aWZ5T2JzZXJ2
ZXJzT2ZTdG9wKCk7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFdvcmtlckNvbnRleHQoY29u
c3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIFdvcmtlclRocmVhZCosIGNvbnN0IFN0cmluZyYgY29u
dGVudFNlY3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUpOwot
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBsb2dFeGNlcHRpb25Ub0NvbnNvbGUoY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlciwg
UGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+KTsKLSAgICAgICAgdm9pZCBhZGRNZXNzYWdlVG9X
b3JrZXJDb25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPik7Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHsgcmVmKCk7
IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHsg
ZGVyZWYoKTsgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVm
KCk7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7
IH0KLSAgICAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwot
ICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7
Ci0KLSAgICAgICAgdmlydHVhbCBjb25zdCBLVVJMJiB2aXJ0dWFsVVJMKCkgY29uc3Q7Ci0gICAg
ICAgIHZpcnR1YWwgS1VSTCB2aXJ0dWFsQ29tcGxldGVVUkwoY29uc3QgU3RyaW5nJikgY29uc3Q7
Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2Fn
ZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlciwgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+KTsKLQotICAgICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0KiBlcnJvckV2ZW50VGFyZ2V0KCk7
Ci0KLSAgICAgICAgS1VSTCBtX3VybDsKLSAgICAgICAgU3RyaW5nIG1fdXNlckFnZW50OwotCi0g
ICAgICAgIG11dGFibGUgUmVmUHRyPFdvcmtlckxvY2F0aW9uPiBtX2xvY2F0aW9uOwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxXb3JrZXJOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOwotCi0gICAgICAg
IE93blB0cjxXb3JrZXJTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKLSAgICAgICAgV29ya2Vy
VGhyZWFkKiBtX3RocmVhZDsKLQotI2lmIEVOQUJMRShCTE9CKQotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxET01VUkw+IG1fZG9tVVJMOwotI2VuZGlmCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAg
ICAgICAgT3duUHRyPFdvcmtlckluc3BlY3RvckNvbnRyb2xsZXI+IG1fd29ya2VySW5zcGVjdG9y
Q29udHJvbGxlcjsKLSNlbmRpZgotICAgICAgICBib29sIG1fY2xvc2luZzsKLSAgICAgICAgRXZl
bnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwotCi0gICAgICAgIEhhc2hTZXQ8T2JzZXJ2
ZXIqPiBtX3dvcmtlck9ic2VydmVyczsKLQotICAgICAgICBPd25QdHI8V29ya2VyRXZlbnRRdWV1
ZT4gbV9ldmVudFF1ZXVlOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi0jZW5kaWYgLy8gV29ya2VyQ29udGV4dF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsIGIvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjVhNjRmZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckNvbnRleHQuaWRsCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0g
Ki8KLQotbW9kdWxlIHRocmVhZHMgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0
aW9uYWw9V09SS0VSUywKLSAgICAgICAgSlNDdXN0b21NYXJrRnVuY3Rpb24sCi0gICAgICAgIEpT
Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKLSAgICAgICAgRXZlbnRUYXJn
ZXQsCi0gICAgICAgIEV4dGVuZHNET01HbG9iYWxPYmplY3QsCi0gICAgICAgIElzV29ya2VyQ29u
dGV4dCwKLSAgICAgICAgSlNMZWdhY3lQYXJlbnQ9SlNXb3JrZXJDb250ZXh0QmFzZSwKLSAgICAg
ICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICAgICAgT21pdENvbnN0cnVjdG9yLAotICAgICAgICBW
OEN1c3RvbVRvSlNPYmplY3QKLSAgICBdIFdvcmtlckNvbnRleHQgewotCi0gICAgICAgIC8vIFdv
cmtlckdsb2JhbFNjb3BlCi0jaWYgZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5H
VUFHRV9KQVZBU0NSSVBUCi0gICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbUmVwbGFjZWFibGVd
IFdvcmtlckNvbnRleHQgc2VsZjsKLSNlbmRpZgotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUg
W1JlcGxhY2VhYmxlXSBXb3JrZXJMb2NhdGlvbiBsb2NhdGlvbjsKLSAgICAgICAgdm9pZCBjbG9z
ZSgpOwotICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOwot
Ci0gICAgICAgIC8vIFdvcmtlclV0aWxzCi0gICAgICAgIFtDdXN0b21dIHZvaWQgaW1wb3J0U2Ny
aXB0cygvKltWYXJpYWRpY10gaW4gRE9NU3RyaW5nIHVybHMgKi8pOwotICAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBXb3JrZXJOYXZpZ2F0b3IgbmF2aWdhdG9yOwotCi0g
ICAgICAgIC8vIFRpbWVycwotICAgICAgICBbQ3VzdG9tXSBsb25nIHNldFRpbWVvdXQoaW4gVGlt
ZW91dEhhbmRsZXIgaGFuZGxlciwgaW4gbG9uZyB0aW1lb3V0KTsKLSAgICAgICAgLy8gW0N1c3Rv
bV0gbG9uZyBzZXRUaW1lb3V0KGluIERPTVN0cmluZyBjb2RlLCBpbiBsb25nIHRpbWVvdXQpOwot
ICAgICAgICB2b2lkIGNsZWFyVGltZW91dChpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVk
XSBsb25nIGhhbmRsZSk7Ci0gICAgICAgIFtDdXN0b21dIGxvbmcgc2V0SW50ZXJ2YWwoaW4gVGlt
ZW91dEhhbmRsZXIgaGFuZGxlciwgaW4gbG9uZyB0aW1lb3V0KTsKLSAgICAgICAgLy8gW0N1c3Rv
bV0gbG9uZyBzZXRJbnRlcnZhbChpbiBET01TdHJpbmcgY29kZSwgaW4gbG9uZyB0aW1lb3V0KTsK
LSAgICAgICAgdm9pZCBjbGVhckludGVydmFsKGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmlu
ZWRdIGxvbmcgaGFuZGxlKTsKLQotCi0gICAgICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQot
ICAgICAgICB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gdXNlQ2FwdHVy
ZSk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlwZSwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3Rl
bmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gYm9v
bGVhbiB1c2VDYXB0dXJlKTsKLSAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50
IGV2dCkKLSAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7Ci0KLSNpZiAhZGVmaW5l
ZChMQU5HVUFHRV9DUFApIHx8ICFMQU5HVUFHRV9DUFAKLSAgICAgICAgLy8gQ29uc3RydWN0b3Jz
Ci0gICAgICAgIGF0dHJpYnV0ZSBNZXNzYWdlRXZlbnRDb25zdHJ1Y3RvciBNZXNzYWdlRXZlbnQ7
Ci0gICAgICAgIGF0dHJpYnV0ZSBXb3JrZXJMb2NhdGlvbkNvbnN0cnVjdG9yIFdvcmtlckxvY2F0
aW9uOwotCi0jaWYgRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HCi0gICAgICAgIGF0dHJpYnV0ZSBb
SlNDdXN0b21HZXR0ZXJdIE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IgTWVzc2FnZUNoYW5uZWw7
Ci0jZW5kaWYKLSAgICAgICAgYXR0cmlidXRlIFtKU0N1c3RvbUdldHRlcl0gRXZlbnRTb3VyY2VD
b25zdHJ1Y3RvciBFdmVudFNvdXJjZTsKLSAgICAgICAgYXR0cmlidXRlIFtKU0N1c3RvbUdldHRl
cl0gWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvciBYTUxIdHRwUmVxdWVzdDsKLSNlbmRpZgotCi0j
aWYgZGVmaW5lZChFTkFCTEVfQkxPQikgJiYgRU5BQkxFX0JMT0IKLSAgICAgICAgYXR0cmlidXRl
IFtDb25kaXRpb25hbD1MRUdBQ1lfV0VCS0lUX0JMT0JfQlVJTERFUl0gV2ViS2l0QmxvYkJ1aWxk
ZXJDb25zdHJ1Y3RvciBXZWJLaXRCbG9iQnVpbGRlcjsKLSAgICAgICAgYXR0cmlidXRlIEJsb2JD
b25zdHJ1Y3RvciBCbG9iOwotICAgICAgICBhdHRyaWJ1dGUgRmlsZVJlYWRlckNvbnN0cnVjdG9y
IEZpbGVSZWFkZXI7Ci0gICAgICAgIGF0dHJpYnV0ZSBGaWxlUmVhZGVyU3luY0NvbnN0cnVjdG9y
IEZpbGVSZWFkZXJTeW5jOwotI2VuZGlmCi0KLSAgICAgICAgYXR0cmlidXRlIFtDb25kaXRpb25h
bD1CTE9CXSBET01VUkxDb25zdHJ1Y3RvciB3ZWJraXRVUkw7Ci0KLSAgICAgICAgYXR0cmlidXRl
IEFycmF5QnVmZmVyQ29uc3RydWN0b3IgQXJyYXlCdWZmZXI7IC8vIFVzYWJsZSB3aXRoIG5ldyBv
cGVyYXRvcgotICAgICAgICBhdHRyaWJ1dGUgSW50OEFycmF5Q29uc3RydWN0b3IgSW50OEFycmF5
OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKLSAgICAgICAgYXR0cmlidXRlIFVpbnQ4QXJy
YXlDb25zdHJ1Y3RvciBVaW50OEFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKLSAg
ICAgICAgYXR0cmlidXRlIFVpbnQ4QXJyYXlDb25zdHJ1Y3RvciBVaW50OENsYW1wZWRBcnJheTsg
Ly8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCi0gICAgICAgIGF0dHJpYnV0ZSBJbnQxNkFycmF5
Q29uc3RydWN0b3IgSW50MTZBcnJheTsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCi0gICAg
ICAgIGF0dHJpYnV0ZSBVaW50MTZBcnJheUNvbnN0cnVjdG9yIFVpbnQxNkFycmF5OyAvLyBVc2Fi
bGUgd2l0aCBuZXcgb3BlcmF0b3IKLSAgICAgICAgYXR0cmlidXRlIEludDMyQXJyYXlDb25zdHJ1
Y3RvciBJbnQzMkFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKLSAgICAgICAgYXR0
cmlidXRlIFVpbnQzMkFycmF5Q29uc3RydWN0b3IgVWludDMyQXJyYXk7IC8vIFVzYWJsZSB3aXRo
IG5ldyBvcGVyYXRvcgotICAgICAgICBhdHRyaWJ1dGUgRmxvYXQzMkFycmF5Q29uc3RydWN0b3Ig
RmxvYXQzMkFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKLSAgICAgICAgYXR0cmli
dXRlIEZsb2F0NjRBcnJheUNvbnN0cnVjdG9yIEZsb2F0NjRBcnJheTsgLy8gVXNhYmxlIHdpdGgg
bmV3IG9wZXJhdG9yCi0gICAgICAgIGF0dHJpYnV0ZSBEYXRhVmlld0NvbnN0cnVjdG9yIERhdGFW
aWV3OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKLSAgICB9OwotCi19CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHRQcm94eS5oIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0UHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDU5NzZhZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dv
cmtlckNvbnRleHRQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
V29ya2VyQ29udGV4dFByb3h5X2gKLSNkZWZpbmUgV29ya2VyQ29udGV4dFByb3h5X2gKLQotI2lm
IEVOQUJMRShXT1JLRVJTKQotCi0jaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKLSNpbmNsdWRlICJX
b3JrZXJUaHJlYWQuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEtVUkw7Ci0g
ICAgY2xhc3MgV29ya2VyOwotCi0gICAgLy8gQSBwcm94eSB0byB0YWxrIHRvIHRoZSB3b3JrZXIg
Y29udGV4dC4KLSAgICBjbGFzcyBXb3JrZXJDb250ZXh0UHJveHkgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgc3RhdGljIFdvcmtlckNvbnRleHRQcm94eSogY3JlYXRlKFdvcmtlciopOwotCi0gICAg
ICAgIHZpcnR1YWwgfldvcmtlckNvbnRleHRQcm94eSgpIHt9Ci0KLSAgICAgICAgdmlydHVhbCB2
b2lkIHN0YXJ0V29ya2VyQ29udGV4dChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmlu
ZyYgdXNlckFnZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlclRocmVhZFN0YXJ0
TW9kZSkgPSAwOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGVXb3JrZXJDb250ZXh0
KCkgPSAwOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4
dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NPd25QdHI8TWVzc2FnZVBv
cnRDaGFubmVsQXJyYXk+KSA9IDA7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdB
Y3Rpdml0eSgpIGNvbnN0ID0gMDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyT2JqZWN0
RGVzdHJveWVkKCkgPSAwOwotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgY2xhc3Mg
UGFnZUluc3BlY3RvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIHZpcnR1YWwgflBh
Z2VJbnNwZWN0b3IoKSB7IH0KLSAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaE1lc3Nh
Z2VGcm9tV29ya2VyKGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICAgICAgfTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGNvbm5lY3RUb0luc3BlY3RvcihQYWdlSW5zcGVjdG9yKikgeyB9Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0RnJvbUluc3BlY3RvcigpIHsgfQotICAgICAgICB2aXJ0
dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb0luc3BlY3Rvcihjb25zdCBTdHJpbmcmKSB7IH0KLSNlbmRp
ZgotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShX
T1JLRVJTKQotCi0jZW5kaWYgLy8gV29ya2VyQ29udGV4dFByb3h5X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyRXZlbnRRdWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1OWE5MzA3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
RXZlbnRRdWV1ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldvcmtlckV2ZW50UXVldWUuaCIK
LQotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NPd25QdHI8V29y
a2VyRXZlbnRRdWV1ZT4gV29ya2VyRXZlbnRRdWV1ZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXb3JrZXJFdmVudFF1
ZXVlKGNvbnRleHQpKTsKLX0KLQotV29ya2VyRXZlbnRRdWV1ZTo6V29ya2VyRXZlbnRRdWV1ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgIDogbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2lzQ2xvc2VkKGZhbHNlKQotewotfQotCi1Xb3JrZXJF
dmVudFF1ZXVlOjp+V29ya2VyRXZlbnRRdWV1ZSgpCi17Ci0gICAgY2xvc2UoKTsKLX0KLQotY2xh
c3MgV29ya2VyRXZlbnRRdWV1ZTo6RXZlbnREaXNwYXRjaGVyVGFzayA6IHB1YmxpYyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxF
dmVudERpc3BhdGNoZXJUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIFdvcmtl
ckV2ZW50UXVldWUqIGV2ZW50UXVldWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEV2ZW50RGlzcGF0Y2hlclRhc2soZXZlbnQsIGV2ZW50UXVldWUpKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIH5FdmVudERpc3BhdGNoZXJUYXNrKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2V2
ZW50KQotICAgICAgICAgICAgbV9ldmVudFF1ZXVlLT5yZW1vdmVFdmVudChtX2V2ZW50LmdldCgp
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGRpc3BhdGNoRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQotICAgIHsKLSAgICAgICAgZXZlbnQtPnRhcmdl
dCgpLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAgICAg
IGlmIChtX2lzQ2FuY2VsbGVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2V2ZW50
UXVldWUtPnJlbW92ZUV2ZW50KG1fZXZlbnQuZ2V0KCkpOwotICAgICAgICBkaXNwYXRjaEV2ZW50
KGNvbnRleHQsIG1fZXZlbnQpOwotICAgICAgICBtX2V2ZW50LmNsZWFyKCk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjYW5jZWwoKQotICAgIHsKLSAgICAgICAgbV9pc0NhbmNlbGxlZCA9IHRydWU7Ci0g
ICAgICAgIG1fZXZlbnQuY2xlYXIoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRXZlbnREaXNw
YXRjaGVyVGFzayhQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgV29ya2VyRXZlbnRRdWV1ZSogZXZl
bnRRdWV1ZSkKLSAgICAgICAgOiBtX2V2ZW50KGV2ZW50KQotICAgICAgICAsIG1fZXZlbnRRdWV1
ZShldmVudFF1ZXVlKQotICAgICAgICAsIG1faXNDYW5jZWxsZWQoZmFsc2UpCi0gICAgewotICAg
IH0KLQotICAgIFJlZlB0cjxFdmVudD4gbV9ldmVudDsKLSAgICBXb3JrZXJFdmVudFF1ZXVlKiBt
X2V2ZW50UXVldWU7Ci0gICAgYm9vbCBtX2lzQ2FuY2VsbGVkOwotfTsKLQotdm9pZCBXb3JrZXJF
dmVudFF1ZXVlOjpyZW1vdmVFdmVudChFdmVudCogZXZlbnQpCi17Ci0gICAgbV9ldmVudFRhc2tN
YXAucmVtb3ZlKGV2ZW50KTsKLX0KLQotYm9vbCBXb3JrZXJFdmVudFF1ZXVlOjplbnF1ZXVlRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4gcHJwRXZlbnQpCi17Ci0gICAgaWYgKG1faXNDbG9zZWQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7
Ci0gICAgT3duUHRyPEV2ZW50RGlzcGF0Y2hlclRhc2s+IHRhc2sgPSBFdmVudERpc3BhdGNoZXJU
YXNrOjpjcmVhdGUoZXZlbnQsIHRoaXMpOwotICAgIG1fZXZlbnRUYXNrTWFwLmFkZChldmVudC5y
ZWxlYXNlKCksIHRhc2suZ2V0KCkpOwotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9z
dFRhc2sodGFzay5yZWxlYXNlKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdvcmtl
ckV2ZW50UXVldWU6OmNhbmNlbEV2ZW50KEV2ZW50KiBldmVudCkKLXsKLSAgICBFdmVudERpc3Bh
dGNoZXJUYXNrKiB0YXNrID0gbV9ldmVudFRhc2tNYXAuZ2V0KGV2ZW50KTsKLSAgICBpZiAoIXRh
c2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0YXNrLT5jYW5jZWwoKTsKLSAgICByZW1v
dmVFdmVudChldmVudCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV29ya2VyRXZlbnRR
dWV1ZTo6Y2xvc2UoKQotewotICAgIG1faXNDbG9zZWQgPSB0cnVlOwotICAgIGZvciAoRXZlbnRU
YXNrTWFwOjppdGVyYXRvciBpdCA9IG1fZXZlbnRUYXNrTWFwLmJlZ2luKCk7IGl0ICE9IG1fZXZl
bnRUYXNrTWFwLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIEV2ZW50RGlzcGF0Y2hlclRhc2sqIHRh
c2sgPSBpdC0+c2Vjb25kOwotICAgICAgICB0YXNrLT5jYW5jZWwoKTsKLSAgICB9Ci0gICAgbV9l
dmVudFRhc2tNYXAuY2xlYXIoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJFdmVudFF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckV2ZW50UXVldWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIwZjFmYi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckV2ZW50UXVldWUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICovCi0KLSNpZm5kZWYgV29ya2Vy
RXZlbnRRdWV1ZV9oCi0jZGVmaW5lIFdvcmtlckV2ZW50UXVldWVfaAotCi0jaW5jbHVkZSAiRXZl
bnRRdWV1ZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRXZlbnQ7Ci1jbGFzcyBOb2Rl
OwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQotY2xhc3MgV29ya2VyRXZlbnRRdWV1
ZSA6IHB1YmxpYyBFdmVudFF1ZXVlIHsKLXB1YmxpYzoKLQotICAgIHN0YXRpYyBQYXNzT3duUHRy
PFdvcmtlckV2ZW50UXVldWU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0gICAg
dmlydHVhbCB+V29ya2VyRXZlbnRRdWV1ZSgpOwotCi0gICAgLy8gRXZlbnRRdWV1ZQotICAgIHZp
cnR1YWwgYm9vbCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgYm9vbCBjYW5jZWxFdmVudChFdmVudCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBjbG9zZSgpIE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFdvcmtlckV2
ZW50UXVldWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgIHZvaWQgcmVtb3ZlRXZlbnQo
RXZlbnQqKTsKLQotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKLSAgICBib29sIG1faXNDbG9zZWQ7Ci0KLSAgICBjbGFzcyBFdmVudERpc3BhdGNo
ZXJUYXNrOwotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RXZlbnQ+LCBFdmVudERpc3BhdGNo
ZXJUYXNrKj4gRXZlbnRUYXNrTWFwOwotICAgIEV2ZW50VGFza01hcCBtX2V2ZW50VGFza01hcDsK
LX07Ci0KLX0KLQotI2VuZGlmIC8vIFdvcmtlckV2ZW50UXVldWVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2FkZXJQcm94eS5oIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJMb2FkZXJQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkMmZjZjk2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9h
ZGVyUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdvcmtlckxv
YWRlclByb3h5X2gKLSNkZWZpbmUgV29ya2VyTG9hZGVyUHJveHlfaAotCi0jaWYgRU5BQkxFKFdP
UktFUlMpCi0KLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLSAgICAvLyBBIHByb3h5IHRvIHRhbGsgdG8gdGhlIGxvYWRlciBjb250ZXh0
LiBOb3JtYWxseSwgdGhlIGRvY3VtZW50IG9uIHRoZSBtYWluIHRocmVhZAotICAgIC8vIHByb3Zp
ZGVzIGxvYWRpbmcgc2VydmljZXMgZm9yIHRoZSBzdWJvcmRpbmF0ZSB3b3JrZXJzLiBUaGlzIGlu
dGVyZmFjZSBwcm92aWRlcyAyLXdheQotICAgIC8vIGNvbW11bmljYXRpb25zIHRvIHRoZSBEb2N1
bWVudCBjb250ZXh0IGFuZCBiYWNrIHRvIHRoZSB3b3JrZXIuCi0gICAgLy8gTm90ZSB0aGF0IGlu
IG11bHRpLXByb2Nlc3MgYnJvd3NlcnMsIHRoZSBXb3JrZXIgb2JqZWN0IGNvbnRleHQgYW5kIHRo
ZSBEb2N1bWVudAotICAgIC8vIGNvbnRleHQgY2FuIGJlIGRpc3RpbmN0LgotICAgIGNsYXNzIFdv
cmtlckxvYWRlclByb3h5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfldvcmtlckxv
YWRlclByb3h5KCkgeyB9Ci0KLSAgICAgICAgLy8gUG9zdHMgYSB0YXNrIHRvIHRoZSB0aHJlYWQg
d2hpY2ggcnVucyB0aGUgbG9hZGluZyBjb2RlIChub3JtYWxseSwgdGhlIG1haW4gdGhyZWFkKS4K
LSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrPikgPSAwOwotCi0gICAgICAgIC8vIFBvc3RzIGNhbGxiYWNr
cyBmcm9tIGxvYWRpbmcgY29kZSB0byB0aGUgV29ya2VyQ29udGV4dC4gVGhlICdtb2RlJyBpcyB1
c2VkIHRvIGRpZmZlcmVudGlhdGUKLSAgICAgICAgLy8gc3BlY2lmaWMgc3luY2hyb25vdXMgbG9h
ZGluZyByZXF1ZXN0cyBzbyB0aGV5IGNhbiBiZSAnbmVzdGVkJywgcGVyIHNwZWMuCi0gICAgICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFzayB3YXMgcG9zdGVkIHN1Y2Nlc3NmdWxseS4KLSAg
ICAgICAgdmlydHVhbCBib29sIHBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBjb25zdCBTdHJpbmcmIG1vZGUpID0g
MDsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V09SS0VSUykKLQotI2VuZGlmIC8vIFdvcmtlckxvYWRlclByb3h5X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGViNzZhOGIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJMb2Nh
dGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi0jaW5jbHVkZSAiV29y
a2VyTG9jYXRpb24uaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpocmVmKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV91cmwuc3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBXb3JrZXJMb2NhdGlvbjo6cHJv
dG9jb2woKSBjb25zdAotewotICAgIHJldHVybiBtX3VybC5wcm90b2NvbCgpICsgIjoiOwotfQot
Ci1TdHJpbmcgV29ya2VyTG9jYXRpb246Omhvc3QoKSBjb25zdAotewotICAgIHJldHVybiBtX3Vy
bC5wb3J0KCkgPyBtX3VybC5ob3N0KCkgKyAiOiIgKyBTdHJpbmc6Om51bWJlcihtX3VybC5wb3J0
KCkpIDogbV91cmwuaG9zdCgpOwotfQotCi1TdHJpbmcgV29ya2VyTG9jYXRpb246Omhvc3RuYW1l
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV91cmwuaG9zdCgpOwotfQotCi1TdHJpbmcgV29ya2Vy
TG9jYXRpb246OnBvcnQoKSBjb25zdAotewotICAgIHJldHVybiBtX3VybC5wb3J0KCkgPyBTdHJp
bmc6Om51bWJlcihtX3VybC5wb3J0KCkpIDogIiI7Ci19Ci0KLVN0cmluZyBXb3JrZXJMb2NhdGlv
bjo6cGF0aG5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX3VybC5wYXRoKCkuaXNFbXB0eSgp
ID8gIi8iIDogbV91cmwucGF0aCgpOwotfQotCi1TdHJpbmcgV29ya2VyTG9jYXRpb246OnNlYXJj
aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdXJsLnF1ZXJ5KCkuaXNFbXB0eSgpID8gZW1wdHlT
dHJpbmcoKSA6ICI/IiArIG1fdXJsLnF1ZXJ5KCk7Ci19Ci0KLVN0cmluZyBXb3JrZXJMb2NhdGlv
bjo6aGFzaCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdXJsLmZyYWdtZW50SWRlbnRpZmllcigp
LmlzRW1wdHkoKSA/IGVtcHR5U3RyaW5nKCkgOiAiIyIgKyBtX3VybC5mcmFnbWVudElkZW50aWZp
ZXIoKTsKLX0KLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V09SS0VSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9jYXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9jYXRpb24uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjkyYzBlMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKgotICovCi0KLSNpZm5kZWYgV29ya2VyTG9jYXRpb25faAotI2RlZmluZSBXb3JrZXJM
b2NhdGlvbl9oCi0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIktVUkwuaCIKLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBXb3JrZXJMb2NhdGlvbiA6IHB1Ymxp
YyBSZWZDb3VudGVkPFdvcmtlckxvY2F0aW9uPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXb3JrZXJMb2NhdGlvbj4gY3JlYXRlKGNvbnN0IEtVUkwmIHVybCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJMb2NhdGlvbih1
cmwpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0
dXJuIG1fdXJsOyB9Ci0KLSAgICAgICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKLQotICAgICAgICAv
LyBVUkkgZGVjb21wb3NpdGlvbiBhdHRyaWJ1dGVzCi0gICAgICAgIFN0cmluZyBwcm90b2NvbCgp
IGNvbnN0OwotICAgICAgICBTdHJpbmcgaG9zdCgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgaG9z
dG5hbWUoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIHBvcnQoKSBjb25zdDsKLSAgICAgICAgU3Ry
aW5nIHBhdGhuYW1lKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBzZWFyY2goKSBjb25zdDsKLSAg
ICAgICAgU3RyaW5nIGhhc2goKSBjb25zdDsKLQotICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKSBj
b25zdCB7IHJldHVybiBocmVmKCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFdvcmtlckxv
Y2F0aW9uKGNvbnN0IEtVUkwmIHVybCkgOiBtX3VybCh1cmwpIHsgfQotCi0gICAgICAgIEtVUkwg
bV91cmw7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKFdPUktFUlMpCi0KLSNlbmRpZiAvLyBXb3JrZXJMb2NhdGlvbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckxvY2F0aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyTG9jYXRpb24uaWRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzYjMwMmM0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTG9j
YXRpb24uaWRsCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSB0aHJl
YWRzIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPVdPUktFUlMsCi0g
ICAgICAgIEpTR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsLAotICAgICAgICBKU05vU3RhdGljVGFi
bGVzCi0gICAgXSBXb3JrZXJMb2NhdGlvbiB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgaHJlZjsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwcm90
b2NvbDsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBob3N0OwotICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGhvc3RuYW1lOwotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHBvcnQ7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgcGF0aG5hbWU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
c2VhcmNoOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGhhc2g7Ci0KLSAg
ICAgICAgW05vdEVudW1lcmFibGVdIERPTVN0cmluZyB0b1N0cmluZygpOwotICAgIH07Ci0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHku
Y3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmODM5ZjAuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdpbmdQcm94eS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw1MTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYg
RU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJXb3JrZXJNZXNzYWdpbmdQcm94eS5oIgotCi0j
aW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCi0jaW5jbHVkZSAiQ3Jvc3NUaHJlYWRU
YXNrLmgiCi0jaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oIgotI2luY2x1ZGUgIkRl
ZGljYXRlZFdvcmtlclRocmVhZC5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXJyb3JFdmVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRl
ICJNZXNzYWdlRXZlbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUg
IlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgotI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJXb3JrZXIuaCIKLSNpbmNsdWRlICJX
b3JrZXJEZWJ1Z2dlckFnZW50LmgiCi0jaW5jbHVkZSAiV29ya2VySW5zcGVjdG9yQ29udHJvbGxl
ci5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgTWVzc2FnZVdvcmtlckNvbnRleHRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPE1lc3NhZ2VX
b3JrZXJDb250ZXh0VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBtZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWVzc2FnZVdvcmtlckNvbnRleHRU
YXNrKG1lc3NhZ2UsIGNoYW5uZWxzKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE1lc3NhZ2VX
b3JrZXJDb250ZXh0VGFzayhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2Fn
ZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCi0gICAgICAg
IDogbV9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgICwgbV9jaGFubmVscyhjaGFubmVscykKLSAg
ICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdENvbnRleHQpCi0gICAgewotICAgICAgICBBU1NFUlQoc2NyaXB0Q29u
dGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwotICAgICAgICBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0
KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8RGVkaWNhdGVkV29ya2VyQ29udGV4dCo+KHNjcmlwdENv
bnRleHQpOwotICAgICAgICBPd25QdHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPSBNZXNzYWdl
UG9ydDo6ZW50YW5nbGVQb3J0cygqc2NyaXB0Q29udGV4dCwgbV9jaGFubmVscy5yZWxlYXNlKCkp
OwotICAgICAgICBjb250ZXh0LT5kaXNwYXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKHBv
cnRzLnJlbGVhc2UoKSwgbV9tZXNzYWdlKSk7Ci0gICAgICAgIGNvbnRleHQtPnRocmVhZCgpLT53
b3JrZXJPYmplY3RQcm94eSgpLmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChjb250ZXh0
LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fbWVzc2FnZTsKLSAgICBPd25QdHI8TWVzc2FnZVBvcnRD
aGFubmVsQXJyYXk+IG1fY2hhbm5lbHM7Ci19OwotCi1jbGFzcyBNZXNzYWdlV29ya2VyVGFzayA6
IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxNZXNzYWdlV29ya2VyVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5PiBjaGFubmVscywgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNZXNzYWdlV29ya2VyVGFzayhtZXNzYWdl
LCBjaGFubmVscywgbWVzc2FnaW5nUHJveHkpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTWVz
c2FnZVdvcmtlclRhc2soUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2Us
IFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzLCBXb3JrZXJNZXNz
YWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCi0gICAgICAgIDogbV9tZXNzYWdlKG1lc3NhZ2Up
Ci0gICAgICAgICwgbV9jaGFubmVscyhjaGFubmVscykKLSAgICAgICAgLCBtX21lc3NhZ2luZ1By
b3h5KG1lc3NhZ2luZ1Byb3h5KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCkKLSAgICB7Ci0g
ICAgICAgIFdvcmtlciogd29ya2VyT2JqZWN0ID0gbV9tZXNzYWdpbmdQcm94eS0+d29ya2VyT2Jq
ZWN0KCk7Ci0gICAgICAgIGlmICghd29ya2VyT2JqZWN0IHx8IG1fbWVzc2FnaW5nUHJveHktPmFz
a2VkVG9UZXJtaW5hdGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBPd25QdHI8
TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPSBNZXNzYWdlUG9ydDo6ZW50YW5nbGVQb3J0cygqc2Ny
aXB0Q29udGV4dCwgbV9jaGFubmVscy5yZWxlYXNlKCkpOwotICAgICAgICB3b3JrZXJPYmplY3Qt
PmRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50OjpjcmVhdGUocG9ydHMucmVsZWFzZSgpLCBtX21l
c3NhZ2UpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gbV9tZXNzYWdlOwotICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gbV9j
aGFubmVsczsKLSAgICBXb3JrZXJNZXNzYWdpbmdQcm94eSogbV9tZXNzYWdpbmdQcm94eTsKLX07
Ci0KLWNsYXNzIFdvcmtlckV4Y2VwdGlvblRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8V29ya2VyRXhjZXB0
aW9uVGFzaz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdp
bmdQcm94eSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV29ya2VyRXhjZXB0
aW9uVGFzayhlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCwgbWVzc2FnaW5nUHJv
eHkpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV29ya2VyRXhjZXB0aW9uVGFzayhjb25zdCBT
dHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNl
VVJMLCBXb3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCi0gICAgICAgIDogbV9l
cnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlLmlzb2xhdGVkQ29weSgpKQotICAgICAgICAsIG1fbGlu
ZU51bWJlcihsaW5lTnVtYmVyKQotICAgICAgICAsIG1fc291cmNlVVJMKHNvdXJjZVVSTC5pc29s
YXRlZENvcHkoKSkKLSAgICAgICAgLCBtX21lc3NhZ2luZ1Byb3h5KG1lc3NhZ2luZ1Byb3h5KQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIFdvcmtlciogd29ya2VyT2JqZWN0
ID0gbV9tZXNzYWdpbmdQcm94eS0+d29ya2VyT2JqZWN0KCk7Ci0gICAgICAgIGlmICghd29ya2Vy
T2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFdlIGRvbid0IGJvdGhl
ciBjaGVja2luZyB0aGUgYXNrZWRUb1Rlcm1pbmF0ZSgpIGZsYWcgaGVyZSwgYmVjYXVzZSBleGNl
cHRpb25zIHNob3VsZCAqYWx3YXlzKiBiZSByZXBvcnRlZCBldmVuIGlmIHRoZSB0aHJlYWQgaXMg
dGVybWluYXRlZC4KLSAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGRpZmZlcmVudCB0
aGFuIHRoZSBiZWhhdmlvciBpbiBNZXNzYWdlV29ya2VyVGFzaywgYmVjYXVzZSB0ZXJtaW5hdGVk
IHdvcmtlcnMgbm8gbG9uZ2VyIGRlbGl2ZXIgbWVzc2FnZXMgKHNlY3Rpb24gNC42IG9mIHRoZSBX
ZWJXb3JrZXIgc3BlYyksIGJ1dCB0aGV5IGRvIHJlcG9ydCBleGNlcHRpb25zLgotCi0gICAgICAg
IGJvb2wgZXJyb3JIYW5kbGVkID0gIXdvcmtlck9iamVjdC0+ZGlzcGF0Y2hFdmVudChFcnJvckV2
ZW50OjpjcmVhdGUobV9lcnJvck1lc3NhZ2UsIG1fc291cmNlVVJMLCBtX2xpbmVOdW1iZXIpKTsK
LSAgICAgICAgaWYgKCFlcnJvckhhbmRsZWQpCi0gICAgICAgICAgICBjb250ZXh0LT5yZXBvcnRF
eGNlcHRpb24obV9lcnJvck1lc3NhZ2UsIG1fbGluZU51bWJlciwgbV9zb3VyY2VVUkwsIDApOwot
ICAgIH0KLQotICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKLSAgICBpbnQgbV9saW5lTnVtYmVy
OwotICAgIFN0cmluZyBtX3NvdXJjZVVSTDsKLSAgICBXb3JrZXJNZXNzYWdpbmdQcm94eSogbV9t
ZXNzYWdpbmdQcm94eTsKLX07Ci0KLWNsYXNzIFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrIDog
cHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPFdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrPiBjcmVhdGUoV29ya2VyTWVz
c2FnaW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayhtZXNzYWdpbmdQcm94eSkpOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBXb3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayhXb3JrZXJNZXNz
YWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCi0gICAgICAgIDogbV9tZXNzYWdpbmdQcm94eSht
ZXNzYWdpbmdQcm94eSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1U
YXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQotICAgIHsKLSAgICAgICAgbV9tZXNzYWdpbmdQ
cm94eS0+d29ya2VyQ29udGV4dERlc3Ryb3llZEludGVybmFsKCk7Ci0gICAgfQotCi0gICAgV29y
a2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7Ci19OwotCi1jbGFzcyBXb3JrZXJU
ZXJtaW5hdGVUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdvcmtlclRlcm1pbmF0ZVRhc2s+IGNyZWF0ZShX
b3JrZXJNZXNzYWdpbmdQcm94eSogbWVzc2FnaW5nUHJveHkpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFdvcmtlclRlcm1pbmF0ZVRhc2sobWVzc2FnaW5nUHJveHkpKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgV29ya2VyVGVybWluYXRlVGFzayhXb3JrZXJNZXNzYWdpbmdQ
cm94eSogbWVzc2FnaW5nUHJveHkpCi0gICAgICAgIDogbV9tZXNzYWdpbmdQcm94eShtZXNzYWdp
bmdQcm94eSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqKQotICAgIHsKLSAgICAgICAgbV9tZXNzYWdpbmdQcm94eS0+
dGVybWluYXRlV29ya2VyQ29udGV4dCgpOwotICAgIH0KLQotICAgIFdvcmtlck1lc3NhZ2luZ1By
b3h5KiBtX21lc3NhZ2luZ1Byb3h5OwotfTsKLQotY2xhc3MgV29ya2VyVGhyZWFkQWN0aXZpdHlS
ZXBvcnRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzaz4g
Y3JlYXRlKFdvcmtlck1lc3NhZ2luZ1Byb3h5KiBtZXNzYWdpbmdQcm94eSwgYm9vbCBjb25maXJt
aW5nTWVzc2FnZSwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFdvcmtlclRocmVhZEFjdGl2aXR5UmVwb3J0VGFzayhtZXNzYWdpbmdQ
cm94eSwgY29uZmlybWluZ01lc3NhZ2UsIGhhc1BlbmRpbmdBY3Rpdml0eSkpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBXb3JrZXJUaHJlYWRBY3Rpdml0eVJlcG9ydFRhc2soV29ya2VyTWVzc2Fn
aW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5LCBib29sIGNvbmZpcm1pbmdNZXNzYWdlLCBib29sIGhh
c1BlbmRpbmdBY3Rpdml0eSkKLSAgICAgICAgOiBtX21lc3NhZ2luZ1Byb3h5KG1lc3NhZ2luZ1By
b3h5KQotICAgICAgICAsIG1fY29uZmlybWluZ01lc3NhZ2UoY29uZmlybWluZ01lc3NhZ2UpCi0g
ICAgICAgICwgbV9oYXNQZW5kaW5nQWN0aXZpdHkoaGFzUGVuZGluZ0FjdGl2aXR5KQotICAgIHsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopCi0gICAgewotICAgICAgICBtX21lc3NhZ2luZ1Byb3h5LT5yZXBvcnRQZW5kaW5nQWN0
aXZpdHlJbnRlcm5hbChtX2NvbmZpcm1pbmdNZXNzYWdlLCBtX2hhc1BlbmRpbmdBY3Rpdml0eSk7
Ci0gICAgfQotCi0gICAgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7Ci0g
ICAgYm9vbCBtX2NvbmZpcm1pbmdNZXNzYWdlOwotICAgIGJvb2wgbV9oYXNQZW5kaW5nQWN0aXZp
dHk7Ci19OwotCi1jbGFzcyBQb3N0TWVzc2FnZVRvUGFnZUluc3BlY3RvclRhc2sgOiBwdWJsaWMg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8UG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrPiBjcmVhdGUoV29ya2VyTWVzc2Fn
aW5nUHJveHkqIG1lc3NhZ2luZ1Byb3h5LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFz
ayhtZXNzYWdpbmdQcm94eSwgbWVzc2FnZSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBQb3N0
TWVzc2FnZVRvUGFnZUluc3BlY3RvclRhc2soV29ya2VyTWVzc2FnaW5nUHJveHkqIG1lc3NhZ2lu
Z1Byb3h5LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi0gICAgICAgIDogbV9tZXNzYWdpbmdQcm94
eShtZXNzYWdpbmdQcm94eSkKLSAgICAgICAgLCBtX21lc3NhZ2UobWVzc2FnZS5pc29sYXRlZENv
cHkoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqKQotICAgIHsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAg
ICBpZiAoV29ya2VyQ29udGV4dFByb3h5OjpQYWdlSW5zcGVjdG9yKiBwYWdlSW5zcGVjdG9yID0g
bV9tZXNzYWdpbmdQcm94eS0+bV9wYWdlSW5zcGVjdG9yKQotICAgICAgICAgICAgcGFnZUluc3Bl
Y3Rvci0+ZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihtX21lc3NhZ2UpOwotI2VuZGlmCi0gICAg
fQotCi0gICAgV29ya2VyTWVzc2FnaW5nUHJveHkqIG1fbWVzc2FnaW5nUHJveHk7Ci0gICAgU3Ry
aW5nIG1fbWVzc2FnZTsKLX07Ci0KLQotI2lmICFQTEFURk9STShDSFJPTUlVTSkKLVdvcmtlckNv
bnRleHRQcm94eSogV29ya2VyQ29udGV4dFByb3h5OjpjcmVhdGUoV29ya2VyKiB3b3JrZXIpCi17
Ci0gICAgcmV0dXJuIG5ldyBXb3JrZXJNZXNzYWdpbmdQcm94eSh3b3JrZXIpOwotfQotI2VuZGlm
Ci0KLVdvcmtlck1lc3NhZ2luZ1Byb3h5OjpXb3JrZXJNZXNzYWdpbmdQcm94eShXb3JrZXIqIHdv
cmtlck9iamVjdCkKLSAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCh3b3JrZXJPYmplY3Qt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAsIG1fd29ya2VyT2JqZWN0KHdvcmtlck9i
amVjdCkKLSAgICAsIG1fbWF5QmVEZXN0cm95ZWQoZmFsc2UpCi0gICAgLCBtX3VuY29uZmlybWVk
TWVzc2FnZUNvdW50KDApCi0gICAgLCBtX3dvcmtlclRocmVhZEhhZFBlbmRpbmdBY3Rpdml0eShm
YWxzZSkKLSAgICAsIG1fYXNrZWRUb1Rlcm1pbmF0ZShmYWxzZSkKLSNpZiBFTkFCTEUoSU5TUEVD
VE9SKQotICAgICwgbV9wYWdlSW5zcGVjdG9yKDApCi0jZW5kaWYKLXsKLSAgICBBU1NFUlQobV93
b3JrZXJPYmplY3QpOwotICAgIEFTU0VSVCgobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0Rv
Y3VtZW50KCkgJiYgaXNNYWluVGhyZWFkKCkpCi0gICAgICAgICAgIHx8IChtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpICYmIGN1cnJlbnRUaHJlYWQoKSA9PSBzdGF0
aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpKS0+
dGhyZWFkKCktPnRocmVhZElEKCkpKTsKLX0KLQotV29ya2VyTWVzc2FnaW5nUHJveHk6On5Xb3Jr
ZXJNZXNzYWdpbmdQcm94eSgpCi17Ci0gICAgQVNTRVJUKCFtX3dvcmtlck9iamVjdCk7Ci0gICAg
QVNTRVJUKChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSAmJiBpc01haW5U
aHJlYWQoKSkKLSAgICAgICAgICAgfHwgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNXb3Jr
ZXJDb250ZXh0KCkgJiYgY3VycmVudFRocmVhZCgpID09IHN0YXRpY19jYXN0PFdvcmtlckNvbnRl
eHQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCkpLT50aHJlYWQoKS0+dGhyZWFkSUQo
KSkpOwotfQotCi12b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpzdGFydFdvcmtlckNvbnRleHQo
Y29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJUaHJlYWRTdGFydE1vZGUgc3RhcnRNb2RlKQotewotICAg
IC8vIEZJWE1FOiBUaGlzIG5lZWQgdG8gYmUgcmV2aXNpdGVkIHdoZW4gd2Ugc3VwcG9ydCBuZXN0
ZWQgd29ya2VyIG9uZSBkYXkKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5p
c0RvY3VtZW50KCkpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3Vt
ZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpKTsKLSAgICBHcm91cFNldHRpbmdz
KiBzZXR0aW5ncyA9IDA7Ci0gICAgaWYgKGRvY3VtZW50LT5wYWdlKCkpCi0gICAgICAgIHNldHRp
bmdzID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAgUmVm
UHRyPERlZGljYXRlZFdvcmtlclRocmVhZD4gdGhyZWFkID0gRGVkaWNhdGVkV29ya2VyVGhyZWFk
OjpjcmVhdGUoc2NyaXB0VVJMLCB1c2VyQWdlbnQsIHNldHRpbmdzLCBzb3VyY2VDb2RlLCAqdGhp
cywgKnRoaXMsIHN0YXJ0TW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5kZXByZWNhdGVkSGVhZGVyKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5jb250ZW50U2VjdXJpdHlQb2xp
Y3koKS0+ZGVwcmVjYXRlZEhlYWRlclR5cGUoKSk7Ci0gICAgd29ya2VyVGhyZWFkQ3JlYXRlZCh0
aHJlYWQpOwotICAgIHRocmVhZC0+c3RhcnQoKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFN0YXJ0V29ya2VyQ29udGV4dChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCks
IHRoaXMsIHNjcmlwdFVSTCk7Ci19Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RN
ZXNzYWdlVG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1l
c3NhZ2UsIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQotewot
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soTWVzc2FnZVdvcmtlclRhc2s6
OmNyZWF0ZShtZXNzYWdlLCBjaGFubmVscywgdGhpcykpOwotfQotCi12b2lkIFdvcmtlck1lc3Nh
Z2luZ1Byb3h5Ojpwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJh
eT4gY2hhbm5lbHMpCi17Ci0gICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1fd29ya2VyVGhyZWFkKSB7Ci0gICAgICAgICsrbV91bmNvbmZpcm1l
ZE1lc3NhZ2VDb3VudDsKLSAgICAgICAgbV93b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFz
ayhNZXNzYWdlV29ya2VyQ29udGV4dFRhc2s6OmNyZWF0ZShtZXNzYWdlLCBjaGFubmVscykpOwot
ICAgIH0gZWxzZQotICAgICAgICBtX3F1ZXVlZEVhcmx5VGFza3MuYXBwZW5kKE1lc3NhZ2VXb3Jr
ZXJDb250ZXh0VGFzazo6Y3JlYXRlKG1lc3NhZ2UsIGNoYW5uZWxzKSk7Ci19Ci0KLWJvb2wgV29y
a2VyTWVzc2FnaW5nUHJveHk6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9k
ZSkKLXsKLSAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBBU1NFUlQobV93b3JrZXJUaHJlYWQpOwotICAgIG1fd29ya2VyVGhyZWFkLT5ydW5M
b29wKCkucG9zdFRhc2tGb3JNb2RlKHRhc2ssIG1vZGUpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0VGFza1RvTG9hZGVyKFBhc3NPd25QdHI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKLXsKLSAgICAvLyBGSVhNRTogSW4g
Y2FzZSBvZiBuZXN0ZWQgd29ya2VycywgdGhpcyBzaG91bGQgZ28gZGlyZWN0bHkgdG8gdGhlIHJv
b3QgRG9jdW1lbnQgY29udGV4dC4KLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5pc0RvY3VtZW50KCkpOwotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2so
dGFzayk7Ci19Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnBvc3RFeGNlcHRpb25Ub1dv
cmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soV29ya2VyRXhjZXB0aW9uVGFzazo6Y3JlYXRlKGVycm9yTWVzc2FnZSwgbGluZU51
bWJlciwgc291cmNlVVJMLCB0aGlzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBvc3RDb25zb2xlTWVz
c2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgV29ya2VyTWVzc2FnaW5n
UHJveHkqIG1lc3NhZ2luZ1Byb3h5LCBNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5cGUg
dHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIGlmIChtZXNzYWdp
bmdQcm94eS0+YXNrZWRUb1Rlcm1pbmF0ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgY29udGV4
dC0+YWRkQ29uc29sZU1lc3NhZ2Uoc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgc291cmNl
VVJMLCBsaW5lTnVtYmVyKTsKLX0KLQotdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdENv
bnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VU
eXBlIHR5cGUsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCi17Ci0gICAgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5wb3N0VGFzaygKLSAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0
Q29uc29sZU1lc3NhZ2VUYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc291cmNlLCB0eXBlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51
bWJlciwgc291cmNlVVJMKSk7Ci19Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6Ondvcmtl
clRocmVhZENyZWF0ZWQoUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ+IHdvcmtlclRo
cmVhZCkKLXsKLSAgICBtX3dvcmtlclRocmVhZCA9IHdvcmtlclRocmVhZDsKLQotICAgIGlmICht
X2Fza2VkVG9UZXJtaW5hdGUpIHsKLSAgICAgICAgLy8gV29ya2VyLnRlcm1pbmF0ZSgpIGNvdWxk
IGJlIGNhbGxlZCBmcm9tIEpTIGJlZm9yZSB0aGUgdGhyZWFkIHdhcyBjcmVhdGVkLgotICAgICAg
ICBtX3dvcmtlclRocmVhZC0+c3RvcCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVk
IHRhc2tDb3VudCA9IG1fcXVldWVkRWFybHlUYXNrcy5zaXplKCk7Ci0gICAgICAgIEFTU0VSVCgh
bV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudCk7Ci0gICAgICAgIG1fdW5jb25maXJtZWRNZXNzYWdl
Q291bnQgPSB0YXNrQ291bnQ7Ci0gICAgICAgIG1fd29ya2VyVGhyZWFkSGFkUGVuZGluZ0FjdGl2
aXR5ID0gdHJ1ZTsgLy8gV29ya2VyIGluaXRpYWxpemF0aW9uIG1lYW5zIGEgcGVuZGluZyBhY3Rp
dml0eS4KLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFza0NvdW50OyArK2kp
Ci0gICAgICAgICAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrKG1fcXVldWVk
RWFybHlUYXNrc1tpXS5yZWxlYXNlKCkpOwotICAgICAgICBtX3F1ZXVlZEVhcmx5VGFza3MuY2xl
YXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6Ondvcmtlck9iamVj
dERlc3Ryb3llZCgpCi17Ci0gICAgbV93b3JrZXJPYmplY3QgPSAwOwotICAgIG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJPYmplY3RE
ZXN0cm95ZWRJbnRlcm5hbCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotfQotCi12
b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJPYmplY3REZXN0cm95ZWRJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV29ya2VyTWVzc2FnaW5nUHJveHkqIHByb3h5KQotewot
ICAgIHByb3h5LT5tX21heUJlRGVzdHJveWVkID0gdHJ1ZTsKLSAgICBpZiAocHJveHktPm1fd29y
a2VyVGhyZWFkKQotICAgICAgICBwcm94eS0+dGVybWluYXRlV29ya2VyQ29udGV4dCgpOwotICAg
IGVsc2UKLSAgICAgICAgcHJveHktPndvcmtlckNvbnRleHREZXN0cm95ZWRJbnRlcm5hbCgpOwot
fQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKLXN0YXRpYyB2b2lkIGNvbm5lY3RUb1dvcmtlckNvbnRleHRJbnNwZWN0b3JUYXNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGJvb2wpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQt
PmlzV29ya2VyQ29udGV4dCgpKTsKLSAgICBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29u
dGV4dCktPndvcmtlckluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y29ubmVjdEZyb250ZW5kKCk7Ci19
Ci0jZW5kaWYKLQotdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6Y29ubmVjdFRvSW5zcGVjdG9y
KFdvcmtlckNvbnRleHRQcm94eTo6UGFnZUluc3BlY3RvciogcGFnZUluc3BlY3RvcikKLXsKLSAg
ICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKCFt
X3BhZ2VJbnNwZWN0b3IpOwotICAgIG1fcGFnZUluc3BlY3RvciA9IHBhZ2VJbnNwZWN0b3I7Ci0j
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgbV93b3JrZXJUaHJlYWQtPnJ1bkxv
b3AoKS5wb3N0VGFza0Zvck1vZGUoY3JlYXRlQ2FsbGJhY2tUYXNrKGNvbm5lY3RUb1dvcmtlckNv
bnRleHRJbnNwZWN0b3JUYXNrLCB0cnVlKSwgV29ya2VyRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJU
YXNrTW9kZSk7Ci0jZW5kaWYKLX0KLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQot
c3RhdGljIHZvaWQgZGlzY29ubmVjdEZyb21Xb3JrZXJDb250ZXh0SW5zcGVjdG9yVGFzayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBib29sKQotewotICAgIEFTU0VSVChjb250ZXh0
LT5pc1dvcmtlckNvbnRleHQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNv
bnRleHQpLT53b3JrZXJJbnNwZWN0b3JDb250cm9sbGVyKCktPmRpc2Nvbm5lY3RGcm9udGVuZCgp
OwotfQotI2VuZGlmCi0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OmRpc2Nvbm5lY3RGcm9t
SW5zcGVjdG9yKCkKLXsKLSAgICBtX3BhZ2VJbnNwZWN0b3IgPSAwOwotICAgIGlmIChtX2Fza2Vk
VG9UZXJtaW5hdGUpCi0gICAgICAgIHJldHVybjsKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKLSAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZShjcmVh
dGVDYWxsYmFja1Rhc2soZGlzY29ubmVjdEZyb21Xb3JrZXJDb250ZXh0SW5zcGVjdG9yVGFzaywg
dHJ1ZSksIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyVGFza01vZGUpOwotI2VuZGlmCi19
Ci0KLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLXN0YXRpYyB2b2lkIGRpc3BhdGNo
T25JbnNwZWN0b3JCYWNrZW5kVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzV29ya2VyQ29u
dGV4dCgpKTsKLSAgICBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCktPndvcmtl
ckluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKG1lc3Nh
Z2UpOwotfQotI2VuZGlmCi0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnNlbmRNZXNzYWdl
VG9JbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChtX2Fza2VkVG9U
ZXJtaW5hdGUpCi0gICAgICAgIHJldHVybjsKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKLSAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZShjcmVhdGVD
YWxsYmFja1Rhc2soZGlzcGF0Y2hPbkluc3BlY3RvckJhY2tlbmRUYXNrLCBTdHJpbmcobWVzc2Fn
ZSkpLCBXb3JrZXJEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlclRhc2tNb2RlKTsKLSAgICBXb3JrZXJE
ZWJ1Z2dlckFnZW50OjppbnRlcnJ1cHRBbmREaXNwYXRjaEluc3BlY3RvckNvbW1hbmRzKG1fd29y
a2VyVGhyZWFkLmdldCgpKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLXZvaWQgV29ya2VyTWVzc2Fn
aW5nUHJveHk6OndvcmtlckNvbnRleHREZXN0cm95ZWQoKQotewotICAgIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dC0+cG9zdFRhc2soV29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2s6OmNyZWF0ZSh0
aGlzKSk7Ci0gICAgLy8gV2lsbCBleGVjdXRlIHdvcmtlckNvbnRleHREZXN0cm95ZWRJbnRlcm5h
bCgpIG9uIGNvbnRleHQncyB0aHJlYWQuCi19Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6
OndvcmtlckNvbnRleHRDbG9zZWQoKQotewotICAgIC8vIEV4ZWN1dGVzIHRlcm1pbmF0ZVdvcmtl
ckNvbnRleHQoKSBvbiBwYXJlbnQgY29udGV4dCdzIHRocmVhZC4KLSAgICBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPnBvc3RUYXNrKFdvcmtlclRlcm1pbmF0ZVRhc2s6OmNyZWF0ZSh0aGlzKSk7
Ci19Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OndvcmtlckNvbnRleHREZXN0cm95ZWRJ
bnRlcm5hbCgpCi17Ci0gICAgLy8gV29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2sgaXMgYWx3YXlz
IHRoZSBsYXN0IHRvIGJlIHBlcmZvcm1lZCwgc28gdGhlIHByb3h5IGlzIG5vdCBuZWVkZWQgZm9y
IGNvbW11bmljYXRpb24KLSAgICAvLyBpbiBlaXRoZXIgc2lkZSBhbnkgbW9yZS4gSG93ZXZlciwg
dGhlIFdvcmtlciBvYmplY3QgbWF5IHN0aWxsIGV4aXN0LCBhbmQgaXQgYXNzdW1lcyB0aGF0IHRo
ZSBwcm94eSBleGlzdHMsIHRvby4KLSAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVlOwotICAg
IG1fd29ya2VyVGhyZWFkID0gMDsKLQotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d29y
a2VyQ29udGV4dFRlcm1pbmF0ZWQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpLCB0aGlz
KTsKLQotICAgIGlmIChtX21heUJlRGVzdHJveWVkKQotICAgICAgICBkZWxldGUgdGhpczsKLX0K
LQotdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6dGVybWluYXRlV29ya2VyQ29udGV4dCgpCi17
Ci0gICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fYXNr
ZWRUb1Rlcm1pbmF0ZSA9IHRydWU7Ci0KLSAgICBpZiAobV93b3JrZXJUaHJlYWQpCi0gICAgICAg
IG1fd29ya2VyVGhyZWFkLT5zdG9wKCk7Ci0KLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndvcmtlckNvbnRleHRUZXJtaW5hdGVkKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSwg
dGhpcyk7Ci19Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotdm9pZCBXb3JrZXJNZXNzYWdpbmdQ
cm94eTo6cG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQot
ewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soUG9zdE1lc3NhZ2VUb1Bh
Z2VJbnNwZWN0b3JUYXNrOjpjcmVhdGUodGhpcywgbWVzc2FnZSkpOwotfQotCi12b2lkIFdvcmtl
ck1lc3NhZ2luZ1Byb3h5Ojp1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZShjb25zdCBTdHJpbmcm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXb3JrZXJNZXNz
YWdpbmdQcm94eTo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KQotewotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soV29y
a2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrOjpjcmVhdGUodGhpcywgdHJ1ZSwgaGFzUGVuZGlu
Z0FjdGl2aXR5KSk7Ci0gICAgLy8gV2lsbCBleGVjdXRlIHJlcG9ydFBlbmRpbmdBY3Rpdml0eUlu
dGVybmFsKCkgb24gY29udGV4dCdzIHRocmVhZC4KLX0KLQotdm9pZCBXb3JrZXJNZXNzYWdpbmdQ
cm94eTo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQotewot
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soV29ya2VyVGhyZWFkQWN0aXZp
dHlSZXBvcnRUYXNrOjpjcmVhdGUodGhpcywgZmFsc2UsIGhhc1BlbmRpbmdBY3Rpdml0eSkpOwot
ICAgIC8vIFdpbGwgZXhlY3V0ZSByZXBvcnRQZW5kaW5nQWN0aXZpdHlJbnRlcm5hbCgpIG9uIGNv
bnRleHQncyB0aHJlYWQuCi19Ci0KLXZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OnJlcG9ydFBl
bmRpbmdBY3Rpdml0eUludGVybmFsKGJvb2wgY29uZmlybWluZ01lc3NhZ2UsIGJvb2wgaGFzUGVu
ZGluZ0FjdGl2aXR5KQotewotICAgIGlmIChjb25maXJtaW5nTWVzc2FnZSAmJiAhbV9hc2tlZFRv
VGVybWluYXRlKSB7Ci0gICAgICAgIEFTU0VSVChtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50KTsK
LSAgICAgICAgLS1tX3VuY29uZmlybWVkTWVzc2FnZUNvdW50OwotICAgIH0KLQotICAgIG1fd29y
a2VyVGhyZWFkSGFkUGVuZGluZ0FjdGl2aXR5ID0gaGFzUGVuZGluZ0FjdGl2aXR5OwotfQotCi1i
b29sIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewot
ICAgIHJldHVybiAobV91bmNvbmZpcm1lZE1lc3NhZ2VDb3VudCB8fCBtX3dvcmtlclRocmVhZEhh
ZFBlbmRpbmdBY3Rpdml0eSkgJiYgIW1fYXNrZWRUb1Rlcm1pbmF0ZTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmggYi9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGI3Y2JlNTIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJNZXNzYWdpbmdQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqCi0gKi8KLQotI2lmbmRlZiBXb3JrZXJNZXNzYWdpbmdQcm94eV9oCi0jZGVmaW5lIFdvcmtl
ck1lc3NhZ2luZ1Byb3h5X2gKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi0jaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIldvcmtlckNvbnRleHRQcm94eS5oIgot
I2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCi0jaW5jbHVkZSAiV29ya2VyT2JqZWN0UHJv
eHkuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ7
Ci0gICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICBjbGFzcyBXb3JrZXI7Ci0K
LSAgICBjbGFzcyBXb3JrZXJNZXNzYWdpbmdQcm94eSA6IHB1YmxpYyBXb3JrZXJDb250ZXh0UHJv
eHksIHB1YmxpYyBXb3JrZXJPYmplY3RQcm94eSwgcHVibGljIFdvcmtlckxvYWRlclByb3h5IHsK
LSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV29ya2VyTWVzc2FnaW5nUHJveHkpOyBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFdvcmtlck1lc3NhZ2lu
Z1Byb3h5KFdvcmtlciopOwotCi0gICAgICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBXb3JrZXJD
b250ZXh0UHJveHkuCi0gICAgICAgIC8vIChPbmx5IHVzZSB0aGVzZSBtZXRob2RzIGluIHRoZSB3
b3JrZXIgb2JqZWN0IHRocmVhZC4pCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydFdvcmtlckNv
bnRleHQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29u
c3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJUaHJlYWRTdGFydE1vZGUpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgdGVybWluYXRlV29ya2VyQ29udGV4dCgpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5Pik7Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHdvcmtlck9iamVjdERlc3Ryb3llZCgpOwotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0VG9JbnNwZWN0b3IoV29ya2VyQ29udGV4dFByb3h5OjpQ
YWdlSW5zcGVjdG9yKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0RnJvbUluc3Bl
Y3RvcigpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb0luc3BlY3Rvcihjb25z
dCBTdHJpbmcmKTsKLSNlbmRpZgotCi0gICAgICAgIC8vIEltcGxlbWVudGF0aW9ucyBvZiBXb3Jr
ZXJPYmplY3RQcm94eS4KLSAgICAgICAgLy8gKE9ubHkgdXNlIHRoZXNlIG1ldGhvZHMgaW4gdGhl
IHdvcmtlciBjb250ZXh0IHRocmVhZC4pCi0gICAgICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2Fn
ZVRvV29ya2VyT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc093
blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4pOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9z
dEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZVNvdXJjZSwgTWVzc2Fn
ZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rvcihjb25zdCBTdHJpbmcm
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKGNvbnN0
IFN0cmluZyYpOwotI2VuZGlmCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2FnZUZy
b21Xb3JrZXJPYmplY3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHRDbG9zZWQoKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKLQotICAgICAgICAvLyBJbXBsZW1lbnRh
dGlvbiBvZiBXb3JrZXJMb2FkZXJQcm94eS4KLSAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUg
Y2FsbGVkIG9uIGRpZmZlcmVudCB0aHJlYWRzIHRvIHNjaGVkdWxlIGxvYWRpbmcKLSAgICAgICAg
Ly8gcmVxdWVzdHMgYW5kIHRvIHNlbmQgY2FsbGJhY2tzIGJhY2sgdG8gV29ya2VyQ29udGV4dC4K
LSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrPik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwb3N0VGFza0Zv
ck1vZGVUb1dvcmtlckNvbnRleHQoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKLQotICAgICAgICB2b2lkIHdvcmtlclRocmVhZENy
ZWF0ZWQoUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ+KTsKLQotICAgICAgICAvLyBP
bmx5IHVzZSB0aGlzIG1ldGhvZCBvbiB0aGUgd29ya2VyIG9iamVjdCB0aHJlYWQuCi0gICAgICAg
IGJvb2wgYXNrZWRUb1Rlcm1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXNrZWRUb1Rlcm1pbmF0
ZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIE1lc3NhZ2VXb3JrZXJU
YXNrOwotICAgICAgICBmcmllbmQgY2xhc3MgUG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNr
OwotICAgICAgICBmcmllbmQgY2xhc3MgV29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2s7Ci0gICAg
ICAgIGZyaWVuZCBjbGFzcyBXb3JrZXJFeGNlcHRpb25UYXNrOwotICAgICAgICBmcmllbmQgY2xh
c3MgV29ya2VyVGhyZWFkQWN0aXZpdHlSZXBvcnRUYXNrOwotCi0gICAgICAgIHZpcnR1YWwgfldv
cmtlck1lc3NhZ2luZ1Byb3h5KCk7Ci0KLSAgICAgICAgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJv
eWVkSW50ZXJuYWwoKTsKLSAgICAgICAgc3RhdGljIHZvaWQgd29ya2VyT2JqZWN0RGVzdHJveWVk
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdvcmtlck1lc3NhZ2luZ1Byb3h5Kik7
Ci0gICAgICAgIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5SW50ZXJuYWwoYm9vbCBjb25maXJt
aW5nTWVzc2FnZSwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwotICAgICAgICBXb3JrZXIqIHdv
cmtlck9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2VyT2JqZWN0OyB9Ci0KLSAgICAgICAg
UmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
LSAgICAgICAgV29ya2VyKiBtX3dvcmtlck9iamVjdDsKLSAgICAgICAgYm9vbCBtX21heUJlRGVz
dHJveWVkOwotICAgICAgICBSZWZQdHI8RGVkaWNhdGVkV29ya2VyVGhyZWFkPiBtX3dvcmtlclRo
cmVhZDsKLQotICAgICAgICB1bnNpZ25lZCBtX3VuY29uZmlybWVkTWVzc2FnZUNvdW50OyAvLyBV
bmNvbmZpcm1lZCBtZXNzYWdlcyBmcm9tIHdvcmtlciBvYmplY3QgdG8gd29ya2VyIHRocmVhZC4K
LSAgICAgICAgYm9vbCBtX3dvcmtlclRocmVhZEhhZFBlbmRpbmdBY3Rpdml0eTsgLy8gVGhlIGxh
dGVzdCBjb25maXJtYXRpb24gZnJvbSB3b3JrZXIgdGhyZWFkIHJlcG9ydGVkIHRoYXQgaXQgd2Fz
IHN0aWxsIGFjdGl2ZS4KLQotICAgICAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0ZTsKLQotICAg
ICAgICBWZWN0b3I8T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+ID4gbV9xdWV1
ZWRFYXJseVRhc2tzOyAvLyBUYXNrcyBhcmUgcXVldWVkIGhlcmUgdW50aWwgdGhlcmUncyBhIHRo
cmVhZCBvYmplY3QgY3JlYXRlZC4KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICBXb3Jr
ZXJDb250ZXh0UHJveHk6OlBhZ2VJbnNwZWN0b3IqIG1fcGFnZUluc3BlY3RvcjsKLSNlbmRpZgot
ICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JL
RVJTKQotCi0jZW5kaWYgLy8gV29ya2VyTWVzc2FnaW5nUHJveHlfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJPYmplY3RQcm94eS5oIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJPYmplY3RQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzM2UwYmMzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyT2Jq
ZWN0UHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdvcmtlck9i
amVjdFByb3h5X2gKLSNkZWZpbmUgV29ya2VyT2JqZWN0UHJveHlfaAotCi0jaWYgRU5BQkxFKFdP
UktFUlMpCi0KLSNpbmNsdWRlICJXb3JrZXJSZXBvcnRpbmdQcm94eS5oIgotI2luY2x1ZGUgIk1l
c3NhZ2VQb3J0LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0gICAgY2xhc3MgTWVzc2FnZVBvcnRDaGFubmVsOwotCi0gICAgLy8gQSBwcm94
eSB0byB0YWxrIHRvIHRoZSB3b3JrZXIgb2JqZWN0LgotICAgIGNsYXNzIFdvcmtlck9iamVjdFBy
b3h5IDogcHVibGljIFdvcmtlclJlcG9ydGluZ1Byb3h5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiwgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4pID0g
MDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0
KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXBv
cnRQZW5kaW5nQWN0aXZpdHkoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpID0gMDsKLQotICAgICAg
ICAvLyBObyBuZWVkIHRvIG5vdGlmeSB0aGUgcGFyZW50IHBhZ2UgY29udGV4dCB3aGVuIGRlZGlj
YXRlZCB3b3JrZXJzIGFyZSBjbG9zaW5nLgotICAgICAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29u
dGV4dENsb3NlZCgpIHsgfQotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi0jZW5kaWYgLy8gV29ya2VyT2JqZWN0UHJveHlfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSZXBvcnRpbmdQcm94eS5o
IGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSZXBvcnRpbmdQcm94eS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDRhZjIxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3dvcmtlcnMvV29ya2VyUmVwb3J0aW5nUHJveHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIFdvcmtlclJlcG9ydGluZ1Byb3h5X2gKLSNkZWZpbmUgV29ya2VyUmVw
b3J0aW5nUHJveHlfaAotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJDb25zb2xl
VHlwZXMuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLSAgICAvLyBBUElzIHVzZWQgYnkgd29ya2VycyB0byByZXBvcnQgY29uc29sZSBhY3Rpdml0
eS4KLSAgICBjbGFzcyBXb3JrZXJSZXBvcnRpbmdQcm94eSB7Ci0gICAgcHVibGljOgotICAgICAg
ICB2aXJ0dWFsIH5Xb3JrZXJSZXBvcnRpbmdQcm94eSgpIHt9Ci0KLSAgICAgICAgdmlydHVhbCB2
b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKSA9IDA7Ci0KLSAgICAg
ICAgdmlydHVhbCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KE1lc3NhZ2VT
b3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
aW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKSA9IDA7Ci0jaWYgRU5BQkxF
KElOU1BFQ1RPUikKLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9QYWdlSW5zcGVj
dG9yKGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUluc3Bl
Y3RvclN0YXRlQ29va2llKGNvbnN0IFN0cmluZyYpID0gMDsKLSNlbmRpZgotICAgICAgICAvLyBJ
bnZva2VkIHdoZW4gY2xvc2UoKSBpcyBpbnZva2VkIG9uIHRoZSB3b3JrZXIgY29udGV4dC4KLSAg
ICAgICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHRDbG9zZWQoKSA9IDA7Ci0KLSAgICAgICAg
Ly8gSW52b2tlZCB3aGVuIHRoZSB0aHJlYWQgaGFzIHN0b3BwZWQuCi0gICAgICAgIHZpcnR1YWwg
dm9pZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkKCkgPSAwOwotICAgIH07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi0jZW5kaWYgLy8gV29y
a2VyUmVwb3J0aW5nUHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJSdW5Mb29wLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNjY1ZDIuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDIyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLSAKLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXT1JL
RVJTKQotCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlNo
YXJlZFRpbWVyLmgiCi0jaW5jbHVkZSAiVGhyZWFkR2xvYmFsRGF0YS5oIgotI2luY2x1ZGUgIlRo
cmVhZFRpbWVycy5oIgotI2luY2x1ZGUgIldvcmtlclJ1bkxvb3AuaCIKLSNpbmNsdWRlICJXb3Jr
ZXJDb250ZXh0LmgiCi0jaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCi0jaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV29ya2VyU2hhcmVk
VGltZXIgOiBwdWJsaWMgU2hhcmVkVGltZXIgewotcHVibGljOgotICAgIFdvcmtlclNoYXJlZFRp
bWVyKCkKLSAgICAgICAgOiBtX3NoYXJlZFRpbWVyRnVuY3Rpb24oMCkKLSAgICAgICAgLCBtX25l
eHRGaXJlVGltZSgwKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBTaGFyZWRUaW1lciBpbnRlcmZh
Y2UuCi0gICAgdmlydHVhbCB2b2lkIHNldEZpcmVkRnVuY3Rpb24odm9pZCAoKmZ1bmN0aW9uKSgp
KSB7IG1fc2hhcmVkVGltZXJGdW5jdGlvbiA9IGZ1bmN0aW9uOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldEZpcmVJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWwpIHsgbV9uZXh0RmlyZVRpbWUgPSBpbnRl
cnZhbCArIGN1cnJlbnRUaW1lKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIHsgbV9uZXh0
RmlyZVRpbWUgPSAwOyB9Ci0KLSAgICBib29sIGlzQWN0aXZlKCkgeyByZXR1cm4gbV9zaGFyZWRU
aW1lckZ1bmN0aW9uICYmIG1fbmV4dEZpcmVUaW1lOyB9Ci0gICAgZG91YmxlIGZpcmVUaW1lKCkg
eyByZXR1cm4gbV9uZXh0RmlyZVRpbWU7IH0KLSAgICB2b2lkIGZpcmUoKSB7IG1fc2hhcmVkVGlt
ZXJGdW5jdGlvbigpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCAoKm1fc2hhcmVkVGltZXJGdW5j
dGlvbikoKTsKLSAgICBkb3VibGUgbV9uZXh0RmlyZVRpbWU7Ci19OwotCi1jbGFzcyBNb2RlUHJl
ZGljYXRlIHsKLXB1YmxpYzoKLSAgICBNb2RlUHJlZGljYXRlKGNvbnN0IFN0cmluZyYgbW9kZSkK
LSAgICAgICAgOiBtX21vZGUobW9kZSkKLSAgICAgICAgLCBtX2RlZmF1bHRNb2RlKG1vZGUgPT0g
V29ya2VyUnVuTG9vcDo6ZGVmYXVsdE1vZGUoKSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBp
c0RlZmF1bHRNb2RlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RlZmF1bHRNb2Rl
OwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IoKShXb3JrZXJSdW5Mb29wOjpUYXNrKiB0YXNr
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZGVmYXVsdE1vZGUgfHwgbV9tb2RlID09
IHRhc2stPm1vZGUoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fbW9kZTsKLSAg
ICBib29sIG1fZGVmYXVsdE1vZGU7Ci19OwotCi1Xb3JrZXJSdW5Mb29wOjpXb3JrZXJSdW5Mb29w
KCkKLSAgICA6IG1fc2hhcmVkVGltZXIoYWRvcHRQdHIobmV3IFdvcmtlclNoYXJlZFRpbWVyKSkK
LSAgICAsIG1fbmVzdGVkQ291bnQoMCkKLSAgICAsIG1fdW5pcXVlSWQoMCkKLXsKLX0KLQotV29y
a2VyUnVuTG9vcDo6fldvcmtlclJ1bkxvb3AoKQotewotICAgIEFTU0VSVCghbV9uZXN0ZWRDb3Vu
dCk7Ci19Ci0KLVN0cmluZyBXb3JrZXJSdW5Mb29wOjpkZWZhdWx0TW9kZSgpCi17Ci0gICAgcmV0
dXJuIFN0cmluZygpOwotfQotCi1jbGFzcyBSdW5Mb29wU2V0dXAgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFJ1bkxvb3BTZXR1cCk7Ci1wdWJsaWM6Ci0gICAgUnVuTG9vcFNldHVwKFdvcmtl
clJ1bkxvb3AmIHJ1bkxvb3ApCi0gICAgICAgIDogbV9ydW5Mb29wKHJ1bkxvb3ApCi0gICAgewot
ICAgICAgICBpZiAoIW1fcnVuTG9vcC5tX25lc3RlZENvdW50KQotICAgICAgICAgICAgdGhyZWFk
R2xvYmFsRGF0YSgpLnRocmVhZFRpbWVycygpLnNldFNoYXJlZFRpbWVyKG1fcnVuTG9vcC5tX3No
YXJlZFRpbWVyLmdldCgpKTsKLSAgICAgICAgbV9ydW5Mb29wLm1fbmVzdGVkQ291bnQrKzsKLSAg
ICB9Ci0KLSAgICB+UnVuTG9vcFNldHVwKCkKLSAgICB7Ci0gICAgICAgIG1fcnVuTG9vcC5tX25l
c3RlZENvdW50LS07Ci0gICAgICAgIGlmICghbV9ydW5Mb29wLm1fbmVzdGVkQ291bnQpCi0gICAg
ICAgICAgICB0aHJlYWRHbG9iYWxEYXRhKCkudGhyZWFkVGltZXJzKCkuc2V0U2hhcmVkVGltZXIo
MCk7Ci0gICAgfQotcHJpdmF0ZToKLSAgICBXb3JrZXJSdW5Mb29wJiBtX3J1bkxvb3A7Ci19Owot
Ci12b2lkIFdvcmtlclJ1bkxvb3A6OnJ1bihXb3JrZXJDb250ZXh0KiBjb250ZXh0KQotewotICAg
IFJ1bkxvb3BTZXR1cCBzZXR1cCgqdGhpcyk7Ci0gICAgTW9kZVByZWRpY2F0ZSBtb2RlUHJlZGlj
YXRlKGRlZmF1bHRNb2RlKCkpOwotICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgcmVzdWx0Owot
ICAgIGRvIHsKLSAgICAgICAgcmVzdWx0ID0gcnVuSW5Nb2RlKGNvbnRleHQsIG1vZGVQcmVkaWNh
dGUsIFdhaXRGb3JNZXNzYWdlKTsKLSAgICB9IHdoaWxlIChyZXN1bHQgIT0gTWVzc2FnZVF1ZXVl
VGVybWluYXRlZCk7Ci0gICAgcnVuQ2xlYW51cFRhc2tzKGNvbnRleHQpOwotfQotCi1NZXNzYWdl
UXVldWVXYWl0UmVzdWx0IFdvcmtlclJ1bkxvb3A6OnJ1bkluTW9kZShXb3JrZXJDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBTdHJpbmcmIG1vZGUsIFdhaXRNb2RlIHdhaXRNb2RlKQotewotICAgIFJ1
bkxvb3BTZXR1cCBzZXR1cCgqdGhpcyk7Ci0gICAgTW9kZVByZWRpY2F0ZSBtb2RlUHJlZGljYXRl
KG1vZGUpOwotICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgcmVzdWx0ID0gcnVuSW5Nb2RlKGNv
bnRleHQsIG1vZGVQcmVkaWNhdGUsIHdhaXRNb2RlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1NZXNzYWdlUXVldWVXYWl0UmVzdWx0IFdvcmtlclJ1bkxvb3A6OnJ1bkluTW9kZShXb3JrZXJD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBNb2RlUHJlZGljYXRlJiBwcmVkaWNhdGUsIFdhaXRNb2Rl
IHdhaXRNb2RlKQotewotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBBU1NFUlQoY29udGV4dC0+
dGhyZWFkKCkpOwotICAgIEFTU0VSVChjb250ZXh0LT50aHJlYWQoKS0+dGhyZWFkSUQoKSA9PSBj
dXJyZW50VGhyZWFkKCkpOwotCi0gICAgZG91YmxlIGFic29sdXRlVGltZSA9IDAuMDsKLSAgICBp
ZiAod2FpdE1vZGUgPT0gV2FpdEZvck1lc3NhZ2UpCi0gICAgICAgIGFic29sdXRlVGltZSA9IChw
cmVkaWNhdGUuaXNEZWZhdWx0TW9kZSgpICYmIG1fc2hhcmVkVGltZXItPmlzQWN0aXZlKCkpID8g
bV9zaGFyZWRUaW1lci0+ZmlyZVRpbWUoKSA6IE1lc3NhZ2VRdWV1ZTxUYXNrPjo6aW5maW5pdGVU
aW1lKCk7Ci0gICAgTWVzc2FnZVF1ZXVlV2FpdFJlc3VsdCByZXN1bHQ7Ci0gICAgT3duUHRyPFdv
cmtlclJ1bkxvb3A6OlRhc2s+IHRhc2sgPSBtX21lc3NhZ2VRdWV1ZS53YWl0Rm9yTWVzc2FnZUZp
bHRlcmVkV2l0aFRpbWVvdXQocmVzdWx0LCBwcmVkaWNhdGUsIGFic29sdXRlVGltZSk7Ci0KLSAg
ICAvLyBJZiB0aGUgY29udGV4dCBpcyBjbG9zaW5nLCBkb24ndCBleGVjdXRlIGFueSBmdXJ0aGVy
IEphdmFTY3JpcHQgdGFza3MgKHBlciBzZWN0aW9uIDQuMS4xIG9mIHRoZSBXZWIgV29ya2VycyBz
cGVjKS4gIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBpbXBsZW1lbnRhdGlvbiBjbGVhbnVwIHRhc2tz
IGluIHRoZSBxdWV1ZSwgc28ga2VlcCBydW5uaW5nIHRocm91Z2ggaXQuCi0KLSAgICBzd2l0Y2gg
KHJlc3VsdCkgewotICAgIGNhc2UgTWVzc2FnZVF1ZXVlVGVybWluYXRlZDoKLSAgICAgICAgYnJl
YWs7Ci0KLSAgICBjYXNlIE1lc3NhZ2VRdWV1ZU1lc3NhZ2VSZWNlaXZlZDoKLSAgICAgICAgdGFz
ay0+cGVyZm9ybVRhc2soKnRoaXMsIGNvbnRleHQpOwotICAgICAgICBicmVhazsKLQotICAgIGNh
c2UgTWVzc2FnZVF1ZXVlVGltZW91dDoKLSAgICAgICAgaWYgKCFjb250ZXh0LT5pc0Nsb3Npbmco
KSkKLSAgICAgICAgICAgIG1fc2hhcmVkVGltZXItPmZpcmUoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBXb3JrZXJSdW5Mb29wOjpydW5D
bGVhbnVwVGFza3MoV29ya2VyQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBBU1NFUlQoY29udGV4
dCk7Ci0gICAgQVNTRVJUKGNvbnRleHQtPnRocmVhZCgpKTsKLSAgICBBU1NFUlQoY29udGV4dC0+
dGhyZWFkKCktPnRocmVhZElEKCkgPT0gY3VycmVudFRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9t
ZXNzYWdlUXVldWUua2lsbGVkKCkpOwotCi0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgT3du
UHRyPFdvcmtlclJ1bkxvb3A6OlRhc2s+IHRhc2sgPSBtX21lc3NhZ2VRdWV1ZS50cnlHZXRNZXNz
YWdlSWdub3JpbmdLaWxsZWQoKTsKLSAgICAgICAgaWYgKCF0YXNrKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygqdGhpcywgY29udGV4dCk7Ci0gICAgfQot
fQotCi12b2lkIFdvcmtlclJ1bkxvb3A6OnRlcm1pbmF0ZSgpCi17Ci0gICAgbV9tZXNzYWdlUXVl
dWUua2lsbCgpOwotfQotCi12b2lkIFdvcmtlclJ1bkxvb3A6OnBvc3RUYXNrKFBhc3NPd25QdHI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKLXsKLSAgICBwb3N0VGFza0Zvck1v
ZGUodGFzaywgZGVmYXVsdE1vZGUoKSk7Ci19Ci0KLXZvaWQgV29ya2VyUnVuTG9vcDo6cG9zdFRh
c2tGb3JNb2RlKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywg
Y29uc3QgU3RyaW5nJiBtb2RlKQotewotICAgIG1fbWVzc2FnZVF1ZXVlLmFwcGVuZChUYXNrOjpj
cmVhdGUodGFzaywgbW9kZS5pc29sYXRlZENvcHkoKSkpOwotfQotCi1QYXNzT3duUHRyPFdvcmtl
clJ1bkxvb3A6OlRhc2s+IFdvcmtlclJ1bkxvb3A6OlRhc2s6OmNyZWF0ZShQYXNzT3duUHRyPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSkKLXsK
LSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRhc2sodGFzaywgbW9kZSkpOwotfQotCi12b2lkIFdv
cmtlclJ1bkxvb3A6OlRhc2s6OnBlcmZvcm1UYXNrKGNvbnN0IFdvcmtlclJ1bkxvb3AmIHJ1bkxv
b3AsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgV29ya2VyQ29udGV4
dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQgKj4oY29udGV4dCk7
Ci0gICAgaWYgKCghd29ya2VyQ29udGV4dC0+aXNDbG9zaW5nKCkgJiYgIXJ1bkxvb3AudGVybWlu
YXRlZCgpKSB8fCBtX3Rhc2stPmlzQ2xlYW51cFRhc2soKSkKLSAgICAgICAgbV90YXNrLT5wZXJm
b3JtVGFzayhjb250ZXh0KTsKLX0KLQotV29ya2VyUnVuTG9vcDo6VGFzazo6VGFzayhQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9k
ZSkKLSAgICA6IG1fdGFzayh0YXNrKQotICAgICwgbV9tb2RlKG1vZGUuaXNvbGF0ZWRDb3B5KCkp
Ci17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JL
RVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmgg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMzkxNmQ2YS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlclJ1bkxvb3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBXb3JrZXJSdW5Mb29wX2gKLSNkZWZpbmUgV29ya2VyUnVuTG9vcF9oCi0KLSNpZiBFTkFC
TEUoV09SS0VSUykKLQotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNs
dWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNz
IE1vZGVQcmVkaWNhdGU7Ci0gICAgY2xhc3MgV29ya2VyQ29udGV4dDsKLSAgICBjbGFzcyBXb3Jr
ZXJTaGFyZWRUaW1lcjsKLQotICAgIGNsYXNzIFdvcmtlclJ1bkxvb3AgewotICAgIHB1YmxpYzoK
LSAgICAgICAgV29ya2VyUnVuTG9vcCgpOwotICAgICAgICB+V29ya2VyUnVuTG9vcCgpOwotICAg
ICAgICAKLSAgICAgICAgLy8gQmxvY2tpbmcgY2FsbC4gV2FpdHMgZm9yIHRhc2tzIGFuZCB0aW1l
cnMsIGludm9rZXMgdGhlIGNhbGxiYWNrcy4KLSAgICAgICAgdm9pZCBydW4oV29ya2VyQ29udGV4
dCopOwotCi0gICAgICAgIGVudW0gV2FpdE1vZGUgeyBXYWl0Rm9yTWVzc2FnZSwgRG9udFdhaXRG
b3JNZXNzYWdlIH07Ci0KLSAgICAgICAgLy8gV2FpdHMgZm9yIGEgc2luZ2xlIHRhc2sgYW5kIHJl
dHVybnMuCi0gICAgICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgcnVuSW5Nb2RlKFdvcmtlckNv
bnRleHQqLCBjb25zdCBTdHJpbmcmIG1vZGUsIFdhaXRNb2RlID0gV2FpdEZvck1lc3NhZ2UpOwot
Ci0gICAgICAgIHZvaWQgdGVybWluYXRlKCk7Ci0gICAgICAgIGJvb2wgdGVybWluYXRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWVzc2FnZVF1ZXVlLmtpbGxlZCgpOyB9Ci0KLSAgICAgICAgdm9pZCBw
b3N0VGFzayhQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKLSAgICAg
ICAgdm9pZCBwb3N0VGFza0Zvck1vZGUoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKLQotICAgICAgICB1bnNpZ25lZCBsb25nIGNy
ZWF0ZVVuaXF1ZUlkKCkgeyByZXR1cm4gKyttX3VuaXF1ZUlkOyB9Ci0KLSAgICAgICAgc3RhdGlj
IFN0cmluZyBkZWZhdWx0TW9kZSgpOwotCi0gICAgICAgIGNsYXNzIFRhc2sgewotICAgICAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGFzayk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBzdGF0aWMgUGFzc093blB0cjxUYXNrPiBjcmVh
dGUoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBT
dHJpbmcmIG1vZGUpOwotICAgICAgICAgICAgflRhc2soKSB7IH0KLSAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAgICAgICAgICAgdm9p
ZCBwZXJmb3JtVGFzayhjb25zdCBXb3JrZXJSdW5Mb29wJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOwotCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBUYXNrKFBhc3NPd25QdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKTsKLSAg
ICAgICAgCi0gICAgICAgICAgICBPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4g
bV90YXNrOwotICAgICAgICAgICAgU3RyaW5nIG1fbW9kZTsKLSAgICAgICAgfTsKLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBSdW5Mb29wU2V0dXA7Ci0gICAgICAgIE1lc3Nh
Z2VRdWV1ZVdhaXRSZXN1bHQgcnVuSW5Nb2RlKFdvcmtlckNvbnRleHQqLCBjb25zdCBNb2RlUHJl
ZGljYXRlJiwgV2FpdE1vZGUpOwotCi0gICAgICAgIC8vIFJ1bnMgYW55IGNsZWFuIHVwIHRhc2tz
IHRoYXQgYXJlIGN1cnJlbnRseSBpbiB0aGUgcXVldWUgYW5kIHJldHVybnMuCi0gICAgICAgIC8v
IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIGNvbnRleHQgaXMgY2xvc2VkIG9y
IGxvb3AgaGFzIGJlZW4gdGVybWluYXRlZC4KLSAgICAgICAgdm9pZCBydW5DbGVhbnVwVGFza3Mo
V29ya2VyQ29udGV4dCopOwotCi0gICAgICAgIE1lc3NhZ2VRdWV1ZTxUYXNrPiBtX21lc3NhZ2VR
dWV1ZTsKLSAgICAgICAgT3duUHRyPFdvcmtlclNoYXJlZFRpbWVyPiBtX3NoYXJlZFRpbWVyOwot
ICAgICAgICBpbnQgbV9uZXN0ZWRDb3VudDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBtX3VuaXF1
ZUlkOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShXT1JLRVJTKQotCi0jZW5kaWYgLy8gV29ya2VyUnVuTG9vcF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGE5MzJiZTkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJTY3JpcHRMb2FkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV09SS0VSUykK
LQotI2luY2x1ZGUgIldvcmtlclNjcmlwdExvYWRlci5oIgotCi0jaW5jbHVkZSAiQ3Jvc3NUaHJl
YWRUYXNrLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1
ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKLSNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCi0j
aW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5oIgotCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1Xb3JrZXJTY3JpcHRMb2FkZXI6OldvcmtlclNjcmlwdExvYWRlcigpCi0gICAg
OiBtX2NsaWVudCgwKQotICAgICwgbV9zY3JpcHQoIiIpCi0gICAgLCBtX2ZhaWxlZChmYWxzZSkK
LSAgICAsIG1faWRlbnRpZmllcigwKQotICAgICwgbV9maW5pc2hpbmcoZmFsc2UpCi0jaWYgUExB
VEZPUk0oQ0hST01JVU0pCi0gICAgLCBtX3RhcmdldFR5cGUoUmVzb3VyY2VSZXF1ZXN0OjpUYXJn
ZXRJc1dvcmtlcikKLSNlbmRpZgotewotfQotCi1Xb3JrZXJTY3JpcHRMb2FkZXI6On5Xb3JrZXJT
Y3JpcHRMb2FkZXIoKQotewotfQotCi12b2lkIFdvcmtlclNjcmlwdExvYWRlcjo6bG9hZFN5bmNo
cm9ub3VzbHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
Y29uc3QgS1VSTCYgdXJsLCBDcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgY3Jvc3NPcmlnaW5SZXF1
ZXN0UG9saWN5KQotewotICAgIG1fdXJsID0gdXJsOwotCi0gICAgT3duUHRyPFJlc291cmNlUmVx
dWVzdD4gcmVxdWVzdChjcmVhdGVSZXNvdXJjZVJlcXVlc3QoKSk7Ci0gICAgaWYgKCFyZXF1ZXN0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
aXNXb3JrZXJDb250ZXh0KCkpOwotCi0gICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9u
czsKLSAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSBBbGxvd1N0b3JlZENyZWRlbnRpYWxz
OwotICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gY3Jvc3NPcmlnaW5SZXF1
ZXN0UG9saWN5OwotICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgPSBTZW5kQ2FsbGJhY2tz
OwotCi0gICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCksICpy
ZXF1ZXN0LCAqdGhpcywgb3B0aW9ucyk7Ci19Ci0gICAgCi12b2lkIFdvcmtlclNjcmlwdExvYWRl
cjo6bG9hZEFzeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCwgQ3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5IGNy
b3NzT3JpZ2luUmVxdWVzdFBvbGljeSwgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50KiBjbGllbnQp
Ci17Ci0gICAgQVNTRVJUKGNsaWVudCk7Ci0gICAgbV9jbGllbnQgPSBjbGllbnQ7Ci0gICAgbV91
cmwgPSB1cmw7Ci0KLSAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiByZXF1ZXN0KGNyZWF0ZVJl
c291cmNlUmVxdWVzdCgpKTsKLSAgICBpZiAoIXJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7Ci0gICAgb3B0aW9ucy5hbGxvd0Ny
ZWRlbnRpYWxzID0gQWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLSAgICBvcHRpb25zLmNyb3NzT3Jp
Z2luUmVxdWVzdFBvbGljeSA9IGNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeTsKLSAgICBvcHRpb25z
LnNlbmRMb2FkQ2FsbGJhY2tzID0gU2VuZENhbGxiYWNrczsKLQotICAgIC8vIER1cmluZyBjcmVh
dGUsIGNhbGxiYWNrcyBtYXkgaGFwcGVuIHdoaWNoIHJlbW92ZSB0aGUgbGFzdCByZWZlcmVuY2Ug
dG8gdGhpcyBvYmplY3QuCi0gICAgUmVmUHRyPFdvcmtlclNjcmlwdExvYWRlcj4gcHJvdGVjdCh0
aGlzKTsKLSAgICBtX3RocmVhZGFibGVMb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdGhpcywgKnJlcXVlc3QsIG9wdGlvbnMpOwotfQotCi1j
b25zdCBLVVJMJiBXb3JrZXJTY3JpcHRMb2FkZXI6OnJlc3BvbnNlVVJMKCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQoIWZhaWxlZCgpKTsKLSAgICByZXR1cm4gbV9yZXNwb25zZVVSTDsKLX0KLQotUGFz
c093blB0cjxSZXNvdXJjZVJlcXVlc3Q+IFdvcmtlclNjcmlwdExvYWRlcjo6Y3JlYXRlUmVzb3Vy
Y2VSZXF1ZXN0KCkKLXsKLSAgICBPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiByZXF1ZXN0ID0gYWRv
cHRQdHIobmV3IFJlc291cmNlUmVxdWVzdChtX3VybCkpOwotICAgIHJlcXVlc3QtPnNldEhUVFBN
ZXRob2QoIkdFVCIpOwotI2lmIFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShCTEFDS0JF
UlJZKQotICAgIHJlcXVlc3QtPnNldFRhcmdldFR5cGUobV90YXJnZXRUeXBlKTsKLSNlbmRpZgot
ICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKLX0KLSAgICAKLXZvaWQgV29ya2VyU2NyaXB0
TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBpZiAocmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKSAvIDEwMCAhPSAyICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpIHsKLSAg
ICAgICAgbV9mYWlsZWQgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fcmVz
cG9uc2VVUkwgPSByZXNwb25zZS51cmwoKTsKLSAgICBtX3Jlc3BvbnNlRW5jb2RpbmcgPSByZXNw
b25zZS50ZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2Ns
aWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKLX0KLQotdm9p
ZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBsZW4pCi17Ci0gICAgaWYgKG1fZmFpbGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IW1fZGVjb2RlcikgewotICAgICAgICBpZiAoIW1fcmVzcG9uc2VFbmNvZGluZy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRl
eHQvamF2YXNjcmlwdCIsIG1fcmVzcG9uc2VFbmNvZGluZyk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9qYXZh
c2NyaXB0IiwgIlVURi04Iik7Ci0gICAgfQotCi0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBpZiAobGVuID09IC0xKQotICAgICAgICBsZW4gPSBzdHJsZW4oZGF0YSk7
Ci0gICAgCi0gICAgbV9zY3JpcHQgKz0gbV9kZWNvZGVyLT5kZWNvZGUoZGF0YSwgbGVuKTsKLX0K
LQotdm9pZCBXb3JrZXJTY3JpcHRMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBkb3VibGUpCi17Ci0gICAgaWYgKG1fZmFpbGVkKSB7Ci0gICAgICAgIG5v
dGlmeUVycm9yKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9kZWNvZGVy
KQotICAgICAgICBtX3NjcmlwdCArPSBtX2RlY29kZXItPmZsdXNoKCk7Ci0KLSAgICBtX2lkZW50
aWZpZXIgPSBpZGVudGlmaWVyOwotICAgIG5vdGlmeUZpbmlzaGVkKCk7Ci19Ci0KLXZvaWQgV29y
a2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKQotewotICAgIG5v
dGlmeUVycm9yKCk7Ci19Ci0KLXZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpkaWRGYWlsUmVkaXJl
Y3RDaGVjaygpCi17Ci0gICAgbm90aWZ5RXJyb3IoKTsKLX0KLQotdm9pZCBXb3JrZXJTY3JpcHRM
b2FkZXI6Om5vdGlmeUVycm9yKCkKLXsKLSAgICBtX2ZhaWxlZCA9IHRydWU7Ci0gICAgbm90aWZ5
RmluaXNoZWQoKTsKLX0KLSAgICAKLXZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpub3RpZnlGaW5p
c2hlZCgpCi17Ci0gICAgaWYgKCFtX2NsaWVudCB8fCBtX2ZpbmlzaGluZykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9maW5pc2hpbmcgPSB0cnVlOwotICAgIG1fY2xpZW50LT5ub3RpZnlGaW5p
c2hlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V09SS0VSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0
TG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWJiNzYzLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICovCi0KLSNpZm5kZWYgV29ya2VyU2NyaXB0TG9h
ZGVyX2gKLSNkZWZpbmUgV29ya2VyU2NyaXB0TG9hZGVyX2gKLQotI2lmIEVOQUJMRShXT1JLRVJT
KQotCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2lu
Y2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKLSNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50LmgiCi0KLSNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0gICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotICAgIGNsYXNzIFJlc291cmNl
UmVzcG9uc2U7Ci0gICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLSAgICBjbGFzcyBU
ZXh0UmVzb3VyY2VEZWNvZGVyOwotICAgIGNsYXNzIFdvcmtlclNjcmlwdExvYWRlckNsaWVudDsK
LQotICAgIGNsYXNzIFdvcmtlclNjcmlwdExvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtl
clNjcmlwdExvYWRlcj4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsKLSAgICAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxXb3JrZXJTY3JpcHRMb2FkZXI+IGNyZWF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyU2NyaXB0TG9hZGVyKCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBsb2FkU3luY2hyb25vdXNseShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgS1VSTCYsIENyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSk7Ci0gICAgICAgIHZvaWQg
bG9hZEFzeW5jaHJvbm91c2x5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiwg
Q3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5LCBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQqKTsKLQot
ICAgICAgICB2b2lkIG5vdGlmeUVycm9yKCk7Ci0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBzY3Jp
cHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdDsgfQotICAgICAgICBjb25zdCBLVVJMJiB1cmwo
KSBjb25zdCB7IHJldHVybiBtX3VybDsgfQotICAgICAgICBjb25zdCBLVVJMJiByZXNwb25zZVVS
TCgpIGNvbnN0OwotICAgICAgICBib29sIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVk
OyB9Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1f
aWRlbnRpZmllcjsgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2Uo
dW5zaWduZWQgbG9uZyAvKmlkZW50aWZpZXIqLywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50
IGRhdGFMZW5ndGgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
YWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxS
ZWRpcmVjdENoZWNrKCk7Ci0KLSNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oQkxB
Q0tCRVJSWSkKLSAgICAgICAgdm9pZCBzZXRUYXJnZXRUeXBlKFJlc291cmNlUmVxdWVzdDo6VGFy
Z2V0VHlwZSB0YXJnZXRUeXBlKSB7IG1fdGFyZ2V0VHlwZSA9IHRhcmdldFR5cGU7IH0KLSNlbmRp
ZgotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIFdURjo6UmVmQ291bnRlZDxX
b3JrZXJTY3JpcHRMb2FkZXI+OwotCi0gICAgICAgIFdvcmtlclNjcmlwdExvYWRlcigpOwotICAg
ICAgICB+V29ya2VyU2NyaXB0TG9hZGVyKCk7Ci0KLSAgICAgICAgUGFzc093blB0cjxSZXNvdXJj
ZVJlcXVlc3Q+IGNyZWF0ZVJlc291cmNlUmVxdWVzdCgpOwotICAgICAgICB2b2lkIG5vdGlmeUZp
bmlzaGVkKCk7Ci0KLSAgICAgICAgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50KiBtX2NsaWVudDsK
LSAgICAgICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IG1fdGhyZWFkYWJsZUxvYWRlcjsKLSAg
ICAgICAgU3RyaW5nIG1fcmVzcG9uc2VFbmNvZGluZzsgICAgICAgIAotICAgICAgICBSZWZQdHI8
VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOwotICAgICAgICBTdHJpbmcgbV9zY3JpcHQ7
Ci0gICAgICAgIEtVUkwgbV91cmw7Ci0gICAgICAgIEtVUkwgbV9yZXNwb25zZVVSTDsKLSAgICAg
ICAgYm9vbCBtX2ZhaWxlZDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBtX2lkZW50aWZpZXI7Ci0g
ICAgICAgIGJvb2wgbV9maW5pc2hpbmc7Ci0jaWYgUExBVEZPUk0oQ0hST01JVU0pIHx8IFBMQVRG
T1JNKEJMQUNLQkVSUlkpCi0gICAgICAgIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0VHlwZSBtX3Rh
cmdldFR5cGU7Ci0jZW5kaWYKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoV09SS0VSUykKLQotI2VuZGlmIC8vIFdvcmtlclNjcmlwdExvYWRlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlckNs
aWVudC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzcxZjliNy4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlckNsaWVudC5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICovCi0KLSNpZm5kZWYgV29ya2VyU2NyaXB0
TG9hZGVyQ2xpZW50X2gKLSNkZWZpbmUgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50X2gKLQotI2lm
IEVOQUJMRShXT1JLRVJTKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBSZXNv
dXJjZVJlc3BvbnNlOwotCi0gICAgY2xhc3MgV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50IHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWdu
ZWQgbG9uZyAvKmlkZW50aWZpZXIqLywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQotCi0g
ICAgICAgIC8vIEZJWE1FOiBub3RpZnlGaW5pc2hlZCgpIGlzIG5vdCBjdXJyZW50bHkgZ3VhcmFu
dGVlZCB0byBiZSBpbnZva2VkIGlmIHVzZWQgZnJvbSB3b3JrZXIgY29udGV4dCBhbmQgdGhlIHdv
cmtlciBzaHV0cyBkb3duIGluIHRoZSBtaWRkbGUgb2YgYW4gb3BlcmF0aW9uLgotICAgICAgICAv
LyBUaGlzIHdpbGwgY2F1c2UgbGVha3Mgd2hlbiB3ZSBzdXBwb3J0IG5lc3RlZCB3b3JrZXJzLgot
ICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoKSB7IH0KLQotICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgdmlydHVhbCB+V29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50KCkgeyB9Ci0gICAg
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMp
Ci0KLSNlbmRpZiAvLyBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJUaHJlYWQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmRl
ODAwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDI4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJXb3JrZXJUaHJl
YWQuaCIKLQotI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgotI2luY2x1ZGUgIkRlZGljYXRl
ZFdvcmtlckNvbnRleHQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIK
LSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRl
ICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRl
ICJUaHJlYWRHbG9iYWxEYXRhLmgiCi0KLSNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSNpbmNsdWRlICJE
YXRhYmFzZVRhc2suaCIKLSNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKLSNlbmRpZgotCi0j
aWYgUExBVEZPUk0oQ0hST01JVU0pCi0jaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+Ci0jaW5j
bHVkZSA8cHVibGljL1dlYldvcmtlclJ1bkxvb3AuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBNdXRleCYgdGhyZWFkQ291bnRNdXRleCgpCi17Ci0gICAgQXRvbWlj
YWxseUluaXRpYWxpemVkU3RhdGljKE11dGV4JiwgbXV0ZXggPSAqbmV3IE11dGV4KTsKLSAgICBy
ZXR1cm4gbXV0ZXg7Ci19Ci0KLXVuc2lnbmVkIFdvcmtlclRocmVhZDo6bV90aHJlYWRDb3VudCA9
IDA7Ci0KLXVuc2lnbmVkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkQ291bnQoKQotewotICAg
IE11dGV4TG9ja2VyIGxvY2sodGhyZWFkQ291bnRNdXRleCgpKTsKLSAgICByZXR1cm4gbV90aHJl
YWRDb3VudDsKLX0KLQotc3RydWN0IFdvcmtlclRocmVhZFN0YXJ0dXBEYXRhIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShXb3JrZXJUaHJlYWRTdGFydHVwRGF0YSk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdvcmtlclRocmVhZFN0
YXJ0dXBEYXRhPiBjcmVhdGUoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVz
ZXJBZ2VudCwgY29uc3QgR3JvdXBTZXR0aW5ncyogc2V0dGluZ3MsIGNvbnN0IFN0cmluZyYgc291
cmNlQ29kZSwgV29ya2VyVGhyZWFkU3RhcnRNb2RlIHN0YXJ0TW9kZSwgY29uc3QgU3RyaW5nJiBj
b250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGVhZGVyVHlwZSBj
b250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBXb3JrZXJUaHJlYWRTdGFydHVwRGF0YShzY3JpcHRVUkwsIHVzZXJBZ2VudCwgc2V0dGlu
Z3MsIHNvdXJjZUNvZGUsIHN0YXJ0TW9kZSwgY29udGVudFNlY3VyaXR5UG9saWN5LCBjb250ZW50
U2VjdXJpdHlQb2xpY3lUeXBlKSk7Ci0gICAgfQotCi0gICAgS1VSTCBtX3NjcmlwdFVSTDsKLSAg
ICBTdHJpbmcgbV91c2VyQWdlbnQ7Ci0gICAgT3duUHRyPEdyb3VwU2V0dGluZ3M+IG1fZ3JvdXBT
ZXR0aW5nczsKLSAgICBTdHJpbmcgbV9zb3VyY2VDb2RlOwotICAgIFdvcmtlclRocmVhZFN0YXJ0
TW9kZSBtX3N0YXJ0TW9kZTsKLSAgICBTdHJpbmcgbV9jb250ZW50U2VjdXJpdHlQb2xpY3k7Ci0g
ICAgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlIG1fY29udGVudFNlY3VyaXR5UG9s
aWN5VHlwZTsKLXByaXZhdGU6Ci0gICAgV29ya2VyVGhyZWFkU3RhcnR1cERhdGEoY29uc3QgS1VS
TCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgR3JvdXBTZXR0aW5n
cyosIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyVGhyZWFkU3RhcnRNb2RlLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpI
ZWFkZXJUeXBlIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5cGUpOwotfTsKLQotV29ya2VyVGhyZWFk
U3RhcnR1cERhdGE6OldvcmtlclRocmVhZFN0YXJ0dXBEYXRhKGNvbnN0IEtVUkwmIHNjcmlwdFVS
TCwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IEdyb3VwU2V0dGluZ3MqIHNldHRpbmdz
LCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFdvcmtlclRocmVhZFN0YXJ0TW9kZSBzdGFydE1v
ZGUsIGNvbnN0IFN0cmluZyYgY29udGVudFNlY3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OkhlYWRlclR5cGUgY29udGVudFNlY3VyaXR5UG9saWN5VHlwZSkKLSAgICA6IG1fc2Ny
aXB0VVJMKHNjcmlwdFVSTC5jb3B5KCkpCi0gICAgLCBtX3VzZXJBZ2VudCh1c2VyQWdlbnQuaXNv
bGF0ZWRDb3B5KCkpCi0gICAgLCBtX3NvdXJjZUNvZGUoc291cmNlQ29kZS5pc29sYXRlZENvcHko
KSkKLSAgICAsIG1fc3RhcnRNb2RlKHN0YXJ0TW9kZSkKLSAgICAsIG1fY29udGVudFNlY3VyaXR5
UG9saWN5KGNvbnRlbnRTZWN1cml0eVBvbGljeS5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1fY29u
dGVudFNlY3VyaXR5UG9saWN5VHlwZShjb250ZW50U2VjdXJpdHlQb2xpY3lUeXBlKQotewotICAg
IGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZ3JvdXBTZXR0aW5ncyA9
IEdyb3VwU2V0dGluZ3M6OmNyZWF0ZSgpOwotICAgIG1fZ3JvdXBTZXR0aW5ncy0+c2V0TG9jYWxT
dG9yYWdlUXVvdGFCeXRlcyhzZXR0aW5ncy0+bG9jYWxTdG9yYWdlUXVvdGFCeXRlcygpKTsKLSAg
ICBtX2dyb3VwU2V0dGluZ3MtPnNldEluZGV4ZWREQlF1b3RhQnl0ZXMoc2V0dGluZ3MtPmluZGV4
ZWREQlF1b3RhQnl0ZXMoKSk7Ci0gICAgbV9ncm91cFNldHRpbmdzLT5zZXRJbmRleGVkREJEYXRh
YmFzZVBhdGgoc2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpLmlzb2xhdGVkQ29weSgp
KTsKLX0KLQotV29ya2VyVGhyZWFkOjpXb3JrZXJUaHJlYWQoY29uc3QgS1VSTCYgc2NyaXB0VVJM
LCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3QgR3JvdXBTZXR0aW5ncyogc2V0dGluZ3Ms
IGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgV29ya2VyTG9hZGVyUHJveHkmIHdvcmtlckxvYWRl
clByb3h5LCBXb3JrZXJSZXBvcnRpbmdQcm94eSYgd29ya2VyUmVwb3J0aW5nUHJveHksIFdvcmtl
clRocmVhZFN0YXJ0TW9kZSBzdGFydE1vZGUsIGNvbnN0IFN0cmluZyYgY29udGVudFNlY3VyaXR5
UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkhlYWRlclR5cGUgY29udGVudFNlY3VyaXR5
UG9saWN5VHlwZSkKLSAgICA6IG1fdGhyZWFkSUQoMCkKLSAgICAsIG1fd29ya2VyTG9hZGVyUHJv
eHkod29ya2VyTG9hZGVyUHJveHkpCi0gICAgLCBtX3dvcmtlclJlcG9ydGluZ1Byb3h5KHdvcmtl
clJlcG9ydGluZ1Byb3h5KQotICAgICwgbV9zdGFydHVwRGF0YShXb3JrZXJUaHJlYWRTdGFydHVw
RGF0YTo6Y3JlYXRlKHNjcmlwdFVSTCwgdXNlckFnZW50LCBzZXR0aW5ncywgc291cmNlQ29kZSwg
c3RhcnRNb2RlLCBjb250ZW50U2VjdXJpdHlQb2xpY3ksIGNvbnRlbnRTZWN1cml0eVBvbGljeVR5
cGUpKQotI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNB
VElPTlMpCi0gICAgLCBtX25vdGlmaWNhdGlvbkNsaWVudCgwKQotI2VuZGlmCi17Ci0gICAgTXV0
ZXhMb2NrZXIgbG9jayh0aHJlYWRDb3VudE11dGV4KCkpOwotICAgIG1fdGhyZWFkQ291bnQrKzsK
LX0KLQotV29ya2VyVGhyZWFkOjp+V29ya2VyVGhyZWFkKCkKLXsKLSAgICBNdXRleExvY2tlciBs
b2NrKHRocmVhZENvdW50TXV0ZXgoKSk7Ci0gICAgQVNTRVJUKG1fdGhyZWFkQ291bnQgPiAwKTsK
LSAgICBtX3RocmVhZENvdW50LS07Ci19Ci0KLWJvb2wgV29ya2VyVGhyZWFkOjpzdGFydCgpCi17
Ci0gICAgLy8gTXV0ZXggcHJvdGVjdGlvbiBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgbV90
aHJlYWRJRCBpcyBpbml0aWFsaXplZCB3aGVuIHRoZSB0aHJlYWQgc3RhcnRzLgotICAgIE11dGV4
TG9ja2VyIGxvY2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLQotICAgIGlmIChtX3RocmVhZElE
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQo
V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6IFdvcmtlciIp
OwotCi0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7Ci19Ci0KLXZvaWQgV29ya2VyVGhyZWFkOjp3b3Jr
ZXJUaHJlYWRTdGFydCh2b2lkKiB0aHJlYWQpCi17Ci0gICAgc3RhdGljX2Nhc3Q8V29ya2VyVGhy
ZWFkKj4odGhyZWFkKS0+d29ya2VyVGhyZWFkKCk7Ci19Ci0KLXZvaWQgV29ya2VyVGhyZWFkOjp3
b3JrZXJUaHJlYWQoKQotewotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3RocmVh
ZENyZWF0aW9uTXV0ZXgpOwotICAgICAgICBtX3dvcmtlckNvbnRleHQgPSBjcmVhdGVXb3JrZXJD
b250ZXh0KG1fc3RhcnR1cERhdGEtPm1fc2NyaXB0VVJMLCBtX3N0YXJ0dXBEYXRhLT5tX3VzZXJB
Z2VudCwgbV9zdGFydHVwRGF0YS0+bV9jb250ZW50U2VjdXJpdHlQb2xpY3ksIG1fc3RhcnR1cERh
dGEtPm1fY29udGVudFNlY3VyaXR5UG9saWN5VHlwZSk7Ci0KLSAgICAgICAgaWYgKG1fcnVuTG9v
cC50ZXJtaW5hdGVkKCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSB3b3JrZXIgd2FzIHRlcm1pbmF0
ZWQgYmVmb3JlIHRoZSB0aHJlYWQgaGFkIGEgY2hhbmNlIHRvIHJ1bi4gU2luY2UgdGhlIGNvbnRl
eHQgZGlkbid0IGV4aXN0IHlldCwKLSAgICAgICAgICAgIC8vIGZvcmJpZEV4ZWN1dGlvbigpIGNv
dWxkbid0IGJlIGNhbGxlZCBmcm9tIHN0b3AoKS4KLSAgICAgICAgICAgbV93b3JrZXJDb250ZXh0
LT5zY3JpcHQoKS0+Zm9yYmlkRXhlY3V0aW9uKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgUExB
VEZPUk0oQ0hST01JVU0pCi0gICAgLy8gVGhlIGNvcnJlc3BvbmRpbmcgY2FsbCB0byBkaWRTdG9w
V29ya2VyUnVuTG9vcCBpcyBpbgotICAgIC8vIH5Xb3JrZXJTY3JpcHRDb250cm9sbGVyLgotICAg
IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+ZGlkU3RhcnRXb3JrZXJSdW5Mb29wKFdlYktp
dDo6V2ViV29ya2VyUnVuTG9vcCgmbV9ydW5Mb29wKSk7Ci0jZW5kaWYKLQotICAgIFdvcmtlclNj
cmlwdENvbnRyb2xsZXIqIHNjcmlwdCA9IG1fd29ya2VyQ29udGV4dC0+c2NyaXB0KCk7Ci0jaWYg
RU5BQkxFKElOU1BFQ1RPUikKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFs
dWF0ZVdvcmtlclNjcmlwdCh3b3JrZXJDb250ZXh0KCksIG1fc3RhcnR1cERhdGEtPm1fc3RhcnRN
b2RlKTsKLSNlbmRpZgotICAgIHNjcmlwdC0+ZXZhbHVhdGUoU2NyaXB0U291cmNlQ29kZShtX3N0
YXJ0dXBEYXRhLT5tX3NvdXJjZUNvZGUsIG1fc3RhcnR1cERhdGEtPm1fc2NyaXB0VVJMKSk7Ci0g
ICAgLy8gRnJlZSB0aGUgc3RhcnR1cCBkYXRhIHRvIGNhdXNlIGl0cyBtZW1iZXIgdmFyaWFibGUg
ZGVyZWYncyBoYXBwZW4gb24gdGhlIHdvcmtlcidzIHRocmVhZCAoc2luY2UKLSAgICAvLyBhbGwg
cmVmL2RlcmVmcyBvZiB0aGVzZSBvYmplY3RzIGFyZSBoYXBwZW5pbmcgb24gdGhlIHRocmVhZCBh
dCB0aGlzIHBvaW50KS4gTm90ZSB0aGF0Ci0gICAgLy8gV29ya2VyVGhyZWFkOjp+V29ya2VyVGhy
ZWFkIGhhcHBlbnMgb24gYSBkaWZmZXJlbnQgdGhyZWFkIHdoZXJlIGl0IHdhcyBjcmVhdGVkLgot
ICAgIG1fc3RhcnR1cERhdGEuY2xlYXIoKTsKLQotICAgIHJ1bkV2ZW50TG9vcCgpOwotCi0gICAg
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IG1fdGhyZWFkSUQ7Ci0KLSAgICBBU1NFUlQobV93
b3JrZXJDb250ZXh0LT5oYXNPbmVSZWYoKSk7Ci0KLSAgICAvLyBUaGUgYmVsb3cgYXNzaWdubWVu
dCB3aWxsIGRlc3Ryb3kgdGhlIGNvbnRleHQsIHdoaWNoIHdpbGwgaW4gdHVybiBub3RpZnkgbWVz
c2FnaW5nIHByb3h5LgotICAgIC8vIFdlIGNhbm5vdCBsZXQgYW55IG9iamVjdHMgc3Vydml2ZSBw
YXN0IHRocmVhZCBleGl0LCBiZWNhdXNlIG5vIG90aGVyIHRocmVhZCB3aWxsIHJ1biBHQyBvciBv
dGhlcndpc2UgZGVzdHJveSB0aGVtLgotICAgIG1fd29ya2VyQ29udGV4dCA9IDA7Ci0KLSAgICAv
LyBDbGVhbiB1cCBXZWJDb3JlOjpUaHJlYWRHbG9iYWxEYXRhIGJlZm9yZSBXVEY6OldURlRocmVh
ZERhdGEgZ29lcyBhd2F5IQotICAgIHRocmVhZEdsb2JhbERhdGEoKS5kZXN0cm95KCk7Ci0KLSAg
ICAvLyBUaGUgdGhyZWFkIG9iamVjdCBtYXkgYmUgYWxyZWFkeSBkZXN0cm95ZWQgZnJvbSBub3Rp
ZmljYXRpb24gbm93LCBkb24ndCB0cnkgdG8gYWNjZXNzICJ0aGlzIi4KLSAgICBkZXRhY2hUaHJl
YWQodGhyZWFkSUQpOwotfQotCi12b2lkIFdvcmtlclRocmVhZDo6cnVuRXZlbnRMb29wKCkKLXsK
LSAgICAvLyBEb2VzIG5vdCByZXR1cm4gdW50aWwgdGVybWluYXRlZC4KLSAgICBtX3J1bkxvb3Au
cnVuKG1fd29ya2VyQ29udGV4dC5nZXQoKSk7Ci19Ci0KLUdyb3VwU2V0dGluZ3MqIFdvcmtlclRo
cmVhZDo6Z3JvdXBTZXR0aW5ncygpCi17Ci0gICAgcmV0dXJuIG1fc3RhcnR1cERhdGEtPm1fZ3Jv
dXBTZXR0aW5ncy5nZXQoKTsKLX0KLQotY2xhc3MgV29ya2VyVGhyZWFkU2h1dGRvd25GaW5pc2hU
YXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPFdvcmtlclRocmVhZFNodXRkb3duRmluaXNoVGFzaz4gY3JlYXRl
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgV29ya2VyVGhyZWFkU2h1dGRv
d25GaW5pc2hUYXNrKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0ICpjb250ZXh0KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNv
bnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKLSAgICAgICAgV29ya2VyQ29udGV4dCogd29ya2Vy
Q29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihjb250ZXh0KTsKLSNpZiBFTkFC
TEUoSU5TUEVDVE9SKQotICAgICAgICB3b3JrZXJDb250ZXh0LT5jbGVhckluc3BlY3RvcigpOwot
I2VuZGlmCi0gICAgICAgIC8vIEl0J3Mgbm90IHNhZmUgdG8gY2FsbCBjbGVhclNjcmlwdCB1bnRp
bCBhbGwgdGhlIGNsZWFudXAgdGFza3MgcG9zdGVkIGJ5IGZ1bmN0aW9ucyBpbml0aWF0ZWQgYnkg
V29ya2VyVGhyZWFkU2h1dGRvd25TdGFydFRhc2sgaGF2ZSBjb21wbGV0ZWQuCi0gICAgICAgIHdv
cmtlckNvbnRleHQtPmNsZWFyU2NyaXB0KCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIGlz
Q2xlYW51cFRhc2soKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci19OwotCi1jbGFzcyBXb3JrZXJU
aHJlYWRTaHV0ZG93blN0YXJ0VGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxXb3JrZXJUaHJlYWRTaHV0ZG93
blN0YXJ0VGFzaz4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
V29ya2VyVGhyZWFkU2h1dGRvd25TdGFydFRhc2soKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2
b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgKmNvbnRleHQpCi0gICAgewot
ICAgICAgICBBU1NFUlQoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwotICAgICAgICBXb3Jr
ZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNv
bnRleHQpOwotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCB3ZSBzdG9wIHRoZSBkYXRhYmFzZXMgYXMgcGFydCBvZiBzdG9wQWN0aXZlRE9NT2JqZWN0
cygpIGJlbG93PwotICAgICAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgY2xlYW51cFN5bmM7
Ci0gICAgICAgIERhdGFiYXNlQ29udGV4dDo6c3RvcERhdGFiYXNlcyh3b3JrZXJDb250ZXh0LCAm
Y2xlYW51cFN5bmMpOwotI2VuZGlmCi0KLSAgICAgICAgd29ya2VyQ29udGV4dC0+c3RvcEFjdGl2
ZURPTU9iamVjdHMoKTsKLQotICAgICAgICB3b3JrZXJDb250ZXh0LT5ub3RpZnlPYnNlcnZlcnNP
ZlN0b3AoKTsKLQotICAgICAgICAvLyBFdmVudCBsaXN0ZW5lcnMgd291bGQga2VlcCBET01XcmFw
cGVyV29ybGQgb2JqZWN0cyBhbGl2ZSBmb3IgdG9vIGxvbmcuIEFsc28sIHRoZXkgaGF2ZSByZWZl
cmVuY2VzIHRvIEpTIG9iamVjdHMsCi0gICAgICAgIC8vIHdoaWNoIGJlY29tZSBkYW5nbGluZyBv
bmNlIEhlYXAgaXMgZGVzdHJveWVkLgotICAgICAgICB3b3JrZXJDb250ZXh0LT5yZW1vdmVBbGxF
dmVudExpc3RlbmVycygpOwotCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICAgICAgLy8g
V2Ugd2FpdCBmb3IgdGhlIGRhdGFiYXNlIHRocmVhZCB0byBjbGVhbiB1cCBhbGwgaXRzIHN0dWZm
IHNvIHRoYXQgd2UKLSAgICAgICAgLy8gY2FuIGRvIG1vcmUgc3RyaW5nZW50IGxlYWsgY2hlY2tz
IGFzIHdlIGV4aXQuCi0gICAgICAgIGNsZWFudXBTeW5jLndhaXRGb3JUYXNrQ29tcGxldGlvbigp
OwotI2VuZGlmCi0KLSAgICAgICAgLy8gU3RpY2sgYSBzaHV0ZG93biBjb21tYW5kIGF0IHRoZSBl
bmQgb2YgdGhlIHF1ZXVlLCBzbyB0aGF0IHdlIGRlYWwKLSAgICAgICAgLy8gd2l0aCBhbGwgdGhl
IGNsZWFudXAgdGFza3MgdGhlIGRhdGFiYXNlcyBwb3N0IGZpcnN0LgotICAgICAgICB3b3JrZXJD
b250ZXh0LT5wb3N0VGFzayhXb3JrZXJUaHJlYWRTaHV0ZG93bkZpbmlzaFRhc2s6OmNyZWF0ZSgp
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDbGVhbnVwVGFzaygpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLX07Ci0KLXZvaWQgV29ya2VyVGhyZWFkOjpzdG9wKCkKLXsKLSAgICAvLyBN
dXRleCBwcm90ZWN0aW9uIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHN0b3AoKSBjYW4gYmUgY2FsbGVk
IGJlZm9yZSB0aGUgY29udGV4dCBpcyBmdWxseSBjcmVhdGVkLgotICAgIE11dGV4TG9ja2VyIGxv
Y2sobV90aHJlYWRDcmVhdGlvbk11dGV4KTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHRhc2tzIGFy
ZSBiZWluZyBoYW5kbGVkIGJ5IHRocmVhZCBldmVudCBsb29wLiBJZiBzY3JpcHQgZXhlY3V0aW9u
IHdlcmVuJ3QgZm9yYmlkZGVuLCBhIHdoaWxlKDEpIGxvb3AgaW4gSlMgY291bGQga2VlcCB0aGUg
dGhyZWFkIGFsaXZlIGZvcmV2ZXIuCi0gICAgaWYgKG1fd29ya2VyQ29udGV4dCkgewotICAgICAg
ICBtX3dvcmtlckNvbnRleHQtPnNjcmlwdCgpLT5zY2hlZHVsZUV4ZWN1dGlvblRlcm1pbmF0aW9u
KCk7Ci0KLSNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQotICAgICAgICBEYXRhYmFzZVRyYWNrZXI6
OnRyYWNrZXIoKS5pbnRlcnJ1cHRBbGxEYXRhYmFzZXNGb3JDb250ZXh0KG1fd29ya2VyQ29udGV4
dC5nZXQoKSk7Ci0jZW5kaWYKLSAgICAgICAgbV9ydW5Mb29wLnBvc3RUYXNrKFdvcmtlclRocmVh
ZFNodXRkb3duU3RhcnRUYXNrOjpjcmVhdGUoKSk7Ci0gICAgfQotICAgIG1fcnVuTG9vcC50ZXJt
aW5hdGUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFdPUktFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVh
ZC5oIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNWIxNzUxMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlclRocmVhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqCi0gKi8KLQotI2lmbmRlZiBXb3JrZXJUaHJlYWRfaAotI2RlZmluZSBXb3JrZXJUaHJlYWRf
aAotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xp
Y3kuaCIKLSNpbmNsdWRlICJHcm91cFNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV29ya2VyUnVuTG9v
cC5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgS1VSTDsKLSAgICBjbGFzcyBOb3Rp
ZmljYXRpb25DbGllbnQ7Ci0gICAgY2xhc3MgV29ya2VyQ29udGV4dDsKLSAgICBjbGFzcyBXb3Jr
ZXJMb2FkZXJQcm94eTsKLSAgICBjbGFzcyBXb3JrZXJSZXBvcnRpbmdQcm94eTsKLSAgICBzdHJ1
Y3QgV29ya2VyVGhyZWFkU3RhcnR1cERhdGE7Ci0KLSAgICBlbnVtIFdvcmtlclRocmVhZFN0YXJ0
TW9kZSB7IERvbnRQYXVzZVdvcmtlckNvbnRleHRPblN0YXJ0LCBQYXVzZVdvcmtlckNvbnRleHRP
blN0YXJ0IH07Ci0KLSAgICBjbGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgUmVmQ291bnRlZDxX
b3JrZXJUaHJlYWQ+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfldvcmtlclRocmVh
ZCgpOwotCi0gICAgICAgIGJvb2wgc3RhcnQoKTsKLSAgICAgICAgdm9pZCBzdG9wKCk7Ci0KLSAg
ICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGhyZWFk
SUQ7IH0KLSAgICAgICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCgpIHsgcmV0dXJuIG1fcnVuTG9v
cDsgfQotICAgICAgICBXb3JrZXJMb2FkZXJQcm94eSYgd29ya2VyTG9hZGVyUHJveHkoKSBjb25z
dCB7IHJldHVybiBtX3dvcmtlckxvYWRlclByb3h5OyB9Ci0gICAgICAgIFdvcmtlclJlcG9ydGlu
Z1Byb3h5JiB3b3JrZXJSZXBvcnRpbmdQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2VyUmVw
b3J0aW5nUHJveHk7IH0KLQotICAgICAgICAvLyBOdW1iZXIgb2YgYWN0aXZlIHdvcmtlciB0aHJl
YWRzLgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgd29ya2VyVGhyZWFkQ291bnQoKTsKLSAgICAg
ICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncygpOwotCi0jaWYgRU5BQkxFKE5PVElGSUNB
VElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKLSAgICAgICAgTm90aWZpY2F0
aW9uQ2xpZW50KiBnZXROb3RpZmljYXRpb25DbGllbnQoKSB7IHJldHVybiBtX25vdGlmaWNhdGlv
bkNsaWVudDsgfQotICAgICAgICB2b2lkIHNldE5vdGlmaWNhdGlvbkNsaWVudChOb3RpZmljYXRp
b25DbGllbnQqIGNsaWVudCkgeyBtX25vdGlmaWNhdGlvbkNsaWVudCA9IGNsaWVudDsgfQotI2Vu
ZGlmCi0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFdvcmtlclRocmVhZChjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGNvbnN0IEdyb3VwU2V0dGluZ3MqLCAgY29uc3QgU3Ry
aW5nJiBzb3VyY2VDb2RlLCBXb3JrZXJMb2FkZXJQcm94eSYsIFdvcmtlclJlcG9ydGluZ1Byb3h5
JiwgV29ya2VyVGhyZWFkU3RhcnRNb2RlLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRTZWN1cml0eVBv
bGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpIZWFkZXJUeXBlKTsKLQotICAgICAgICAvLyBG
YWN0b3J5IG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBuZXcgd29ya2VyIGNvbnRleHQgZm9yIHRoZSB0
aHJlYWQuCi0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0PiBjcmVhdGVX
b3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6SGVh
ZGVyVHlwZSkgPSAwOwotCi0gICAgICAgIC8vIEV4ZWN1dGVzIHRoZSBldmVudCBsb29wIGZvciB0
aGUgd29ya2VyIHRocmVhZC4gRGVyaXZlZCBjbGFzc2VzIGNhbiBvdmVycmlkZSB0byBwZXJmb3Jt
IGFjdGlvbnMgYmVmb3JlL2FmdGVyIGVudGVyaW5nIHRoZSBldmVudCBsb29wLgotICAgICAgICB2
aXJ0dWFsIHZvaWQgcnVuRXZlbnRMb29wKCk7Ci0KLSAgICAgICAgV29ya2VyQ29udGV4dCogd29y
a2VyQ29udGV4dCgpIHsgcmV0dXJuIG1fd29ya2VyQ29udGV4dC5nZXQoKTsgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgLy8gU3RhdGljIGZ1bmN0aW9uIGV4ZWN1dGVkIGFzIHRoZSBjb3JlIHJv
dXRpbmUgb24gdGhlIG5ldyB0aHJlYWQuIFBhc3NlZCBhIHBvaW50ZXIgdG8gYSBXb3JrZXJUaHJl
YWQgb2JqZWN0LgotICAgICAgICBzdGF0aWMgdm9pZCB3b3JrZXJUaHJlYWRTdGFydCh2b2lkKik7
Ci0gICAgICAgIHZvaWQgd29ya2VyVGhyZWFkKCk7Ci0KLSAgICAgICAgVGhyZWFkSWRlbnRpZmll
ciBtX3RocmVhZElEOwotICAgICAgICBXb3JrZXJSdW5Mb29wIG1fcnVuTG9vcDsKLSAgICAgICAg
V29ya2VyTG9hZGVyUHJveHkmIG1fd29ya2VyTG9hZGVyUHJveHk7Ci0gICAgICAgIFdvcmtlclJl
cG9ydGluZ1Byb3h5JiBtX3dvcmtlclJlcG9ydGluZ1Byb3h5OwotCi0gICAgICAgIFJlZlB0cjxX
b3JrZXJDb250ZXh0PiBtX3dvcmtlckNvbnRleHQ7Ci0gICAgICAgIE11dGV4IG1fdGhyZWFkQ3Jl
YXRpb25NdXRleDsKLQotICAgICAgICBPd25QdHI8V29ya2VyVGhyZWFkU3RhcnR1cERhdGE+IG1f
c3RhcnR1cERhdGE7Ci0KLSNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FD
WV9OT1RJRklDQVRJT05TKQotICAgICAgICBOb3RpZmljYXRpb25DbGllbnQqIG1fbm90aWZpY2F0
aW9uQ2xpZW50OwotI2VuZGlmCi0KLSAgICAgICAgLy8gVHJhY2sgdGhlIG51bWJlciBvZiBXb3Jr
ZXJUaHJlYWQgaW5zdGFuY2VzIGZvciB1c2UgaW4gbGF5b3V0IHRlc3RzLgotICAgICAgICBzdGF0
aWMgdW5zaWduZWQgbV90aHJlYWRDb3VudDsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKLQotI2VuZGlmIC8vIFdvcmtlclRocmVh
ZF9oCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA3ZGM5YTIyLi5mMmZkOTk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDctMDQgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5n
LmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAgICB3b3JrZXJzIHNob3VsZCBiZSBpbiBNb2R1bGVz
L3dvcmtlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTkwNTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwOiBJbmNsdWRlIFdv
cmtlclRocmVhZC5oIGZyb20gTW9kdWxlcy93b3JrZXJzLgorCiAyMDEyLTA3LTAyICBCZW5qYW1p
biBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIERvIG5vdCBkbyBhbnkg
bG9nZ2luZyBpbml0aWFsaXphdGlvbiB3aGVuIGxvZ2dpbmcgaXMgZGlzYWJsZWQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmwuY3BwCmluZGV4IDY3YjIzMTcuLmVjNjkxYmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsLmNwcApAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPEpTRWxlbWVudC5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL09wYXF1ZUpTU3RyaW5nLmg+CiAjaW5jbHVkZSA8TWVtb3J5
Q2FjaGUuaD4KKyNpbmNsdWRlIDxNb2R1bGVzL3dvcmtlcnMvV29ya2VyVGhyZWFkLmg+CiAjaW5j
bHVkZSA8UGFnZUdyb3VwLmg+CiAjaW5jbHVkZSA8UHJpbnRDb250ZXh0Lmg+CiAjaW5jbHVkZSA8
UmVuZGVyVHJlZUFzVGV4dC5oPgpAQCAtNTgsNyArNTksNiBAQAogI2luY2x1ZGUgPFdlYktpdE11
dGF0aW9uT2JzZXJ2ZXIuaD4KICNpbmNsdWRlIDxiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuaD4K
ICNpbmNsdWRlIDxoaXN0b3J5L0hpc3RvcnlJdGVtLmg+Ci0jaW5jbHVkZSA8d29ya2Vycy9Xb3Jr
ZXJUaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiB1bnNpZ25lZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OmFjdGl2ZUFuaW1hdGlvbnNDb3VudChjb25zdCBFdmFzX09iamVj
dCogZXdrRnJhbWUpCg==
</data>
<flag name="review"
          id="159187"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="159191"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>