<?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>203682</bug_id>
          
          <creation_ts>2019-10-31 09:07:44 -0700</creation_ts>
          <short_desc>Introduce Style::Builder</short_desc>
          <delta_ts>2019-10-31 11:56: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>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1585933</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-31 09:07:44 -0700</bug_when>
    <thetext>Add Style::Builder for encapsulating the style building step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585937</commentid>
    <comment_count>1</comment_count>
      <attachid>382466</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-31 09:21:38 -0700</bug_when>
    <thetext>Created attachment 382466
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585947</commentid>
    <comment_count>2</comment_count>
      <attachid>382472</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-31 09:53:13 -0700</bug_when>
    <thetext>Created attachment 382472
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585962</commentid>
    <comment_count>3</comment_count>
      <attachid>382472</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-10-31 10:23:41 -0700</bug_when>
    <thetext>Comment on attachment 382472
patch

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

&gt; Source/WebCore/css/StyleResolver.cpp:5
&gt; + * Copyright (C) 2005-2019 Apple Inc. All rights reserved.

I am glad someone picked this file up after 5 years.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585968</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-31 10:34:17 -0700</bug_when>
    <thetext>&gt; I am glad someone picked this file up after 5 years.

The style team is pretty lazy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585984</commentid>
    <comment_count>5</comment_count>
      <attachid>382472</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-31 10:54:08 -0700</bug_when>
    <thetext>Comment on attachment 382472
patch

Rejecting attachment 382472 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 382472, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Logging in as commit-queue@webkit.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=382472&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=203682&amp;ctype=xml&amp;excludefield=attachmentdata
Processing 1 patch from 1 bug.
Updating working directory
Processing patch 382472 from bug 203682.
Fetching: https://bugs.webkit.org/attachment.cgi?id=382472
Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	A	Source/WebCore/style/StyleBuilder.cpp
	A	Source/WebCore/style/StyleBuilder.h
	M	Source/WebCore/ChangeLog
	M	Source/WebCore/DerivedSources-output.xcfilelist
	M	Source/WebCore/Sources.txt
	M	Source/WebCore/WebCore.xcodeproj/project.pbxproj
	M	Source/WebCore/css/CSSVariableReferenceValue.cpp
	M	Source/WebCore/css/DOMCSSRegisterCustomProperty.cpp
	M	Source/WebCore/css/StyleResolver.cpp
	M	Source/WebCore/css/StyleResolver.h
	M	Source/WebCore/css/parser/CSSParser.cpp
	M	Source/WebCore/css/parser/CSSPropertyParser.cpp
	M	Source/WebCore/style/PropertyCascade.cpp
	M	Source/WebCore/style/PropertyCascade.h
	M	Source/WebCore/style/StyleBuilderCustom.h
	M	Source/WebCore/style/StyleBuilderState.cpp
	M	Source/WebCore/style/StyleBuilderState.h

ERROR from SVN:
Merge conflict during commit: Conflict at &apos;/trunk/Source/WebCore/ChangeLog&apos;
W: f4e1f9e226377a9bff246ba55733dd80cb3fb2fe and refs/remotes/origin/master differ, using rebase:
:040000 040000 5b1308f062c595c1de024e569692d2665e164a7c 3e91f97e375693cb2e2438aa06f4939932bf9431 M	Source
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	A	Source/WebCore/style/StyleBuilder.cpp
	A	Source/WebCore/style/StyleBuilder.h
	M	Source/WebCore/ChangeLog
	M	Source/WebCore/DerivedSources-output.xcfilelist
	M	Source/WebCore/Sources.txt
	M	Source/WebCore/WebCore.xcodeproj/project.pbxproj
	M	Source/WebCore/css/CSSVariableReferenceValue.cpp
	M	Source/WebCore/css/DOMCSSRegisterCustomProperty.cpp
	M	Source/WebCore/css/StyleResolver.cpp
	M	Source/WebCore/css/StyleResolver.h
	M	Source/WebCore/css/parser/CSSParser.cpp
	M	Source/WebCore/css/parser/CSSPropertyParser.cpp
	M	Source/WebCore/style/PropertyCascade.cpp
	M	Source/WebCore/style/PropertyCascade.h
	M	Source/WebCore/style/StyleBuilderCustom.h
	M	Source/WebCore/style/StyleBuilderState.cpp
	M	Source/WebCore/style/StyleBuilderState.h

ERROR from SVN:
Merge conflict during commit: Conflict at &apos;/trunk/Source/WebCore/ChangeLog&apos;
W: f4e1f9e226377a9bff246ba55733dd80cb3fb2fe and refs/remotes/origin/master differ, using rebase:
:040000 040000 5b1308f062c595c1de024e569692d2665e164a7c 3e91f97e375693cb2e2438aa06f4939932bf9431 M	Source
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit
Updating OpenSource
From https://git.webkit.org/git/WebKit
   4949bf8b789..b6952eda3ca  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 251856 = 4949bf8b789c33394ca4d50d3452d466adaaf48a
r251857 = 5e6df0b6f14bd6b9fc5469ac9f1a0392ae4f8c85
r251858 = 0c9b8a9a3cc8a7870e954181755f5c0d89bc61d9
r251859 = 3329bcd4ec8e95f54f4e8918a194dc713345ad8b
r251861 = b6952eda3cad2deb6746c04969f57a9370198c4f
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: https://webkit-queues.webkit.org/results/13196156</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585990</commentid>
    <comment_count>6</comment_count>
      <attachid>382479</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-31 11:12:34 -0700</bug_when>
    <thetext>Created attachment 382479
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585999</commentid>
    <comment_count>7</comment_count>
      <attachid>382479</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-31 11:55:42 -0700</bug_when>
    <thetext>Comment on attachment 382479
patch

Clearing flags on attachment: 382479

Committed r251864: &lt;https://trac.webkit.org/changeset/251864&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586000</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-31 11:55:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586001</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-31 11:56:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/56790051&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382466</attachid>
            <date>2019-10-31 09:21:38 -0700</date>
            <delta_ts>2019-10-31 09:53:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-builder.patch</filename>
            <type>text/plain</type>
            <size>78630</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNTJlMWQ2ZGE3Ni4uOWZlZjUwZWFlMDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDEgQEAKKzIwMTktMTAtMzEgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIEludHJvZHVjZSBTdHlsZTo6QnVpbGRlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNjgyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5jYXBzdWxhdGUgdGhlIHN0eWxlIGJ1aWxk
aW5nIHN0ZXAgaW50byBhIG5ldyBCdWlsZGVyIGNsYXNzLiBJdCBvd25zIHRoZSBjYXNjYWRlIGFu
ZCBzdHlsZSBidWlsZGluZyBzdGF0ZS4KKworICAgICAgICBNb3ZlIGEgYnVuY2ggb2YgY29kZSBm
cm9tIFN0eWxlUmVzb2x2ZXIgYW5kIFByb3BlcnR5Q2FzY2FkZSB0aGVyZS4KKworICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBjc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UpOgorICAgICAgICAqIGNzcy9ET01DU1NSZWdpc3RlckN1
c3RvbVByb3BlcnR5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNTU1JlZ2lzdGVyQ3VzdG9t
UHJvcGVydHk6OnJlZ2lzdGVyUHJvcGVydHkpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0U3R5bGVGb3JJbnRlckNo
YXJhY3RlclJ1YnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JPcmllbnRh
dGlvbkNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1
cGRhdGVGb250KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnVz
ZVNWR1pvb21SdWxlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjp1c2VTVkdab29tUnVsZXNGb3JMZW5ndGggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5l
cmljRmFtaWx5Q2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnNldEZvbnRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldEZvbnRTaXplSGFz
Vmlld3BvcnRVbml0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6Zm9udFNpemVIYXNWaWV3cG9ydFVuaXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjp1c2VTVkdab29tUnVsZXMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMpOgor
ICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwOgorICAgICAgICAqIHN0
eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU6OnByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVEaXJlY3Rpb25BbmRXcml0aW5nTW9k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBs
eURlZmVycmVkUHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
UHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0aWVzSW1wbCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseUN1c3Rv
bVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5
Q2FzY2FkZTo6YXBwbHlDdXN0b21Qcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpwcm9wZXJ0eUNhc2NhZGVGb3JSb2xsYmFjayk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseVBy
b3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGU6OnJlc29sdmVWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJv
cGVydHlDYXNjYWRlOjpyZXNvbHZlZFZhcmlhYmxlVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZURpcmVjdGlvbkFuZFdyaXRp
bmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6OmRlZmVycmVkUHJvcGVydGll
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpjdXN0
b21Qcm9wZXJ0aWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlOjpidWlsZGVyU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL1N0eWxl
QnVpbGRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmRpcmVjdGlvbkZy
b21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6QnVpbGRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6YXBwbHlBbGxQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseUhpZ2hQcmlvcml0eVByb3BlcnRp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OmFwcGx5TG93UHJpb3JpdHlQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseURlZmVy
cmVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6YXBwbHlQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseVByb3Bl
cnRpZXNJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseUN1c3Rv
bVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OmFwcGx5Q3Vz
dG9tUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OmFwcGx5Q2Fz
Y2FkZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseVBy
b3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjpyZXNvbHZlVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OnJlc29sdmVkVmFyaWFibGVWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6YWRqdXN0U3R5bGVGb3JJbnRl
ckNoYXJhY3RlclJ1YnkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OnVwZGF0
ZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OnVwZGF0ZUZvbnRGb3JU
ZXh0U2l6ZUFkanVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6dXBkYXRl
Rm9udEZvclpvb21DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OnVw
ZGF0ZUZvbnRGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpCdWlsZGVyOjp1cGRhdGVGb250Rm9yT3JpZW50YXRpb25DaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OkJ1aWxkZXI6OnNldEZvbnRTaXplKToKKyAgICAgICAgKiBzdHlsZS9TdHls
ZUJ1aWxkZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6YXBw
bHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6c3RhdGUpOgor
ICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZSk6CisgICAgICAgICogc3R5
bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxk
ZXJTdGF0ZTo6QnVpbGRlclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVy
U3RhdGU6OnVzZVNWR1pvb21SdWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
QnVpbGRlclN0YXRlOjp1c2VTVkdab29tUnVsZXNGb3JMZW5ndGggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6c2V0Rm9udFNpemUpOgorICAgICAgICAqIHN0
eWxlL1N0eWxlQnVpbGRlclN0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRl
clN0YXRlOjpidWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6
OnNldEZvbnREaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpj
YXNjYWRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6
OmNsZWFyRm9udERpcnR5KTogRGVsZXRlZC4KKwogMjAxOS0xMC0zMSAgV2Vuc29uIEhzaWVoICA8
d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCB1cGRhdGUgRGVy
aXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYWZ0ZXIgcjI1MTg0MQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAppbmRleCA3MWIzOGNkNDI1
MS4uNTM5NDkxZTI4MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
LW91dHB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLW91
dHB1dC54Y2ZpbGVsaXN0CkBAIC0yMTQ5LDYgKzIxNDksNyBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1
Y3RvcgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU2V0dGlu
Z3MuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9TZXR0
aW5ncy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9TdHJl
YW1JbnRlcm5hbHNCdWlsdGlucy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9TdHlsZUJ1aWxkZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9TdHlsZUJ1aWxkZXJHZW5lcmF0ZWQuY3BwCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9TdHlsZVByb3BlcnR5U2hvcnRoYW5kRnVu
Y3Rpb25zLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
U3R5bGVQcm9wZXJ0eVNob3J0aGFuZEZ1bmN0aW9ucy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDZlOGNl
NzRhNWJhLi45ZTQzN2YwZTBjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIzNDUsNiArMjM0NSw3IEBA
IHN0eWxlL0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAogc3R5bGUvSWRDaGFuZ2VJbnZhbGlk
YXRpb24uY3BwCiBzdHlsZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCiBzdHlsZS9Qcm9wZXJ0eUNh
c2NhZGUuY3BwCitzdHlsZS9TdHlsZUJ1aWxkZXIuY3BwCiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0
ZS5jcHAKIHN0eWxlL1N0eWxlQ2hhbmdlLmNwcAogc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9u
cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA2Y2NlNTU4ZDhkZS4uOTQ5YjA5ZDgzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4NDMsNiArNDg0Myw3
IEBACiAJCUU0QUJBQkYzMjM2OEI5NTkwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXJTdGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBQkFCRjIyMzY4
Qjk1ODAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlclN0YXRlLmggKi87IH07CiAJCUU0QUJBQkY1MjM2
OEM2RUYwMEZBNDM0NSAvKiBDYXNjYWRlTGV2ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUJBQkY0MjM2OEM2RUYwMEZBNDM0NSAvKiBDYXNjYWRl
TGV2ZWwuaCAqLzsgfTsKIAkJRTRBQkFDMDQyMzZBRTk1OTAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRl
ckdlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTRBQkFDMDIyMzZBRTk1ODAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlckdlbmVyYXRlZC5oICov
OyB9OworCQlFNEFCQUMwNjIzNkIwMTZEMDBGQTQzNDUgLyogU3R5bGVCdWlsZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFCQUMwNTIzNkIwMTZD
MDBGQTQzNDUgLyogU3R5bGVCdWlsZGVyLmggKi87IH07CiAJCUU0QUU3QzE2MTdEMUJCOTUwMDA5
RkIzMSAvKiBFbGVtZW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0QUU3QzE1MTdEMUJCOTUwMDA5RkIzMSAvKiBFbGVtZW50SXRlcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlF
NEFFN0MxQTE3RDIzMjM1MDAwOUZCMzEgLyogRWxlbWVudEFuY2VzdG9ySXRlcmF0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUU3QzE5MTdEMjMy
MzUwMDA5RkIzMSAvKiBFbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0QUZDRkE1MERBRjI5QTMwMEY1RjU1
QyAvKiBVbml0QmV6aWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNEFGQ0ZBNDBEQUYyOUEzMDBGNUY1NUMgLyogVW5pdEJlemllci5oICovOyB9OwpA
QCAtMTUxODAsNiArMTUxODEsOCBAQAogCQlFNEFCQUJGMjIzNjhCOTU4MDBGQTQzNDUgLyogU3R5
bGVCdWlsZGVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVC
dWlsZGVyU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBQkFCRjQyMzY4
QzZFRjAwRkE0MzQ1IC8qIENhc2NhZGVMZXZlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYXNjYWRlTGV2ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRB
QkFDMDIyMzZBRTk1ODAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlckdlbmVyYXRlZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUJ1aWxkZXJHZW5lcmF0ZWQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRBQkFDMDUyMzZCMDE2QzAwRkE0MzQ1IC8qIFN0eWxl
QnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUJ1aWxkZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRBQkFDMDcyMzZCMDE4MTAwRkE0MzQ1
IC8qIFN0eWxlQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUJ1aWxkZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEFFN0MxNTE3RDFCQjk1MDAwOUZCMzEg
LyogRWxlbWVudEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVs
ZW1lbnRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEFFN0MxOTE3
RDIzMjM1MDAwOUZCMzEgLyogRWxlbWVudEFuY2VzdG9ySXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudEFuY2VzdG9ySXRlcmF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBRkNGQTQwREFGMjlBMzAwRjVGNTVDIC8qIFVuaXRCZXpp
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pdEJlemllci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjY5NTgsNiArMjY5NjEsOCBAQAogCQkJCTFDMDEw
NkZGMTkyNTk0REYwMDhBNDIwMSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuaCAqLywKIAkJCQlFNEFC
QUJFNTIzNjFBMzQyMDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmNwcCAqLywKIAkJCQlFNEFC
QUJFMjIzNjFBMzI5MDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmggKi8sCisJCQkJRTRBQkFD
MDcyMzZCMDE4MTAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlci5jcHAgKi8sCisJCQkJRTRBQkFDMDUy
MzZCMDE2QzAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlci5oICovLAogCQkJCTgzQjk2ODc5MTlGOEFC
ODMwMDRFRjdBRiAvKiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCAqLywKIAkJCQk4MzVEMzYzNjE5
RkY2MTkzMDA0QzkzQUIgLyogU3R5bGVCdWlsZGVyQ3VzdG9tLmggKi8sCiAJCQkJRTRBQkFDMDIy
MzZBRTk1ODAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlckdlbmVyYXRlZC5oICovLApAQCAtMzA1NzIs
NiArMzA1NzcsNyBAQAogCQkJCUJDRTFDNDNDMEQ5ODMwRDMwMDNCMDJGMiAvKiBKU0xvY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0E4MDYyMDFFMDNCNTg1MDA4QTFGMjYgLyogSlNMb25n
UmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQUI2RDJFMTdDODE0RUUwMEM2MEIzNCAvKiBK
U01lZGlhQ29udHJvbHNIb3N0LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEFCQUMwNjIzNkIwMTZE
MDBGQTQzNDUgLyogU3R5bGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNTk3NDFEQjFC
N0QxNDAxMDAyMDFDOTIgLyogSlNNZWRpYURldmljZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE1NzM5QkJCMUI0MjAxMkQwMEQyNThDMSAvKiBKU01lZGlhRGV2aWNlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkQyM0ExMjYxM0Y1RkE1OTAwRjY3MDAxIC8qIEpTTWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NW
YXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcAppbmRleCBmZTYwZGNmYmZiNC4uZjk3NTliZTBlODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5j
cHAKQEAgLTMwLDggKzMwLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NW
YXJpYWJsZVJlZmVyZW5jZVZhbHVlLmgiCiAKLSNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlN0eWxlQnVpbGRlci5oIgogI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjcsNyAr
NjcsNyBAQCBzdGF0aWMgYm9vbCByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1BhcnNlcgogICAgIEFTU0VSVChyYW5nZS5hdEVuZCgp
IHx8IChyYW5nZS5wZWVrKCkudHlwZSgpID09IENvbW1hVG9rZW4pKTsKIAogICAgIC8vIEFwcGx5
IHRoaXMgdmFyaWFibGUgZmlyc3QsIGluIGNhc2UgaXQgaXMgc3RpbGwgdW5yZXNvbHZlZAotICAg
IGJ1aWxkZXJTdGF0ZS5jYXNjYWRlKCkuYXBwbHlDdXN0b21Qcm9wZXJ0eSh2YXJpYWJsZU5hbWUp
OworICAgIGJ1aWxkZXJTdGF0ZS5idWlsZGVyKCkuYXBwbHlDdXN0b21Qcm9wZXJ0eSh2YXJpYWJs
ZU5hbWUpOwogCiAgICAgLy8gQXBwbHkgZmFsbGJhY2sgdG8gZGV0ZWN0IGN5Y2xlcwogICAgIFZl
Y3RvcjxDU1NQYXJzZXJUb2tlbj4gZmFsbGJhY2tSZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHAKaW5kZXggMWU3YTUzYjE5
OTMuLmUwYzljODZiN2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVn
aXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0RPTUNTU1Jl
Z2lzdGVyQ3VzdG9tUHJvcGVydHkuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ1NT
VG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiRE9NQ1NTTmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKKyNpbmNsdWRlICJTdHlsZUJ1
aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjAsOCArNjAsOCBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5OjpyZWdpc3RlclByb3BlcnR5KERvY3VtZW50
JiBkb2N1bQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yLCAiVGhl
IGdpdmVuIGluaXRpYWwgdmFsdWUgbXVzdCBiZSBjb21wdXRhdGlvbmFsbHkgaW5kZXBlbmRlbnQu
IiB9OwogCiAgICAgICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgICAgICBTdHlsZTo6
UHJvcGVydHlDYXNjYWRlIGR1bW15Q2FzY2FkZShzdHlsZVJlc29sdmVyLCBtYXRjaFJlc3VsdCwg
eyB9KTsKLSAgICAgICAgaW5pdGlhbFZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVHlw
ZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGRlc2NyaXB0b3IubmFtZSwgZGVzY3JpcHRvci5zeW50YXgs
IHRva2VuaXplci50b2tlblJhbmdlKCksIGR1bW15Q2FzY2FkZS5idWlsZGVyU3RhdGUoKSwgc3Ry
aWN0Q1NTUGFyc2VyQ29udGV4dCgpKTsKKyAgICAgICAgU3R5bGU6OkJ1aWxkZXIgZHVtbXlCdWls
ZGVyKHN0eWxlUmVzb2x2ZXIsIG1hdGNoUmVzdWx0LCB7IH0pOworICAgICAgICBpbml0aWFsVmFs
dWUgPSBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoZGVz
Y3JpcHRvci5uYW1lLCBkZXNjcmlwdG9yLnN5bnRheCwgdG9rZW5pemVyLnRva2VuUmFuZ2UoKSwg
ZHVtbXlCdWlsZGVyLnN0YXRlKCksIHN0cmljdENTU1BhcnNlckNvbnRleHQoKSk7CiAKICAgICAg
ICAgaWYgKCFpbml0aWFsVmFsdWUgfHwgIWluaXRpYWxWYWx1ZS0+aXNSZXNvbHZlZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yLCAiVGhlIGdpdmVuIGluaXRp
YWwgdmFsdWUgZG9lcyBub3QgcGFyc2UgZm9yIHRoZSBnaXZlbiBzeW50YXguIiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDIwY2M1NmIxODVhLi45NGU5NTFjNWYzMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMzIsNyArMzIsNiBAQAogCiAj
aW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0N1cnNvckltYWdl
VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTRGVmYXVsdFN0eWxlU2hlZXRzLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VWYWx1ZS5o
IgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgpAQCAtNTEsNyArNTAsNiBAQAogI2luY2x1
ZGUgIkNTU1N0eWxlUnVsZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRl
ICJDU1NWYWx1ZUxpc3QuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgi
CiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCkBAIC03Myw5ICs3MSw3IEBACiAjaW5jbHVk
ZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlBhZ2VSdWxlQ29sbGVjdG9yLmgiCi0jaW5jbHVkZSAiUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGUuaCIKICNpbmNsdWRlICJQYWlyLmgiCi0jaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRl
LmgiCiAjaW5jbHVkZSAiUXVpcmtzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKQEAgLTg3LDExICs4MywxMSBAQAogI2lu
Y2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxl
bWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAj
aW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlNoYXJlZFN0cmluZ0hhc2guaCIKKyNp
bmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZUNvbG9yLmgiCiAjaW5jbHVk
ZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlvbnMu
aCIKQEAgLTExNyw4ICsxMTMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBjb25zdCBDU1NQcm9wZXJ0eUlEIGZpcnN0TG93UHJp
b3JpdHlQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KGxhc3RIaWdoUHJpb3Jp
dHlQcm9wZXJ0eSArIDEpOwotCiBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2Fj
aGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCkKIHsKICAgICBtX2hhc1VBQXBwZWFyYW5jZSA9IG1fc3R5
bGUtPmhhc0FwcGVhcmFuY2UoKTsKQEAgLTM2MywyMiArMzU3LDggQEAgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRl
clN0eWxlKgogICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigqZWxlbWVu
dFN0eWxlKSk7CiAgICAgc3RhdGUuc2V0UGFyZW50U3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCplbGVtZW50U3R5bGUpKTsKIAotICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUgY2FzY2FkZSgq
dGhpcywgcmVzdWx0LCB7IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OkF1dGhvciB9KTsKLQotICAgIGNh
c2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQ
cm9wZXJ0eSk7Ci0KLSAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgdXBkYXRlIGl0IG5v
dy4KLSAgICB1cGRhdGVGb250KGNhc2NhZGUpOwotCi0gICAgLy8gTm93IHJlc29sdmUgcmVtYWlu
aW5nIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCi0gICAgY2Fz
Y2FkZS5hcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKLQotICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0
aWVzKGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5KTsKLQotICAgIC8v
IElmIG91ciBmb250IGdvdCBkaXJ0aWVkIGJ5IG9uZSBvZiB0aGUgbm9uLWVzc2VudGlhbCBmb250
IHByb3BzLCB1cGRhdGUgaXQgYSBzZWNvbmQgdGltZS4KLSAgICB1cGRhdGVGb250KGNhc2NhZGUp
OwotCi0gICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOworICAgIFN0eWxlOjpC
dWlsZGVyIGJ1aWxkZXIoKnRoaXMsIHJlc3VsdCwgeyBTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRo
b3IgfSk7CisgICAgYnVpbGRlci5hcHBseUFsbFByb3BlcnRpZXMoKTsKIAogICAgIGFkanVzdFJl
bmRlclN0eWxlKCpzdGF0ZS5zdHlsZSgpLCAqc3RhdGUucGFyZW50U3R5bGUoKSwgbnVsbHB0ciwg
bnVsbHB0cik7CiAKQEAgLTU2MywxOSArNTQzLDggQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKIAogICAgIGF1
dG8mIHJlc3VsdCA9IGNvbGxlY3Rvci5tYXRjaFJlc3VsdCgpOwogCi0gICAgU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSBjYXNjYWRlKCp0aGlzLCByZXN1bHQsIHsgU3R5bGU6OkNhc2NhZGVMZXZlbDo6
QXV0aG9yIH0pOwotCi0gICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RDU1NQcm9wZXJ0
eSwgbGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5KTsKLQotICAgIC8vIElmIG91ciBmb250IGdvdCBk
aXJ0aWVkLCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoY2FzY2FkZSk7Ci0KLSAgICAv
LyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3VzdG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBp
biBhbnkgb3JkZXIKLSAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOwotCi0gICAg
Y2FzY2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NT
UHJvcGVydHkpOwotCi0gICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOworICAg
IFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnRoaXMsIHJlc3VsdCwgeyBTdHlsZTo6Q2FzY2FkZUxl
dmVsOjpBdXRob3IgfSk7CisgICAgYnVpbGRlci5hcHBseUFsbFByb3BlcnRpZXMoKTsKIAogICAg
IC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgogICAgIHJldHVybiBtX3N0YXRlLnRha2VTdHlsZSgp
OwpAQCAtNjc5LDE2ICs2NDgsNiBAQCBzdGF0aWMgYm9vbCBpc1Njcm9sbGFibGVPdmVyZmxvdyhP
dmVyZmxvdyBvdmVyZmxvdykKIH0KICNlbmRpZgogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVz
dFN0eWxlRm9ySW50ZXJDaGFyYWN0ZXJSdWJ5KCkKLXsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBtX3N0YXRlLnN0eWxlKCk7Ci0gICAgaWYgKHN0eWxlLT5ydWJ5UG9zaXRpb24oKSAhPSBSdWJ5
UG9zaXRpb246OkludGVyQ2hhcmFjdGVyIHx8ICFtX3N0YXRlLmVsZW1lbnQoKSB8fCAhbV9zdGF0
ZS5lbGVtZW50KCktPmhhc1RhZ05hbWUocnRUYWcpKQotICAgICAgICByZXR1cm47Ci0gICAgc3R5
bGUtPnNldFRleHRBbGlnbihUZXh0QWxpZ25Nb2RlOjpDZW50ZXIpOwotICAgIGlmIChzdHlsZS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgc3R5bGUtPnNldFdyaXRpbmdNb2Rl
KExlZnRUb1JpZ2h0V3JpdGluZ01vZGUpOwotfQotCiBzdGF0aWMgYm9vbCBoYXNFZmZlY3RpdmVE
aXNwbGF5Tm9uZUZvckRpc3BsYXlDb250ZW50cyhjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewog
ICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZGlzcGxheS0zLyN1bmJveC1odG1s
CkBAIC0xMTQxLDM4ICsxMTAwLDYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJT
dHlsZUZvclNpdGVTcGVjaWZpY1F1aXJrcyhSZW5kZXJTdHlsZSYgc3R5bGUsIGMKICAgICB9CiB9
CiAKLXN0YXRpYyB2b2lkIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2UoUmVuZGVyU3R5bGUmIHN0
eWxlKQotewotICAgIGF1dG8gW2ZvbnRPcmllbnRhdGlvbiwgZ2x5cGhPcmllbnRhdGlvbl0gPSBz
dHlsZS5mb250QW5kR2x5cGhPcmllbnRhdGlvbigpOwotCi0gICAgY29uc3QgYXV0byYgZm9udERl
c2NyaXB0aW9uID0gc3R5bGUuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgaWYgKGZvbnREZXNjcmlw
dGlvbi5vcmllbnRhdGlvbigpID09IGZvbnRPcmllbnRhdGlvbiAmJiBmb250RGVzY3JpcHRpb24u
bm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IGdseXBoT3JpZW50YXRpb24pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gbmV3Rm9udERlc2NyaXB0aW9uID0gZm9udERlc2NyaXB0aW9uOwot
ICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXROb25DSktHbHlwaE9yaWVudGF0aW9uKGdseXBoT3Jp
ZW50YXRpb24pOwotICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRPcmllbnRhdGlvbihmb250T3Jp
ZW50YXRpb24pOwotICAgIHN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKG5ld0ZvbnRE
ZXNjcmlwdGlvbikpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKLXsKLSAgICBhdXRvJiBzdHlsZSA9ICptX3N0YXRl
LnN0eWxlKCk7Ci0gICAgaWYgKCFjYXNjYWRlLmJ1aWxkZXJTdGF0ZSgpLmZvbnREaXJ0eSgpICYm
IHN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5B
QkxFKFRFWFRfQVVUT1NJWklORykKLSAgICBjaGVja0ZvclRleHRTaXplQWRqdXN0KHN0eWxlKTsK
LSNlbmRpZgotICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5w
YXJlbnRTdHlsZSgpKTsKLSAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFy
ZW50U3R5bGUoKSk7Ci0gICAgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdHlsZSk7Ci0gICAg
c3R5bGUuZm9udENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwot
ICAgIGlmIChtX3N0YXRlLmZvbnRTaXplSGFzVmlld3BvcnRVbml0cygpKQotICAgICAgICBzdHls
ZS5zZXRIYXNWaWV3cG9ydFVuaXRzKHRydWUpOwotCi0gICAgY2FzY2FkZS5idWlsZGVyU3RhdGUo
KS5jbGVhckZvbnREaXJ0eSgpOwotfQogCiBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+IFN0eWxl
UmVzb2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIHVu
c2lnbmVkIHJ1bGVzVG9JbmNsdWRlKQogewpAQCAtMTMyNSw2MyArMTI1MiwyNiBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1h
dGNoUmVzdWx0LCBjb25zdAogICAgICAgICAvLyBGaW5kIG91dCBpZiB0aGVyZSdzIGEgLXdlYmtp
dC1hcHBlYXJhbmNlIHByb3BlcnR5IGluIGVmZmVjdCBmcm9tIHRoZSBVQSBzaGVldC4KICAgICAg
ICAgLy8gSWYgc28sIHdlIGNhY2hlIHRoZSBib3JkZXIgYW5kIGJhY2tncm91bmQgc3R5bGVzIHNv
IHRoYXQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKCkKICAgICAgICAgLy8gY2FuIGxvb2sgYXQg
dGhlbSBsYXRlciB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSBzdHlsZWQgZm9ybSBjb250cm9s
IG9yIG5vdC4KLSAgICAgICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSBjYXNjYWRlKCp0aGlzLCBt
YXRjaFJlc3VsdCwgeyBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQgfSwgaW5jbHVkZWRQ
cm9wZXJ0aWVzKTsKLQotICAgICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhDU1NQcm9wZXJ0
eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24pOwotICAg
ICAgICBhZGp1c3RTdHlsZUZvckludGVyQ2hhcmFjdGVyUnVieSgpOwotCi0jaWYgRU5BQkxFKERB
UktfTU9ERV9DU1MpCi0gICAgICAgIC8vIFN1cHBvcnRlZCBjb2xvciBzY2hlbWVzIGNhbiBhZmZl
Y3QgcmVzb2x2ZWQgY29sb3JzLCBzbyB3ZSBuZWVkIHRvIGFwcGx5IHRoYXQgcHJvcGVydHkgYmVm
b3JlIGFueSBjb2xvciBwcm9wZXJ0aWVzLgotICAgICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGll
cyhDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lKTsKLSNlbmRp
ZgotCi0gICAgICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxh
c3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSk7Ci0KLSAgICAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRp
cnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgICAgIHVwZGF0ZUZvbnQoY2FzY2FkZSk7Ci0KLSAg
ICAgICAgLy8gTm93IHJlc29sdmUgcmVtYWluaW5nIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCB0aGUg
cmVzdCwgaW4gYW55IG9yZGVyCi0gICAgICAgIGNhc2NhZGUuYXBwbHlDdXN0b21Qcm9wZXJ0aWVz
KCk7Ci0KLSAgICAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVBy
b3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkpOworICAgICAgICBTdHlsZTo6QnVpbGRlciBidWlsZGVy
KCp0aGlzLCBtYXRjaFJlc3VsdCwgeyBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQgfSwg
aW5jbHVkZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgYnVpbGRlci5hcHBseUFsbFByb3BlcnRpZXMo
KTsKIAogICAgICAgICBzdGF0ZS5jYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKICAgICB9CiAK
LSAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCBT
dHlsZTo6YWxsQ2FzY2FkZUxldmVscygpLCBpbmNsdWRlZFByb3BlcnRpZXMpOwotCi0gICAgY2Fz
Y2FkZS5hcHBseVByb3BlcnRpZXMoQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24sIENTU1By
b3BlcnR5V2Via2l0UnVieVBvc2l0aW9uKTsKLSAgICBhZGp1c3RTdHlsZUZvckludGVyQ2hhcmFj
dGVyUnVieSgpOworICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnRoaXMsIG1hdGNoUmVzdWx0
LCBTdHlsZTo6YWxsQ2FzY2FkZUxldmVscygpLCBpbmNsdWRlZFByb3BlcnRpZXMpOwogCi0jaWYg
RU5BQkxFKERBUktfTU9ERV9DU1MpCi0gICAgLy8gU3VwcG9ydGVkIGNvbG9yIHNjaGVtZXMgY2Fu
IGFmZmVjdCByZXNvbHZlZCBjb2xvcnMsIHNvIHdlIG5lZWQgdG8gYXBwbHkgdGhhdCBwcm9wZXJ0
eSBiZWZvcmUgYW55IGNvbG9yIHByb3BlcnRpZXMuCi0gICAgY2FzY2FkZS5hcHBseVByb3BlcnRp
ZXMoQ1NTUHJvcGVydHlDb2xvclNjaGVtZSwgQ1NTUHJvcGVydHlDb2xvclNjaGVtZSk7Ci0jZW5k
aWYKLQotICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RI
aWdoUHJpb3JpdHlQcm9wZXJ0eSk7CisgICAgLy8gSGlnaCBwcmlvcml0eSBwcm9wZXJ0aWVzIG1h
eSBhZmZlY3QgcmVzb2x1dGlvbiBvZiBvdGhlciBwcm9wZXJ0aWVzICh0aGV5IGFyZSBtb3N0bHkg
Zm9udCByZWxhdGVkKS4KKyAgICBidWlsZGVyLmFwcGx5SGlnaFByaW9yaXR5UHJvcGVydGllcygp
OwogCiAgICAgLy8gSWYgdGhlIGVmZmVjdGl2ZSB6b29tIHZhbHVlIGNoYW5nZXMsIHdlIGNhbid0
IHVzZSB0aGUgbWF0Y2hlZCBwcm9wZXJ0aWVzIGNhY2hlLiBTdGFydCBvdmVyLgogICAgIGlmIChj
YWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IHN0
YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkKICAgICAgICAgcmV0dXJuIGFwcGx5TWF0Y2hl
ZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQsIERvTm90VXNlTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZSk7CiAKLSAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgdXBkYXRlIGl0IG5v
dy4KLSAgICB1cGRhdGVGb250KGNhc2NhZGUpOwotCiAgICAgLy8gSWYgdGhlIGZvbnQgY2hhbmdl
ZCwgd2UgY2FuJ3QgdXNlIHRoZSBtYXRjaGVkIHByb3BlcnRpZXMgY2FjaGUuIFN0YXJ0IG92ZXIu
CiAgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKSAhPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQsIERvTm90VXNl
TWF0Y2hlZFByb3BlcnRpZXNDYWNoZSk7CiAKLSAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5pbmcg
Y3VzdG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKLSAgICBjYXNjYWRl
LmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOwotCi0gICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMo
Zmlyc3RMb3dQcmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkpOwotCi0gICAgLy8gRmlu
YWxseSwgc29tZSBwcm9wZXJ0aWVzIG11c3QgYmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgdGhleSB3
ZXJlIHBhcnNlZC4KLSAgICAvLyBUaGVyZSBhcmUgc29tZSBDU1MgcHJvcGVydGllcyB0aGF0IGFm
ZmVjdCB0aGUgc2FtZSBSZW5kZXJTdHlsZSB2YWx1ZXMsCi0gICAgLy8gc28gdG8gcHJlc2VydmUg
YmVoYXZpb3IsIHdlIHF1ZXVlIHRoZW0gdXAgZHVyaW5nIGNhc2NhZGUgYW5kIGZsdXNoIGhlcmUu
Ci0gICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwotCi0gICAgQVNTRVJUKCFj
YXNjYWRlLmJ1aWxkZXJTdGF0ZSgpLmZvbnREaXJ0eSgpKTsKKyAgICBidWlsZGVyLmFwcGx5TG93
UHJpb3JpdHlQcm9wZXJ0aWVzKCk7CiAKICAgICBpZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gp
CiAgICAgICAgIHJldHVybjsKQEAgLTE0MDQsMjggKzEyOTQsOSBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdQogICAgICAgICByZXR1cm47CiAKICAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsK
LSAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIG1hdGNoUmVzdWx0LCB7
IH0pOwotICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0eShpZCwgKnZhbHVlKTsKLSAgICB1cGRhdGVG
b250KGNhc2NhZGUpOwotfQotCi0vLyBTVkcgaGFuZGxlcyB6b29taW5nIGluIGEgZGlmZmVyZW50
IHdheSBjb21wYXJlZCB0byBDU1MuIFRoZSB3aG9sZSBkb2N1bWVudCBpcyBzY2FsZWQgaW5zdGVh
ZAotLy8gb2YgZWFjaCBpbmRpdmlkdWFsIGxlbmd0aCB2YWx1ZSBpbiB0aGUgcmVuZGVyIHN0eWxl
IC8gdHJlZS4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGgqKCkKLS8vIG11bHRpcGxp
ZXMgZWFjaCByZXNvbHZlZCBsZW5ndGggd2l0aCB0aGUgem9vbSBtdWx0aXBsaWVyIC0gc28gZm9y
IFNWRyB3ZSBuZWVkIHRvIGRpc2FibGUgdGhhdC4KLS8vIFRob3VnaCBhbGwgQ1NTIHZhbHVlcyB0
aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG91dGVybW9zdCA8c3ZnPiBlbGVtZW50cyAod2lkdGgvaGVp
Z2h0L2JvcmRlci9wYWRkaW5nLi4uKQotLy8gbmVlZCB0byByZXNwZWN0IHRoZSBzY2FsaW5nLiBS
ZW5kZXJCb3ggKHRoZSBwYXJlbnQgY2xhc3Mgb2YgUmVuZGVyU1ZHUm9vdCkgZ3JhYnMgdmFsdWVz
IGxpa2UKLS8vIHdpZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy8uLi4gZnJvbSB0aGUgUmVuZGVy
U3R5bGUgLT4gZm9yIFNWRyB0aGVzZSB2YWx1ZXMgd291bGQgbmV2ZXIgc2NhbGUsCi0vLyBpZiB3
ZSdkIHBhc3MgYSAxLjAgem9vbSBmYWN0b3IgZXZlcnlod2VyZS4gU28gd2Ugb25seSBwYXNzIGEg
em9vbSBmYWN0b3Igb2YgMS4wIGZvciBzcGVjaWZpYwotLy8gcHJvcGVydGllcyB0aGF0IGFyZSBO
T1QgYWxsb3dlZCB0byBzY2FsZSB3aXRoaW4gYSB6b29tZWQgU1ZHIGRvY3VtZW50IChsZXR0ZXIv
d29yZC1zcGFjaW5nL2ZvbnQtc2l6ZSkuCi1ib29sIFN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pvb21S
dWxlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RhdGUuZWxlbWVudCgpICYmIG1fc3RhdGUu
ZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKTsKLX0KLQotLy8gU2NhbGUgd2l0aC9oZWlnaHQgcHJv
cGVydGllcyBvbiBpbmxpbmUgU1ZHIHJvb3QuCi1ib29sIFN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pv
b21SdWxlc0Zvckxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzPFNWR0VsZW1lbnQ+KG1f
c3RhdGUuZWxlbWVudCgpKSAmJiAhKGlzPFNWR1NWR0VsZW1lbnQ+KCptX3N0YXRlLmVsZW1lbnQo
KSkgJiYgbV9zdGF0ZS5lbGVtZW50KCktPnBhcmVudE5vZGUoKSk7CisgICAgU3R5bGU6OkJ1aWxk
ZXIgYnVpbGRlcigqdGhpcywgbWF0Y2hSZXN1bHQsIHsgfSk7CisgICAgYnVpbGRlci5hcHBseVBy
b3BlcnR5KGlkLCAqdmFsdWUpOworICAgIGJ1aWxkZXIudXBkYXRlRm9udCgpOwogfQogCiBSZWZQ
dHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NWYWx1ZSYgdmFsdWUp
CkBAIC0xNDQ3LDgzICsxMzE4LDE5IEBAIFJlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
I2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9y
VGV4dFNpemVBZGp1c3QoUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIGlmIChzdHlsZS50ZXh0
U2l6ZUFkanVzdCgpLmlzQXV0bygpCi0gICAgICAgIHx8ICFzZXR0aW5ncygpLnRleHRBdXRvc2l6
aW5nRW5hYmxlZCgpCi0gICAgICAgIHx8IChzZXR0aW5ncygpLnRleHRBdXRvc2l6aW5nVXNlc0lk
ZW1wb3RlbnRNb2RlKCkgJiYgIXN0eWxlLnRleHRTaXplQWRqdXN0KCkuaXNOb25lKCkpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLmZvbnRE
ZXNjcmlwdGlvbigpOwotICAgIGlmICghc3R5bGUudGV4dFNpemVBZGp1c3QoKS5pc05vbmUoKSkK
LSAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdGb250RGVzY3Jp
cHRpb24uc3BlY2lmaWVkU2l6ZSgpICogc3R5bGUudGV4dFNpemVBZGp1c3QoKS5tdWx0aXBsaWVy
KCkpOwotICAgIGVsc2UKLSAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpKTsKLSAgICBzdHlsZS5zZXRGb250
RGVzY3JpcHRpb24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsKLX0KLSNlbmRpZgotCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICBpZiAoIXBhcmVudFN0eWxl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc3R5bGUuZWZmZWN0aXZlWm9vbSgpID09IHBh
cmVudFN0eWxlLT5lZmZlY3RpdmVab29tKCkgJiYgc3R5bGUudGV4dFpvb20oKSA9PSBwYXJlbnRT
dHlsZS0+dGV4dFpvb20oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgYXV0byYgY2hp
bGRGb250ID0gc3R5bGUuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgYXV0byBuZXdGb250RGVzY3Jp
cHRpb24gPSBjaGlsZEZvbnQ7Ci0gICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBj
aGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKLSAgICBzdHlsZS5zZXRGb250RGVzY3JpcHRpb24o
V1RGTW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpj
aGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpCi17Ci0gICAgY29uc3QgYXV0byYgY2hpbGRGb250ID0gc3R5
bGUuZm9udERlc2NyaXB0aW9uKCk7Ci0KLSAgICBpZiAoY2hpbGRGb250LmlzQWJzb2x1dGVTaXpl
KCkgfHwgIXBhcmVudFN0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBhdXRvJiBw
YXJlbnRGb250ID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGlmIChjaGls
ZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0
U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gV2Uga25vdyB0aGUgcGFyZW50IGlzIG1v
bm9zcGFjZSBvciB0aGUgY2hpbGQgaXMgbW9ub3NwYWNlLCBhbmQgdGhhdCBmb250Ci0gICAgLy8g
c2l6ZSB3YXMgdW5zcGVjaWZpZWQuIFdlIHdhbnQgdG8gc2NhbGUgb3VyIGZvbnQgc2l6ZSBhcyBh
cHByb3ByaWF0ZS4KLSAgICAvLyBJZiB0aGUgZm9udCB1c2VzIGEga2V5d29yZCBzaXplLCB0aGVu
IHdlIHJlZmV0Y2ggZnJvbSB0aGUgdGFibGUgcmF0aGVyIHRoYW4KLSAgICAvLyBtdWx0aXBseWlu
ZyBieSBvdXIgc2NhbGUgZmFjdG9yLgotICAgIGZsb2F0IHNpemU7Ci0gICAgaWYgKENTU1ZhbHVl
SUQgc2l6ZUlkZW50aWZpZXIgPSBjaGlsZEZvbnQua2V5d29yZFNpemVBc0lkZW50aWZpZXIoKSkK
LSAgICAgICAgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIs
IGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCksIGRvY3VtZW50KCkpOwotICAgIGVsc2Ug
ewotICAgICAgICBmbG9hdCBmaXhlZFNjYWxlRmFjdG9yID0gKHNldHRpbmdzKCkuZGVmYXVsdEZp
eGVkRm9udFNpemUoKSAmJiBzZXR0aW5ncygpLmRlZmF1bHRGb250U2l6ZSgpKQotICAgICAgICAg
ICAgPyBzdGF0aWNfY2FzdDxmbG9hdD4oc2V0dGluZ3MoKS5kZWZhdWx0Rml4ZWRGb250U2l6ZSgp
KSAvIHNldHRpbmdzKCkuZGVmYXVsdEZvbnRTaXplKCkKLSAgICAgICAgICAgIDogMTsKLSAgICAg
ICAgc2l6ZSA9IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID8KLSAgICAgICAgICAg
ICAgICBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpIC8gZml4ZWRTY2FsZUZhY3RvciA6Ci0gICAg
ICAgICAgICAgICAgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSAqIGZpeGVkU2NhbGVGYWN0b3I7
Ci0gICAgfQotCi0gICAgYXV0byBuZXdGb250RGVzY3JpcHRpb24gPSBjaGlsZEZvbnQ7Ci0gICAg
c2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICBzdHlsZS5zZXRGb250
RGVzY3JpcHRpb24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsKLX0KLQogdm9pZCBTdHls
ZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKCkKIHsKICAgICBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5n
TW9kZShzZXR0aW5ncygpLmZvbnRSZW5kZXJpbmdNb2RlKCkpOwogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRPbmVGYW1pbHkoc3RhbmRhcmRGYW1pbHkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRL
ZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKENTU1ZhbHVlTWVkaXVtKTsKLSAgICBzZXRGb250U2l6
ZShmb250RGVzY3JpcHRpb24sIFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVNZWRp
dW0sIGZhbHNlLCBkb2N1bWVudCgpKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFNob3VsZEFs
bG93VXNlckluc3RhbGxlZEZvbnRzKHNldHRpbmdzKCkuc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMoKSA/IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgOiBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250czo6Tm8pOwotICAgIHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOwotfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKLXsKKyAg
ICBhdXRvIHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlTWVkaXVtLCBm
YWxzZSwgZG9jdW1lbnQoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUo
c2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0
ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNpemUsIGZvbnREZXNjcmlwdGlvbi5pc0Fic29s
dXRlU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSwgbV9zdGF0ZS5zdHlsZSgpLCBkb2N1bWVudCgp
KSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRG
b250U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNpemUsIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRl
U2l6ZSgpLCBpczxTVkdFbGVtZW50PihtX3N0YXRlLmVsZW1lbnQoKSksIG1fc3RhdGUuc3R5bGUo
KSwgZG9jdW1lbnQoKSkpOworCisgICAgZm9udERlc2NyaXB0aW9uLnNldFNob3VsZEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzKHNldHRpbmdzKCkuc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMo
KSA/IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgOiBBbGxvd1VzZXJJbnN0YWxsZWRGb250
czo6Tm8pOworICAgIHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNj
cmlwdGlvbikpOwogfQogCiBib29sIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggZDY0YzJjZTFkNTkuLjk4YzUxZDFiMDI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTg1LDcgKzg1LDcgQEAgY2xhc3Mg
Vmlld3BvcnRTdHlsZVJlc29sdmVyOwogc3RydWN0IFJlc291cmNlTG9hZGVyT3B0aW9uczsKIAog
bmFtZXNwYWNlIFN0eWxlIHsKLWNsYXNzIFByb3BlcnR5Q2FzY2FkZTsKK2NsYXNzIEJ1aWxkZXJT
dGF0ZTsKIH0KIAogLy8gTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMgaXMgdXNlZCBpbiBtZWRpYSBx
dWVyaWVzLCB3aGVyZSByZWxhdGl2ZSB1bml0cwpAQCAtMTYzLDE0ICsxNjMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSos
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4pOwogICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRv
Q3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAKLSAgICB2b2lkIHVwZGF0
ZUZvbnQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRT
dHlsZSgpOwogCi0gICAgdm9pZCBzZXRGb250U2l6ZShGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwg
ZmxvYXQgc2l6ZSk7Ci0KLSAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0OwotICAgIGJv
b2wgdXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgY29uc3Q7Ci0KICAgICBzdGF0aWMgYm9vbCBj
b2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KGNvbnN0IENTU1ByaW1p
dGl2ZVZhbHVlJik7CiAgICAgQ29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NT
UHJpbWl0aXZlVmFsdWUmLCBib29sIGZvclZpc2l0ZWRMaW5rID0gZmFsc2UpIGNvbnN0OwogCkBA
IC0yMDUsMTMgKzE5OSw2IEBAIHB1YmxpYzoKICAgICBib29sIGNyZWF0ZUZpbHRlck9wZXJhdGlv
bnMoY29uc3QgQ1NTVmFsdWUmIGluVmFsdWUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlv
bnMpOwogCiBwcml2YXRlOgotICAgIC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhlIGRlZmF1
bHQgZm9udCBzaXplIGlmIGl0IGRldGVjdHMgdGhhdCB0aGUgY3VycmVudCBnZW5lcmljIGZvbnQg
ZmFtaWx5IGhhcyBjaGFuZ2VkLiAtZHdoCi0gICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlD
aGFuZ2UoUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwotICAg
IHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKTsKLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotICAgIHZvaWQgY2hl
Y2tGb3JUZXh0U2l6ZUFkanVzdChSZW5kZXJTdHlsZSYpOwotI2VuZGlmCi0KICAgICB2b2lkIGFk
anVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50Qm94U3R5bGUsIGNvbnN0IEVsZW1lbnQqKTsK
ICAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlRm9yU2l0ZVNwZWNpZmljUXVpcmtzKFJlbmRlclN0
eWxlJiwgY29uc3QgRWxlbWVudCYpOwogICAgIApAQCAtMjQ2LDE3ICsyMzMsMTIgQEAgcHVibGlj
OgogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVy
biBtX3BhcmVudFN0eWxlOyB9CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVu
dFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9CiAKLSAgICAgICAg
dm9pZCBzZXRGb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMoYm9vbCBoYXNWaWV3cG9ydFVuaXRzKSB7
IG1fZm9udFNpemVIYXNWaWV3cG9ydFVuaXRzID0gaGFzVmlld3BvcnRVbml0czsgfQotICAgICAg
ICBib29sIGZvbnRTaXplSGFzVmlld3BvcnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNp
emVIYXNWaWV3cG9ydFVuaXRzOyB9Ci0KICAgICAgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tn
cm91bmQoKTsKICAgICAgICAgYm9vbCBoYXNVQUFwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBt
X2hhc1VBQXBwZWFyYW5jZTsgfQogICAgICAgICBCb3JkZXJEYXRhIGJvcmRlckRhdGEoKSBjb25z
dCB7IHJldHVybiBtX2JvcmRlckRhdGE7IH0KICAgICAgICAgRmlsbExheWVyIGJhY2tncm91bmRE
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YTsgfQogICAgICAgICBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ29sb3I7
IH0KIAotICAgICAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxl
bWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOyB9Ci0KICAgICAgICAgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsgfQogCiAgICAgICAgIGNvbnN0
IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
b3JGaWx0ZXI7IH0KQEAgLTI3OCw3ICsyNjAsNiBAQCBwdWJsaWM6CiAKICAgICAgICAgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7CiAKLSAgICAg
ICAgYm9vbCBtX2ZvbnRTaXplSGFzVmlld3BvcnRVbml0cyB7IGZhbHNlIH07CiAgICAgICAgIGJv
b2wgbV9oYXNVQUFwcGVhcmFuY2UgeyBmYWxzZSB9OwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAppbmRleCAzOWI5ZjY1MzY3Ny4uNmI4Y2I3MjMxN2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKQEAgLTQyLDEwICs0MiwxMCBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJT
dHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZUNvbG9yLmgiCiAjaW5j
bHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgpAQCAtMjM0LDcg
KzIzNCw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlh
YmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlEIHByb3BJCiAgICAgQ1NTUHJvcGVydHlQYXJzZXI6
OmNvbGxlY3RQYXJzZWRDdXN0b21Qcm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVzKHN5bnRheCwgZmFs
c2UsIGRlcGVuZGVuY2llcywgcmVzb2x2ZWREYXRhLT50b2tlbnMoKSwgbV9jb250ZXh0KTsKIAog
ICAgIGZvciAoYXV0byBpZCA6IGRlcGVuZGVuY2llcykKLSAgICAgICAgYnVpbGRlclN0YXRlLmNh
c2NhZGUoKS5hcHBseVByb3BlcnRpZXMoaWQsIGlkKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLmJ1
aWxkZXIoKS5hcHBseVByb3BlcnR5KGlkKTsKIAogICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNl
cjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgc3ludGF4LCByZXNvbHZlZERh
dGEtPnRva2VucygpLCBidWlsZGVyU3RhdGUsIG1fY29udGV4dCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCmluZGV4IDVkNDA3MjY3OTk1
Li40YmEwYzFjMjNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
cm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlci5jcHAKQEAgLTY3LDEyICs2NywxMiBAQAogI2luY2x1ZGUgIkhhc2hUb29scy5o
IgogLy8gRklYTUUtTkVXUEFSU0VSOiBSZXBsYWNlIFBhaXIgYW5kIFJlY3Qgd2l0aCBhY3R1YWwg
Q1NTVmFsdWUgc3ViY2xhc3NlcyAoQ1NTVmFsdWVQYWlyIGFuZCBDU1NRdWFkVmFsdWUpLgogI2lu
Y2x1ZGUgIlBhaXIuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJS
ZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIKICNpbmNsdWRlICJT
VkdQYXRoVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCiAjaW5jbHVkZSAi
U3R5bGVCdWlsZGVyQ29udmVydGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFu
ZC5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmRGdW5jdGlvbnMuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCmluZGV4IGMzODMzZDRjZTZmLi40NTNl
YWExNGI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCkBAIC0z
Miw3ICszMiw2IEBACiAjaW5jbHVkZSAiUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaCIKICNpbmNs
dWRlICJTdHlsZUJ1aWxkZXJHZW5lcmF0ZWQuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hv
cnRoYW5kLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBuYW1lc3BhY2UgU3R5bGUgewpAQCAtMTczLDIzICsxNzIsMTggQEAgc3RhdGljIGlubGlu
ZSBib29sIGlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiB9CiAjZW5k
aWYKIAotUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBPcHRpb25TZXQ8Q2Fz
Y2FkZUxldmVsPiBjYXNjYWRlTGV2ZWxzLCBJbmNsdWRlZFByb3BlcnRpZXMgaW5jbHVkZWRQcm9w
ZXJ0aWVzKQorUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUoY29uc3QgTWF0Y2hSZXN1
bHQmIG1hdGNoUmVzdWx0LCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiBjYXNjYWRlTGV2ZWxzLCBJ
bmNsdWRlZFByb3BlcnRpZXMgaW5jbHVkZWRQcm9wZXJ0aWVzLCBEaXJlY3Rpb24gZGlyZWN0aW9u
KQogICAgIDogbV9tYXRjaFJlc3VsdChtYXRjaFJlc3VsdCkKICAgICAsIG1faW5jbHVkZWRQcm9w
ZXJ0aWVzKGluY2x1ZGVkUHJvcGVydGllcykKLSAgICAsIG1fYnVpbGRlclN0YXRlKHN0ZDo6aW5f
cGxhY2UsICp0aGlzLCBzdHlsZVJlc29sdmVyKQorICAgICwgbV9kaXJlY3Rpb24ocmVzb2x2ZURp
cmVjdGlvbkFuZFdyaXRpbmdNb2RlKGRpcmVjdGlvbikpCiB7Ci0gICAgLy8gRGlyZWN0aW9uYWwg
cHJvcGVydGllcyAoKi1iZWZvcmUvYWZ0ZXIpIGFyZSBhbGlhc2VzIHRoYXQgZGVwZW5kIG9uIHRo
ZSBUZXh0RGlyZWN0aW9uIGFuZCBXcml0aW5nTW9kZS4KLSAgICAvLyBUaGVzZSBtdXN0IGJlIHJl
c29sdmVkIGJlZm9yZSB3ZSBjYW4gYmVnaW4gYnVpbGRpbmcgdGhlIHByb3BlcnR5IGNhc2NhZGUu
Ci0gICAgcmVzb2x2ZURpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKCk7Ci0KICAgICBidWlsZENhc2Nh
ZGUoY2FzY2FkZUxldmVscyk7CiB9CiAKIFByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHlDYXNjYWRl
KGNvbnN0IFByb3BlcnR5Q2FzY2FkZSYgcGFyZW50LCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiBj
YXNjYWRlTGV2ZWxzKQotICAgIDogIG1fbWF0Y2hSZXN1bHQocGFyZW50Lm1fbWF0Y2hSZXN1bHQp
CisgICAgOiBtX21hdGNoUmVzdWx0KHBhcmVudC5tX21hdGNoUmVzdWx0KQogICAgICwgbV9pbmNs
dWRlZFByb3BlcnRpZXMocGFyZW50Lm1faW5jbHVkZWRQcm9wZXJ0aWVzKQogICAgICwgbV9kaXJl
Y3Rpb24ocGFyZW50Lm1fZGlyZWN0aW9uKQotICAgICwgbV93cml0aW5nTW9kZShwYXJlbnQubV93
cml0aW5nTW9kZSkKIHsKICAgICBidWlsZENhc2NhZGUoY2FzY2FkZUxldmVscyk7CiB9CkBAIC0y
MzAsNyArMjI0LDcgQEAgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnNldFByb3BlcnR5SW50ZXJuYWwo
UHJvcGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eUlEIGlkLAogdm9pZCBQcm9wZXJ0eUNhc2Nh
ZGU6OnNldChDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgY3NzVmFsdWUsIHVuc2lnbmVkIGxp
bmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIFNjb3BlT3JkaW5hbCBzdHls
ZVNjb3BlT3JkaW5hbCkKIHsKICAgICBpZiAoQ1NTUHJvcGVydHk6OmlzRGlyZWN0aW9uQXdhcmVQ
cm9wZXJ0eShpZCkpCi0gICAgICAgIGlkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25B
d2FyZVByb3BlcnR5KGlkLCBtX2RpcmVjdGlvbiwgbV93cml0aW5nTW9kZSk7CisgICAgICAgIGlk
ID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBtX2RpcmVj
dGlvbi50ZXh0RGlyZWN0aW9uLCBtX2RpcmVjdGlvbi53cml0aW5nTW9kZSk7CiAKICAgICBBU1NF
UlQoIXNob3VsZEFwcGx5UHJvcGVydHlJblBhcnNlT3JkZXIoaWQpKTsKIApAQCAtMzc3LDEyMCAr
MzcxLDcgQEAgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFkZEltcG9ydGFudE1hdGNoZXMoQ2FzY2Fk
ZUxldmVsIGNhc2NhZGVMZXZlbCkKICAgICAgICAgYWRkTWF0Y2gobWF0Y2hlZERlY2xhcmF0aW9u
c1ttYXRjaC5pbmRleF0sIGNhc2NhZGVMZXZlbCwgdHJ1ZSk7CiB9CiAKLXZvaWQgUHJvcGVydHlD
YXNjYWRlOjphcHBseURlZmVycmVkUHJvcGVydGllcygpCi17Ci0gICAgZm9yIChhdXRvJiBwcm9w
ZXJ0eSA6IG1fZGVmZXJyZWRQcm9wZXJ0aWVzKQotICAgICAgICBhcHBseVByb3BlcnR5KHByb3Bl
cnR5KTsKLX0KLQotdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydGllcyhpbnQgZmly
c3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSkKLXsKLSAgICBpZiAoTElLRUxZKG1fY3VzdG9t
UHJvcGVydGllcy5pc0VtcHR5KCkpKQotICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0aWVzSW1w
bDxDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmc6OkRpc2FibGVkPihmaXJzdFByb3BlcnR5LCBs
YXN0UHJvcGVydHkpOwotCi0gICAgcmV0dXJuIGFwcGx5UHJvcGVydGllc0ltcGw8Q3VzdG9tUHJv
cGVydHlDeWNsZVRyYWNraW5nOjpFbmFibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHkp
OwotfQotCi10ZW1wbGF0ZTxQcm9wZXJ0eUNhc2NhZGU6OkN1c3RvbVByb3BlcnR5Q3ljbGVUcmFj
a2luZyB0cmFja0N5Y2xlcz4KLWlubGluZSB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9w
ZXJ0aWVzSW1wbChpbnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSkKLXsKLSAgICBm
b3IgKGludCBpZCA9IGZpcnN0UHJvcGVydHk7IGlkIDw9IGxhc3RQcm9wZXJ0eTsgKytpZCkgewot
ICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0
eUlEPihpZCk7Ci0gICAgICAgIGlmICghaGFzUHJvcGVydHkocHJvcGVydHlJRCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgQVNTRVJUKHByb3BlcnR5SUQgIT0gQ1NTUHJvcGVydHlD
dXN0b20pOwotICAgICAgICBhdXRvJiBwcm9wZXJ0eSA9IG1fcHJvcGVydGllc1twcm9wZXJ0eUlE
XTsKLQotICAgICAgICBpZiAodHJhY2tDeWNsZXMgPT0gQ3VzdG9tUHJvcGVydHlDeWNsZVRyYWNr
aW5nOjpFbmFibGVkKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoYnVpbGRlclN0YXRlKCku
bV9pblByb2dyZXNzUHJvcGVydGllcy5nZXQocHJvcGVydHlJRCkpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gV2UgYXJlIGluIGEgY3ljbGUgKGVnLiBzZXR0aW5nIGZvbnQgc2l6ZSB1c2luZyByZWdp
c3RlcmVkIGN1c3RvbSBwcm9wZXJ0eSB2YWx1ZSBjb250YWluaW5nIGVtKS4KLSAgICAgICAgICAg
ICAgICAvLyBTbyB0aGlzIHZhbHVlIHNob3VsZCBiZSB1bnNldC4KLSAgICAgICAgICAgICAgICBi
dWlsZGVyU3RhdGUoKS5tX2FwcGxpZWRQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlEKTsKLSAgICAg
ICAgICAgICAgICAvLyBUaGlzIHByb3BlcnR5IGlzIGluIGEgY3ljbGUsIGFuZCBvbmx5IHRoZSBy
b290IG9mIHRoZSBjYWxsIHN0YWNrIHdpbGwgaGF2ZSBmaXJzdFByb3BlcnR5ICE9IGxhc3RQcm9w
ZXJ0eS4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZmlyc3RQcm9wZXJ0eSA9PSBsYXN0UHJvcGVy
dHkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYXV0byYgYnVpbGRlclN0YXRlID0gKm1fYnVpbGRlclN0YXRlOwotICAgICAgICAgICAgYnVp
bGRlclN0YXRlLm1faW5Qcm9ncmVzc1Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SUQpOwotICAgICAg
ICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBidWlsZGVyU3RhdGUu
bV9hcHBsaWVkUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCk7Ci0gICAgICAgICAgICBidWlsZGVy
U3RhdGUubV9pblByb2dyZXNzUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCwgZmFsc2UpOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBkb24ndCBo
YXZlIGFueSBjdXN0b20gcHJvcGVydGllcywgdGhlbiB0aGVyZSBjYW4ndCBiZSBhbnkgY3ljbGVz
LgotICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5KTsKLSAgICB9Ci19Ci0KLXZvaWQgUHJv
cGVydHlDYXNjYWRlOjphcHBseUN1c3RvbVByb3BlcnRpZXMoKQotewotICAgIGZvciAoYXV0byYg
bmFtZSA6IG1fY3VzdG9tUHJvcGVydGllcy5rZXlzKCkpCi0gICAgICAgIGFwcGx5Q3VzdG9tUHJv
cGVydHkobmFtZSk7Ci19Ci0KLXZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseUN1c3RvbVByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBhdXRvJiBidWlsZGVyU3RhdGUgPSAqbV9i
dWlsZGVyU3RhdGU7Ci0gICAgaWYgKGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRDdXN0b21Qcm9wZXJ0
aWVzLmNvbnRhaW5zKG5hbWUpIHx8ICFtX2N1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFtZSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcHJvcGVydHkgPSBjdXN0b21Qcm9wZXJ0eShu
YW1lKTsKLSAgICBib29sIGluQ3ljbGUgPSBidWlsZGVyU3RhdGUubV9pblByb2dyZXNzUHJvcGVy
dGllc0N1c3RvbS5jb250YWlucyhuYW1lKTsKLQotICAgIGZvciAoYXV0byBpbmRleCA6IHsgU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rLCBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7Ci0gICAgICAgIGlmICghcHJvcGVydHku
Y3NzVmFsdWVbaW5kZXhdKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpbmRl
eCAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiBidWlsZGVyU3RhdGUuc3R5bGUo
KS5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVlVG9BcHBs
eSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlPigqcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKSk7Ci0KLSAgICAgICAgaWYgKGlu
Q3ljbGUpIHsKLSAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRDdXN0b21Qcm9wZXJ0
aWVzLmFkZChuYW1lKTsgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCB0cnkgdG8gYXBwbHkgdGhpcyBw
cm9wZXJ0eSBhZ2FpbiB3aGlsZSByZXNvbHZpbmcgaXQuCi0gICAgICAgICAgICB2YWx1ZVRvQXBw
bHkgPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVXaXRoSUQobmFtZSwgQ1NTVmFsdWVJ
bnZhbGlkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2luUHJvZ3Jlc3NQ
cm9wZXJ0aWVzQ3VzdG9tLmFkZChuYW1lKTsKLQotICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KHZhbHVlVG9BcHBseS0+dmFs
dWUoKSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWUgPSByZXNv
bHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSk7
Ci0KLSAgICAgICAgICAgIGlmIChidWlsZGVyU3RhdGUubV9hcHBsaWVkQ3VzdG9tUHJvcGVydGll
cy5jb250YWlucyhuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm47IC8vIFRoZXJlIHdhcyBh
IGN5Y2xlIGFuZCB0aGUgdmFsdWUgd2FzIHJlc2V0LCBzbyBiYWlsLgotCi0gICAgICAgICAgICBp
ZiAoIXBhcnNlZFZhbHVlKQotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTQ3VzdG9t
UHJvcGVydHlWYWx1ZTo6Y3JlYXRlV2l0aElEKG5hbWUsIENTU1ZhbHVlVW5zZXQpOwotCi0gICAg
ICAgICAgICB2YWx1ZVRvQXBwbHkgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigq
cGFyc2VkVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5tX2lu
UHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tLmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgICAgICBi
dWlsZGVyU3RhdGUubV9saW5rTWF0Y2ggPSBpbmRleDsKLSAgICAgICAgICAgIGFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSwgaW5kZXgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgYnVpbGRlclN0YXRlLm1fbGlua01hdGNoID0gU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaERlZmF1bHQ7Ci0gICAgYnVpbGRlclN0YXRlLm1faW5Qcm9ncmVzc1Byb3BlcnRp
ZXNDdXN0b20ucmVtb3ZlKG5hbWUpOwotICAgIGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRDdXN0b21Q
cm9wZXJ0aWVzLmFkZChuYW1lKTsKLQotICAgIGZvciAoYXV0byBpbmRleCA6IHsgU2VsZWN0b3JD
aGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rLCBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7Ci0gICAgICAgIGlmICghcHJvcGVydHkuY3NzVmFs
dWVbaW5kZXhdKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpbmRleCAhPSBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiBidWlsZGVyU3RhdGUuc3R5bGUoKS5pbnNp
ZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVlVG9BcHBseSA9IENT
U0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZh
bHVlPigqcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKSk7Ci0KLSAgICAgICAgaWYgKGluQ3ljbGUg
JiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+
KHZhbHVlVG9BcHBseS0+dmFsdWUoKSkpIHsKLSAgICAgICAgICAgIC8vIFJlc29sdmUgdGhpcyB2
YWx1ZSBzbyB0aGF0IHdlIHJlc2V0IGl0cyBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICByZXNv
bHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWNvbnN0IFByb3BlcnR5Q2FzY2FkZSogUHJvcGVydHlD
YXNjYWRlOjpwcm9wZXJ0eUNhc2NhZGVGb3JSb2xsYmFjayhDYXNjYWRlTGV2ZWwgY2FzY2FkZUxl
dmVsKQorY29uc3QgUHJvcGVydHlDYXNjYWRlKiBQcm9wZXJ0eUNhc2NhZGU6OnByb3BlcnR5Q2Fz
Y2FkZUZvclJvbGxiYWNrKENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChjYXNjYWRlTGV2ZWwpIHsKICAgICBjYXNlIENhc2NhZGVMZXZlbDo6QXV0aG9yOgpA
QCAtNTE0LDE0NyArMzk1LDkgQEAgY29uc3QgUHJvcGVydHlDYXNjYWRlKiBQcm9wZXJ0eUNhc2Nh
ZGU6OnByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrKENhc2NhZGVMZXZlbAogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1pbmxpbmUgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydHko
Y29uc3QgUHJvcGVydHkmIHByb3BlcnR5KQotewotICAgIGF1dG8mIGJ1aWxkZXJTdGF0ZSA9ICpt
X2J1aWxkZXJTdGF0ZTsKLSAgICBidWlsZGVyU3RhdGUubV9jYXNjYWRlTGV2ZWwgPSBwcm9wZXJ0
eS5sZXZlbDsKLSAgICBidWlsZGVyU3RhdGUubV9zdHlsZVNjb3BlT3JkaW5hbCA9IHByb3BlcnR5
LnN0eWxlU2NvcGVPcmRpbmFsOwotCi0gICAgYXV0byBhcHBseVdpdGhMaW5rTWF0Y2ggPSBbJl0o
U2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrIGxpbmtNYXRjaCkgewotICAgICAgICBpZiAo
cHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoXSkgewotICAgICAgICAgICAgYnVpbGRlclN0YXRl
Lm1fbGlua01hdGNoID0gbGlua01hdGNoOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9w
ZXJ0eS5pZCwgKnByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaF0sIGxpbmtNYXRjaCk7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hEZWZhdWx0KTsKLQotICAgIGlmIChidWlsZGVyU3RhdGUuc3R5bGUoKS5pbnNpZGVMaW5r
KCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhcHBs
eVdpdGhMaW5rTWF0Y2goU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmspOwotICAgIGFwcGx5V2l0
aExpbmtNYXRjaChTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7Ci0KLSAgICBidWlsZGVy
U3RhdGUubV9saW5rTWF0Y2ggPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdDsKLX0KLQot
dm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUmIHZhbHVlLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgbGlua01hdGNoTWFz
aykKK1Byb3BlcnR5Q2FzY2FkZTo6RGlyZWN0aW9uIFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZURp
cmVjdGlvbkFuZFdyaXRpbmdNb2RlKERpcmVjdGlvbiBpbmhlcml0ZWREaXJlY3Rpb24pIGNvbnN0
CiB7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghaXNTaG9ydGhhbmRDU1NQcm9wZXJ0eShpZCks
ICJTaG9ydGhhbmQgcHJvcGVydHkgaWQgPSAlZCB3YXNuJ3QgZXhwYW5kZWQgYXQgcGFyc2luZyB0
aW1lIiwgaWQpOwotCi0gICAgYXV0byB2YWx1ZVRvQXBwbHkgPSByZXNvbHZlVmFsdWUoaWQsIHZh
bHVlKTsKLQotICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlk
KSkgewotICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVE
aXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBtX2RpcmVjdGlvbiwgbV93cml0aW5nTW9kZSk7Ci0g
ICAgICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7Ci0gICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5
KG5ld0lkLCB2YWx1ZVRvQXBwbHkuZ2V0KCksIGxpbmtNYXRjaE1hc2spOwotICAgIH0KLQotICAg
IGF1dG8mIGJ1aWxkZXJTdGF0ZSA9ICptX2J1aWxkZXJTdGF0ZTsKLQotICAgIENTU0N1c3RvbVBy
b3BlcnR5VmFsdWUqIGN1c3RvbVByb3BlcnR5VmFsdWUgPSBudWxscHRyOwotICAgIENTU1ZhbHVl
SUQgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID0gQ1NTVmFsdWVJbnZhbGlkOwotICAgIENTU1JlZ2lz
dGVyZWRDdXN0b21Qcm9wZXJ0eSogY3VzdG9tUHJvcGVydHlSZWdpc3RlcmVkID0gbnVsbHB0cjsK
LQotICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUN1c3RvbSkgewotICAgICAgICBjdXN0b21Qcm9w
ZXJ0eVZhbHVlID0gZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4odmFsdWVUb0FwcGx5
LnB0cigpKTsKLSAgICAgICAgQVNTRVJUKGN1c3RvbVByb3BlcnR5VmFsdWUtPmlzUmVzb2x2ZWQo
KSk7Ci0gICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENTU1ZhbHVlSUQ+KGN1c3Rv
bVByb3BlcnR5VmFsdWUtPnZhbHVlKCkpKQotICAgICAgICAgICAgY3VzdG9tUHJvcGVydHlWYWx1
ZUlEID0gV1RGOjpnZXQ8Q1NTVmFsdWVJRD4oY3VzdG9tUHJvcGVydHlWYWx1ZS0+dmFsdWUoKSk7
Ci0gICAgICAgIGF1dG8mIG5hbWUgPSBjdXN0b21Qcm9wZXJ0eVZhbHVlLT5uYW1lKCk7Ci0gICAg
ICAgIGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCA9IGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLmdl
dENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgpLmdldChuYW1lKTsKLSAgICB9Ci0KLSAg
ICBib29sIGlzSW5oZXJpdCA9IHZhbHVlVG9BcHBseS0+aXNJbmhlcml0ZWRWYWx1ZSgpIHx8IGN1
c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZUluaGVyaXQ7Ci0gICAgYm9vbCBpc0luaXRp
YWwgPSB2YWx1ZVRvQXBwbHktPmlzSW5pdGlhbFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1
ZUlEID09IENTU1ZhbHVlSW5pdGlhbDsKLQotICAgIGJvb2wgaXNVbnNldCA9IHZhbHVlVG9BcHBs
eS0+aXNVbnNldFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09IENTU1ZhbHVlVW5z
ZXQ7Ci0gICAgYm9vbCBpc1JldmVydCA9IHZhbHVlVG9BcHBseS0+aXNSZXZlcnRWYWx1ZSgpIHx8
IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZVJldmVydDsKLQotICAgIGlmIChpc1Jl
dmVydCkgewotICAgICAgICBpZiAoYXV0byogcm9sbGJhY2sgPSBwcm9wZXJ0eUNhc2NhZGVGb3JS
b2xsYmFjayhidWlsZGVyU3RhdGUubV9jYXNjYWRlTGV2ZWwpKSB7Ci0gICAgICAgICAgICAvLyBX
aXRoIHRoZSByb2xsYmFjayBjYXNjYWRlIGJ1aWx0LCB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgcHJv
cGVydHkgYW5kIGFwcGx5IGl0LiBJZiB0aGUgcHJvcGVydHkgaXMKLSAgICAgICAgICAgIC8vIG5v
dCBwcmVzZW50LCB0aGVuIHdlIGJlaGF2ZSBsaWtlICJ1bnNldC4iIE90aGVyd2lzZSB3ZSBhcHBs
eSB0aGUgcHJvcGVydHkgaW5zdGVhZCBvZgotICAgICAgICAgICAgLy8gb3VyIG93bi4KLSAgICAg
ICAgICAgIGlmIChjdXN0b21Qcm9wZXJ0eVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1
c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCAmJiBjdXN0b21Qcm9wZXJ0eVJlZ2lzdGVyZWQtPmluaGVy
aXRzICYmIHJvbGxiYWNrLT5oYXNDdXN0b21Qcm9wZXJ0eShjdXN0b21Qcm9wZXJ0eVZhbHVlLT5u
YW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gcHJvcGVydHkgPSByb2xsYmFjay0+
Y3VzdG9tUHJvcGVydHkoY3VzdG9tUHJvcGVydHlWYWx1ZS0+bmFtZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2tdKQotICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnByb3BlcnR5LmNzc1Zh
bHVlW2xpbmtNYXRjaE1hc2tdLCBsaW5rTWF0Y2hNYXNrKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sbGJh
Y2stPmhhc1Byb3BlcnR5KGlkKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIHByb3BlcnR5ID0g
cm9sbGJhY2stPnByb3BlcnR5KGlkKTsKLSAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuY3Nz
VmFsdWVbbGlua01hdGNoTWFza10pCi0gICAgICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHko
cHJvcGVydHkuaWQsICpwcm9wZXJ0eS5jc3NWYWx1ZVtsaW5rTWF0Y2hNYXNrXSwgbGlua01hdGNo
TWFzayk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaXNVbnNldCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGlzVW5zZXQpIHsK
LSAgICAgICAgaWYgKENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAg
ICAgICAgIGlzSW5oZXJpdCA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlzSW5p
dGlhbCA9IHRydWU7Ci0gICAgfQotCi0gICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgIWlzSW5pdGlh
bCk7IC8vIGlzSW5oZXJpdCAtPiAhaXNJbml0aWFsICYmIGlzSW5pdGlhbCAtPiAhaXNJbmhlcml0
Ci0KLSAgICBpZiAoYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
KSAmJiAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSB7Ci0gICAgICAgIC8vIExpbWl0
IHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBob25v
cmVkIGJ5IDp2aXNpdGVkLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlzSW5o
ZXJpdCAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQotICAgICAgICBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygp
OwotCi0jaWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCi0gICAgaWYgKGlzPENTU1BhaW50SW1h
Z2VWYWx1ZT4odmFsdWVUb0FwcGx5KSkgewotICAgICAgICBhdXRvJiBuYW1lID0gZG93bmNhc3Q8
Q1NTUGFpbnRJbWFnZVZhbHVlPih2YWx1ZVRvQXBwbHkuZ2V0KCkpLm5hbWUoKTsKLSAgICAgICAg
aWYgKGF1dG8qIHBhaW50V29ya2xldCA9IGNvbnN0X2Nhc3Q8RG9jdW1lbnQmPihidWlsZGVyU3Rh
dGUuZG9jdW1lbnQoKSkucGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVGb3JOYW1lKG5hbWUpKSB7Ci0g
ICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHBhaW50V29ya2xldC0+cGFpbnREZWZp
bml0aW9uTG9jaygpKTsKLSAgICAgICAgICAgIGlmIChhdXRvKiByZWdpc3RyYXRpb24gPSBwYWlu
dFdvcmtsZXQtPnBhaW50RGVmaW5pdGlvbk1hcCgpLmdldChuYW1lKSkgewotICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiByZWdpc3RyYXRpb24tPmlucHV0UHJvcGVydGllcykK
LSAgICAgICAgICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuYWRkQ3VzdG9tUGFpbnRX
YXRjaFByb3BlcnR5KHByb3BlcnR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSNlbmRpZgotCi0gICAgQnVpbGRlckdlbmVyYXRlZDo6YXBwbHlQcm9wZXJ0eShpZCwgYnVpbGRl
clN0YXRlLCB2YWx1ZVRvQXBwbHkuZ2V0KCksIGlzSW5pdGlhbCwgaXNJbmhlcml0LCBjdXN0b21Q
cm9wZXJ0eVJlZ2lzdGVyZWQpOwotfQotCi1SZWY8Q1NTVmFsdWU+IFByb3BlcnR5Q2FzY2FkZTo6
cmVzb2x2ZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWUmIHZhbHVlKQot
ewotICAgIGlmICghdmFsdWUuaGFzVmFyaWFibGVSZWZlcmVuY2VzKCkpCi0gICAgICAgIHJldHVy
biB2YWx1ZTsKLSAgICAKLSAgICBhdXRvIHZhcmlhYmxlVmFsdWUgPSByZXNvbHZlZFZhcmlhYmxl
VmFsdWUocHJvcGVydHlJRCwgdmFsdWUpOwotICAgIC8vIElmIHRoZSBjYXNjYWRlIGhhcyBhbHJl
YWR5IGFwcGxpZWQgdGhpcyBpZCwgdGhlbiB3ZSBkZXRlY3RlZCBhIGN5Y2xlLCBhbmQgdGhpcyB2
YWx1ZSBzaG91bGQgYmUgdW5zZXQuCi0gICAgaWYgKCF2YXJpYWJsZVZhbHVlIHx8IGJ1aWxkZXJT
dGF0ZSgpLm1fYXBwbGllZFByb3BlcnRpZXMuZ2V0KHByb3BlcnR5SUQpKSB7Ci0gICAgICAgIGlm
IChDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKLSAgICAgICAg
ICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUluaGVyaXRlZFZhbHVl
KCk7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUV4cGxp
Y2l0SW5pdGlhbFZhbHVlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICp2YXJpYWJsZVZhbHVlOwot
fQotCi1SZWZQdHI8Q1NTVmFsdWU+IFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZWRWYXJpYWJsZVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCi17Ci0gICAg
Q1NTUGFyc2VyIHBhcnNlcihidWlsZGVyU3RhdGUoKS5kb2N1bWVudCgpKTsKLSAgICByZXR1cm4g
cGFyc2VyLnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKHByb3BJRCwgdmFsdWUsIGJ1
aWxkZXJTdGF0ZSgpKTsKLX0KLQotdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVEaXJlY3Rp
b25BbmRXcml0aW5nTW9kZSgpCi17Ci0gICAgYXV0byYgc3R5bGUgPSBidWlsZGVyU3RhdGUoKS5z
dHlsZSgpOwotCi0gICAgbV9kaXJlY3Rpb24gPSBzdHlsZS5kaXJlY3Rpb24oKTsKLSAgICBtX3dy
aXRpbmdNb2RlID0gc3R5bGUud3JpdGluZ01vZGUoKTsKKyAgICBEaXJlY3Rpb24gcmVzdWx0ID0g
aW5oZXJpdGVkRGlyZWN0aW9uOwogCiAgICAgYm9vbCBoYWRJbXBvcnRhbnRXcml0aW5nTW9kZSA9
IGZhbHNlOwogICAgIGJvb2wgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gZmFsc2U7CkBAIC02Njgs
MTMgKzQxMSwxMyBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZURpcmVjdGlvbkFuZFdy
aXRpbmdNb2RlKCkKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5LmlkKCkpIHsKICAg
ICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V3JpdGluZ01vZGU6CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghaGFkSW1wb3J0YW50V3JpdGluZ01vZGUgfHwgcHJvcGVydHkuaXNJbXBvcnRh
bnQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV93cml0aW5nTW9kZSA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqcHJvcGVydHkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQud3JpdGluZ01vZGUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnByb3BlcnR5LnZhbHVlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50
V3JpdGluZ01vZGUgPSBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlEaXJlY3Rpb246CiAgICAgICAgICAgICAgICAgICAgIGlmICghaGFkSW1wb3J0YW50
RGlyZWN0aW9uIHx8IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZGlyZWN0aW9uID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0
eS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC50ZXh0RGlyZWN0aW9u
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGhhZEltcG9ydGFudERpcmVjdGlvbiA9IHByb3BlcnR5LmlzSW1w
b3J0YW50KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC02ODQsNiArNDI3LDggQEAgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVEaXJl
Y3Rpb25BbmRXcml0aW5nTW9kZSgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2Fz
Y2FkZS5oCmluZGV4IDlmNTVjZmZiYzU1Li41NDhjOWRlMzc1MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5
bGUvUHJvcGVydHlDYXNjYWRlLmgKQEAgLTQwLDcgKzQwLDEzIEBAIGNsYXNzIFByb3BlcnR5Q2Fz
Y2FkZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZW51bSBJ
bmNsdWRlZFByb3BlcnRpZXMgeyBBbGwsIEluaGVyaXRlZE9ubHkgfTsKLSAgICBQcm9wZXJ0eUNh
c2NhZGUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgT3B0aW9uU2V0PENhc2Nh
ZGVMZXZlbD4sIEluY2x1ZGVkUHJvcGVydGllcyA9IEluY2x1ZGVkUHJvcGVydGllczo6QWxsKTsK
KworICAgIHN0cnVjdCBEaXJlY3Rpb24geworICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJl
Y3Rpb247CisgICAgICAgIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlOworICAgIH07CisKKyAgICBQ
cm9wZXJ0eUNhc2NhZGUoY29uc3QgTWF0Y2hSZXN1bHQmLCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVs
PiwgSW5jbHVkZWRQcm9wZXJ0aWVzLCBEaXJlY3Rpb24pOwogICAgIFByb3BlcnR5Q2FzY2FkZShj
b25zdCBQcm9wZXJ0eUNhc2NhZGUmLCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPik7CiAKICAgICB+
UHJvcGVydHlDYXNjYWRlKCk7CkBAIC01OCwxMyArNjQsMTIgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzQ3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgUHJvcGVydHkgY3Vz
dG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5UHJvcGVy
dGllcyhpbnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSk7Ci0gICAgdm9pZCBhcHBs
eURlZmVycmVkUHJvcGVydGllcygpOwotICAgIHZvaWQgYXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCk7
Ci0gICAgdm9pZCBhcHBseUN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAg
dm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwgU2VsZWN0b3JDaGVj
a2VyOjpMaW5rTWF0Y2hNYXNrID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpOworICAg
IGNvbnN0IFZlY3RvcjxQcm9wZXJ0eSwgOD4mIGRlZmVycmVkUHJvcGVydGllcygpIGNvbnN0IHsg
cmV0dXJuIG1fZGVmZXJyZWRQcm9wZXJ0aWVzOyB9CisgICAgY29uc3QgSGFzaE1hcDxBdG9tU3Ry
aW5nLCBQcm9wZXJ0eT4mIGN1c3RvbVByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2N1c3Rv
bVByb3BlcnRpZXM7IH0KIAotICAgIEJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKCkgeyByZXR1
cm4gKm1fYnVpbGRlclN0YXRlOyB9CisgICAgRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZGlyZWN0aW9uOyB9CisKKyAgICBjb25zdCBQcm9wZXJ0eUNhc2NhZGUqIHByb3Bl
cnR5Q2FzY2FkZUZvclJvbGxiYWNrKENhc2NhZGVMZXZlbCkgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBidWlsZENhc2NhZGUoT3B0aW9uU2V0PENhc2NhZGVMZXZlbD4pOwpAQCAtNzYsMjMg
KzgxLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXREZWZlcnJlZChDU1NQcm9wZXJ0eUlELCBD
U1NWYWx1ZSYsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCwgU2NvcGVPcmRp
bmFsKTsKICAgICBzdGF0aWMgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKFByb3BlcnR5JiwgQ1NT
UHJvcGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2
ZWwsIFNjb3BlT3JkaW5hbCk7CiAKLSAgICBjb25zdCBQcm9wZXJ0eUNhc2NhZGUqIHByb3BlcnR5
Q2FzY2FkZUZvclJvbGxiYWNrKENhc2NhZGVMZXZlbCk7Ci0KLSAgICBlbnVtIEN1c3RvbVByb3Bl
cnR5Q3ljbGVUcmFja2luZyB7IEVuYWJsZWQgPSAwLCBEaXNhYmxlZCB9OwotICAgIHRlbXBsYXRl
PEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyB0cmFja0N5Y2xlcz4KLSAgICB2b2lkIGFwcGx5
UHJvcGVydGllc0ltcGwoaW50IGZpcnN0UHJvcGVydHksIGludCBsYXN0UHJvcGVydHkpOwotICAg
IHZvaWQgYXBwbHlQcm9wZXJ0eShjb25zdCBQcm9wZXJ0eSYpOwotCi0gICAgUmVmPENTU1ZhbHVl
PiByZXNvbHZlVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmKTsKLSAgICBSZWZQdHI8Q1NT
VmFsdWU+IHJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1
ZSYpOwotCi0gICAgdm9pZCByZXNvbHZlRGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoKTsKKyAgICBE
aXJlY3Rpb24gcmVzb2x2ZURpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKERpcmVjdGlvbiBpbmhlcml0
ZWREaXJlY3Rpb24pIGNvbnN0OwogCiAgICAgY29uc3QgTWF0Y2hSZXN1bHQmIG1fbWF0Y2hSZXN1
bHQ7CiAgICAgY29uc3QgSW5jbHVkZWRQcm9wZXJ0aWVzIG1faW5jbHVkZWRQcm9wZXJ0aWVzOwot
Ci0gICAgVGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKLSAgICBXcml0aW5nTW9kZSBtX3dyaXRp
bmdNb2RlOworICAgIGNvbnN0IERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIAogICAgIFByb3BlcnR5
IG1fcHJvcGVydGllc1tudW1DU1NQcm9wZXJ0aWVzICsgMl07CiAgICAgc3RkOjpiaXRzZXQ8bnVt
Q1NTUHJvcGVydGllcyArIDI+IG1fcHJvcGVydHlJc1ByZXNlbnQ7CkBAIC0xMDAsMTAgKzkzLDgg
QEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UHJvcGVydHksIDg+IG1fZGVmZXJyZWRQcm9wZXJ0aWVz
OwogICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUHJvcGVydHk+IG1fY3VzdG9tUHJvcGVydGllczsK
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBQcm9wZXJ0eUNhc2NhZGU+IG1fYXV0aG9yUm9s
bGJhY2tDYXNjYWRlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBQcm9wZXJ0eUNhc2NhZGU+
IG1fdXNlclJvbGxiYWNrQ2FzY2FkZTsKLQotICAgIE9wdGlvbmFsPEJ1aWxkZXJTdGF0ZT4gbV9i
dWlsZGVyU3RhdGU7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgUHJvcGVydHlD
YXNjYWRlPiBtX2F1dGhvclJvbGxiYWNrQ2FzY2FkZTsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVl
X3B0cjxjb25zdCBQcm9wZXJ0eUNhc2NhZGU+IG1fdXNlclJvbGxiYWNrQ2FzY2FkZTsKIH07CiAK
IGlubGluZSBib29sIFByb3BlcnR5Q2FzY2FkZTo6aGFzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40OTY3MDhlNGZlNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5jcHAKQEAgLTAsMCArMSw0NDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVCdWlsZGVy
LmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisj
aW5jbHVkZSAiU3R5bGVCdWlsZGVyR2VuZXJhdGVkLmgiCisjaW5jbHVkZSAiU3R5bGVGb250U2l6
ZUZ1bmN0aW9ucy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgU3R5bGUgewor
CitzdGF0aWMgY29uc3QgQ1NTUHJvcGVydHlJRCBmaXJzdExvd1ByaW9yaXR5UHJvcGVydHkgPSBz
dGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkgKyAxKTsK
Kworc3RhdGljIFByb3BlcnR5Q2FzY2FkZTo6RGlyZWN0aW9uIGRpcmVjdGlvbkZyb21TdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgcmV0dXJuIHsgc3R5bGUuZGlyZWN0aW9u
KCksIHN0eWxlLndyaXRpbmdNb2RlKCkgfTsKK30KKworQnVpbGRlcjo6QnVpbGRlcihTdHlsZVJl
c29sdmVyJiByZXNvbHZlciwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBPcHRpb25T
ZXQ8Q2FzY2FkZUxldmVsPiBjYXNjYWRlTGV2ZWxzLCBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1ZGVk
UHJvcGVydGllcyBpbmNsdWRlZFByb3BlcnRpZXMpCisgICAgOiBtX2Nhc2NhZGUobWF0Y2hSZXN1
bHQsIGNhc2NhZGVMZXZlbHMsIGluY2x1ZGVkUHJvcGVydGllcywgZGlyZWN0aW9uRnJvbVN0eWxl
KCpyZXNvbHZlci5zdHlsZSgpKSkKKyAgICAsIG1fc3RhdGUoKnRoaXMsIHJlc29sdmVyKQorewor
fQorCitCdWlsZGVyOjp+QnVpbGRlcigpID0gZGVmYXVsdDsKKwordm9pZCBCdWlsZGVyOjphcHBs
eUFsbFByb3BlcnRpZXMoKQoreworICAgIGFwcGx5SGlnaFByaW9yaXR5UHJvcGVydGllcygpOwor
ICAgIGFwcGx5TG93UHJpb3JpdHlQcm9wZXJ0aWVzKCk7Cit9CisKKy8vIEhpZ2ggcHJpb3JpdHkg
cHJvcGVydGllcyBtYXkgYWZmZWN0IHJlc29sdXRpb24gb2Ygb3RoZXIgcHJvcGVydGllcyAodGhl
eSBhcmUgbW9zdGx5IGZvbnQgcmVsYXRlZCkuCit2b2lkIEJ1aWxkZXI6OmFwcGx5SGlnaFByaW9y
aXR5UHJvcGVydGllcygpCit7CisgICAgYXBwbHlQcm9wZXJ0aWVzKENTU1Byb3BlcnR5V2Via2l0
UnVieVBvc2l0aW9uLCBDU1NQcm9wZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbik7CisgICAgYWRqdXN0
U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1YnkoKTsKKworI2lmIEVOQUJMRShEQVJLX01PREVfQ1NT
KQorICAgIC8vIFN1cHBvcnRlZCBjb2xvciBzY2hlbWVzIGNhbiBhZmZlY3QgcmVzb2x2ZWQgY29s
b3JzLCBzbyB3ZSBuZWVkIHRvIGFwcGx5IHRoYXQgcHJvcGVydHkgYmVmb3JlIGFueSBjb2xvciBw
cm9wZXJ0aWVzLgorICAgIGFwcGx5UHJvcGVydGllcyhDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBD
U1NQcm9wZXJ0eUNvbG9yU2NoZW1lKTsKKyNlbmRpZgorCisgICAgYXBwbHlQcm9wZXJ0aWVzKGZp
cnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSk7CisKKyAgICB1cGRhdGVG
b250KCk7Cit9CisKK3ZvaWQgQnVpbGRlcjo6YXBwbHlMb3dQcmlvcml0eVByb3BlcnRpZXMoKQor
eworICAgIEFTU0VSVCghbV9zdGF0ZS5mb250RGlydHkoKSk7CisKKyAgICBhcHBseUN1c3RvbVBy
b3BlcnRpZXMoKTsKKyAgICBhcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5
LCBsYXN0Q1NTUHJvcGVydHkpOworICAgIGFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKCk7CisKKyAg
ICBBU1NFUlQoIW1fc3RhdGUuZm9udERpcnR5KCkpOworfQorCit2b2lkIEJ1aWxkZXI6OmFwcGx5
RGVmZXJyZWRQcm9wZXJ0aWVzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogbV9jYXNj
YWRlLmRlZmVycmVkUHJvcGVydGllcygpKQorICAgICAgICBhcHBseUNhc2NhZGVQcm9wZXJ0eShw
cm9wZXJ0eSk7Cit9CisKK3ZvaWQgQnVpbGRlcjo6YXBwbHlQcm9wZXJ0aWVzKGludCBmaXJzdFBy
b3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5KQoreworICAgIGlmIChMSUtFTFkobV9jYXNjYWRlLmN1
c3RvbVByb3BlcnRpZXMoKS5pc0VtcHR5KCkpKQorICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0
aWVzSW1wbDxDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmc6OkRpc2FibGVkPihmaXJzdFByb3Bl
cnR5LCBsYXN0UHJvcGVydHkpOworCisgICAgcmV0dXJuIGFwcGx5UHJvcGVydGllc0ltcGw8Q3Vz
dG9tUHJvcGVydHlDeWNsZVRyYWNraW5nOjpFbmFibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJv
cGVydHkpOworfQorCit0ZW1wbGF0ZTxCdWlsZGVyOjpDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tp
bmcgdHJhY2tDeWNsZXM+CitpbmxpbmUgdm9pZCBCdWlsZGVyOjphcHBseVByb3BlcnRpZXNJbXBs
KGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5KQoreworICAgIGZvciAoaW50IGlk
ID0gZmlyc3RQcm9wZXJ0eTsgaWQgPD0gbGFzdFByb3BlcnR5OyArK2lkKSB7CisgICAgICAgIENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KGlkKTsK
KyAgICAgICAgaWYgKCFtX2Nhc2NhZGUuaGFzUHJvcGVydHkocHJvcGVydHlJRCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgQVNTRVJUKHByb3BlcnR5SUQgIT0gQ1NTUHJvcGVydHlD
dXN0b20pOworICAgICAgICBhdXRvJiBwcm9wZXJ0eSA9IG1fY2FzY2FkZS5wcm9wZXJ0eShwcm9w
ZXJ0eUlEKTsKKworICAgICAgICBpZiAodHJhY2tDeWNsZXMgPT0gQ3VzdG9tUHJvcGVydHlDeWNs
ZVRyYWNraW5nOjpFbmFibGVkKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9zdGF0ZS5t
X2luUHJvZ3Jlc3NQcm9wZXJ0aWVzLmdldChwcm9wZXJ0eUlEKSkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBXZSBhcmUgaW4gYSBjeWNsZSAoZWcuIHNldHRpbmcgZm9udCBzaXplIHVzaW5nIHJlZ2lz
dGVyZWQgY3VzdG9tIHByb3BlcnR5IHZhbHVlIGNvbnRhaW5pbmcgZW0pLgorICAgICAgICAgICAg
ICAgIC8vIFNvIHRoaXMgdmFsdWUgc2hvdWxkIGJlIHVuc2V0LgorICAgICAgICAgICAgICAgIG1f
c3RhdGUubV9hcHBsaWVkUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCk7CisgICAgICAgICAgICAg
ICAgLy8gVGhpcyBwcm9wZXJ0eSBpcyBpbiBhIGN5Y2xlLCBhbmQgb25seSB0aGUgcm9vdCBvZiB0
aGUgY2FsbCBzdGFjayB3aWxsIGhhdmUgZmlyc3RQcm9wZXJ0eSAhPSBsYXN0UHJvcGVydHkuCisg
ICAgICAgICAgICAgICAgQVNTRVJUKGZpcnN0UHJvcGVydHkgPT0gbGFzdFByb3BlcnR5KTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3Rh
dGUubV9pblByb2dyZXNzUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCk7CisgICAgICAgICAgICBh
cHBseUNhc2NhZGVQcm9wZXJ0eShwcm9wZXJ0eSk7CisgICAgICAgICAgICBtX3N0YXRlLm1fYXBw
bGllZFByb3BlcnRpZXMuc2V0KHByb3BlcnR5SUQpOworICAgICAgICAgICAgbV9zdGF0ZS5tX2lu
UHJvZ3Jlc3NQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlELCBmYWxzZSk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IGN1
c3RvbSBwcm9wZXJ0aWVzLCB0aGVuIHRoZXJlIGNhbid0IGJlIGFueSBjeWNsZXMuCisgICAgICAg
IGFwcGx5Q2FzY2FkZVByb3BlcnR5KHByb3BlcnR5KTsKKyAgICB9Cit9CisKK3ZvaWQgQnVpbGRl
cjo6YXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCkKK3sKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2Nh
c2NhZGUuY3VzdG9tUHJvcGVydGllcygpLmtleXMoKSkKKyAgICAgICAgYXBwbHlDdXN0b21Qcm9w
ZXJ0eShuYW1lKTsKK30KKwordm9pZCBCdWlsZGVyOjphcHBseUN1c3RvbVByb3BlcnR5KGNvbnN0
IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobV9zdGF0ZS5tX2FwcGxpZWRDdXN0b21Qcm9wZXJ0
aWVzLmNvbnRhaW5zKG5hbWUpIHx8ICFtX2Nhc2NhZGUuY3VzdG9tUHJvcGVydGllcygpLmNvbnRh
aW5zKG5hbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHByb3BlcnR5ID0gbV9jYXNj
YWRlLmN1c3RvbVByb3BlcnR5KG5hbWUpOworICAgIGJvb2wgaW5DeWNsZSA9IG1fc3RhdGUubV9p
blByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5jb250YWlucyhuYW1lKTsKKworICAgIGZvciAoYXV0
byBpbmRleCA6IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hMaW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7CisgICAgICAg
IGlmICghcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmIChpbmRleCAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiBtX3N0
YXRlLnN0eWxlKCkuaW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiB2
YWx1ZVRvQXBwbHkgPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUoZG93bmNhc3Q8Q1NT
Q3VzdG9tUHJvcGVydHlWYWx1ZT4oKnByb3BlcnR5LmNzc1ZhbHVlW2luZGV4XSkpOworCisgICAg
ICAgIGlmIChpbkN5Y2xlKSB7CisgICAgICAgICAgICBtX3N0YXRlLm1fYXBwbGllZEN1c3RvbVBy
b3BlcnRpZXMuYWRkKG5hbWUpOyAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IHRyeSB0byBhcHBseSB0
aGlzIHByb3BlcnR5IGFnYWluIHdoaWxlIHJlc29sdmluZyBpdC4KKyAgICAgICAgICAgIHZhbHVl
VG9BcHBseSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZVdpdGhJRChuYW1lLCBDU1NW
YWx1ZUludmFsaWQpOworICAgICAgICB9CisKKyAgICAgICAgbV9zdGF0ZS5tX2luUHJvZ3Jlc3NQ
cm9wZXJ0aWVzQ3VzdG9tLmFkZChuYW1lKTsKKworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KHZhbHVlVG9BcHBseS0+dmFs
dWUoKSkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWUgPSByZXNv
bHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSk7
CisKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLm1fYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuY29u
dGFpbnMobmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBUaGVyZSB3YXMgYSBjeWNs
ZSBhbmQgdGhlIHZhbHVlIHdhcyByZXNldCwgc28gYmFpbC4KKworICAgICAgICAgICAgaWYgKCFw
YXJzZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU6OmNyZWF0ZVdpdGhJRChuYW1lLCBDU1NWYWx1ZVVuc2V0KTsKKworICAgICAgICAg
ICAgdmFsdWVUb0FwcGx5ID0gZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnBhcnNl
ZFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3N0YXRlLm1faW5Qcm9ncmVzc1By
b3BlcnRpZXNDdXN0b20uY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgICAgIG1fc3RhdGUubV9s
aW5rTWF0Y2ggPSBpbmRleDsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlD
dXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSwgaW5kZXgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgbV9zdGF0ZS5tX2xpbmtNYXRjaCA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0Owor
ICAgIG1fc3RhdGUubV9pblByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5yZW1vdmUobmFtZSk7Cisg
ICAgbV9zdGF0ZS5tX2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsKKworICAgIGZv
ciAoYXV0byBpbmRleCA6IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hMaW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7Cisg
ICAgICAgIGlmICghcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmIChpbmRleCAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAm
JiBtX3N0YXRlLnN0eWxlKCkuaW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZh
bHVlPiB2YWx1ZVRvQXBwbHkgPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUoZG93bmNh
c3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnByb3BlcnR5LmNzc1ZhbHVlW2luZGV4XSkpOwor
CisgICAgICAgIGlmIChpbkN5Y2xlICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPENTU1Zh
cmlhYmxlUmVmZXJlbmNlVmFsdWU+Pih2YWx1ZVRvQXBwbHktPnZhbHVlKCkpKSB7CisgICAgICAg
ICAgICAvLyBSZXNvbHZlIHRoaXMgdmFsdWUgc28gdGhhdCB3ZSByZXNldCBpdHMgZGVwZW5kZW5j
aWVzLgorICAgICAgICAgICAgcmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5Q3VzdG9t
LCB2YWx1ZVRvQXBwbHkuZ2V0KCkpOworICAgICAgICB9CisgICAgfQorfQorCitpbmxpbmUgdm9p
ZCBCdWlsZGVyOjphcHBseUNhc2NhZGVQcm9wZXJ0eShjb25zdCBQcm9wZXJ0eUNhc2NhZGU6OlBy
b3BlcnR5JiBwcm9wZXJ0eSkKK3sKKyAgICBtX3N0YXRlLm1fY2FzY2FkZUxldmVsID0gcHJvcGVy
dHkubGV2ZWw7CisgICAgbV9zdGF0ZS5tX3N0eWxlU2NvcGVPcmRpbmFsID0gcHJvcGVydHkuc3R5
bGVTY29wZU9yZGluYWw7CisKKyAgICBhdXRvIGFwcGx5V2l0aExpbmtNYXRjaCA9IFsmXShTZWxl
Y3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgbGlua01hdGNoKSB7CisgICAgICAgIGlmIChwcm9w
ZXJ0eS5jc3NWYWx1ZVtsaW5rTWF0Y2hdKSB7CisgICAgICAgICAgICBtX3N0YXRlLm1fbGlua01h
dGNoID0gbGlua01hdGNoOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwg
KnByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaF0sIGxpbmtNYXRjaCk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZh
dWx0KTsKKworICAgIGlmIChtX3N0YXRlLnN0eWxlKCkuaW5zaWRlTGluaygpID09IEluc2lkZUxp
bms6Ok5vdEluc2lkZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXBwbHlXaXRoTGlua01hdGNo
KFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rKTsKKyAgICBhcHBseVdpdGhMaW5rTWF0Y2goU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpOworCisgICAgbV9zdGF0ZS5tX2xpbmtNYXRjaCA9
IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0OworfQorCit2b2lkIEJ1aWxkZXI6OmFwcGx5
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUmIHZhbHVlLCBTZWxlY3RvckNoZWNr
ZXI6OkxpbmtNYXRjaE1hc2sgbGlua01hdGNoTWFzaykKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKCFpc1Nob3J0aGFuZENTU1Byb3BlcnR5KGlkKSwgIlNob3J0aGFuZCBwcm9wZXJ0eSBpZCA9
ICVkIHdhc24ndCBleHBhbmRlZCBhdCBwYXJzaW5nIHRpbWUiLCBpZCk7CisKKyAgICBhdXRvIHZh
bHVlVG9BcHBseSA9IHJlc29sdmVWYWx1ZShpZCwgdmFsdWUpOworCisgICAgaWYgKENTU1Byb3Bl
cnR5Ojppc0RpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQpKSB7CisgICAgICAgIGF1dG8gZGlyZWN0
aW9uID0gbV9jYXNjYWRlLmRpcmVjdGlvbigpOworICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lk
ID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBkaXJlY3Rp
b24udGV4dERpcmVjdGlvbiwgZGlyZWN0aW9uLndyaXRpbmdNb2RlKTsKKyAgICAgICAgQVNTRVJU
KG5ld0lkICE9IGlkKTsKKyAgICAgICAgcmV0dXJuIGFwcGx5UHJvcGVydHkobmV3SWQsIHZhbHVl
VG9BcHBseS5nZXQoKSwgbGlua01hdGNoTWFzayk7CisgICAgfQorCisgICAgQ1NTQ3VzdG9tUHJv
cGVydHlWYWx1ZSogY3VzdG9tUHJvcGVydHlWYWx1ZSA9IG51bGxwdHI7CisgICAgQ1NTVmFsdWVJ
RCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPSBDU1NWYWx1ZUludmFsaWQ7CisgICAgQ1NTUmVnaXN0
ZXJlZEN1c3RvbVByb3BlcnR5KiBjdXN0b21Qcm9wZXJ0eVJlZ2lzdGVyZWQgPSBudWxscHRyOwor
CisgICAgaWYgKGlkID09IENTU1Byb3BlcnR5Q3VzdG9tKSB7CisgICAgICAgIGN1c3RvbVByb3Bl
cnR5VmFsdWUgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPih2YWx1ZVRvQXBwbHku
cHRyKCkpOworICAgICAgICBBU1NFUlQoY3VzdG9tUHJvcGVydHlWYWx1ZS0+aXNSZXNvbHZlZCgp
KTsKKyAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q1NTVmFsdWVJRD4oY3VzdG9t
UHJvcGVydHlWYWx1ZS0+dmFsdWUoKSkpCisgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0eVZhbHVl
SUQgPSBXVEY6OmdldDxDU1NWYWx1ZUlEPihjdXN0b21Qcm9wZXJ0eVZhbHVlLT52YWx1ZSgpKTsK
KyAgICAgICAgYXV0byYgbmFtZSA9IGN1c3RvbVByb3BlcnR5VmFsdWUtPm5hbWUoKTsKKyAgICAg
ICAgY3VzdG9tUHJvcGVydHlSZWdpc3RlcmVkID0gbV9zdGF0ZS5kb2N1bWVudCgpLmdldENTU1Jl
Z2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgpLmdldChuYW1lKTsKKyAgICB9CisKKyAgICBib29s
IGlzSW5oZXJpdCA9IHZhbHVlVG9BcHBseS0+aXNJbmhlcml0ZWRWYWx1ZSgpIHx8IGN1c3RvbVBy
b3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZUluaGVyaXQ7CisgICAgYm9vbCBpc0luaXRpYWwgPSB2
YWx1ZVRvQXBwbHktPmlzSW5pdGlhbFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09
IENTU1ZhbHVlSW5pdGlhbDsKKworICAgIGJvb2wgaXNVbnNldCA9IHZhbHVlVG9BcHBseS0+aXNV
bnNldFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09IENTU1ZhbHVlVW5zZXQ7Cisg
ICAgYm9vbCBpc1JldmVydCA9IHZhbHVlVG9BcHBseS0+aXNSZXZlcnRWYWx1ZSgpIHx8IGN1c3Rv
bVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZVJldmVydDsKKworICAgIGlmIChpc1JldmVydCkg
eworICAgICAgICBpZiAoYXV0byogcm9sbGJhY2sgPSBtX2Nhc2NhZGUucHJvcGVydHlDYXNjYWRl
Rm9yUm9sbGJhY2sobV9zdGF0ZS5tX2Nhc2NhZGVMZXZlbCkpIHsKKyAgICAgICAgICAgIC8vIFdp
dGggdGhlIHJvbGxiYWNrIGNhc2NhZGUgYnVpbHQsIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBwcm9w
ZXJ0eSBhbmQgYXBwbHkgaXQuIElmIHRoZSBwcm9wZXJ0eSBpcworICAgICAgICAgICAgLy8gbm90
IHByZXNlbnQsIHRoZW4gd2UgYmVoYXZlIGxpa2UgInVuc2V0LiIgT3RoZXJ3aXNlIHdlIGFwcGx5
IHRoZSBwcm9wZXJ0eSBpbnN0ZWFkIG9mCisgICAgICAgICAgICAvLyBvdXIgb3duLgorICAgICAg
ICAgICAgaWYgKGN1c3RvbVByb3BlcnR5VmFsdWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3Vz
dG9tUHJvcGVydHlSZWdpc3RlcmVkICYmIGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJlZC0+aW5oZXJp
dHMgJiYgcm9sbGJhY2stPmhhc0N1c3RvbVByb3BlcnR5KGN1c3RvbVByb3BlcnR5VmFsdWUtPm5h
bWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBwcm9wZXJ0eSA9IHJvbGxiYWNrLT5j
dXN0b21Qcm9wZXJ0eShjdXN0b21Qcm9wZXJ0eVZhbHVlLT5uYW1lKCkpOworICAgICAgICAgICAg
ICAgICAgICBpZiAocHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoTWFza10pCisgICAgICAgICAg
ICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkLCAqcHJvcGVydHkuY3NzVmFs
dWVbbGlua01hdGNoTWFza10sIGxpbmtNYXRjaE1hc2spOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xsYmFj
ay0+aGFzUHJvcGVydHkoaWQpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgcHJvcGVydHkgPSBy
b2xsYmFjay0+cHJvcGVydHkoaWQpOworICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5jc3NW
YWx1ZVtsaW5rTWF0Y2hNYXNrXSkKKyAgICAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShw
cm9wZXJ0eS5pZCwgKnByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2tdLCBsaW5rTWF0Y2hN
YXNrKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpc1Vuc2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaXNVbnNldCkgewor
ICAgICAgICBpZiAoQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQorICAgICAg
ICAgICAgaXNJbmhlcml0ID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXNJbml0
aWFsID0gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJbml0aWFs
KTsgLy8gaXNJbmhlcml0IC0+ICFpc0luaXRpYWwgJiYgaXNJbml0aWFsIC0+ICFpc0luaGVyaXQK
KworICAgIGlmIChtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSAmJiAh
aXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSB7CisgICAgICAgIC8vIExpbWl0IHRoZSBw
cm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBob25vcmVkIGJ5
IDp2aXNpdGVkLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzSW5oZXJpdCAm
JiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQorICAgICAgICBtX3N0YXRl
LnN0eWxlKCkuc2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKKworI2lmIEVO
QUJMRShDU1NfUEFJTlRJTkdfQVBJKQorICAgIGlmIChpczxDU1NQYWludEltYWdlVmFsdWU+KHZh
bHVlVG9BcHBseSkpIHsKKyAgICAgICAgYXV0byYgbmFtZSA9IGRvd25jYXN0PENTU1BhaW50SW1h
Z2VWYWx1ZT4odmFsdWVUb0FwcGx5LmdldCgpKS5uYW1lKCk7CisgICAgICAgIGlmIChhdXRvKiBw
YWludFdvcmtsZXQgPSBjb25zdF9jYXN0PERvY3VtZW50Jj4obV9zdGF0ZS5kb2N1bWVudCgpKS5w
YWludFdvcmtsZXRHbG9iYWxTY29wZUZvck5hbWUobmFtZSkpIHsKKyAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2socGFpbnRXb3JrbGV0LT5wYWludERlZmluaXRpb25Mb2NrKCkpOwor
ICAgICAgICAgICAgaWYgKGF1dG8qIHJlZ2lzdHJhdGlvbiA9IHBhaW50V29ya2xldC0+cGFpbnRE
ZWZpbml0aW9uTWFwKCkuZ2V0KG5hbWUpKSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBw
cm9wZXJ0eSA6IHJlZ2lzdHJhdGlvbi0+aW5wdXRQcm9wZXJ0aWVzKQorICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlLnN0eWxlKCkuYWRkQ3VzdG9tUGFpbnRXYXRjaFByb3BlcnR5KHByb3BlcnR5
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgQnVpbGRl
ckdlbmVyYXRlZDo6YXBwbHlQcm9wZXJ0eShpZCwgbV9zdGF0ZSwgdmFsdWVUb0FwcGx5LmdldCgp
LCBpc0luaXRpYWwsIGlzSW5oZXJpdCwgY3VzdG9tUHJvcGVydHlSZWdpc3RlcmVkKTsKK30KKwor
UmVmPENTU1ZhbHVlPiBCdWlsZGVyOjpyZXNvbHZlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBDU1NWYWx1ZSYgdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZS5oYXNWYXJpYWJsZVJlZmVy
ZW5jZXMoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgYXV0byB2YXJpYWJsZVZhbHVl
ID0gcmVzb2x2ZWRWYXJpYWJsZVZhbHVlKHByb3BlcnR5SUQsIHZhbHVlKTsKKyAgICAvLyBJZiB0
aGUgY2FzY2FkZSBoYXMgYWxyZWFkeSBhcHBsaWVkIHRoaXMgaWQsIHRoZW4gd2UgZGV0ZWN0ZWQg
YSBjeWNsZSwgYW5kIHRoaXMgdmFsdWUgc2hvdWxkIGJlIHVuc2V0LgorICAgIGlmICghdmFyaWFi
bGVWYWx1ZSB8fCBtX3N0YXRlLm1fYXBwbGllZFByb3BlcnRpZXMuZ2V0KHByb3BlcnR5SUQpKSB7
CisgICAgICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShwcm9wZXJ0eUlE
KSkKKyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlu
aGVyaXRlZFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUV4cGxpY2l0SW5pdGlhbFZhbHVlKCk7CisgICAgfQorCisgICAgcmV0dXJuICp2YXJp
YWJsZVZhbHVlOworfQorCitSZWZQdHI8Q1NTVmFsdWU+IEJ1aWxkZXI6OnJlc29sdmVkVmFyaWFi
bGVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQorewor
ICAgIENTU1BhcnNlciBwYXJzZXIobV9zdGF0ZS5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gcGFy
c2VyLnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKHByb3BJRCwgdmFsdWUsIG1fc3Rh
dGUpOworfQorCisvLyBGSVhNRTogQ2FuIHRoaXMgYmUgZG9uZSBkdXJpbmcgdGhlIHJlZ3VsYXIg
c3R5bGUgYWp1c3RtZW50IHBoYXNlPwordm9pZCBCdWlsZGVyOjphZGp1c3RTdHlsZUZvckludGVy
Q2hhcmFjdGVyUnVieSgpCit7CisgICAgYXV0byYgc3R5bGUgPSBtX3N0YXRlLnN0eWxlKCk7Cisg
ICAgaWYgKHN0eWxlLnJ1YnlQb3NpdGlvbigpICE9IFJ1YnlQb3NpdGlvbjo6SW50ZXJDaGFyYWN0
ZXIgfHwgIW1fc3RhdGUuZWxlbWVudCgpIHx8ICFtX3N0YXRlLmVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnJ0VGFnKSkKKyAgICAgICAgcmV0dXJuOworICAgIHN0eWxlLnNldFRleHRB
bGlnbihUZXh0QWxpZ25Nb2RlOjpDZW50ZXIpOworICAgIGlmIChzdHlsZS5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQorICAgICAgICBzdHlsZS5zZXRXcml0aW5nTW9kZShMZWZ0VG9SaWdodFdy
aXRpbmdNb2RlKTsKK30KKwordm9pZCBCdWlsZGVyOjp1cGRhdGVGb250KCkKK3sKKyAgICBhdXRv
JiBzdHlsZSA9IG1fc3RhdGUuc3R5bGUoKTsKKyAgICBpZiAoIW1fc3RhdGUuZm9udERpcnR5KCkg
JiYgc3R5bGUuZm9udENhc2NhZGUoKS5mb250cygpKQorICAgICAgICByZXR1cm47CisKKyNpZiBF
TkFCTEUoVEVYVF9BVVRPU0laSU5HKQorICAgIHVwZGF0ZUZvbnRGb3JUZXh0U2l6ZUFkanVzdCgp
OworI2VuZGlmCisgICAgdXBkYXRlRm9udEZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoKTsKKyAgICB1
cGRhdGVGb250Rm9yWm9vbUNoYW5nZSgpOworICAgIHVwZGF0ZUZvbnRGb3JPcmllbnRhdGlvbkNo
YW5nZSgpOworCisgICAgc3R5bGUuZm9udENhc2NhZGUoKS51cGRhdGUoJmNvbnN0X2Nhc3Q8RG9j
dW1lbnQmPihtX3N0YXRlLmRvY3VtZW50KCkpLmZvbnRTZWxlY3RvcigpKTsKKworICAgIG1fc3Rh
dGUubV9mb250RGlydHkgPSBmYWxzZTsKK30KKworI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcp
Cit2b2lkIEJ1aWxkZXI6OnVwZGF0ZUZvbnRGb3JUZXh0U2l6ZUFkanVzdCgpCit7CisgICAgYXV0
byYgc3R5bGUgPSBtX3N0YXRlLnN0eWxlKCk7CisKKyAgICBpZiAoc3R5bGUudGV4dFNpemVBZGp1
c3QoKS5pc0F1dG8oKQorICAgICAgICB8fCAhbV9zdGF0ZS5kb2N1bWVudCgpLnNldHRpbmdzKCku
dGV4dEF1dG9zaXppbmdFbmFibGVkKCkKKyAgICAgICAgfHwgKG1fc3RhdGUuZG9jdW1lbnQoKS5z
ZXR0aW5ncygpLnRleHRBdXRvc2l6aW5nVXNlc0lkZW1wb3RlbnRNb2RlKCkgJiYgIXN0eWxlLnRl
eHRTaXplQWRqdXN0KCkuaXNOb25lKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5l
d0ZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpOworICAgIGlmICghc3R5
bGUudGV4dFNpemVBZGp1c3QoKS5pc05vbmUoKSkKKyAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9u
LnNldENvbXB1dGVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpICogc3R5
bGUudGV4dFNpemVBZGp1c3QoKS5tdWx0aXBsaWVyKCkpOworICAgIGVsc2UKKyAgICAgICAgbmV3
Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lm
aWVkU2l6ZSgpKTsKKworICAgIHN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKG5ld0Zv
bnREZXNjcmlwdGlvbikpOworfQorI2VuZGlmCisKK3ZvaWQgQnVpbGRlcjo6dXBkYXRlRm9udEZv
clpvb21DaGFuZ2UoKQoreworICAgIGF1dG8mIHN0eWxlID0gbV9zdGF0ZS5zdHlsZSgpOworICAg
IGF1dG8mIHBhcmVudFN0eWxlID0gbV9zdGF0ZS5wYXJlbnRTdHlsZSgpOworCisgICAgaWYgKHN0
eWxlLmVmZmVjdGl2ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS5lZmZlY3RpdmVab29tKCkgJiYgc3R5
bGUudGV4dFpvb20oKSA9PSBwYXJlbnRTdHlsZS50ZXh0Wm9vbSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBjb25zdCBhdXRvJiBjaGlsZEZvbnQgPSBzdHlsZS5mb250RGVzY3JpcHRpb24oKTsK
KyAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IGNoaWxkRm9udDsKKyAgICBzZXRGb250U2l6
ZShuZXdGb250RGVzY3JpcHRpb24sIGNoaWxkRm9udC5zcGVjaWZpZWRTaXplKCkpOworCisgICAg
c3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUobmV3Rm9udERlc2NyaXB0aW9uKSk7Cit9
CisKK3ZvaWQgQnVpbGRlcjo6dXBkYXRlRm9udEZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoKQorewor
ICAgIGF1dG8mIHN0eWxlID0gbV9zdGF0ZS5zdHlsZSgpOworICAgIGNvbnN0IGF1dG8mIGNoaWxk
Rm9udCA9IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpOworCisgICAgaWYgKGNoaWxkRm9udC5pc0Fi
c29sdXRlU2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBhdXRvJiBwYXJlbnRG
b250ID0gbV9zdGF0ZS5wYXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOworICAgIGlmIChj
aGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09IHBhcmVudEZvbnQudXNlRml4ZWREZWZh
dWx0U2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBrbm93IHRoZSBwYXJlbnQg
aXMgbW9ub3NwYWNlIG9yIHRoZSBjaGlsZCBpcyBtb25vc3BhY2UsIGFuZCB0aGF0IGZvbnQKKyAg
ICAvLyBzaXplIHdhcyB1bnNwZWNpZmllZC4gV2Ugd2FudCB0byBzY2FsZSBvdXIgZm9udCBzaXpl
IGFzIGFwcHJvcHJpYXRlLgorICAgIC8vIElmIHRoZSBmb250IHVzZXMgYSBrZXl3b3JkIHNpemUs
IHRoZW4gd2UgcmVmZXRjaCBmcm9tIHRoZSB0YWJsZSByYXRoZXIgdGhhbgorICAgIC8vIG11bHRp
cGx5aW5nIGJ5IG91ciBzY2FsZSBmYWN0b3IuCisgICAgZmxvYXQgc2l6ZSA9IFsmXSB7CisgICAg
ICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gY2hpbGRGb250LmtleXdvcmRTaXpl
QXNJZGVudGlmaWVyKCkpCisgICAgICAgICAgICByZXR1cm4gU3R5bGU6OmZvbnRTaXplRm9yS2V5
d29yZChzaXplSWRlbnRpZmllciwgY2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgbV9z
dGF0ZS5kb2N1bWVudCgpKTsKKworICAgICAgICBhdXRvIGZpeGVkU2l6ZSA9ICBtX3N0YXRlLmRv
Y3VtZW50KCkuc2V0dGluZ3MoKS5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpOworICAgICAgICBhdXRv
IGRlZmF1bHRTaXplID0gIG1fc3RhdGUuZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRlZmF1bHRGb250
U2l6ZSgpOworICAgICAgICBmbG9hdCBmaXhlZFNjYWxlRmFjdG9yID0gKGZpeGVkU2l6ZSAmJiBk
ZWZhdWx0U2l6ZSkgPyBzdGF0aWNfY2FzdDxmbG9hdD4oZml4ZWRTaXplKSAvIGRlZmF1bHRTaXpl
IDogMTsKKyAgICAgICAgcmV0dXJuIHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID8g
Y2hpbGRGb250LnNwZWNpZmllZFNpemUoKSAvIGZpeGVkU2NhbGVGYWN0b3IgOiBjaGlsZEZvbnQu
c3BlY2lmaWVkU2l6ZSgpICogZml4ZWRTY2FsZUZhY3RvcjsKKyAgICB9KCk7CisKKyAgICBhdXRv
IG5ld0ZvbnREZXNjcmlwdGlvbiA9IGNoaWxkRm9udDsKKyAgICBzZXRGb250U2l6ZShuZXdGb250
RGVzY3JpcHRpb24sIHNpemUpOworICAgIHN0eWxlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3Zl
KG5ld0ZvbnREZXNjcmlwdGlvbikpOworfQorCit2b2lkIEJ1aWxkZXI6OnVwZGF0ZUZvbnRGb3JP
cmllbnRhdGlvbkNoYW5nZSgpCit7CisgICAgYXV0byYgc3R5bGUgPSBtX3N0YXRlLnN0eWxlKCk7
CisgICAgYXV0byBbZm9udE9yaWVudGF0aW9uLCBnbHlwaE9yaWVudGF0aW9uXSA9IHN0eWxlLmZv
bnRBbmRHbHlwaE9yaWVudGF0aW9uKCk7CisKKyAgICBjb25zdCBhdXRvJiBmb250RGVzY3JpcHRp
b24gPSBzdHlsZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLm9y
aWVudGF0aW9uKCkgPT0gZm9udE9yaWVudGF0aW9uICYmIGZvbnREZXNjcmlwdGlvbi5ub25DSktH
bHlwaE9yaWVudGF0aW9uKCkgPT0gZ2x5cGhPcmllbnRhdGlvbikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byBuZXdGb250RGVzY3JpcHRpb24gPSBmb250RGVzY3JpcHRpb247CisgICAgbmV3
Rm9udERlc2NyaXB0aW9uLnNldE5vbkNKS0dseXBoT3JpZW50YXRpb24oZ2x5cGhPcmllbnRhdGlv
bik7CisgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldE9yaWVudGF0aW9uKGZvbnRPcmllbnRhdGlv
bik7CisgICAgc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUobmV3Rm9udERlc2NyaXB0
aW9uKSk7Cit9CisKK3ZvaWQgQnVpbGRlcjo6c2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQoreworICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250
RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgbV9zdGF0ZS51c2VTVkdab29tUnVsZXMoKSwg
Jm1fc3RhdGUuc3R5bGUoKSwgbV9zdGF0ZS5kb2N1bWVudCgpKSk7Cit9CisKK30KK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5oIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVCdWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjliZjU0ZDAxNDQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCisjaW5jbHVkZSAiU3R5bGVCdWls
ZGVyU3RhdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgU3R5bGUgewor
CitjbGFzcyBCdWlsZGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBCdWlsZGVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBNYXRjaFJlc3VsdCYsIE9wdGlvblNl
dDxDYXNjYWRlTGV2ZWw+LCBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1ZGVkUHJvcGVydGllcyA9IFBy
b3BlcnR5Q2FzY2FkZTo6SW5jbHVkZWRQcm9wZXJ0aWVzOjpBbGwpOworICAgIH5CdWlsZGVyKCk7
CisKKyAgICB2b2lkIGFwcGx5QWxsUHJvcGVydGllcygpOworICAgIHZvaWQgYXBwbHlIaWdoUHJp
b3JpdHlQcm9wZXJ0aWVzKCk7CisgICAgdm9pZCBhcHBseUxvd1ByaW9yaXR5UHJvcGVydGllcygp
OworCisgICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkgeyBh
cHBseVByb3BlcnRpZXMocHJvcGVydHlJRCwgcHJvcGVydHlJRCk7IH0KKyAgICB2b2lkIGFwcGx5
Q3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIHZvaWQgYXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYsIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNo
TWFzayA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKKworICAgIHZvaWQgdXBkYXRl
Rm9udCgpOworICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIGZs
b2F0IHNpemUpOworCisgICAgQnVpbGRlclN0YXRlJiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7
IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGFwcGx5UHJvcGVydGllcyhpbnQgZmlyc3RQcm9wZXJ0
eSwgaW50IGxhc3RQcm9wZXJ0eSk7CisgICAgdm9pZCBhcHBseURlZmVycmVkUHJvcGVydGllcygp
OworICAgIHZvaWQgYXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCk7CisKKyAgICBlbnVtIEN1c3RvbVBy
b3BlcnR5Q3ljbGVUcmFja2luZyB7IEVuYWJsZWQgPSAwLCBEaXNhYmxlZCB9OworICAgIHRlbXBs
YXRlPEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyB0cmFja0N5Y2xlcz4KKyAgICB2b2lkIGFw
cGx5UHJvcGVydGllc0ltcGwoaW50IGZpcnN0UHJvcGVydHksIGludCBsYXN0UHJvcGVydHkpOwor
ICAgIHZvaWQgYXBwbHlDYXNjYWRlUHJvcGVydHkoY29uc3QgUHJvcGVydHlDYXNjYWRlOjpQcm9w
ZXJ0eSYpOworCisgICAgUmVmPENTU1ZhbHVlPiByZXNvbHZlVmFsdWUoQ1NTUHJvcGVydHlJRCwg
Q1NTVmFsdWUmKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlc29sdmVkVmFyaWFibGVWYWx1ZShD
U1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYpOworCisgICAgdm9pZCBhZGp1c3RTdHlsZUZv
ckludGVyQ2hhcmFjdGVyUnVieSgpOworI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCisgICAg
dm9pZCB1cGRhdGVGb250Rm9yVGV4dFNpemVBZGp1c3QoKTsKKyNlbmRpZgorICAgIHZvaWQgdXBk
YXRlRm9udEZvclpvb21DaGFuZ2UoKTsKKyAgICB2b2lkIHVwZGF0ZUZvbnRGb3JHZW5lcmljRmFt
aWx5Q2hhbmdlKCk7CisgICAgdm9pZCB1cGRhdGVGb250Rm9yT3JpZW50YXRpb25DaGFuZ2UoKTsK
KworICAgIGNvbnN0IFByb3BlcnR5Q2FzY2FkZSBtX2Nhc2NhZGU7CisgICAgQnVpbGRlclN0YXRl
IG1fc3RhdGU7Cit9OworCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1
c3RvbS5oCmluZGV4IDkwNGNkMDM0NzIyLi5lZDA5NzZiOWEwMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKQEAgLTE2MTIsNyArMTYxMiw4IEBAIGlubGluZSB2
b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZShCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSwgQ1NTVmFsCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6
ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSB8fCAhKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgp
IHx8IHByaW1pdGl2ZVZhbHVlLmlzRm9udFJlbGF0aXZlTGVuZ3RoKCkpKTsKICAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKICAgICAgICAgICAgIHNpemUgPSBwcmltaXRp
dmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0PihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCZi
dWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKSwgJmJ1aWxkZXJTdGF0ZS5yb290RWxlbWVudFN0eWxl
KCksIGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSwgMS4wZiwgdHJ1ZSkpOwot
ICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlUmVzb2x2ZXIoKS5zdGF0ZSgpLnNldEZvbnRT
aXplSGFzVmlld3BvcnRVbml0cyhwcmltaXRpdmVWYWx1ZS5pc1ZpZXdwb3J0UGVyY2VudGFnZUxl
bmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1ZpZXdwb3J0UGVyY2Vu
dGFnZUxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhh
c1ZpZXdwb3J0VW5pdHMoKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1Bl
cmNlbnRhZ2UoKSkKICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUuZmxvYXRWYWx1
ZSgpICogcGFyZW50U2l6ZSkgLyAxMDAuMGY7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcAppbmRleCAxODQxZDI3Y2RmMC4uMzUyYTQ1ZGQy
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKQEAgLTI2
LDEzICsyNiwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlQnVpbGRl
clN0YXRlLmgiCiAKKyNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CiAKLUJ1
aWxkZXJTdGF0ZTo6QnVpbGRlclN0YXRlKFByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSwgU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKLSAgICA6IG1fY2FzY2FkZShjYXNjYWRlKQorQnVpbGRl
clN0YXRlOjpCdWlsZGVyU3RhdGUoQnVpbGRlciYgYnVpbGRlciwgU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlcikKKyAgICA6IG1fYnVpbGRlcihidWlsZGVyKQogICAgICwgbV9zdHlsZU1hcCgq
dGhpcykKICAgICAsIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YShzdHlsZVJlc29sdmVyLnN0
YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKQogICAgICwgbV9zdHlsZVJlc29sdmVy
KHN0eWxlUmVzb2x2ZXIpCkBAIC00NiwxNCArNDcsMjIgQEAgQnVpbGRlclN0YXRlOjpCdWlsZGVy
U3RhdGUoUHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlLCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmUKICAgICBBU1NFUlQoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKTsKIH0KIAorLy8gU1ZH
IGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkgY29tcGFyZWQgdG8gQ1NTLiBUaGUg
d2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKKy8vIG9mIGVhY2ggaW5kaXZpZHVhbCBs
ZW5ndGggdmFsdWUgaW4gdGhlIHJlbmRlciBzdHlsZSAvIHRyZWUuIENTU1ByaW1pdGl2ZVZhbHVl
Ojpjb21wdXRlTGVuZ3RoKigpCisvLyBtdWx0aXBsaWVzIGVhY2ggcmVzb2x2ZWQgbGVuZ3RoIHdp
dGggdGhlIHpvb20gbXVsdGlwbGllciAtIHNvIGZvciBTVkcgd2UgbmVlZCB0byBkaXNhYmxlIHRo
YXQuCisvLyBUaG91Z2ggYWxsIENTUyB2YWx1ZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvdXRl
cm1vc3QgPHN2Zz4gZWxlbWVudHMgKHdpZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy4uLikKKy8v
IG5lZWQgdG8gcmVzcGVjdCB0aGUgc2NhbGluZy4gUmVuZGVyQm94ICh0aGUgcGFyZW50IGNsYXNz
IG9mIFJlbmRlclNWR1Jvb3QpIGdyYWJzIHZhbHVlcyBsaWtlCisvLyB3aWR0aC9oZWlnaHQvYm9y
ZGVyL3BhZGRpbmcvLi4uIGZyb20gdGhlIFJlbmRlclN0eWxlIC0+IGZvciBTVkcgdGhlc2UgdmFs
dWVzIHdvdWxkIG5ldmVyIHNjYWxlLAorLy8gaWYgd2UnZCBwYXNzIGEgMS4wIHpvb20gZmFjdG9y
IGV2ZXJ5aHdlcmUuIFNvIHdlIG9ubHkgcGFzcyBhIHpvb20gZmFjdG9yIG9mIDEuMCBmb3Igc3Bl
Y2lmaWMKKy8vIHByb3BlcnRpZXMgdGhhdCBhcmUgTk9UIGFsbG93ZWQgdG8gc2NhbGUgd2l0aGlu
IGEgem9vbWVkIFNWRyBkb2N1bWVudCAobGV0dGVyL3dvcmQtc3BhY2luZy9mb250LXNpemUpLgog
Ym9vbCBCdWlsZGVyU3RhdGU6OnVzZVNWR1pvb21SdWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fc3R5bGVSZXNvbHZlci51c2VTVkdab29tUnVsZXMoKTsKKyAgICByZXR1cm4gaXM8U1ZHRWxl
bWVudD4oZWxlbWVudCgpKTsKIH0KIAogYm9vbCBCdWlsZGVyU3RhdGU6OnVzZVNWR1pvb21SdWxl
c0Zvckxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc3R5bGVSZXNvbHZlci51c2VTVkda
b29tUnVsZXNGb3JMZW5ndGgoKTsKKyAgICByZXR1cm4gaXM8U1ZHRWxlbWVudD4oZWxlbWVudCgp
KSAmJiAhKGlzPFNWR1NWR0VsZW1lbnQ+KCplbGVtZW50KCkpICYmIGVsZW1lbnQoKS0+cGFyZW50
Tm9kZSgpKTsKIH0KIAogUmVmUHRyPFN0eWxlSW1hZ2U+IEJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5
bGVJbWFnZShDU1NWYWx1ZSYgdmFsdWUpCkBAIC03Myw3ICs4Miw3IEBAIENvbG9yIEJ1aWxkZXJT
dGF0ZTo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZh
bHVlLCBib29sCiAKIHZvaWQgQnVpbGRlclN0YXRlOjpzZXRGb250U2l6ZShGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKIHsKLSAgICBtX3N0eWxlUmVzb2x2
ZXIuc2V0Rm9udFNpemUoZGVzY3JpcHRpb24sIHNpemUpOworICAgIG1fYnVpbGRlci5zZXRGb250
U2l6ZShkZXNjcmlwdGlvbiwgc2l6ZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZUJ1aWxkZXJTdGF0ZS5oCmluZGV4IGYyNzM4MTQwMTIxLi40YWRhMWM5OGM3ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCkBAIC0zOSwxMyArMzksMTMgQEAgY2xh
c3MgU3R5bGVSZXNvbHZlcjsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIAotY2xhc3MgUHJvcGVydHlD
YXNjYWRlOworY2xhc3MgQnVpbGRlcjsKIAogY2xhc3MgQnVpbGRlclN0YXRlIHsKIHB1YmxpYzoK
LSAgICBCdWlsZGVyU3RhdGUoUHJvcGVydHlDYXNjYWRlJiwgU3R5bGVSZXNvbHZlciYpOworICAg
IEJ1aWxkZXJTdGF0ZShCdWlsZGVyJiwgU3R5bGVSZXNvbHZlciYpOwogCi0gICAgUHJvcGVydHlD
YXNjYWRlJiBjYXNjYWRlKCkgeyByZXR1cm4gbV9jYXNjYWRlOyB9CisgICAgQnVpbGRlciYgYnVp
bGRlcigpIHsgcmV0dXJuIG1fYnVpbGRlcjsgfQogICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIoKSB7IHJldHVybiBtX3N0eWxlUmVzb2x2ZXI7IH0KIAogICAgIFJlbmRlclN0eWxlJiBz
dHlsZSgpIHsgcmV0dXJuIG1fc3R5bGU7IH0KQEAgLTY0LDcgKzY0LDYgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBmb250RGlydHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREaXJ0eTsgfQogICAgIHZv
aWQgc2V0Rm9udERpcnR5KCkgeyBtX2ZvbnREaXJ0eSA9IHRydWU7IH0KLSAgICB2b2lkIGNsZWFy
Rm9udERpcnR5KCkgeyBtX2ZvbnREaXJ0eSA9IGZhbHNlOyB9CiAKICAgICBjb25zdCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0eWxlLmZvbnRE
ZXNjcmlwdGlvbigpOyB9CiAgICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgcGFyZW50
Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9wYXJlbnRTdHlsZS5mb250RGVzY3JpcHRpb24o
KTsgfQpAQCAtODUsOSArODQsOSBAQCBwdWJsaWM6CiAgICAgQ1NTVG9TdHlsZU1hcCYgc3R5bGVN
YXAoKSB7IHJldHVybiBtX3N0eWxlTWFwOyB9CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNz
IFByb3BlcnR5Q2FzY2FkZTsKKyAgICBmcmllbmQgY2xhc3MgQnVpbGRlcjsKIAotICAgIFByb3Bl
cnR5Q2FzY2FkZSYgbV9jYXNjYWRlOworICAgIEJ1aWxkZXImIG1fYnVpbGRlcjsKIAogICAgIENT
U1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIG1f
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382472</attachid>
            <date>2019-10-31 09:53:13 -0700</date>
            <delta_ts>2019-10-31 11:12:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-builder-2.patch</filename>
            <type>text/plain</type>
            <size>82467</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNTJlMWQ2ZGE3Ni4uNmY2NmZjNzAyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDIgQEAKKzIwMTktMTAtMzEgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIEludHJvZHVjZSBTdHlsZTo6QnVpbGRlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNjgyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5jYXBzdWxhdGUgdGhlIHN0eWxlIGJ1aWxk
aW5nIHN0ZXAgaW50byBhIG5ldyBCdWlsZGVyIGNsYXNzLiBJdCBvd25zIHRoZSBjYXNjYWRlIGFu
ZCB0aGUgc3R5bGUgYnVpbGRpbmcgc3RhdGUuCisKKyAgICAgICAgTW92ZSB0aGEgYXBwbHlpbmcg
Y29kZSBmcm9tIFN0eWxlUmVzb2x2ZXIgYW5kIFByb3BlcnR5Q2FzY2FkZSB0aGVyZS4KKyAgICAg
ICAgTW92ZSBhIGJ1bmNoIG9mIGZvbnQgcmVsYXRlZCBzdGF0ZSBmcm9tIFN0eWxlUmVzb2x2ZXI6
OlN0YXRlIHRvIEJ1aWxkZXJTdGF0ZS4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NTVmFyaWFibGVSZWZl
cmVuY2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlVmFyaWFibGVSZWZlcmVu
Y2UpOgorICAgICAgICAqIGNzcy9ET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHk6OnJlZ2lzdGVyUHJv
cGVydHkpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6YWRqdXN0U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1YnkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pvb21SdWxlcyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVs
ZXNGb3JMZW5ndGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldEZvbnRTaXplSGFzVmlld3BvcnRVbml0cyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Zm9udFNpemVIYXNW
aWV3cG9ydFVuaXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjp1c2VTVkdab29tUnVsZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6
cGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMpOgorICAgICAgICAqIGNzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXIuY3BwOgorICAgICAgICAqIHN0eWxlL1Byb3BlcnR5Q2FzY2FkZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eUNh
c2NhZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6c2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6OnByb3BlcnR5Q2FzY2Fk
ZUZvclJvbGxiYWNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU6OnJlc29sdmVEaXJlY3Rpb25BbmRXcml0aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseURlZmVycmVkUHJvcGVydGllcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBs
eVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5
Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0aWVzSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseUN1c3RvbVByb3BlcnRpZXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlDdXN0b21Q
cm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNj
YWRlOjpwcm9wZXJ0eUNhc2NhZGVGb3JSb2xsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnR5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVWYWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpyZXNvbHZl
ZFZhcmlhYmxlVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZTo6cmVzb2x2ZURpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBzdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGU6OmRlZmVycmVkUHJvcGVydGllcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpjdXN0b21Qcm9wZXJ0aWVzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6OmRpcmVjdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpidWlsZGVyU3Rh
dGUpOiBEZWxldGVkLgorICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OmRpcmVjdGlvbkZyb21TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6QnVpbGRlcjo6YXBwbHlBbGxQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpCdWlsZGVyOjphcHBseUhpZ2hQcmlvcml0eVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OkJ1aWxkZXI6OmFwcGx5TG93UHJpb3JpdHlQcm9wZXJ0aWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseVByb3BlcnR5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OmFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseVByb3BlcnRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OmFwcGx5UHJvcGVydGllc0ltcGwpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OmFwcGx5Q3VzdG9tUHJvcGVydGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6YXBwbHlDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6YXBwbHlDYXNjYWRlUHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OkJ1aWxkZXI6OnJlc29sdmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6QnVpbGRlcjo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKToKKyAgICAgICAgKiBzdHlsZS9T
dHlsZUJ1aWxkZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6
YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6c3RhdGUp
OgorICAgICAgICAqIHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OkJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZSk6CisgICAgICAgICog
c3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1
aWxkZXJTdGF0ZTo6QnVpbGRlclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWls
ZGVyU3RhdGU6OnVzZVNWR1pvb21SdWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6QnVpbGRlclN0YXRlOjp1c2VTVkdab29tUnVsZXNGb3JMZW5ndGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6YWRqdXN0U3R5bGVGb3JJbnRlckNoYXJh
Y3RlclJ1YnkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6dXBkYXRl
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjp1cGRhdGVGb250
Rm9yVGV4dFNpemVBZGp1c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0
ZTo6dXBkYXRlRm9udEZvclpvb21DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1
aWxkZXJTdGF0ZTo6dXBkYXRlRm9udEZvckdlbmVyaWNGYW1pbHlDaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6dXBkYXRlRm9udEZvck9yaWVudGF0aW9uQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnNldEZvbnRTaXpl
KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6YnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6QnVpbGRlclN0YXRlOjpzZXRGb250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OkJ1aWxkZXJTdGF0ZTo6Y2FzY2FkZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6QnVpbGRlclN0YXRlOjpjbGVhckZvbnREaXJ0eSk6IERlbGV0ZWQuCisKIDIwMTktMTAtMzEg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgdXBkYXRlIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0IGFmdGVyIHIyNTE4
NDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2Zp
bGVsaXN0IGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QK
aW5kZXggNzFiMzhjZDQyNTEuLjUzOTQ5MWUyODFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMjE0OSw2ICsyMTQ5LDcgQEAgJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU2VydmljZVdvcmtlckds
b2JhbFNjb3BlQ29uc3RydWN0b3IKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJDb3JlL1NldHRpbmdzLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvU2V0dGluZ3MuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU3R5bGVCdWlsZGVyLmNwcAogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU3R5bGVCdWlsZGVyR2VuZXJhdGVkLmNw
cAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU3R5bGVQcm9w
ZXJ0eVNob3J0aGFuZEZ1bmN0aW9ucy5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL1N0eWxlUHJvcGVydHlTaG9ydGhhbmRGdW5jdGlvbnMuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCA2ZThjZTc0YTViYS4uOWU0MzdmMGUwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0y
MzQ1LDYgKzIzNDUsNyBAQCBzdHlsZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKIHN0eWxl
L0lkQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAogc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmNwcAog
c3R5bGUvUHJvcGVydHlDYXNjYWRlLmNwcAorc3R5bGUvU3R5bGVCdWlsZGVyLmNwcAogc3R5bGUv
U3R5bGVCdWlsZGVyU3RhdGUuY3BwCiBzdHlsZS9TdHlsZUNoYW5nZS5jcHAKIHN0eWxlL1N0eWxl
Rm9udFNpemVGdW5jdGlvbnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmNjZTU1OGQ4ZGUuLjk0OWIwOWQ4MzY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC00ODQzLDYgKzQ4NDMsNyBAQAogCQlFNEFCQUJGMzIzNjhCOTU5MDBGQTQzNDUgLyogU3R5bGVC
dWlsZGVyU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0QUJBQkYyMjM2OEI5NTgwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXJTdGF0ZS5oICovOyB9
OwogCQlFNEFCQUJGNTIzNjhDNkVGMDBGQTQzNDUgLyogQ2FzY2FkZUxldmVsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFCQUJGNDIzNjhDNkVGMDBG
QTQzNDUgLyogQ2FzY2FkZUxldmVsLmggKi87IH07CiAJCUU0QUJBQzA0MjM2QUU5NTkwMEZBNDM0
NSAvKiBTdHlsZUJ1aWxkZXJHZW5lcmF0ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUJBQzAyMjM2QUU5NTgwMEZBNDM0NSAvKiBTdHlsZUJ1aWxk
ZXJHZW5lcmF0ZWQuaCAqLzsgfTsKKwkJRTRBQkFDMDYyMzZCMDE2RDAwRkE0MzQ1IC8qIFN0eWxl
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRBQkFDMDUyMzZCMDE2QzAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlci5oICovOyB9OwogCQlFNEFF
N0MxNjE3RDFCQjk1MDAwOUZCMzEgLyogRWxlbWVudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFFN0MxNTE3RDFCQjk1MDAwOUZCMzEg
LyogRWxlbWVudEl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRTRBRTdDMUExN0QyMzIzNTAwMDlGQjMxIC8qIEVsZW1lbnRBbmNlc3Rv
ckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEFFN0MxOTE3RDIzMjM1MDAwOUZCMzEgLyogRWxlbWVudEFuY2VzdG9ySXRlcmF0b3IuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEFGQ0ZB
NTBEQUYyOUEzMDBGNUY1NUMgLyogVW5pdEJlemllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRkNGQTQwREFGMjlBMzAwRjVGNTVDIC8qIFVuaXRC
ZXppZXIuaCAqLzsgfTsKQEAgLTE1MTgwLDYgKzE1MTgxLDggQEAKIAkJRTRBQkFCRjIyMzY4Qjk1
ODAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlclN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0eWxlQnVpbGRlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0QUJBQkY0MjM2OEM2RUYwMEZBNDM0NSAvKiBDYXNjYWRlTGV2ZWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FzY2FkZUxldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0QUJBQzAyMjM2QUU5NTgwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXJHZW5l
cmF0ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVCdWlsZGVyR2Vu
ZXJhdGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QUJBQzA1MjM2QjAxNkMw
MEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3R5bGVCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QUJBQzA3
MjM2QjAxODEwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3R5bGVCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBRTdDMTUx
N0QxQkI5NTAwMDlGQjMxIC8qIEVsZW1lbnRJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFbGVtZW50SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTRBRTdDMTkxN0QyMzIzNTAwMDlGQjMxIC8qIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRBbmNlc3Rvckl0ZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QUZDRkE0MERBRjI5QTMwMEY1
RjU1QyAvKiBVbml0QmV6aWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVu
aXRCZXppZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2OTU4LDYgKzI2OTYx
LDggQEAKIAkJCQkxQzAxMDZGRjE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxl
LmggKi8sCiAJCQkJRTRBQkFCRTUyMzYxQTM0MjAwRkE0MzQ1IC8qIFByb3BlcnR5Q2FzY2FkZS5j
cHAgKi8sCiAJCQkJRTRBQkFCRTIyMzYxQTMyOTAwRkE0MzQ1IC8qIFByb3BlcnR5Q2FzY2FkZS5o
ICovLAorCQkJCUU0QUJBQzA3MjM2QjAxODEwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXIuY3BwICov
LAorCQkJCUU0QUJBQzA1MjM2QjAxNkMwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXIuaCAqLywKIAkJ
CQk4M0I5Njg3OTE5RjhBQjgzMDA0RUY3QUYgLyogU3R5bGVCdWlsZGVyQ29udmVydGVyLmggKi8s
CiAJCQkJODM1RDM2MzYxOUZGNjE5MzAwNEM5M0FCIC8qIFN0eWxlQnVpbGRlckN1c3RvbS5oICov
LAogCQkJCUU0QUJBQzAyMjM2QUU5NTgwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXJHZW5lcmF0ZWQu
aCAqLywKQEAgLTMwNTcyLDYgKzMwNTc3LDcgQEAKIAkJCQlCQ0UxQzQzQzBEOTgzMEQzMDAzQjAy
RjIgLyogSlNMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNBODA2MjAxRTAzQjU4NTAw
OEExRjI2IC8qIEpTTG9uZ1JhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREFCNkQyRTE3Qzgx
NEVFMDBDNjBCMzQgLyogSlNNZWRpYUNvbnRyb2xzSG9zdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RTRBQkFDMDYyMzZCMDE2RDAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTU5NzQxREIxQjdEMTQwMTAwMjAxQzkyIC8qIEpTTWVkaWFEZXZpY2VJbmZvLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNTczOUJCQjFCNDIwMTJEMDBEMjU4QzEgLyogSlNNZWRpYURldmlj
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMjNBMTI2MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAKaW5kZXggZmU2MGRjZmJm
YjQuLmY5NzU5YmUwZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFi
bGVSZWZlcmVuY2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxl
UmVmZXJlbmNlVmFsdWUuY3BwCkBAIC0zMCw4ICszMCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oIgogCi0jaW5jbHVkZSAiUHJv
cGVydHlDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTdHls
ZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIGJvb2wgcmVzb2x2ZVZhcmlhYmxlUmVmZXJl
bmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXIKICAgICBBU1NF
UlQocmFuZ2UuYXRFbmQoKSB8fCAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBDb21tYVRva2VuKSk7
CiAKICAgICAvLyBBcHBseSB0aGlzIHZhcmlhYmxlIGZpcnN0LCBpbiBjYXNlIGl0IGlzIHN0aWxs
IHVucmVzb2x2ZWQKLSAgICBidWlsZGVyU3RhdGUuY2FzY2FkZSgpLmFwcGx5Q3VzdG9tUHJvcGVy
dHkodmFyaWFibGVOYW1lKTsKKyAgICBidWlsZGVyU3RhdGUuYnVpbGRlcigpLmFwcGx5Q3VzdG9t
UHJvcGVydHkodmFyaWFibGVOYW1lKTsKIAogICAgIC8vIEFwcGx5IGZhbGxiYWNrIHRvIGRldGVj
dCBjeWNsZXMKICAgICBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+IGZhbGxiYWNrUmVzdWx0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHku
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0RPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuY3Bw
CmluZGV4IDFlN2E1M2IxOTkzLi5lMGM5Yzg2YjdjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0RPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9ET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmNwcApAQCAtMzMsNyArMzMsNyBA
QAogI2luY2x1ZGUgIkNTU1Rva2VuaXplci5oIgogI2luY2x1ZGUgIkRPTUNTU05hbWVzcGFjZS5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCisj
aW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyQ29udmVydGVy
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTYwLDggKzYwLDggQEAg
RXhjZXB0aW9uT3I8dm9pZD4gRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eTo6cmVnaXN0ZXJQ
cm9wZXJ0eShEb2N1bWVudCYgZG9jdW0KICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBT
eW50YXhFcnJvciwgIlRoZSBnaXZlbiBpbml0aWFsIHZhbHVlIG11c3QgYmUgY29tcHV0YXRpb25h
bGx5IGluZGVwZW5kZW50LiIgfTsKIAogICAgICAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsK
LSAgICAgICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSBkdW1teUNhc2NhZGUoc3R5bGVSZXNvbHZl
ciwgbWF0Y2hSZXN1bHQsIHsgfSk7Ci0gICAgICAgIGluaXRpYWxWYWx1ZSA9IENTU1Byb3BlcnR5
UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShkZXNjcmlwdG9yLm5hbWUsIGRl
c2NyaXB0b3Iuc3ludGF4LCB0b2tlbml6ZXIudG9rZW5SYW5nZSgpLCBkdW1teUNhc2NhZGUuYnVp
bGRlclN0YXRlKCksIHN0cmljdENTU1BhcnNlckNvbnRleHQoKSk7CisgICAgICAgIFN0eWxlOjpC
dWlsZGVyIGR1bW15QnVpbGRlcihzdHlsZVJlc29sdmVyLCBtYXRjaFJlc3VsdCwgeyB9KTsKKyAg
ICAgICAgaW5pdGlhbFZhbHVlID0gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Q
cm9wZXJ0eVZhbHVlKGRlc2NyaXB0b3IubmFtZSwgZGVzY3JpcHRvci5zeW50YXgsIHRva2VuaXpl
ci50b2tlblJhbmdlKCksIGR1bW15QnVpbGRlci5zdGF0ZSgpLCBzdHJpY3RDU1NQYXJzZXJDb250
ZXh0KCkpOwogCiAgICAgICAgIGlmICghaW5pdGlhbFZhbHVlIHx8ICFpbml0aWFsVmFsdWUtPmlz
UmVzb2x2ZWQoKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciwg
IlRoZSBnaXZlbiBpbml0aWFsIHZhbHVlIGRvZXMgbm90IHBhcnNlIGZvciB0aGUgZ2l2ZW4gc3lu
dGF4LiIgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAyMGNjNTZiMTg1
YS4uZjM2MTM4NjE5MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTIs
NyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2Rl
QGNhcmV3b2xmLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFu
a3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBB
bGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLykKQEAgLTMyLDcgKzMyLDYgQEAKIAogI2luY2x1ZGUgIkNTU0Nh
bGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCi0jaW5j
bHVkZSAiQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0RlZmF1bHRTdHls
ZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NGb250U2VsZWN0b3IuaCIKQEAgLTUxLDcgKzUwLDYgQEAKICNpbmNsdWRlICJDU1NTdHlsZVJ1
bGUuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0
LmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIkZp
bHRlck9wZXJhdGlvbi5oIgpAQCAtNzMsOSArNzEsNyBAQAogI2luY2x1ZGUgIk1lZGlhUXVlcnlF
dmFsdWF0b3IuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQYWdl
UnVsZUNvbGxlY3Rvci5oIgotI2luY2x1ZGUgIlBhaW50V29ya2xldEdsb2JhbFNjb3BlLmgiCiAj
aW5jbHVkZSAiUGFpci5oIgotI2luY2x1ZGUgIlByb3BlcnR5Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IlF1aXJrcy5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlQ29uc3RhbnRzLmgiCkBAIC04NywxMSArODMsMTEgQEAKICNpbmNsdWRlICJTVkdEb2N1
bWVudEV4dGVuc2lvbnMuaCIKICNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJT
VkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRv
d1Jvb3QuaCIKICNpbmNsdWRlICJTaGFyZWRTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiU3R5bGVC
dWlsZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVDb2xvci5oIgogI2luY2x1ZGUgIlN0eWxlQ2FjaGVk
SW1hZ2UuaCIKICNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCkBAIC0xMTcsOCAr
MTEzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCi1zdGF0aWMgY29uc3QgQ1NTUHJvcGVydHlJRCBmaXJzdExvd1ByaW9yaXR5UHJvcGVydHkg
PSBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkgKyAx
KTsKLQogaW5saW5lIHZvaWQgU3R5bGVSZXNvbHZlcjo6U3RhdGU6OmNhY2hlQm9yZGVyQW5kQmFj
a2dyb3VuZCgpCiB7CiAgICAgbV9oYXNVQUFwcGVhcmFuY2UgPSBtX3N0eWxlLT5oYXNBcHBlYXJh
bmNlKCk7CkBAIC0zNjMsMjIgKzM1Nyw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSoKICAgICBz
dGF0ZS5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKmVsZW1lbnRTdHlsZSkpOwogICAg
IHN0YXRlLnNldFBhcmVudFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigqZWxlbWVudFN0eWxl
KSk7CiAKLSAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIHJlc3VsdCwg
eyBTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IgfSk7Ci0KLSAgICBjYXNjYWRlLmFwcGx5UHJv
cGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkpOwotCi0g
ICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRl
Rm9udChjYXNjYWRlKTsKLQotICAgIC8vIE5vdyByZXNvbHZlIHJlbWFpbmluZyBjdXN0b20gcHJv
cGVydGllcyBhbmQgdGhlIHJlc3QsIGluIGFueSBvcmRlcgotICAgIGNhc2NhZGUuYXBwbHlDdXN0
b21Qcm9wZXJ0aWVzKCk7Ci0KLSAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJzdExvd1By
aW9yaXR5UHJvcGVydHksIGxhc3RDU1NQcm9wZXJ0eSk7Ci0KLSAgICAvLyBJZiBvdXIgZm9udCBn
b3QgZGlydGllZCBieSBvbmUgb2YgdGhlIG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywgdXBkYXRl
IGl0IGEgc2Vjb25kIHRpbWUuCi0gICAgdXBkYXRlRm9udChjYXNjYWRlKTsKLQotICAgIGNhc2Nh
ZGUuYXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoKTsKKyAgICBTdHlsZTo6QnVpbGRlciBidWlsZGVy
KCp0aGlzLCByZXN1bHQsIHsgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yIH0pOworICAgIGJ1
aWxkZXIuYXBwbHlBbGxQcm9wZXJ0aWVzKCk7CiAKICAgICBhZGp1c3RSZW5kZXJTdHlsZSgqc3Rh
dGUuc3R5bGUoKSwgKnN0YXRlLnBhcmVudFN0eWxlKCksIG51bGxwdHIsIG51bGxwdHIpOwogCkBA
IC01NjMsMTkgKzU0Myw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNv
bHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAKICAgICBhdXRvJiByZXN1bHQgPSBj
b2xsZWN0b3IubWF0Y2hSZXN1bHQoKTsKIAotICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUgY2Fz
Y2FkZSgqdGhpcywgcmVzdWx0LCB7IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OkF1dGhvciB9KTsKLQot
ICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJp
b3JpdHlQcm9wZXJ0eSk7Ci0KLSAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgdXBkYXRl
IGl0IG5vdy4KLSAgICB1cGRhdGVGb250KGNhc2NhZGUpOwotCi0gICAgLy8gTm93IHJlc29sdmUg
cmVtYWluaW5nIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCi0g
ICAgY2FzY2FkZS5hcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKLQotICAgIGNhc2NhZGUuYXBwbHlQ
cm9wZXJ0aWVzKGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5KTsKLQot
ICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoKTsKKyAgICBTdHlsZTo6QnVpbGRl
ciBidWlsZGVyKCp0aGlzLCByZXN1bHQsIHsgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yIH0p
OworICAgIGJ1aWxkZXIuYXBwbHlBbGxQcm9wZXJ0aWVzKCk7CiAKICAgICAvLyBOb3cgcmV0dXJu
IHRoZSBzdHlsZS4KICAgICByZXR1cm4gbV9zdGF0ZS50YWtlU3R5bGUoKTsKQEAgLTY3OSwxNiAr
NjQ4LDYgQEAgc3RhdGljIGJvb2wgaXNTY3JvbGxhYmxlT3ZlcmZsb3coT3ZlcmZsb3cgb3ZlcmZs
b3cpCiB9CiAjZW5kaWYKIAotdm9pZCBTdHlsZVJlc29sdmVyOjphZGp1c3RTdHlsZUZvckludGVy
Q2hhcmFjdGVyUnVieSgpCi17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHls
ZSgpOwotICAgIGlmIChzdHlsZS0+cnVieVBvc2l0aW9uKCkgIT0gUnVieVBvc2l0aW9uOjpJbnRl
ckNoYXJhY3RlciB8fCAhbV9zdGF0ZS5lbGVtZW50KCkgfHwgIW1fc3RhdGUuZWxlbWVudCgpLT5o
YXNUYWdOYW1lKHJ0VGFnKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN0eWxlLT5zZXRUZXh0QWxp
Z24oVGV4dEFsaWduTW9kZTo6Q2VudGVyKTsKLSAgICBpZiAoc3R5bGUtPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCi0gICAgICAgIHN0eWxlLT5zZXRXcml0aW5nTW9kZShMZWZ0VG9SaWdodFdy
aXRpbmdNb2RlKTsKLX0KLQogc3RhdGljIGJvb2wgaGFzRWZmZWN0aXZlRGlzcGxheU5vbmVGb3JE
aXNwbGF5Q29udGVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBodHRwczov
L2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWRpc3BsYXktMy8jdW5ib3gtaHRtbApAQCAtMTE0MSwzOCAr
MTEwMCw2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGVGb3JTaXRlU3Bl
Y2lmaWNRdWlya3MoUmVuZGVyU3R5bGUmIHN0eWxlLCBjCiAgICAgfQogfQogCi1zdGF0aWMgdm9p
ZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICBh
dXRvIFtmb250T3JpZW50YXRpb24sIGdseXBoT3JpZW50YXRpb25dID0gc3R5bGUuZm9udEFuZEds
eXBoT3JpZW50YXRpb24oKTsKLQotICAgIGNvbnN0IGF1dG8mIGZvbnREZXNjcmlwdGlvbiA9IHN0
eWxlLmZvbnREZXNjcmlwdGlvbigpOwotICAgIGlmIChmb250RGVzY3JpcHRpb24ub3JpZW50YXRp
b24oKSA9PSBmb250T3JpZW50YXRpb24gJiYgZm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3Jp
ZW50YXRpb24oKSA9PSBnbHlwaE9yaWVudGF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IGZvbnREZXNjcmlwdGlvbjsKLSAgICBuZXdGb250RGVz
Y3JpcHRpb24uc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihnbHlwaE9yaWVudGF0aW9uKTsKLSAg
ICBuZXdGb250RGVzY3JpcHRpb24uc2V0T3JpZW50YXRpb24oZm9udE9yaWVudGF0aW9uKTsKLSAg
ICBzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsK
LX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmIGNhc2NhZGUpCi17Ci0gICAgYXV0byYgc3R5bGUgPSAqbV9zdGF0ZS5zdHlsZSgpOwotICAg
IGlmICghY2FzY2FkZS5idWlsZGVyU3RhdGUoKS5mb250RGlydHkoKSAmJiBzdHlsZS5mb250Q2Fz
Y2FkZSgpLmZvbnRzKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShURVhUX0FVVE9T
SVpJTkcpCi0gICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChzdHlsZSk7Ci0jZW5kaWYKLSAgICBj
aGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7
Ci0gICAgY2hlY2tGb3Jab29tQ2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwot
ICAgIGNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2Uoc3R5bGUpOwotICAgIHN0eWxlLmZvbnRDYXNj
YWRlKCkudXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKLSAgICBpZiAobV9zdGF0
ZS5mb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMoKSkKLSAgICAgICAgc3R5bGUuc2V0SGFzVmlld3Bv
cnRVbml0cyh0cnVlKTsKLQotICAgIGNhc2NhZGUuYnVpbGRlclN0YXRlKCkuY2xlYXJGb250RGly
dHkoKTsKLX0KIAogVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29sdmVyOjpzdHls
ZVJ1bGVzRm9yRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBydWxlc1Rv
SW5jbHVkZSkKIHsKQEAgLTEzMjUsNjMgKzEyNTIsMjYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29u
c3QKICAgICAgICAgLy8gRmluZCBvdXQgaWYgdGhlcmUncyBhIC13ZWJraXQtYXBwZWFyYW5jZSBw
cm9wZXJ0eSBpbiBlZmZlY3QgZnJvbSB0aGUgVUEgc2hlZXQuCiAgICAgICAgIC8vIElmIHNvLCB3
ZSBjYWNoZSB0aGUgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIHN0eWxlcyBzbyB0aGF0IFJlbmRlclRo
ZW1lOjphZGp1c3RTdHlsZSgpCiAgICAgICAgIC8vIGNhbiBsb29rIGF0IHRoZW0gbGF0ZXIgdG8g
ZmlndXJlIG91dCBpZiB0aGlzIGlzIGEgc3R5bGVkIGZvcm0gY29udHJvbCBvciBub3QuCi0gICAg
ICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUgY2FzY2FkZSgqdGhpcywgbWF0Y2hSZXN1bHQsIHsg
U3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50IH0sIGluY2x1ZGVkUHJvcGVydGllcyk7Ci0K
LSAgICAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9z
aXRpb24sIENTU1Byb3BlcnR5V2Via2l0UnVieVBvc2l0aW9uKTsKLSAgICAgICAgYWRqdXN0U3R5
bGVGb3JJbnRlckNoYXJhY3RlclJ1YnkoKTsKLQotI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQot
ICAgICAgICAvLyBTdXBwb3J0ZWQgY29sb3Igc2NoZW1lcyBjYW4gYWZmZWN0IHJlc29sdmVkIGNv
bG9ycywgc28gd2UgbmVlZCB0byBhcHBseSB0aGF0IHByb3BlcnR5IGJlZm9yZSBhbnkgY29sb3Ig
cHJvcGVydGllcy4KLSAgICAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoQ1NTUHJvcGVydHlD
b2xvclNjaGVtZSwgQ1NTUHJvcGVydHlDb2xvclNjaGVtZSk7Ci0jZW5kaWYKLQotICAgICAgICBj
YXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5
UHJvcGVydHkpOwotCi0gICAgICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCB1cGRhdGUg
aXQgbm93LgotICAgICAgICB1cGRhdGVGb250KGNhc2NhZGUpOwotCi0gICAgICAgIC8vIE5vdyBy
ZXNvbHZlIHJlbWFpbmluZyBjdXN0b20gcHJvcGVydGllcyBhbmQgdGhlIHJlc3QsIGluIGFueSBv
cmRlcgotICAgICAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOwotCi0gICAgICAg
IGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENT
U1Byb3BlcnR5KTsKKyAgICAgICAgU3R5bGU6OkJ1aWxkZXIgYnVpbGRlcigqdGhpcywgbWF0Y2hS
ZXN1bHQsIHsgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50IH0sIGluY2x1ZGVkUHJvcGVy
dGllcyk7CisgICAgICAgIGJ1aWxkZXIuYXBwbHlBbGxQcm9wZXJ0aWVzKCk7CiAKICAgICAgICAg
c3RhdGUuY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CiAgICAgfQogCi0gICAgU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSBjYXNjYWRlKCp0aGlzLCBtYXRjaFJlc3VsdCwgU3R5bGU6OmFsbENhc2Nh
ZGVMZXZlbHMoKSwgaW5jbHVkZWRQcm9wZXJ0aWVzKTsKLQotICAgIGNhc2NhZGUuYXBwbHlQcm9w
ZXJ0aWVzKENTU1Byb3BlcnR5V2Via2l0UnVieVBvc2l0aW9uLCBDU1NQcm9wZXJ0eVdlYmtpdFJ1
YnlQb3NpdGlvbik7Ci0gICAgYWRqdXN0U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1YnkoKTsKKyAg
ICBTdHlsZTo6QnVpbGRlciBidWlsZGVyKCp0aGlzLCBtYXRjaFJlc3VsdCwgU3R5bGU6OmFsbENh
c2NhZGVMZXZlbHMoKSwgaW5jbHVkZWRQcm9wZXJ0aWVzKTsKIAotI2lmIEVOQUJMRShEQVJLX01P
REVfQ1NTKQotICAgIC8vIFN1cHBvcnRlZCBjb2xvciBzY2hlbWVzIGNhbiBhZmZlY3QgcmVzb2x2
ZWQgY29sb3JzLCBzbyB3ZSBuZWVkIHRvIGFwcGx5IHRoYXQgcHJvcGVydHkgYmVmb3JlIGFueSBj
b2xvciBwcm9wZXJ0aWVzLgotICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKENTU1Byb3BlcnR5
Q29sb3JTY2hlbWUsIENTU1Byb3BlcnR5Q29sb3JTY2hlbWUpOwotI2VuZGlmCi0KLSAgICBjYXNj
YWRlLmFwcGx5UHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJv
cGVydHkpOworICAgIC8vIEhpZ2ggcHJpb3JpdHkgcHJvcGVydGllcyBtYXkgYWZmZWN0IHJlc29s
dXRpb24gb2Ygb3RoZXIgcHJvcGVydGllcyAodGhleSBhcmUgbW9zdGx5IGZvbnQgcmVsYXRlZCku
CisgICAgYnVpbGRlci5hcHBseUhpZ2hQcmlvcml0eVByb3BlcnRpZXMoKTsKIAogICAgIC8vIElm
IHRoZSBlZmZlY3RpdmUgem9vbSB2YWx1ZSBjaGFuZ2VzLCB3ZSBjYW4ndCB1c2UgdGhlIG1hdGNo
ZWQgcHJvcGVydGllcyBjYWNoZS4gU3RhcnQgb3Zlci4KICAgICBpZiAoY2FjaGVJdGVtICYmIGNh
Y2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBzdGF0ZS5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpCiAgICAgICAgIHJldHVybiBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1h
dGNoUmVzdWx0LCBlbGVtZW50LCBEb05vdFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOwogCi0g
ICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRl
Rm9udChjYXNjYWRlKTsKLQogICAgIC8vIElmIHRoZSBmb250IGNoYW5nZWQsIHdlIGNhbid0IHVz
ZSB0aGUgbWF0Y2hlZCBwcm9wZXJ0aWVzIGNhY2hlLiBTdGFydCBvdmVyLgogICAgIGlmIChjYWNo
ZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gc3Rh
dGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50LCBEb05vdFVzZU1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUpOwogCi0gICAgLy8gTm93IHJlc29sdmUgcmVtYWluaW5nIGN1c3RvbSBwcm9wZXJ0
aWVzIGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCi0gICAgY2FzY2FkZS5hcHBseUN1c3RvbVBy
b3BlcnRpZXMoKTsKLQotICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0TG93UHJpb3Jp
dHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5KTsKLQotICAgIC8vIEZpbmFsbHksIHNvbWUgcHJv
cGVydGllcyBtdXN0IGJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBwYXJzZWQuCi0g
ICAgLy8gVGhlcmUgYXJlIHNvbWUgQ1NTIHByb3BlcnRpZXMgdGhhdCBhZmZlY3QgdGhlIHNhbWUg
UmVuZGVyU3R5bGUgdmFsdWVzLAotICAgIC8vIHNvIHRvIHByZXNlcnZlIGJlaGF2aW9yLCB3ZSBx
dWV1ZSB0aGVtIHVwIGR1cmluZyBjYXNjYWRlIGFuZCBmbHVzaCBoZXJlLgotICAgIGNhc2NhZGUu
YXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoKTsKLQotICAgIEFTU0VSVCghY2FzY2FkZS5idWlsZGVy
U3RhdGUoKS5mb250RGlydHkoKSk7CisgICAgYnVpbGRlci5hcHBseUxvd1ByaW9yaXR5UHJvcGVy
dGllcygpOwogCiAgICAgaWYgKGNhY2hlSXRlbSB8fCAhY2FjaGVIYXNoKQogICAgICAgICByZXR1
cm47CkBAIC0xNDA0LDI4ICsxMjk0LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHUKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7Ci0gICAgU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSBjYXNjYWRlKCp0aGlzLCBtYXRjaFJlc3VsdCwgeyB9KTsKLSAgICBjYXNj
YWRlLmFwcGx5UHJvcGVydHkoaWQsICp2YWx1ZSk7Ci0gICAgdXBkYXRlRm9udChjYXNjYWRlKTsK
LX0KLQotLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkgY29tcGFyZWQg
dG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKLS8vIG9mIGVhY2gg
aW5kaXZpZHVhbCBsZW5ndGggdmFsdWUgaW4gdGhlIHJlbmRlciBzdHlsZSAvIHRyZWUuIENTU1By
aW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKigpCi0vLyBtdWx0aXBsaWVzIGVhY2ggcmVzb2x2
ZWQgbGVuZ3RoIHdpdGggdGhlIHpvb20gbXVsdGlwbGllciAtIHNvIGZvciBTVkcgd2UgbmVlZCB0
byBkaXNhYmxlIHRoYXQuCi0vLyBUaG91Z2ggYWxsIENTUyB2YWx1ZXMgdGhhdCBjYW4gYmUgYXBw
bGllZCB0byBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVudHMgKHdpZHRoL2hlaWdodC9ib3JkZXIvcGFk
ZGluZy4uLikKLS8vIG5lZWQgdG8gcmVzcGVjdCB0aGUgc2NhbGluZy4gUmVuZGVyQm94ICh0aGUg
cGFyZW50IGNsYXNzIG9mIFJlbmRlclNWR1Jvb3QpIGdyYWJzIHZhbHVlcyBsaWtlCi0vLyB3aWR0
aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcvLi4uIGZyb20gdGhlIFJlbmRlclN0eWxlIC0+IGZvciBT
VkcgdGhlc2UgdmFsdWVzIHdvdWxkIG5ldmVyIHNjYWxlLAotLy8gaWYgd2UnZCBwYXNzIGEgMS4w
IHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUuIFNvIHdlIG9ubHkgcGFzcyBhIHpvb20gZmFjdG9yIG9m
IDEuMCBmb3Igc3BlY2lmaWMKLS8vIHByb3BlcnRpZXMgdGhhdCBhcmUgTk9UIGFsbG93ZWQgdG8g
c2NhbGUgd2l0aGluIGEgem9vbWVkIFNWRyBkb2N1bWVudCAobGV0dGVyL3dvcmQtc3BhY2luZy9m
b250LXNpemUpLgotYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXMoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3N0YXRlLmVsZW1lbnQoKSAmJiBtX3N0YXRlLmVsZW1lbnQoKS0+aXNT
VkdFbGVtZW50KCk7Ci19Ci0KLS8vIFNjYWxlIHdpdGgvaGVpZ2h0IHByb3BlcnRpZXMgb24gaW5s
aW5lIFNWRyByb290LgotYm9vbCBTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXNGb3JMZW5n
dGgoKSBjb25zdAotewotICAgIHJldHVybiBpczxTVkdFbGVtZW50PihtX3N0YXRlLmVsZW1lbnQo
KSkgJiYgIShpczxTVkdTVkdFbGVtZW50PigqbV9zdGF0ZS5lbGVtZW50KCkpICYmIG1fc3RhdGUu
ZWxlbWVudCgpLT5wYXJlbnROb2RlKCkpOworICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnRo
aXMsIG1hdGNoUmVzdWx0LCB7IH0pOworICAgIGJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKGlk
LCAqdmFsdWUpOwogfQogCiBSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJ
bWFnZShDU1NWYWx1ZSYgdmFsdWUpCkBAIC0xNDQ3LDgzICsxMzE3LDE5IEBAIFJlZlB0cjxTdHls
ZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QoUmVuZGVyU3R5bGUmIHN0eWxlKQot
ewotICAgIGlmIChzdHlsZS50ZXh0U2l6ZUFkanVzdCgpLmlzQXV0bygpCi0gICAgICAgIHx8ICFz
ZXR0aW5ncygpLnRleHRBdXRvc2l6aW5nRW5hYmxlZCgpCi0gICAgICAgIHx8IChzZXR0aW5ncygp
LnRleHRBdXRvc2l6aW5nVXNlc0lkZW1wb3RlbnRNb2RlKCkgJiYgIXN0eWxlLnRleHRTaXplQWRq
dXN0KCkuaXNOb25lKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIG5ld0ZvbnREZXNj
cmlwdGlvbiA9IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpOwotICAgIGlmICghc3R5bGUudGV4dFNp
emVBZGp1c3QoKS5pc05vbmUoKSkKLSAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpICogc3R5bGUudGV4dFNp
emVBZGp1c3QoKS5tdWx0aXBsaWVyKCkpOwotICAgIGVsc2UKLSAgICAgICAgbmV3Rm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgp
KTsKLSAgICBzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRp
b24pKTsKLX0KLSNlbmRpZgotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5n
ZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsK
LSAgICBpZiAoIXBhcmVudFN0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc3R5bGUu
ZWZmZWN0aXZlWm9vbSgpID09IHBhcmVudFN0eWxlLT5lZmZlY3RpdmVab29tKCkgJiYgc3R5bGUu
dGV4dFpvb20oKSA9PSBwYXJlbnRTdHlsZS0+dGV4dFpvb20oKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY29uc3QgYXV0byYgY2hpbGRGb250ID0gc3R5bGUuZm9udERlc2NyaXB0aW9uKCk7Ci0g
ICAgYXV0byBuZXdGb250RGVzY3JpcHRpb24gPSBjaGlsZEZvbnQ7Ci0gICAgc2V0Rm9udFNpemUo
bmV3Rm9udERlc2NyaXB0aW9uLCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKLSAgICBzdHls
ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsKLX0KLQot
dm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCi17Ci0gICAgY29uc3Qg
YXV0byYgY2hpbGRGb250ID0gc3R5bGUuZm9udERlc2NyaXB0aW9uKCk7Ci0KLSAgICBpZiAoY2hp
bGRGb250LmlzQWJzb2x1dGVTaXplKCkgfHwgIXBhcmVudFN0eWxlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjb25zdCBhdXRvJiBwYXJlbnRGb250ID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpOwotICAgIGlmIChjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09IHBhcmVu
dEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gV2Ug
a25vdyB0aGUgcGFyZW50IGlzIG1vbm9zcGFjZSBvciB0aGUgY2hpbGQgaXMgbW9ub3NwYWNlLCBh
bmQgdGhhdCBmb250Ci0gICAgLy8gc2l6ZSB3YXMgdW5zcGVjaWZpZWQuIFdlIHdhbnQgdG8gc2Nh
bGUgb3VyIGZvbnQgc2l6ZSBhcyBhcHByb3ByaWF0ZS4KLSAgICAvLyBJZiB0aGUgZm9udCB1c2Vz
IGEga2V5d29yZCBzaXplLCB0aGVuIHdlIHJlZmV0Y2ggZnJvbSB0aGUgdGFibGUgcmF0aGVyIHRo
YW4KLSAgICAvLyBtdWx0aXBseWluZyBieSBvdXIgc2NhbGUgZmFjdG9yLgotICAgIGZsb2F0IHNp
emU7Ci0gICAgaWYgKENTU1ZhbHVlSUQgc2l6ZUlkZW50aWZpZXIgPSBjaGlsZEZvbnQua2V5d29y
ZFNpemVBc0lkZW50aWZpZXIoKSkKLSAgICAgICAgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktl
eXdvcmQoc2l6ZUlkZW50aWZpZXIsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCksIGRv
Y3VtZW50KCkpOwotICAgIGVsc2UgewotICAgICAgICBmbG9hdCBmaXhlZFNjYWxlRmFjdG9yID0g
KHNldHRpbmdzKCkuZGVmYXVsdEZpeGVkRm9udFNpemUoKSAmJiBzZXR0aW5ncygpLmRlZmF1bHRG
b250U2l6ZSgpKQotICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxmbG9hdD4oc2V0dGluZ3MoKS5k
ZWZhdWx0Rml4ZWRGb250U2l6ZSgpKSAvIHNldHRpbmdzKCkuZGVmYXVsdEZvbnRTaXplKCkKLSAg
ICAgICAgICAgIDogMTsKLSAgICAgICAgc2l6ZSA9IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0
U2l6ZSgpID8KLSAgICAgICAgICAgICAgICBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpIC8gZml4
ZWRTY2FsZUZhY3RvciA6Ci0gICAgICAgICAgICAgICAgY2hpbGRGb250LnNwZWNpZmllZFNpemUo
KSAqIGZpeGVkU2NhbGVGYWN0b3I7Ci0gICAgfQotCi0gICAgYXV0byBuZXdGb250RGVzY3JpcHRp
b24gPSBjaGlsZEZvbnQ7Ci0gICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBzaXpl
KTsKLSAgICBzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRp
b24pKTsKLX0KLQogdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKCkKIHsK
ICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250RGVz
Y3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShzZXR0aW5ncygpLmZvbnRSZW5kZXJpbmdNb2RlKCkp
OwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoc3RhbmRhcmRGYW1pbHkpOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKENTU1ZhbHVlTWVk
aXVtKTsKLSAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxlOjpmb250U2l6ZUZv
cktleXdvcmQoQ1NTVmFsdWVNZWRpdW0sIGZhbHNlLCBkb2N1bWVudCgpKSk7Ci0gICAgZm9udERl
c2NyaXB0aW9uLnNldFNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKHNldHRpbmdzKCkuc2hv
dWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA/IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZ
ZXMgOiBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pOwotICAgIHN0eWxlKCktPnNldEZvbnRE
ZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwotfQogCi12b2lkIFN0eWxlUmVz
b2x2ZXI6OnNldEZvbnRTaXplKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgZmxvYXQgc2l6ZSkKLXsKKyAgICBhdXRvIHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JLZXl3
b3JkKENTU1ZhbHVlTWVkaXVtLCBmYWxzZSwgZG9jdW1lbnQoKSk7CiAgICAgZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNpemUsIGZv
bnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSwgbV9zdGF0
ZS5zdHlsZSgpLCBkb2N1bWVudCgpKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNpemUsIGZvbnRE
ZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBpczxTVkdFbGVtZW50PihtX3N0YXRlLmVsZW1l
bnQoKSksIG1fc3RhdGUuc3R5bGUoKSwgZG9jdW1lbnQoKSkpOworCisgICAgZm9udERlc2NyaXB0
aW9uLnNldFNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKHNldHRpbmdzKCkuc2hvdWxkQWxs
b3dVc2VySW5zdGFsbGVkRm9udHMoKSA/IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgOiBB
bGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pOworICAgIHN0eWxlKCktPnNldEZvbnREZXNjcmlw
dGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCiBib29sIFN0eWxlUmVzb2x2ZXI6
OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQoY29uc3QgQ1NTUHJp
bWl0aXZlVmFsdWUmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggZDY0
YzJjZTFkNTkuLmY5ZmMzNzRmYjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAg
LTYzLDcgKzYzLDYgQEAgY2xhc3MgS2V5ZnJhbWVMaXN0OwogY2xhc3MgS2V5ZnJhbWVWYWx1ZTsK
IGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3I7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmVuZGVyU2Ny
b2xsYmFyOwogY2xhc3MgUnVsZURhdGE7CiBjbGFzcyBSdWxlU2V0OwogY2xhc3MgU2VsZWN0b3JG
aWx0ZXI7CkBAIC04MCwxNCArNzksOSBAQCBjbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVT
aGVldExpc3Q7CiBjbGFzcyBTdHlsZWRFbGVtZW50OwogY2xhc3MgU1ZHRWxlbWVudDsKLWNsYXNz
IFNWR1NWR0VsZW1lbnQ7CiBjbGFzcyBWaWV3cG9ydFN0eWxlUmVzb2x2ZXI7CiBzdHJ1Y3QgUmVz
b3VyY2VMb2FkZXJPcHRpb25zOwogCi1uYW1lc3BhY2UgU3R5bGUgewotY2xhc3MgUHJvcGVydHlD
YXNjYWRlOwotfQotCiAvLyBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcyBpcyB1c2VkIGluIG1lZGlh
IHF1ZXJpZXMsIHdoZXJlIHJlbGF0aXZlIHVuaXRzCiAvLyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3Jk
aW5nIHRvIHRoZSBkb2N1bWVudCByb290IGVsZW1lbnQgc3R5bGUsIGFuZCBzdHlsZWQgb25seQog
Ly8gZnJvbSB0aGUgVXNlciBBZ2VudCBTdHlsZXNoZWV0IHJ1bGVzLgpAQCAtMTYzLDE0ICsxNTcs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlE
LCBDU1NWYWx1ZSosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4pOwogICAgIHZvaWQgYXBw
bHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAKLSAg
ICB2b2lkIHVwZGF0ZUZvbnQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpOwogICAgIHZvaWQgaW5p
dGlhbGl6ZUZvbnRTdHlsZSgpOwogCi0gICAgdm9pZCBzZXRGb250U2l6ZShGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7Ci0KLSAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNv
bnN0OwotICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgY29uc3Q7Ci0KICAgICBz
dGF0aWMgYm9vbCBjb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KGNv
bnN0IENTU1ByaW1pdGl2ZVZhbHVlJik7CiAgICAgQ29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmLCBib29sIGZvclZpc2l0ZWRMaW5rID0gZmFsc2Up
IGNvbnN0OwogCkBAIC0yMDUsMTMgKzE5Myw2IEBAIHB1YmxpYzoKICAgICBib29sIGNyZWF0ZUZp
bHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmIGluVmFsdWUsIEZpbHRlck9wZXJhdGlvbnMm
IG91dE9wZXJhdGlvbnMpOwogCiBwcml2YXRlOgotICAgIC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMg
dXAgdGhlIGRlZmF1bHQgZm9udCBzaXplIGlmIGl0IGRldGVjdHMgdGhhdCB0aGUgY3VycmVudCBn
ZW5lcmljIGZvbnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAtZHdoCi0gICAgdm9pZCBjaGVja0Zvckdl
bmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpOwotICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlJiwgY29uc3Qg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQot
ICAgIHZvaWQgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChSZW5kZXJTdHlsZSYpOwotI2VuZGlmCi0K
ICAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5
bGUmIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50Qm94U3R5bGUsIGNvbnN0
IEVsZW1lbnQqKTsKICAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxlRm9yU2l0ZVNwZWNpZmljUXVp
cmtzKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCYpOwogICAgIApAQCAtMjQ2LDE3ICsyMjcs
MTIgQEAgcHVibGljOgogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxl
KiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9
CiAKLSAgICAgICAgdm9pZCBzZXRGb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMoYm9vbCBoYXNWaWV3
cG9ydFVuaXRzKSB7IG1fZm9udFNpemVIYXNWaWV3cG9ydFVuaXRzID0gaGFzVmlld3BvcnRVbml0
czsgfQotICAgICAgICBib29sIGZvbnRTaXplSGFzVmlld3BvcnRVbml0cygpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udFNpemVIYXNWaWV3cG9ydFVuaXRzOyB9Ci0KICAgICAgICAgdm9pZCBjYWNoZUJv
cmRlckFuZEJhY2tncm91bmQoKTsKICAgICAgICAgYm9vbCBoYXNVQUFwcGVhcmFuY2UoKSBjb25z
dCB7IHJldHVybiBtX2hhc1VBQXBwZWFyYW5jZTsgfQogICAgICAgICBCb3JkZXJEYXRhIGJvcmRl
ckRhdGEoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlckRhdGE7IH0KICAgICAgICAgRmlsbExheWVy
IGJhY2tncm91bmREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YTsgfQogICAg
ICAgICBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
Z3JvdW5kQ29sb3I7IH0KIAotICAgICAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0IHsg
cmV0dXJuIG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOyB9Ci0KICAgICAg
ICAgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsgfQogCiAg
ICAgICAgIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcigpIGNvbnN0IHsgcmV0
dXJuIG1fc2VsZWN0b3JGaWx0ZXI7IH0KQEAgLTI3OCw3ICsyNTQsNiBAQCBwdWJsaWM6CiAKICAg
ICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGE7CiAKLSAgICAgICAgYm9vbCBtX2ZvbnRTaXplSGFzVmlld3BvcnRVbml0cyB7IGZhbHNlIH07
CiAgICAgICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2UgeyBmYWxzZSB9OwogICAgIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAppbmRleCAzOWI5ZjY1MzY3Ny4uNmI4
Y2I3MjMxN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKQEAgLTQy
LDEwICs0MiwxMCBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZUNv
bG9yLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5o
IgpAQCAtMjM0LDcgKzIzNCw3IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlEIHByb3BJCiAgICAgQ1NTUHJv
cGVydHlQYXJzZXI6OmNvbGxlY3RQYXJzZWRDdXN0b21Qcm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVz
KHN5bnRheCwgZmFsc2UsIGRlcGVuZGVuY2llcywgcmVzb2x2ZWREYXRhLT50b2tlbnMoKSwgbV9j
b250ZXh0KTsKIAogICAgIGZvciAoYXV0byBpZCA6IGRlcGVuZGVuY2llcykKLSAgICAgICAgYnVp
bGRlclN0YXRlLmNhc2NhZGUoKS5hcHBseVByb3BlcnRpZXMoaWQsIGlkKTsKKyAgICAgICAgYnVp
bGRlclN0YXRlLmJ1aWxkZXIoKS5hcHBseVByb3BlcnR5KGlkKTsKIAogICAgIHJldHVybiBDU1NQ
cm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgc3ludGF4
LCByZXNvbHZlZERhdGEtPnRva2VucygpLCBidWlsZGVyU3RhdGUsIG1fY29udGV4dCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCmluZGV4
IDVkNDA3MjY3OTk1Li40YmEwYzFjMjNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAgLTY3LDEyICs2NywxMiBAQAogI2luY2x1ZGUg
Ikhhc2hUb29scy5oIgogLy8gRklYTUUtTkVXUEFSU0VSOiBSZXBsYWNlIFBhaXIgYW5kIFJlY3Qg
d2l0aCBhY3R1YWwgQ1NTVmFsdWUgc3ViY2xhc3NlcyAoQ1NTVmFsdWVQYWlyIGFuZCBDU1NRdWFk
VmFsdWUpLgogI2luY2x1ZGUgIlBhaXIuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIK
ICNpbmNsdWRlICJSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIK
ICNpbmNsdWRlICJTVkdQYXRoVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgi
CiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyQ29udmVydGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9w
ZXJ0eVNob3J0aGFuZC5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmRGdW5jdGlv
bnMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCmluZGV4IGMzODMz
ZDRjZTZmLi40NTNlYWExNGI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJv
cGVydHlDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2Nh
ZGUuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiUGFpbnRXb3JrbGV0R2xvYmFsU2Nv
cGUuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJHZW5lcmF0ZWQuaCIKICNpbmNsdWRlICJTdHls
ZVByb3BlcnR5U2hvcnRoYW5kLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUgewpAQCAtMTczLDIzICsxNzIsMTggQEAg
c3RhdGljIGlubGluZSBib29sIGlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQpCiB9CiAjZW5kaWYKIAotUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBP
cHRpb25TZXQ8Q2FzY2FkZUxldmVsPiBjYXNjYWRlTGV2ZWxzLCBJbmNsdWRlZFByb3BlcnRpZXMg
aW5jbHVkZWRQcm9wZXJ0aWVzKQorUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUoY29u
c3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiBjYXNj
YWRlTGV2ZWxzLCBJbmNsdWRlZFByb3BlcnRpZXMgaW5jbHVkZWRQcm9wZXJ0aWVzLCBEaXJlY3Rp
b24gZGlyZWN0aW9uKQogICAgIDogbV9tYXRjaFJlc3VsdChtYXRjaFJlc3VsdCkKICAgICAsIG1f
aW5jbHVkZWRQcm9wZXJ0aWVzKGluY2x1ZGVkUHJvcGVydGllcykKLSAgICAsIG1fYnVpbGRlclN0
YXRlKHN0ZDo6aW5fcGxhY2UsICp0aGlzLCBzdHlsZVJlc29sdmVyKQorICAgICwgbV9kaXJlY3Rp
b24ocmVzb2x2ZURpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKGRpcmVjdGlvbikpCiB7Ci0gICAgLy8g
RGlyZWN0aW9uYWwgcHJvcGVydGllcyAoKi1iZWZvcmUvYWZ0ZXIpIGFyZSBhbGlhc2VzIHRoYXQg
ZGVwZW5kIG9uIHRoZSBUZXh0RGlyZWN0aW9uIGFuZCBXcml0aW5nTW9kZS4KLSAgICAvLyBUaGVz
ZSBtdXN0IGJlIHJlc29sdmVkIGJlZm9yZSB3ZSBjYW4gYmVnaW4gYnVpbGRpbmcgdGhlIHByb3Bl
cnR5IGNhc2NhZGUuCi0gICAgcmVzb2x2ZURpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKCk7Ci0KICAg
ICBidWlsZENhc2NhZGUoY2FzY2FkZUxldmVscyk7CiB9CiAKIFByb3BlcnR5Q2FzY2FkZTo6UHJv
cGVydHlDYXNjYWRlKGNvbnN0IFByb3BlcnR5Q2FzY2FkZSYgcGFyZW50LCBPcHRpb25TZXQ8Q2Fz
Y2FkZUxldmVsPiBjYXNjYWRlTGV2ZWxzKQotICAgIDogIG1fbWF0Y2hSZXN1bHQocGFyZW50Lm1f
bWF0Y2hSZXN1bHQpCisgICAgOiBtX21hdGNoUmVzdWx0KHBhcmVudC5tX21hdGNoUmVzdWx0KQog
ICAgICwgbV9pbmNsdWRlZFByb3BlcnRpZXMocGFyZW50Lm1faW5jbHVkZWRQcm9wZXJ0aWVzKQog
ICAgICwgbV9kaXJlY3Rpb24ocGFyZW50Lm1fZGlyZWN0aW9uKQotICAgICwgbV93cml0aW5nTW9k
ZShwYXJlbnQubV93cml0aW5nTW9kZSkKIHsKICAgICBidWlsZENhc2NhZGUoY2FzY2FkZUxldmVs
cyk7CiB9CkBAIC0yMzAsNyArMjI0LDcgQEAgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnNldFByb3Bl
cnR5SW50ZXJuYWwoUHJvcGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eUlEIGlkLAogdm9pZCBQ
cm9wZXJ0eUNhc2NhZGU6OnNldChDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgY3NzVmFsdWUs
IHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIFNjb3Bl
T3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCkKIHsKICAgICBpZiAoQ1NTUHJvcGVydHk6OmlzRGly
ZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCkpCi0gICAgICAgIGlkID0gQ1NTUHJvcGVydHk6OnJlc29s
dmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBtX2RpcmVjdGlvbiwgbV93cml0aW5nTW9kZSk7
CisgICAgICAgIGlkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5
KGlkLCBtX2RpcmVjdGlvbi50ZXh0RGlyZWN0aW9uLCBtX2RpcmVjdGlvbi53cml0aW5nTW9kZSk7
CiAKICAgICBBU1NFUlQoIXNob3VsZEFwcGx5UHJvcGVydHlJblBhcnNlT3JkZXIoaWQpKTsKIApA
QCAtMzc3LDEyMCArMzcxLDcgQEAgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFkZEltcG9ydGFudE1h
dGNoZXMoQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZlbCkKICAgICAgICAgYWRkTWF0Y2gobWF0Y2hl
ZERlY2xhcmF0aW9uc1ttYXRjaC5pbmRleF0sIGNhc2NhZGVMZXZlbCwgdHJ1ZSk7CiB9CiAKLXZv
aWQgUHJvcGVydHlDYXNjYWRlOjphcHBseURlZmVycmVkUHJvcGVydGllcygpCi17Ci0gICAgZm9y
IChhdXRvJiBwcm9wZXJ0eSA6IG1fZGVmZXJyZWRQcm9wZXJ0aWVzKQotICAgICAgICBhcHBseVBy
b3BlcnR5KHByb3BlcnR5KTsKLX0KLQotdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVy
dGllcyhpbnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSkKLXsKLSAgICBpZiAoTElL
RUxZKG1fY3VzdG9tUHJvcGVydGllcy5pc0VtcHR5KCkpKQotICAgICAgICByZXR1cm4gYXBwbHlQ
cm9wZXJ0aWVzSW1wbDxDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmc6OkRpc2FibGVkPihmaXJz
dFByb3BlcnR5LCBsYXN0UHJvcGVydHkpOwotCi0gICAgcmV0dXJuIGFwcGx5UHJvcGVydGllc0lt
cGw8Q3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nOjpFbmFibGVkPihmaXJzdFByb3BlcnR5LCBs
YXN0UHJvcGVydHkpOwotfQotCi10ZW1wbGF0ZTxQcm9wZXJ0eUNhc2NhZGU6OkN1c3RvbVByb3Bl
cnR5Q3ljbGVUcmFja2luZyB0cmFja0N5Y2xlcz4KLWlubGluZSB2b2lkIFByb3BlcnR5Q2FzY2Fk
ZTo6YXBwbHlQcm9wZXJ0aWVzSW1wbChpbnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0
eSkKLXsKLSAgICBmb3IgKGludCBpZCA9IGZpcnN0UHJvcGVydHk7IGlkIDw9IGxhc3RQcm9wZXJ0
eTsgKytpZCkgewotICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBzdGF0aWNfY2Fz
dDxDU1NQcm9wZXJ0eUlEPihpZCk7Ci0gICAgICAgIGlmICghaGFzUHJvcGVydHkocHJvcGVydHlJ
RCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQVNTRVJUKHByb3BlcnR5SUQgIT0g
Q1NTUHJvcGVydHlDdXN0b20pOwotICAgICAgICBhdXRvJiBwcm9wZXJ0eSA9IG1fcHJvcGVydGll
c1twcm9wZXJ0eUlEXTsKLQotICAgICAgICBpZiAodHJhY2tDeWNsZXMgPT0gQ3VzdG9tUHJvcGVy
dHlDeWNsZVRyYWNraW5nOjpFbmFibGVkKSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoYnVp
bGRlclN0YXRlKCkubV9pblByb2dyZXNzUHJvcGVydGllcy5nZXQocHJvcGVydHlJRCkpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gV2UgYXJlIGluIGEgY3ljbGUgKGVnLiBzZXR0aW5nIGZvbnQgc2l6
ZSB1c2luZyByZWdpc3RlcmVkIGN1c3RvbSBwcm9wZXJ0eSB2YWx1ZSBjb250YWluaW5nIGVtKS4K
LSAgICAgICAgICAgICAgICAvLyBTbyB0aGlzIHZhbHVlIHNob3VsZCBiZSB1bnNldC4KLSAgICAg
ICAgICAgICAgICBidWlsZGVyU3RhdGUoKS5tX2FwcGxpZWRQcm9wZXJ0aWVzLnNldChwcm9wZXJ0
eUlEKTsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHByb3BlcnR5IGlzIGluIGEgY3ljbGUsIGFu
ZCBvbmx5IHRoZSByb290IG9mIHRoZSBjYWxsIHN0YWNrIHdpbGwgaGF2ZSBmaXJzdFByb3BlcnR5
ICE9IGxhc3RQcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZmlyc3RQcm9wZXJ0eSA9
PSBsYXN0UHJvcGVydHkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYXV0byYgYnVpbGRlclN0YXRlID0gKm1fYnVpbGRlclN0YXRlOwotICAg
ICAgICAgICAgYnVpbGRlclN0YXRlLm1faW5Qcm9ncmVzc1Byb3BlcnRpZXMuc2V0KHByb3BlcnR5
SUQpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBi
dWlsZGVyU3RhdGUubV9hcHBsaWVkUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCk7Ci0gICAgICAg
ICAgICBidWlsZGVyU3RhdGUubV9pblByb2dyZXNzUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCwg
ZmFsc2UpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJ
ZiB3ZSBkb24ndCBoYXZlIGFueSBjdXN0b20gcHJvcGVydGllcywgdGhlbiB0aGVyZSBjYW4ndCBi
ZSBhbnkgY3ljbGVzLgotICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5KTsKLSAgICB9Ci19
Ci0KLXZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseUN1c3RvbVByb3BlcnRpZXMoKQotewotICAg
IGZvciAoYXV0byYgbmFtZSA6IG1fY3VzdG9tUHJvcGVydGllcy5rZXlzKCkpCi0gICAgICAgIGFw
cGx5Q3VzdG9tUHJvcGVydHkobmFtZSk7Ci19Ci0KLXZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBs
eUN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBhdXRvJiBidWlsZGVy
U3RhdGUgPSAqbV9idWlsZGVyU3RhdGU7Ci0gICAgaWYgKGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRD
dXN0b21Qcm9wZXJ0aWVzLmNvbnRhaW5zKG5hbWUpIHx8ICFtX2N1c3RvbVByb3BlcnRpZXMuY29u
dGFpbnMobmFtZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcHJvcGVydHkgPSBjdXN0
b21Qcm9wZXJ0eShuYW1lKTsKLSAgICBib29sIGluQ3ljbGUgPSBidWlsZGVyU3RhdGUubV9pblBy
b2dyZXNzUHJvcGVydGllc0N1c3RvbS5jb250YWlucyhuYW1lKTsKLQotICAgIGZvciAoYXV0byBp
bmRleCA6IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hMaW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7Ci0gICAgICAgIGlm
ICghcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGlmIChpbmRleCAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiBidWlsZGVy
U3RhdGUuc3R5bGUoKS5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+
IHZhbHVlVG9BcHBseSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKSk7Ci0KLSAg
ICAgICAgaWYgKGluQ3ljbGUpIHsKLSAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRD
dXN0b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCB0cnkgdG8g
YXBwbHkgdGhpcyBwcm9wZXJ0eSBhZ2FpbiB3aGlsZSByZXNvbHZpbmcgaXQuCi0gICAgICAgICAg
ICB2YWx1ZVRvQXBwbHkgPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVXaXRoSUQobmFt
ZSwgQ1NTVmFsdWVJbnZhbGlkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJ1aWxkZXJTdGF0ZS5t
X2luUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tLmFkZChuYW1lKTsKLQotICAgICAgICBpZiAoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KHZhbHVl
VG9BcHBseS0+dmFsdWUoKSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2Vk
VmFsdWUgPSByZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9B
cHBseS5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGlmIChidWlsZGVyU3RhdGUubV9hcHBsaWVkQ3Vz
dG9tUHJvcGVydGllcy5jb250YWlucyhuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm47IC8v
IFRoZXJlIHdhcyBhIGN5Y2xlIGFuZCB0aGUgdmFsdWUgd2FzIHJlc2V0LCBzbyBiYWlsLgotCi0g
ICAgICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKQotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVl
ID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlV2l0aElEKG5hbWUsIENTU1ZhbHVlVW5z
ZXQpOwotCi0gICAgICAgICAgICB2YWx1ZVRvQXBwbHkgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlPigqcGFyc2VkVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJ1aWxk
ZXJTdGF0ZS5tX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tLmNvbnRhaW5zKG5hbWUpKSB7Ci0g
ICAgICAgICAgICBidWlsZGVyU3RhdGUubV9saW5rTWF0Y2ggPSBpbmRleDsKLSAgICAgICAgICAg
IGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSwgaW5k
ZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYnVpbGRlclN0YXRlLm1fbGlua01hdGNoID0g
U2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQ7Ci0gICAgYnVpbGRlclN0YXRlLm1faW5Qcm9n
cmVzc1Byb3BlcnRpZXNDdXN0b20ucmVtb3ZlKG5hbWUpOwotICAgIGJ1aWxkZXJTdGF0ZS5tX2Fw
cGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsKLQotICAgIGZvciAoYXV0byBpbmRleCA6
IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hM
aW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7Ci0gICAgICAgIGlmICghcHJv
cGVydHkuY3NzVmFsdWVbaW5kZXhdKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
IChpbmRleCAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiBidWlsZGVyU3RhdGUu
c3R5bGUoKS5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVl
VG9BcHBseSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlPigqcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKSk7Ci0KLSAgICAgICAg
aWYgKGluQ3ljbGUgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Q1NTVmFyaWFibGVSZWZl
cmVuY2VWYWx1ZT4+KHZhbHVlVG9BcHBseS0+dmFsdWUoKSkpIHsKLSAgICAgICAgICAgIC8vIFJl
c29sdmUgdGhpcyB2YWx1ZSBzbyB0aGF0IHdlIHJlc2V0IGl0cyBkZXBlbmRlbmNpZXMuCi0gICAg
ICAgICAgICByZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9B
cHBseS5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWNvbnN0IFByb3BlcnR5Q2FzY2Fk
ZSogUHJvcGVydHlDYXNjYWRlOjpwcm9wZXJ0eUNhc2NhZGVGb3JSb2xsYmFjayhDYXNjYWRlTGV2
ZWwgY2FzY2FkZUxldmVsKQorY29uc3QgUHJvcGVydHlDYXNjYWRlKiBQcm9wZXJ0eUNhc2NhZGU6
OnByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrKENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwpIGNv
bnN0CiB7CiAgICAgc3dpdGNoIChjYXNjYWRlTGV2ZWwpIHsKICAgICBjYXNlIENhc2NhZGVMZXZl
bDo6QXV0aG9yOgpAQCAtNTE0LDE0NyArMzk1LDkgQEAgY29uc3QgUHJvcGVydHlDYXNjYWRlKiBQ
cm9wZXJ0eUNhc2NhZGU6OnByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrKENhc2NhZGVMZXZlbAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1pbmxpbmUgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFw
cGx5UHJvcGVydHkoY29uc3QgUHJvcGVydHkmIHByb3BlcnR5KQotewotICAgIGF1dG8mIGJ1aWxk
ZXJTdGF0ZSA9ICptX2J1aWxkZXJTdGF0ZTsKLSAgICBidWlsZGVyU3RhdGUubV9jYXNjYWRlTGV2
ZWwgPSBwcm9wZXJ0eS5sZXZlbDsKLSAgICBidWlsZGVyU3RhdGUubV9zdHlsZVNjb3BlT3JkaW5h
bCA9IHByb3BlcnR5LnN0eWxlU2NvcGVPcmRpbmFsOwotCi0gICAgYXV0byBhcHBseVdpdGhMaW5r
TWF0Y2ggPSBbJl0oU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrIGxpbmtNYXRjaCkgewot
ICAgICAgICBpZiAocHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoXSkgewotICAgICAgICAgICAg
YnVpbGRlclN0YXRlLm1fbGlua01hdGNoID0gbGlua01hdGNoOwotICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaF0sIGxpbmtN
YXRjaCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKLQotICAgIGlmIChidWlsZGVyU3RhdGUuc3R5bGUo
KS5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhcHBseVdpdGhMaW5rTWF0Y2goU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmspOwot
ICAgIGFwcGx5V2l0aExpbmtNYXRjaChTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7Ci0K
LSAgICBidWlsZGVyU3RhdGUubV9saW5rTWF0Y2ggPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVm
YXVsdDsKLX0KLQotdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUmIHZhbHVlLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sg
bGlua01hdGNoTWFzaykKK1Byb3BlcnR5Q2FzY2FkZTo6RGlyZWN0aW9uIFByb3BlcnR5Q2FzY2Fk
ZTo6cmVzb2x2ZURpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKERpcmVjdGlvbiBpbmhlcml0ZWREaXJl
Y3Rpb24pIGNvbnN0CiB7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghaXNTaG9ydGhhbmRDU1NQ
cm9wZXJ0eShpZCksICJTaG9ydGhhbmQgcHJvcGVydHkgaWQgPSAlZCB3YXNuJ3QgZXhwYW5kZWQg
YXQgcGFyc2luZyB0aW1lIiwgaWQpOwotCi0gICAgYXV0byB2YWx1ZVRvQXBwbHkgPSByZXNvbHZl
VmFsdWUoaWQsIHZhbHVlKTsKLQotICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2Fy
ZVByb3BlcnR5KGlkKSkgewotICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVy
dHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBtX2RpcmVjdGlvbiwgbV93cml0
aW5nTW9kZSk7Ci0gICAgICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7Ci0gICAgICAgIHJldHVybiBh
cHBseVByb3BlcnR5KG5ld0lkLCB2YWx1ZVRvQXBwbHkuZ2V0KCksIGxpbmtNYXRjaE1hc2spOwot
ICAgIH0KLQotICAgIGF1dG8mIGJ1aWxkZXJTdGF0ZSA9ICptX2J1aWxkZXJTdGF0ZTsKLQotICAg
IENTU0N1c3RvbVByb3BlcnR5VmFsdWUqIGN1c3RvbVByb3BlcnR5VmFsdWUgPSBudWxscHRyOwot
ICAgIENTU1ZhbHVlSUQgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID0gQ1NTVmFsdWVJbnZhbGlkOwot
ICAgIENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSogY3VzdG9tUHJvcGVydHlSZWdpc3RlcmVk
ID0gbnVsbHB0cjsKLQotICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUN1c3RvbSkgewotICAgICAg
ICBjdXN0b21Qcm9wZXJ0eVZhbHVlID0gZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4o
dmFsdWVUb0FwcGx5LnB0cigpKTsKLSAgICAgICAgQVNTRVJUKGN1c3RvbVByb3BlcnR5VmFsdWUt
PmlzUmVzb2x2ZWQoKSk7Ci0gICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENTU1Zh
bHVlSUQ+KGN1c3RvbVByb3BlcnR5VmFsdWUtPnZhbHVlKCkpKQotICAgICAgICAgICAgY3VzdG9t
UHJvcGVydHlWYWx1ZUlEID0gV1RGOjpnZXQ8Q1NTVmFsdWVJRD4oY3VzdG9tUHJvcGVydHlWYWx1
ZS0+dmFsdWUoKSk7Ci0gICAgICAgIGF1dG8mIG5hbWUgPSBjdXN0b21Qcm9wZXJ0eVZhbHVlLT5u
YW1lKCk7Ci0gICAgICAgIGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCA9IGJ1aWxkZXJTdGF0ZS5k
b2N1bWVudCgpLmdldENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgpLmdldChuYW1lKTsK
LSAgICB9Ci0KLSAgICBib29sIGlzSW5oZXJpdCA9IHZhbHVlVG9BcHBseS0+aXNJbmhlcml0ZWRW
YWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZUluaGVyaXQ7Ci0gICAg
Ym9vbCBpc0luaXRpYWwgPSB2YWx1ZVRvQXBwbHktPmlzSW5pdGlhbFZhbHVlKCkgfHwgY3VzdG9t
UHJvcGVydHlWYWx1ZUlEID09IENTU1ZhbHVlSW5pdGlhbDsKLQotICAgIGJvb2wgaXNVbnNldCA9
IHZhbHVlVG9BcHBseS0+aXNVbnNldFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09
IENTU1ZhbHVlVW5zZXQ7Ci0gICAgYm9vbCBpc1JldmVydCA9IHZhbHVlVG9BcHBseS0+aXNSZXZl
cnRWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZVJldmVydDsKLQot
ICAgIGlmIChpc1JldmVydCkgewotICAgICAgICBpZiAoYXV0byogcm9sbGJhY2sgPSBwcm9wZXJ0
eUNhc2NhZGVGb3JSb2xsYmFjayhidWlsZGVyU3RhdGUubV9jYXNjYWRlTGV2ZWwpKSB7Ci0gICAg
ICAgICAgICAvLyBXaXRoIHRoZSByb2xsYmFjayBjYXNjYWRlIGJ1aWx0LCB3ZSBuZWVkIHRvIG9i
dGFpbiB0aGUgcHJvcGVydHkgYW5kIGFwcGx5IGl0LiBJZiB0aGUgcHJvcGVydHkgaXMKLSAgICAg
ICAgICAgIC8vIG5vdCBwcmVzZW50LCB0aGVuIHdlIGJlaGF2ZSBsaWtlICJ1bnNldC4iIE90aGVy
d2lzZSB3ZSBhcHBseSB0aGUgcHJvcGVydHkgaW5zdGVhZCBvZgotICAgICAgICAgICAgLy8gb3Vy
IG93bi4KLSAgICAgICAgICAgIGlmIChjdXN0b21Qcm9wZXJ0eVZhbHVlKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCAmJiBjdXN0b21Qcm9wZXJ0eVJlZ2lz
dGVyZWQtPmluaGVyaXRzICYmIHJvbGxiYWNrLT5oYXNDdXN0b21Qcm9wZXJ0eShjdXN0b21Qcm9w
ZXJ0eVZhbHVlLT5uYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gcHJvcGVydHkg
PSByb2xsYmFjay0+Y3VzdG9tUHJvcGVydHkoY3VzdG9tUHJvcGVydHlWYWx1ZS0+bmFtZSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2td
KQotICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnBy
b3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2tdLCBsaW5rTWF0Y2hNYXNrKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAocm9sbGJhY2stPmhhc1Byb3BlcnR5KGlkKSkgewotICAgICAgICAgICAgICAgIGF1dG8m
IHByb3BlcnR5ID0gcm9sbGJhY2stPnByb3BlcnR5KGlkKTsKLSAgICAgICAgICAgICAgICBpZiAo
cHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoTWFza10pCi0gICAgICAgICAgICAgICAgICAgIGFw
cGx5UHJvcGVydHkocHJvcGVydHkuaWQsICpwcm9wZXJ0eS5jc3NWYWx1ZVtsaW5rTWF0Y2hNYXNr
XSwgbGlua01hdGNoTWFzayk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgaXNVbnNldCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYg
KGlzVW5zZXQpIHsKLSAgICAgICAgaWYgKENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5
KGlkKSkKLSAgICAgICAgICAgIGlzSW5oZXJpdCA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGlzSW5pdGlhbCA9IHRydWU7Ci0gICAgfQotCi0gICAgQVNTRVJUKCFpc0luaGVyaXQg
fHwgIWlzSW5pdGlhbCk7IC8vIGlzSW5oZXJpdCAtPiAhaXNJbml0aWFsICYmIGlzSW5pdGlhbCAt
PiAhaXNJbmhlcml0Ci0KLSAgICBpZiAoYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKSAmJiAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSB7Ci0gICAg
ICAgIC8vIExpbWl0IHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0
aGUgb25lcyBob25vcmVkIGJ5IDp2aXNpdGVkLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGlzSW5oZXJpdCAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQp
KQotICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVk
UHJvcGVydGllcygpOwotCi0jaWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCi0gICAgaWYgKGlz
PENTU1BhaW50SW1hZ2VWYWx1ZT4odmFsdWVUb0FwcGx5KSkgewotICAgICAgICBhdXRvJiBuYW1l
ID0gZG93bmNhc3Q8Q1NTUGFpbnRJbWFnZVZhbHVlPih2YWx1ZVRvQXBwbHkuZ2V0KCkpLm5hbWUo
KTsKLSAgICAgICAgaWYgKGF1dG8qIHBhaW50V29ya2xldCA9IGNvbnN0X2Nhc3Q8RG9jdW1lbnQm
PihidWlsZGVyU3RhdGUuZG9jdW1lbnQoKSkucGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVGb3JOYW1l
KG5hbWUpKSB7Ci0gICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHBhaW50V29ya2xl
dC0+cGFpbnREZWZpbml0aW9uTG9jaygpKTsKLSAgICAgICAgICAgIGlmIChhdXRvKiByZWdpc3Ry
YXRpb24gPSBwYWludFdvcmtsZXQtPnBhaW50RGVmaW5pdGlvbk1hcCgpLmdldChuYW1lKSkgewot
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiByZWdpc3RyYXRpb24tPmlucHV0
UHJvcGVydGllcykKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuYWRk
Q3VzdG9tUGFpbnRXYXRjaFByb3BlcnR5KHByb3BlcnR5KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgQnVpbGRlckdlbmVyYXRlZDo6YXBwbHlQcm9wZXJ0
eShpZCwgYnVpbGRlclN0YXRlLCB2YWx1ZVRvQXBwbHkuZ2V0KCksIGlzSW5pdGlhbCwgaXNJbmhl
cml0LCBjdXN0b21Qcm9wZXJ0eVJlZ2lzdGVyZWQpOwotfQotCi1SZWY8Q1NTVmFsdWU+IFByb3Bl
cnR5Q2FzY2FkZTo6cmVzb2x2ZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFs
dWUmIHZhbHVlKQotewotICAgIGlmICghdmFsdWUuaGFzVmFyaWFibGVSZWZlcmVuY2VzKCkpCi0g
ICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAKLSAgICBhdXRvIHZhcmlhYmxlVmFsdWUgPSByZXNv
bHZlZFZhcmlhYmxlVmFsdWUocHJvcGVydHlJRCwgdmFsdWUpOwotICAgIC8vIElmIHRoZSBjYXNj
YWRlIGhhcyBhbHJlYWR5IGFwcGxpZWQgdGhpcyBpZCwgdGhlbiB3ZSBkZXRlY3RlZCBhIGN5Y2xl
LCBhbmQgdGhpcyB2YWx1ZSBzaG91bGQgYmUgdW5zZXQuCi0gICAgaWYgKCF2YXJpYWJsZVZhbHVl
IHx8IGJ1aWxkZXJTdGF0ZSgpLm1fYXBwbGllZFByb3BlcnRpZXMuZ2V0KHByb3BlcnR5SUQpKSB7
Ci0gICAgICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShwcm9wZXJ0eUlE
KSkKLSAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlu
aGVyaXRlZFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUV4cGxpY2l0SW5pdGlhbFZhbHVlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICp2YXJp
YWJsZVZhbHVlOwotfQotCi1SZWZQdHI8Q1NTVmFsdWU+IFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2
ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCi17Ci0gICAgQ1NTUGFyc2VyIHBhcnNlcihidWlsZGVyU3RhdGUoKS5kb2N1bWVudCgpKTsK
LSAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKHByb3BJ
RCwgdmFsdWUsIGJ1aWxkZXJTdGF0ZSgpKTsKLX0KLQotdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnJl
c29sdmVEaXJlY3Rpb25BbmRXcml0aW5nTW9kZSgpCi17Ci0gICAgYXV0byYgc3R5bGUgPSBidWls
ZGVyU3RhdGUoKS5zdHlsZSgpOwotCi0gICAgbV9kaXJlY3Rpb24gPSBzdHlsZS5kaXJlY3Rpb24o
KTsKLSAgICBtX3dyaXRpbmdNb2RlID0gc3R5bGUud3JpdGluZ01vZGUoKTsKKyAgICBEaXJlY3Rp
b24gcmVzdWx0ID0gaW5oZXJpdGVkRGlyZWN0aW9uOwogCiAgICAgYm9vbCBoYWRJbXBvcnRhbnRX
cml0aW5nTW9kZSA9IGZhbHNlOwogICAgIGJvb2wgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gZmFs
c2U7CkBAIC02NjgsMTMgKzQxMSwxMyBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZURp
cmVjdGlvbkFuZFdyaXRpbmdNb2RlKCkKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5
LmlkKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V3JpdGluZ01vZGU6CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghaGFkSW1wb3J0YW50V3JpdGluZ01vZGUgfHwgcHJvcGVy
dHkuaXNJbXBvcnRhbnQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV93cml0aW5nTW9k
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqcHJvcGVydHkudmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQud3JpdGluZ01vZGUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aGFkSW1wb3J0YW50V3JpdGluZ01vZGUgPSBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
aGFkSW1wb3J0YW50RGlyZWN0aW9uIHx8IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZGlyZWN0aW9uID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC50
ZXh0RGlyZWN0aW9uID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGhhZEltcG9ydGFudERpcmVjdGlvbiA9IHBy
b3BlcnR5LmlzSW1wb3J0YW50KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC02ODQsNiArNDI3LDggQEAgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6
OnJlc29sdmVEaXJlY3Rpb25BbmRXcml0aW5nTW9kZSgpCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1Byb3BlcnR5Q2FzY2FkZS5oCmluZGV4IDlmNTVjZmZiYzU1Li41NDhjOWRlMzc1MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmgKQEAgLTQwLDcgKzQwLDEzIEBAIGNsYXNz
IFByb3BlcnR5Q2FzY2FkZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgZW51bSBJbmNsdWRlZFByb3BlcnRpZXMgeyBBbGwsIEluaGVyaXRlZE9ubHkgfTsKLSAg
ICBQcm9wZXJ0eUNhc2NhZGUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgT3B0
aW9uU2V0PENhc2NhZGVMZXZlbD4sIEluY2x1ZGVkUHJvcGVydGllcyA9IEluY2x1ZGVkUHJvcGVy
dGllczo6QWxsKTsKKworICAgIHN0cnVjdCBEaXJlY3Rpb24geworICAgICAgICBUZXh0RGlyZWN0
aW9uIHRleHREaXJlY3Rpb247CisgICAgICAgIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlOworICAg
IH07CisKKyAgICBQcm9wZXJ0eUNhc2NhZGUoY29uc3QgTWF0Y2hSZXN1bHQmLCBPcHRpb25TZXQ8
Q2FzY2FkZUxldmVsPiwgSW5jbHVkZWRQcm9wZXJ0aWVzLCBEaXJlY3Rpb24pOwogICAgIFByb3Bl
cnR5Q2FzY2FkZShjb25zdCBQcm9wZXJ0eUNhc2NhZGUmLCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVs
Pik7CiAKICAgICB+UHJvcGVydHlDYXNjYWRlKCk7CkBAIC01OCwxMyArNjQsMTIgQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzQ3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAg
UHJvcGVydHkgY3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKLSAgICB2b2lk
IGFwcGx5UHJvcGVydGllcyhpbnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSk7Ci0g
ICAgdm9pZCBhcHBseURlZmVycmVkUHJvcGVydGllcygpOwotICAgIHZvaWQgYXBwbHlDdXN0b21Q
cm9wZXJ0aWVzKCk7Ci0gICAgdm9pZCBhcHBseUN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYg
bmFtZSk7Ci0gICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwg
U2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERl
ZmF1bHQpOworICAgIGNvbnN0IFZlY3RvcjxQcm9wZXJ0eSwgOD4mIGRlZmVycmVkUHJvcGVydGll
cygpIGNvbnN0IHsgcmV0dXJuIG1fZGVmZXJyZWRQcm9wZXJ0aWVzOyB9CisgICAgY29uc3QgSGFz
aE1hcDxBdG9tU3RyaW5nLCBQcm9wZXJ0eT4mIGN1c3RvbVByb3BlcnRpZXMoKSBjb25zdCB7IHJl
dHVybiBtX2N1c3RvbVByb3BlcnRpZXM7IH0KIAotICAgIEJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlKCkgeyByZXR1cm4gKm1fYnVpbGRlclN0YXRlOyB9CisgICAgRGlyZWN0aW9uIGRpcmVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0aW9uOyB9CisKKyAgICBjb25zdCBQcm9wZXJ0eUNh
c2NhZGUqIHByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrKENhc2NhZGVMZXZlbCkgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBidWlsZENhc2NhZGUoT3B0aW9uU2V0PENhc2NhZGVMZXZlbD4p
OwpAQCAtNzYsMjMgKzgxLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXREZWZlcnJlZChDU1NQ
cm9wZXJ0eUlELCBDU1NWYWx1ZSYsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZl
bCwgU2NvcGVPcmRpbmFsKTsKICAgICBzdGF0aWMgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKFBy
b3BlcnR5JiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBl
LCBDYXNjYWRlTGV2ZWwsIFNjb3BlT3JkaW5hbCk7CiAKLSAgICBjb25zdCBQcm9wZXJ0eUNhc2Nh
ZGUqIHByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrKENhc2NhZGVMZXZlbCk7Ci0KLSAgICBlbnVt
IEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyB7IEVuYWJsZWQgPSAwLCBEaXNhYmxlZCB9Owot
ICAgIHRlbXBsYXRlPEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyB0cmFja0N5Y2xlcz4KLSAg
ICB2b2lkIGFwcGx5UHJvcGVydGllc0ltcGwoaW50IGZpcnN0UHJvcGVydHksIGludCBsYXN0UHJv
cGVydHkpOwotICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShjb25zdCBQcm9wZXJ0eSYpOwotCi0gICAg
UmVmPENTU1ZhbHVlPiByZXNvbHZlVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmKTsKLSAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUlELCBj
b25zdCBDU1NWYWx1ZSYpOwotCi0gICAgdm9pZCByZXNvbHZlRGlyZWN0aW9uQW5kV3JpdGluZ01v
ZGUoKTsKKyAgICBEaXJlY3Rpb24gcmVzb2x2ZURpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKERpcmVj
dGlvbiBpbmhlcml0ZWREaXJlY3Rpb24pIGNvbnN0OwogCiAgICAgY29uc3QgTWF0Y2hSZXN1bHQm
IG1fbWF0Y2hSZXN1bHQ7CiAgICAgY29uc3QgSW5jbHVkZWRQcm9wZXJ0aWVzIG1faW5jbHVkZWRQ
cm9wZXJ0aWVzOwotCi0gICAgVGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKLSAgICBXcml0aW5n
TW9kZSBtX3dyaXRpbmdNb2RlOworICAgIGNvbnN0IERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIAog
ICAgIFByb3BlcnR5IG1fcHJvcGVydGllc1tudW1DU1NQcm9wZXJ0aWVzICsgMl07CiAgICAgc3Rk
OjpiaXRzZXQ8bnVtQ1NTUHJvcGVydGllcyArIDI+IG1fcHJvcGVydHlJc1ByZXNlbnQ7CkBAIC0x
MDAsMTAgKzkzLDggQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UHJvcGVydHksIDg+IG1fZGVmZXJy
ZWRQcm9wZXJ0aWVzOwogICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUHJvcGVydHk+IG1fY3VzdG9t
UHJvcGVydGllczsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBQcm9wZXJ0eUNhc2NhZGU+
IG1fYXV0aG9yUm9sbGJhY2tDYXNjYWRlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBQcm9w
ZXJ0eUNhc2NhZGU+IG1fdXNlclJvbGxiYWNrQ2FzY2FkZTsKLQotICAgIE9wdGlvbmFsPEJ1aWxk
ZXJTdGF0ZT4gbV9idWlsZGVyU3RhdGU7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8Y29u
c3QgUHJvcGVydHlDYXNjYWRlPiBtX2F1dGhvclJvbGxiYWNrQ2FzY2FkZTsKKyAgICBtdXRhYmxl
IHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBQcm9wZXJ0eUNhc2NhZGU+IG1fdXNlclJvbGxiYWNrQ2Fz
Y2FkZTsKIH07CiAKIGlubGluZSBib29sIFByb3BlcnR5Q2FzY2FkZTo6aGFzUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45YzcxMDdhNjJkZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5jcHAKQEAgLTAs
MCArMSwzNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNl
biAoa2RlQGNhcmV3b2xmLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xh
cyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNS0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJv
cmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU3R5bGVCdWlsZGVyLmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNs
dWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlQnVpbGRlckdlbmVyYXRlZC5oIgorI2lu
Y2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
bmFtZXNwYWNlIFN0eWxlIHsKKworc3RhdGljIGNvbnN0IENTU1Byb3BlcnR5SUQgZmlyc3RMb3dQ
cmlvcml0eVByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4obGFzdEhpZ2hQcmlv
cml0eVByb3BlcnR5ICsgMSk7CisKK3N0YXRpYyBQcm9wZXJ0eUNhc2NhZGU6OkRpcmVjdGlvbiBk
aXJlY3Rpb25Gcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIHJldHVy
biB7IHN0eWxlLmRpcmVjdGlvbigpLCBzdHlsZS53cml0aW5nTW9kZSgpIH07Cit9CisKK0J1aWxk
ZXI6OkJ1aWxkZXIoU3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IE1hdGNoUmVzdWx0JiBt
YXRjaFJlc3VsdCwgT3B0aW9uU2V0PENhc2NhZGVMZXZlbD4gY2FzY2FkZUxldmVscywgUHJvcGVy
dHlDYXNjYWRlOjpJbmNsdWRlZFByb3BlcnRpZXMgaW5jbHVkZWRQcm9wZXJ0aWVzKQorICAgIDog
bV9jYXNjYWRlKG1hdGNoUmVzdWx0LCBjYXNjYWRlTGV2ZWxzLCBpbmNsdWRlZFByb3BlcnRpZXMs
IGRpcmVjdGlvbkZyb21TdHlsZSgqcmVzb2x2ZXIuc3R5bGUoKSkpCisgICAgLCBtX3N0YXRlKCp0
aGlzLCByZXNvbHZlcikKK3sKK30KKworQnVpbGRlcjo6fkJ1aWxkZXIoKSA9IGRlZmF1bHQ7CisK
K3ZvaWQgQnVpbGRlcjo6YXBwbHlBbGxQcm9wZXJ0aWVzKCkKK3sKKyAgICBhcHBseUhpZ2hQcmlv
cml0eVByb3BlcnRpZXMoKTsKKyAgICBhcHBseUxvd1ByaW9yaXR5UHJvcGVydGllcygpOworfQor
CisvLyBIaWdoIHByaW9yaXR5IHByb3BlcnRpZXMgbWF5IGFmZmVjdCByZXNvbHV0aW9uIG9mIG90
aGVyIHByb3BlcnRpZXMgKHRoZXkgYXJlIG1vc3RseSBmb250IHJlbGF0ZWQpLgordm9pZCBCdWls
ZGVyOjphcHBseUhpZ2hQcmlvcml0eVByb3BlcnRpZXMoKQoreworICAgIGFwcGx5UHJvcGVydGll
cyhDU1NQcm9wZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9z
aXRpb24pOworICAgIG1fc3RhdGUuYWRqdXN0U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1YnkoKTsK
KworI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQorICAgIC8vIFN1cHBvcnRlZCBjb2xvciBzY2hl
bWVzIGNhbiBhZmZlY3QgcmVzb2x2ZWQgY29sb3JzLCBzbyB3ZSBuZWVkIHRvIGFwcGx5IHRoYXQg
cHJvcGVydHkgYmVmb3JlIGFueSBjb2xvciBwcm9wZXJ0aWVzLgorICAgIGFwcGx5UHJvcGVydGll
cyhDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lLCBDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lKTsKKyNlbmRp
ZgorCisgICAgYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3Jp
dHlQcm9wZXJ0eSk7CisKKyAgICBtX3N0YXRlLnVwZGF0ZUZvbnQoKTsKK30KKwordm9pZCBCdWls
ZGVyOjphcHBseUxvd1ByaW9yaXR5UHJvcGVydGllcygpCit7CisgICAgQVNTRVJUKCFtX3N0YXRl
LmZvbnREaXJ0eSgpKTsKKworICAgIGFwcGx5Q3VzdG9tUHJvcGVydGllcygpOworICAgIGFwcGx5
UHJvcGVydGllcyhmaXJzdExvd1ByaW9yaXR5UHJvcGVydHksIGxhc3RDU1NQcm9wZXJ0eSk7Cisg
ICAgYXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoKTsKKworICAgIEFTU0VSVCghbV9zdGF0ZS5mb250
RGlydHkoKSk7Cit9CisKK3ZvaWQgQnVpbGRlcjo6YXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWUmIHZhbHVlKQoreworICAgIGFwcGx5UHJvcGVydHko
cHJvcGVydHlJRCwgdmFsdWUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKKworICAg
IG1fc3RhdGUudXBkYXRlRm9udCgpOworfQorCit2b2lkIEJ1aWxkZXI6OmFwcGx5RGVmZXJyZWRQ
cm9wZXJ0aWVzKCkKK3sKKyAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogbV9jYXNjYWRlLmRlZmVy
cmVkUHJvcGVydGllcygpKQorICAgICAgICBhcHBseUNhc2NhZGVQcm9wZXJ0eShwcm9wZXJ0eSk7
Cit9CisKK3ZvaWQgQnVpbGRlcjo6YXBwbHlQcm9wZXJ0aWVzKGludCBmaXJzdFByb3BlcnR5LCBp
bnQgbGFzdFByb3BlcnR5KQoreworICAgIGlmIChMSUtFTFkobV9jYXNjYWRlLmN1c3RvbVByb3Bl
cnRpZXMoKS5pc0VtcHR5KCkpKQorICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0aWVzSW1wbDxD
dXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmc6OkRpc2FibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0
UHJvcGVydHkpOworCisgICAgcmV0dXJuIGFwcGx5UHJvcGVydGllc0ltcGw8Q3VzdG9tUHJvcGVy
dHlDeWNsZVRyYWNraW5nOjpFbmFibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHkpOwor
fQorCit0ZW1wbGF0ZTxCdWlsZGVyOjpDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmcgdHJhY2tD
eWNsZXM+CitpbmxpbmUgdm9pZCBCdWlsZGVyOjphcHBseVByb3BlcnRpZXNJbXBsKGludCBmaXJz
dFByb3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5KQoreworICAgIGZvciAoaW50IGlkID0gZmlyc3RQ
cm9wZXJ0eTsgaWQgPD0gbGFzdFByb3BlcnR5OyArK2lkKSB7CisgICAgICAgIENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KGlkKTsKKyAgICAgICAg
aWYgKCFtX2Nhc2NhZGUuaGFzUHJvcGVydHkocHJvcGVydHlJRCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgQVNTRVJUKHByb3BlcnR5SUQgIT0gQ1NTUHJvcGVydHlDdXN0b20pOwor
ICAgICAgICBhdXRvJiBwcm9wZXJ0eSA9IG1fY2FzY2FkZS5wcm9wZXJ0eShwcm9wZXJ0eUlEKTsK
KworICAgICAgICBpZiAodHJhY2tDeWNsZXMgPT0gQ3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5n
OjpFbmFibGVkKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9zdGF0ZS5tX2luUHJvZ3Jl
c3NQcm9wZXJ0aWVzLmdldChwcm9wZXJ0eUlEKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBh
cmUgaW4gYSBjeWNsZSAoZWcuIHNldHRpbmcgZm9udCBzaXplIHVzaW5nIHJlZ2lzdGVyZWQgY3Vz
dG9tIHByb3BlcnR5IHZhbHVlIGNvbnRhaW5pbmcgZW0pLgorICAgICAgICAgICAgICAgIC8vIFNv
IHRoaXMgdmFsdWUgc2hvdWxkIGJlIHVuc2V0LgorICAgICAgICAgICAgICAgIG1fc3RhdGUubV9h
cHBsaWVkUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCk7CisgICAgICAgICAgICAgICAgLy8gVGhp
cyBwcm9wZXJ0eSBpcyBpbiBhIGN5Y2xlLCBhbmQgb25seSB0aGUgcm9vdCBvZiB0aGUgY2FsbCBz
dGFjayB3aWxsIGhhdmUgZmlyc3RQcm9wZXJ0eSAhPSBsYXN0UHJvcGVydHkuCisgICAgICAgICAg
ICAgICAgQVNTRVJUKGZpcnN0UHJvcGVydHkgPT0gbGFzdFByb3BlcnR5KTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fc3RhdGUubV9pblBy
b2dyZXNzUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCk7CisgICAgICAgICAgICBhcHBseUNhc2Nh
ZGVQcm9wZXJ0eShwcm9wZXJ0eSk7CisgICAgICAgICAgICBtX3N0YXRlLm1fYXBwbGllZFByb3Bl
cnRpZXMuc2V0KHByb3BlcnR5SUQpOworICAgICAgICAgICAgbV9zdGF0ZS5tX2luUHJvZ3Jlc3NQ
cm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlELCBmYWxzZSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IGN1c3RvbSBwcm9w
ZXJ0aWVzLCB0aGVuIHRoZXJlIGNhbid0IGJlIGFueSBjeWNsZXMuCisgICAgICAgIGFwcGx5Q2Fz
Y2FkZVByb3BlcnR5KHByb3BlcnR5KTsKKyAgICB9Cit9CisKK3ZvaWQgQnVpbGRlcjo6YXBwbHlD
dXN0b21Qcm9wZXJ0aWVzKCkKK3sKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2Nhc2NhZGUuY3Vz
dG9tUHJvcGVydGllcygpLmtleXMoKSkKKyAgICAgICAgYXBwbHlDdXN0b21Qcm9wZXJ0eShuYW1l
KTsKK30KKwordm9pZCBCdWlsZGVyOjphcHBseUN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBpZiAobV9zdGF0ZS5tX2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmNvbnRh
aW5zKG5hbWUpIHx8ICFtX2Nhc2NhZGUuY3VzdG9tUHJvcGVydGllcygpLmNvbnRhaW5zKG5hbWUp
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHByb3BlcnR5ID0gbV9jYXNjYWRlLmN1c3Rv
bVByb3BlcnR5KG5hbWUpOworICAgIGJvb2wgaW5DeWNsZSA9IG1fc3RhdGUubV9pblByb2dyZXNz
UHJvcGVydGllc0N1c3RvbS5jb250YWlucyhuYW1lKTsKKworICAgIGZvciAoYXV0byBpbmRleCA6
IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hM
aW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7CisgICAgICAgIGlmICghcHJv
cGVydHkuY3NzVmFsdWVbaW5kZXhdKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
IChpbmRleCAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiBtX3N0YXRlLnN0eWxl
KCkuaW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiB2YWx1ZVRvQXBw
bHkgPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTQ3VzdG9tUHJv
cGVydHlWYWx1ZT4oKnByb3BlcnR5LmNzc1ZhbHVlW2luZGV4XSkpOworCisgICAgICAgIGlmIChp
bkN5Y2xlKSB7CisgICAgICAgICAgICBtX3N0YXRlLm1fYXBwbGllZEN1c3RvbVByb3BlcnRpZXMu
YWRkKG5hbWUpOyAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IHRyeSB0byBhcHBseSB0aGlzIHByb3Bl
cnR5IGFnYWluIHdoaWxlIHJlc29sdmluZyBpdC4KKyAgICAgICAgICAgIHZhbHVlVG9BcHBseSA9
IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZVdpdGhJRChuYW1lLCBDU1NWYWx1ZUludmFs
aWQpOworICAgICAgICB9CisKKyAgICAgICAgbV9zdGF0ZS5tX2luUHJvZ3Jlc3NQcm9wZXJ0aWVz
Q3VzdG9tLmFkZChuYW1lKTsKKworICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KHZhbHVlVG9BcHBseS0+dmFsdWUoKSkpIHsK
KyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWUgPSByZXNvbHZlZFZhcmlh
YmxlVmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSk7CisKKyAgICAg
ICAgICAgIGlmIChtX3N0YXRlLm1fYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFt
ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBUaGVyZSB3YXMgYSBjeWNsZSBhbmQgdGhl
IHZhbHVlIHdhcyByZXNldCwgc28gYmFpbC4KKworICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1
ZSkKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6
OmNyZWF0ZVdpdGhJRChuYW1lLCBDU1NWYWx1ZVVuc2V0KTsKKworICAgICAgICAgICAgdmFsdWVU
b0FwcGx5ID0gZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnBhcnNlZFZhbHVlKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3N0YXRlLm1faW5Qcm9ncmVzc1Byb3BlcnRpZXND
dXN0b20uY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgICAgIG1fc3RhdGUubV9saW5rTWF0Y2gg
PSBpbmRleDsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlDdXN0b20sIHZh
bHVlVG9BcHBseS5nZXQoKSwgaW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9zdGF0
ZS5tX2xpbmtNYXRjaCA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0OworICAgIG1fc3Rh
dGUubV9pblByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5yZW1vdmUobmFtZSk7CisgICAgbV9zdGF0
ZS5tX2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsKKworICAgIGZvciAoYXV0byBp
bmRleCA6IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hMaW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7CisgICAgICAgIGlm
ICghcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmIChpbmRleCAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiBtX3N0YXRl
LnN0eWxlKCkuaW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiB2YWx1
ZVRvQXBwbHkgPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTQ3Vz
dG9tUHJvcGVydHlWYWx1ZT4oKnByb3BlcnR5LmNzc1ZhbHVlW2luZGV4XSkpOworCisgICAgICAg
IGlmIChpbkN5Y2xlICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPENTU1ZhcmlhYmxlUmVm
ZXJlbmNlVmFsdWU+Pih2YWx1ZVRvQXBwbHktPnZhbHVlKCkpKSB7CisgICAgICAgICAgICAvLyBS
ZXNvbHZlIHRoaXMgdmFsdWUgc28gdGhhdCB3ZSByZXNldCBpdHMgZGVwZW5kZW5jaWVzLgorICAg
ICAgICAgICAgcmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5Q3VzdG9tLCB2YWx1ZVRv
QXBwbHkuZ2V0KCkpOworICAgICAgICB9CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBCdWlsZGVy
OjphcHBseUNhc2NhZGVQcm9wZXJ0eShjb25zdCBQcm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5JiBw
cm9wZXJ0eSkKK3sKKyAgICBtX3N0YXRlLm1fY2FzY2FkZUxldmVsID0gcHJvcGVydHkubGV2ZWw7
CisgICAgbV9zdGF0ZS5tX3N0eWxlU2NvcGVPcmRpbmFsID0gcHJvcGVydHkuc3R5bGVTY29wZU9y
ZGluYWw7CisKKyAgICBhdXRvIGFwcGx5V2l0aExpbmtNYXRjaCA9IFsmXShTZWxlY3RvckNoZWNr
ZXI6OkxpbmtNYXRjaE1hc2sgbGlua01hdGNoKSB7CisgICAgICAgIGlmIChwcm9wZXJ0eS5jc3NW
YWx1ZVtsaW5rTWF0Y2hdKSB7CisgICAgICAgICAgICBtX3N0YXRlLm1fbGlua01hdGNoID0gbGlu
a01hdGNoOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnByb3BlcnR5
LmNzc1ZhbHVlW2xpbmtNYXRjaF0sIGxpbmtNYXRjaCk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKKwor
ICAgIGlmIChtX3N0YXRlLnN0eWxlKCkuaW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdElu
c2lkZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hMaW5rKTsKKyAgICBhcHBseVdpdGhMaW5rTWF0Y2goU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaFZpc2l0ZWQpOworCisgICAgbV9zdGF0ZS5tX2xpbmtNYXRjaCA9IFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hEZWZhdWx0OworfQorCit2b2lkIEJ1aWxkZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUmIHZhbHVlLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtN
YXRjaE1hc2sgbGlua01hdGNoTWFzaykKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFpc1No
b3J0aGFuZENTU1Byb3BlcnR5KGlkKSwgIlNob3J0aGFuZCBwcm9wZXJ0eSBpZCA9ICVkIHdhc24n
dCBleHBhbmRlZCBhdCBwYXJzaW5nIHRpbWUiLCBpZCk7CisKKyAgICBhdXRvIHZhbHVlVG9BcHBs
eSA9IHJlc29sdmVWYWx1ZShpZCwgdmFsdWUpOworCisgICAgaWYgKENTU1Byb3BlcnR5Ojppc0Rp
cmVjdGlvbkF3YXJlUHJvcGVydHkoaWQpKSB7CisgICAgICAgIGF1dG8gZGlyZWN0aW9uID0gbV9j
YXNjYWRlLmRpcmVjdGlvbigpOworICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJv
cGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBkaXJlY3Rpb24udGV4dERp
cmVjdGlvbiwgZGlyZWN0aW9uLndyaXRpbmdNb2RlKTsKKyAgICAgICAgQVNTRVJUKG5ld0lkICE9
IGlkKTsKKyAgICAgICAgcmV0dXJuIGFwcGx5UHJvcGVydHkobmV3SWQsIHZhbHVlVG9BcHBseS5n
ZXQoKSwgbGlua01hdGNoTWFzayk7CisgICAgfQorCisgICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1
ZSogY3VzdG9tUHJvcGVydHlWYWx1ZSA9IG51bGxwdHI7CisgICAgQ1NTVmFsdWVJRCBjdXN0b21Q
cm9wZXJ0eVZhbHVlSUQgPSBDU1NWYWx1ZUludmFsaWQ7CisgICAgQ1NTUmVnaXN0ZXJlZEN1c3Rv
bVByb3BlcnR5KiBjdXN0b21Qcm9wZXJ0eVJlZ2lzdGVyZWQgPSBudWxscHRyOworCisgICAgaWYg
KGlkID09IENTU1Byb3BlcnR5Q3VzdG9tKSB7CisgICAgICAgIGN1c3RvbVByb3BlcnR5VmFsdWUg
PSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPih2YWx1ZVRvQXBwbHkucHRyKCkpOwor
ICAgICAgICBBU1NFUlQoY3VzdG9tUHJvcGVydHlWYWx1ZS0+aXNSZXNvbHZlZCgpKTsKKyAgICAg
ICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q1NTVmFsdWVJRD4oY3VzdG9tUHJvcGVydHlW
YWx1ZS0+dmFsdWUoKSkpCisgICAgICAgICAgICBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPSBXVEY6
OmdldDxDU1NWYWx1ZUlEPihjdXN0b21Qcm9wZXJ0eVZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAg
YXV0byYgbmFtZSA9IGN1c3RvbVByb3BlcnR5VmFsdWUtPm5hbWUoKTsKKyAgICAgICAgY3VzdG9t
UHJvcGVydHlSZWdpc3RlcmVkID0gbV9zdGF0ZS5kb2N1bWVudCgpLmdldENTU1JlZ2lzdGVyZWRD
dXN0b21Qcm9wZXJ0eVNldCgpLmdldChuYW1lKTsKKyAgICB9CisKKyAgICBib29sIGlzSW5oZXJp
dCA9IHZhbHVlVG9BcHBseS0+aXNJbmhlcml0ZWRWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFs
dWVJRCA9PSBDU1NWYWx1ZUluaGVyaXQ7CisgICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZVRvQXBw
bHktPmlzSW5pdGlhbFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09IENTU1ZhbHVl
SW5pdGlhbDsKKworICAgIGJvb2wgaXNVbnNldCA9IHZhbHVlVG9BcHBseS0+aXNVbnNldFZhbHVl
KCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09IENTU1ZhbHVlVW5zZXQ7CisgICAgYm9vbCBp
c1JldmVydCA9IHZhbHVlVG9BcHBseS0+aXNSZXZlcnRWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5
VmFsdWVJRCA9PSBDU1NWYWx1ZVJldmVydDsKKworICAgIGlmIChpc1JldmVydCkgeworICAgICAg
ICBpZiAoYXV0byogcm9sbGJhY2sgPSBtX2Nhc2NhZGUucHJvcGVydHlDYXNjYWRlRm9yUm9sbGJh
Y2sobV9zdGF0ZS5tX2Nhc2NhZGVMZXZlbCkpIHsKKyAgICAgICAgICAgIC8vIFdpdGggdGhlIHJv
bGxiYWNrIGNhc2NhZGUgYnVpbHQsIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBwcm9wZXJ0eSBhbmQg
YXBwbHkgaXQuIElmIHRoZSBwcm9wZXJ0eSBpcworICAgICAgICAgICAgLy8gbm90IHByZXNlbnQs
IHRoZW4gd2UgYmVoYXZlIGxpa2UgInVuc2V0LiIgT3RoZXJ3aXNlIHdlIGFwcGx5IHRoZSBwcm9w
ZXJ0eSBpbnN0ZWFkIG9mCisgICAgICAgICAgICAvLyBvdXIgb3duLgorICAgICAgICAgICAgaWYg
KGN1c3RvbVByb3BlcnR5VmFsdWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VzdG9tUHJvcGVy
dHlSZWdpc3RlcmVkICYmIGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJlZC0+aW5oZXJpdHMgJiYgcm9s
bGJhY2stPmhhc0N1c3RvbVByb3BlcnR5KGN1c3RvbVByb3BlcnR5VmFsdWUtPm5hbWUoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBwcm9wZXJ0eSA9IHJvbGxiYWNrLT5jdXN0b21Qcm9w
ZXJ0eShjdXN0b21Qcm9wZXJ0eVZhbHVlLT5uYW1lKCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAocHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoTWFza10pCisgICAgICAgICAgICAgICAgICAg
ICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkLCAqcHJvcGVydHkuY3NzVmFsdWVbbGlua01h
dGNoTWFza10sIGxpbmtNYXRjaE1hc2spOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xsYmFjay0+aGFzUHJv
cGVydHkoaWQpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgcHJvcGVydHkgPSByb2xsYmFjay0+
cHJvcGVydHkoaWQpOworICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5jc3NWYWx1ZVtsaW5r
TWF0Y2hNYXNrXSkKKyAgICAgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5p
ZCwgKnByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2tdLCBsaW5rTWF0Y2hNYXNrKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpc1Vuc2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaXNVbnNldCkgeworICAgICAgICBp
ZiAoQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQorICAgICAgICAgICAgaXNJ
bmhlcml0ID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXNJbml0aWFsID0gdHJ1
ZTsKKyAgICB9CisKKyAgICBBU1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJbml0aWFsKTsgLy8gaXNJ
bmhlcml0IC0+ICFpc0luaXRpYWwgJiYgaXNJbml0aWFsIC0+ICFpc0luaGVyaXQKKworICAgIGlm
IChtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSAmJiAhaXNWYWxpZFZp
c2l0ZWRMaW5rUHJvcGVydHkoaWQpKSB7CisgICAgICAgIC8vIExpbWl0IHRoZSBwcm9wZXJ0aWVz
IHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBob25vcmVkIGJ5IDp2aXNpdGVk
LgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzSW5oZXJpdCAmJiAhQ1NTUHJv
cGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQorICAgICAgICBtX3N0YXRlLnN0eWxlKCku
c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRpZXMoKTsKKworI2lmIEVOQUJMRShDU1Nf
UEFJTlRJTkdfQVBJKQorICAgIGlmIChpczxDU1NQYWludEltYWdlVmFsdWU+KHZhbHVlVG9BcHBs
eSkpIHsKKyAgICAgICAgYXV0byYgbmFtZSA9IGRvd25jYXN0PENTU1BhaW50SW1hZ2VWYWx1ZT4o
dmFsdWVUb0FwcGx5LmdldCgpKS5uYW1lKCk7CisgICAgICAgIGlmIChhdXRvKiBwYWludFdvcmts
ZXQgPSBjb25zdF9jYXN0PERvY3VtZW50Jj4obV9zdGF0ZS5kb2N1bWVudCgpKS5wYWludFdvcmts
ZXRHbG9iYWxTY29wZUZvck5hbWUobmFtZSkpIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2socGFpbnRXb3JrbGV0LT5wYWludERlZmluaXRpb25Mb2NrKCkpOworICAgICAgICAg
ICAgaWYgKGF1dG8qIHJlZ2lzdHJhdGlvbiA9IHBhaW50V29ya2xldC0+cGFpbnREZWZpbml0aW9u
TWFwKCkuZ2V0KG5hbWUpKSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6
IHJlZ2lzdHJhdGlvbi0+aW5wdXRQcm9wZXJ0aWVzKQorICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLnN0eWxlKCkuYWRkQ3VzdG9tUGFpbnRXYXRjaFByb3BlcnR5KHByb3BlcnR5KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgQnVpbGRlckdlbmVyYXRl
ZDo6YXBwbHlQcm9wZXJ0eShpZCwgbV9zdGF0ZSwgdmFsdWVUb0FwcGx5LmdldCgpLCBpc0luaXRp
YWwsIGlzSW5oZXJpdCwgY3VzdG9tUHJvcGVydHlSZWdpc3RlcmVkKTsKK30KKworUmVmPENTU1Zh
bHVlPiBCdWlsZGVyOjpyZXNvbHZlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBDU1NW
YWx1ZSYgdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZS5oYXNWYXJpYWJsZVJlZmVyZW5jZXMoKSkK
KyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgYXV0byB2YXJpYWJsZVZhbHVlID0gcmVzb2x2
ZWRWYXJpYWJsZVZhbHVlKHByb3BlcnR5SUQsIHZhbHVlKTsKKyAgICAvLyBJZiB0aGUgY2FzY2Fk
ZSBoYXMgYWxyZWFkeSBhcHBsaWVkIHRoaXMgaWQsIHRoZW4gd2UgZGV0ZWN0ZWQgYSBjeWNsZSwg
YW5kIHRoaXMgdmFsdWUgc2hvdWxkIGJlIHVuc2V0LgorICAgIGlmICghdmFyaWFibGVWYWx1ZSB8
fCBtX3N0YXRlLm1fYXBwbGllZFByb3BlcnRpZXMuZ2V0KHByb3BlcnR5SUQpKSB7CisgICAgICAg
IGlmIChDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKKyAgICAg
ICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUluaGVyaXRlZFZh
bHVlKCk7CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUV4
cGxpY2l0SW5pdGlhbFZhbHVlKCk7CisgICAgfQorCisgICAgcmV0dXJuICp2YXJpYWJsZVZhbHVl
OworfQorCitSZWZQdHI8Q1NTVmFsdWU+IEJ1aWxkZXI6OnJlc29sdmVkVmFyaWFibGVWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoreworICAgIENTU1Bh
cnNlciBwYXJzZXIobV9zdGF0ZS5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gcGFyc2VyLnBhcnNl
VmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKHByb3BJRCwgdmFsdWUsIG1fc3RhdGUpOworfQor
Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi45ZmMwODBiZDIyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlByb3BlcnR5Q2FzY2FkZS5oIgorI2luY2x1
ZGUgIlN0eWxlQnVpbGRlclN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIFN0eWxlIHsKKworY2xhc3MgQnVpbGRlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgQnVpbGRlcihTdHlsZVJlc29sdmVyJiwgY29uc3QgTWF0Y2hSZXN1
bHQmLCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiwgUHJvcGVydHlDYXNjYWRlOjpJbmNsdWRlZFBy
b3BlcnRpZXMgPSBQcm9wZXJ0eUNhc2NhZGU6OkluY2x1ZGVkUHJvcGVydGllczo6QWxsKTsKKyAg
ICB+QnVpbGRlcigpOworCisgICAgdm9pZCBhcHBseUFsbFByb3BlcnRpZXMoKTsKKyAgICB2b2lk
IGFwcGx5SGlnaFByaW9yaXR5UHJvcGVydGllcygpOworICAgIHZvaWQgYXBwbHlMb3dQcmlvcml0
eVByb3BlcnRpZXMoKTsKKworICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQpIHsgYXBwbHlQcm9wZXJ0aWVzKHByb3BlcnR5SUQsIHByb3BlcnR5SUQpOyB9Cisg
ICAgdm9pZCBhcHBseUN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICB2
b2lkIGFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYpOworCisgICAg
QnVpbGRlclN0YXRlJiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGU7IH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIGFwcGx5UHJvcGVydGllcyhpbnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0
eSk7CisgICAgdm9pZCBhcHBseURlZmVycmVkUHJvcGVydGllcygpOworICAgIHZvaWQgYXBwbHlD
dXN0b21Qcm9wZXJ0aWVzKCk7CisKKyAgICBlbnVtIEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2lu
ZyB7IEVuYWJsZWQgPSAwLCBEaXNhYmxlZCB9OworICAgIHRlbXBsYXRlPEN1c3RvbVByb3BlcnR5
Q3ljbGVUcmFja2luZyB0cmFja0N5Y2xlcz4KKyAgICB2b2lkIGFwcGx5UHJvcGVydGllc0ltcGwo
aW50IGZpcnN0UHJvcGVydHksIGludCBsYXN0UHJvcGVydHkpOworICAgIHZvaWQgYXBwbHlDYXNj
YWRlUHJvcGVydHkoY29uc3QgUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eSYpOworICAgIHZvaWQg
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYsIFNlbGVjdG9yQ2hlY2tlcjo6
TGlua01hdGNoTWFzayk7CisKKyAgICBSZWY8Q1NTVmFsdWU+IHJlc29sdmVWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBDU1NWYWx1ZSYpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmVzb2x2ZWRWYXJpYWJs
ZVZhbHVlKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhbHVlJik7CisKKyAgICBjb25zdCBQcm9w
ZXJ0eUNhc2NhZGUgbV9jYXNjYWRlOworICAgIEJ1aWxkZXJTdGF0ZSBtX3N0YXRlOworfTsKKwor
fQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9t
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAppbmRleCA5MDRj
ZDAzNDcyMi4uZWQwOTc2YjlhMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQnVpbGRlckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
ckN1c3RvbS5oCkBAIC0xNjEyLDcgKzE2MTIsOCBAQCBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlRm9udFNpemUoQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbAog
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0
ZVNpemUgfHwgIShwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1
ZS5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5p
c0xlbmd0aCgpKSB7CiAgICAgICAgICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxl
bmd0aDxmbG9hdD4oQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgmYnVpbGRlclN0YXRlLnBhcmVu
dFN0eWxlKCksICZidWlsZGVyU3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBidWlsZGVyU3RhdGUu
ZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCksIDEuMGYsIHRydWUpKTsKLSAgICAgICAgICAgIGJ1aWxk
ZXJTdGF0ZS5zdHlsZVJlc29sdmVyKCkuc3RhdGUoKS5zZXRGb250U2l6ZUhhc1ZpZXdwb3J0VW5p
dHMocHJpbWl0aXZlVmFsdWUuaXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7CisgICAgICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKKyAg
ICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7
CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpCiAgICAg
ICAgICAgICBzaXplID0gKHByaW1pdGl2ZVZhbHVlLmZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUp
IC8gMTAwLjBmOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc0NhbGN1bGF0ZWRQ
ZXJjZW50YWdlV2l0aExlbmd0aCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxk
ZXJTdGF0ZS5jcHAKaW5kZXggMTg0MWQyN2NkZjAuLjkzNTZkZjExOGQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCkBAIC0xLDM4ICsxLDQ1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJp
Z2h0IChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29t
KQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5p
Y2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFr
b3YgPGFwQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlk
ZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBN
b2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vKQorICogQ29weXJpZ2h0IChjKSAyMDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQg
MjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEln
YWxpYSBTLkwuCiAgKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAg
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlQnVpbGRlclN0YXRlLmgi
CiAKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgor
I2luY2x1ZGUgIlN0eWxlQnVpbGRlci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFN0eWxlIHsKIAotQnVpbGRlclN0YXRlOjpC
dWlsZGVyU3RhdGUoUHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlLCBTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQotICAgIDogbV9jYXNjYWRlKGNhc2NhZGUpCitCdWlsZGVyU3RhdGU6OkJ1aWxk
ZXJTdGF0ZShCdWlsZGVyJiBidWlsZGVyLCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQor
ICAgIDogbV9idWlsZGVyKGJ1aWxkZXIpCiAgICAgLCBtX3N0eWxlTWFwKCp0aGlzKQogICAgICwg
bV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCkpCiAgICAgLCBtX3N0eWxlUmVzb2x2ZXIoc3R5bGVSZXNvbHZl
cikKQEAgLTQ2LDE0ICs1MywyMiBAQCBCdWlsZGVyU3RhdGU6OkJ1aWxkZXJTdGF0ZShQcm9wZXJ0
eUNhc2NhZGUmIGNhc2NhZGUsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZQogICAgIEFTU0VS
VChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpOwogfQogCisvLyBTVkcgaGFuZGxlcyB6b29t
aW5nIGluIGEgZGlmZmVyZW50IHdheSBjb21wYXJlZCB0byBDU1MuIFRoZSB3aG9sZSBkb2N1bWVu
dCBpcyBzY2FsZWQgaW5zdGVhZAorLy8gb2YgZWFjaCBpbmRpdmlkdWFsIGxlbmd0aCB2YWx1ZSBp
biB0aGUgcmVuZGVyIHN0eWxlIC8gdHJlZS4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5n
dGgqKCkKKy8vIG11bHRpcGxpZXMgZWFjaCByZXNvbHZlZCBsZW5ndGggd2l0aCB0aGUgem9vbSBt
dWx0aXBsaWVyIC0gc28gZm9yIFNWRyB3ZSBuZWVkIHRvIGRpc2FibGUgdGhhdC4KKy8vIFRob3Vn
aCBhbGwgQ1NTIHZhbHVlcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG91dGVybW9zdCA8c3ZnPiBl
bGVtZW50cyAod2lkdGgvaGVpZ2h0L2JvcmRlci9wYWRkaW5nLi4uKQorLy8gbmVlZCB0byByZXNw
ZWN0IHRoZSBzY2FsaW5nLiBSZW5kZXJCb3ggKHRoZSBwYXJlbnQgY2xhc3Mgb2YgUmVuZGVyU1ZH
Um9vdCkgZ3JhYnMgdmFsdWVzIGxpa2UKKy8vIHdpZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy8u
Li4gZnJvbSB0aGUgUmVuZGVyU3R5bGUgLT4gZm9yIFNWRyB0aGVzZSB2YWx1ZXMgd291bGQgbmV2
ZXIgc2NhbGUsCisvLyBpZiB3ZSdkIHBhc3MgYSAxLjAgem9vbSBmYWN0b3IgZXZlcnlod2VyZS4g
U28gd2Ugb25seSBwYXNzIGEgem9vbSBmYWN0b3Igb2YgMS4wIGZvciBzcGVjaWZpYworLy8gcHJv
cGVydGllcyB0aGF0IGFyZSBOT1QgYWxsb3dlZCB0byBzY2FsZSB3aXRoaW4gYSB6b29tZWQgU1ZH
IGRvY3VtZW50IChsZXR0ZXIvd29yZC1zcGFjaW5nL2ZvbnQtc2l6ZSkuCiBib29sIEJ1aWxkZXJT
dGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zdHlsZVJlc29s
dmVyLnVzZVNWR1pvb21SdWxlcygpOworICAgIHJldHVybiBpczxTVkdFbGVtZW50PihlbGVtZW50
KCkpOwogfQogCiBib29sIEJ1aWxkZXJTdGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLnVzZVNWR1pvb21SdWxlc0Zvckxl
bmd0aCgpOworICAgIHJldHVybiBpczxTVkdFbGVtZW50PihlbGVtZW50KCkpICYmICEoaXM8U1ZH
U1ZHRWxlbWVudD4oKmVsZW1lbnQoKSkgJiYgZWxlbWVudCgpLT5wYXJlbnROb2RlKCkpOwogfQog
CiBSZWZQdHI8U3R5bGVJbWFnZT4gQnVpbGRlclN0YXRlOjpjcmVhdGVTdHlsZUltYWdlKENTU1Zh
bHVlJiB2YWx1ZSkKQEAgLTcxLDkgKzg2LDExMSBAQCBDb2xvciBCdWlsZGVyU3RhdGU6OmNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSwgYm9vbAog
ICAgIHJldHVybiBtX3N0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUodmFsdWUs
IGZvclZpc2l0ZWRMaW5rKTsKIH0KIAotdm9pZCBCdWlsZGVyU3RhdGU6OnNldEZvbnRTaXplKEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQordm9pZCBCdWls
ZGVyU3RhdGU6OmFkanVzdFN0eWxlRm9ySW50ZXJDaGFyYWN0ZXJSdWJ5KCkKK3sKKyAgICBpZiAo
bV9zdHlsZS5ydWJ5UG9zaXRpb24oKSAhPSBSdWJ5UG9zaXRpb246OkludGVyQ2hhcmFjdGVyIHx8
ICFlbGVtZW50KCkgfHwgIWVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnJ0VGFnKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdHlsZS5zZXRUZXh0QWxpZ24oVGV4dEFsaWduTW9k
ZTo6Q2VudGVyKTsKKyAgICBpZiAobV9zdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQor
ICAgICAgICBtX3N0eWxlLnNldFdyaXRpbmdNb2RlKExlZnRUb1JpZ2h0V3JpdGluZ01vZGUpOwor
fQorCit2b2lkIEJ1aWxkZXJTdGF0ZTo6dXBkYXRlRm9udCgpCit7CisgICAgaWYgKCFtX2ZvbnRE
aXJ0eSAmJiBtX3N0eWxlLmZvbnRDYXNjYWRlKCkuZm9udHMoKSkKKyAgICAgICAgcmV0dXJuOwor
CisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKKyAgICB1cGRhdGVGb250Rm9yVGV4dFNpemVB
ZGp1c3QoKTsKKyNlbmRpZgorICAgIHVwZGF0ZUZvbnRGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKCk7
CisgICAgdXBkYXRlRm9udEZvclpvb21DaGFuZ2UoKTsKKyAgICB1cGRhdGVGb250Rm9yT3JpZW50
YXRpb25DaGFuZ2UoKTsKKworICAgIG1fc3R5bGUuZm9udENhc2NhZGUoKS51cGRhdGUoJmNvbnN0
X2Nhc3Q8RG9jdW1lbnQmPihkb2N1bWVudCgpKS5mb250U2VsZWN0b3IoKSk7CisKKyAgICBtX2Zv
bnREaXJ0eSA9IGZhbHNlOworfQorCisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKK3ZvaWQg
QnVpbGRlclN0YXRlOjp1cGRhdGVGb250Rm9yVGV4dFNpemVBZGp1c3QoKQoreworICAgIGlmICht
X3N0eWxlLnRleHRTaXplQWRqdXN0KCkuaXNBdXRvKCkKKyAgICAgICAgfHwgIWRvY3VtZW50KCku
c2V0dGluZ3MoKS50ZXh0QXV0b3NpemluZ0VuYWJsZWQoKQorICAgICAgICB8fCAoZG9jdW1lbnQo
KS5zZXR0aW5ncygpLnRleHRBdXRvc2l6aW5nVXNlc0lkZW1wb3RlbnRNb2RlKCkgJiYgIW1fc3R5
bGUudGV4dFNpemVBZGp1c3QoKS5pc05vbmUoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8gbmV3Rm9udERlc2NyaXB0aW9uID0gbV9zdHlsZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBp
ZiAoIW1fc3R5bGUudGV4dFNpemVBZGp1c3QoKS5pc05vbmUoKSkKKyAgICAgICAgbmV3Rm9udERl
c2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6
ZSgpICogbV9zdHlsZS50ZXh0U2l6ZUFkanVzdCgpLm11bHRpcGxpZXIoKSk7CisgICAgZWxzZQor
ICAgICAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlw
dGlvbi5zcGVjaWZpZWRTaXplKCkpOworCisgICAgbV9zdHlsZS5zZXRGb250RGVzY3JpcHRpb24o
V1RGTW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsKK30KKyNlbmRpZgorCit2b2lkIEJ1aWxkZXJT
dGF0ZTo6dXBkYXRlRm9udEZvclpvb21DaGFuZ2UoKQoreworICAgIGlmIChtX3N0eWxlLmVmZmVj
dGl2ZVpvb20oKSA9PSBtX3BhcmVudFN0eWxlLmVmZmVjdGl2ZVpvb20oKSAmJiBtX3N0eWxlLnRl
eHRab29tKCkgPT0gbV9wYXJlbnRTdHlsZS50ZXh0Wm9vbSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBjb25zdCBhdXRvJiBjaGlsZEZvbnQgPSBtX3N0eWxlLmZvbnREZXNjcmlwdGlvbigpOwor
ICAgIGF1dG8gbmV3Rm9udERlc2NyaXB0aW9uID0gY2hpbGRGb250OworICAgIHNldEZvbnRTaXpl
KG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSk7CisKKyAgICBt
X3N0eWxlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKG5ld0ZvbnREZXNjcmlwdGlvbikpOwor
fQorCit2b2lkIEJ1aWxkZXJTdGF0ZTo6dXBkYXRlRm9udEZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uo
KQoreworICAgIGNvbnN0IGF1dG8mIGNoaWxkRm9udCA9IG1fc3R5bGUuZm9udERlc2NyaXB0aW9u
KCk7CisKKyAgICBpZiAoY2hpbGRGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGNvbnN0IGF1dG8mIHBhcmVudEZvbnQgPSBtX3BhcmVudFN0eWxlLmZvbnREZXNj
cmlwdGlvbigpOworICAgIGlmIChjaGlsZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09IHBh
cmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBXZSBrbm93IHRoZSBwYXJlbnQgaXMgbW9ub3NwYWNlIG9yIHRoZSBjaGlsZCBpcyBtb25vc3Bh
Y2UsIGFuZCB0aGF0IGZvbnQKKyAgICAvLyBzaXplIHdhcyB1bnNwZWNpZmllZC4gV2Ugd2FudCB0
byBzY2FsZSBvdXIgZm9udCBzaXplIGFzIGFwcHJvcHJpYXRlLgorICAgIC8vIElmIHRoZSBmb250
IHVzZXMgYSBrZXl3b3JkIHNpemUsIHRoZW4gd2UgcmVmZXRjaCBmcm9tIHRoZSB0YWJsZSByYXRo
ZXIgdGhhbgorICAgIC8vIG11bHRpcGx5aW5nIGJ5IG91ciBzY2FsZSBmYWN0b3IuCisgICAgZmxv
YXQgc2l6ZSA9IFsmXSB7CisgICAgICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0g
Y2hpbGRGb250LmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpCisgICAgICAgICAgICByZXR1cm4g
U3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChzaXplSWRlbnRpZmllciwgY2hpbGRGb250LnVzZUZp
eGVkRGVmYXVsdFNpemUoKSwgZG9jdW1lbnQoKSk7CisKKyAgICAgICAgYXV0byBmaXhlZFNpemUg
PSAgZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRlZmF1bHRGaXhlZEZvbnRTaXplKCk7CisgICAgICAg
IGF1dG8gZGVmYXVsdFNpemUgPSAgZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRlZmF1bHRGb250U2l6
ZSgpOworICAgICAgICBmbG9hdCBmaXhlZFNjYWxlRmFjdG9yID0gKGZpeGVkU2l6ZSAmJiBkZWZh
dWx0U2l6ZSkgPyBzdGF0aWNfY2FzdDxmbG9hdD4oZml4ZWRTaXplKSAvIGRlZmF1bHRTaXplIDog
MTsKKyAgICAgICAgcmV0dXJuIHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID8gY2hp
bGRGb250LnNwZWNpZmllZFNpemUoKSAvIGZpeGVkU2NhbGVGYWN0b3IgOiBjaGlsZEZvbnQuc3Bl
Y2lmaWVkU2l6ZSgpICogZml4ZWRTY2FsZUZhY3RvcjsKKyAgICB9KCk7CisKKyAgICBhdXRvIG5l
d0ZvbnREZXNjcmlwdGlvbiA9IGNoaWxkRm9udDsKKyAgICBzZXRGb250U2l6ZShuZXdGb250RGVz
Y3JpcHRpb24sIHNpemUpOworICAgIG1fc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUo
bmV3Rm9udERlc2NyaXB0aW9uKSk7Cit9CisKK3ZvaWQgQnVpbGRlclN0YXRlOjp1cGRhdGVGb250
Rm9yT3JpZW50YXRpb25DaGFuZ2UoKQoreworICAgIGF1dG8gW2ZvbnRPcmllbnRhdGlvbiwgZ2x5
cGhPcmllbnRhdGlvbl0gPSBtX3N0eWxlLmZvbnRBbmRHbHlwaE9yaWVudGF0aW9uKCk7CisKKyAg
ICBjb25zdCBhdXRvJiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxlLmZvbnREZXNjcmlwdGlvbigp
OworICAgIGlmIChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBmb250T3JpZW50YXRp
b24gJiYgZm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBnbHlwaE9y
aWVudGF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlv
biA9IGZvbnREZXNjcmlwdGlvbjsKKyAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Tm9uQ0pLR2x5
cGhPcmllbnRhdGlvbihnbHlwaE9yaWVudGF0aW9uKTsKKyAgICBuZXdGb250RGVzY3JpcHRpb24u
c2V0T3JpZW50YXRpb24oZm9udE9yaWVudGF0aW9uKTsKKyAgICBtX3N0eWxlLnNldEZvbnREZXNj
cmlwdGlvbihXVEZNb3ZlKG5ld0ZvbnREZXNjcmlwdGlvbikpOworfQorCit2b2lkIEJ1aWxkZXJT
dGF0ZTo6c2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBmbG9hdCBzaXplKQogewotICAgIG1fc3R5bGVSZXNvbHZlci5zZXRGb250U2l6ZShkZXNjcmlw
dGlvbiwgc2l6ZSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7
CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250
U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNpemUsIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6
ZSgpLCB1c2VTVkdab29tUnVsZXMoKSwgJnN0eWxlKCksIGRvY3VtZW50KCkpKTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKaW5kZXggZjI3MzgxNDAxMjEu
LmU3Yjk5Y2E3NjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxk
ZXJTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgK
QEAgLTM5LDEzICszOSwxMyBAQCBjbGFzcyBTdHlsZVJlc29sdmVyOwogCiBuYW1lc3BhY2UgU3R5
bGUgewogCi1jbGFzcyBQcm9wZXJ0eUNhc2NhZGU7CitjbGFzcyBCdWlsZGVyOwogCiBjbGFzcyBC
dWlsZGVyU3RhdGUgewogcHVibGljOgotICAgIEJ1aWxkZXJTdGF0ZShQcm9wZXJ0eUNhc2NhZGUm
LCBTdHlsZVJlc29sdmVyJik7CisgICAgQnVpbGRlclN0YXRlKEJ1aWxkZXImLCBTdHlsZVJlc29s
dmVyJik7CiAKLSAgICBQcm9wZXJ0eUNhc2NhZGUmIGNhc2NhZGUoKSB7IHJldHVybiBtX2Nhc2Nh
ZGU7IH0KKyAgICBCdWlsZGVyJiBidWlsZGVyKCkgeyByZXR1cm4gbV9idWlsZGVyOyB9CiAgICAg
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcigpIHsgcmV0dXJuIG1fc3R5bGVSZXNvbHZlcjsg
fQogCiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlKCkgeyByZXR1cm4gbV9zdHlsZTsgfQpAQCAtNjQs
NyArNjQsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGZvbnREaXJ0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udERpcnR5OyB9CiAgICAgdm9pZCBzZXRGb250RGlydHkoKSB7IG1fZm9udERpcnR5ID0g
dHJ1ZTsgfQotICAgIHZvaWQgY2xlYXJGb250RGlydHkoKSB7IG1fZm9udERpcnR5ID0gZmFsc2U7
IH0KIAogICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigp
IHsgcmV0dXJuIG1fc3R5bGUuZm9udERlc2NyaXB0aW9uKCk7IH0KICAgICBjb25zdCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3BhcmVu
dFN0eWxlLmZvbnREZXNjcmlwdGlvbigpOyB9CkBAIC04NSw5ICs4NCwxOSBAQCBwdWJsaWM6CiAg
ICAgQ1NTVG9TdHlsZU1hcCYgc3R5bGVNYXAoKSB7IHJldHVybiBtX3N0eWxlTWFwOyB9CiAKIHBy
aXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFByb3BlcnR5Q2FzY2FkZTsKKyAgICBmcmllbmQgY2xh
c3MgQnVpbGRlcjsKIAotICAgIFByb3BlcnR5Q2FzY2FkZSYgbV9jYXNjYWRlOworICAgIHZvaWQg
YWRqdXN0U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1YnkoKTsKKworICAgIHZvaWQgdXBkYXRlRm9u
dCgpOworI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCisgICAgdm9pZCB1cGRhdGVGb250Rm9y
VGV4dFNpemVBZGp1c3QoKTsKKyNlbmRpZgorICAgIHZvaWQgdXBkYXRlRm9udEZvclpvb21DaGFu
Z2UoKTsKKyAgICB2b2lkIHVwZGF0ZUZvbnRGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKCk7CisgICAg
dm9pZCB1cGRhdGVGb250Rm9yT3JpZW50YXRpb25DaGFuZ2UoKTsKKworICAgIEJ1aWxkZXImIG1f
YnVpbGRlcjsKIAogICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKICAgICBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsK
</data>
<flag name="review"
          id="398213"
          type_id="1"
          status="+"
          setter="zalan"
    />
    <flag name="commit-queue"
          id="398217"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382479</attachid>
            <date>2019-10-31 11:12:34 -0700</date>
            <delta_ts>2019-10-31 11:55:42 -0700</delta_ts>
            <desc>patch</desc>
            <filename>style-builder-3.patch</filename>
            <type>text/plain</type>
            <size>82443</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmY2I0NDA3ZGE5ZS4uNTJlMGMyMDQyNTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDIgQEAKKzIwMTktMTAtMzEgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIEludHJvZHVjZSBTdHlsZTo6QnVpbGRlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNjgyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgWmFsYW4gQnVqdGFzLgorCisgICAgICAgIEVuY2Fwc3VsYXRlIHRoZSBzdHlsZSBidWlsZGlu
ZyBzdGVwIGludG8gYSBuZXcgQnVpbGRlciBjbGFzcy4gSXQgb3ducyB0aGUgY2FzY2FkZSBhbmQg
dGhlIHN0eWxlIGJ1aWxkaW5nIHN0YXRlLgorCisgICAgICAgIE1vdmUgdGhhIGFwcGx5aW5nIGNv
ZGUgZnJvbSBTdHlsZVJlc29sdmVyIGFuZCBQcm9wZXJ0eUNhc2NhZGUgdGhlcmUuCisgICAgICAg
IE1vdmUgYSBidW5jaCBvZiBmb250IHJlbGF0ZWQgc3RhdGUgZnJvbSBTdHlsZVJlc29sdmVyOjpT
dGF0ZSB0byBCdWlsZGVyU3RhdGUuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1vdXRwdXQu
eGNmaWxlbGlzdDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU1ZhcmlhYmxlUmVmZXJl
bmNlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNl
KToKKyAgICAgICAgKiBjc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5OjpyZWdpc3RlclByb3Bl
cnR5KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmFkanVzdFN0eWxlRm9ySW50ZXJDaGFyYWN0ZXJSdWJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmNoZWNrRm9yT3JpZW50YXRpb25DaGFuZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVz
Rm9yTGVuZ3RoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmNoZWNrRm9yVGV4dFNpemVBZGp1c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZSk6IERlbGV0
ZWQuCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRGb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmZvbnRTaXplSGFzVmll
d3BvcnRVbml0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpTdGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBj
c3MvcGFyc2VyL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBh
cnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyLmNwcDoKKyAgICAgICAgKiBzdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHlDYXNj
YWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6OnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpwcm9wZXJ0eUNhc2NhZGVG
b3JSb2xsYmFjayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNj
YWRlOjpyZXNvbHZlRGlyZWN0aW9uQW5kV3JpdGluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlEZWZlcnJlZFByb3BlcnRpZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQ
cm9wZXJ0aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU6OmFwcGx5UHJvcGVydGllc0ltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlDdXN0b21Qcm9wZXJ0aWVzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5Q3VzdG9tUHJv
cGVydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZTo6cHJvcGVydHlDYXNjYWRlRm9yUm9sbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpyZXNvbHZlVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZWRW
YXJpYWJsZVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0
eUNhc2NhZGU6OnJlc29sdmVEaXJlY3Rpb25BbmRXcml0aW5nTW9kZSk6IERlbGV0ZWQuCisgICAg
ICAgICogc3R5bGUvUHJvcGVydHlDYXNjYWRlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
UHJvcGVydHlDYXNjYWRlOjpkZWZlcnJlZFByb3BlcnRpZXMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6Y3VzdG9tUHJvcGVydGllcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpkaXJlY3Rpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6YnVpbGRlclN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpkaXJlY3Rpb25Gcm9tU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OkJ1aWxkZXI6OkJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OkJ1aWxkZXI6OmFwcGx5QWxsUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
QnVpbGRlcjo6YXBwbHlIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpCdWlsZGVyOjphcHBseUxvd1ByaW9yaXR5UHJvcGVydGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6YXBwbHlQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseURlZmVycmVkUHJvcGVydGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlcjo6YXBwbHlQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseVByb3BlcnRpZXNJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseUN1c3RvbVByb3BlcnRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OmFwcGx5Q3VzdG9tUHJvcGVydHkpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OmFwcGx5Q2FzY2FkZVByb3BlcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpCdWlsZGVyOjpyZXNvbHZlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OkJ1aWxkZXI6OnJlc29sdmVkVmFyaWFibGVWYWx1ZSk6CisgICAgICAgICogc3R5bGUvU3R5
bGVCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OmFw
cGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXI6OnN0YXRlKToK
KyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUpOgorICAgICAgICAqIHN0
eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWls
ZGVyU3RhdGU6OkJ1aWxkZXJTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRl
clN0YXRlOjp1c2VTVkdab29tUnVsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OkJ1aWxkZXJTdGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OmFkanVzdFN0eWxlRm9ySW50ZXJDaGFyYWN0
ZXJSdWJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnVwZGF0ZUZv
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6dXBkYXRlRm9udEZv
clRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6
OnVwZGF0ZUZvbnRGb3Jab29tQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWls
ZGVyU3RhdGU6OnVwZGF0ZUZvbnRGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnVwZGF0ZUZvbnRGb3JPcmllbnRhdGlvbkNoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpzZXRGb250U2l6ZSk6
CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpCdWlsZGVyU3RhdGU6OmJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OkJ1aWxkZXJTdGF0ZTo6c2V0Rm9udERpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpC
dWlsZGVyU3RhdGU6OmNhc2NhZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OkJ1aWxkZXJTdGF0ZTo6Y2xlYXJGb250RGlydHkpOiBEZWxldGVkLgorCiAyMDE5LTEwLTMxICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVt
b3ZlIHVubmVlZGVkIEhBVkVfVElNSU5HREFUQU9QVElPTlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYkNvcmUv
RGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggNzFiMzhjZDQyNTEuLjUzOTQ5
MWUyODFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQu
eGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNm
aWxlbGlzdApAQCAtMjE0OSw2ICsyMTQ5LDcgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL1NldHRpbmdzLmNwcAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU2V0dGluZ3MuaAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvU3R5bGVCdWlsZGVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvU3R5bGVCdWlsZGVyR2VuZXJhdGVkLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvU3R5bGVQcm9wZXJ0eVNob3J0aGFuZEZ1bmN0aW9ucy5j
cHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL1N0eWxlUHJv
cGVydHlTaG9ydGhhbmRGdW5jdGlvbnMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA2ZThjZTc0YTViYS4u
OWU0MzdmMGUwYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMzQ1LDYgKzIzNDUsNyBAQCBzdHlsZS9D
bGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKIHN0eWxlL0lkQ2hhbmdlSW52YWxpZGF0aW9uLmNw
cAogc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmNwcAogc3R5bGUvUHJvcGVydHlDYXNjYWRlLmNw
cAorc3R5bGUvU3R5bGVCdWlsZGVyLmNwcAogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCiBz
dHlsZS9TdHlsZUNoYW5nZS5jcHAKIHN0eWxlL1N0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNmNjZTU1OGQ4ZGUuLjk0OWIwOWQ4MzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00ODQzLDYgKzQ4NDMsNyBAQAogCQlF
NEFCQUJGMzIzNjhCOTU5MDBGQTQzNDUgLyogU3R5bGVCdWlsZGVyU3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUJBQkYyMjM2OEI5NTgwMEZB
NDM0NSAvKiBTdHlsZUJ1aWxkZXJTdGF0ZS5oICovOyB9OwogCQlFNEFCQUJGNTIzNjhDNkVGMDBG
QTQzNDUgLyogQ2FzY2FkZUxldmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNEFCQUJGNDIzNjhDNkVGMDBGQTQzNDUgLyogQ2FzY2FkZUxldmVsLmgg
Ki87IH07CiAJCUU0QUJBQzA0MjM2QUU5NTkwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXJHZW5lcmF0
ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUJB
QzAyMjM2QUU5NTgwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXJHZW5lcmF0ZWQuaCAqLzsgfTsKKwkJ
RTRBQkFDMDYyMzZCMDE2RDAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBQkFDMDUyMzZCMDE2QzAwRkE0MzQ1
IC8qIFN0eWxlQnVpbGRlci5oICovOyB9OwogCQlFNEFFN0MxNjE3RDFCQjk1MDAwOUZCMzEgLyog
RWxlbWVudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNEFFN0MxNTE3RDFCQjk1MDAwOUZCMzEgLyogRWxlbWVudEl0ZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRBRTdDMUEx
N0QyMzIzNTAwMDlGQjMxIC8qIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFFN0MxOTE3RDIzMjM1MDAwOUZC
MzEgLyogRWxlbWVudEFuY2VzdG9ySXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEFGQ0ZBNTBEQUYyOUEzMDBGNUY1NUMgLyogVW5p
dEJlemllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRBRkNGQTQwREFGMjlBMzAwRjVGNTVDIC8qIFVuaXRCZXppZXIuaCAqLzsgfTsKQEAgLTE1MTgw
LDYgKzE1MTgxLDggQEAKIAkJRTRBQkFCRjIyMzY4Qjk1ODAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRl
clN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlQnVpbGRlclN0
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QUJBQkY0MjM2OEM2RUYwMEZB
NDM0NSAvKiBDYXNjYWRlTGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FzY2FkZUxldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QUJBQzAyMjM2
QUU5NTgwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXJHZW5lcmF0ZWQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVCdWlsZGVyR2VuZXJhdGVkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUU0QUJBQzA1MjM2QjAxNkMwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVCdWlsZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QUJBQzA3MjM2QjAxODEwMEZBNDM0NSAvKiBTdHls
ZUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVCdWlsZGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBRTdDMTUxN0QxQkI5NTAwMDlGQjMxIC8qIEVsZW1l
bnRJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50SXRl
cmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBRTdDMTkxN0QyMzIzNTAw
MDlGQjMxIC8qIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0QUZDRkE0MERBRjI5QTMwMEY1RjU1QyAvKiBVbml0QmV6aWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaXRCZXppZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTI2OTU4LDYgKzI2OTYxLDggQEAKIAkJCQkxQzAxMDZGRjE5MjU5
NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxlLmggKi8sCiAJCQkJRTRBQkFCRTUyMzYx
QTM0MjAwRkE0MzQ1IC8qIFByb3BlcnR5Q2FzY2FkZS5jcHAgKi8sCiAJCQkJRTRBQkFCRTIyMzYx
QTMyOTAwRkE0MzQ1IC8qIFByb3BlcnR5Q2FzY2FkZS5oICovLAorCQkJCUU0QUJBQzA3MjM2QjAx
ODEwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXIuY3BwICovLAorCQkJCUU0QUJBQzA1MjM2QjAxNkMw
MEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXIuaCAqLywKIAkJCQk4M0I5Njg3OTE5RjhBQjgzMDA0RUY3
QUYgLyogU3R5bGVCdWlsZGVyQ29udmVydGVyLmggKi8sCiAJCQkJODM1RDM2MzYxOUZGNjE5MzAw
NEM5M0FCIC8qIFN0eWxlQnVpbGRlckN1c3RvbS5oICovLAogCQkJCUU0QUJBQzAyMjM2QUU5NTgw
MEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXJHZW5lcmF0ZWQuaCAqLywKQEAgLTMwNTcyLDYgKzMwNTc3
LDcgQEAKIAkJCQlCQ0UxQzQzQzBEOTgzMEQzMDAzQjAyRjIgLyogSlNMb2NhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTNBODA2MjAxRTAzQjU4NTAwOEExRjI2IC8qIEpTTG9uZ1JhbmdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDREFCNkQyRTE3QzgxNEVFMDBDNjBCMzQgLyogSlNNZWRpYUNv
bnRyb2xzSG9zdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRBQkFDMDYyMzZCMDE2RDAwRkE0MzQ1
IC8qIFN0eWxlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTU5NzQxREIxQjdEMTQwMTAw
MjAxQzkyIC8qIEpTTWVkaWFEZXZpY2VJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNTczOUJC
QjFCNDIwMTJEMDBEMjU4QzEgLyogSlNNZWRpYURldmljZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZEMjNBMTI2MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFy
aWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVS
ZWZlcmVuY2VWYWx1ZS5jcHAKaW5kZXggZmU2MGRjZmJmYjQuLmY5NzU5YmUwZTgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuY3BwCkBAIC0z
MCw4ICszMCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTVmFyaWFibGVS
ZWZlcmVuY2VWYWx1ZS5oIgogCi0jaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY3LDcgKzY3LDcgQEAg
c3RhdGljIGJvb2wgcmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2Ug
cmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXIKICAgICBBU1NFUlQocmFuZ2UuYXRFbmQoKSB8fCAocmFu
Z2UucGVlaygpLnR5cGUoKSA9PSBDb21tYVRva2VuKSk7CiAKICAgICAvLyBBcHBseSB0aGlzIHZh
cmlhYmxlIGZpcnN0LCBpbiBjYXNlIGl0IGlzIHN0aWxsIHVucmVzb2x2ZWQKLSAgICBidWlsZGVy
U3RhdGUuY2FzY2FkZSgpLmFwcGx5Q3VzdG9tUHJvcGVydHkodmFyaWFibGVOYW1lKTsKKyAgICBi
dWlsZGVyU3RhdGUuYnVpbGRlcigpLmFwcGx5Q3VzdG9tUHJvcGVydHkodmFyaWFibGVOYW1lKTsK
IAogICAgIC8vIEFwcGx5IGZhbGxiYWNrIHRvIGRldGVjdCBjeWNsZXMKICAgICBWZWN0b3I8Q1NT
UGFyc2VyVG9rZW4+IGZhbGxiYWNrUmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0RPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0RPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuY3BwCmluZGV4IDFlN2E1M2IxOTkzLi5lMGM5
Yzg2YjdjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0RPTUNTU1JlZ2lzdGVyQ3Vz
dG9tUHJvcGVydHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9ET01DU1NSZWdpc3RlckN1
c3RvbVByb3BlcnR5LmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkNTU1Rva2VuaXpl
ci5oIgogI2luY2x1ZGUgIkRPTUNTU05hbWVzcGFjZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCisjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgi
CiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyQ29udmVydGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKQEAgLTYwLDggKzYwLDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9NQ1NT
UmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eTo6cmVnaXN0ZXJQcm9wZXJ0eShEb2N1bWVudCYgZG9jdW0K
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciwgIlRoZSBnaXZlbiBp
bml0aWFsIHZhbHVlIG11c3QgYmUgY29tcHV0YXRpb25hbGx5IGluZGVwZW5kZW50LiIgfTsKIAog
ICAgICAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKLSAgICAgICAgU3R5bGU6OlByb3BlcnR5
Q2FzY2FkZSBkdW1teUNhc2NhZGUoc3R5bGVSZXNvbHZlciwgbWF0Y2hSZXN1bHQsIHsgfSk7Ci0g
ICAgICAgIGluaXRpYWxWYWx1ZSA9IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9t
UHJvcGVydHlWYWx1ZShkZXNjcmlwdG9yLm5hbWUsIGRlc2NyaXB0b3Iuc3ludGF4LCB0b2tlbml6
ZXIudG9rZW5SYW5nZSgpLCBkdW1teUNhc2NhZGUuYnVpbGRlclN0YXRlKCksIHN0cmljdENTU1Bh
cnNlckNvbnRleHQoKSk7CisgICAgICAgIFN0eWxlOjpCdWlsZGVyIGR1bW15QnVpbGRlcihzdHls
ZVJlc29sdmVyLCBtYXRjaFJlc3VsdCwgeyB9KTsKKyAgICAgICAgaW5pdGlhbFZhbHVlID0gQ1NT
UHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGRlc2NyaXB0b3Iu
bmFtZSwgZGVzY3JpcHRvci5zeW50YXgsIHRva2VuaXplci50b2tlblJhbmdlKCksIGR1bW15QnVp
bGRlci5zdGF0ZSgpLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOwogCiAgICAgICAgIGlmICgh
aW5pdGlhbFZhbHVlIHx8ICFpbml0aWFsVmFsdWUtPmlzUmVzb2x2ZWQoKSkKICAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciwgIlRoZSBnaXZlbiBpbml0aWFsIHZhbHVl
IGRvZXMgbm90IHBhcnNlIGZvciB0aGUgZ2l2ZW4gc3ludGF4LiIgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcAppbmRleCAyMGNjNTZiMTg1YS4uZjM2MTM4NjE5MDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKICAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNv
bSkKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3
ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKQEAg
LTMyLDcgKzMyLDYgQEAKIAogI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNs
dWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZS5oIgogI2luY2x1ZGUgIkNTU0RlZmF1bHRTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUgIkNT
U0ZpbHRlckltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKQEAgLTUx
LDcgKzUwLDYgQEAKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJDU1NTdHls
ZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVQ
b29sLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVt
ZW50UnVsZUNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbi5oIgpAQCAtNzMs
OSArNzEsNyBAQAogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKICNpbmNsdWRlICJO
b2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQYWdlUnVsZUNvbGxlY3Rvci5oIgotI2luY2x1
ZGUgIlBhaW50V29ya2xldEdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiUGFpci5oIgotI2luY2x1
ZGUgIlByb3BlcnR5Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlF1aXJrcy5oIgogI2luY2x1ZGUgIlJl
bmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCkBAIC04
NywxMSArODMsMTEgQEAKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNs
dWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1
ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTaGFy
ZWRTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU3R5
bGVDb2xvci5oIgogI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJTdHls
ZUZvbnRTaXplRnVuY3Rpb25zLmgiCkBAIC0xMTcsOCArMTEzLDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgY29uc3QgQ1NTUHJv
cGVydHlJRCBmaXJzdExvd1ByaW9yaXR5UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0
eUlEPihsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkgKyAxKTsKLQogaW5saW5lIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6U3RhdGU6OmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpCiB7CiAgICAgbV9oYXNV
QUFwcGVhcmFuY2UgPSBtX3N0eWxlLT5oYXNBcHBlYXJhbmNlKCk7CkBAIC0zNjMsMjIgKzM1Nyw4
IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JL
ZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSoKICAgICBzdGF0ZS5zZXRTdHlsZShSZW5kZXJTdHls
ZTo6Y2xvbmVQdHIoKmVsZW1lbnRTdHlsZSkpOwogICAgIHN0YXRlLnNldFBhcmVudFN0eWxlKFJl
bmRlclN0eWxlOjpjbG9uZVB0cigqZWxlbWVudFN0eWxlKSk7CiAKLSAgICBTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIHJlc3VsdCwgeyBTdHlsZTo6Q2FzY2FkZUxldmVsOjpB
dXRob3IgfSk7Ci0KLSAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5
LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkpOwotCi0gICAgLy8gSWYgb3VyIGZvbnQgZ290IGRp
cnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udChjYXNjYWRlKTsKLQotICAgIC8v
IE5vdyByZXNvbHZlIHJlbWFpbmluZyBjdXN0b20gcHJvcGVydGllcyBhbmQgdGhlIHJlc3QsIGlu
IGFueSBvcmRlcgotICAgIGNhc2NhZGUuYXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCk7Ci0KLSAgICBj
YXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJzdExvd1ByaW9yaXR5UHJvcGVydHksIGxhc3RDU1NQ
cm9wZXJ0eSk7Ci0KLSAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCBieSBvbmUgb2YgdGhl
IG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywgdXBkYXRlIGl0IGEgc2Vjb25kIHRpbWUuCi0gICAg
dXBkYXRlRm9udChjYXNjYWRlKTsKLQotICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJlZFByb3BlcnRp
ZXMoKTsKKyAgICBTdHlsZTo6QnVpbGRlciBidWlsZGVyKCp0aGlzLCByZXN1bHQsIHsgU3R5bGU6
OkNhc2NhZGVMZXZlbDo6QXV0aG9yIH0pOworICAgIGJ1aWxkZXIuYXBwbHlBbGxQcm9wZXJ0aWVz
KCk7CiAKICAgICBhZGp1c3RSZW5kZXJTdHlsZSgqc3RhdGUuc3R5bGUoKSwgKnN0YXRlLnBhcmVu
dFN0eWxlKCksIG51bGxwdHIsIG51bGxwdHIpOwogCkBAIC01NjMsMTkgKzU0Myw4IEBAIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBw
YWdlSW5kZXgpCiAKICAgICBhdXRvJiByZXN1bHQgPSBjb2xsZWN0b3IubWF0Y2hSZXN1bHQoKTsK
IAotICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUgY2FzY2FkZSgqdGhpcywgcmVzdWx0LCB7IFN0
eWxlOjpDYXNjYWRlTGV2ZWw6OkF1dGhvciB9KTsKLQotICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0
aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSk7Ci0KLSAgICAv
LyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250
KGNhc2NhZGUpOwotCi0gICAgLy8gTm93IHJlc29sdmUgcmVtYWluaW5nIGN1c3RvbSBwcm9wZXJ0
aWVzIGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCi0gICAgY2FzY2FkZS5hcHBseUN1c3RvbVBy
b3BlcnRpZXMoKTsKLQotICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0TG93UHJpb3Jp
dHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5KTsKLQotICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJl
ZFByb3BlcnRpZXMoKTsKKyAgICBTdHlsZTo6QnVpbGRlciBidWlsZGVyKCp0aGlzLCByZXN1bHQs
IHsgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yIH0pOworICAgIGJ1aWxkZXIuYXBwbHlBbGxQ
cm9wZXJ0aWVzKCk7CiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KICAgICByZXR1cm4g
bV9zdGF0ZS50YWtlU3R5bGUoKTsKQEAgLTY3OSwxNiArNjQ4LDYgQEAgc3RhdGljIGJvb2wgaXNT
Y3JvbGxhYmxlT3ZlcmZsb3coT3ZlcmZsb3cgb3ZlcmZsb3cpCiB9CiAjZW5kaWYKIAotdm9pZCBT
dHlsZVJlc29sdmVyOjphZGp1c3RTdHlsZUZvckludGVyQ2hhcmFjdGVyUnVieSgpCi17Ci0gICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZSgpOwotICAgIGlmIChzdHlsZS0+cnVi
eVBvc2l0aW9uKCkgIT0gUnVieVBvc2l0aW9uOjpJbnRlckNoYXJhY3RlciB8fCAhbV9zdGF0ZS5l
bGVtZW50KCkgfHwgIW1fc3RhdGUuZWxlbWVudCgpLT5oYXNUYWdOYW1lKHJ0VGFnKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIHN0eWxlLT5zZXRUZXh0QWxpZ24oVGV4dEFsaWduTW9kZTo6Q2VudGVy
KTsKLSAgICBpZiAoc3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHN0
eWxlLT5zZXRXcml0aW5nTW9kZShMZWZ0VG9SaWdodFdyaXRpbmdNb2RlKTsKLX0KLQogc3RhdGlj
IGJvb2wgaGFzRWZmZWN0aXZlRGlzcGxheU5vbmVGb3JEaXNwbGF5Q29udGVudHMoY29uc3QgRWxl
bWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLWRp
c3BsYXktMy8jdW5ib3gtaHRtbApAQCAtMTE0MSwzOCArMTEwMCw2IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YWRqdXN0UmVuZGVyU3R5bGVGb3JTaXRlU3BlY2lmaWNRdWlya3MoUmVuZGVyU3R5bGUm
IHN0eWxlLCBjCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hh
bmdlKFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICBhdXRvIFtmb250T3JpZW50YXRpb24sIGds
eXBoT3JpZW50YXRpb25dID0gc3R5bGUuZm9udEFuZEdseXBoT3JpZW50YXRpb24oKTsKLQotICAg
IGNvbnN0IGF1dG8mIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLmZvbnREZXNjcmlwdGlvbigpOwot
ICAgIGlmIChmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSA9PSBmb250T3JpZW50YXRpb24g
JiYgZm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBnbHlwaE9yaWVu
dGF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9
IGZvbnREZXNjcmlwdGlvbjsKLSAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0Tm9uQ0pLR2x5cGhP
cmllbnRhdGlvbihnbHlwaE9yaWVudGF0aW9uKTsKLSAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0
T3JpZW50YXRpb24oZm9udE9yaWVudGF0aW9uKTsKLSAgICBzdHlsZS5zZXRGb250RGVzY3JpcHRp
b24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVy
Ojp1cGRhdGVGb250KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIGNhc2NhZGUpCi17Ci0gICAgYXV0
byYgc3R5bGUgPSAqbV9zdGF0ZS5zdHlsZSgpOwotICAgIGlmICghY2FzY2FkZS5idWlsZGVyU3Rh
dGUoKS5mb250RGlydHkoKSAmJiBzdHlsZS5mb250Q2FzY2FkZSgpLmZvbnRzKCkpCi0gICAgICAg
IHJldHVybjsKLQotI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCi0gICAgY2hlY2tGb3JUZXh0
U2l6ZUFkanVzdChzdHlsZSk7Ci0jZW5kaWYKLSAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFu
Z2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUoKSk7Ci0gICAgY2hlY2tGb3Jab29tQ2hhbmdl
KHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwotICAgIGNoZWNrRm9yT3JpZW50YXRpb25D
aGFuZ2Uoc3R5bGUpOwotICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudCgp
LmZvbnRTZWxlY3RvcigpKTsKLSAgICBpZiAobV9zdGF0ZS5mb250U2l6ZUhhc1ZpZXdwb3J0VW5p
dHMoKSkKLSAgICAgICAgc3R5bGUuc2V0SGFzVmlld3BvcnRVbml0cyh0cnVlKTsKLQotICAgIGNh
c2NhZGUuYnVpbGRlclN0YXRlKCkuY2xlYXJGb250RGlydHkoKTsKLX0KIAogVmVjdG9yPFJlZlB0
cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChjb25zdCBF
bGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKIHsKQEAgLTEzMjUsNjMg
KzEyNTIsMjYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNv
bnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAgICAgLy8gRmluZCBvdXQg
aWYgdGhlcmUncyBhIC13ZWJraXQtYXBwZWFyYW5jZSBwcm9wZXJ0eSBpbiBlZmZlY3QgZnJvbSB0
aGUgVUEgc2hlZXQuCiAgICAgICAgIC8vIElmIHNvLCB3ZSBjYWNoZSB0aGUgYm9yZGVyIGFuZCBi
YWNrZ3JvdW5kIHN0eWxlcyBzbyB0aGF0IFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZSgpCiAgICAg
ICAgIC8vIGNhbiBsb29rIGF0IHRoZW0gbGF0ZXIgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGEg
c3R5bGVkIGZvcm0gY29udHJvbCBvciBub3QuCi0gICAgICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUgY2FzY2FkZSgqdGhpcywgbWF0Y2hSZXN1bHQsIHsgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNl
ckFnZW50IH0sIGluY2x1ZGVkUHJvcGVydGllcyk7Ci0KLSAgICAgICAgY2FzY2FkZS5hcHBseVBy
b3BlcnRpZXMoQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24sIENTU1Byb3BlcnR5V2Via2l0
UnVieVBvc2l0aW9uKTsKLSAgICAgICAgYWRqdXN0U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1Ynko
KTsKLQotI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQotICAgICAgICAvLyBTdXBwb3J0ZWQgY29s
b3Igc2NoZW1lcyBjYW4gYWZmZWN0IHJlc29sdmVkIGNvbG9ycywgc28gd2UgbmVlZCB0byBhcHBs
eSB0aGF0IHByb3BlcnR5IGJlZm9yZSBhbnkgY29sb3IgcHJvcGVydGllcy4KLSAgICAgICAgY2Fz
Y2FkZS5hcHBseVByb3BlcnRpZXMoQ1NTUHJvcGVydHlDb2xvclNjaGVtZSwgQ1NTUHJvcGVydHlD
b2xvclNjaGVtZSk7Ci0jZW5kaWYKLQotICAgICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhm
aXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkpOwotCi0gICAgICAgIC8v
IElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCB1cGRhdGUgaXQgbm93LgotICAgICAgICB1cGRhdGVG
b250KGNhc2NhZGUpOwotCi0gICAgICAgIC8vIE5vdyByZXNvbHZlIHJlbWFpbmluZyBjdXN0b20g
cHJvcGVydGllcyBhbmQgdGhlIHJlc3QsIGluIGFueSBvcmRlcgotICAgICAgICBjYXNjYWRlLmFw
cGx5Q3VzdG9tUHJvcGVydGllcygpOwotCi0gICAgICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVz
KGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5KTsKKyAgICAgICAgU3R5
bGU6OkJ1aWxkZXIgYnVpbGRlcigqdGhpcywgbWF0Y2hSZXN1bHQsIHsgU3R5bGU6OkNhc2NhZGVM
ZXZlbDo6VXNlckFnZW50IH0sIGluY2x1ZGVkUHJvcGVydGllcyk7CisgICAgICAgIGJ1aWxkZXIu
YXBwbHlBbGxQcm9wZXJ0aWVzKCk7CiAKICAgICAgICAgc3RhdGUuY2FjaGVCb3JkZXJBbmRCYWNr
Z3JvdW5kKCk7CiAgICAgfQogCi0gICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSBjYXNjYWRlKCp0
aGlzLCBtYXRjaFJlc3VsdCwgU3R5bGU6OmFsbENhc2NhZGVMZXZlbHMoKSwgaW5jbHVkZWRQcm9w
ZXJ0aWVzKTsKLQotICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKENTU1Byb3BlcnR5V2Via2l0
UnVieVBvc2l0aW9uLCBDU1NQcm9wZXJ0eVdlYmtpdFJ1YnlQb3NpdGlvbik7Ci0gICAgYWRqdXN0
U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1YnkoKTsKKyAgICBTdHlsZTo6QnVpbGRlciBidWlsZGVy
KCp0aGlzLCBtYXRjaFJlc3VsdCwgU3R5bGU6OmFsbENhc2NhZGVMZXZlbHMoKSwgaW5jbHVkZWRQ
cm9wZXJ0aWVzKTsKIAotI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQotICAgIC8vIFN1cHBvcnRl
ZCBjb2xvciBzY2hlbWVzIGNhbiBhZmZlY3QgcmVzb2x2ZWQgY29sb3JzLCBzbyB3ZSBuZWVkIHRv
IGFwcGx5IHRoYXQgcHJvcGVydHkgYmVmb3JlIGFueSBjb2xvciBwcm9wZXJ0aWVzLgotICAgIGNh
c2NhZGUuYXBwbHlQcm9wZXJ0aWVzKENTU1Byb3BlcnR5Q29sb3JTY2hlbWUsIENTU1Byb3BlcnR5
Q29sb3JTY2hlbWUpOwotI2VuZGlmCi0KLSAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJz
dENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkpOworICAgIC8vIEhpZ2ggcHJp
b3JpdHkgcHJvcGVydGllcyBtYXkgYWZmZWN0IHJlc29sdXRpb24gb2Ygb3RoZXIgcHJvcGVydGll
cyAodGhleSBhcmUgbW9zdGx5IGZvbnQgcmVsYXRlZCkuCisgICAgYnVpbGRlci5hcHBseUhpZ2hQ
cmlvcml0eVByb3BlcnRpZXMoKTsKIAogICAgIC8vIElmIHRoZSBlZmZlY3RpdmUgem9vbSB2YWx1
ZSBjaGFuZ2VzLCB3ZSBjYW4ndCB1c2UgdGhlIG1hdGNoZWQgcHJvcGVydGllcyBjYWNoZS4gU3Rh
cnQgb3Zlci4KICAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmVm
ZmVjdGl2ZVpvb20oKSAhPSBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpCiAgICAgICAg
IHJldHVybiBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50LCBEb05v
dFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOwogCi0gICAgLy8gSWYgb3VyIGZvbnQgZ290IGRp
cnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udChjYXNjYWRlKTsKLQogICAgIC8v
IElmIHRoZSBmb250IGNoYW5nZWQsIHdlIGNhbid0IHVzZSB0aGUgbWF0Y2hlZCBwcm9wZXJ0aWVz
IGNhY2hlLiBTdGFydCBvdmVyLgogICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5k
ZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0
LCBlbGVtZW50LCBEb05vdFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOwogCi0gICAgLy8gTm93
IHJlc29sdmUgcmVtYWluaW5nIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCB0aGUgcmVzdCwgaW4gYW55
IG9yZGVyCi0gICAgY2FzY2FkZS5hcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKLQotICAgIGNhc2Nh
ZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0TG93UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENTU1Byb3Bl
cnR5KTsKLQotICAgIC8vIEZpbmFsbHksIHNvbWUgcHJvcGVydGllcyBtdXN0IGJlIGFwcGxpZWQg
aW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBwYXJzZWQuCi0gICAgLy8gVGhlcmUgYXJlIHNvbWUgQ1NT
IHByb3BlcnRpZXMgdGhhdCBhZmZlY3QgdGhlIHNhbWUgUmVuZGVyU3R5bGUgdmFsdWVzLAotICAg
IC8vIHNvIHRvIHByZXNlcnZlIGJlaGF2aW9yLCB3ZSBxdWV1ZSB0aGVtIHVwIGR1cmluZyBjYXNj
YWRlIGFuZCBmbHVzaCBoZXJlLgotICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJlZFByb3BlcnRpZXMo
KTsKLQotICAgIEFTU0VSVCghY2FzY2FkZS5idWlsZGVyU3RhdGUoKS5mb250RGlydHkoKSk7Cisg
ICAgYnVpbGRlci5hcHBseUxvd1ByaW9yaXR5UHJvcGVydGllcygpOwogCiAgICAgaWYgKGNhY2hl
SXRlbSB8fCAhY2FjaGVIYXNoKQogICAgICAgICByZXR1cm47CkBAIC0xNDA0LDI4ICsxMjk0LDgg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHUKICAgICAgICAgcmV0dXJuOwogCiAgICAgTWF0Y2hS
ZXN1bHQgbWF0Y2hSZXN1bHQ7Ci0gICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSBjYXNjYWRlKCp0
aGlzLCBtYXRjaFJlc3VsdCwgeyB9KTsKLSAgICBjYXNjYWRlLmFwcGx5UHJvcGVydHkoaWQsICp2
YWx1ZSk7Ci0gICAgdXBkYXRlRm9udChjYXNjYWRlKTsKLX0KLQotLy8gU1ZHIGhhbmRsZXMgem9v
bWluZyBpbiBhIGRpZmZlcmVudCB3YXkgY29tcGFyZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1l
bnQgaXMgc2NhbGVkIGluc3RlYWQKLS8vIG9mIGVhY2ggaW5kaXZpZHVhbCBsZW5ndGggdmFsdWUg
aW4gdGhlIHJlbmRlciBzdHlsZSAvIHRyZWUuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVu
Z3RoKigpCi0vLyBtdWx0aXBsaWVzIGVhY2ggcmVzb2x2ZWQgbGVuZ3RoIHdpdGggdGhlIHpvb20g
bXVsdGlwbGllciAtIHNvIGZvciBTVkcgd2UgbmVlZCB0byBkaXNhYmxlIHRoYXQuCi0vLyBUaG91
Z2ggYWxsIENTUyB2YWx1ZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBvdXRlcm1vc3QgPHN2Zz4g
ZWxlbWVudHMgKHdpZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy4uLikKLS8vIG5lZWQgdG8gcmVz
cGVjdCB0aGUgc2NhbGluZy4gUmVuZGVyQm94ICh0aGUgcGFyZW50IGNsYXNzIG9mIFJlbmRlclNW
R1Jvb3QpIGdyYWJzIHZhbHVlcyBsaWtlCi0vLyB3aWR0aC9oZWlnaHQvYm9yZGVyL3BhZGRpbmcv
Li4uIGZyb20gdGhlIFJlbmRlclN0eWxlIC0+IGZvciBTVkcgdGhlc2UgdmFsdWVzIHdvdWxkIG5l
dmVyIHNjYWxlLAotLy8gaWYgd2UnZCBwYXNzIGEgMS4wIHpvb20gZmFjdG9yIGV2ZXJ5aHdlcmUu
IFNvIHdlIG9ubHkgcGFzcyBhIHpvb20gZmFjdG9yIG9mIDEuMCBmb3Igc3BlY2lmaWMKLS8vIHBy
b3BlcnRpZXMgdGhhdCBhcmUgTk9UIGFsbG93ZWQgdG8gc2NhbGUgd2l0aGluIGEgem9vbWVkIFNW
RyBkb2N1bWVudCAobGV0dGVyL3dvcmQtc3BhY2luZy9mb250LXNpemUpLgotYm9vbCBTdHlsZVJl
c29sdmVyOjp1c2VTVkdab29tUnVsZXMoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRlLmVs
ZW1lbnQoKSAmJiBtX3N0YXRlLmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCk7Ci19Ci0KLS8vIFNj
YWxlIHdpdGgvaGVpZ2h0IHByb3BlcnRpZXMgb24gaW5saW5lIFNWRyByb290LgotYm9vbCBTdHls
ZVJlc29sdmVyOjp1c2VTVkdab29tUnVsZXNGb3JMZW5ndGgoKSBjb25zdAotewotICAgIHJldHVy
biBpczxTVkdFbGVtZW50PihtX3N0YXRlLmVsZW1lbnQoKSkgJiYgIShpczxTVkdTVkdFbGVtZW50
PigqbV9zdGF0ZS5lbGVtZW50KCkpICYmIG1fc3RhdGUuZWxlbWVudCgpLT5wYXJlbnROb2RlKCkp
OworICAgIFN0eWxlOjpCdWlsZGVyIGJ1aWxkZXIoKnRoaXMsIG1hdGNoUmVzdWx0LCB7IH0pOwor
ICAgIGJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKGlkLCAqdmFsdWUpOwogfQogCiBSZWZQdHI8
U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NWYWx1ZSYgdmFsdWUpCkBA
IC0xNDQ3LDgzICsxMzE3LDE5IEBAIFJlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpz
dHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotI2lm
IEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yVGV4
dFNpemVBZGp1c3QoUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIGlmIChzdHlsZS50ZXh0U2l6
ZUFkanVzdCgpLmlzQXV0bygpCi0gICAgICAgIHx8ICFzZXR0aW5ncygpLnRleHRBdXRvc2l6aW5n
RW5hYmxlZCgpCi0gICAgICAgIHx8IChzZXR0aW5ncygpLnRleHRBdXRvc2l6aW5nVXNlc0lkZW1w
b3RlbnRNb2RlKCkgJiYgIXN0eWxlLnRleHRTaXplQWRqdXN0KCkuaXNOb25lKCkpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLmZvbnREZXNj
cmlwdGlvbigpOwotICAgIGlmICghc3R5bGUudGV4dFNpemVBZGp1c3QoKS5pc05vbmUoKSkKLSAg
ICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShuZXdGb250RGVzY3JpcHRp
b24uc3BlY2lmaWVkU2l6ZSgpICogc3R5bGUudGV4dFNpemVBZGp1c3QoKS5tdWx0aXBsaWVyKCkp
OwotICAgIGVsc2UKLSAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShu
ZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpKTsKLSAgICBzdHlsZS5zZXRGb250RGVz
Y3JpcHRpb24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsKLX0KLSNlbmRpZgotCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKLXsKLSAgICBpZiAoIXBhcmVudFN0eWxlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc3R5bGUuZWZmZWN0aXZlWm9vbSgpID09IHBhcmVu
dFN0eWxlLT5lZmZlY3RpdmVab29tKCkgJiYgc3R5bGUudGV4dFpvb20oKSA9PSBwYXJlbnRTdHls
ZS0+dGV4dFpvb20oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgYXV0byYgY2hpbGRG
b250ID0gc3R5bGUuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgYXV0byBuZXdGb250RGVzY3JpcHRp
b24gPSBjaGlsZEZvbnQ7Ci0gICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBjaGls
ZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKLSAgICBzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RG
TW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsKLX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVj
a0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpCi17Ci0gICAgY29uc3QgYXV0byYgY2hpbGRGb250ID0gc3R5bGUu
Zm9udERlc2NyaXB0aW9uKCk7Ci0KLSAgICBpZiAoY2hpbGRGb250LmlzQWJzb2x1dGVTaXplKCkg
fHwgIXBhcmVudFN0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBhdXRvJiBwYXJl
bnRGb250ID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGlmIChjaGlsZEZv
bnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6
ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gV2Uga25vdyB0aGUgcGFyZW50IGlzIG1vbm9z
cGFjZSBvciB0aGUgY2hpbGQgaXMgbW9ub3NwYWNlLCBhbmQgdGhhdCBmb250Ci0gICAgLy8gc2l6
ZSB3YXMgdW5zcGVjaWZpZWQuIFdlIHdhbnQgdG8gc2NhbGUgb3VyIGZvbnQgc2l6ZSBhcyBhcHBy
b3ByaWF0ZS4KLSAgICAvLyBJZiB0aGUgZm9udCB1c2VzIGEga2V5d29yZCBzaXplLCB0aGVuIHdl
IHJlZmV0Y2ggZnJvbSB0aGUgdGFibGUgcmF0aGVyIHRoYW4KLSAgICAvLyBtdWx0aXBseWluZyBi
eSBvdXIgc2NhbGUgZmFjdG9yLgotICAgIGZsb2F0IHNpemU7Ci0gICAgaWYgKENTU1ZhbHVlSUQg
c2l6ZUlkZW50aWZpZXIgPSBjaGlsZEZvbnQua2V5d29yZFNpemVBc0lkZW50aWZpZXIoKSkKLSAg
ICAgICAgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsIGNo
aWxkRm9udC51c2VGaXhlZERlZmF1bHRTaXplKCksIGRvY3VtZW50KCkpOwotICAgIGVsc2Ugewot
ICAgICAgICBmbG9hdCBmaXhlZFNjYWxlRmFjdG9yID0gKHNldHRpbmdzKCkuZGVmYXVsdEZpeGVk
Rm9udFNpemUoKSAmJiBzZXR0aW5ncygpLmRlZmF1bHRGb250U2l6ZSgpKQotICAgICAgICAgICAg
PyBzdGF0aWNfY2FzdDxmbG9hdD4oc2V0dGluZ3MoKS5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpKSAv
IHNldHRpbmdzKCkuZGVmYXVsdEZvbnRTaXplKCkKLSAgICAgICAgICAgIDogMTsKLSAgICAgICAg
c2l6ZSA9IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID8KLSAgICAgICAgICAgICAg
ICBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpIC8gZml4ZWRTY2FsZUZhY3RvciA6Ci0gICAgICAg
ICAgICAgICAgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSAqIGZpeGVkU2NhbGVGYWN0b3I7Ci0g
ICAgfQotCi0gICAgYXV0byBuZXdGb250RGVzY3JpcHRpb24gPSBjaGlsZEZvbnQ7Ci0gICAgc2V0
Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICBzdHlsZS5zZXRGb250RGVz
Y3JpcHRpb24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsKLX0KLQogdm9pZCBTdHlsZVJl
c29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKCkKIHsKICAgICBGb250Q2FzY2FkZURlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9k
ZShzZXR0aW5ncygpLmZvbnRSZW5kZXJpbmdNb2RlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRPbmVGYW1pbHkoc3RhbmRhcmRGYW1pbHkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3
b3JkU2l6ZUZyb21JZGVudGlmaWVyKENTU1ZhbHVlTWVkaXVtKTsKLSAgICBzZXRGb250U2l6ZShm
b250RGVzY3JpcHRpb24sIFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVNZWRpdW0s
IGZhbHNlLCBkb2N1bWVudCgpKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFNob3VsZEFsbG93
VXNlckluc3RhbGxlZEZvbnRzKHNldHRpbmdzKCkuc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMoKSA/IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgOiBBbGxvd1VzZXJJbnN0YWxsZWRG
b250czo6Tm8pOwotICAgIHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnRE
ZXNjcmlwdGlvbikpOwotfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKLXsKKyAgICBh
dXRvIHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlTWVkaXVtLCBmYWxz
ZSwgZG9jdW1lbnQoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6
ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRG
b250U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNpemUsIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRl
U2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSwgbV9zdGF0ZS5zdHlsZSgpLCBkb2N1bWVudCgpKSk7
CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250
U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNpemUsIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6
ZSgpLCBpczxTVkdFbGVtZW50PihtX3N0YXRlLmVsZW1lbnQoKSksIG1fc3RhdGUuc3R5bGUoKSwg
ZG9jdW1lbnQoKSkpOworCisgICAgZm9udERlc2NyaXB0aW9uLnNldFNob3VsZEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKHNldHRpbmdzKCkuc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA/
IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgOiBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6
Tm8pOworICAgIHN0eWxlKCktPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlw
dGlvbikpOwogfQogCiBib29sIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
SXNEZXJpdmVkRnJvbUVsZW1lbnQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggZDY0YzJjZTFkNTkuLmY5ZmMzNzRmYjYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTYzLDcgKzYzLDYgQEAgY2xhc3MgS2V5
ZnJhbWVMaXN0OwogY2xhc3MgS2V5ZnJhbWVWYWx1ZTsKIGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0
b3I7CiBjbGFzcyBOb2RlOwotY2xhc3MgUmVuZGVyU2Nyb2xsYmFyOwogY2xhc3MgUnVsZURhdGE7
CiBjbGFzcyBSdWxlU2V0OwogY2xhc3MgU2VsZWN0b3JGaWx0ZXI7CkBAIC04MCwxNCArNzksOSBA
QCBjbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldExpc3Q7CiBjbGFzcyBTdHlsZWRF
bGVtZW50OwogY2xhc3MgU1ZHRWxlbWVudDsKLWNsYXNzIFNWR1NWR0VsZW1lbnQ7CiBjbGFzcyBW
aWV3cG9ydFN0eWxlUmVzb2x2ZXI7CiBzdHJ1Y3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zOwogCi1u
YW1lc3BhY2UgU3R5bGUgewotY2xhc3MgUHJvcGVydHlDYXNjYWRlOwotfQotCiAvLyBNYXRjaE9u
bHlVc2VyQWdlbnRSdWxlcyBpcyB1c2VkIGluIG1lZGlhIHF1ZXJpZXMsIHdoZXJlIHJlbGF0aXZl
IHVuaXRzCiAvLyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBkb2N1bWVudCByb290
IGVsZW1lbnQgc3R5bGUsIGFuZCBzdHlsZWQgb25seQogLy8gZnJvbSB0aGUgVXNlciBBZ2VudCBT
dHlsZXNoZWV0IHJ1bGVzLgpAQCAtMTYzLDE0ICsxNTcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
cHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4pOwogICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxl
KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAKLSAgICB2b2lkIHVwZGF0ZUZvbnQoU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZSgpOwogCi0g
ICAgdm9pZCBzZXRGb250U2l6ZShGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7
Ci0KLSAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0OwotICAgIGJvb2wgdXNlU1ZHWm9v
bVJ1bGVzRm9yTGVuZ3RoKCkgY29uc3Q7Ci0KICAgICBzdGF0aWMgYm9vbCBjb2xvckZyb21Qcmlt
aXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJik7
CiAgICAgQ29sb3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFs
dWUmLCBib29sIGZvclZpc2l0ZWRMaW5rID0gZmFsc2UpIGNvbnN0OwogCkBAIC0yMDUsMTMgKzE5
Myw2IEBAIHB1YmxpYzoKICAgICBib29sIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NT
VmFsdWUmIGluVmFsdWUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOwogCiBwcml2
YXRlOgotICAgIC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhlIGRlZmF1bHQgZm9udCBzaXpl
IGlmIGl0IGRldGVjdHMgdGhhdCB0aGUgY3VycmVudCBnZW5lcmljIGZvbnQgZmFtaWx5IGhhcyBj
aGFuZ2VkLiAtZHdoCi0gICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVy
U3R5bGUmLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwotICAgIHZvaWQgY2hlY2tG
b3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KTsKLSNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotICAgIHZvaWQgY2hlY2tGb3JUZXh0U2l6
ZUFkanVzdChSZW5kZXJTdHlsZSYpOwotI2VuZGlmCi0KICAgICB2b2lkIGFkanVzdFJlbmRlclN0
eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBjb25zdCBS
ZW5kZXJTdHlsZSogcGFyZW50Qm94U3R5bGUsIGNvbnN0IEVsZW1lbnQqKTsKICAgICB2b2lkIGFk
anVzdFJlbmRlclN0eWxlRm9yU2l0ZVNwZWNpZmljUXVpcmtzKFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCYpOwogICAgIApAQCAtMjQ2LDE3ICsyMjcsMTIgQEAgcHVibGljOgogICAgICAgICBj
b25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0
eWxlOyB9CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9CiAKLSAgICAgICAgdm9pZCBzZXRGb250
U2l6ZUhhc1ZpZXdwb3J0VW5pdHMoYm9vbCBoYXNWaWV3cG9ydFVuaXRzKSB7IG1fZm9udFNpemVI
YXNWaWV3cG9ydFVuaXRzID0gaGFzVmlld3BvcnRVbml0czsgfQotICAgICAgICBib29sIGZvbnRT
aXplSGFzVmlld3BvcnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNpemVIYXNWaWV3cG9y
dFVuaXRzOyB9Ci0KICAgICAgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKICAg
ICAgICAgYm9vbCBoYXNVQUFwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX2hhc1VBQXBwZWFy
YW5jZTsgfQogICAgICAgICBCb3JkZXJEYXRhIGJvcmRlckRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2JvcmRlckRhdGE7IH0KICAgICAgICAgRmlsbExheWVyIGJhY2tncm91bmREYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YTsgfQogICAgICAgICBjb25zdCBDb2xvciYgYmFja2dy
b3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ29sb3I7IH0KIAotICAgICAg
ICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudCAmJiBtX2Vs
ZW1lbnQtPmlzU1ZHRWxlbWVudCgpOyB9Ci0KICAgICAgICAgY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYgY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsgfQogCiAgICAgICAgIGNvbnN0IFNlbGVjdG9yRmls
dGVyKiBzZWxlY3RvckZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3JGaWx0ZXI7IH0K
QEAgLTI3OCw3ICsyNTQsNiBAQCBwdWJsaWM6CiAKICAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7CiAKLSAgICAgICAgYm9vbCBtX2Zv
bnRTaXplSGFzVmlld3BvcnRVbml0cyB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgbV9oYXNVQUFw
cGVhcmFuY2UgeyBmYWxzZSB9OwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyLmNwcAppbmRleCAzOWI5ZjY1MzY3Ny4uNmI4Y2I3MjMxN2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKQEAgLTQyLDEwICs0MiwxMCBAQAogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNp
bmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJT
dHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZUNvbG9yLmgiCiAjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgpAQCAtMjM0LDcgKzIzNCw3IEBAIFJl
ZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNl
cyhDU1NQcm9wZXJ0eUlEIHByb3BJCiAgICAgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbGxlY3RQYXJz
ZWRDdXN0b21Qcm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVzKHN5bnRheCwgZmFsc2UsIGRlcGVuZGVu
Y2llcywgcmVzb2x2ZWREYXRhLT50b2tlbnMoKSwgbV9jb250ZXh0KTsKIAogICAgIGZvciAoYXV0
byBpZCA6IGRlcGVuZGVuY2llcykKLSAgICAgICAgYnVpbGRlclN0YXRlLmNhc2NhZGUoKS5hcHBs
eVByb3BlcnRpZXMoaWQsIGlkKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLmJ1aWxkZXIoKS5hcHBs
eVByb3BlcnR5KGlkKTsKIAogICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBl
ZEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgc3ludGF4LCByZXNvbHZlZERhdGEtPnRva2Vucygp
LCBidWlsZGVyU3RhdGUsIG1fY29udGV4dCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCmluZGV4IDVkNDA3MjY3OTk1Li40YmEwYzFjMjNk
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5j
cHAKQEAgLTY3LDEyICs2NywxMiBAQAogI2luY2x1ZGUgIkhhc2hUb29scy5oIgogLy8gRklYTUUt
TkVXUEFSU0VSOiBSZXBsYWNlIFBhaXIgYW5kIFJlY3Qgd2l0aCBhY3R1YWwgQ1NTVmFsdWUgc3Vi
Y2xhc3NlcyAoQ1NTVmFsdWVQYWlyIGFuZCBDU1NRdWFkVmFsdWUpLgogI2luY2x1ZGUgIlBhaXIu
aCIKLSNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJSZWN0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CiAjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIKICNpbmNsdWRlICJTVkdQYXRoVXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVy
Q29udmVydGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgogI2luY2x1
ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmRGdW5jdGlvbnMuaCIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCmluZGV4IGMzODMzZDRjZTZmLi40NTNlYWExNGI4NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCkBAIC0zMiw3ICszMiw2IEBA
CiAjaW5jbHVkZSAiUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlICJTdHlsZUJ1
aWxkZXJHZW5lcmF0ZWQuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCi0j
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgU3R5bGUgewpAQCAtMTczLDIzICsxNzIsMTggQEAgc3RhdGljIGlubGluZSBib29sIGlzVmFs
aWRDdWVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCiB9CiAjZW5kaWYKIAotUHJvcGVy
dHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
Y29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiBj
YXNjYWRlTGV2ZWxzLCBJbmNsdWRlZFByb3BlcnRpZXMgaW5jbHVkZWRQcm9wZXJ0aWVzKQorUHJv
cGVydHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVz
dWx0LCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiBjYXNjYWRlTGV2ZWxzLCBJbmNsdWRlZFByb3Bl
cnRpZXMgaW5jbHVkZWRQcm9wZXJ0aWVzLCBEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAgIDogbV9t
YXRjaFJlc3VsdChtYXRjaFJlc3VsdCkKICAgICAsIG1faW5jbHVkZWRQcm9wZXJ0aWVzKGluY2x1
ZGVkUHJvcGVydGllcykKLSAgICAsIG1fYnVpbGRlclN0YXRlKHN0ZDo6aW5fcGxhY2UsICp0aGlz
LCBzdHlsZVJlc29sdmVyKQorICAgICwgbV9kaXJlY3Rpb24ocmVzb2x2ZURpcmVjdGlvbkFuZFdy
aXRpbmdNb2RlKGRpcmVjdGlvbikpCiB7Ci0gICAgLy8gRGlyZWN0aW9uYWwgcHJvcGVydGllcyAo
Ki1iZWZvcmUvYWZ0ZXIpIGFyZSBhbGlhc2VzIHRoYXQgZGVwZW5kIG9uIHRoZSBUZXh0RGlyZWN0
aW9uIGFuZCBXcml0aW5nTW9kZS4KLSAgICAvLyBUaGVzZSBtdXN0IGJlIHJlc29sdmVkIGJlZm9y
ZSB3ZSBjYW4gYmVnaW4gYnVpbGRpbmcgdGhlIHByb3BlcnR5IGNhc2NhZGUuCi0gICAgcmVzb2x2
ZURpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKCk7Ci0KICAgICBidWlsZENhc2NhZGUoY2FzY2FkZUxl
dmVscyk7CiB9CiAKIFByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHlDYXNjYWRlKGNvbnN0IFByb3Bl
cnR5Q2FzY2FkZSYgcGFyZW50LCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiBjYXNjYWRlTGV2ZWxz
KQotICAgIDogIG1fbWF0Y2hSZXN1bHQocGFyZW50Lm1fbWF0Y2hSZXN1bHQpCisgICAgOiBtX21h
dGNoUmVzdWx0KHBhcmVudC5tX21hdGNoUmVzdWx0KQogICAgICwgbV9pbmNsdWRlZFByb3BlcnRp
ZXMocGFyZW50Lm1faW5jbHVkZWRQcm9wZXJ0aWVzKQogICAgICwgbV9kaXJlY3Rpb24ocGFyZW50
Lm1fZGlyZWN0aW9uKQotICAgICwgbV93cml0aW5nTW9kZShwYXJlbnQubV93cml0aW5nTW9kZSkK
IHsKICAgICBidWlsZENhc2NhZGUoY2FzY2FkZUxldmVscyk7CiB9CkBAIC0yMzAsNyArMjI0LDcg
QEAgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnNldFByb3BlcnR5SW50ZXJuYWwoUHJvcGVydHkmIHBy
b3BlcnR5LCBDU1NQcm9wZXJ0eUlEIGlkLAogdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnNldChDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgY3NzVmFsdWUsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUs
IENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIFNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5h
bCkKIHsKICAgICBpZiAoQ1NTUHJvcGVydHk6OmlzRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCkp
Ci0gICAgICAgIGlkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5
KGlkLCBtX2RpcmVjdGlvbiwgbV93cml0aW5nTW9kZSk7CisgICAgICAgIGlkID0gQ1NTUHJvcGVy
dHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBtX2RpcmVjdGlvbi50ZXh0RGly
ZWN0aW9uLCBtX2RpcmVjdGlvbi53cml0aW5nTW9kZSk7CiAKICAgICBBU1NFUlQoIXNob3VsZEFw
cGx5UHJvcGVydHlJblBhcnNlT3JkZXIoaWQpKTsKIApAQCAtMzc3LDEyMCArMzcxLDcgQEAgdm9p
ZCBQcm9wZXJ0eUNhc2NhZGU6OmFkZEltcG9ydGFudE1hdGNoZXMoQ2FzY2FkZUxldmVsIGNhc2Nh
ZGVMZXZlbCkKICAgICAgICAgYWRkTWF0Y2gobWF0Y2hlZERlY2xhcmF0aW9uc1ttYXRjaC5pbmRl
eF0sIGNhc2NhZGVMZXZlbCwgdHJ1ZSk7CiB9CiAKLXZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBs
eURlZmVycmVkUHJvcGVydGllcygpCi17Ci0gICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IG1fZGVm
ZXJyZWRQcm9wZXJ0aWVzKQotICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5KTsKLX0KLQot
dm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydGllcyhpbnQgZmlyc3RQcm9wZXJ0eSwg
aW50IGxhc3RQcm9wZXJ0eSkKLXsKLSAgICBpZiAoTElLRUxZKG1fY3VzdG9tUHJvcGVydGllcy5p
c0VtcHR5KCkpKQotICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0aWVzSW1wbDxDdXN0b21Qcm9w
ZXJ0eUN5Y2xlVHJhY2tpbmc6OkRpc2FibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHkp
OwotCi0gICAgcmV0dXJuIGFwcGx5UHJvcGVydGllc0ltcGw8Q3VzdG9tUHJvcGVydHlDeWNsZVRy
YWNraW5nOjpFbmFibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHkpOwotfQotCi10ZW1w
bGF0ZTxQcm9wZXJ0eUNhc2NhZGU6OkN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyB0cmFja0N5
Y2xlcz4KLWlubGluZSB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0aWVzSW1wbChp
bnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSkKLXsKLSAgICBmb3IgKGludCBpZCA9
IGZpcnN0UHJvcGVydHk7IGlkIDw9IGxhc3RQcm9wZXJ0eTsgKytpZCkgewotICAgICAgICBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihpZCk7Ci0g
ICAgICAgIGlmICghaGFzUHJvcGVydHkocHJvcGVydHlJRCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgQVNTRVJUKHByb3BlcnR5SUQgIT0gQ1NTUHJvcGVydHlDdXN0b20pOwotICAg
ICAgICBhdXRvJiBwcm9wZXJ0eSA9IG1fcHJvcGVydGllc1twcm9wZXJ0eUlEXTsKLQotICAgICAg
ICBpZiAodHJhY2tDeWNsZXMgPT0gQ3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nOjpFbmFibGVk
KSB7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoYnVpbGRlclN0YXRlKCkubV9pblByb2dyZXNz
UHJvcGVydGllcy5nZXQocHJvcGVydHlJRCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJl
IGluIGEgY3ljbGUgKGVnLiBzZXR0aW5nIGZvbnQgc2l6ZSB1c2luZyByZWdpc3RlcmVkIGN1c3Rv
bSBwcm9wZXJ0eSB2YWx1ZSBjb250YWluaW5nIGVtKS4KLSAgICAgICAgICAgICAgICAvLyBTbyB0
aGlzIHZhbHVlIHNob3VsZCBiZSB1bnNldC4KLSAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUo
KS5tX2FwcGxpZWRQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlEKTsKLSAgICAgICAgICAgICAgICAv
LyBUaGlzIHByb3BlcnR5IGlzIGluIGEgY3ljbGUsIGFuZCBvbmx5IHRoZSByb290IG9mIHRoZSBj
YWxsIHN0YWNrIHdpbGwgaGF2ZSBmaXJzdFByb3BlcnR5ICE9IGxhc3RQcm9wZXJ0eS4KLSAgICAg
ICAgICAgICAgICBBU1NFUlQoZmlyc3RQcm9wZXJ0eSA9PSBsYXN0UHJvcGVydHkpOwotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0byYgYnVp
bGRlclN0YXRlID0gKm1fYnVpbGRlclN0YXRlOwotICAgICAgICAgICAgYnVpbGRlclN0YXRlLm1f
aW5Qcm9ncmVzc1Byb3BlcnRpZXMuc2V0KHByb3BlcnR5SUQpOwotICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBidWlsZGVyU3RhdGUubV9hcHBsaWVkUHJv
cGVydGllcy5zZXQocHJvcGVydHlJRCk7Ci0gICAgICAgICAgICBidWlsZGVyU3RhdGUubV9pblBy
b2dyZXNzUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCwgZmFsc2UpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBjdXN0
b20gcHJvcGVydGllcywgdGhlbiB0aGVyZSBjYW4ndCBiZSBhbnkgY3ljbGVzLgotICAgICAgICBh
cHBseVByb3BlcnR5KHByb3BlcnR5KTsKLSAgICB9Ci19Ci0KLXZvaWQgUHJvcGVydHlDYXNjYWRl
OjphcHBseUN1c3RvbVByb3BlcnRpZXMoKQotewotICAgIGZvciAoYXV0byYgbmFtZSA6IG1fY3Vz
dG9tUHJvcGVydGllcy5rZXlzKCkpCi0gICAgICAgIGFwcGx5Q3VzdG9tUHJvcGVydHkobmFtZSk7
Ci19Ci0KLXZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseUN1c3RvbVByb3BlcnR5KGNvbnN0IFN0
cmluZyYgbmFtZSkKLXsKLSAgICBhdXRvJiBidWlsZGVyU3RhdGUgPSAqbV9idWlsZGVyU3RhdGU7
Ci0gICAgaWYgKGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmNvbnRhaW5z
KG5hbWUpIHx8ICFtX2N1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFtZSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gcHJvcGVydHkgPSBjdXN0b21Qcm9wZXJ0eShuYW1lKTsKLSAgICBi
b29sIGluQ3ljbGUgPSBidWlsZGVyU3RhdGUubV9pblByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5j
b250YWlucyhuYW1lKTsKLQotICAgIGZvciAoYXV0byBpbmRleCA6IHsgU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rLCBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoVmlzaXRlZCB9KSB7Ci0gICAgICAgIGlmICghcHJvcGVydHkuY3NzVmFsdWVbaW5k
ZXhdKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpbmRleCAhPSBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiBidWlsZGVyU3RhdGUuc3R5bGUoKS5pbnNpZGVMaW5r
KCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgUmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVlVG9BcHBseSA9IENTU0N1c3Rv
bVByb3BlcnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigq
cHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKSk7Ci0KLSAgICAgICAgaWYgKGluQ3ljbGUpIHsKLSAg
ICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmFkZChuYW1l
KTsgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCB0cnkgdG8gYXBwbHkgdGhpcyBwcm9wZXJ0eSBhZ2Fp
biB3aGlsZSByZXNvbHZpbmcgaXQuCi0gICAgICAgICAgICB2YWx1ZVRvQXBwbHkgPSBDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVXaXRoSUQobmFtZSwgQ1NTVmFsdWVJbnZhbGlkKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3Vz
dG9tLmFkZChuYW1lKTsKLQotICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8
Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KHZhbHVlVG9BcHBseS0+dmFsdWUoKSkpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWUgPSByZXNvbHZlZFZhcmlhYmxl
VmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSk7Ci0KLSAgICAgICAg
ICAgIGlmIChidWlsZGVyU3RhdGUubV9hcHBsaWVkQ3VzdG9tUHJvcGVydGllcy5jb250YWlucyhu
YW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm47IC8vIFRoZXJlIHdhcyBhIGN5Y2xlIGFuZCB0
aGUgdmFsdWUgd2FzIHJlc2V0LCBzbyBiYWlsLgotCi0gICAgICAgICAgICBpZiAoIXBhcnNlZFZh
bHVlKQotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1
ZTo6Y3JlYXRlV2l0aElEKG5hbWUsIENTU1ZhbHVlVW5zZXQpOwotCi0gICAgICAgICAgICB2YWx1
ZVRvQXBwbHkgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqcGFyc2VkVmFsdWUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5tX2luUHJvZ3Jlc3NQcm9w
ZXJ0aWVzQ3VzdG9tLmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgICAgICBidWlsZGVyU3RhdGUu
bV9saW5rTWF0Y2ggPSBpbmRleDsKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSwgaW5kZXgpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgYnVpbGRlclN0YXRlLm1fbGlua01hdGNoID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERl
ZmF1bHQ7Ci0gICAgYnVpbGRlclN0YXRlLm1faW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20ucmVt
b3ZlKG5hbWUpOwotICAgIGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmFk
ZChuYW1lKTsKLQotICAgIGZvciAoYXV0byBpbmRleCA6IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRj
aERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoVmlzaXRlZCB9KSB7Ci0gICAgICAgIGlmICghcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpbmRleCAhPSBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoRGVmYXVsdCAmJiBidWlsZGVyU3RhdGUuc3R5bGUoKS5pbnNpZGVMaW5rKCkgPT0g
SW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
UmVmPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVlVG9BcHBseSA9IENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU6OmNyZWF0ZShkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPigqcHJvcGVy
dHkuY3NzVmFsdWVbaW5kZXhdKSk7Ci0KLSAgICAgICAgaWYgKGluQ3ljbGUgJiYgV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KHZhbHVlVG9BcHBs
eS0+dmFsdWUoKSkpIHsKLSAgICAgICAgICAgIC8vIFJlc29sdmUgdGhpcyB2YWx1ZSBzbyB0aGF0
IHdlIHJlc2V0IGl0cyBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICByZXNvbHZlZFZhcmlhYmxl
VmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLWNvbnN0IFByb3BlcnR5Q2FzY2FkZSogUHJvcGVydHlDYXNjYWRlOjpwcm9w
ZXJ0eUNhc2NhZGVGb3JSb2xsYmFjayhDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsKQorY29uc3Qg
UHJvcGVydHlDYXNjYWRlKiBQcm9wZXJ0eUNhc2NhZGU6OnByb3BlcnR5Q2FzY2FkZUZvclJvbGxi
YWNrKENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChjYXNj
YWRlTGV2ZWwpIHsKICAgICBjYXNlIENhc2NhZGVMZXZlbDo6QXV0aG9yOgpAQCAtNTE0LDE0NyAr
Mzk1LDkgQEAgY29uc3QgUHJvcGVydHlDYXNjYWRlKiBQcm9wZXJ0eUNhc2NhZGU6OnByb3BlcnR5
Q2FzY2FkZUZvclJvbGxiYWNrKENhc2NhZGVMZXZlbAogICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1pbmxpbmUgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydHkoY29uc3QgUHJvcGVy
dHkmIHByb3BlcnR5KQotewotICAgIGF1dG8mIGJ1aWxkZXJTdGF0ZSA9ICptX2J1aWxkZXJTdGF0
ZTsKLSAgICBidWlsZGVyU3RhdGUubV9jYXNjYWRlTGV2ZWwgPSBwcm9wZXJ0eS5sZXZlbDsKLSAg
ICBidWlsZGVyU3RhdGUubV9zdHlsZVNjb3BlT3JkaW5hbCA9IHByb3BlcnR5LnN0eWxlU2NvcGVP
cmRpbmFsOwotCi0gICAgYXV0byBhcHBseVdpdGhMaW5rTWF0Y2ggPSBbJl0oU2VsZWN0b3JDaGVj
a2VyOjpMaW5rTWF0Y2hNYXNrIGxpbmtNYXRjaCkgewotICAgICAgICBpZiAocHJvcGVydHkuY3Nz
VmFsdWVbbGlua01hdGNoXSkgewotICAgICAgICAgICAgYnVpbGRlclN0YXRlLm1fbGlua01hdGNo
ID0gbGlua01hdGNoOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnBy
b3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaF0sIGxpbmtNYXRjaCk7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0
KTsKLQotICAgIGlmIChidWlsZGVyU3RhdGUuc3R5bGUoKS5pbnNpZGVMaW5rKCkgPT0gSW5zaWRl
TGluazo6Tm90SW5zaWRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhcHBseVdpdGhMaW5rTWF0
Y2goU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmspOwotICAgIGFwcGx5V2l0aExpbmtNYXRjaChT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7Ci0KLSAgICBidWlsZGVyU3RhdGUubV9saW5r
TWF0Y2ggPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdDsKLX0KLQotdm9pZCBQcm9wZXJ0
eUNhc2NhZGU6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUmIHZhbHVl
LCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgbGlua01hdGNoTWFzaykKK1Byb3BlcnR5
Q2FzY2FkZTo6RGlyZWN0aW9uIFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZURpcmVjdGlvbkFuZFdy
aXRpbmdNb2RlKERpcmVjdGlvbiBpbmhlcml0ZWREaXJlY3Rpb24pIGNvbnN0CiB7Ci0gICAgQVNT
RVJUX1dJVEhfTUVTU0FHRSghaXNTaG9ydGhhbmRDU1NQcm9wZXJ0eShpZCksICJTaG9ydGhhbmQg
cHJvcGVydHkgaWQgPSAlZCB3YXNuJ3QgZXhwYW5kZWQgYXQgcGFyc2luZyB0aW1lIiwgaWQpOwot
Ci0gICAgYXV0byB2YWx1ZVRvQXBwbHkgPSByZXNvbHZlVmFsdWUoaWQsIHZhbHVlKTsKLQotICAg
IGlmIChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkKSkgewotICAgICAg
ICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2Fy
ZVByb3BlcnR5KGlkLCBtX2RpcmVjdGlvbiwgbV93cml0aW5nTW9kZSk7Ci0gICAgICAgIEFTU0VS
VChuZXdJZCAhPSBpZCk7Ci0gICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KG5ld0lkLCB2YWx1
ZVRvQXBwbHkuZ2V0KCksIGxpbmtNYXRjaE1hc2spOwotICAgIH0KLQotICAgIGF1dG8mIGJ1aWxk
ZXJTdGF0ZSA9ICptX2J1aWxkZXJTdGF0ZTsKLQotICAgIENTU0N1c3RvbVByb3BlcnR5VmFsdWUq
IGN1c3RvbVByb3BlcnR5VmFsdWUgPSBudWxscHRyOwotICAgIENTU1ZhbHVlSUQgY3VzdG9tUHJv
cGVydHlWYWx1ZUlEID0gQ1NTVmFsdWVJbnZhbGlkOwotICAgIENTU1JlZ2lzdGVyZWRDdXN0b21Q
cm9wZXJ0eSogY3VzdG9tUHJvcGVydHlSZWdpc3RlcmVkID0gbnVsbHB0cjsKLQotICAgIGlmIChp
ZCA9PSBDU1NQcm9wZXJ0eUN1c3RvbSkgewotICAgICAgICBjdXN0b21Qcm9wZXJ0eVZhbHVlID0g
ZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4odmFsdWVUb0FwcGx5LnB0cigpKTsKLSAg
ICAgICAgQVNTRVJUKGN1c3RvbVByb3BlcnR5VmFsdWUtPmlzUmVzb2x2ZWQoKSk7Ci0gICAgICAg
IGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENTU1ZhbHVlSUQ+KGN1c3RvbVByb3BlcnR5VmFs
dWUtPnZhbHVlKCkpKQotICAgICAgICAgICAgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID0gV1RGOjpn
ZXQ8Q1NTVmFsdWVJRD4oY3VzdG9tUHJvcGVydHlWYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIGF1
dG8mIG5hbWUgPSBjdXN0b21Qcm9wZXJ0eVZhbHVlLT5uYW1lKCk7Ci0gICAgICAgIGN1c3RvbVBy
b3BlcnR5UmVnaXN0ZXJlZCA9IGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLmdldENTU1JlZ2lzdGVy
ZWRDdXN0b21Qcm9wZXJ0eVNldCgpLmdldChuYW1lKTsKLSAgICB9Ci0KLSAgICBib29sIGlzSW5o
ZXJpdCA9IHZhbHVlVG9BcHBseS0+aXNJbmhlcml0ZWRWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5
VmFsdWVJRCA9PSBDU1NWYWx1ZUluaGVyaXQ7Ci0gICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZVRv
QXBwbHktPmlzSW5pdGlhbFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09IENTU1Zh
bHVlSW5pdGlhbDsKLQotICAgIGJvb2wgaXNVbnNldCA9IHZhbHVlVG9BcHBseS0+aXNVbnNldFZh
bHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09IENTU1ZhbHVlVW5zZXQ7Ci0gICAgYm9v
bCBpc1JldmVydCA9IHZhbHVlVG9BcHBseS0+aXNSZXZlcnRWYWx1ZSgpIHx8IGN1c3RvbVByb3Bl
cnR5VmFsdWVJRCA9PSBDU1NWYWx1ZVJldmVydDsKLQotICAgIGlmIChpc1JldmVydCkgewotICAg
ICAgICBpZiAoYXV0byogcm9sbGJhY2sgPSBwcm9wZXJ0eUNhc2NhZGVGb3JSb2xsYmFjayhidWls
ZGVyU3RhdGUubV9jYXNjYWRlTGV2ZWwpKSB7Ci0gICAgICAgICAgICAvLyBXaXRoIHRoZSByb2xs
YmFjayBjYXNjYWRlIGJ1aWx0LCB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgcHJvcGVydHkgYW5kIGFw
cGx5IGl0LiBJZiB0aGUgcHJvcGVydHkgaXMKLSAgICAgICAgICAgIC8vIG5vdCBwcmVzZW50LCB0
aGVuIHdlIGJlaGF2ZSBsaWtlICJ1bnNldC4iIE90aGVyd2lzZSB3ZSBhcHBseSB0aGUgcHJvcGVy
dHkgaW5zdGVhZCBvZgotICAgICAgICAgICAgLy8gb3VyIG93bi4KLSAgICAgICAgICAgIGlmIChj
dXN0b21Qcm9wZXJ0eVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1c3RvbVByb3BlcnR5
UmVnaXN0ZXJlZCAmJiBjdXN0b21Qcm9wZXJ0eVJlZ2lzdGVyZWQtPmluaGVyaXRzICYmIHJvbGxi
YWNrLT5oYXNDdXN0b21Qcm9wZXJ0eShjdXN0b21Qcm9wZXJ0eVZhbHVlLT5uYW1lKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGF1dG8gcHJvcGVydHkgPSByb2xsYmFjay0+Y3VzdG9tUHJvcGVy
dHkoY3VzdG9tUHJvcGVydHlWYWx1ZS0+bmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaE1hc2tdKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRj
aE1hc2tdLCBsaW5rTWF0Y2hNYXNrKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sbGJhY2stPmhhc1Byb3Bl
cnR5KGlkKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIHByb3BlcnR5ID0gcm9sbGJhY2stPnBy
b3BlcnR5KGlkKTsKLSAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuY3NzVmFsdWVbbGlua01h
dGNoTWFza10pCi0gICAgICAgICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHkuaWQs
ICpwcm9wZXJ0eS5jc3NWYWx1ZVtsaW5rTWF0Y2hNYXNrXSwgbGlua01hdGNoTWFzayk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
aXNVbnNldCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGlzVW5zZXQpIHsKLSAgICAgICAgaWYg
KENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KGlkKSkKLSAgICAgICAgICAgIGlzSW5o
ZXJpdCA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlzSW5pdGlhbCA9IHRydWU7
Ci0gICAgfQotCi0gICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgIWlzSW5pdGlhbCk7IC8vIGlzSW5o
ZXJpdCAtPiAhaXNJbml0aWFsICYmIGlzSW5pdGlhbCAtPiAhaXNJbmhlcml0Ci0KLSAgICBpZiAo
YnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSAmJiAhaXNWYWxp
ZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSB7Ci0gICAgICAgIC8vIExpbWl0IHRoZSBwcm9wZXJ0
aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBob25vcmVkIGJ5IDp2aXNp
dGVkLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlzSW5oZXJpdCAmJiAhQ1NT
UHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQotICAgICAgICBidWlsZGVyU3RhdGUu
c3R5bGUoKS5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOwotCi0jaWYgRU5B
QkxFKENTU19QQUlOVElOR19BUEkpCi0gICAgaWYgKGlzPENTU1BhaW50SW1hZ2VWYWx1ZT4odmFs
dWVUb0FwcGx5KSkgewotICAgICAgICBhdXRvJiBuYW1lID0gZG93bmNhc3Q8Q1NTUGFpbnRJbWFn
ZVZhbHVlPih2YWx1ZVRvQXBwbHkuZ2V0KCkpLm5hbWUoKTsKLSAgICAgICAgaWYgKGF1dG8qIHBh
aW50V29ya2xldCA9IGNvbnN0X2Nhc3Q8RG9jdW1lbnQmPihidWlsZGVyU3RhdGUuZG9jdW1lbnQo
KSkucGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVGb3JOYW1lKG5hbWUpKSB7Ci0gICAgICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKHBhaW50V29ya2xldC0+cGFpbnREZWZpbml0aW9uTG9jaygp
KTsKLSAgICAgICAgICAgIGlmIChhdXRvKiByZWdpc3RyYXRpb24gPSBwYWludFdvcmtsZXQtPnBh
aW50RGVmaW5pdGlvbk1hcCgpLmdldChuYW1lKSkgewotICAgICAgICAgICAgICAgIGZvciAoYXV0
byYgcHJvcGVydHkgOiByZWdpc3RyYXRpb24tPmlucHV0UHJvcGVydGllcykKLSAgICAgICAgICAg
ICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuYWRkQ3VzdG9tUGFpbnRXYXRjaFByb3BlcnR5
KHByb3BlcnR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0g
ICAgQnVpbGRlckdlbmVyYXRlZDo6YXBwbHlQcm9wZXJ0eShpZCwgYnVpbGRlclN0YXRlLCB2YWx1
ZVRvQXBwbHkuZ2V0KCksIGlzSW5pdGlhbCwgaXNJbmhlcml0LCBjdXN0b21Qcm9wZXJ0eVJlZ2lz
dGVyZWQpOwotfQotCi1SZWY8Q1NTVmFsdWU+IFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWUmIHZhbHVlKQotewotICAgIGlmICgh
dmFsdWUuaGFzVmFyaWFibGVSZWZlcmVuY2VzKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAg
ICAKLSAgICBhdXRvIHZhcmlhYmxlVmFsdWUgPSByZXNvbHZlZFZhcmlhYmxlVmFsdWUocHJvcGVy
dHlJRCwgdmFsdWUpOwotICAgIC8vIElmIHRoZSBjYXNjYWRlIGhhcyBhbHJlYWR5IGFwcGxpZWQg
dGhpcyBpZCwgdGhlbiB3ZSBkZXRlY3RlZCBhIGN5Y2xlLCBhbmQgdGhpcyB2YWx1ZSBzaG91bGQg
YmUgdW5zZXQuCi0gICAgaWYgKCF2YXJpYWJsZVZhbHVlIHx8IGJ1aWxkZXJTdGF0ZSgpLm1fYXBw
bGllZFByb3BlcnRpZXMuZ2V0KHByb3BlcnR5SUQpKSB7Ci0gICAgICAgIGlmIChDU1NQcm9wZXJ0
eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKLSAgICAgICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUluaGVyaXRlZFZhbHVlKCk7Ci0gICAgICAg
IHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUV4cGxpY2l0SW5pdGlhbFZh
bHVlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICp2YXJpYWJsZVZhbHVlOwotfQotCi1SZWZQdHI8
Q1NTVmFsdWU+IFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCi17Ci0gICAgQ1NTUGFyc2VyIHBh
cnNlcihidWlsZGVyU3RhdGUoKS5kb2N1bWVudCgpKTsKLSAgICByZXR1cm4gcGFyc2VyLnBhcnNl
VmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKHByb3BJRCwgdmFsdWUsIGJ1aWxkZXJTdGF0ZSgp
KTsKLX0KLQotdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVEaXJlY3Rpb25BbmRXcml0aW5n
TW9kZSgpCi17Ci0gICAgYXV0byYgc3R5bGUgPSBidWlsZGVyU3RhdGUoKS5zdHlsZSgpOwotCi0g
ICAgbV9kaXJlY3Rpb24gPSBzdHlsZS5kaXJlY3Rpb24oKTsKLSAgICBtX3dyaXRpbmdNb2RlID0g
c3R5bGUud3JpdGluZ01vZGUoKTsKKyAgICBEaXJlY3Rpb24gcmVzdWx0ID0gaW5oZXJpdGVkRGly
ZWN0aW9uOwogCiAgICAgYm9vbCBoYWRJbXBvcnRhbnRXcml0aW5nTW9kZSA9IGZhbHNlOwogICAg
IGJvb2wgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gZmFsc2U7CkBAIC02NjgsMTMgKzQxMSwxMyBA
QCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZURpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKCkK
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5LmlkKCkpIHsKICAgICAgICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V3JpdGluZ01vZGU6CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
aGFkSW1wb3J0YW50V3JpdGluZ01vZGUgfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgbV93cml0aW5nTW9kZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqcHJvcGVydHkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQud3JpdGluZ01vZGUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByb3BlcnR5LnZh
bHVlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50V3JpdGluZ01vZGUg
PSBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJl
Y3Rpb246CiAgICAgICAgICAgICAgICAgICAgIGlmICghaGFkSW1wb3J0YW50RGlyZWN0aW9uIHx8
IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZGly
ZWN0aW9uID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC50ZXh0RGlyZWN0aW9uID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGhhZEltcG9ydGFudERpcmVjdGlvbiA9IHByb3BlcnR5LmlzSW1wb3J0YW50KCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02ODQs
NiArNDI3LDggQEAgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVEaXJlY3Rpb25BbmRXcml0
aW5nTW9kZSgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0
eUNhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5oCmluZGV4
IDlmNTVjZmZiYzU1Li41NDhjOWRlMzc1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvUHJvcGVydHlDYXNjYWRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlD
YXNjYWRlLmgKQEAgLTQwLDcgKzQwLDEzIEBAIGNsYXNzIFByb3BlcnR5Q2FzY2FkZSB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZW51bSBJbmNsdWRlZFByb3Bl
cnRpZXMgeyBBbGwsIEluaGVyaXRlZE9ubHkgfTsKLSAgICBQcm9wZXJ0eUNhc2NhZGUoU3R5bGVS
ZXNvbHZlciYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgT3B0aW9uU2V0PENhc2NhZGVMZXZlbD4sIElu
Y2x1ZGVkUHJvcGVydGllcyA9IEluY2x1ZGVkUHJvcGVydGllczo6QWxsKTsKKworICAgIHN0cnVj
dCBEaXJlY3Rpb24geworICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb247CisgICAg
ICAgIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlOworICAgIH07CisKKyAgICBQcm9wZXJ0eUNhc2Nh
ZGUoY29uc3QgTWF0Y2hSZXN1bHQmLCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiwgSW5jbHVkZWRQ
cm9wZXJ0aWVzLCBEaXJlY3Rpb24pOwogICAgIFByb3BlcnR5Q2FzY2FkZShjb25zdCBQcm9wZXJ0
eUNhc2NhZGUmLCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPik7CiAKICAgICB+UHJvcGVydHlDYXNj
YWRlKCk7CkBAIC01OCwxMyArNjQsMTIgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQ3VzdG9tUHJv
cGVydHkoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgUHJvcGVydHkgY3VzdG9tUHJvcGVydHko
Y29uc3QgU3RyaW5nJikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5UHJvcGVydGllcyhpbnQgZmly
c3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSk7Ci0gICAgdm9pZCBhcHBseURlZmVycmVkUHJv
cGVydGllcygpOwotICAgIHZvaWQgYXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCk7Ci0gICAgdm9pZCBh
cHBseUN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCBhcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0
Y2hNYXNrID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpOworICAgIGNvbnN0IFZlY3Rv
cjxQcm9wZXJ0eSwgOD4mIGRlZmVycmVkUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fZGVm
ZXJyZWRQcm9wZXJ0aWVzOyB9CisgICAgY29uc3QgSGFzaE1hcDxBdG9tU3RyaW5nLCBQcm9wZXJ0
eT4mIGN1c3RvbVByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2N1c3RvbVByb3BlcnRpZXM7
IH0KIAotICAgIEJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKCkgeyByZXR1cm4gKm1fYnVpbGRl
clN0YXRlOyB9CisgICAgRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGly
ZWN0aW9uOyB9CisKKyAgICBjb25zdCBQcm9wZXJ0eUNhc2NhZGUqIHByb3BlcnR5Q2FzY2FkZUZv
clJvbGxiYWNrKENhc2NhZGVMZXZlbCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBidWls
ZENhc2NhZGUoT3B0aW9uU2V0PENhc2NhZGVMZXZlbD4pOwpAQCAtNzYsMjMgKzgxLDExIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBzZXREZWZlcnJlZChDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYsIHVu
c2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCwgU2NvcGVPcmRpbmFsKTsKICAgICBz
dGF0aWMgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKFByb3BlcnR5JiwgQ1NTUHJvcGVydHlJRCwg
Q1NTVmFsdWUmLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwsIFNjb3BlT3Jk
aW5hbCk7CiAKLSAgICBjb25zdCBQcm9wZXJ0eUNhc2NhZGUqIHByb3BlcnR5Q2FzY2FkZUZvclJv
bGxiYWNrKENhc2NhZGVMZXZlbCk7Ci0KLSAgICBlbnVtIEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFj
a2luZyB7IEVuYWJsZWQgPSAwLCBEaXNhYmxlZCB9OwotICAgIHRlbXBsYXRlPEN1c3RvbVByb3Bl
cnR5Q3ljbGVUcmFja2luZyB0cmFja0N5Y2xlcz4KLSAgICB2b2lkIGFwcGx5UHJvcGVydGllc0lt
cGwoaW50IGZpcnN0UHJvcGVydHksIGludCBsYXN0UHJvcGVydHkpOwotICAgIHZvaWQgYXBwbHlQ
cm9wZXJ0eShjb25zdCBQcm9wZXJ0eSYpOwotCi0gICAgUmVmPENTU1ZhbHVlPiByZXNvbHZlVmFs
dWUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlc29s
dmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSYpOwotCi0gICAg
dm9pZCByZXNvbHZlRGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoKTsKKyAgICBEaXJlY3Rpb24gcmVz
b2x2ZURpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKERpcmVjdGlvbiBpbmhlcml0ZWREaXJlY3Rpb24p
IGNvbnN0OwogCiAgICAgY29uc3QgTWF0Y2hSZXN1bHQmIG1fbWF0Y2hSZXN1bHQ7CiAgICAgY29u
c3QgSW5jbHVkZWRQcm9wZXJ0aWVzIG1faW5jbHVkZWRQcm9wZXJ0aWVzOwotCi0gICAgVGV4dERp
cmVjdGlvbiBtX2RpcmVjdGlvbjsKLSAgICBXcml0aW5nTW9kZSBtX3dyaXRpbmdNb2RlOworICAg
IGNvbnN0IERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIAogICAgIFByb3BlcnR5IG1fcHJvcGVydGll
c1tudW1DU1NQcm9wZXJ0aWVzICsgMl07CiAgICAgc3RkOjpiaXRzZXQ8bnVtQ1NTUHJvcGVydGll
cyArIDI+IG1fcHJvcGVydHlJc1ByZXNlbnQ7CkBAIC0xMDAsMTAgKzkzLDggQEAgcHJpdmF0ZToK
ICAgICBWZWN0b3I8UHJvcGVydHksIDg+IG1fZGVmZXJyZWRQcm9wZXJ0aWVzOwogICAgIEhhc2hN
YXA8QXRvbVN0cmluZywgUHJvcGVydHk+IG1fY3VzdG9tUHJvcGVydGllczsKIAotICAgIHN0ZDo6
dW5pcXVlX3B0cjxjb25zdCBQcm9wZXJ0eUNhc2NhZGU+IG1fYXV0aG9yUm9sbGJhY2tDYXNjYWRl
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBQcm9wZXJ0eUNhc2NhZGU+IG1fdXNlclJvbGxi
YWNrQ2FzY2FkZTsKLQotICAgIE9wdGlvbmFsPEJ1aWxkZXJTdGF0ZT4gbV9idWlsZGVyU3RhdGU7
CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgUHJvcGVydHlDYXNjYWRlPiBtX2F1
dGhvclJvbGxiYWNrQ2FzY2FkZTsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBQ
cm9wZXJ0eUNhc2NhZGU+IG1fdXNlclJvbGxiYWNrQ2FzY2FkZTsKIH07CiAKIGlubGluZSBib29s
IFByb3BlcnR5Q2FzY2FkZTo6aGFzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi45YzcxMDdhNjJkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQnVpbGRlci5jcHAKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hh
bmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxh
cEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxl
cmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykK
KyAqIENvcHlyaWdodCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCisKKyNp
bmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgIlN0eWxlQnVpbGRlckdlbmVyYXRlZC5oIgorI2luY2x1ZGUgIlN0eWxlRm9udFNpemVGdW5j
dGlvbnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFN0eWxlIHsKKworc3Rh
dGljIGNvbnN0IENTU1Byb3BlcnR5SUQgZmlyc3RMb3dQcmlvcml0eVByb3BlcnR5ID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJvcGVydHlJRD4obGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5ICsgMSk7CisKK3N0
YXRpYyBQcm9wZXJ0eUNhc2NhZGU6OkRpcmVjdGlvbiBkaXJlY3Rpb25Gcm9tU3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIHJldHVybiB7IHN0eWxlLmRpcmVjdGlvbigpLCBz
dHlsZS53cml0aW5nTW9kZSgpIH07Cit9CisKK0J1aWxkZXI6OkJ1aWxkZXIoU3R5bGVSZXNvbHZl
ciYgcmVzb2x2ZXIsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgT3B0aW9uU2V0PENh
c2NhZGVMZXZlbD4gY2FzY2FkZUxldmVscywgUHJvcGVydHlDYXNjYWRlOjpJbmNsdWRlZFByb3Bl
cnRpZXMgaW5jbHVkZWRQcm9wZXJ0aWVzKQorICAgIDogbV9jYXNjYWRlKG1hdGNoUmVzdWx0LCBj
YXNjYWRlTGV2ZWxzLCBpbmNsdWRlZFByb3BlcnRpZXMsIGRpcmVjdGlvbkZyb21TdHlsZSgqcmVz
b2x2ZXIuc3R5bGUoKSkpCisgICAgLCBtX3N0YXRlKCp0aGlzLCByZXNvbHZlcikKK3sKK30KKwor
QnVpbGRlcjo6fkJ1aWxkZXIoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgQnVpbGRlcjo6YXBwbHlBbGxQ
cm9wZXJ0aWVzKCkKK3sKKyAgICBhcHBseUhpZ2hQcmlvcml0eVByb3BlcnRpZXMoKTsKKyAgICBh
cHBseUxvd1ByaW9yaXR5UHJvcGVydGllcygpOworfQorCisvLyBIaWdoIHByaW9yaXR5IHByb3Bl
cnRpZXMgbWF5IGFmZmVjdCByZXNvbHV0aW9uIG9mIG90aGVyIHByb3BlcnRpZXMgKHRoZXkgYXJl
IG1vc3RseSBmb250IHJlbGF0ZWQpLgordm9pZCBCdWlsZGVyOjphcHBseUhpZ2hQcmlvcml0eVBy
b3BlcnRpZXMoKQoreworICAgIGFwcGx5UHJvcGVydGllcyhDU1NQcm9wZXJ0eVdlYmtpdFJ1YnlQ
b3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRSdWJ5UG9zaXRpb24pOworICAgIG1fc3RhdGUuYWRq
dXN0U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1YnkoKTsKKworI2lmIEVOQUJMRShEQVJLX01PREVf
Q1NTKQorICAgIC8vIFN1cHBvcnRlZCBjb2xvciBzY2hlbWVzIGNhbiBhZmZlY3QgcmVzb2x2ZWQg
Y29sb3JzLCBzbyB3ZSBuZWVkIHRvIGFwcGx5IHRoYXQgcHJvcGVydHkgYmVmb3JlIGFueSBjb2xv
ciBwcm9wZXJ0aWVzLgorICAgIGFwcGx5UHJvcGVydGllcyhDU1NQcm9wZXJ0eUNvbG9yU2NoZW1l
LCBDU1NQcm9wZXJ0eUNvbG9yU2NoZW1lKTsKKyNlbmRpZgorCisgICAgYXBwbHlQcm9wZXJ0aWVz
KGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSk7CisKKyAgICBtX3N0
YXRlLnVwZGF0ZUZvbnQoKTsKK30KKwordm9pZCBCdWlsZGVyOjphcHBseUxvd1ByaW9yaXR5UHJv
cGVydGllcygpCit7CisgICAgQVNTRVJUKCFtX3N0YXRlLmZvbnREaXJ0eSgpKTsKKworICAgIGFw
cGx5Q3VzdG9tUHJvcGVydGllcygpOworICAgIGFwcGx5UHJvcGVydGllcyhmaXJzdExvd1ByaW9y
aXR5UHJvcGVydHksIGxhc3RDU1NQcm9wZXJ0eSk7CisgICAgYXBwbHlEZWZlcnJlZFByb3BlcnRp
ZXMoKTsKKworICAgIEFTU0VSVCghbV9zdGF0ZS5mb250RGlydHkoKSk7Cit9CisKK3ZvaWQgQnVp
bGRlcjo6YXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFs
dWUmIHZhbHVlKQoreworICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKKworICAgIG1fc3RhdGUudXBkYXRlRm9udCgpOwor
fQorCit2b2lkIEJ1aWxkZXI6OmFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKCkKK3sKKyAgICBmb3Ig
KGF1dG8mIHByb3BlcnR5IDogbV9jYXNjYWRlLmRlZmVycmVkUHJvcGVydGllcygpKQorICAgICAg
ICBhcHBseUNhc2NhZGVQcm9wZXJ0eShwcm9wZXJ0eSk7Cit9CisKK3ZvaWQgQnVpbGRlcjo6YXBw
bHlQcm9wZXJ0aWVzKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5KQoreworICAg
IGlmIChMSUtFTFkobV9jYXNjYWRlLmN1c3RvbVByb3BlcnRpZXMoKS5pc0VtcHR5KCkpKQorICAg
ICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0aWVzSW1wbDxDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tp
bmc6OkRpc2FibGVkPihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHkpOworCisgICAgcmV0dXJu
IGFwcGx5UHJvcGVydGllc0ltcGw8Q3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nOjpFbmFibGVk
PihmaXJzdFByb3BlcnR5LCBsYXN0UHJvcGVydHkpOworfQorCit0ZW1wbGF0ZTxCdWlsZGVyOjpD
dXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmcgdHJhY2tDeWNsZXM+CitpbmxpbmUgdm9pZCBCdWls
ZGVyOjphcHBseVByb3BlcnRpZXNJbXBsKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3Bl
cnR5KQoreworICAgIGZvciAoaW50IGlkID0gZmlyc3RQcm9wZXJ0eTsgaWQgPD0gbGFzdFByb3Bl
cnR5OyArK2lkKSB7CisgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IHN0YXRpY19j
YXN0PENTU1Byb3BlcnR5SUQ+KGlkKTsKKyAgICAgICAgaWYgKCFtX2Nhc2NhZGUuaGFzUHJvcGVy
dHkocHJvcGVydHlJRCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQVNTRVJUKHBy
b3BlcnR5SUQgIT0gQ1NTUHJvcGVydHlDdXN0b20pOworICAgICAgICBhdXRvJiBwcm9wZXJ0eSA9
IG1fY2FzY2FkZS5wcm9wZXJ0eShwcm9wZXJ0eUlEKTsKKworICAgICAgICBpZiAodHJhY2tDeWNs
ZXMgPT0gQ3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nOjpFbmFibGVkKSB7CisgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkobV9zdGF0ZS5tX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzLmdldChwcm9wZXJ0
eUlEKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgaW4gYSBjeWNsZSAoZWcuIHNldHRp
bmcgZm9udCBzaXplIHVzaW5nIHJlZ2lzdGVyZWQgY3VzdG9tIHByb3BlcnR5IHZhbHVlIGNvbnRh
aW5pbmcgZW0pLgorICAgICAgICAgICAgICAgIC8vIFNvIHRoaXMgdmFsdWUgc2hvdWxkIGJlIHVu
c2V0LgorICAgICAgICAgICAgICAgIG1fc3RhdGUubV9hcHBsaWVkUHJvcGVydGllcy5zZXQocHJv
cGVydHlJRCk7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBwcm9wZXJ0eSBpcyBpbiBhIGN5Y2xl
LCBhbmQgb25seSB0aGUgcm9vdCBvZiB0aGUgY2FsbCBzdGFjayB3aWxsIGhhdmUgZmlyc3RQcm9w
ZXJ0eSAhPSBsYXN0UHJvcGVydHkuCisgICAgICAgICAgICAgICAgQVNTRVJUKGZpcnN0UHJvcGVy
dHkgPT0gbGFzdFByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1fc3RhdGUubV9pblByb2dyZXNzUHJvcGVydGllcy5zZXQocHJv
cGVydHlJRCk7CisgICAgICAgICAgICBhcHBseUNhc2NhZGVQcm9wZXJ0eShwcm9wZXJ0eSk7Cisg
ICAgICAgICAgICBtX3N0YXRlLm1fYXBwbGllZFByb3BlcnRpZXMuc2V0KHByb3BlcnR5SUQpOwor
ICAgICAgICAgICAgbV9zdGF0ZS5tX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlE
LCBmYWxzZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IElmIHdlIGRvbid0IGhhdmUgYW55IGN1c3RvbSBwcm9wZXJ0aWVzLCB0aGVuIHRoZXJlIGNhbid0
IGJlIGFueSBjeWNsZXMuCisgICAgICAgIGFwcGx5Q2FzY2FkZVByb3BlcnR5KHByb3BlcnR5KTsK
KyAgICB9Cit9CisKK3ZvaWQgQnVpbGRlcjo6YXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCkKK3sKKyAg
ICBmb3IgKGF1dG8mIG5hbWUgOiBtX2Nhc2NhZGUuY3VzdG9tUHJvcGVydGllcygpLmtleXMoKSkK
KyAgICAgICAgYXBwbHlDdXN0b21Qcm9wZXJ0eShuYW1lKTsKK30KKwordm9pZCBCdWlsZGVyOjph
cHBseUN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobV9zdGF0
ZS5tX2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmNvbnRhaW5zKG5hbWUpIHx8ICFtX2Nhc2NhZGUu
Y3VzdG9tUHJvcGVydGllcygpLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIHByb3BlcnR5ID0gbV9jYXNjYWRlLmN1c3RvbVByb3BlcnR5KG5hbWUpOworICAgIGJv
b2wgaW5DeWNsZSA9IG1fc3RhdGUubV9pblByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5jb250YWlu
cyhuYW1lKTsKKworICAgIGZvciAoYXV0byBpbmRleCA6IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRj
aERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoVmlzaXRlZCB9KSB7CisgICAgICAgIGlmICghcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpbmRleCAhPSBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoRGVmYXVsdCAmJiBtX3N0YXRlLnN0eWxlKCkuaW5zaWRlTGluaygpID09IEluc2lk
ZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFJlZjxD
U1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiB2YWx1ZVRvQXBwbHkgPSBDU1NDdXN0b21Qcm9wZXJ0eVZh
bHVlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnByb3BlcnR5LmNz
c1ZhbHVlW2luZGV4XSkpOworCisgICAgICAgIGlmIChpbkN5Y2xlKSB7CisgICAgICAgICAgICBt
X3N0YXRlLm1fYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuYWRkKG5hbWUpOyAvLyBNYWtlIHN1cmUg
d2UgZG8gbm90IHRyeSB0byBhcHBseSB0aGlzIHByb3BlcnR5IGFnYWluIHdoaWxlIHJlc29sdmlu
ZyBpdC4KKyAgICAgICAgICAgIHZhbHVlVG9BcHBseSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6
OmNyZWF0ZVdpdGhJRChuYW1lLCBDU1NWYWx1ZUludmFsaWQpOworICAgICAgICB9CisKKyAgICAg
ICAgbV9zdGF0ZS5tX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tLmFkZChuYW1lKTsKKworICAg
ICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VW
YWx1ZT4+KHZhbHVlVG9BcHBseS0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZT4gcGFyc2VkVmFsdWUgPSByZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlDdXN0
b20sIHZhbHVlVG9BcHBseS5nZXQoKSk7CisKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLm1fYXBw
bGllZEN1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFtZSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOyAvLyBUaGVyZSB3YXMgYSBjeWNsZSBhbmQgdGhlIHZhbHVlIHdhcyByZXNldCwgc28gYmFp
bC4KKworICAgICAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICBwYXJz
ZWRWYWx1ZSA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZVdpdGhJRChuYW1lLCBDU1NW
YWx1ZVVuc2V0KTsKKworICAgICAgICAgICAgdmFsdWVUb0FwcGx5ID0gZG93bmNhc3Q8Q1NTQ3Vz
dG9tUHJvcGVydHlWYWx1ZT4oKnBhcnNlZFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtX3N0YXRlLm1faW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20uY29udGFpbnMobmFtZSkpIHsK
KyAgICAgICAgICAgIG1fc3RhdGUubV9saW5rTWF0Y2ggPSBpbmRleDsKKyAgICAgICAgICAgIGFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSwgaW5kZXgp
OworICAgICAgICB9CisgICAgfQorCisgICAgbV9zdGF0ZS5tX2xpbmtNYXRjaCA9IFNlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hEZWZhdWx0OworICAgIG1fc3RhdGUubV9pblByb2dyZXNzUHJvcGVydGll
c0N1c3RvbS5yZW1vdmUobmFtZSk7CisgICAgbV9zdGF0ZS5tX2FwcGxpZWRDdXN0b21Qcm9wZXJ0
aWVzLmFkZChuYW1lKTsKKworICAgIGZvciAoYXV0byBpbmRleCA6IHsgU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rLCBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoVmlzaXRlZCB9KSB7CisgICAgICAgIGlmICghcHJvcGVydHkuY3NzVmFsdWVbaW5k
ZXhdKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpbmRleCAhPSBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiBtX3N0YXRlLnN0eWxlKCkuaW5zaWRlTGluaygpID09
IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiB2YWx1ZVRvQXBwbHkgPSBDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnByb3Bl
cnR5LmNzc1ZhbHVlW2luZGV4XSkpOworCisgICAgICAgIGlmIChpbkN5Y2xlICYmIFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8UmVmPENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU+Pih2YWx1ZVRvQXBw
bHktPnZhbHVlKCkpKSB7CisgICAgICAgICAgICAvLyBSZXNvbHZlIHRoaXMgdmFsdWUgc28gdGhh
dCB3ZSByZXNldCBpdHMgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgcmVzb2x2ZWRWYXJpYWJs
ZVZhbHVlKENTU1Byb3BlcnR5Q3VzdG9tLCB2YWx1ZVRvQXBwbHkuZ2V0KCkpOworICAgICAgICB9
CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBCdWlsZGVyOjphcHBseUNhc2NhZGVQcm9wZXJ0eShj
b25zdCBQcm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5JiBwcm9wZXJ0eSkKK3sKKyAgICBtX3N0YXRl
Lm1fY2FzY2FkZUxldmVsID0gcHJvcGVydHkubGV2ZWw7CisgICAgbV9zdGF0ZS5tX3N0eWxlU2Nv
cGVPcmRpbmFsID0gcHJvcGVydHkuc3R5bGVTY29wZU9yZGluYWw7CisKKyAgICBhdXRvIGFwcGx5
V2l0aExpbmtNYXRjaCA9IFsmXShTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgbGlua01h
dGNoKSB7CisgICAgICAgIGlmIChwcm9wZXJ0eS5jc3NWYWx1ZVtsaW5rTWF0Y2hdKSB7CisgICAg
ICAgICAgICBtX3N0YXRlLm1fbGlua01hdGNoID0gbGlua01hdGNoOworICAgICAgICAgICAgYXBw
bHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaF0sIGxp
bmtNYXRjaCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXBwbHlXaXRoTGlua01hdGNoKFNl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKKworICAgIGlmIChtX3N0YXRlLnN0eWxlKCku
aW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rKTsKKyAg
ICBhcHBseVdpdGhMaW5rTWF0Y2goU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpOworCisg
ICAgbV9zdGF0ZS5tX2xpbmtNYXRjaCA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0Owor
fQorCit2b2lkIEJ1aWxkZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUmIHZhbHVlLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgbGlua01hdGNoTWFzaykK
K3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFpc1Nob3J0aGFuZENTU1Byb3BlcnR5KGlkKSwg
IlNob3J0aGFuZCBwcm9wZXJ0eSBpZCA9ICVkIHdhc24ndCBleHBhbmRlZCBhdCBwYXJzaW5nIHRp
bWUiLCBpZCk7CisKKyAgICBhdXRvIHZhbHVlVG9BcHBseSA9IHJlc29sdmVWYWx1ZShpZCwgdmFs
dWUpOworCisgICAgaWYgKENTU1Byb3BlcnR5Ojppc0RpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQp
KSB7CisgICAgICAgIGF1dG8gZGlyZWN0aW9uID0gbV9jYXNjYWRlLmRpcmVjdGlvbigpOworICAg
ICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25B
d2FyZVByb3BlcnR5KGlkLCBkaXJlY3Rpb24udGV4dERpcmVjdGlvbiwgZGlyZWN0aW9uLndyaXRp
bmdNb2RlKTsKKyAgICAgICAgQVNTRVJUKG5ld0lkICE9IGlkKTsKKyAgICAgICAgcmV0dXJuIGFw
cGx5UHJvcGVydHkobmV3SWQsIHZhbHVlVG9BcHBseS5nZXQoKSwgbGlua01hdGNoTWFzayk7Cisg
ICAgfQorCisgICAgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSogY3VzdG9tUHJvcGVydHlWYWx1ZSA9
IG51bGxwdHI7CisgICAgQ1NTVmFsdWVJRCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPSBDU1NWYWx1
ZUludmFsaWQ7CisgICAgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiBjdXN0b21Qcm9wZXJ0
eVJlZ2lzdGVyZWQgPSBudWxscHRyOworCisgICAgaWYgKGlkID09IENTU1Byb3BlcnR5Q3VzdG9t
KSB7CisgICAgICAgIGN1c3RvbVByb3BlcnR5VmFsdWUgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlPih2YWx1ZVRvQXBwbHkucHRyKCkpOworICAgICAgICBBU1NFUlQoY3VzdG9tUHJv
cGVydHlWYWx1ZS0+aXNSZXNvbHZlZCgpKTsKKyAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8Q1NTVmFsdWVJRD4oY3VzdG9tUHJvcGVydHlWYWx1ZS0+dmFsdWUoKSkpCisgICAgICAg
ICAgICBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPSBXVEY6OmdldDxDU1NWYWx1ZUlEPihjdXN0b21Q
cm9wZXJ0eVZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgYXV0byYgbmFtZSA9IGN1c3RvbVByb3Bl
cnR5VmFsdWUtPm5hbWUoKTsKKyAgICAgICAgY3VzdG9tUHJvcGVydHlSZWdpc3RlcmVkID0gbV9z
dGF0ZS5kb2N1bWVudCgpLmdldENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgpLmdldChu
YW1lKTsKKyAgICB9CisKKyAgICBib29sIGlzSW5oZXJpdCA9IHZhbHVlVG9BcHBseS0+aXNJbmhl
cml0ZWRWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZUluaGVyaXQ7
CisgICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZVRvQXBwbHktPmlzSW5pdGlhbFZhbHVlKCkgfHwg
Y3VzdG9tUHJvcGVydHlWYWx1ZUlEID09IENTU1ZhbHVlSW5pdGlhbDsKKworICAgIGJvb2wgaXNV
bnNldCA9IHZhbHVlVG9BcHBseS0+aXNVbnNldFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1
ZUlEID09IENTU1ZhbHVlVW5zZXQ7CisgICAgYm9vbCBpc1JldmVydCA9IHZhbHVlVG9BcHBseS0+
aXNSZXZlcnRWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZVJldmVy
dDsKKworICAgIGlmIChpc1JldmVydCkgeworICAgICAgICBpZiAoYXV0byogcm9sbGJhY2sgPSBt
X2Nhc2NhZGUucHJvcGVydHlDYXNjYWRlRm9yUm9sbGJhY2sobV9zdGF0ZS5tX2Nhc2NhZGVMZXZl
bCkpIHsKKyAgICAgICAgICAgIC8vIFdpdGggdGhlIHJvbGxiYWNrIGNhc2NhZGUgYnVpbHQsIHdl
IG5lZWQgdG8gb2J0YWluIHRoZSBwcm9wZXJ0eSBhbmQgYXBwbHkgaXQuIElmIHRoZSBwcm9wZXJ0
eSBpcworICAgICAgICAgICAgLy8gbm90IHByZXNlbnQsIHRoZW4gd2UgYmVoYXZlIGxpa2UgInVu
c2V0LiIgT3RoZXJ3aXNlIHdlIGFwcGx5IHRoZSBwcm9wZXJ0eSBpbnN0ZWFkIG9mCisgICAgICAg
ICAgICAvLyBvdXIgb3duLgorICAgICAgICAgICAgaWYgKGN1c3RvbVByb3BlcnR5VmFsdWUpIHsK
KyAgICAgICAgICAgICAgICBpZiAoY3VzdG9tUHJvcGVydHlSZWdpc3RlcmVkICYmIGN1c3RvbVBy
b3BlcnR5UmVnaXN0ZXJlZC0+aW5oZXJpdHMgJiYgcm9sbGJhY2stPmhhc0N1c3RvbVByb3BlcnR5
KGN1c3RvbVByb3BlcnR5VmFsdWUtPm5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBwcm9wZXJ0eSA9IHJvbGxiYWNrLT5jdXN0b21Qcm9wZXJ0eShjdXN0b21Qcm9wZXJ0eVZhbHVl
LT5uYW1lKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuY3NzVmFsdWVbbGlu
a01hdGNoTWFza10pCisgICAgICAgICAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHByb3Bl
cnR5LmlkLCAqcHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoTWFza10sIGxpbmtNYXRjaE1hc2sp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIGlmIChyb2xsYmFjay0+aGFzUHJvcGVydHkoaWQpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgcHJvcGVydHkgPSByb2xsYmFjay0+cHJvcGVydHkoaWQpOworICAgICAgICAg
ICAgICAgIGlmIChwcm9wZXJ0eS5jc3NWYWx1ZVtsaW5rTWF0Y2hNYXNrXSkKKyAgICAgICAgICAg
ICAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnByb3BlcnR5LmNzc1ZhbHVlW2xp
bmtNYXRjaE1hc2tdLCBsaW5rTWF0Y2hNYXNrKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpc1Vuc2V0ID0gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAoaXNVbnNldCkgeworICAgICAgICBpZiAoQ1NTUHJvcGVydHk6OmlzSW5oZXJp
dGVkUHJvcGVydHkoaWQpKQorICAgICAgICAgICAgaXNJbmhlcml0ID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgaXNJbml0aWFsID0gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NFUlQo
IWlzSW5oZXJpdCB8fCAhaXNJbml0aWFsKTsgLy8gaXNJbmhlcml0IC0+ICFpc0luaXRpYWwgJiYg
aXNJbml0aWFsIC0+ICFpc0luaGVyaXQKKworICAgIGlmIChtX3N0YXRlLmFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUoKSAmJiAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSB7
CisgICAgICAgIC8vIExpbWl0IHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8g
b25seSB0aGUgb25lcyBob25vcmVkIGJ5IDp2aXNpdGVkLgorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGlzSW5oZXJpdCAmJiAhQ1NTUHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVy
dHkoaWQpKQorICAgICAgICBtX3N0YXRlLnN0eWxlKCkuc2V0SGFzRXhwbGljaXRseUluaGVyaXRl
ZFByb3BlcnRpZXMoKTsKKworI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQorICAgIGlmIChp
czxDU1NQYWludEltYWdlVmFsdWU+KHZhbHVlVG9BcHBseSkpIHsKKyAgICAgICAgYXV0byYgbmFt
ZSA9IGRvd25jYXN0PENTU1BhaW50SW1hZ2VWYWx1ZT4odmFsdWVUb0FwcGx5LmdldCgpKS5uYW1l
KCk7CisgICAgICAgIGlmIChhdXRvKiBwYWludFdvcmtsZXQgPSBjb25zdF9jYXN0PERvY3VtZW50
Jj4obV9zdGF0ZS5kb2N1bWVudCgpKS5wYWludFdvcmtsZXRHbG9iYWxTY29wZUZvck5hbWUobmFt
ZSkpIHsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2socGFpbnRXb3JrbGV0LT5w
YWludERlZmluaXRpb25Mb2NrKCkpOworICAgICAgICAgICAgaWYgKGF1dG8qIHJlZ2lzdHJhdGlv
biA9IHBhaW50V29ya2xldC0+cGFpbnREZWZpbml0aW9uTWFwKCkuZ2V0KG5hbWUpKSB7CisgICAg
ICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IHJlZ2lzdHJhdGlvbi0+aW5wdXRQcm9w
ZXJ0aWVzKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCkuYWRkQ3VzdG9tUGFp
bnRXYXRjaFByb3BlcnR5KHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyNlbmRpZgorCisgICAgQnVpbGRlckdlbmVyYXRlZDo6YXBwbHlQcm9wZXJ0eShpZCwgbV9z
dGF0ZSwgdmFsdWVUb0FwcGx5LmdldCgpLCBpc0luaXRpYWwsIGlzSW5oZXJpdCwgY3VzdG9tUHJv
cGVydHlSZWdpc3RlcmVkKTsKK30KKworUmVmPENTU1ZhbHVlPiBCdWlsZGVyOjpyZXNvbHZlVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBDU1NWYWx1ZSYgdmFsdWUpCit7CisgICAgaWYg
KCF2YWx1ZS5oYXNWYXJpYWJsZVJlZmVyZW5jZXMoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOwor
CisgICAgYXV0byB2YXJpYWJsZVZhbHVlID0gcmVzb2x2ZWRWYXJpYWJsZVZhbHVlKHByb3BlcnR5
SUQsIHZhbHVlKTsKKyAgICAvLyBJZiB0aGUgY2FzY2FkZSBoYXMgYWxyZWFkeSBhcHBsaWVkIHRo
aXMgaWQsIHRoZW4gd2UgZGV0ZWN0ZWQgYSBjeWNsZSwgYW5kIHRoaXMgdmFsdWUgc2hvdWxkIGJl
IHVuc2V0LgorICAgIGlmICghdmFyaWFibGVWYWx1ZSB8fCBtX3N0YXRlLm1fYXBwbGllZFByb3Bl
cnRpZXMuZ2V0KHByb3BlcnR5SUQpKSB7CisgICAgICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNJbmhl
cml0ZWRQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKKyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUluaGVyaXRlZFZhbHVlKCk7CisgICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUV4cGxpY2l0SW5pdGlhbFZhbHVlKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuICp2YXJpYWJsZVZhbHVlOworfQorCitSZWZQdHI8Q1NTVmFsdWU+
IEJ1aWxkZXI6OnJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJRCwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQoreworICAgIENTU1BhcnNlciBwYXJzZXIobV9zdGF0ZS5kb2N1
bWVudCgpKTsKKyAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVu
Y2VzKHByb3BJRCwgdmFsdWUsIG1fc3RhdGUpOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQnVpbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZmMw
ODBiZDIyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVp
bGRlci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlByb3BlcnR5Q2FzY2FkZS5oIgorI2luY2x1ZGUgIlN0eWxlQnVpbGRlclN0YXRlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFN0eWxlIHsKKworY2xhc3MgQnVp
bGRlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQnVpbGRl
cihTdHlsZVJlc29sdmVyJiwgY29uc3QgTWF0Y2hSZXN1bHQmLCBPcHRpb25TZXQ8Q2FzY2FkZUxl
dmVsPiwgUHJvcGVydHlDYXNjYWRlOjpJbmNsdWRlZFByb3BlcnRpZXMgPSBQcm9wZXJ0eUNhc2Nh
ZGU6OkluY2x1ZGVkUHJvcGVydGllczo6QWxsKTsKKyAgICB+QnVpbGRlcigpOworCisgICAgdm9p
ZCBhcHBseUFsbFByb3BlcnRpZXMoKTsKKyAgICB2b2lkIGFwcGx5SGlnaFByaW9yaXR5UHJvcGVy
dGllcygpOworICAgIHZvaWQgYXBwbHlMb3dQcmlvcml0eVByb3BlcnRpZXMoKTsKKworICAgIHZv
aWQgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpIHsgYXBwbHlQcm9wZXJ0
aWVzKHByb3BlcnR5SUQsIHByb3BlcnR5SUQpOyB9CisgICAgdm9pZCBhcHBseUN1c3RvbVByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICB2b2lkIGFwcGx5UHJvcGVydHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYpOworCisgICAgQnVpbGRlclN0YXRlJiBzdGF0ZSgpIHsg
cmV0dXJuIG1fc3RhdGU7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGFwcGx5UHJvcGVydGllcyhp
bnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSk7CisgICAgdm9pZCBhcHBseURlZmVy
cmVkUHJvcGVydGllcygpOworICAgIHZvaWQgYXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCk7CisKKyAg
ICBlbnVtIEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyB7IEVuYWJsZWQgPSAwLCBEaXNhYmxl
ZCB9OworICAgIHRlbXBsYXRlPEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZyB0cmFja0N5Y2xl
cz4KKyAgICB2b2lkIGFwcGx5UHJvcGVydGllc0ltcGwoaW50IGZpcnN0UHJvcGVydHksIGludCBs
YXN0UHJvcGVydHkpOworICAgIHZvaWQgYXBwbHlDYXNjYWRlUHJvcGVydHkoY29uc3QgUHJvcGVy
dHlDYXNjYWRlOjpQcm9wZXJ0eSYpOworICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZSYsIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayk7CisKKyAgICBS
ZWY8Q1NTVmFsdWU+IHJlc29sdmVWYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYpOworICAg
IFJlZlB0cjxDU1NWYWx1ZT4gcmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5SUQsIGNv
bnN0IENTU1ZhbHVlJik7CisKKyAgICBjb25zdCBQcm9wZXJ0eUNhc2NhZGUgbV9jYXNjYWRlOwor
ICAgIEJ1aWxkZXJTdGF0ZSBtX3N0YXRlOworfTsKKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAppbmRleCA5MDRjZDAzNDcyMi4uZWQwOTc2YjlhMDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCkBAIC0xNjEyLDcgKzE2
MTIsOCBAQCBpbmxpbmUgdm9pZCBCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoQnVp
bGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbAogICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUgfHwgIShwcmltaXRpdmVWYWx1
ZS5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgp
KSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CiAgICAgICAgICAg
ICBzaXplID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSgmYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCksICZidWlsZGVyU3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpLCBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCks
IDEuMGYsIHRydWUpKTsKLSAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZVJlc29sdmVyKCku
c3RhdGUoKS5zZXRGb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMocHJpbWl0aXZlVmFsdWUuaXNWaWV3
cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUu
aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXRIYXNWaWV3cG9ydFVuaXRzKCk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpCiAgICAgICAgICAgICBzaXplID0gKHByaW1pdGl2
ZVZhbHVlLmZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOwogICAgICAgICBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKaW5kZXggMTg0MWQy
N2NkZjAuLjkzNTZkZjExOGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZUJ1aWxkZXJTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVy
U3RhdGUuY3BwCkBAIC0xLDM4ICsxLDQ1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgQWxsYW4g
U2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAod2Via2l0QG5pY2tzaGFua3MuY29tKQorICogQ29weXJp
Z2h0IChDKSAyMDA1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChjKSAy
MDExLCBDb2RlIEF1cm9yYSBGb3J1bS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCiAgKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlN0eWxlQnVpbGRlclN0YXRlLmgiCiAKKyNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlN0eWxlQnVpbGRlci5o
IgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFt
ZXNwYWNlIFN0eWxlIHsKIAotQnVpbGRlclN0YXRlOjpCdWlsZGVyU3RhdGUoUHJvcGVydHlDYXNj
YWRlJiBjYXNjYWRlLCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQotICAgIDogbV9jYXNj
YWRlKGNhc2NhZGUpCitCdWlsZGVyU3RhdGU6OkJ1aWxkZXJTdGF0ZShCdWlsZGVyJiBidWlsZGVy
LCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQorICAgIDogbV9idWlsZGVyKGJ1aWxkZXIp
CiAgICAgLCBtX3N0eWxlTWFwKCp0aGlzKQogICAgICwgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpCiAg
ICAgLCBtX3N0eWxlUmVzb2x2ZXIoc3R5bGVSZXNvbHZlcikKQEAgLTQ2LDE0ICs1MywyMiBAQCBC
dWlsZGVyU3RhdGU6OkJ1aWxkZXJTdGF0ZShQcm9wZXJ0eUNhc2NhZGUmIGNhc2NhZGUsIFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZQogICAgIEFTU0VSVChzdHlsZVJlc29sdmVyLnBhcmVudFN0
eWxlKCkpOwogfQogCisvLyBTVkcgaGFuZGxlcyB6b29taW5nIGluIGEgZGlmZmVyZW50IHdheSBj
b21wYXJlZCB0byBDU1MuIFRoZSB3aG9sZSBkb2N1bWVudCBpcyBzY2FsZWQgaW5zdGVhZAorLy8g
b2YgZWFjaCBpbmRpdmlkdWFsIGxlbmd0aCB2YWx1ZSBpbiB0aGUgcmVuZGVyIHN0eWxlIC8gdHJl
ZS4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGgqKCkKKy8vIG11bHRpcGxpZXMgZWFj
aCByZXNvbHZlZCBsZW5ndGggd2l0aCB0aGUgem9vbSBtdWx0aXBsaWVyIC0gc28gZm9yIFNWRyB3
ZSBuZWVkIHRvIGRpc2FibGUgdGhhdC4KKy8vIFRob3VnaCBhbGwgQ1NTIHZhbHVlcyB0aGF0IGNh
biBiZSBhcHBsaWVkIHRvIG91dGVybW9zdCA8c3ZnPiBlbGVtZW50cyAod2lkdGgvaGVpZ2h0L2Jv
cmRlci9wYWRkaW5nLi4uKQorLy8gbmVlZCB0byByZXNwZWN0IHRoZSBzY2FsaW5nLiBSZW5kZXJC
b3ggKHRoZSBwYXJlbnQgY2xhc3Mgb2YgUmVuZGVyU1ZHUm9vdCkgZ3JhYnMgdmFsdWVzIGxpa2UK
Ky8vIHdpZHRoL2hlaWdodC9ib3JkZXIvcGFkZGluZy8uLi4gZnJvbSB0aGUgUmVuZGVyU3R5bGUg
LT4gZm9yIFNWRyB0aGVzZSB2YWx1ZXMgd291bGQgbmV2ZXIgc2NhbGUsCisvLyBpZiB3ZSdkIHBh
c3MgYSAxLjAgem9vbSBmYWN0b3IgZXZlcnlod2VyZS4gU28gd2Ugb25seSBwYXNzIGEgem9vbSBm
YWN0b3Igb2YgMS4wIGZvciBzcGVjaWZpYworLy8gcHJvcGVydGllcyB0aGF0IGFyZSBOT1QgYWxs
b3dlZCB0byBzY2FsZSB3aXRoaW4gYSB6b29tZWQgU1ZHIGRvY3VtZW50IChsZXR0ZXIvd29yZC1z
cGFjaW5nL2ZvbnQtc2l6ZSkuCiBib29sIEJ1aWxkZXJTdGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLnVzZVNWR1pvb21SdWxlcygpOwor
ICAgIHJldHVybiBpczxTVkdFbGVtZW50PihlbGVtZW50KCkpOwogfQogCiBib29sIEJ1aWxkZXJT
dGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9z
dHlsZVJlc29sdmVyLnVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpOworICAgIHJldHVybiBpczxT
VkdFbGVtZW50PihlbGVtZW50KCkpICYmICEoaXM8U1ZHU1ZHRWxlbWVudD4oKmVsZW1lbnQoKSkg
JiYgZWxlbWVudCgpLT5wYXJlbnROb2RlKCkpOwogfQogCiBSZWZQdHI8U3R5bGVJbWFnZT4gQnVp
bGRlclN0YXRlOjpjcmVhdGVTdHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKQEAgLTcxLDkgKzg2
LDExMSBAQCBDb2xvciBCdWlsZGVyU3RhdGU6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0
IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSwgYm9vbAogICAgIHJldHVybiBtX3N0eWxlUmVzb2x2
ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUodmFsdWUsIGZvclZpc2l0ZWRMaW5rKTsKIH0KIAot
dm9pZCBCdWlsZGVyU3RhdGU6OnNldEZvbnRTaXplKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBmbG9hdCBzaXplKQordm9pZCBCdWlsZGVyU3RhdGU6OmFkanVzdFN0eWxlRm9y
SW50ZXJDaGFyYWN0ZXJSdWJ5KCkKK3sKKyAgICBpZiAobV9zdHlsZS5ydWJ5UG9zaXRpb24oKSAh
PSBSdWJ5UG9zaXRpb246OkludGVyQ2hhcmFjdGVyIHx8ICFlbGVtZW50KCkgfHwgIWVsZW1lbnQo
KS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnJ0VGFnKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9zdHlsZS5zZXRUZXh0QWxpZ24oVGV4dEFsaWduTW9kZTo6Q2VudGVyKTsKKyAgICBpZiAobV9z
dHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICBtX3N0eWxlLnNldFdyaXRp
bmdNb2RlKExlZnRUb1JpZ2h0V3JpdGluZ01vZGUpOworfQorCit2b2lkIEJ1aWxkZXJTdGF0ZTo6
dXBkYXRlRm9udCgpCit7CisgICAgaWYgKCFtX2ZvbnREaXJ0eSAmJiBtX3N0eWxlLmZvbnRDYXNj
YWRlKCkuZm9udHMoKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgRU5BQkxFKFRFWFRfQVVUT1NJ
WklORykKKyAgICB1cGRhdGVGb250Rm9yVGV4dFNpemVBZGp1c3QoKTsKKyNlbmRpZgorICAgIHVw
ZGF0ZUZvbnRGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKCk7CisgICAgdXBkYXRlRm9udEZvclpvb21D
aGFuZ2UoKTsKKyAgICB1cGRhdGVGb250Rm9yT3JpZW50YXRpb25DaGFuZ2UoKTsKKworICAgIG1f
c3R5bGUuZm9udENhc2NhZGUoKS51cGRhdGUoJmNvbnN0X2Nhc3Q8RG9jdW1lbnQmPihkb2N1bWVu
dCgpKS5mb250U2VsZWN0b3IoKSk7CisKKyAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOworfQorCisj
aWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKK3ZvaWQgQnVpbGRlclN0YXRlOjp1cGRhdGVGb250
Rm9yVGV4dFNpemVBZGp1c3QoKQoreworICAgIGlmIChtX3N0eWxlLnRleHRTaXplQWRqdXN0KCku
aXNBdXRvKCkKKyAgICAgICAgfHwgIWRvY3VtZW50KCkuc2V0dGluZ3MoKS50ZXh0QXV0b3Npemlu
Z0VuYWJsZWQoKQorICAgICAgICB8fCAoZG9jdW1lbnQoKS5zZXR0aW5ncygpLnRleHRBdXRvc2l6
aW5nVXNlc0lkZW1wb3RlbnRNb2RlKCkgJiYgIW1fc3R5bGUudGV4dFNpemVBZGp1c3QoKS5pc05v
bmUoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbmV3Rm9udERlc2NyaXB0aW9uID0g
bV9zdHlsZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBpZiAoIW1fc3R5bGUudGV4dFNpemVBZGp1
c3QoKS5pc05vbmUoKSkKKyAgICAgICAgbmV3Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZShuZXdGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpICogbV9zdHlsZS50ZXh0U2l6ZUFk
anVzdCgpLm11bHRpcGxpZXIoKSk7CisgICAgZWxzZQorICAgICAgICBuZXdGb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkpOwor
CisgICAgbV9zdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRp
b24pKTsKK30KKyNlbmRpZgorCit2b2lkIEJ1aWxkZXJTdGF0ZTo6dXBkYXRlRm9udEZvclpvb21D
aGFuZ2UoKQoreworICAgIGlmIChtX3N0eWxlLmVmZmVjdGl2ZVpvb20oKSA9PSBtX3BhcmVudFN0
eWxlLmVmZmVjdGl2ZVpvb20oKSAmJiBtX3N0eWxlLnRleHRab29tKCkgPT0gbV9wYXJlbnRTdHls
ZS50ZXh0Wm9vbSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBhdXRvJiBjaGlsZEZv
bnQgPSBtX3N0eWxlLmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gbmV3Rm9udERlc2NyaXB0
aW9uID0gY2hpbGRGb250OworICAgIHNldEZvbnRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hp
bGRGb250LnNwZWNpZmllZFNpemUoKSk7CisKKyAgICBtX3N0eWxlLnNldEZvbnREZXNjcmlwdGlv
bihXVEZNb3ZlKG5ld0ZvbnREZXNjcmlwdGlvbikpOworfQorCit2b2lkIEJ1aWxkZXJTdGF0ZTo6
dXBkYXRlRm9udEZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoKQoreworICAgIGNvbnN0IGF1dG8mIGNo
aWxkRm9udCA9IG1fc3R5bGUuZm9udERlc2NyaXB0aW9uKCk7CisKKyAgICBpZiAoY2hpbGRGb250
LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IGF1dG8mIHBh
cmVudEZvbnQgPSBtX3BhcmVudFN0eWxlLmZvbnREZXNjcmlwdGlvbigpOworICAgIGlmIChjaGls
ZEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID09IHBhcmVudEZvbnQudXNlRml4ZWREZWZhdWx0
U2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBrbm93IHRoZSBwYXJlbnQgaXMg
bW9ub3NwYWNlIG9yIHRoZSBjaGlsZCBpcyBtb25vc3BhY2UsIGFuZCB0aGF0IGZvbnQKKyAgICAv
LyBzaXplIHdhcyB1bnNwZWNpZmllZC4gV2Ugd2FudCB0byBzY2FsZSBvdXIgZm9udCBzaXplIGFz
IGFwcHJvcHJpYXRlLgorICAgIC8vIElmIHRoZSBmb250IHVzZXMgYSBrZXl3b3JkIHNpemUsIHRo
ZW4gd2UgcmVmZXRjaCBmcm9tIHRoZSB0YWJsZSByYXRoZXIgdGhhbgorICAgIC8vIG11bHRpcGx5
aW5nIGJ5IG91ciBzY2FsZSBmYWN0b3IuCisgICAgZmxvYXQgc2l6ZSA9IFsmXSB7CisgICAgICAg
IGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gY2hpbGRGb250LmtleXdvcmRTaXplQXNJ
ZGVudGlmaWVyKCkpCisgICAgICAgICAgICByZXR1cm4gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29y
ZChzaXplSWRlbnRpZmllciwgY2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgZG9jdW1l
bnQoKSk7CisKKyAgICAgICAgYXV0byBmaXhlZFNpemUgPSAgZG9jdW1lbnQoKS5zZXR0aW5ncygp
LmRlZmF1bHRGaXhlZEZvbnRTaXplKCk7CisgICAgICAgIGF1dG8gZGVmYXVsdFNpemUgPSAgZG9j
dW1lbnQoKS5zZXR0aW5ncygpLmRlZmF1bHRGb250U2l6ZSgpOworICAgICAgICBmbG9hdCBmaXhl
ZFNjYWxlRmFjdG9yID0gKGZpeGVkU2l6ZSAmJiBkZWZhdWx0U2l6ZSkgPyBzdGF0aWNfY2FzdDxm
bG9hdD4oZml4ZWRTaXplKSAvIGRlZmF1bHRTaXplIDogMTsKKyAgICAgICAgcmV0dXJuIHBhcmVu
dEZvbnQudXNlRml4ZWREZWZhdWx0U2l6ZSgpID8gY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSAv
IGZpeGVkU2NhbGVGYWN0b3IgOiBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpICogZml4ZWRTY2Fs
ZUZhY3RvcjsKKyAgICB9KCk7CisKKyAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IGNoaWxk
Rm9udDsKKyAgICBzZXRGb250U2l6ZShuZXdGb250RGVzY3JpcHRpb24sIHNpemUpOworICAgIG1f
c3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUobmV3Rm9udERlc2NyaXB0aW9uKSk7Cit9
CisKK3ZvaWQgQnVpbGRlclN0YXRlOjp1cGRhdGVGb250Rm9yT3JpZW50YXRpb25DaGFuZ2UoKQor
eworICAgIGF1dG8gW2ZvbnRPcmllbnRhdGlvbiwgZ2x5cGhPcmllbnRhdGlvbl0gPSBtX3N0eWxl
LmZvbnRBbmRHbHlwaE9yaWVudGF0aW9uKCk7CisKKyAgICBjb25zdCBhdXRvJiBmb250RGVzY3Jp
cHRpb24gPSBtX3N0eWxlLmZvbnREZXNjcmlwdGlvbigpOworICAgIGlmIChmb250RGVzY3JpcHRp
b24ub3JpZW50YXRpb24oKSA9PSBmb250T3JpZW50YXRpb24gJiYgZm9udERlc2NyaXB0aW9uLm5v
bkNKS0dseXBoT3JpZW50YXRpb24oKSA9PSBnbHlwaE9yaWVudGF0aW9uKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIG5ld0ZvbnREZXNjcmlwdGlvbiA9IGZvbnREZXNjcmlwdGlvbjsKKyAg
ICBuZXdGb250RGVzY3JpcHRpb24uc2V0Tm9uQ0pLR2x5cGhPcmllbnRhdGlvbihnbHlwaE9yaWVu
dGF0aW9uKTsKKyAgICBuZXdGb250RGVzY3JpcHRpb24uc2V0T3JpZW50YXRpb24oZm9udE9yaWVu
dGF0aW9uKTsKKyAgICBtX3N0eWxlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKG5ld0ZvbnRE
ZXNjcmlwdGlvbikpOworfQorCit2b2lkIEJ1aWxkZXJTdGF0ZTo6c2V0Rm9udFNpemUoRm9udENh
c2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQogewotICAgIG1f
c3R5bGVSZXNvbHZlci5zZXRGb250U2l6ZShkZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNl
dENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNp
emUsIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSwg
JnN0eWxlKCksIGRvY3VtZW50KCkpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
QnVpbGRlclN0YXRlLmgKaW5kZXggZjI3MzgxNDAxMjEuLmU3Yjk5Y2E3NjdmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKQEAgLTM5LDEzICszOSwxMyBAQCBjbGFz
cyBTdHlsZVJlc29sdmVyOwogCiBuYW1lc3BhY2UgU3R5bGUgewogCi1jbGFzcyBQcm9wZXJ0eUNh
c2NhZGU7CitjbGFzcyBCdWlsZGVyOwogCiBjbGFzcyBCdWlsZGVyU3RhdGUgewogcHVibGljOgot
ICAgIEJ1aWxkZXJTdGF0ZShQcm9wZXJ0eUNhc2NhZGUmLCBTdHlsZVJlc29sdmVyJik7CisgICAg
QnVpbGRlclN0YXRlKEJ1aWxkZXImLCBTdHlsZVJlc29sdmVyJik7CiAKLSAgICBQcm9wZXJ0eUNh
c2NhZGUmIGNhc2NhZGUoKSB7IHJldHVybiBtX2Nhc2NhZGU7IH0KKyAgICBCdWlsZGVyJiBidWls
ZGVyKCkgeyByZXR1cm4gbV9idWlsZGVyOyB9CiAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlcigpIHsgcmV0dXJuIG1fc3R5bGVSZXNvbHZlcjsgfQogCiAgICAgUmVuZGVyU3R5bGUmIHN0
eWxlKCkgeyByZXR1cm4gbV9zdHlsZTsgfQpAQCAtNjQsNyArNjQsNiBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGZvbnREaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERpcnR5OyB9CiAgICAgdm9p
ZCBzZXRGb250RGlydHkoKSB7IG1fZm9udERpcnR5ID0gdHJ1ZTsgfQotICAgIHZvaWQgY2xlYXJG
b250RGlydHkoKSB7IG1fZm9udERpcnR5ID0gZmFsc2U7IH0KIAogICAgIGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3R5bGUuZm9udERl
c2NyaXB0aW9uKCk7IH0KICAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBwYXJlbnRG
b250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3BhcmVudFN0eWxlLmZvbnREZXNjcmlwdGlvbigp
OyB9CkBAIC04NSw5ICs4NCwxOSBAQCBwdWJsaWM6CiAgICAgQ1NTVG9TdHlsZU1hcCYgc3R5bGVN
YXAoKSB7IHJldHVybiBtX3N0eWxlTWFwOyB9CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNz
IFByb3BlcnR5Q2FzY2FkZTsKKyAgICBmcmllbmQgY2xhc3MgQnVpbGRlcjsKIAotICAgIFByb3Bl
cnR5Q2FzY2FkZSYgbV9jYXNjYWRlOworICAgIHZvaWQgYWRqdXN0U3R5bGVGb3JJbnRlckNoYXJh
Y3RlclJ1YnkoKTsKKworICAgIHZvaWQgdXBkYXRlRm9udCgpOworI2lmIEVOQUJMRShURVhUX0FV
VE9TSVpJTkcpCisgICAgdm9pZCB1cGRhdGVGb250Rm9yVGV4dFNpemVBZGp1c3QoKTsKKyNlbmRp
ZgorICAgIHZvaWQgdXBkYXRlRm9udEZvclpvb21DaGFuZ2UoKTsKKyAgICB2b2lkIHVwZGF0ZUZv
bnRGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKCk7CisgICAgdm9pZCB1cGRhdGVGb250Rm9yT3JpZW50
YXRpb25DaGFuZ2UoKTsKKworICAgIEJ1aWxkZXImIG1fYnVpbGRlcjsKIAogICAgIENTU1RvU3R5
bGVNYXAgbV9zdHlsZU1hcDsKICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIG1fY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>