<?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>78282</bug_id>
          
          <creation_ts>2012-02-09 14:19:45 -0800</creation_ts>
          <short_desc>Refactor Mac platform implementation of the Pasteboard class to use Platform Strategies</short_desc>
          <delta_ts>2012-02-13 14:45:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>78410</dependson>
          <blocked>77259</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>andersca</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>553497</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-09 14:19:45 -0800</bug_when>
    <thetext>This bug track another step in the direction of removing access to NSPasteboard from the WebProcess.
The Mac implementation of the Pasteboard class needs to be redesigned to use a platform strategy that can provide different implementations for WebKit and WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553577</commentid>
    <comment_count>1</comment_count>
      <attachid>126392</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-09 15:43:06 -0800</bug_when>
    <thetext>Created attachment 126392
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554584</commentid>
    <comment_count>2</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-02-11 00:48:02 -0800</bug_when>
    <thetext>I rolled it out, because it broke the Qt build - http://trac.webkit.org/changeset/107475

../../../Source/WebKit/qt/WebCoreSupport/PlatformStrategiesQt.cpp: In static member function &apos;static void PlatformStrategiesQt::initialize()&apos;:
../../../Source/WebKit/qt/WebCoreSupport/PlatformStrategiesQt.cpp:51: error: cannot allocate an object of abstract type &apos;PlatformStrategiesQt&apos;
../../../Source/WebKit/qt/WebCoreSupport/PlatformStrategiesQt.h:41: note:   because the following virtual functions are pure within &apos;PlatformStrategiesQt&apos;:
../../../Source/WebCore/platform/PlatformStrategies.h:95: note: 	virtual WebCore::PasteboardStrategy* WebCore::PlatformStrategies::createPasteboardStrategy()

Next time please use EWS bots or watch the bots after landing to ensure that your patch builds on all platform.

http://www.webkit.org/coding/contributing.html
&quot;Your change must at least compile on all platforms.&quot;

Qt build was broken during ~70 revision because of this patch. :( It means that the test coverage was 0 in this time. And unfortunately somebody broke all JSC tests on Qt-debug during build breakage. It won&apos;t be a good game to find it manually ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554616</commentid>
    <comment_count>3</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-11 06:49:42 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I rolled it out, because it broke the Qt build - http://trac.webkit.org/changeset/107475
&gt; 
&gt; ../../../Source/WebKit/qt/WebCoreSupport/PlatformStrategiesQt.cpp: In static member function &apos;static void PlatformStrategiesQt::initialize()&apos;:
&gt; ../../../Source/WebKit/qt/WebCoreSupport/PlatformStrategiesQt.cpp:51: error: cannot allocate an object of abstract type &apos;PlatformStrategiesQt&apos;
&gt; ../../../Source/WebKit/qt/WebCoreSupport/PlatformStrategiesQt.h:41: note:   because the following virtual functions are pure within &apos;PlatformStrategiesQt&apos;:
&gt; ../../../Source/WebCore/platform/PlatformStrategies.h:95: note:     virtual WebCore::PasteboardStrategy* WebCore::PlatformStrategies::createPasteboardStrategy()
&gt; 
&gt; Next time please use EWS bots or watch the bots after landing to ensure that your patch builds on all platform.
&gt; 
&gt; http://www.webkit.org/coding/contributing.html
&gt; &quot;Your change must at least compile on all platforms.&quot;
&gt; 
&gt; Qt build was broken during ~70 revision because of this patch. :( It means that the test coverage was 0 in this time. And unfortunately somebody broke all JSC tests on Qt-debug during build breakage. It won&apos;t be a good game to find it manually ...

My apologies, I did not notice that the Qt port was using platform strategies. I will resubmit my patch with the build fix for Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555528</commentid>
    <comment_count>4</comment_count>
      <attachid>126819</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-13 13:39:24 -0800</bug_when>
    <thetext>Created attachment 126819
Patch to verify the Qt build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555531</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-13 13:41:09 -0800</bug_when>
    <thetext>Attachment 126819 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/PlatformPasteboard.h:53:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/PasteboardStrategy.h:50:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:67:  The parameter name &quot;buffer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.h:69:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h:75:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/Pasteboard.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 6 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555631</commentid>
    <comment_count>6</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-13 14:45:51 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/107606</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126392</attachid>
            <date>2012-02-09 15:43:06 -0800</date>
            <delta_ts>2012-02-10 12:48:53 -0800</delta_ts>
            <desc>patch</desc>
            <filename>usestrategies.txt</filename>
            <type>text/plain</type>
            <size>72652</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDEyLTAyLTA5ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgTWFjIHBsYXRm
b3JtIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQYXN0ZWJvYXJkIGNsYXNzIHRvIHVzZSBQbGF0Zm9y
bSBTdHJhdGVnaWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzgyODIKKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgYW55IGFjY2Vzc3MgdG8g
dGhlIE5TUGFzdGVib2FyZCBvYmplY3QgZnJvbSB0aGUgUGFzdGVib2FyZCBjbGFzcyB3aGljaAor
ICAgICAgICBub3cgbWFrZXMgdXNlIG9mIGEgbmV3IHBhc3RlYm9hcmRTdHJhdGVneSBvYmplY3Qg
dGhhdCBpcyBpbXBsZW1lbnRlZCBib3RoIGluIFdlYktpdCBhbmQKKyAgICAgICAgV2ViS2l0Mi4g
VGhlIGFjdHVhbCBhY2Nlc3MgdG8gTlNQYXN0ZWJvYXJkIGlzIG5vdyBwZXJmb3JtZWQgaW5zaWRl
IHRoZSBQbGF0Zm9ybVBhc3RlYm9hcmQKKyAgICAgICAgY2xhc3MuIEN1cnJlbnRseSBib3RoIFdl
YktpdCBhbmQgV2ViS2l0MiB1c2UgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBhc3Rl
Ym9hcmRTdHJhdGVneQorICAgICAgICBpbnRlcmZhY2UgYnV0IHRoaXMgb25lIG1vcmUgc3RlcCBp
biB0aGUgZGlyZWN0aW9uIG9mIHJlbW92aW5nIGFjY2VzcyB0byBOU1Bhc3RlYm9hcmQgZnJvbQor
ICAgICAgICB0aGUgV2ViUHJvY2Vzcy4KKyAgICAgICAgQXMgcGFydCBvZiB0aGUgcmVmYWN0b3Jp
bmcgdGhlIEkndmUgcmVkdWNlZCB0byBhIG1pbmltdW0gdGhlIHVzZSBvZiBPQkotQyBjbGFzc2Vz
LgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IsIGp1c3QgY29kZSByZWZhY3Rv
cmluZy4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBBZGRlZCBleHBvcnRlZCBjbGFzcyBQ
bGF0Zm9ybVBhc3RlYm9hcmQuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOiBBZGRlZCBuZXcgZmlsZXMgdG8gdGhlIGJ1aWxkLgorICAgICAgICAqIGVkaXRpbmcv
bWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQpOiBOZXcgbWV0aG9kIHNpZ25hdHVyZSB0aGF0IGRvZXNuJ3QgdXNlIE9C
Si1DIHR5cGVzLgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKworICAgICAgICAq
IHBsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oOiBBZGRlZCBQYXN0ZWJvYXJkU3RyYXRlZ3kg
YWJzdHJhY3QgY2xhc3MuCisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmg6
IEFkZGVkLiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYWNjZXNzIHRvIE5TUGFzdGVib2FyZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVN0cmF0ZWdpZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtU3RyYXRlZ2llczo6cGFzdGVib2FyZFN0cmF0ZWd5KTogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0Rh
dGE6OmNhblNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjppbnNlcnRhYmxlUGFzdGVi
b2FyZFR5cGVzKTogCisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNVUkwpOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2Vs
ZWN0aW9uUGFzdGVib2FyZFR5cGVzKTogQ2hhbmdlZCB0byB1c2UgVmVjdG9yPFN0cmluZz4gaW5z
dGVhZCBvZiBOU0FycmF5LgorICAgICAgICAoV2ViQ29yZTo6d3JpdGFibGVUeXBlc0ZvclVSTCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlV3JpdGFibGVUeXBlc0ZvckltYWdlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp3cml0YWJsZVR5cGVzRm9ySW1hZ2UpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OlBhc3RlYm9hcmQpOiBSZW1vdmVkIGFjY2Vz
cyB0byBOU1Bhc3RlYm9hcmQuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjbGVhcik6
IE1vZGlmaWVkIHRvIHVzZSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCkuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbkZvclR5cGVz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVVJMRm9yVHlwZXMpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlVVJMKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjp3cml0ZUZpbGVXcmFwcGVyQXNSVEZEQXR0YWNobWVudCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZDo6d3JpdGVDbGlwYm9hcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZDo6cGxhaW5UZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpkb2N1bWVu
dEZyYWdtZW50V2l0aFJURik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6
ZG9jdW1lbnRGcmFnbWVudCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9y
bVBhc3RlYm9hcmRNYWMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0
ZWJvYXJkOjpQbGF0Zm9ybVBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Q
YXN0ZWJvYXJkOjpnZXRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9h
cmQ6OmJ1ZmZlckZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJk
OjpnZXRQYXRobmFtZXNGb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVi
b2FyZDo6c3RyaW5nRm9yVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9h
cmQ6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRUeXBl
cyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnNldEJ1ZmZlckZvclR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRQYXRobmFtZXNG
b3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6c2V0U3RyaW5n
Rm9yVHlwZSk6CisKIDIwMTItMDItMDkgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgog
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODI1NgpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDEwNjgxMSkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC01NDgsNiArNTQ4LDE2IEBAIF9f
Wk43V2ViQ29yZTE3Y2FjaGVET01TdHJ1Y3R1cmVFUE5TXzE3SlMKIF9fWk43V2ViQ29yZTE3b3Bl
blRlbXBvcmFyeUZpbGVFUktOM1dURjZTdHJpbmdFUmkKIF9fWk43V2ViQ29yZTE4SFRNTENvbnRl
bnRFbGVtZW50NmNyZWF0ZUVQTlNfOERvY3VtZW50RQogX19aTjdXZWJDb3JlMThQbGF0Zm9ybVN0
cmF0ZWdpZXMyNmNyZWF0ZUxvY2FsaXphdGlvblN0cmF0ZWd5RXYKK19fWk43V2ViQ29yZTE4UGxh
dGZvcm1QYXN0ZWJvYXJkMTNidWZmZXJGb3JUeXBlRVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJD
b3JlMThQbGF0Zm9ybVBhc3RlYm9hcmQxM3N0cmluZ0ZvclR5cGVFUktOM1dURjZTdHJpbmdFCitf
X1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDE5c2V0UGF0aG5hbWVzRm9yVHlwZUVSS04z
V1RGNlZlY3RvcklOUzFfNlN0cmluZ0VMbTBFRUVSS1MzXworX19aTjdXZWJDb3JlMThQbGF0Zm9y
bVBhc3RlYm9hcmQxOWdldFBhdGhuYW1lc0ZvclR5cGVFUk4zV1RGNlZlY3RvcklOUzFfNlN0cmlu
Z0VMbTBFRUVSS1MzXworX19aTjdXZWJDb3JlMThQbGF0Zm9ybVBhc3RlYm9hcmQ4c2V0VHlwZXNF
UktOM1dURjZWZWN0b3JJTlMxXzZTdHJpbmdFTG0wRUVFCitfX1pON1dlYkNvcmUxOFBsYXRmb3Jt
UGFzdGVib2FyZEMxRVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMThQbGF0Zm9ybVBhc3Rl
Ym9hcmQ4Z2V0VHlwZXNFUk4zV1RGNlZlY3RvcklOUzFfNlN0cmluZ0VMbTBFRUUKK19fWk43V2Vi
Q29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkNGNvcHlFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNv
cmUxOFBsYXRmb3JtUGFzdGVib2FyZDE2c2V0QnVmZmVyRm9yVHlwZUVOM1dURjEwUGFzc1JlZlB0
cklOU18xMlNoYXJlZEJ1ZmZlckVFRVJLTlMxXzZTdHJpbmdFCitfX1pON1dlYkNvcmUxOFBsYXRm
b3JtUGFzdGVib2FyZDE2c2V0U3RyaW5nRm9yVHlwZUVSS04zV1RGNlN0cmluZ0VTNF8KIF9fWk43
V2ViQ29yZTE4U2VhcmNoUG9wdXBNZW51TWFjQzFFUE5TXzE1UG9wdXBNZW51Q2xpZW50RQogX19a
TjdXZWJDb3JlMThpc1N0YXJ0T2ZQYXJhZ3JhcGhFUktOU18xNVZpc2libGVQb3NpdGlvbkVOU18y
N0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk43V2ViQ29yZTE4cGx1Z2luU2NyaXB0
T2JqZWN0RVBOM0pTQzlFeGVjU3RhdGVFUE5TXzEzSlNIVE1MRWxlbWVudEUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDEwNjgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTU1OCw5ICs1NTU4LDEyIEBACiAJCUM1ODVBNkZD
MTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkM4MTFENEZCM0QwMDRDM0U0
QiAvKiBJREJGYWN0b3J5QmFja2VuZEltcGwuaCAqLzsgfTsKIAkJQzU4NUE2RkQxMUQ0RkIzRDAw
NEMzRTRCIC8qIElEQkZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzU4NUE2QzkxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnkuY3Bw
ICovOyB9OwogCQlDNTg1QTZGRTExRDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU4NUE2Q0ExMUQ0RkIz
RDAwNEMzRTRCIC8qIElEQkZhY3RvcnkuaCAqLzsgfTsKKwkJQzVCQUMxNzAxNEUzMEU0NzAwMDA4
ODM3IC8qIFBsYXRmb3JtUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzVCQUMxNkYxNEUzMEU0NzAwMDA4ODM3IC8qIFBsYXRmb3JtUGFz
dGVib2FyZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUM1RDRBQTdBMTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1RDRBQTc4MTE2QkFGQjYw
MDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlDNUU5QjY3NzEwNjk3RTEzMDBDN0JCMUEgLyogU3RvcmFn
ZUV2ZW50RGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDNUU5QjY3NjEwNjk3RTEzMDBDN0JCMUEgLyogU3RvcmFnZUV2ZW50RGlzcGF0
Y2hlci5jcHAgKi87IH07CiAJCUM1RUJERDg0MTA1RURERUMwMDU2ODE2RiAvKiBTdG9yYWdlRXZl
bnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5o
ICovOyB9OworCQlDNUY3NjVCNTE0RTFENDE0MDA2Qzg5OUIgLyogUGFzdGVib2FyZFN0cmF0ZWd5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNUY3NjVC
NDE0RTFENDE0MDA2Qzg5OUIgLyogUGFzdGVib2FyZFN0cmF0ZWd5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzVGNzY1QkIxNEUxRUNGNDAwNkM4
OTlCIC8qIFBsYXRmb3JtUGFzdGVib2FyZE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1Rjc2NUJBMTRFMUVDRjQwMDZDODk5QiAvKiBQbGF0Zm9y
bVBhc3RlYm9hcmRNYWMubW0gKi87IH07CiAJCUM2RDc0QUQ1MDlBQTI4MkUwMDBCMEE1MiAvKiBN
b2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rp
b25MaXN0TGV2ZWwuaCAqLzsgfTsKIAkJQzZENzRBRTQwOUFBMjkwQTAwMEIwQTUyIC8qIE1vZGlm
eVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNkQ3NEFFMzA5QUEyOTBBMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9u
TGlzdExldmVsLmNwcCAqLzsgfTsKIAkJQzZGMDhGQkMxNDMwRkU4RjAwNjg1ODQ5IC8qIE11dGF0
aW9uUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM2RjA4RkI5MTQzMEZFOEYwMDY4NTg0OSAvKiBNdXRhdGlvblJlY29yZC5jcHAgKi87IH07
CkBAIC0xMjQ5NSw5ICsxMjQ5OCwxMiBAQAogCQlDNTg1QTZDOTExRDRGQjNEMDA0QzNFNEIgLyog
SURCRmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJG
YWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzU4NUE2Q0ExMUQ0RkIz
RDAwNEMzRTRCIC8qIElEQkZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSURCRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTg1QTZDQjEx
RDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
SURCRmFjdG9yeS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1QkFDMTZGMTRF
MzBFNDcwMDAwODgzNyAvKiBQbGF0Zm9ybVBhc3RlYm9hcmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1QYXN0ZWJvYXJkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUM1RDRBQTc4MTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2x5cGhNZXRyaWNzTWFwLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1RTlCNjc2MTA2OTdFMTMwMEM3QkIxQSAvKiBTdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDNUVCREQ4MTEwNUVEREVDMDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdlRXZlbnREaXNwYXRjaGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1Rjc2NUI0MTRFMUQ0MTQwMDZDODk5
QiAvKiBQYXN0ZWJvYXJkU3RyYXRlZ3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGFzdGVib2FyZFN0cmF0ZWd5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1
Rjc2NUJBMTRFMUVDRjQwMDZDODk5QiAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0Zm9ybVBhc3RlYm9hcmRNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM2RDc0QUQzMDlBQTI4MkUwMDBCMEE1
MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUM2RDc0QUUzMDlBQTI5MEEwMDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U2Vs
ZWN0aW9uTGlzdExldmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzZGMDhG
QjkxNDMwRkU4RjAwNjg1ODQ5IC8qIE11dGF0aW9uUmVjb3JkLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0aW9uUmVjb3JkLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE1MDE5LDYgKzE1MDI1LDcgQEAKIAkJCQlDREVBNzYyRjE0NjA4NEVF
MDA4QjMxRjEgLyogUGxhdGZvcm1DbG9ja0NBLmggKi8sCiAJCQkJQkNBQTQ4NkUxNEEwNTI1MzAw
ODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmggKi8sCiAJCQkJQkNBQTQ4NkQxNEEw
NTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1tICovLAorCQkJCUM1Rjc2
NUJBMTRFMUVDRjQwMDZDODk5QiAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0gKi8sCiAJCQkJ
QkM5NEQxMDcwQzI3NEY4ODAwNkJDNjE3IC8qIFBsYXRmb3JtU2NyZWVuTWFjLm1tICovLAogCQkJ
CUQzOUQwMDZDMTFGOEUzMDgwMDYwNDFGMiAvKiBQb3B1cE1lbnVNYWMuaCAqLywKIAkJCQkwNjY4
RTE4RTBBREQ5NjQwMDA0MTI4RTAgLyogUG9wdXBNZW51TWFjLm1tICovLApAQCAtMTk2OTMsNiAr
MTk3MDAsNyBAQAogCQkJCUJDNzcyQzREMEM0RUIzMDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lz
dHJ5LmggKi8sCiAJCQkJOThFQjFGOTQxMzEzRkUwNTAwRDBFMUVBIC8qIE5vdEltcGxlbWVudGVk
LmggKi8sCiAJCQkJNEIyNzA4QzUwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQuaCAqLywK
KwkJCQlDNUY3NjVCNDE0RTFENDE0MDA2Qzg5OUIgLyogUGFzdGVib2FyZFN0cmF0ZWd5LmggKi8s
CiAJCQkJQkM1Qzc2MjgxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRmb3JtRXZlbnQuY3BwICovLAog
CQkJCUJDNUM3NjI5MTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9ybUV2ZW50LmggKi8sCiAJCQkJ
QTcyM0Y3N0ExNDg0Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggKi8sCkBA
IC0xOTcwMCw2ICsxOTcwOCw3IEBACiAJCQkJOTM1QzQ3NjYwOUFDNEQ0MzAwQTZBQUI0IC8qIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudC5oICovLAogCQkJCTkzMjg3MUJGMEIyMERFQjcwMDQ5MDM1QSAv
KiBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oICovLAogCQkJCTkzNUM0NzY3MDlBQzRENDMwMEE2
QUFCNCAvKiBQbGF0Zm9ybU1vdXNlRXZlbnQuaCAqLywKKwkJCQlDNUJBQzE2RjE0RTMwRTQ3MDAw
MDg4MzcgLyogUGxhdGZvcm1QYXN0ZWJvYXJkLmggKi8sCiAJCQkJQkNFQzAxRDYwQzI3NEVCNDAw
OUY0RUM5IC8qIFBsYXRmb3JtU2NyZWVuLmggKi8sCiAJCQkJMUFEOEY4MUExMUNBQjlFOTAwRTkz
RTU0IC8qIFBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgKi8sCiAJCQkJMUFEOEY4MTkxMUNBQjlFOTAw
RTkzRTU0IC8qIFBsYXRmb3JtU3RyYXRlZ2llcy5oICovLApAQCAtMjQxMjcsNiArMjQxMzYsOCBA
QAogCQkJCTFBQUFEREJGMTREQzY0MDcwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlU3RhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBQUFEREU0MTREQzhDOEYwMEFGNjRCMyAvKiBTY3JvbGxpbmdU
cmVlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBQURERTkxNERDOERGODAwQUY2NEIzIC8q
IFNjcm9sbGluZ1RyZWVOb2RlTWFjLmggaW4gSGVhZGVycyAqLywKKwkJCQlDNUY3NjVCNTE0RTFE
NDE0MDA2Qzg5OUIgLyogUGFzdGVib2FyZFN0cmF0ZWd5LmggaW4gSGVhZGVycyAqLywKKwkJCQlD
NUJBQzE3MDE0RTMwRTQ3MDAwMDg4MzcgLyogUGxhdGZvcm1QYXN0ZWJvYXJkLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTI3MDYwLDYgKzI3MDcxLDcgQEAKIAkJCQkxQUFBREREQTE0REM3NEVDMDBBRjY0
QjMgLyogU2Nyb2xsaW5nVHJlZVN0YXRlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBQURE
RTMxNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBQUFEREU4MTREQzhERjgwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5t
bSBpbiBTb3VyY2VzICovLAorCQkJCUM1Rjc2NUJCMTRFMUVDRjQwMDZDODk5QiAvKiBQbGF0Zm9y
bVBhc3RlYm9hcmRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDEwNjgxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg5LDExICsyODks
OCBAQCB2b2lkIEVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uCiAKIHZvaWQgRWRp
dG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzKQogewotICAgIFJldGFp
blB0cjxOU011dGFibGVBcnJheT4gdHlwZXMoQWRvcHROUywgW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdF0pOyAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhc3RlYm9hcmRUeXBl
cy5zaXplKCk7ICsraSkKLSAgICAgICAgW3R5cGVzLmdldCgpIGFkZE9iamVjdDpwYXN0ZWJvYXJk
VHlwZXNbaV1dOwogICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7Ci0g
ICAgcGFzdGVib2FyZC53cml0ZVNlbGVjdGlvbkZvclR5cGVzKHR5cGVzLmdldCgpLCBzZWxlY3Rl
ZFJhbmdlKCkuZ2V0KCksIHRydWUsIG1fZnJhbWUpOworICAgIHBhc3RlYm9hcmQud3JpdGVTZWxl
Y3Rpb25Gb3JUeXBlcyhwYXN0ZWJvYXJkVHlwZXMsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgdHJ1
ZSwgbV9mcmFtZSk7CiB9CiAgICAgCiB2b2lkIEVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0
ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZC5oCShyZXZpc2lvbiAxMDY4NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KQEAgLTYwLDExICs2MiwxMSBAQCB0eXBlZGVmIHN0cnVjdCBIV05EX18q
IEhXTkQ7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBQTEFURk9STShNQUMpCi1leHRlcm4g
TlNTdHJpbmcgKldlYkFyY2hpdmVQYm9hcmRUeXBlOwotZXh0ZXJuIE5TU3RyaW5nICpXZWJTbWFy
dFBhc3RlUGJvYXJkVHlwZTsKLWV4dGVybiBOU1N0cmluZyAqV2ViVVJMTmFtZVBib2FyZFR5cGU7
Ci1leHRlcm4gTlNTdHJpbmcgKldlYlVSTFBib2FyZFR5cGU7Ci1leHRlcm4gTlNTdHJpbmcgKldl
YlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZTsKK2V4dGVybiBjb25zdCBjaGFyKiBXZWJBcmNoaXZl
UGJvYXJkVHlwZTsKK2V4dGVybiBjb25zdCBjaGFyKiBXZWJTbWFydFBhc3RlUGJvYXJkVHlwZTsK
K2V4dGVybiBjb25zdCBjaGFyKiBXZWJVUkxOYW1lUGJvYXJkVHlwZTsKK2V4dGVybiBjb25zdCBj
aGFyKiBXZWJVUkxQYm9hcmRUeXBlOworZXh0ZXJuIGNvbnN0IGNoYXIqIFdlYlVSTHNXaXRoVGl0
bGVzUGJvYXJkVHlwZTsKICNlbmRpZgogCiBjbGFzcyBDbGlwYm9hcmQ7CkBAIC04MSw3ICs4Myw3
IEBAIGNsYXNzIFBhc3RlYm9hcmQgewogcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICAv
LyBUaGlzIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgT1MgWCBzZXJ2aWNlcy4KLSAgICB2b2lkIHdy
aXRlU2VsZWN0aW9uRm9yVHlwZXMoTlNBcnJheSogcGFzdGVib2FyZFR5cGVzLCBSYW5nZSogc2Vs
ZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqKTsKKyAgICB2b2lk
IHdyaXRlU2VsZWN0aW9uRm9yVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRU
eXBlcywgUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZy
YW1lKik7CiAgICAgUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKICNl
bmRpZgogICAgIApAQCAtMTA5LDcgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgUGFzdGVib2FyZCgp
OwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0cjxOU1Bhc3RlYm9hcmQ+IG1fcGFz
dGVib2FyZDsKKyAgICBTdHJpbmcgbV9wYXN0ZWJvYXJkTmFtZTsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oV0lOKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0
ZWd5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0
cmF0ZWd5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJv
YXJkU3RyYXRlZ3kuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFBhc3RlYm9hcmRTdHJhdGVneV9oCisjZGVmaW5lIFBhc3RlYm9hcmRTdHJhdGVneV9o
CisKKyNpZiBVU0UoUExBVEZPUk1fU1RSQVRFR0lFUykKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgUGFzdGVib2FyZFN0cmF0ZWd5IHsKK3B1YmxpYzoKKyNpZiBQTEFURk9STShNQUMpCisgICAg
dmlydHVhbCB2b2lkIGdldFR5cGVzKFZlY3RvcjxTdHJpbmc+JiB0eXBlcywgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRQYXRobmFtZXNG
b3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFN0
cmluZyBzdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY29weShj
b25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFzdGVib2FyZCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFz
dGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHNldEJ1ZmZlckZvclR5cGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgVmVjdG9yPFN0
cmluZz4mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN0cmluZ0ZvclR5cGUoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKKyNlbmRpZgorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
flBhc3RlYm9hcmRTdHJhdGVneSgpCisgICAgeworICAgIH0KK307CisKK30KKyNlbmRpZiAvLyBV
U0UoUExBVEZPUk1fU1RSQVRFR0lFUykKKworI2VuZGlmIC8vICFQYXN0ZWJvYXJkU3RyYXRlZ3lf
aApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9h
cmQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBs
YXRmb3JtUGFzdGVib2FyZF9oCisjZGVmaW5lIFBsYXRmb3JtUGFzdGVib2FyZF9oCisKKyNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgUExBVEZP
Uk0oTUFDKQorT0JKQ19DTEFTUyBOU1Bhc3RlYm9hcmQ7CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybVBhc3RlYm9hcmQgeworcHVibGljOgorICAgIFBsYXRm
b3JtUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKKyAgICAKKyAgICB2
b2lkIGdldFR5cGVzKFZlY3RvcjxTdHJpbmc+JiB0eXBlcyk7CisgICAgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7Cisg
ICAgdm9pZCBnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOworICAgIFN0cmluZyBzdHJpbmdGb3JUeXBlKGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOworICAgIAorICAgIHZvaWQgY29weShjb25zdCBT
dHJpbmcmIGZyb21QYXN0ZWJvYXJkKTsKKyAgICB2b2lkIHNldFR5cGVzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpOworICAgIHZvaWQgc2V0QnVmZmVyRm9yVHlwZShQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOworICAg
IHZvaWQgc2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVz
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKKyAgICB2b2lkIHNldFN0cmluZ0ZvclR5
cGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOwor
Citwcml2YXRlOgorICAgIFJldGFpblB0cjxOU1Bhc3RlYm9hcmQ+IG1fcGFzdGVib2FyZDsKK307
CisKK30KKworI2VuZGlmIC8vICFQbGF0Zm9ybVBhc3RlYm9hcmRfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDEwNjgxMSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENv
b2tpZXNTdHJhdGVneTsKK2NsYXNzIFBhc3RlYm9hcmRTdHJhdGVneTsKIGNsYXNzIFBsdWdpblN0
cmF0ZWd5OwogY2xhc3MgTG9jYWxpemF0aW9uU3RyYXRlZ3k7CiBjbGFzcyBWaXNpdGVkTGlua1N0
cmF0ZWd5OwpAQCAtNjUsMTIgKzY2LDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdmlz
aXRlZExpbmtTdHJhdGVneTsKICAgICB9CiAKKyAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kqIHBhc3Rl
Ym9hcmRTdHJhdGVneSgpCisgICAgeworICAgICAgICBpZiAoIW1fcGFzdGVib2FyZFN0cmF0ZWd5
KQorICAgICAgICAgICAgbV9wYXN0ZWJvYXJkU3RyYXRlZ3kgPSBjcmVhdGVQYXN0ZWJvYXJkU3Ry
YXRlZ3koKTsKKyAgICAgICAgcmV0dXJuIG1fcGFzdGVib2FyZFN0cmF0ZWd5OworICAgIH0KKwog
cHJvdGVjdGVkOgogICAgIFBsYXRmb3JtU3RyYXRlZ2llcygpCiAgICAgICAgIDogbV9jb29raWVz
U3RyYXRlZ3koMCkKICAgICAgICAgLCBtX3BsdWdpblN0cmF0ZWd5KDApCiAgICAgICAgICwgbV9s
b2NhbGl6YXRpb25TdHJhdGVneSgwKQogICAgICAgICAsIG1fdmlzaXRlZExpbmtTdHJhdGVneSgw
KQorICAgICAgICAsIG1fcGFzdGVib2FyZFN0cmF0ZWd5KDApCiAgICAgewogICAgIH0KIApAQCAt
ODMsMTEgKzkyLDEzIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBQbHVnaW5TdHJhdGVneSogY3Jl
YXRlUGx1Z2luU3RyYXRlZ3koKSA9IDA7CiAgICAgdmlydHVhbCBMb2NhbGl6YXRpb25TdHJhdGVn
eSogY3JlYXRlTG9jYWxpemF0aW9uU3RyYXRlZ3koKTsKICAgICB2aXJ0dWFsIFZpc2l0ZWRMaW5r
U3RyYXRlZ3kqIGNyZWF0ZVZpc2l0ZWRMaW5rU3RyYXRlZ3koKSA9IDA7CisgICAgdmlydHVhbCBQ
YXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpID0gMDsgCiAKICAg
ICBDb29raWVzU3RyYXRlZ3kqIG1fY29va2llc1N0cmF0ZWd5OwogICAgIFBsdWdpblN0cmF0ZWd5
KiBtX3BsdWdpblN0cmF0ZWd5OwogICAgIExvY2FsaXphdGlvblN0cmF0ZWd5KiBtX2xvY2FsaXph
dGlvblN0cmF0ZWd5OwogICAgIFZpc2l0ZWRMaW5rU3RyYXRlZ3kqIG1fdmlzaXRlZExpbmtTdHJh
dGVneTsKKyAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kqIG1fcGFzdGVib2FyZFN0cmF0ZWd5OwogfTsK
IAogUGxhdGZvcm1TdHJhdGVnaWVzKiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0JKHJldmlzaW9uIDEwNjg3MikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsNyBAQCBib29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBj
b25zdAogewogICAgIC8vTmVlZCB0byBjYWxsIHRoaXMgc28gdGhhdCB0aGUgdmFyaW91cyBQYXN0
ZWJvYXJkIHR5cGUgc3RyaW5ncyBhcmUgaW50aWFsaXNlZAogICAgIFBhc3RlYm9hcmQ6OmdlbmVy
YWxQYXN0ZWJvYXJkKCk7Ci0gICAgcmV0dXJuIFtbbV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVzXSBj
b250YWluc09iamVjdDpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07CisgICAgcmV0dXJuIFtbbV9w
YXN0ZWJvYXJkLmdldCgpIHR5cGVzXSBjb250YWluc09iamVjdDpTdHJpbmcoV2ViU21hcnRQYXN0
ZVBib2FyZFR5cGUpXTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb2xvcigpIGNvbnN0
CkBAIC0xMjksNyArMTI5LDcgQEAgc3RhdGljIE5TQXJyYXkgKmluc2VydGFibGVQYXN0ZWJvYXJk
VHlwZQogewogICAgIHN0YXRpYyBOU0FycmF5ICp0eXBlcyA9IG5pbDsKICAgICBpZiAoIXR5cGVz
KSB7Ci0gICAgICAgIHR5cGVzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6V2Vi
QXJjaGl2ZVBib2FyZFR5cGUsIE5TSFRNTFBib2FyZFR5cGUsIE5TRmlsZW5hbWVzUGJvYXJkVHlw
ZSwgTlNUSUZGUGJvYXJkVHlwZSwgTlNQREZQYm9hcmRUeXBlLAorICAgICAgICB0eXBlcyA9IFtb
TlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOlN0cmluZyhXZWJBcmNoaXZlUGJvYXJkVHlw
ZSksIE5TSFRNTFBib2FyZFR5cGUsIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSwgTlNUSUZGUGJvYXJk
VHlwZSwgTlNQREZQYm9hcmRUeXBlLAogI2lmZGVmIEJVSUxESU5HX09OX0xFT1BBUkQKICAgICAg
ICAgICAgICAgICAgTlNQSUNUUGJvYXJkVHlwZSwKICNlbmRpZgpAQCAtMTU3LDcgKzE1Nyw3IEBA
IFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoRnJhbWUqIGZyYW1lLCBGaWwKICAgICAodm9pZClmaWxl
bmFtZVBvbGljeTsKIAogICAgIGlmICh0aXRsZSkgewotICAgICAgICBpZiAoTlNTdHJpbmcgKlVS
TFRpdGxlU3RyaW5nID0gW21fcGFzdGVib2FyZC5nZXQoKSBzdHJpbmdGb3JUeXBlOldlYlVSTE5h
bWVQYm9hcmRUeXBlXSkKKyAgICAgICAgaWYgKE5TU3RyaW5nICpVUkxUaXRsZVN0cmluZyA9IFtt
X3Bhc3RlYm9hcmQuZ2V0KCkgc3RyaW5nRm9yVHlwZTpTdHJpbmcoV2ViVVJMTmFtZVBib2FyZFR5
cGUpXSkKICAgICAgICAgICAgICp0aXRsZSA9IFVSTFRpdGxlU3RyaW5nOwogICAgIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCShy
ZXZpc2lvbiAxMDY4NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2Fy
ZE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgsNTcgKzU4LDYxIEBACiAjaW1wb3J0IDx3dGYv
VW51c2VkUGFyYW0uaD4KICNpbXBvcnQgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAK
LUBpbnRlcmZhY2UgTlNBdHRyaWJ1dGVkU3RyaW5nIChBcHBLaXRTZWNyZXRzSUtub3dBYm91dCkK
LS0gKGlkKV9pbml0V2l0aERPTVJhbmdlOihET01SYW5nZSAqKWRvbVJhbmdlOwotQGVuZAorI2lm
IFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQorI2luY2x1ZGUgIlBhc3RlYm9hcmRTdHJhdGVneS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogLy8gRklYTUU6IEl0J3Mgbm90IGdyZWF0IHRvIGhhdmUgdGhlc2UgYm90aCBo
ZXJlIGFuZCBpbiBXZWJLaXQuCi1OU1N0cmluZyAqV2ViQXJjaGl2ZVBib2FyZFR5cGUgPSBAIkFw
cGxlIFdlYiBBcmNoaXZlIHBhc3RlYm9hcmQgdHlwZSI7Ci1OU1N0cmluZyAqV2ViU21hcnRQYXN0
ZVBib2FyZFR5cGUgPSBAIk5lWFQgc21hcnQgcGFzdGUgcGFzdGVib2FyZCB0eXBlIjsKLU5TU3Ry
aW5nICpXZWJVUkxOYW1lUGJvYXJkVHlwZSA9IEAicHVibGljLnVybC1uYW1lIjsKLU5TU3RyaW5n
ICpXZWJVUkxQYm9hcmRUeXBlID0gQCJwdWJsaWMudXJsIjsKLU5TU3RyaW5nICpXZWJVUkxzV2l0
aFRpdGxlc1Bib2FyZFR5cGUgPSBAIldlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSI7Ci0KLXN0
YXRpYyBOU0FycmF5KiBzZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXMoYm9vbCBjYW5TbWFydENvcHlP
ckRlbGV0ZSwgYm9vbCBzZWxlY3Rpb25Db250YWluc0F0dGFjaG1lbnRzKQotewotICAgIGlmIChz
ZWxlY3Rpb25Db250YWluc0F0dGFjaG1lbnRzKSB7Ci0gICAgICAgIGlmIChjYW5TbWFydENvcHlP
ckRlbGV0ZSkKLSAgICAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldl
YlNtYXJ0UGFzdGVQYm9hcmRUeXBlLCBXZWJBcmNoaXZlUGJvYXJkVHlwZSwgTlNSVEZEUGJvYXJk
VHlwZSwgTlNSVEZQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIG5pbF07Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldlYkFy
Y2hpdmVQYm9hcmRUeXBlLCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3Ry
aW5nUGJvYXJkVHlwZSwgbmlsXTsKLSAgICB9IGVsc2UgeyAvLyBEb24ndCB3cml0ZSBSVEZEIHRv
IHRoZSBwYXN0ZWJvYXJkIHdoZW4gdGhlIGNvcGllZCBhdHRyaWJ1dGVkIHN0cmluZyBoYXMgbm8g
YXR0YWNobWVudHMuCi0gICAgICAgIGlmIChjYW5TbWFydENvcHlPckRlbGV0ZSkKLSAgICAgICAg
ICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldlYlNtYXJ0UGFzdGVQYm9hcmRU
eXBlLCBXZWJBcmNoaXZlUGJvYXJkVHlwZSwgTlNSVEZQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2Fy
ZFR5cGUsIG5pbF07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBbTlNBcnJheSBh
cnJheVdpdGhPYmplY3RzOldlYkFyY2hpdmVQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5T
U3RyaW5nUGJvYXJkVHlwZSwgbmlsXTsKLSAgICB9Citjb25zdCBjaGFyKiBXZWJBcmNoaXZlUGJv
YXJkVHlwZSA9ICJBcHBsZSBXZWIgQXJjaGl2ZSBwYXN0ZWJvYXJkIHR5cGUiOworY29uc3QgY2hh
ciogV2ViU21hcnRQYXN0ZVBib2FyZFR5cGUgPSAiTmVYVCBzbWFydCBwYXN0ZSBwYXN0ZWJvYXJk
IHR5cGUiOworY29uc3QgY2hhciogV2ViVVJMTmFtZVBib2FyZFR5cGUgPSAicHVibGljLnVybC1u
YW1lIjsKK2NvbnN0IGNoYXIqIFdlYlVSTFBib2FyZFR5cGUgPSAicHVibGljLnVybCI7Citjb25z
dCBjaGFyKiBXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUgPSAiV2ViVVJMc1dpdGhUaXRsZXNQ
Ym9hcmRUeXBlIjsKKworc3RhdGljIFZlY3RvcjxTdHJpbmc+IHNlbGVjdGlvblBhc3RlYm9hcmRU
eXBlcyhib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBib29sIHNlbGVjdGlvbkNvbnRhaW5zQXR0
YWNobWVudHMpCit7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CisgICAgaWYgKGNhblNtYXJ0
Q29weU9yRGVsZXRlKQorICAgICAgICB0eXBlcy5hcHBlbmQoV2ViU21hcnRQYXN0ZVBib2FyZFR5
cGUpOworICAgIHR5cGVzLmFwcGVuZChXZWJBcmNoaXZlUGJvYXJkVHlwZSk7CisgICAgaWYgKHNl
bGVjdGlvbkNvbnRhaW5zQXR0YWNobWVudHMpCisgICAgICAgIHR5cGVzLmFwcGVuZChTdHJpbmco
TlNSVEZEUGJvYXJkVHlwZSkpOworICAgIHR5cGVzLmFwcGVuZChTdHJpbmcoTlNSVEZQYm9hcmRU
eXBlKSk7CisgICAgdHlwZXMuYXBwZW5kKFN0cmluZyhOU1N0cmluZ1Bib2FyZFR5cGUpKTsKKwor
ICAgIHJldHVybiB0eXBlczsKK30KKworc3RhdGljIGNvbnN0IFZlY3RvcjxTdHJpbmc+IHdyaXRh
YmxlVHlwZXNGb3JVUkwoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOworICAgIAorICAg
IHR5cGVzLmFwcGVuZChXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUpOworICAgIHR5cGVzLmFw
cGVuZChTdHJpbmcoTlNVUkxQYm9hcmRUeXBlKSk7CisgICAgdHlwZXMuYXBwZW5kKFdlYlVSTFBi
b2FyZFR5cGUpOworICAgIHR5cGVzLmFwcGVuZChXZWJVUkxOYW1lUGJvYXJkVHlwZSk7CisgICAg
dHlwZXMuYXBwZW5kKFN0cmluZyhOU1N0cmluZ1Bib2FyZFR5cGUpKTsgICAgICAgIAorICAgIHJl
dHVybiB0eXBlczsKIH0KIAotc3RhdGljIE5TQXJyYXkqIHdyaXRhYmxlVHlwZXNGb3JVUkwoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPE5TQXJyYXk+LCB0eXBlcywgKFtb
TlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgotICAgICAgICAgICAgV2ViVVJMc1dpdGhU
aXRsZXNQYm9hcmRUeXBlLAotICAgICAgICAgICAgTlNVUkxQYm9hcmRUeXBlLAotICAgICAgICAg
ICAgV2ViVVJMUGJvYXJkVHlwZSwKLSAgICAgICAgICAgIFdlYlVSTE5hbWVQYm9hcmRUeXBlLAot
ICAgICAgICAgICAgTlNTdHJpbmdQYm9hcmRUeXBlLAotICAgICAgICAgICAgbmlsXSkpOwotICAg
IHJldHVybiB0eXBlcy5nZXQoKTsKLX0KLQotc3RhdGljIGlubGluZSBOU0FycmF5KiBjcmVhdGVX
cml0YWJsZVR5cGVzRm9ySW1hZ2UoKQotewotICAgIE5TTXV0YWJsZUFycmF5ICp0eXBlcyA9IFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpOU1RJRkZQYm9hcmRUeXBlLCBu
aWxdOwotICAgIFt0eXBlcyBhZGRPYmplY3RzRnJvbUFycmF5OndyaXRhYmxlVHlwZXNGb3JVUkwo
KV07Ci0gICAgW3R5cGVzIGFkZE9iamVjdDpOU1JURkRQYm9hcmRUeXBlXTsKK3N0YXRpYyBpbmxp
bmUgVmVjdG9yPFN0cmluZz4gY3JlYXRlV3JpdGFibGVUeXBlc0ZvckltYWdlKCkKK3sKKyAgICBW
ZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICAKKyAgICB0eXBlcy5hcHBlbmQoU3RyaW5nKE5TVElG
RlBib2FyZFR5cGUpKTsKKyAgICB0eXBlcy5hcHBlbmQod3JpdGFibGVUeXBlc0ZvclVSTCgpKTsK
KyAgICB0eXBlcy5hcHBlbmQoU3RyaW5nKE5TUlRGRFBib2FyZFR5cGUpKTsKICAgICByZXR1cm4g
dHlwZXM7CiB9CiAKLXN0YXRpYyBOU0FycmF5KiB3cml0YWJsZVR5cGVzRm9ySW1hZ2UoKQorc3Rh
dGljIFZlY3RvcjxTdHJpbmc+IHdyaXRhYmxlVHlwZXNGb3JJbWFnZSgpCiB7Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8TlNBcnJheT4sIHR5cGVzLCAoY3JlYXRlV3JpdGFibGVU
eXBlc0ZvckltYWdlKCkpKTsKLSAgICByZXR1cm4gdHlwZXMuZ2V0KCk7CisgICAgVmVjdG9yPFN0
cmluZz4gdHlwZXM7CisgICAgdHlwZXMuYXBwZW5kKGNyZWF0ZVdyaXRhYmxlVHlwZXNGb3JJbWFn
ZSgpKTsKKyAgICByZXR1cm4gdHlwZXM7CiB9CiAKIFBhc3RlYm9hcmQqIFBhc3RlYm9hcmQ6Omdl
bmVyYWxQYXN0ZWJvYXJkKCkgCkBAIC0xMTgsMTcgKzEyMiwxNyBAQCBQYXN0ZWJvYXJkKiBQYXN0
ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyCiB9CiAKIFBhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKLSAgICA6IG1fcGFzdGVib2FyZChbTlNQYXN0ZWJv
YXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpwYXN0ZWJvYXJkTmFtZV0pCisgICAgOiBtX3Bhc3RlYm9h
cmROYW1lKHBhc3RlYm9hcmROYW1lKQogewogICAgIEFTU0VSVChwYXN0ZWJvYXJkTmFtZSk7CiB9
CiAKIHZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoKQogewotICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkg
ZGVjbGFyZVR5cGVzOltOU0FycmF5IGFycmF5XSBvd25lcjpuaWxdOworICAgIHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0VHlwZXMoVmVjdG9yPFN0cmluZz4o
KSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rp
b25Gb3JUeXBlcyhOU0FycmF5KiBwYXN0ZWJvYXJkVHlwZXMsIFJhbmdlKiBzZWxlY3RlZFJhbmdl
LCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFtZSogZnJhbWUpCit2b2lkIFBhc3RlYm9h
cmQ6OndyaXRlU2VsZWN0aW9uRm9yVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcywgUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUs
IEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIVdlYkFyY2hpdmVQYm9hcmRUeXBlKQogICAgICAg
ICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpOyAvLyBJbml0aWFsaXplcyBwYXN0ZWJv
YXJkIHR5cGVzLgpAQCAtMTQ1LDQ0ICsxNDksMzYgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNl
bGVjdGlvbkZvclR5cGVzKAogICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0
aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3Np
dGlvbigpLmFuY2hvck5vZGUoKSksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgPj0g
MCkKICAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2V0U3RhcnQoZW5jbG9zaW5nQW5jaG9yLCAwLCBl
Yyk7CiAKLSAgICAvLyBVc2luZyBkaWZmZXJlbnQgQVBJIGZvciBXZWJLaXQgYW5kIFdlYktpdDIu
CiAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gbmlsOwotICAgIGlm
IChmcmFtZS0+dmlldygpLT5wbGF0Zm9ybVdpZGdldCgpKQotICAgICAgICBhdHRyaWJ1dGVkU3Ry
aW5nID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBfaW5pdFdpdGhET01SYW5nZTpraXQo
c2VsZWN0ZWRSYW5nZSldIGF1dG9yZWxlYXNlXTsKLSNpZm5kZWYgQlVJTERJTkdfT05fTEVPUEFS
RAotICAgIGVsc2UgewotICAgICAgICAvLyBJbiBXZWJLaXQyIHdlIGFyZSB1c2luZyBhIGRpZmZl
cmVudCB3YXkgdG8gY3JlYXRlIHRoZSBOU0F0dHJpYnV0ZWRTdHJpbmcgZnJvbSB0aGUgRE9NcmFu
Z2UgdGhhdCBkb2Vzbid0IHJlcXVpcmUgYWNjZXNzIHRvIHRoZSBXZWJWaWV3LgotICAgICAgICBS
ZXRhaW5QdHI8V2ViSFRNTENvbnZlcnRlcj4gY29udmVydGVyKEFkb3B0TlMsIFtbV2ViSFRNTENv
bnZlcnRlciBhbGxvY10gaW5pdFdpdGhET01SYW5nZTpraXQoc2VsZWN0ZWRSYW5nZSldKTsKLSAg
ICAgICAgaWYgKGNvbnZlcnRlcikKLSAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbY29u
dmVydGVyLmdldCgpIGF0dHJpYnV0ZWRTdHJpbmddOwotICAgIH0KLSNlbmRpZgorICAgIFJldGFp
blB0cjxXZWJIVE1MQ29udmVydGVyPiBjb252ZXJ0ZXIoQWRvcHROUywgW1tXZWJIVE1MQ29udmVy
dGVyIGFsbG9jXSBpbml0V2l0aERPTVJhbmdlOmtpdChzZWxlY3RlZFJhbmdlKV0pOworICAgIGlm
IChjb252ZXJ0ZXIpCisgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbY29udmVydGVyLmdldCgp
IGF0dHJpYnV0ZWRTdHJpbmddOwogCi0gICAgTlNBcnJheSAqdHlwZXMgPSBwYXN0ZWJvYXJkVHlw
ZXMgPyBwYXN0ZWJvYXJkVHlwZXMgOiBzZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXMoY2FuU21hcnRD
b3B5T3JEZWxldGUsIFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKTsKLSAg
ICBbbV9wYXN0ZWJvYXJkLmdldCgpIGRlY2xhcmVUeXBlczp0eXBlcyBvd25lcjpuaWxdOworICAg
IGNvbnN0IFZlY3RvcjxTdHJpbmc+IHR5cGVzID0gIXBhc3RlYm9hcmRUeXBlcy5pc0VtcHR5KCkg
PyBwYXN0ZWJvYXJkVHlwZXMgOiBzZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXMoY2FuU21hcnRDb3B5
T3JEZWxldGUsIFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKTsKKyAgICBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHR5cGVz
LCBtX3Bhc3RlYm9hcmROYW1lKTsKICAgICBmcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpLT5kaWRT
ZXRTZWxlY3Rpb25UeXBlc0ZvclBhc3RlYm9hcmQoKTsKICAgICAKICAgICAvLyBQdXQgSFRNTCBv
biB0aGUgcGFzdGVib2FyZC4KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYkFyY2hp
dmVQYm9hcmRUeXBlXSkgeworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJBcmNoaXZlUGJvYXJk
VHlwZSkpIHsKICAgICAgICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGFyY2hpdmUgPSBMZWdh
Y3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKGZyYW1lKTsKICAgICAgICAgUmV0YWlu
UHRyPENGRGF0YVJlZj4gZGF0YSA9IGFyY2hpdmUgPyBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50
YXRpb24oKSA6IDA7Ci0gICAgICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0RGF0YTooTlNEYXRh
ICopZGF0YS5nZXQoKSBmb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlXTsKKyAgICAgICAgcGxh
dGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRCdWZmZXJGb3JUeXBl
KFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YSgoTlNEYXRhICopZGF0YS5nZXQoKSksIFdlYkFyY2hp
dmVQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKICAgICB9CiAgICAgCiAgICAgLy8gUHV0
IHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBvbiB0aGUgcGFzdGVib2FyZCAoUlRGL1JURkQgZm9ybWF0
KS4KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdKSB7Cisg
ICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU1JURkRQYm9hcmRUeXBlKSkpIHsKICAgICAg
ICAgTlNEYXRhICpSVEZERGF0YSA9IFthdHRyaWJ1dGVkU3RyaW5nIFJURkRGcm9tUmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVz
Om5pbF07Ci0gICAgICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0RGF0YTpSVEZERGF0YSBmb3JU
eXBlOk5TUlRGRFBib2FyZFR5cGVdOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPnNldEJ1ZmZlckZvclR5cGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNE
YXRhKChOU0RhdGEgKilSVEZERGF0YSkuZ2V0KCksIE5TUlRGRFBib2FyZFR5cGUsIG1fcGFzdGVi
b2FyZE5hbWUpOwogICAgIH0KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGUGJv
YXJkVHlwZV0pIHsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TUlRGUGJvYXJkVHlw
ZSkpKSB7CiAgICAgICAgIGlmIChbYXR0cmlidXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRz
XSkKICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQnlTdHJp
cHBpbmdBdHRhY2htZW50Q2hhcmFjdGVycyhhdHRyaWJ1dGVkU3RyaW5nKTsKICAgICAgICAgTlNE
YXRhICpSVEZEYXRhID0gW2F0dHJpYnV0ZWRTdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdl
KDAsIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpuaWxdOwot
ICAgICAgICBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldERhdGE6UlRGRGF0YSBmb3JUeXBlOk5TUlRG
UGJvYXJkVHlwZV07CisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+c2V0QnVmZmVyRm9yVHlwZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoKE5TRGF0
YSAqKVJURkRhdGEpLmdldCgpLCBOU1JURlBib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwog
ICAgIH0KICAgICAKICAgICAvLyBQdXQgcGxhaW4gc3RyaW5nIG9uIHRoZSBwYXN0ZWJvYXJkLgot
ICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSkgeworICAg
IGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoTlNTdHJpbmdQYm9hcmRUeXBlKSkpIHsKICAgICAg
ICAgLy8gTWFwICZuYnNwOyB0byBhIHBsYWluIG9sZCBzcGFjZSBiZWNhdXNlIHRoaXMgaXMgYmV0
dGVyIGZvciBzb3VyY2UgY29kZSwgb3RoZXIgYnJvd3NlcnMgZG8gaXQsCiAgICAgICAgIC8vIGFu
ZCBiZWNhdXNlIEhUTUwgZm9yY2VzIHlvdSB0byBkbyB0aGlzIGFueSB0aW1lIHlvdSB3YW50IHR3
byBzcGFjZXMgaW4gYSByb3cuCiAgICAgICAgIFN0cmluZyB0ZXh0ID0gZnJhbWUtPmVkaXRvcigp
LT5zZWxlY3RlZFRleHQoKTsKQEAgLTE5MCwyOSArMTg2LDMwIEBAIHZvaWQgUGFzdGVib2FyZDo6
d3JpdGVTZWxlY3Rpb25Gb3JUeXBlcygKICAgICAgICAgCiAgICAgICAgIE5TU3RyaW5nICpOb25C
cmVha2luZ1NwYWNlU3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOiZub0Jy
ZWFrU3BhY2UgbGVuZ3RoOjFdOwogICAgICAgICBbcyByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmlu
ZzpOb25CcmVha2luZ1NwYWNlU3RyaW5nIHdpdGhTdHJpbmc6QCIgIiBvcHRpb25zOjAgcmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgW3MgbGVuZ3RoXSldOwotICAgICAgICBbbV9wYXN0ZWJvYXJkLmdldCgp
IHNldFN0cmluZzpzIGZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlXTsKKyAgICAgICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKHMs
IE5TU3RyaW5nUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiAgICAgICAgIFtzIHJlbGVh
c2VdOwogICAgIH0KICAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYlNtYXJ0
UGFzdGVQYm9hcmRUeXBlXSkgewotICAgICAgICBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldERhdGE6
bmlsIGZvclR5cGU6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOwotICAgIH0KKyAgICBpZiAodHlw
ZXMuY29udGFpbnMoV2ViU21hcnRQYXN0ZVBib2FyZFR5cGUpKQorICAgICAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldEJ1ZmZlckZvclR5cGUoMCwgV2Vi
U21hcnRQYXN0ZVBib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogfQogCiB2b2lkIFBhc3Rl
Ym9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBbbV9wYXN0
ZWJvYXJkLmdldCgpIGRlY2xhcmVUeXBlczpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6TlNTdHJp
bmdQYm9hcmRUeXBlXSBvd25lcjpuaWxdOwotICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0U3Ry
aW5nOnRleHQgZm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdOworICAgIFZlY3RvcjxTdHJpbmc+
IHR5cGVzOworICAgIHR5cGVzLmFwcGVuZChOU1N0cmluZ1Bib2FyZFR5cGUpOworICAgIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0VHlwZXModHlwZXMsIG1f
cGFzdGVib2FyZE5hbWUpOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZSh0ZXh0LCBOU1N0cmluZ1Bib2FyZFR5cGUsIG1fcGFz
dGVib2FyZE5hbWUpOwogfQogICAgIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihS
YW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZy
YW1lKQogewotICAgIHdyaXRlU2VsZWN0aW9uRm9yVHlwZXMobmlsLCBzZWxlY3RlZFJhbmdlLCBj
YW5TbWFydENvcHlPckRlbGV0ZSwgZnJhbWUpOworICAgIHdyaXRlU2VsZWN0aW9uRm9yVHlwZXMo
VmVjdG9yPFN0cmluZz4oKSwgc2VsZWN0ZWRSYW5nZSwgY2FuU21hcnRDb3B5T3JEZWxldGUsIGZy
YW1lKTsKIH0KIAotc3RhdGljIHZvaWQgd3JpdGVVUkxGb3JUeXBlcyhOU0FycmF5KiB0eXBlcywg
TlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
dGl0bGVTdHIsIEZyYW1lKiBmcmFtZSkKK3N0YXRpYyB2b2lkIHdyaXRlVVJMRm9yVHlwZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGVTdHIsIEZyYW1lKiBmcmFtZSkKIHsK
LSAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6dHlwZXMgb3duZXI6bmlsXTsKKyAgICBwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHR5cGVzLCBw
YXN0ZWJvYXJkTmFtZSk7CiAgICAgCiAgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgpKTsKICAgICAK
QEAgLTIyNSwyNSArMjIyLDI1IEBAIHN0YXRpYyB2b2lkIHdyaXRlVVJMRm9yVHlwZXMoTlNBcnJh
eSogdHkKICAgICAgICAgaWYgKFt0aXRsZSBsZW5ndGhdID09IDApCiAgICAgICAgICAgICB0aXRs
ZSA9IHVzZXJWaXNpYmxlU3RyaW5nOwogICAgIH0KLSAgICAgICAgCi0gICAgaWYgKFt0eXBlcyBj
b250YWluc09iamVjdDpXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVdKQotICAgICAgICBbcGFz
dGVib2FyZCBzZXRQcm9wZXJ0eUxpc3Q6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3Q6dXNlclZpc2libGVTdHJpbmddLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6KE5TU3RyaW5nKil0
aXRsZVN0ci5zdHJpcFdoaXRlU3BhY2UoKV0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5pbF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOldlYlVS
THNXaXRoVGl0bGVzUGJvYXJkVHlwZV07Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpO
U1VSTFBib2FyZFR5cGVdKQotICAgICAgICBbY29jb2FVUkwgd3JpdGVUb1Bhc3RlYm9hcmQ6cGFz
dGVib2FyZF07Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJVUkxQYm9hcmRUeXBl
XSkKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOnVzZXJWaXNpYmxlU3RyaW5nIGZvclR5
cGU6V2ViVVJMUGJvYXJkVHlwZV07Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJV
UkxOYW1lUGJvYXJkVHlwZV0pCi0gICAgICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzp0aXRsZSBm
b3JUeXBlOldlYlVSTE5hbWVQYm9hcmRUeXBlXTsKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0pCi0gICAgICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzp1
c2VyVmlzaWJsZVN0cmluZyBmb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV07CisgICAgaWYgKHR5
cGVzLmNvbnRhaW5zKFdlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSkpIHsKKyAgICAgICAgVmVj
dG9yPFN0cmluZz4gcGF0aHM7CisgICAgICAgIHBhdGhzLmFwcGVuZCh1c2VyVmlzaWJsZVN0cmlu
Zyk7CisgICAgICAgIHBhdGhzLmFwcGVuZCh0aXRsZVN0ci5zdHJpcFdoaXRlU3BhY2UoKSk7Cisg
ICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0UGF0
aG5hbWVzRm9yVHlwZShwYXRocywgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBwYXN0ZWJv
YXJkTmFtZSk7CisgICAgfQorICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoTlNVUkxQYm9h
cmRUeXBlKSkpCisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+c2V0U3RyaW5nRm9yVHlwZShbY29jb2FVUkwgYWJzb2x1dGVTdHJpbmddLCBOU1VSTFBi
b2FyZFR5cGUsIHBhc3RlYm9hcmROYW1lKTsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoV2ViVVJM
UGJvYXJkVHlwZSkpCisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZSh1c2VyVmlzaWJsZVN0cmluZywgV2ViVVJMUGJvYXJk
VHlwZSwgcGFzdGVib2FyZE5hbWUpOworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJVUkxOYW1l
UGJvYXJkVHlwZSkpCisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZSh0aXRsZSwgV2ViVVJMTmFtZVBib2FyZFR5cGUsIHBh
c3RlYm9hcmROYW1lKTsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TU3RyaW5nUGJv
YXJkVHlwZSkpKQorICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUodXNlclZpc2libGVTdHJpbmcsIE5TU3RyaW5nUGJvYXJk
VHlwZSwgcGFzdGVib2FyZE5hbWUpOwogfQogICAgIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVS
TChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGVTdHIsIEZyYW1lKiBmcmFtZSkK
IHsKLSAgICB3cml0ZVVSTEZvclR5cGVzKHdyaXRhYmxlVHlwZXNGb3JVUkwoKSwgbV9wYXN0ZWJv
YXJkLmdldCgpLCB1cmwsIHRpdGxlU3RyLCBmcmFtZSk7CisgICAgd3JpdGVVUkxGb3JUeXBlcyh3
cml0YWJsZVR5cGVzRm9yVVJMKCksIG1fcGFzdGVib2FyZE5hbWUsIHVybCwgdGl0bGVTdHIsIGZy
YW1lKTsKIH0KIAogc3RhdGljIE5TRmlsZVdyYXBwZXIqIGZpbGVXcmFwcGVyRm9ySW1hZ2UoQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlLCBOU1VSTCAqdXJsKQpAQCAtMjU5LDcgKzI1Niw3IEBAIHN0
YXRpYyBOU0ZpbGVXcmFwcGVyKiBmaWxlV3JhcHBlckZvckltYWcKICAgICByZXR1cm4gd3JhcHBl
cjsKIH0KIAotc3RhdGljIHZvaWQgd3JpdGVGaWxlV3JhcHBlckFzUlRGREF0dGFjaG1lbnQoTlNG
aWxlV3JhcHBlciogd3JhcHBlciwgTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkKQorc3RhdGljIHZv
aWQgd3JpdGVGaWxlV3JhcHBlckFzUlRGREF0dGFjaG1lbnQoTlNGaWxlV3JhcHBlciogd3JhcHBl
ciwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBOU1RleHRBdHRhY2htZW50
ICphdHRhY2htZW50ID0gW1tOU1RleHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aEZpbGVXcmFw
cGVyOndyYXBwZXJdOwogICAgIApAQCAtMjY3LDcgKzI2NCw3IEBAIHN0YXRpYyB2b2lkIHdyaXRl
RmlsZVdyYXBwZXJBc1JURkRBdHRhY2gKICAgICBbYXR0YWNobWVudCByZWxlYXNlXTsKICAgICAK
ICAgICBOU0RhdGEgKlJURkREYXRhID0gW3N0cmluZyBSVEZERnJvbVJhbmdlOk5TTWFrZVJhbmdl
KDAsIFtzdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07Ci0gICAgW3Bhc3Rl
Ym9hcmQgc2V0RGF0YTpSVEZERGF0YSBmb3JUeXBlOk5TUlRGRFBib2FyZFR5cGVdOworICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVmZmVyRm9yVHlw
ZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoKE5TRGF0YSAqKVJURkREYXRhKS5nZXQoKSwgTlNS
VEZEUGJvYXJkVHlwZSwgcGFzdGVib2FyZE5hbWUpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxl
KQpAQCAtMjc3LDggKzI3NCw2IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBu
b2RlLCAKICAgICBpZiAoIShub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlz
SW1hZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRv
Y3VtZW50KCktPmZyYW1lKCk7Ci0KICAgICBOU1VSTCAqY29jb2FVUkwgPSB1cmw7CiAgICAgQVNT
RVJUKGNvY29hVVJMKTsKIApAQCAtMjg3LDY4ICsyODIsNzUgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3
cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1h
Z2UtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgd3JpdGVVUkxGb3JU
eXBlcyh3cml0YWJsZVR5cGVzRm9ySW1hZ2UoKSwgbV9wYXN0ZWJvYXJkLmdldCgpLCBjb2NvYVVS
TCwgbnNTdHJpbmdOaWxJZkVtcHR5KHRpdGxlKSwgZnJhbWUpOworICAgIHdyaXRlVVJMRm9yVHlw
ZXMod3JpdGFibGVUeXBlc0ZvckltYWdlKCksIG1fcGFzdGVib2FyZE5hbWUsIGNvY29hVVJMLCBu
c1N0cmluZ05pbElmRW1wdHkodGl0bGUpLCBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKICAg
ICAKICAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5k
ZXJlcik7CiAgICAgQVNTRVJUKGltYWdlKTsKICAgICAKLSAgICBbbV9wYXN0ZWJvYXJkLmdldCgp
IHNldERhdGE6W2ltYWdlLT5nZXROU0ltYWdlKCkgVElGRlJlcHJlc2VudGF0aW9uXSBmb3JUeXBl
Ok5TVElGRlBib2FyZFR5cGVdOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJk
U3RyYXRlZ3koKS0+c2V0QnVmZmVyRm9yVHlwZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoKE5T
RGF0YSAqKWltYWdlLT5nZXROU0ltYWdlKCkpLCBOU1RJRkZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9h
cmROYW1lKTsKIAogICAgIFN0cmluZyBNSU1FVHlwZSA9IGNhY2hlZEltYWdlLT5yZXNwb25zZSgp
Lm1pbWVUeXBlKCk7CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1h
Z2VSZXNvdXJjZU1JTUVUeXBlKE1JTUVUeXBlKSk7CiAKLSAgICB3cml0ZUZpbGVXcmFwcGVyQXNS
VEZEQXR0YWNobWVudChmaWxlV3JhcHBlckZvckltYWdlKGNhY2hlZEltYWdlLCBjb2NvYVVSTCks
IG1fcGFzdGVib2FyZC5nZXQoKSk7CisgICAgd3JpdGVGaWxlV3JhcHBlckFzUlRGREF0dGFjaG1l
bnQoZmlsZVdyYXBwZXJGb3JJbWFnZShjYWNoZWRJbWFnZSwgY29jb2FVUkwpLCBtX3Bhc3RlYm9h
cmROYW1lKTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUNsaXBib2FyZChDbGlwYm9hcmQq
IGNsaXBib2FyZCkKIHsKKyAgICAvLyBGSVhNRTogdGhpcyBpcyB0aGUgbGFzdCBhY2Nlc3MgdG8g
TlNQYXN0ZWJvYXJkLiBJdCB3aWxsIHJlbW92ZWQgd2hlbiB0aGUgQ2xpcGJvYXJkTWFjCisgICAg
Ly8gY2xhc3MgaXMgcmVmYWN0b3JlZC4KICAgICBOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQgPSBz
dGF0aWNfY2FzdDxDbGlwYm9hcmRNYWMqPihjbGlwYm9hcmQpLT5wYXN0ZWJvYXJkKCk7Ci0gICAg
TlNBcnJheSogdHlwZXMgPSBbcGFzdGVib2FyZCB0eXBlc107Ci0KLSAgICBbbV9wYXN0ZWJvYXJk
LmdldCgpIGFkZFR5cGVzOnR5cGVzIG93bmVyOm5pbF07Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGkg
PSAwOyBpIDwgW3R5cGVzIGNvdW50XTsgaSsrKSB7Ci0gICAgICAgIE5TU3RyaW5nKiB0eXBlID0g
W3R5cGVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0
RGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTp0eXBlXSBmb3JUeXBlOnR5cGVdOwotICAgIH0K
KyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNvcHkoW3Bh
c3RlYm9hcmQgbmFtZV0sIG1fcGFzdGVib2FyZE5hbWUpOwogfQogCiBib29sIFBhc3RlYm9hcmQ6
OmNhblNtYXJ0UmVwbGFjZSgpCiB7Ci0gICAgcmV0dXJuIFtbbV9wYXN0ZWJvYXJkLmdldCgpIHR5
cGVzXSBjb250YWluc09iamVjdDpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07CisgICAgVmVjdG9y
PFN0cmluZz4gdHlwZXM7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJh
dGVneSgpLT5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgcmV0dXJuIHR5
cGVzLmNvbnRhaW5zKFdlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlKTsKIH0KIAogU3RyaW5nIFBhc3Rl
Ym9hcmQ6OnBsYWluVGV4dChGcmFtZSogZnJhbWUpCiB7Ci0gICAgTlNBcnJheSAqdHlwZXMgPSBb
bV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVzXTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAg
ICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5
cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKICAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0pCi0gICAgICAgIHJldHVybiBbW21fcGFzdGVib2FyZC5n
ZXQoKSBzdHJpbmdGb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdX
aXRoQ2Fub25pY2FsTWFwcGluZ107CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU1N0
cmluZ1Bib2FyZFR5cGUpKSkKKyAgICAgICAgcmV0dXJuIFsoTlNTdHJpbmcgKilwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnN0cmluZ0ZvclR5cGUoTlNTdHJpbmdQ
Ym9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmlj
YWxNYXBwaW5nXTsKICAgICAKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJp
bmcgPSBuaWw7CiAgICAgTlNTdHJpbmcgKnN0cmluZzsKIAotICAgIGlmIChbdHlwZXMgY29udGFp
bnNPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV0pCi0gICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOlttX3Bhc3RlYm9hcmQuZ2V0
KCkgZGF0YUZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExd
OwotICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5pbCAmJiBbdHlwZXMgY29udGFpbnNPYmpl
Y3Q6TlNSVEZQYm9hcmRUeXBlXSkKLSAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtbTlNBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpbbV9wYXN0ZWJvYXJkLmdldCgpIGRhdGFG
b3JUeXBlOk5TUlRGUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOworICAgIGlm
ICh0eXBlcy5jb250YWlucyhTdHJpbmcoTlNSVEZEUGJvYXJkVHlwZSkpKSB7CisgICAgICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5cGUoTlNSVEZEUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJk
TmFtZSk7CisgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhSVEZEOltkYXRhLT5jcmVhdGVOU0RhdGEoKSBhdXRvcmVsZWFzZV0gZG9j
dW1lbnRBdHRyaWJ1dGVzOk5VTExdOworICAgIH0KKyAgICBpZiAoYXR0cmlidXRlZFN0cmluZyA9
PSBuaWwgJiYgdHlwZXMuY29udGFpbnMoU3RyaW5nKE5TUlRGUGJvYXJkVHlwZSkpKSB7CisgICAg
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5cGUoTlNSVEZQYm9hcmRUeXBlLCBtX3Bhc3Rl
Ym9hcmROYW1lKTsKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFJURjpbZGF0YS0+Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVhc2Vd
IGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICB9CiAgICAgaWYgKGF0dHJpYnV0ZWRTdHJp
bmcgIT0gbmlsKSB7CiAgICAgICAgIHN0cmluZyA9IFtbYXR0cmlidXRlZFN0cmluZyBzdHJpbmdd
IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOwogICAgICAgICBbYXR0cmli
dXRlZFN0cmluZyByZWxlYXNlXTsKICAgICAgICAgcmV0dXJuIHN0cmluZzsKICAgICB9CiAgICAg
Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdKSB7
Ci0gICAgICAgIHN0cmluZyA9IFtbW21fcGFzdGVib2FyZC5nZXQoKSBwcm9wZXJ0eUxpc3RGb3JU
eXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV0gY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiXG4i
XSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXTsKKyAgICBpZiAodHlwZXMu
Y29udGFpbnMoU3RyaW5nKE5TRmlsZW5hbWVzUGJvYXJkVHlwZSkpKSB7CisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IHBhdGhuYW1lczsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5nZXRQYXRobmFtZXNGb3JUeXBlKHBhdGhuYW1lcywgTlNGaWxlbmFt
ZXNQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwYXRobmFtZXMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICBzdHJpbmcgPSBbc3Ry
aW5nIGxlbmd0aF0gPyBAIlxuIiArIHBhdGhuYW1lc1tpXSA6IHBhdGhuYW1lc1tpXTsKKyAgICAg
ICAgc3RyaW5nID0gW3N0cmluZyBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5n
XTsKICAgICAgICAgaWYgKHN0cmluZyAhPSBuaWwpCiAgICAgICAgICAgICByZXR1cm4gc3RyaW5n
OwogICAgIH0KICAgICAKLSAgICAKLSAgICBpZiAoTlNVUkwgKnVybCA9IFtOU1VSTCBVUkxGcm9t
UGFzdGVib2FyZDptX3Bhc3RlYm9hcmQuZ2V0KCldKSB7CisgICAgc3RyaW5nID0gcGxhdGZvcm1T
dHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zdHJpbmdGb3JUeXBlKE5TVVJMUGJv
YXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgaWYgKFtzdHJpbmcgbGVuZ3RoXSkgewog
ICAgICAgICAvLyBGSVhNRTogdXNpbmcgdGhlIGVkaXRvckNsaWVudCB0byBjYWxsIGludG8gd2Vi
a2l0LCBmb3Igbm93LCBzaW5jZSAKICAgICAgICAgLy8gY2FsbGluZyBfd2ViX3VzZXJWaXNpYmxl
U3RyaW5nIGZyb20gV2ViQ29yZSBpbnZvbHZlcyBtaWdyYXRpbmcgYSBzaXphYmxlIHdlYiBvZiAK
ICAgICAgICAgLy8gaGVscGVyIGNvZGUgdGhhdCBzaG91bGQgZWl0aGVyIGJlIGRvbmUgaW4gYSBz
ZXBhcmF0ZSBwYXRjaCBvciBmaWd1cmVkIG91dCBpbiBhbm90aGVyIHdheS4KLSAgICAgICAgc3Ry
aW5nID0gZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+dXNlclZpc2libGVTdHJpbmcodXJsKTsK
KyAgICAgICAgc3RyaW5nID0gZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+dXNlclZpc2libGVT
dHJpbmcoW05TVVJMIFVSTFdpdGhTdHJpbmc6c3RyaW5nXSk7CiAgICAgICAgIGlmIChbc3RyaW5n
IGxlbmd0aF0gPiAwKQogICAgICAgICAgICAgcmV0dXJuIFtzdHJpbmcgcHJlY29tcG9zZWRTdHJp
bmdXaXRoQ2Fub25pY2FsTWFwcGluZ107CiAgICAgfQpAQCAtMzc3LDE2ICszNzksMjAgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdQogICAgIHJldHVybiAwOwogfQog
Ci1zdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50V2l0
aFJURihGcmFtZSogZnJhbWUsIE5TU3RyaW5nICpwYXN0ZWJvYXJkVHlwZSwgTlNQYXN0ZWJvYXJk
ICpwYXN0ZWJvYXJkKQorc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1l
bnRGcmFnbWVudFdpdGhSVEYoRnJhbWUqIGZyYW1lLCBOU1N0cmluZyAqcGFzdGVib2FyZFR5cGUs
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvcmROYW1lKQogewogICAgIGlmICghZnJhbWUgfHwgIWZyYW1l
LT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IG5pbDsK
LSAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0gTlNSVEZEUGJvYXJkVHlwZSkKLSAgICAgICAgc3Ry
aW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpbcGFzdGVib2Fy
ZCBkYXRhRm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07
Ci0gICAgaWYgKHN0cmluZyA9PSBuaWwpCi0gICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURlBi
b2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICBpZiAocGFzdGVib2FyZFR5
cGUgPT0gTlNSVEZEUGJvYXJkVHlwZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBk
YXRhID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5idWZmZXJG
b3JUeXBlKE5TUlRGRFBib2FyZFR5cGUsIHBhc3RlYm9yZE5hbWUpOworICAgICAgICBzdHJpbmcg
PSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOltkYXRhLT5jcmVhdGVO
U0RhdGEoKSBhdXRvcmVsZWFzZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOworICAgIH0KKyAg
ICBpZiAoc3RyaW5nID09IG5pbCkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRh
ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5idWZmZXJGb3JU
eXBlKE5TUlRGUGJvYXJkVHlwZSwgcGFzdGVib3JkTmFtZSk7CisgICAgICAgIHN0cmluZyA9IFtb
TlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpbZGF0YS0+Y3JlYXRlTlNEYXRh
KCkgYXV0b3JlbGVhc2VdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICB9CiAgICAgaWYg
KHN0cmluZyA9PSBuaWwpCiAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTQyNiwxMiArNDMyLDEz
IEBAIHN0YXRpYyBOU1VSTCogdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydCgKIAogUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBm
cmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9v
bCYgY2hvc2VQbGFpblRleHQpCiB7Ci0gICAgTlNBcnJheSAqdHlwZXMgPSBbbV9wYXN0ZWJvYXJk
LmdldCgpIHR5cGVzXTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3Rl
Ym9hcmROYW1lKTsKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQ7CiAgICAg
Y2hvc2VQbGFpblRleHQgPSBmYWxzZTsKIAotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6
V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7Ci0gICAgICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBjb3JlQXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShLVVJMKCksIFNoYXJlZEJ1
ZmZlcjo6d3JhcE5TRGF0YShbbV9wYXN0ZWJvYXJkLmdldCgpIGRhdGFGb3JUeXBlOldlYkFyY2hp
dmVQYm9hcmRUeXBlXSkuZ2V0KCkpOworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJBcmNoaXZl
UGJvYXJkVHlwZSkpIHsKKyAgICAgICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNvcmVBcmNo
aXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKEtVUkwoKSwgcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5idWZmZXJGb3JUeXBlKFdlYkFyY2hpdmVQYm9hcmRU
eXBlLCBtX3Bhc3RlYm9hcmROYW1lKS5nZXQoKSk7CiAgICAgICAgIGlmIChjb3JlQXJjaGl2ZSkg
ewogICAgICAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gbWFpblJlc291cmNlID0gY29y
ZUFyY2hpdmUtPm1haW5SZXNvdXJjZSgpOwogICAgICAgICAgICAgaWYgKG1haW5SZXNvdXJjZSkg
ewpAQCAtNDU0LDE3ICs0NjEsMTYgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0
ZWJvYXJkOgogICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICB9IAog
Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdKSB7
Ci0gICAgICAgIE5TQXJyYXkqIHBhdGhzID0gW21fcGFzdGVib2FyZC5nZXQoKSBwcm9wZXJ0eUxp
c3RGb3JUeXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV07Ci0gICAgICAgIE5TRW51bWVyYXRvciog
ZW51bWVyYXRvciA9IFtwYXRocyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICAgICAgTlNTdHJpbmcq
IHBhdGg7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU0ZpbGVuYW1lc1Bib2FyZFR5
cGUpKSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKKyAgICAgICAgcGxhdGZvcm1T
dHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRQYXRobmFtZXNGb3JUeXBlKHBh
dGhzLCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogICAgICAgICBW
ZWN0b3I8IFJlZlB0cjxOb2RlPiA+IHJlZk5vZGVzVmVjdG9yOwogICAgICAgICBWZWN0b3I8Tm9k
ZSo+IG5vZGVzVmVjdG9yOwogCi0gICAgICAgIHdoaWxlICgocGF0aCA9IFtlbnVtZXJhdG9yIG5l
eHRPYmplY3RdKSAhPSBuaWwpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXRo
cy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgLy8gTm9uLWltYWdlIGZpbGUgdHlwZXM7IF93
ZWJfdXNlclZpc2libGVTdHJpbmcgaXMgYXBwcm9wcmlhdGUgaGVyZSBiZWNhdXNlIHRoaXMgd2ls
bAogICAgICAgICAgICAgLy8gYmUgcGFzdGVkIGFzIHZpc2libGUgdGV4dC4KLSAgICAgICAgICAg
IE5TU3RyaW5nICp1cmwgPSBmcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpLT51c2VyVmlzaWJsZVN0
cmluZyhbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGhdKTsKKyAgICAgICAgICAgIE5TU3RyaW5n
ICp1cmwgPSBmcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpLT51c2VyVmlzaWJsZVN0cmluZyhbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOnBhdGhzW2ldXSk7CiAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4g
dGV4dE5vZGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUodXJsKTsKICAgICAg
ICAgICAgIHJlZk5vZGVzVmVjdG9yLmFwcGVuZCh0ZXh0Tm9kZS5nZXQoKSk7CiAgICAgICAgICAg
ICBub2Rlc1ZlY3Rvci5hcHBlbmQodGV4dE5vZGUuZ2V0KCkpOwpAQCAtNDc0LDggKzQ4MCw4IEBA
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDoKICAgICAgICAgICAgIHJl
dHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgaWYgKFt0eXBlcyBjb250YWlu
c09iamVjdDpOU0hUTUxQYm9hcmRUeXBlXSkgewotICAgICAgICBOU1N0cmluZyAqSFRNTFN0cmlu
ZyA9IFttX3Bhc3RlYm9hcmQuZ2V0KCkgc3RyaW5nRm9yVHlwZTpOU0hUTUxQYm9hcmRUeXBlXTsK
KyAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TSFRNTFBib2FyZFR5cGUpKSkgeworICAg
ICAgICBOU1N0cmluZyAqSFRNTFN0cmluZyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJv
YXJkU3RyYXRlZ3koKS0+c3RyaW5nRm9yVHlwZShOU0hUTUxQYm9hcmRUeXBlLCBtX3Bhc3RlYm9h
cmROYW1lKTsKICAgICAgICAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBNaWNyb3NvZnQncyBI
VE1MIHBhc3RlYm9hcmQgZGF0YSB3b3JrLiBTZWUgMzc3ODc4NS4KICAgICAgICAgaWYgKFtIVE1M
U3RyaW5nIGhhc1ByZWZpeDpAIlZlcnNpb246Il0pIHsKICAgICAgICAgICAgIE5TUmFuZ2UgcmFu
Z2UgPSBbSFRNTFN0cmluZyByYW5nZU9mU3RyaW5nOkAiPGh0bWwiIG9wdGlvbnM6TlNDYXNlSW5z
ZW5zaXRpdmVTZWFyY2hdOwpAQCAtNDg4LDM2ICs0OTQsMjggQEAgUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBQYXN0ZWJvYXJkOgogICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVh
c2UoKTsKICAgICB9CiAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2Fy
ZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRXaXRoUlRGKGZy
YW1lLCBOU1JURkRQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmQuZ2V0KCkpKSkKKyAgICBpZiAodHlw
ZXMuY29udGFpbnMoU3RyaW5nKE5TUlRGRFBib2FyZFR5cGUpKSAmJgorICAgICAgICAoZnJhZ21l
bnQgPSBkb2N1bWVudEZyYWdtZW50V2l0aFJURihmcmFtZSwgTlNSVEZEUGJvYXJkVHlwZSwgbV9w
YXN0ZWJvYXJkTmFtZSkpKQogICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAKLSAg
ICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGUGJvYXJkVHlwZV0gJiYKLSAgICAgICAg
KGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhSVEYoZnJhbWUsIE5TUlRGUGJvYXJkVHlw
ZSwgbV9wYXN0ZWJvYXJkLmdldCgpKSkpCisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhO
U1JURlBib2FyZFR5cGUpKSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50
V2l0aFJURihmcmFtZSwgTlNSVEZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKSkpCiAgICAg
ICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5z
T2JqZWN0Ok5TVElGRlBib2FyZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IGRvY3VtZW50
RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZShmcmFtZSwgQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUo
U2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtbW21fcGFzdGVib2FyZC5nZXQoKSBkYXRhRm9yVHlw
ZTpOU1RJRkZQYm9hcmRUeXBlXSBjb3B5XSBhdXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVs
YXRpdmVQYXJ0KEAiaW1hZ2UudGlmZiIpLCAiaW1hZ2UvdGlmZiIsICIiLCAiIikpKSkKKyAgICBp
ZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TVElGRlBib2FyZFR5cGUpKSAmJgorICAgICAgICAo
ZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UoZnJhbWUsIEFyY2hp
dmVSZXNvdXJjZTo6Y3JlYXRlKHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+YnVmZmVyRm9yVHlwZShOU1RJRkZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKSwg
dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnRpZmYiKSwgImltYWdlL3RpZmYiLCAi
IiwgIiIpKSkpCiAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAKLSAgICBpZiAo
W3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUERGUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdt
ZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlKGZyYW1lLCBBcmNoaXZlUmVz
b3VyY2U6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoW1tbbV9wYXN0ZWJvYXJkLmdl
dCgpIGRhdGFGb3JUeXBlOk5TUERGUGJvYXJkVHlwZV0gY29weV0gYXV0b3JlbGVhc2VdKSwgdW5p
cXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImFwcGxpY2F0aW9uLnBkZiIpLCAiYXBwbGljYXRpb24v
cGRmIiwgIiIsICIiKSkpKQorICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoTlNQREZQYm9h
cmRUeXBlKSkgJiYKKyAgICAgICAgKGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFn
ZVJlc291cmNlKGZyYW1lLCBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5cGUoTlNQREZQYm9hcmRUeXBl
LCBtX3Bhc3RlYm9hcmROYW1lKS5nZXQoKSwgdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImFw
cGxpY2F0aW9uLnBkZiIpLCAiYXBwbGljYXRpb24vcGRmIiwgIiIsICIiKSkpKQogICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogCi0jaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRAot
ICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNQSUNUUGJvYXJkVHlwZV0gJiYKLSAgICAg
ICAgKGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlKGZyYW1lLCBB
cmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoW1tbbV9wYXN0
ZWJvYXJkLmdldCgpIGRhdGFGb3JUeXBlOk5TUElDVFBib2FyZFR5cGVdIGNvcHldIGF1dG9yZWxl
YXNlXSksIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS5waWN0IiksICJpbWFnZS9w
aWN0IiwgIiIsICIiKSkpKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotI2Vu
ZGlmCi0KLSAgICAvLyBPbmx5IDEwLjUgYW5kIGhpZ2hlciBzdXBwb3J0IHNldHRpbmcgYW5kIHJl
dHJpZXZpbmcgcGFzdGVib2FyZCB0eXBlcyB3aXRoIFVUSXMsIGJ1dCB3ZSBkb24ndCBiZWxpZXZl
Ci0gICAgLy8gdGhhdCBhbnkgYXBwbGljYXRpb25zIG9uIFRpZ2VyIHB1dCB0eXBlcyBmb3Igd2hp
Y2ggd2Ugb25seSBoYXZlIGEgVVRJLCBsaWtlIFBORywgb24gdGhlIHBhc3RlYm9hcmQuCi0gICAg
aWYgKFt0eXBlcyBjb250YWluc09iamVjdDooTlNTdHJpbmcqKWtVVFR5cGVQTkddICYmCi0gICAg
ICAgIChmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZShmcmFtZSwg
QXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtbW21fcGFz
dGVib2FyZC5nZXQoKSBkYXRhRm9yVHlwZTooTlNTdHJpbmcqKWtVVFR5cGVQTkddIGNvcHldIGF1
dG9yZWxlYXNlXSksIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS5wbmciKSwgImlt
YWdlL3BuZyIsICIiLCAiIikpKSkKKyAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKGtVVFR5
cGVQTkcpKSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdl
UmVzb3VyY2UoZnJhbWUsIEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVmZmVyRm9yVHlwZShTdHJpbmcoa1VUVHlwZVBO
RyksIG1fcGFzdGVib2FyZE5hbWUpLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2Uu
cG5nIiksICJpbWFnZS9wbmciLCAiIiwgIiIpKSkpCiAgICAgICAgIHJldHVybiBmcmFnbWVudC5y
ZWxlYXNlKCk7CiAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TVVJMUGJvYXJkVHlw
ZV0pIHsKLSAgICAgICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxGcm9tUGFzdGVib2FyZDptX3Bh
c3RlYm9hcmQuZ2V0KCldOworICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoTlNVUkxQYm9h
cmRUeXBlKSkpIHsKKyAgICAgICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOnBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c3RyaW5nRm9yVHlwZShO
U1VSTFBib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpXTsKICAgICAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChkb2N1bWVudCk7CiAg
ICAgICAgIGlmICghZG9jdW1lbnQpCkBAIC01MjYsNyArNTI0LDcgQEAgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOgogICAgICAgICBOU1N0cmluZyAqVVJMU3RyaW5nID0g
W1VSTCBhYnNvbHV0ZVN0cmluZ107IC8vIE9yaWdpbmFsIGRhdGEgaXMgQVNDSUktb25seSwgc28g
dGhlcmUgaXMgbm8gbmVlZCB0byBwcmVjb21wb3NlLgogICAgICAgICBpZiAoW1VSTFN0cmluZyBs
ZW5ndGhdID09IDApCiAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICBOU1N0cmluZyAq
VVJMVGl0bGVTdHJpbmcgPSBbW21fcGFzdGVib2FyZC5nZXQoKSBzdHJpbmdGb3JUeXBlOldlYlVS
TE5hbWVQYm9hcmRUeXBlXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXTsK
KyAgICAgICAgTlNTdHJpbmcgKlVSTFRpdGxlU3RyaW5nID0gW3BsYXRmb3JtU3RyYXRlZ2llcygp
LT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c3RyaW5nRm9yVHlwZShXZWJVUkxOYW1lUGJvYXJkVHlw
ZSwgbV9wYXN0ZWJvYXJkTmFtZSkgcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGlu
Z107CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIGFuY2hvci0+c2V0QXR0cmli
dXRlKEhUTUxOYW1lczo6aHJlZkF0dHIsIFVSTFN0cmluZyk7CiAgICAgICAgIGFuY2hvci0+YXBw
ZW5kQ2hpbGQoZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKFVSTFRpdGxlU3RyaW5nKSwgZWMpOwpA
QCAtNTM3LDkgKzUzNSw5IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2Fy
ZDoKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChhbGxvd1BsYWluVGV4dCAmJiBbdHlwZXMg
Y29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSkgeworICAgIGlmIChhbGxvd1BsYWlu
VGV4dCAmJiB0eXBlcy5jb250YWlucyhTdHJpbmcoTlNTdHJpbmdQYm9hcmRUeXBlKSkpIHsKICAg
ICAgICAgY2hvc2VQbGFpblRleHQgPSB0cnVlOwotICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZy
YWdtZW50RnJvbVRleHQoY29udGV4dC5nZXQoKSwgW1ttX3Bhc3RlYm9hcmQuZ2V0KCkgc3RyaW5n
Rm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNh
bE1hcHBpbmddKTsKKyAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNv
bnRleHQuZ2V0KCksIFtwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PnN0cmluZ0ZvclR5cGUoTlNTdHJpbmdQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKSBwcmVj
b21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSk7CiAgICAgICAgIHJldHVybiBmcmFn
bWVudC5yZWxlYXNlKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0JKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJQbGF0Zm9ybVBhc3RlYm9hcmQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQbGF0Zm9ybVBhc3RlYm9hcmQ6OlBsYXRmb3JtUGFzdGVib2FyZChjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKQorICAgIDogbV9wYXN0ZWJvYXJkKFtOU1Bhc3RlYm9hcmQg
cGFzdGVib2FyZFdpdGhOYW1lOnBhc3RlYm9hcmROYW1lXSkKK3sKKyAgICBBU1NFUlQocGFzdGVi
b2FyZE5hbWUpOworfQorCit2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6Z2V0VHlwZXMoVmVjdG9y
PFN0cmluZz4mIHR5cGVzKQoreworICAgIE5TQXJyYXkgKnBhc3RlYm9hcmRUeXBlcyA9IFttX3Bh
c3RlYm9hcmQuZ2V0KCkgdHlwZXNdOworICAgIAorICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IFtwYXN0ZWJvYXJkVHlwZXMgY291bnRdOyBpKyspCisgICAgICAgIHR5cGVzLmFwcGVuZChb
cGFzdGVib2FyZFR5cGVzIG9iamVjdEF0SW5kZXg6aV0pOworfQorCitQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gUGxhdGZvcm1QYXN0ZWJvYXJkOjpidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZFR5cGUpCit7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShb
W1ttX3Bhc3RlYm9hcmQuZ2V0KCkgZGF0YUZvclR5cGU6cGFzdGVib2FyZFR5cGVdIGNvcHldIGF1
dG9yZWxlYXNlXSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpnZXRQYXRobmFtZXNG
b3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZFR5cGUpCit7CisgICAgTlNBcnJheSogcGF0aHMgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHByb3Bl
cnR5TGlzdEZvclR5cGU6cGFzdGVib2FyZFR5cGVdOworICAgIGZvciAoTlNVSW50ZWdlciBpID0g
MDsgaSA8IFtwYXRocyBjb3VudF07IGkrKykKKyAgICAgICAgcGF0aG5hbWVzLmFwcGVuZChbcGF0
aHMgb2JqZWN0QXRJbmRleDppXSk7Cit9CisKK1N0cmluZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnN0
cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKK3sKKyAgICByZXR1cm4g
W21fcGFzdGVib2FyZC5nZXQoKSBzdHJpbmdGb3JUeXBlOnBhc3RlYm9hcmRUeXBlXTsKK30KKwor
dm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2Fy
ZCkKK3sKKyAgICBOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3Rl
Ym9hcmRXaXRoTmFtZTpmcm9tUGFzdGVib2FyZF07CisgICAgTlNBcnJheSogdHlwZXMgPSBbcGFz
dGVib2FyZCB0eXBlc107CisgICAgCisgICAgW21fcGFzdGVib2FyZC5nZXQoKSBhZGRUeXBlczp0
eXBlcyBvd25lcjpuaWxdOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IFt0eXBlcyBj
b3VudF07IGkrKykgeworICAgICAgICBOU1N0cmluZyogdHlwZSA9IFt0eXBlcyBvYmplY3RBdElu
ZGV4OmldOworICAgICAgICBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldERhdGE6W3Bhc3RlYm9hcmQg
ZGF0YUZvclR5cGU6dHlwZV0gZm9yVHlwZTp0eXBlXTsKKyAgICB9ICAgIAorfQorCit2b2lkIFBs
YXRmb3JtUGFzdGVib2FyZDo6c2V0VHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcykKK3sKKyAgICBpZiAocGFzdGVib2FyZFR5cGVzLmlzRW1wdHkoKSkgeworICAgICAg
ICBbbV9wYXN0ZWJvYXJkLmdldCgpIGRlY2xhcmVUeXBlczpuaWwgb3duZXI6bmlsXTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gdHlwZXMo
QWRvcHROUywgW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGFzdGVib2FyZFR5cGVzLnNpemUoKTsgKytpKQorICAgICAgICBbdHlwZXMu
Z2V0KCkgYWRkT2JqZWN0OnBhc3RlYm9hcmRUeXBlc1tpXV07CisKKyAgICBbbV9wYXN0ZWJvYXJk
LmdldCgpIGRlY2xhcmVUeXBlczp0eXBlcy5nZXQoKSBvd25lcjpuaWxdOworfQorCit2b2lkIFBs
YXRmb3JtUGFzdGVib2FyZDo6c2V0QnVmZmVyRm9yVHlwZShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gYnVmZmVyLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQoreworICAgIFttX3Bhc3Rl
Ym9hcmQuZ2V0KCkgc2V0RGF0YTpbYnVmZmVyLT5jcmVhdGVOU0RhdGEoKSBhdXRvcmVsZWFzZV0g
Zm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV07Cit9CisKK3ZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpz
ZXRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpCit7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiBwYXRocyhBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7ICAgIAorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGF0aG5hbWVzLnNpemUoKTsgKytpKQorICAgICAgICBb
cGF0aHMuZ2V0KCkgYWRkT2JqZWN0OnBhdGhuYW1lc1tpXV07CisgICAgW21fcGFzdGVib2FyZC5n
ZXQoKSBzZXRQcm9wZXJ0eUxpc3Q6cGF0aHMuZ2V0KCkgZm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV07
Cit9CisKK3ZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQoreworICAgIFttX3Bh
c3RlYm9hcmQuZ2V0KCkgc2V0U3RyaW5nOnN0cmluZyBmb3JUeXBlOnBhc3RlYm9hcmRUeXBlXTsK
K30KKworfQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTA3Mjg5KQorKysgU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTItMDItMDkg
IEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciBN
YWMgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2YgdGhlIFBhc3RlYm9hcmQgY2xhc3MgdG8gdXNl
IFBsYXRmb3JtIFN0cmF0ZWdpZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03ODI4MgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyBhbnkgYWNj
ZXNzcyB0byB0aGUgTlNQYXN0ZWJvYXJkIG9iamVjdCBmcm9tIHRoZSBQYXN0ZWJvYXJkIGNsYXNz
IHdoaWNoCisgICAgICAgIG5vdyBtYWtlcyB1c2Ugb2YgYSBuZXcgcGFzdGVib2FyZFN0cmF0ZWd5
IG9iamVjdCB0aGF0IGlzIGltcGxlbWVudGVkIGJvdGggaW4gV2ViS2l0IGFuZAorICAgICAgICBX
ZWJLaXQyLiBUaGUgYWN0dWFsIGFjY2VzcyB0byBOU1Bhc3RlYm9hcmQgaXMgbm93IHBlcmZvcm1l
ZCBpbnNpZGUgdGhlIFBsYXRmb3JtUGFzdGVib2FyZAorICAgICAgICBjbGFzcy4gQ3VycmVudGx5
IGJvdGggV2ViS2l0IGFuZCBXZWJLaXQyIHVzZSB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBvZiB0
aGUgUGFzdGVib2FyZFN0cmF0ZWd5CisgICAgICAgIGludGVyZmFjZSBidXQgdGhpcyBvbmUgbW9y
ZSBzdGVwIGluIHRoZSBkaXJlY3Rpb24gb2YgcmVtb3ZpbmcgYWNjZXNzIHRvIE5TUGFzdGVib2Fy
ZCBmcm9tCisgICAgICAgIHRoZSBXZWJQcm9jZXNzLgorICAgICAgICBBcyBwYXJ0IG9mIHRoZSBy
ZWZhY3RvcmluZyB0aGUgSSd2ZSByZWR1Y2VkIHRvIGEgbWluaW11bSB0aGUgdXNlIG9mIE9CSi1D
IGNsYXNzZXMuCisgICAgICAgIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVn
aWVzLmNwcDogQWRkZWQgaW1wbGVtZW50YXRpb24gb2YgUGFzdGVib2FyZFN0cmF0ZWd5CisgICAg
ICAgIGludGVyZmFjZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpj
cmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3kpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmdldFR5cGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpidWZmZXJGb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpnZXRQYXRobmFtZXNGb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpzdHJpbmdGb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpjb3B5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVz
OjpzZXRUeXBlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0
QnVmZmVyRm9yVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6
c2V0UGF0aG5hbWVzRm9yVHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRl
Z2llczo6c2V0U3RyaW5nRm9yVHlwZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaDogQWRkZWQgUGFzdGVib2FyZFN0cmF0ZWd5Lgor
CiAyMDEyLTAyLTA5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtXSzJdIEFsbG93IHJlYWRpbmcgc29tZSBkZWJ1Zy1vbmx5IHByZWZlcmVuY2UgZmlsZXMK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHJldmlzaW9uIDEwNjgx
MSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtUGFzdGVi
b2FyZC5oPgogCiAjaWYgVVNFKENGKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTcw
LDYgKzcxLDExIEBAIFZpc2l0ZWRMaW5rU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2kKICAg
ICByZXR1cm4gdGhpczsKIH0KIAorUGFzdGVib2FyZFN0cmF0ZWd5KiBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpCit7CisgICAgcmV0dXJuIHRoaXM7Cit9
CisKIC8vIENvb2tpZXNTdHJhdGVneQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6bm90
aWZ5Q29va2llc0NoYW5nZWQoKQpAQCAtMTI1LDYgKzEzMSw2NCBAQCB2b2lkIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6YWRkVmlzaXRlZExpCiAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkVmlz
aXRlZExpbmsobGlua0hhc2gpOwogfQogCisjaWYgUExBVEZPUk0oTUFDKQorLy8gUGFzdGVib2Fy
ZFN0cmF0ZWd5CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRUeXBlcyhWZWN0b3I8
U3RyaW5nPiYgdHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit7CisgICAgUGxh
dGZvcm1QYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOworICAgIHBhc3RlYm9h
cmQuZ2V0VHlwZXModHlwZXMpOworfQorCitQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit7CisgICAgUGxhdGZv
cm1QYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOworICAgIHJldHVybiBwYXN0
ZWJvYXJkLmJ1ZmZlckZvclR5cGUocGFzdGVib2FyZFR5cGUpOworfQorCit2b2lkIFdlYlBsYXRm
b3JtU3RyYXRlZ2llczo6Z2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0b3I8U3RyaW5nPiYgcGF0aG5h
bWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKQoreworICAgIFBsYXRmb3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmRO
YW1lKTsKKyAgICBwYXN0ZWJvYXJkLmdldFBhdGhuYW1lc0ZvclR5cGUocGF0aG5hbWVzLCBwYXN0
ZWJvYXJkVHlwZSk7Cit9CisKK1N0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnN0cmluZ0Zv
clR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJk
TmFtZSk7CisgICAgcmV0dXJuIHBhc3RlYm9hcmQuc3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkVHlw
ZSk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb3B5KGNvbnN0IFN0cmluZyYg
ZnJvbVBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkKQoreworICAgIFBsYXRm
b3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHRvUGFzdGVib2FyZCk7CisgICAgcmV0dXJuIHBhc3Rl
Ym9hcmQuY29weShmcm9tUGFzdGVib2FyZCk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQoreworICAgIFBsYXRmb3JtUGFzdGVib2FyZCBwYXN0
ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKKyAgICByZXR1cm4gcGFzdGVib2FyZC5zZXRUeXBlcyhw
YXN0ZWJvYXJkVHlwZXMpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0QnVm
ZmVyRm9yVHlwZShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQoreworICAgIFBs
YXRmb3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKKyAgICByZXR1cm4g
cGFzdGVib2FyZC5zZXRCdWZmZXJGb3JUeXBlKGJ1ZmZlciwgcGFzdGVib2FyZFR5cGUpOworfQor
Cit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQoreworICAgIFBsYXRmb3JtUGFzdGVib2FyZCBw
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKKyAgICBwYXN0ZWJvYXJkLnNldFBhdGhuYW1lc0Zv
clR5cGUocGF0aG5hbWVzLCBwYXN0ZWJvYXJkVHlwZSk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpzZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQorewor
ICAgIFBsYXRmb3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKKyAgICBy
ZXR1cm4gcGFzdGVib2FyZC5zZXRTdHJpbmdGb3JUeXBlKHN0cmluZywgcGFzdGVib2FyZFR5cGUp
OyAgICAKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFVT
RShQTEFURk9STV9TVFJBVEVHSUVTKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5oCShyZXZpc2lvbiAxMDY4MTEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MyArMjksMTQgQEAKICNpZiBVU0UoUExBVEZPUk1fU1RSQVRFR0lFUykKIAogI2luY2x1ZGUgPFdl
YkNvcmUvQ29va2llc1N0cmF0ZWd5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkU3Ry
YXRlZ3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU3RyYXRlZ2llcy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUGx1Z2luU3RyYXRlZ3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Zpc2l0ZWRM
aW5rU3RyYXRlZ3kuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llcyA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMsIHByaXZhdGUg
V2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlBsdWdpblN0cmF0ZWd5
LCBwcml2YXRlIFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RyYXRlZ3kgeworY2xhc3MgV2ViUGxhdGZv
cm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llcywgcHJpdmF0
ZSBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGx1Z2luU3RyYXRl
Z3ksIHByaXZhdGUgV2ViQ29yZTo6VmlzaXRlZExpbmtTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3Jl
OjpQYXN0ZWJvYXJkU3RyYXRlZ3kgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxp
emUoKTsKICAgICAKQEAgLTQ2LDYgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFdlYkNv
cmU6OkNvb2tpZXNTdHJhdGVneSogY3JlYXRlQ29va2llc1N0cmF0ZWd5KCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSogY3JlYXRlUGx1Z2luU3RyYXRlZ3ko
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RyYXRlZ3kqIGNy
ZWF0ZVZpc2l0ZWRMaW5rU3RyYXRlZ3koKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OlBhc3RlYm9hcmRTdHJhdGVneSogY3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkgT1ZFUlJJREU7
CiAKICAgICAvLyBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3kKICAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5Q29va2llc0NoYW5nZWQoKSBPVkVSUklERTsKQEAgLTU5LDYgKzYxLDIwIEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIGlzTGlua1Zpc2l0ZWQoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6
OkxpbmtIYXNoLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBiYXNlVVJMLCBjb25zdCBXVEY6OkF0b21p
Y1N0cmluZyYgYXR0cmlidXRlVVJMKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkVmlz
aXRlZExpbmsoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OkxpbmtIYXNoKSBPVkVSUklERTsKIAor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICAvLyBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0VHlwZXMoVmVjdG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7
CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2Fy
ZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnVm
ZmVyRm9yVHlwZShQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFN0cmluZ0ZvclR5cGUoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOworI2VuZGlmCisKICAgICBib29sIG1fcGx1
Z2luQ2FjaGVJc1BvcHVsYXRlZDsKICAgICBib29sIG1fc2hvdWxkUmVmcmVzaFBsdWdpbnM7CiAg
ICAgVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+IG1fY2FjaGVkUGx1Z2luczsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzI4OSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAyLTA5ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgTWFjIHBsYXRm
b3JtIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQYXN0ZWJvYXJkIGNsYXNzIHRvIHVzZSBQbGF0Zm9y
bSBTdHJhdGVnaWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzgyODIKKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgYW55IGFjY2Vzc3MgdG8g
dGhlIE5TUGFzdGVib2FyZCBvYmplY3QgZnJvbSB0aGUgUGFzdGVib2FyZCBjbGFzcyB3aGljaAor
ICAgICAgICBub3cgbWFrZXMgdXNlIG9mIGEgbmV3IHBhc3RlYm9hcmRTdHJhdGVneSBvYmplY3Qg
dGhhdCBpcyBpbXBsZW1lbnRlZCBib3RoIGluIFdlYktpdCBhbmQKKyAgICAgICAgV2ViS2l0Mi4g
VGhlIGFjdHVhbCBhY2Nlc3MgdG8gTlNQYXN0ZWJvYXJkIGlzIG5vdyBwZXJmb3JtZWQgaW5zaWRl
IHRoZSBQbGF0Zm9ybVBhc3RlYm9hcmQKKyAgICAgICAgY2xhc3MuIEN1cnJlbnRseSBib3RoIFdl
YktpdCBhbmQgV2ViS2l0MiB1c2UgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBhc3Rl
Ym9hcmRTdHJhdGVneQorICAgICAgICBpbnRlcmZhY2UgYnV0IHRoaXMgb25lIG1vcmUgc3RlcCBp
biB0aGUgZGlyZWN0aW9uIG9mIHJlbW92aW5nIGFjY2VzcyB0byBOU1Bhc3RlYm9hcmQgZnJvbQor
ICAgICAgICB0aGUgV2ViUHJvY2Vzcy4KKyAgICAgICAgQXMgcGFydCBvZiB0aGUgcmVmYWN0b3Jp
bmcgdGhlIEkndmUgcmVkdWNlZCB0byBhIG1pbmltdW0gdGhlIHVzZSBvZiBPQkotQyBjbGFzc2Vz
LgorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaDogQWRkZWQgUGFzdGVi
b2FyZFN0cmF0ZWd5LgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5tbTogQWRkZWQgaW1wbGVtZW50YXRpb24gb2YgUGFzdGVib2FyZFN0cmF0ZWd5IGludGVy
ZmFjZS4KKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGFzdGVib2FyZFN0
cmF0ZWd5KToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0VHlwZXMpOgorICAg
ICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpidWZmZXJGb3JUeXBlKToKKyAgICAgICAgKFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGF0aG5hbWVzRm9yVHlwZSk6CisgICAgICAgIChXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OnN0cmluZ0ZvclR5cGUpOgorICAgICAgICAoV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpjb3B5KToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0VHlw
ZXMpOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRCdWZmZXJGb3JUeXBlKToK
KyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0UGF0aG5hbWVzRm9yVHlwZSk6Cisg
ICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFN0cmluZ0ZvclR5cGUpOgorCiAyMDEy
LTAyLTA3ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdS
RVNTSU9OIChyMTA2NjgxKTogTnVsbCBjaGVjayBtaXNzaW5nIGluIFtXZWJGcmFtZShXZWJJbnRl
cm5hbCkgX3R5cGluZ1N0eWxlXQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDEwNjgx
MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsMTIgQEAKICNkZWZpbmUgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzX2gKIAogI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llc1N0cmF0ZWd5Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkU3RyYXRlZ3kuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtU3RyYXRlZ2llcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luU3RyYXRl
Z3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Zpc2l0ZWRMaW5rU3RyYXRlZ3kuaD4KIAotY2xhc3Mg
V2ViUGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2ll
cywgcHJpdmF0ZSBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGx1
Z2luU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6VmlzaXRlZExpbmtTdHJhdGVneSB7CitjbGFz
cyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1TdHJhdGVn
aWVzLCBwcml2YXRlIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpQ
bHVnaW5TdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpWaXNpdGVkTGlua1N0cmF0ZWd5LCBwcml2
YXRlIFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgaW5pdGlhbGl6ZSgpOwogICAgIApAQCAtNDIsNiArNDMsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgV2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5KiBjcmVhdGVDb29raWVzU3RyYXRlZ3koKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlBsdWdpblN0cmF0ZWd5KiBjcmVhdGVQbHVn
aW5TdHJhdGVneSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6VmlzaXRlZExpbmtT
dHJhdGVneSogY3JlYXRlVmlzaXRlZExpbmtTdHJhdGVneSgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6UGFzdGVib2FyZFN0cmF0ZWd5KiBjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3ko
KSBPVkVSUklERTsKIAogICAgIC8vIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneQogICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlDb29raWVzQ2hhbmdlZCgpIE9WRVJSSURFOwpAQCAtNTMsNiArNTUsMTkg
QEAgcHJpdmF0ZToKICAgICAvLyBXZWJDb3JlOjpWaXNpdGVkTGlua1N0cmF0ZWd5CiAgICAgdmly
dHVhbCBib29sIGlzTGlua1Zpc2l0ZWQoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OkxpbmtIYXNo
LCBjb25zdCBXZWJDb3JlOjpLVVJMJiBiYXNlVVJMLCBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYg
YXR0cmlidXRlVVJMKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkVmlzaXRlZExpbmso
V2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OkxpbmtIYXNoKSBPVkVSUklERTsKKyAgICAKKyAgICAv
LyBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VHlwZXMo
VmVjdG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZm
ZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZXRQYXRobmFtZXNGb3JU
eXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
U3RyaW5nIHN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCB2b2lk
IGNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3Rl
Ym9hcmQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnVmZmVyRm9yVHlwZShQYXNzUmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKSBPVkVSUklERTsKKyAgICAKIH07CiAKICNlbmRpZiAvLyBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXNfaApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQkocmV2aXNpb24gMTA2ODExKQorKysgU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0Jsb2NrRXhjZXB0
aW9ucy5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VH
cm91cC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVBhc3RlYm9hcmQuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTU4LDYgKzU5LDExIEBAIFZpc2l0ZWRMaW5rU3RyYXRl
Z3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2kKICAgICByZXR1cm4gdGhpczsKIH0KIAorUGFzdGVib2Fy
ZFN0cmF0ZWd5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVn
eSgpCit7CisgICAgcmV0dXJuIHRoaXM7Cit9CisKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVz
Ojpub3RpZnlDb29raWVzQ2hhbmdlZCgpCiB7CiB9CkBAIC05MCwzICs5Niw1NyBAQCB2b2lkIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6YWRkVmlzaXRlZExpCiB7CiAgICAgcmV0dXJuIHBhZ2UtPmdy
b3VwKCkuYWRkVmlzaXRlZExpbmtIYXNoKGhhc2gpOwogfQorCit2b2lkIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Z2V0VHlwZXMoVmVjdG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lKQoreworICAgIFBsYXRmb3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmROYW1lKTsKKyAgICBwYXN0ZWJvYXJkLmdldFR5cGVzKHR5cGVzKTsKK30KKworUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YnVmZmVy
Rm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lKQoreworICAgIFBsYXRmb3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKTsKKyAgICByZXR1cm4gcGFzdGVib2FyZC5idWZmZXJGb3JUeXBlKHBhc3RlYm9hcmRU
eXBlKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBhdGhuYW1lc0ZvclR5
cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlw
ZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9h
cmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CisgICAgcGFzdGVib2FyZC5nZXRQYXRobmFt
ZXNGb3JUeXBlKHBhdGhuYW1lcywgcGFzdGVib2FyZFR5cGUpOworfQorCitTdHJpbmcgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpzdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit7CisgICAgUGxhdGZvcm1QYXN0ZWJv
YXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOworICAgIHJldHVybiBwYXN0ZWJvYXJkLnN0
cmluZ0ZvclR5cGUocGFzdGVib2FyZFR5cGUpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Y29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRv
UGFzdGVib2FyZCkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQgcGFzdGVib2FyZCh0b1Bhc3Rl
Ym9hcmQpOworICAgIHJldHVybiBwYXN0ZWJvYXJkLmNvcHkoZnJvbVBhc3RlYm9hcmQpOworfQor
Cit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0VHlwZXMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3sKKyAg
ICBQbGF0Zm9ybVBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CisgICAgcmV0
dXJuIHBhc3RlYm9hcmQuc2V0VHlwZXMocGFzdGVib2FyZFR5cGVzKTsKK30KKwordm9pZCBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OnNldEJ1ZmZlckZvclR5cGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlciwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0
ZWJvYXJkTmFtZSk7CisgICAgcmV0dXJuIHBhc3RlYm9hcmQuc2V0QnVmZmVyRm9yVHlwZShidWZm
ZXIsIHBhc3RlYm9hcmRUeXBlKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNl
dFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3sK
KyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CisgICAg
cGFzdGVib2FyZC5zZXRQYXRobmFtZXNGb3JUeXBlKHBhdGhuYW1lcywgcGFzdGVib2FyZFR5cGUp
OworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0U3RyaW5nRm9yVHlwZShjb25z
dCBTdHJpbmcmIHN0cmluZywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQgcGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSk7CisgICAgcmV0dXJuIHBhc3RlYm9hcmQuc2V0U3RyaW5nRm9yVHlw
ZShzdHJpbmcsIHBhc3RlYm9hcmRUeXBlKTsgICAgCit9Cg==
</data>
<flag name="review"
          id="128198"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126819</attachid>
            <date>2012-02-13 13:39:24 -0800</date>
            <delta_ts>2012-02-13 13:39:24 -0800</delta_ts>
            <desc>Patch to verify the Qt build fix</desc>
            <filename>usestrategies2.txt</filename>
            <type>text/plain</type>
            <size>78668</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDEyLTAyLTEwICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgTWFjIHBsYXRm
b3JtIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQYXN0ZWJvYXJkIGNsYXNzIHRvIHVzZSBQbGF0Zm9y
bSBTdHJhdGVnaWVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzgyODIKKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgYW55IGFjY2Vzc3MgdG8g
dGhlIE5TUGFzdGVib2FyZCBvYmplY3QgZnJvbSB0aGUgUGFzdGVib2FyZCBjbGFzcyB3aGljaAor
ICAgICAgICBub3cgbWFrZXMgdXNlIG9mIGEgbmV3IHBhc3RlYm9hcmRTdHJhdGVneSBvYmplY3Qg
dGhhdCBpcyBpbXBsZW1lbnRlZCBib3RoIGluIFdlYktpdCBhbmQKKyAgICAgICAgV2ViS2l0Mi4g
VGhlIGFjdHVhbCBhY2Nlc3MgdG8gTlNQYXN0ZWJvYXJkIGlzIG5vdyBwZXJmb3JtZWQgaW5zaWRl
IHRoZSBQbGF0Zm9ybVBhc3RlYm9hcmQKKyAgICAgICAgY2xhc3MuIEN1cnJlbnRseSBib3RoIFdl
YktpdCBhbmQgV2ViS2l0MiB1c2UgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBhc3Rl
Ym9hcmRTdHJhdGVneQorICAgICAgICBpbnRlcmZhY2UgYnV0IHRoaXMgb25lIG1vcmUgc3RlcCBp
biB0aGUgZGlyZWN0aW9uIG9mIHJlbW92aW5nIGFjY2VzcyB0byBOU1Bhc3RlYm9hcmQgZnJvbQor
ICAgICAgICB0aGUgV2ViUHJvY2Vzcy4KKyAgICAgICAgQXMgcGFydCBvZiB0aGUgcmVmYWN0b3Jp
bmcgdGhlIEkndmUgcmVkdWNlZCB0byBhIG1pbmltdW0gdGhlIHVzZSBvZiBPQkotQyBjbGFzc2Vz
LgorCisgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvciwganVzdCBjb2RlIHJlZmFjdG9yaW5nLgor
CisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEFkZGVkIGV4cG9ydGVkIGNsYXNzIFBsYXRmb3Jt
UGFzdGVib2FyZC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
IEFkZGVkIG5ldyBmaWxlcyB0byB0aGUgYnVpbGQuCisgICAgICAgICogZWRpdGluZy9tYWMvRWRp
dG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZCk6IE5ldyBtZXRob2Qgc2lnbmF0dXJlIHRoYXQgZG9lc24ndCB1c2UgT0JKLUMgdHlw
ZXMuCisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOgorCisgICAgICAgICogcGxhdGZv
cm0vUGFzdGVib2FyZFN0cmF0ZWd5Lmg6IEFkZGVkIFBhc3RlYm9hcmRTdHJhdGVneSBhYnN0cmFj
dCBjbGFzcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaDogQWRkZWQu
IFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhY2Nlc3MgdG8gTlNQYXN0ZWJvYXJkLgorICAgICAgICAq
IHBsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1TdHJhdGVnaWVzOjpwYXN0ZWJvYXJkU3RyYXRlZ3kpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y2Fu
U21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Omluc2VydGFibGVQYXN0ZWJvYXJkVHlw
ZXMpOiAKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3Rpb25Q
YXN0ZWJvYXJkVHlwZXMpOiBDaGFuZ2VkIHRvIHVzZSBWZWN0b3I8U3RyaW5nPiBpbnN0ZWFkIG9m
IE5TQXJyYXkuCisgICAgICAgIChXZWJDb3JlOjp3cml0YWJsZVR5cGVzRm9yVVJMKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVXcml0YWJsZVR5cGVzRm9ySW1hZ2UpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OndyaXRhYmxlVHlwZXNGb3JJbWFnZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6UGFzdGVib2FyZCk6IFJlbW92ZWQgYWNjZXNzIHRvIE5T
UGFzdGVib2FyZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNsZWFyKTogTW9kaWZp
ZWQgdG8gdXNlIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uRm9yVHlwZXMpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6d3JpdGVVUkxGb3JUeXBlcyk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZDo6d3JpdGVVUkwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ondy
aXRlRmlsZVdyYXBwZXJBc1JURkRBdHRhY2htZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjp3cml0ZUNsaXBib2FyZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZDo6Y2FuU21hcnRSZXBsYWNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjpwbGFpblRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRvY3VtZW50RnJhZ21l
bnRXaXRoUlRGKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpkb2N1bWVu
dEZyYWdtZW50KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVi
b2FyZE1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6
OlBsYXRmb3JtUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9h
cmQ6OmdldFR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6YnVm
ZmVyRm9yVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OmdldFBh
dGhuYW1lc0ZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpz
dHJpbmdGb3JUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6Y29w
eSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnNldFR5cGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6c2V0QnVmZmVyRm9yVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnNldFBhdGhuYW1lc0ZvclR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRTdHJpbmdGb3JUeXBl
KToKKwogMjAxMi0wMi0xMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBQb3J0IFJ1bkxvb3AgdG8gV2luQ0UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CShyZXZpc2lvbiAxMDc1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29y
a2luZyBjb3B5KQpAQCAtNTQ5LDYgKzU0OSwxNiBAQCBfX1pON1dlYkNvcmUxN2NhY2hlRE9NU3Ry
dWN0dXJlRVBOU18xN0pTCiBfX1pON1dlYkNvcmUxN29wZW5UZW1wb3JhcnlGaWxlRVJLTjNXVEY2
U3RyaW5nRVJpCiBfX1pON1dlYkNvcmUxOEhUTUxDb250ZW50RWxlbWVudDZjcmVhdGVFUE5TXzhE
b2N1bWVudEUKIF9fWk43V2ViQ29yZTE4UGxhdGZvcm1TdHJhdGVnaWVzMjZjcmVhdGVMb2NhbGl6
YXRpb25TdHJhdGVneUV2CitfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEzYnVmZmVy
Rm9yVHlwZUVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJk
MTNzdHJpbmdGb3JUeXBlRVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMThQbGF0Zm9ybVBh
c3RlYm9hcmQxOXNldFBhdGhuYW1lc0ZvclR5cGVFUktOM1dURjZWZWN0b3JJTlMxXzZTdHJpbmdF
TG0wRUVFUktTM18KK19fWk43V2ViQ29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkMTlnZXRQYXRobmFt
ZXNGb3JUeXBlRVJOM1dURjZWZWN0b3JJTlMxXzZTdHJpbmdFTG0wRUVFUktTM18KK19fWk43V2Vi
Q29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkOHNldFR5cGVzRVJLTjNXVEY2VmVjdG9ySU5TMV82U3Ry
aW5nRUxtMEVFRQorX19aTjdXZWJDb3JlMThQbGF0Zm9ybVBhc3RlYm9hcmRDMUVSS04zV1RGNlN0
cmluZ0UKK19fWk43V2ViQ29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkOGdldFR5cGVzRVJOM1dURjZW
ZWN0b3JJTlMxXzZTdHJpbmdFTG0wRUVFCitfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2Fy
ZDRjb3B5RVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMThQbGF0Zm9ybVBhc3RlYm9hcmQx
NnNldEJ1ZmZlckZvclR5cGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTJTaGFyZWRCdWZmZXJFRUVS
S05TMV82U3RyaW5nRQorX19aTjdXZWJDb3JlMThQbGF0Zm9ybVBhc3RlYm9hcmQxNnNldFN0cmlu
Z0ZvclR5cGVFUktOM1dURjZTdHJpbmdFUzRfCiBfX1pON1dlYkNvcmUxOFNlYXJjaFBvcHVwTWVu
dU1hY0MxRVBOU18xNVBvcHVwTWVudUNsaWVudEUKIF9fWk43V2ViQ29yZTE4aXNTdGFydE9mUGFy
YWdyYXBoRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2lu
Z1J1bGVFCiBfX1pON1dlYkNvcmUxOHBsdWdpblNjcmlwdE9iamVjdEVQTjNKU0M5RXhlY1N0YXRl
RVBOU18xM0pTSFRNTEVsZW1lbnRFCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDc1ODUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTE2MDUsMTIgKzE2MDUsMTIgQEAKIAkJNTcyRTkyRkIxNEU1NDA1ODAwODdGRkJBIC8qIFNo
YWRvd1Jvb3RMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3MkU5MkY5MTRFNTQwNTgwMDg3RkZCQSAvKiBTaGFkb3dSb290TGlzdC5jcHAgKi87
IH07CiAJCTU3MkU5MkZDMTRFNTQwNTgwMDg3RkZCQSAvKiBTaGFkb3dSb290TGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyRTkyRkExNEU1NDA1
ODAwODdGRkJBIC8qIFNoYWRvd1Jvb3RMaXN0LmggKi87IH07CiAJCTU3M0QxMzQ3MTRDRTM5RkYw
MDU3QUJDQSAvKiBJbnNwZWN0b3JUeXBlQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzNEMTM0NTE0Q0UzOUZGMDA1N0FCQ0EgLyogSW5z
cGVjdG9yVHlwZUJ1aWxkZXIuY3BwICovOyB9OworCQk1N0I3OTFBMzE0QzZBNjI5MDBGMjAyRDEg
LyogSFRNTENvbnRlbnRTZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1N0I3OTE5RjE0QzZBNjI5MDBGMjAyRDEgLyogSFRNTENvbnRlbnRT
ZWxlY3Rvci5jcHAgKi87IH07CisJCTU3Qjc5MUE0MTRDNkE2MjkwMEYyMDJEMSAvKiBIVE1MQ29u
dGVudFNlbGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1N0I3OTFBMDE0QzZBNjI5MDBGMjAyRDEgLyogSFRNTENvbnRlbnRTZWxlY3Rvci5oICov
OyB9OwogCQk1N0I3OTFBNTE0QzZBNjI5MDBGMjAyRDEgLyogQ29udGVudFNlbGVjdG9yUXVlcnku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdCNzkx
QTExNEM2QTYyOTAwRjIwMkQxIC8qIENvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcCAqLzsgfTsKIAkJ
NTdCNzkxQTYxNEM2QTYyOTAwRjIwMkQxIC8qIENvbnRlbnRTZWxlY3RvclF1ZXJ5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0I3OTFBMjE0QzZBNjI5
MDBGMjAyRDEgLyogQ29udGVudFNlbGVjdG9yUXVlcnkuaCAqLzsgfTsKIAkJNTdCNzkxQTkxNEM2
QTYzMzAwRjIwMkQxIC8qIEhUTUxDb250ZW50RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0I3OTFBNzE0QzZBNjMzMDBGMjAyRDEgLyog
SFRNTENvbnRlbnRFbGVtZW50LmNwcCAqLzsgfTsKIAkJNTdCNzkxQUExNEM2QTYzMzAwRjIwMkQx
IC8qIEhUTUxDb250ZW50RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTdCNzkxQTgxNEM2QTYzMzAwRjIwMkQxIC8qIEhUTUxDb250ZW50RWxl
bWVudC5oICovOyB9OwotCQk1N0I3OTFBMzE0QzZBNjI5MDBGMjAyRDEgLyogSFRNTENvbnRlbnRT
ZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1N0I3OTE5RjE0QzZBNjI5MDBGMjAyRDEgLyogSFRNTENvbnRlbnRTZWxlY3Rvci5jcHAgKi87
IH07Ci0JCTU3Qjc5MUE0MTRDNkE2MjkwMEYyMDJEMSAvKiBIVE1MQ29udGVudFNlbGVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0I3OTFBMDE0
QzZBNjI5MDBGMjAyRDEgLyogSFRNTENvbnRlbnRTZWxlY3Rvci5oICovOyB9OwogCQk1OTA1QURC
RjEzMDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTA1QURCRDEzMDJGM0NFMDBGMTE2REYgLyog
WE1MVHJlZVZpZXdlci5jcHAgKi87IH07CiAJCTU5MDVBREMwMTMwMkYzQ0UwMEYxMTZERiAvKiBY
TUxUcmVlVmlld2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1OTA1QURCRTEzMDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdlci5oICovOyB9Owog
CQk1OTBFMUI0OTExRTRFRjRCMDA2OUY3ODQgLyogRGV2aWNlT3JpZW50YXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5MEUxQjQ4MTFFNEVGNEIw
MDY5Rjc4NCAvKiBEZXZpY2VPcmllbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NTc4LDYgKzU1NzgsNyBAQAogCQlDNTg1QTZGQzEx
RDRGQjNEMDA0QzNFNEIgLyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTg1QTZDODExRDRGQjNEMDA0QzNFNEIg
LyogSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggKi87IH07CiAJCUM1ODVBNkZEMTFENEZCM0QwMDRD
M0U0QiAvKiBJREJGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM1ODVBNkM5MTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5LmNwcCAq
LzsgfTsKIAkJQzU4NUE2RkUxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1ODVBNkNBMTFENEZCM0Qw
MDRDM0U0QiAvKiBJREJGYWN0b3J5LmggKi87IH07CisJCUM1OTg5MDJFMTRFOUIwRjgwMEU4RDE4
QiAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNUY3NjVCQTE0RTFFQ0Y0MDA2Qzg5OUIgLyogUGxhdGZvcm1Q
YXN0ZWJvYXJkTWFjLm1tICovOyB9OwogCQlDNUQ0QUE3QTExNkJBRkI2MDA2OUNBOTMgLyogR2x5
cGhNZXRyaWNzTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDNUQ0QUE3ODExNkJBRkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzVFOUI2NzcxMDY5
N0UxMzAwQzdCQjFBIC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzVFOUI2NzYxMDY5N0UxMzAwQzdCQjFB
IC8qIFN0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwICovOyB9OwogCQlDNUVCREQ4NDEwNUVEREVD
MDA1NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzVFQkREODExMDVFRERFQzAwNTY4MTZGIC8qIFN0
b3JhZ2VFdmVudERpc3BhdGNoZXIuaCAqLzsgfTsKQEAgLTg0NzIsMTIgKzg0NzMsMTIgQEAKIAkJ
NTcyRTkyRkExNEU1NDA1ODAwODdGRkJBIC8qIFNoYWRvd1Jvb3RMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNoYWRvd1Jvb3RMaXN0Lmg7IHBhdGggPSBkb20vU2hhZG93
Um9vdExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTczRDEzNDUxNENFMzlG
RjAwNTdBQkNBIC8qIEluc3BlY3RvclR5cGVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvclR5cGVCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTczRDEzNDYxNENFMzlGRjAwNTdBQkNBIC8qIEluc3BlY3RvclR5
cGVCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvclR5
cGVCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU3Qjc5MTlGMTRDNkE2
MjkwMEYyMDJEMSAvKiBIVE1MQ29udGVudFNlbGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxDb250ZW50U2VsZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1N0I3OTFBMDE0QzZBNjI5MDBGMjAyRDEgLyogSFRNTENvbnRlbnRT
ZWxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQ29udGVudFNl
bGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3Qjc5MUExMTRDNkE2Mjkw
MEYyMDJEMSAvKiBDb250ZW50U2VsZWN0b3JRdWVyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb250ZW50U2VsZWN0b3JRdWVyeS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU3Qjc5MUEyMTRDNkE2MjkwMEYyMDJEMSAvKiBDb250ZW50U2VsZWN0
b3JRdWVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50U2VsZWN0
b3JRdWVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1N0I3OTFBNzE0QzZBNjMz
MDBGMjAyRDEgLyogSFRNTENvbnRlbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEhUTUxDb250ZW50RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTU3Qjc5MUE4MTRDNkE2MzMwMEYyMDJEMSAvKiBIVE1MQ29udGVudEVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTENvbnRlbnRFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU3Qjc5MTlGMTRDNkE2MjkwMEYyMDJE
MSAvKiBIVE1MQ29udGVudFNlbGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEhUTUxDb250ZW50U2VsZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1N0I3OTFBMDE0QzZBNjI5MDBGMjAyRDEgLyogSFRNTENvbnRlbnRTZWxlY3Rvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQ29udGVudFNlbGVjdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU5MDVBREJEMTMwMkYzQ0UwMEYxMTZERiAv
KiBYTUxUcmVlVmlld2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFhNTFRyZWVWaWV3ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OTA1QURC
RTEzMDJGM0NFMDBGMTE2REYgLyogWE1MVHJlZVZpZXdlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBYTUxUcmVlVmlld2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTU5MEUxQjQ4MTFFNEVGNEIwMDY5Rjc4NCAvKiBEZXZpY2VPcmllbnRhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXZpY2VPcmllbnRhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI1MzQsOSArMTI1MzUsMTIgQEAKIAkJQzU4NUE2Qzkx
MUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSURCRmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUM1ODVBNkNBMTFENEZCM0QwMDRDM0U0QiAvKiBJREJGYWN0b3J5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzU4NUE2Q0IxMUQ0RkIzRDAwNEMzRTRCIC8qIElEQkZhY3RvcnkuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IElEQkZhY3RvcnkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDNUJBQzE2RjE0RTMwRTQ3MDAwMDg4MzcgLyogUGxhdGZvcm1QYXN0ZWJvYXJkLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUGFzdGVib2FyZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNUQ0QUE3ODExNkJBRkI2MDA2OUNBOTMgLyog
R2x5cGhNZXRyaWNzTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdseXBo
TWV0cmljc01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNUU5QjY3NjEwNjk3
RTEzMDBDN0JCMUEgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzVFQkREODExMDVFRERFQzAwNTY4MTZGIC8qIFN0b3Jh
Z2VFdmVudERpc3BhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rv
cmFnZUV2ZW50RGlzcGF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNUY3
NjVCNDE0RTFENDE0MDA2Qzg5OUIgLyogUGFzdGVib2FyZFN0cmF0ZWd5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRTdHJhdGVneS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDNUY3NjVCQTE0RTFFQ0Y0MDA2Qzg5OUIgLyogUGxhdGZvcm1QYXN0
ZWJvYXJkTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxh
dGZvcm1QYXN0ZWJvYXJkTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNkQ3
NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNkQ3NEFFMzA5QUEyOTBBMDAwQjBBNTIgLyog
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUM2RjA4RkI5MTQzMEZFOEYwMDY4NTg0OSAvKiBNdXRhdGlvblJlY29yZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdXRhdGlvblJlY29yZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTA2OCw2ICsxNTA3Miw3IEBACiAJ
CQkJQ0RBQThEMDgxNEQzODU2MDAwNjFFQTYwIC8qIFBsYXRmb3JtQ2xvY2tDTS5tbSAqLywKIAkJ
CQlCQ0FBNDg2RTE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCAq
LywKIAkJCQlCQ0FBNDg2RDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlN
YWMubW0gKi8sCisJCQkJQzVGNzY1QkExNEUxRUNGNDAwNkM4OTlCIC8qIFBsYXRmb3JtUGFzdGVi
b2FyZE1hYy5tbSAqLywKIAkJCQlCQzk0RDEwNzBDMjc0Rjg4MDA2QkM2MTcgLyogUGxhdGZvcm1T
Y3JlZW5NYWMubW0gKi8sCiAJCQkJRDM5RDAwNkMxMUY4RTMwODAwNjA0MUYyIC8qIFBvcHVwTWVu
dU1hYy5oICovLAogCQkJCTA2NjhFMThFMEFERDk2NDAwMDQxMjhFMCAvKiBQb3B1cE1lbnVNYWMu
bW0gKi8sCkBAIC0xOTc1Miw2ICsxOTc1Nyw3IEBACiAJCQkJQkM3NzJDNEQwQzRFQjMwNDAwODMy
ODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuaCAqLywKIAkJCQk5OEVCMUY5NDEzMTNGRTA1MDBEMEUx
RUEgLyogTm90SW1wbGVtZW50ZWQuaCAqLywKIAkJCQk0QjI3MDhDNTBBRjE5RUU0MDA2NTEyN0Yg
LyogUGFzdGVib2FyZC5oICovLAorCQkJCUM1Rjc2NUI0MTRFMUQ0MTQwMDZDODk5QiAvKiBQYXN0
ZWJvYXJkU3RyYXRlZ3kuaCAqLywKIAkJCQlCQzVDNzYyODE0OTdGRTE0MDBCQzQ3NzUgLyogUGxh
dGZvcm1FdmVudC5jcHAgKi8sCiAJCQkJQkM1Qzc2MjkxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRm
b3JtRXZlbnQuaCAqLywKIAkJCQlBNzIzRjc3QTE0ODRDQTRDMDA4QzZEQkUgLyogUGxhdGZvcm1F
eHBvcnRNYWNyb3MuaCAqLywKQEAgLTE5NzU5LDYgKzE5NzY1LDcgQEAKIAkJCQk5MzVDNDc2NjA5
QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50LmggKi8sCiAJCQkJOTMyODcx
QkYwQjIwREVCNzAwNDkwMzVBIC8qIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uLmggKi8sCiAJCQkJ
OTM1QzQ3NjcwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtTW91c2VFdmVudC5oICovLAorCQkJ
CUM1QkFDMTZGMTRFMzBFNDcwMDAwODgzNyAvKiBQbGF0Zm9ybVBhc3RlYm9hcmQuaCAqLywKIAkJ
CQlCQ0VDMDFENjBDMjc0RUI0MDA5RjRFQzkgLyogUGxhdGZvcm1TY3JlZW4uaCAqLywKIAkJCQkx
QUQ4RjgxQTExQ0FCOUU5MDBFOTNFNTQgLyogUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCAqLywKIAkJ
CQkxQUQ4RjgxOTExQ0FCOUU5MDBFOTNFNTQgLyogUGxhdGZvcm1TdHJhdGVnaWVzLmggKi8sCkBA
IC0yNzEzNiw2ICsyNzE0Myw3IEBACiAJCQkJNEE5NTdGMDYxNEUyNDEyQTAwNDlEQkZCIC8qIFdl
YlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTcyRTky
RkIxNEU1NDA1ODAwODdGRkJBIC8qIFNoYWRvd1Jvb3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk3Q0MzQUUyMTRFOEU0QTIwMDg5NDk4OCAvKiBOYXZpZ2F0b3JTdXBwbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUM1OTg5MDJFMTRFOUIwRjgwMEU4RDE4QiAvKiBQbGF0Zm9ybVBh
c3RlYm9hcmRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDEwNzU4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg5LDExICsyODksOCBA
QCB2b2lkIEVkaXRvcjo6dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uCiAKIHZvaWQgRWRpdG9y
Ojp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzKQogewotICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gdHlwZXMoQWRvcHROUywgW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOyAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhc3RlYm9hcmRUeXBlcy5z
aXplKCk7ICsraSkKLSAgICAgICAgW3R5cGVzLmdldCgpIGFkZE9iamVjdDpwYXN0ZWJvYXJkVHlw
ZXNbaV1dOwogICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7Ci0gICAg
cGFzdGVib2FyZC53cml0ZVNlbGVjdGlvbkZvclR5cGVzKHR5cGVzLmdldCgpLCBzZWxlY3RlZFJh
bmdlKCkuZ2V0KCksIHRydWUsIG1fZnJhbWUpOworICAgIHBhc3RlYm9hcmQud3JpdGVTZWxlY3Rp
b25Gb3JUeXBlcyhwYXN0ZWJvYXJkVHlwZXMsIHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgdHJ1ZSwg
bV9mcmFtZSk7CiB9CiAgICAgCiB2b2lkIEVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJv
YXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGFzdGVib2FyZC5oCShyZXZpc2lvbiAxMDc1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QYXN0ZWJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KQEAgLTYwLDExICs2MiwxMSBAQCB0eXBlZGVmIHN0cnVjdCBIV05EX18qIEhX
TkQ7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBQTEFURk9STShNQUMpCi1leHRlcm4gTlNT
dHJpbmcgKldlYkFyY2hpdmVQYm9hcmRUeXBlOwotZXh0ZXJuIE5TU3RyaW5nICpXZWJTbWFydFBh
c3RlUGJvYXJkVHlwZTsKLWV4dGVybiBOU1N0cmluZyAqV2ViVVJMTmFtZVBib2FyZFR5cGU7Ci1l
eHRlcm4gTlNTdHJpbmcgKldlYlVSTFBib2FyZFR5cGU7Ci1leHRlcm4gTlNTdHJpbmcgKldlYlVS
THNXaXRoVGl0bGVzUGJvYXJkVHlwZTsKK2V4dGVybiBjb25zdCBjaGFyKiBXZWJBcmNoaXZlUGJv
YXJkVHlwZTsKK2V4dGVybiBjb25zdCBjaGFyKiBXZWJTbWFydFBhc3RlUGJvYXJkVHlwZTsKK2V4
dGVybiBjb25zdCBjaGFyKiBXZWJVUkxOYW1lUGJvYXJkVHlwZTsKK2V4dGVybiBjb25zdCBjaGFy
KiBXZWJVUkxQYm9hcmRUeXBlOworZXh0ZXJuIGNvbnN0IGNoYXIqIFdlYlVSTHNXaXRoVGl0bGVz
UGJvYXJkVHlwZTsKICNlbmRpZgogCiBjbGFzcyBDbGlwYm9hcmQ7CkBAIC04MSw3ICs4Myw3IEBA
IGNsYXNzIFBhc3RlYm9hcmQgewogcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBU
aGlzIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgT1MgWCBzZXJ2aWNlcy4KLSAgICB2b2lkIHdyaXRl
U2VsZWN0aW9uRm9yVHlwZXMoTlNBcnJheSogcGFzdGVib2FyZFR5cGVzLCBSYW5nZSogc2VsZWN0
ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqKTsKKyAgICB2b2lkIHdy
aXRlU2VsZWN0aW9uRm9yVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBl
cywgUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1l
Kik7CiAgICAgUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKICNlbmRp
ZgogICAgIApAQCAtMTA5LDcgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgUGFzdGVib2FyZCgpOwog
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0cjxOU1Bhc3RlYm9hcmQ+IG1fcGFzdGVi
b2FyZDsKKyAgICBTdHJpbmcgbV9wYXN0ZWJvYXJkTmFtZTsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oV0lOKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0
ZWd5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJk
U3RyYXRlZ3kuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFBhc3RlYm9hcmRTdHJhdGVneV9oCisjZGVmaW5lIFBhc3RlYm9hcmRTdHJhdGVneV9oCisK
KyNpZiBVU0UoUExBVEZPUk1fU1RSQVRFR0lFUykKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
UGFzdGVib2FyZFN0cmF0ZWd5IHsKK3B1YmxpYzoKKyNpZiBQTEFURk9STShNQUMpCisgICAgdmly
dHVhbCB2b2lkIGdldFR5cGVzKFZlY3RvcjxTdHJpbmc+JiB0eXBlcywgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IGJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRQYXRobmFtZXNGb3JU
eXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBzdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY29weShjb25z
dCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFzdGVib2FyZCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVi
b2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldEJ1ZmZlckZvclR5cGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUpID0gMDsKKyNlbmRpZgorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflBh
c3RlYm9hcmRTdHJhdGVneSgpCisgICAgeworICAgIH0KK307CisKK30KKyNlbmRpZiAvLyBVU0Uo
UExBVEZPUk1fU1RSQVRFR0lFUykKKworI2VuZGlmIC8vICFQYXN0ZWJvYXJkU3RyYXRlZ3lfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBsYXRm
b3JtUGFzdGVib2FyZF9oCisjZGVmaW5lIFBsYXRmb3JtUGFzdGVib2FyZF9oCisKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgUExBVEZPUk0o
TUFDKQorT0JKQ19DTEFTUyBOU1Bhc3RlYm9hcmQ7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBQbGF0Zm9ybVBhc3RlYm9hcmQgeworcHVibGljOgorICAgIFBsYXRmb3Jt
UGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKKyAgICAKKyAgICB2b2lk
IGdldFR5cGVzKFZlY3RvcjxTdHJpbmc+JiB0eXBlcyk7CisgICAgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7CisgICAg
dm9pZCBnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOworICAgIFN0cmluZyBzdHJpbmdGb3JUeXBlKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOworICAgIAorICAgIHZvaWQgY29weShjb25zdCBTdHJp
bmcmIGZyb21QYXN0ZWJvYXJkKTsKKyAgICB2b2lkIHNldFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXN0ZWJvYXJkVHlwZXMpOworICAgIHZvaWQgc2V0QnVmZmVyRm9yVHlwZShQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOworICAgIHZv
aWQgc2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKKyAgICB2b2lkIHNldFN0cmluZ0ZvclR5cGUo
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOworCitw
cml2YXRlOgorICAgIFJldGFpblB0cjxOU1Bhc3RlYm9hcmQ+IG1fcGFzdGVib2FyZDsKK307CisK
K30KKworI2VuZGlmIC8vICFQbGF0Zm9ybVBhc3RlYm9hcmRfaApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDEwNzU4NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw2ICszMSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvb2tp
ZXNTdHJhdGVneTsKK2NsYXNzIFBhc3RlYm9hcmRTdHJhdGVneTsKIGNsYXNzIFBsdWdpblN0cmF0
ZWd5OwogY2xhc3MgTG9jYWxpemF0aW9uU3RyYXRlZ3k7CiBjbGFzcyBWaXNpdGVkTGlua1N0cmF0
ZWd5OwpAQCAtNjQsNiArNjUsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgbV92aXNpdGVkTGlu
a1N0cmF0ZWd5ID0gY3JlYXRlVmlzaXRlZExpbmtTdHJhdGVneSgpOwogICAgICAgICByZXR1cm4g
bV92aXNpdGVkTGlua1N0cmF0ZWd5OwogICAgIH0KKyAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kqIHBh
c3RlYm9hcmRTdHJhdGVneSgpCisgICAgeworICAgICAgICBpZiAoIW1fcGFzdGVib2FyZFN0cmF0
ZWd5KQorICAgICAgICAgICAgbV9wYXN0ZWJvYXJkU3RyYXRlZ3kgPSBjcmVhdGVQYXN0ZWJvYXJk
U3RyYXRlZ3koKTsKKyAgICAgICAgcmV0dXJuIG1fcGFzdGVib2FyZFN0cmF0ZWd5OworICAgIH0K
IAogcHJvdGVjdGVkOgogICAgIFBsYXRmb3JtU3RyYXRlZ2llcygpCkBAIC03MSw2ICs3OCw3IEBA
IHByb3RlY3RlZDoKICAgICAgICAgLCBtX3BsdWdpblN0cmF0ZWd5KDApCiAgICAgICAgICwgbV9s
b2NhbGl6YXRpb25TdHJhdGVneSgwKQogICAgICAgICAsIG1fdmlzaXRlZExpbmtTdHJhdGVneSgw
KQorICAgICAgICAsIG1fcGFzdGVib2FyZFN0cmF0ZWd5KDApCiAgICAgewogICAgIH0KIApAQCAt
ODMsMTEgKzkxLDEzIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBQbHVnaW5TdHJhdGVneSogY3Jl
YXRlUGx1Z2luU3RyYXRlZ3koKSA9IDA7CiAgICAgdmlydHVhbCBMb2NhbGl6YXRpb25TdHJhdGVn
eSogY3JlYXRlTG9jYWxpemF0aW9uU3RyYXRlZ3koKTsKICAgICB2aXJ0dWFsIFZpc2l0ZWRMaW5r
U3RyYXRlZ3kqIGNyZWF0ZVZpc2l0ZWRMaW5rU3RyYXRlZ3koKSA9IDA7CisgICAgdmlydHVhbCBQ
YXN0ZWJvYXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpID0gMDsgCiAKICAg
ICBDb29raWVzU3RyYXRlZ3kqIG1fY29va2llc1N0cmF0ZWd5OwogICAgIFBsdWdpblN0cmF0ZWd5
KiBtX3BsdWdpblN0cmF0ZWd5OwogICAgIExvY2FsaXphdGlvblN0cmF0ZWd5KiBtX2xvY2FsaXph
dGlvblN0cmF0ZWd5OwogICAgIFZpc2l0ZWRMaW5rU3RyYXRlZ3kqIG1fdmlzaXRlZExpbmtTdHJh
dGVneTsKKyAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kqIG1fcGFzdGVib2FyZFN0cmF0ZWd5OwogfTsK
IAogUGxhdGZvcm1TdHJhdGVnaWVzKiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0JKHJldmlzaW9uIDEwNzU4NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsNyBAQCBib29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBj
b25zdAogewogICAgIC8vTmVlZCB0byBjYWxsIHRoaXMgc28gdGhhdCB0aGUgdmFyaW91cyBQYXN0
ZWJvYXJkIHR5cGUgc3RyaW5ncyBhcmUgaW50aWFsaXNlZAogICAgIFBhc3RlYm9hcmQ6OmdlbmVy
YWxQYXN0ZWJvYXJkKCk7Ci0gICAgcmV0dXJuIFtbbV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVzXSBj
b250YWluc09iamVjdDpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07CisgICAgcmV0dXJuIFtbbV9w
YXN0ZWJvYXJkLmdldCgpIHR5cGVzXSBjb250YWluc09iamVjdDpTdHJpbmcoV2ViU21hcnRQYXN0
ZVBib2FyZFR5cGUpXTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb2xvcigpIGNvbnN0
CkBAIC0xMjksNyArMTI5LDcgQEAgc3RhdGljIE5TQXJyYXkgKmluc2VydGFibGVQYXN0ZWJvYXJk
VHlwZQogewogICAgIHN0YXRpYyBOU0FycmF5ICp0eXBlcyA9IG5pbDsKICAgICBpZiAoIXR5cGVz
KSB7Ci0gICAgICAgIHR5cGVzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6V2Vi
QXJjaGl2ZVBib2FyZFR5cGUsIE5TSFRNTFBib2FyZFR5cGUsIE5TRmlsZW5hbWVzUGJvYXJkVHlw
ZSwgTlNUSUZGUGJvYXJkVHlwZSwgTlNQREZQYm9hcmRUeXBlLAorICAgICAgICB0eXBlcyA9IFtb
TlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOlN0cmluZyhXZWJBcmNoaXZlUGJvYXJkVHlw
ZSksIE5TSFRNTFBib2FyZFR5cGUsIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSwgTlNUSUZGUGJvYXJk
VHlwZSwgTlNQREZQYm9hcmRUeXBlLAogI2lmZGVmIEJVSUxESU5HX09OX0xFT1BBUkQKICAgICAg
ICAgICAgICAgICAgTlNQSUNUUGJvYXJkVHlwZSwKICNlbmRpZgpAQCAtMTU3LDcgKzE1Nyw3IEBA
IFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoRnJhbWUqIGZyYW1lLCBGaWwKICAgICAodm9pZClmaWxl
bmFtZVBvbGljeTsKIAogICAgIGlmICh0aXRsZSkgewotICAgICAgICBpZiAoTlNTdHJpbmcgKlVS
TFRpdGxlU3RyaW5nID0gW21fcGFzdGVib2FyZC5nZXQoKSBzdHJpbmdGb3JUeXBlOldlYlVSTE5h
bWVQYm9hcmRUeXBlXSkKKyAgICAgICAgaWYgKE5TU3RyaW5nICpVUkxUaXRsZVN0cmluZyA9IFtt
X3Bhc3RlYm9hcmQuZ2V0KCkgc3RyaW5nRm9yVHlwZTpTdHJpbmcoV2ViVVJMTmFtZVBib2FyZFR5
cGUpXSkKICAgICAgICAgICAgICp0aXRsZSA9IFVSTFRpdGxlU3RyaW5nOwogICAgIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCShy
ZXZpc2lvbiAxMDc1ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2Fy
ZE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTgsNTcgKzU4LDYxIEBACiAjaW1wb3J0IDx3dGYv
VW51c2VkUGFyYW0uaD4KICNpbXBvcnQgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAK
LUBpbnRlcmZhY2UgTlNBdHRyaWJ1dGVkU3RyaW5nIChBcHBLaXRTZWNyZXRzSUtub3dBYm91dCkK
LS0gKGlkKV9pbml0V2l0aERPTVJhbmdlOihET01SYW5nZSAqKWRvbVJhbmdlOwotQGVuZAorI2lm
IFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQorI2luY2x1ZGUgIlBhc3RlYm9hcmRTdHJhdGVneS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogLy8gRklYTUU6IEl0J3Mgbm90IGdyZWF0IHRvIGhhdmUgdGhlc2UgYm90aCBo
ZXJlIGFuZCBpbiBXZWJLaXQuCi1OU1N0cmluZyAqV2ViQXJjaGl2ZVBib2FyZFR5cGUgPSBAIkFw
cGxlIFdlYiBBcmNoaXZlIHBhc3RlYm9hcmQgdHlwZSI7Ci1OU1N0cmluZyAqV2ViU21hcnRQYXN0
ZVBib2FyZFR5cGUgPSBAIk5lWFQgc21hcnQgcGFzdGUgcGFzdGVib2FyZCB0eXBlIjsKLU5TU3Ry
aW5nICpXZWJVUkxOYW1lUGJvYXJkVHlwZSA9IEAicHVibGljLnVybC1uYW1lIjsKLU5TU3RyaW5n
ICpXZWJVUkxQYm9hcmRUeXBlID0gQCJwdWJsaWMudXJsIjsKLU5TU3RyaW5nICpXZWJVUkxzV2l0
aFRpdGxlc1Bib2FyZFR5cGUgPSBAIldlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSI7Ci0KLXN0
YXRpYyBOU0FycmF5KiBzZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXMoYm9vbCBjYW5TbWFydENvcHlP
ckRlbGV0ZSwgYm9vbCBzZWxlY3Rpb25Db250YWluc0F0dGFjaG1lbnRzKQotewotICAgIGlmIChz
ZWxlY3Rpb25Db250YWluc0F0dGFjaG1lbnRzKSB7Ci0gICAgICAgIGlmIChjYW5TbWFydENvcHlP
ckRlbGV0ZSkKLSAgICAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldl
YlNtYXJ0UGFzdGVQYm9hcmRUeXBlLCBXZWJBcmNoaXZlUGJvYXJkVHlwZSwgTlNSVEZEUGJvYXJk
VHlwZSwgTlNSVEZQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIG5pbF07Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldlYkFy
Y2hpdmVQYm9hcmRUeXBlLCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3Ry
aW5nUGJvYXJkVHlwZSwgbmlsXTsKLSAgICB9IGVsc2UgeyAvLyBEb24ndCB3cml0ZSBSVEZEIHRv
IHRoZSBwYXN0ZWJvYXJkIHdoZW4gdGhlIGNvcGllZCBhdHRyaWJ1dGVkIHN0cmluZyBoYXMgbm8g
YXR0YWNobWVudHMuCi0gICAgICAgIGlmIChjYW5TbWFydENvcHlPckRlbGV0ZSkKLSAgICAgICAg
ICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldlYlNtYXJ0UGFzdGVQYm9hcmRU
eXBlLCBXZWJBcmNoaXZlUGJvYXJkVHlwZSwgTlNSVEZQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2Fy
ZFR5cGUsIG5pbF07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBbTlNBcnJheSBh
cnJheVdpdGhPYmplY3RzOldlYkFyY2hpdmVQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5T
U3RyaW5nUGJvYXJkVHlwZSwgbmlsXTsKLSAgICB9Citjb25zdCBjaGFyKiBXZWJBcmNoaXZlUGJv
YXJkVHlwZSA9ICJBcHBsZSBXZWIgQXJjaGl2ZSBwYXN0ZWJvYXJkIHR5cGUiOworY29uc3QgY2hh
ciogV2ViU21hcnRQYXN0ZVBib2FyZFR5cGUgPSAiTmVYVCBzbWFydCBwYXN0ZSBwYXN0ZWJvYXJk
IHR5cGUiOworY29uc3QgY2hhciogV2ViVVJMTmFtZVBib2FyZFR5cGUgPSAicHVibGljLnVybC1u
YW1lIjsKK2NvbnN0IGNoYXIqIFdlYlVSTFBib2FyZFR5cGUgPSAicHVibGljLnVybCI7Citjb25z
dCBjaGFyKiBXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUgPSAiV2ViVVJMc1dpdGhUaXRsZXNQ
Ym9hcmRUeXBlIjsKKworc3RhdGljIFZlY3RvcjxTdHJpbmc+IHNlbGVjdGlvblBhc3RlYm9hcmRU
eXBlcyhib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBib29sIHNlbGVjdGlvbkNvbnRhaW5zQXR0
YWNobWVudHMpCit7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CisgICAgaWYgKGNhblNtYXJ0
Q29weU9yRGVsZXRlKQorICAgICAgICB0eXBlcy5hcHBlbmQoV2ViU21hcnRQYXN0ZVBib2FyZFR5
cGUpOworICAgIHR5cGVzLmFwcGVuZChXZWJBcmNoaXZlUGJvYXJkVHlwZSk7CisgICAgaWYgKHNl
bGVjdGlvbkNvbnRhaW5zQXR0YWNobWVudHMpCisgICAgICAgIHR5cGVzLmFwcGVuZChTdHJpbmco
TlNSVEZEUGJvYXJkVHlwZSkpOworICAgIHR5cGVzLmFwcGVuZChTdHJpbmcoTlNSVEZQYm9hcmRU
eXBlKSk7CisgICAgdHlwZXMuYXBwZW5kKFN0cmluZyhOU1N0cmluZ1Bib2FyZFR5cGUpKTsKKwor
ICAgIHJldHVybiB0eXBlczsKK30KKworc3RhdGljIGNvbnN0IFZlY3RvcjxTdHJpbmc+IHdyaXRh
YmxlVHlwZXNGb3JVUkwoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOworICAgIAorICAg
IHR5cGVzLmFwcGVuZChXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUpOworICAgIHR5cGVzLmFw
cGVuZChTdHJpbmcoTlNVUkxQYm9hcmRUeXBlKSk7CisgICAgdHlwZXMuYXBwZW5kKFdlYlVSTFBi
b2FyZFR5cGUpOworICAgIHR5cGVzLmFwcGVuZChXZWJVUkxOYW1lUGJvYXJkVHlwZSk7CisgICAg
dHlwZXMuYXBwZW5kKFN0cmluZyhOU1N0cmluZ1Bib2FyZFR5cGUpKTsgICAgICAgIAorICAgIHJl
dHVybiB0eXBlczsKIH0KIAotc3RhdGljIE5TQXJyYXkqIHdyaXRhYmxlVHlwZXNGb3JVUkwoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmV0YWluUHRyPE5TQXJyYXk+LCB0eXBlcywgKFtb
TlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgotICAgICAgICAgICAgV2ViVVJMc1dpdGhU
aXRsZXNQYm9hcmRUeXBlLAotICAgICAgICAgICAgTlNVUkxQYm9hcmRUeXBlLAotICAgICAgICAg
ICAgV2ViVVJMUGJvYXJkVHlwZSwKLSAgICAgICAgICAgIFdlYlVSTE5hbWVQYm9hcmRUeXBlLAot
ICAgICAgICAgICAgTlNTdHJpbmdQYm9hcmRUeXBlLAotICAgICAgICAgICAgbmlsXSkpOwotICAg
IHJldHVybiB0eXBlcy5nZXQoKTsKLX0KLQotc3RhdGljIGlubGluZSBOU0FycmF5KiBjcmVhdGVX
cml0YWJsZVR5cGVzRm9ySW1hZ2UoKQotewotICAgIE5TTXV0YWJsZUFycmF5ICp0eXBlcyA9IFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpOU1RJRkZQYm9hcmRUeXBlLCBu
aWxdOwotICAgIFt0eXBlcyBhZGRPYmplY3RzRnJvbUFycmF5OndyaXRhYmxlVHlwZXNGb3JVUkwo
KV07Ci0gICAgW3R5cGVzIGFkZE9iamVjdDpOU1JURkRQYm9hcmRUeXBlXTsKK3N0YXRpYyBpbmxp
bmUgVmVjdG9yPFN0cmluZz4gY3JlYXRlV3JpdGFibGVUeXBlc0ZvckltYWdlKCkKK3sKKyAgICBW
ZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICAKKyAgICB0eXBlcy5hcHBlbmQoU3RyaW5nKE5TVElG
RlBib2FyZFR5cGUpKTsKKyAgICB0eXBlcy5hcHBlbmQod3JpdGFibGVUeXBlc0ZvclVSTCgpKTsK
KyAgICB0eXBlcy5hcHBlbmQoU3RyaW5nKE5TUlRGRFBib2FyZFR5cGUpKTsKICAgICByZXR1cm4g
dHlwZXM7CiB9CiAKLXN0YXRpYyBOU0FycmF5KiB3cml0YWJsZVR5cGVzRm9ySW1hZ2UoKQorc3Rh
dGljIFZlY3RvcjxTdHJpbmc+IHdyaXRhYmxlVHlwZXNGb3JJbWFnZSgpCiB7Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8TlNBcnJheT4sIHR5cGVzLCAoY3JlYXRlV3JpdGFibGVU
eXBlc0ZvckltYWdlKCkpKTsKLSAgICByZXR1cm4gdHlwZXMuZ2V0KCk7CisgICAgVmVjdG9yPFN0
cmluZz4gdHlwZXM7CisgICAgdHlwZXMuYXBwZW5kKGNyZWF0ZVdyaXRhYmxlVHlwZXNGb3JJbWFn
ZSgpKTsKKyAgICByZXR1cm4gdHlwZXM7CiB9CiAKIFBhc3RlYm9hcmQqIFBhc3RlYm9hcmQ6Omdl
bmVyYWxQYXN0ZWJvYXJkKCkgCkBAIC0xMTgsMTcgKzEyMiwxNyBAQCBQYXN0ZWJvYXJkKiBQYXN0
ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyCiB9CiAKIFBhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKLSAgICA6IG1fcGFzdGVib2FyZChbTlNQYXN0ZWJv
YXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpwYXN0ZWJvYXJkTmFtZV0pCisgICAgOiBtX3Bhc3RlYm9h
cmROYW1lKHBhc3RlYm9hcmROYW1lKQogewogICAgIEFTU0VSVChwYXN0ZWJvYXJkTmFtZSk7CiB9
CiAKIHZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoKQogewotICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkg
ZGVjbGFyZVR5cGVzOltOU0FycmF5IGFycmF5XSBvd25lcjpuaWxdOworICAgIHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0VHlwZXMoVmVjdG9yPFN0cmluZz4o
KSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rp
b25Gb3JUeXBlcyhOU0FycmF5KiBwYXN0ZWJvYXJkVHlwZXMsIFJhbmdlKiBzZWxlY3RlZFJhbmdl
LCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFtZSogZnJhbWUpCit2b2lkIFBhc3RlYm9h
cmQ6OndyaXRlU2VsZWN0aW9uRm9yVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcywgUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUs
IEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIVdlYkFyY2hpdmVQYm9hcmRUeXBlKQogICAgICAg
ICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpOyAvLyBJbml0aWFsaXplcyBwYXN0ZWJv
YXJkIHR5cGVzLgpAQCAtMTQ1LDQ0ICsxNDksMzYgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNl
bGVjdGlvbkZvclR5cGVzKAogICAgIGlmIChlbmNsb3NpbmdBbmNob3IgJiYgY29tcGFyZVBvc2l0
aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoc2VsZWN0ZWRSYW5nZS0+c3RhcnRQb3Np
dGlvbigpLmFuY2hvck5vZGUoKSksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgPj0g
MCkKICAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2V0U3RhcnQoZW5jbG9zaW5nQW5jaG9yLCAwLCBl
Yyk7CiAKLSAgICAvLyBVc2luZyBkaWZmZXJlbnQgQVBJIGZvciBXZWJLaXQgYW5kIFdlYktpdDIu
CiAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gbmlsOwotICAgIGlm
IChmcmFtZS0+dmlldygpLT5wbGF0Zm9ybVdpZGdldCgpKQotICAgICAgICBhdHRyaWJ1dGVkU3Ry
aW5nID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBfaW5pdFdpdGhET01SYW5nZTpraXQo
c2VsZWN0ZWRSYW5nZSldIGF1dG9yZWxlYXNlXTsKLSNpZm5kZWYgQlVJTERJTkdfT05fTEVPUEFS
RAotICAgIGVsc2UgewotICAgICAgICAvLyBJbiBXZWJLaXQyIHdlIGFyZSB1c2luZyBhIGRpZmZl
cmVudCB3YXkgdG8gY3JlYXRlIHRoZSBOU0F0dHJpYnV0ZWRTdHJpbmcgZnJvbSB0aGUgRE9NcmFu
Z2UgdGhhdCBkb2Vzbid0IHJlcXVpcmUgYWNjZXNzIHRvIHRoZSBXZWJWaWV3LgotICAgICAgICBS
ZXRhaW5QdHI8V2ViSFRNTENvbnZlcnRlcj4gY29udmVydGVyKEFkb3B0TlMsIFtbV2ViSFRNTENv
bnZlcnRlciBhbGxvY10gaW5pdFdpdGhET01SYW5nZTpraXQoc2VsZWN0ZWRSYW5nZSldKTsKLSAg
ICAgICAgaWYgKGNvbnZlcnRlcikKLSAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbY29u
dmVydGVyLmdldCgpIGF0dHJpYnV0ZWRTdHJpbmddOwotICAgIH0KLSNlbmRpZgorICAgIFJldGFp
blB0cjxXZWJIVE1MQ29udmVydGVyPiBjb252ZXJ0ZXIoQWRvcHROUywgW1tXZWJIVE1MQ29udmVy
dGVyIGFsbG9jXSBpbml0V2l0aERPTVJhbmdlOmtpdChzZWxlY3RlZFJhbmdlKV0pOworICAgIGlm
IChjb252ZXJ0ZXIpCisgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbY29udmVydGVyLmdldCgp
IGF0dHJpYnV0ZWRTdHJpbmddOwogCi0gICAgTlNBcnJheSAqdHlwZXMgPSBwYXN0ZWJvYXJkVHlw
ZXMgPyBwYXN0ZWJvYXJkVHlwZXMgOiBzZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXMoY2FuU21hcnRD
b3B5T3JEZWxldGUsIFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKTsKLSAg
ICBbbV9wYXN0ZWJvYXJkLmdldCgpIGRlY2xhcmVUeXBlczp0eXBlcyBvd25lcjpuaWxdOworICAg
IGNvbnN0IFZlY3RvcjxTdHJpbmc+IHR5cGVzID0gIXBhc3RlYm9hcmRUeXBlcy5pc0VtcHR5KCkg
PyBwYXN0ZWJvYXJkVHlwZXMgOiBzZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXMoY2FuU21hcnRDb3B5
T3JEZWxldGUsIFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKTsKKyAgICBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHR5cGVz
LCBtX3Bhc3RlYm9hcmROYW1lKTsKICAgICBmcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpLT5kaWRT
ZXRTZWxlY3Rpb25UeXBlc0ZvclBhc3RlYm9hcmQoKTsKICAgICAKICAgICAvLyBQdXQgSFRNTCBv
biB0aGUgcGFzdGVib2FyZC4KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYkFyY2hp
dmVQYm9hcmRUeXBlXSkgeworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJBcmNoaXZlUGJvYXJk
VHlwZSkpIHsKICAgICAgICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGFyY2hpdmUgPSBMZWdh
Y3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKGZyYW1lKTsKICAgICAgICAgUmV0YWlu
UHRyPENGRGF0YVJlZj4gZGF0YSA9IGFyY2hpdmUgPyBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50
YXRpb24oKSA6IDA7Ci0gICAgICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0RGF0YTooTlNEYXRh
ICopZGF0YS5nZXQoKSBmb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlXTsKKyAgICAgICAgcGxh
dGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRCdWZmZXJGb3JUeXBl
KFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YSgoTlNEYXRhICopZGF0YS5nZXQoKSksIFdlYkFyY2hp
dmVQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKICAgICB9CiAgICAgCiAgICAgLy8gUHV0
IHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBvbiB0aGUgcGFzdGVib2FyZCAoUlRGL1JURkQgZm9ybWF0
KS4KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdKSB7Cisg
ICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU1JURkRQYm9hcmRUeXBlKSkpIHsKICAgICAg
ICAgTlNEYXRhICpSVEZERGF0YSA9IFthdHRyaWJ1dGVkU3RyaW5nIFJURkRGcm9tUmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVz
Om5pbF07Ci0gICAgICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0RGF0YTpSVEZERGF0YSBmb3JU
eXBlOk5TUlRGRFBib2FyZFR5cGVdOworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPnNldEJ1ZmZlckZvclR5cGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNE
YXRhKChOU0RhdGEgKilSVEZERGF0YSkuZ2V0KCksIE5TUlRGRFBib2FyZFR5cGUsIG1fcGFzdGVi
b2FyZE5hbWUpOwogICAgIH0KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGUGJv
YXJkVHlwZV0pIHsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TUlRGUGJvYXJkVHlw
ZSkpKSB7CiAgICAgICAgIGlmIChbYXR0cmlidXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRz
XSkKICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQnlTdHJp
cHBpbmdBdHRhY2htZW50Q2hhcmFjdGVycyhhdHRyaWJ1dGVkU3RyaW5nKTsKICAgICAgICAgTlNE
YXRhICpSVEZEYXRhID0gW2F0dHJpYnV0ZWRTdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdl
KDAsIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpuaWxdOwot
ICAgICAgICBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldERhdGE6UlRGRGF0YSBmb3JUeXBlOk5TUlRG
UGJvYXJkVHlwZV07CisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+c2V0QnVmZmVyRm9yVHlwZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoKE5TRGF0
YSAqKVJURkRhdGEpLmdldCgpLCBOU1JURlBib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwog
ICAgIH0KICAgICAKICAgICAvLyBQdXQgcGxhaW4gc3RyaW5nIG9uIHRoZSBwYXN0ZWJvYXJkLgot
ICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSkgeworICAg
IGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoTlNTdHJpbmdQYm9hcmRUeXBlKSkpIHsKICAgICAg
ICAgLy8gTWFwICZuYnNwOyB0byBhIHBsYWluIG9sZCBzcGFjZSBiZWNhdXNlIHRoaXMgaXMgYmV0
dGVyIGZvciBzb3VyY2UgY29kZSwgb3RoZXIgYnJvd3NlcnMgZG8gaXQsCiAgICAgICAgIC8vIGFu
ZCBiZWNhdXNlIEhUTUwgZm9yY2VzIHlvdSB0byBkbyB0aGlzIGFueSB0aW1lIHlvdSB3YW50IHR3
byBzcGFjZXMgaW4gYSByb3cuCiAgICAgICAgIFN0cmluZyB0ZXh0ID0gZnJhbWUtPmVkaXRvcigp
LT5zZWxlY3RlZFRleHQoKTsKQEAgLTE5MCwyOSArMTg2LDMwIEBAIHZvaWQgUGFzdGVib2FyZDo6
d3JpdGVTZWxlY3Rpb25Gb3JUeXBlcygKICAgICAgICAgCiAgICAgICAgIE5TU3RyaW5nICpOb25C
cmVha2luZ1NwYWNlU3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOiZub0Jy
ZWFrU3BhY2UgbGVuZ3RoOjFdOwogICAgICAgICBbcyByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmlu
ZzpOb25CcmVha2luZ1NwYWNlU3RyaW5nIHdpdGhTdHJpbmc6QCIgIiBvcHRpb25zOjAgcmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgW3MgbGVuZ3RoXSldOwotICAgICAgICBbbV9wYXN0ZWJvYXJkLmdldCgp
IHNldFN0cmluZzpzIGZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlXTsKKyAgICAgICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKHMs
IE5TU3RyaW5nUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiAgICAgICAgIFtzIHJlbGVh
c2VdOwogICAgIH0KICAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYlNtYXJ0
UGFzdGVQYm9hcmRUeXBlXSkgewotICAgICAgICBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldERhdGE6
bmlsIGZvclR5cGU6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOwotICAgIH0KKyAgICBpZiAodHlw
ZXMuY29udGFpbnMoV2ViU21hcnRQYXN0ZVBib2FyZFR5cGUpKQorICAgICAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldEJ1ZmZlckZvclR5cGUoMCwgV2Vi
U21hcnRQYXN0ZVBib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogfQogCiB2b2lkIFBhc3Rl
Ym9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKLSAgICBbbV9wYXN0
ZWJvYXJkLmdldCgpIGRlY2xhcmVUeXBlczpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6TlNTdHJp
bmdQYm9hcmRUeXBlXSBvd25lcjpuaWxdOwotICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0U3Ry
aW5nOnRleHQgZm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdOworICAgIFZlY3RvcjxTdHJpbmc+
IHR5cGVzOworICAgIHR5cGVzLmFwcGVuZChOU1N0cmluZ1Bib2FyZFR5cGUpOworICAgIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0VHlwZXModHlwZXMsIG1f
cGFzdGVib2FyZE5hbWUpOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZSh0ZXh0LCBOU1N0cmluZ1Bib2FyZFR5cGUsIG1fcGFz
dGVib2FyZE5hbWUpOwogfQogICAgIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihS
YW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZy
YW1lKQogewotICAgIHdyaXRlU2VsZWN0aW9uRm9yVHlwZXMobmlsLCBzZWxlY3RlZFJhbmdlLCBj
YW5TbWFydENvcHlPckRlbGV0ZSwgZnJhbWUpOworICAgIHdyaXRlU2VsZWN0aW9uRm9yVHlwZXMo
VmVjdG9yPFN0cmluZz4oKSwgc2VsZWN0ZWRSYW5nZSwgY2FuU21hcnRDb3B5T3JEZWxldGUsIGZy
YW1lKTsKIH0KIAotc3RhdGljIHZvaWQgd3JpdGVVUkxGb3JUeXBlcyhOU0FycmF5KiB0eXBlcywg
TlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
dGl0bGVTdHIsIEZyYW1lKiBmcmFtZSkKK3N0YXRpYyB2b2lkIHdyaXRlVVJMRm9yVHlwZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGVTdHIsIEZyYW1lKiBmcmFtZSkKIHsK
LSAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6dHlwZXMgb3duZXI6bmlsXTsKKyAgICBwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHR5cGVzLCBw
YXN0ZWJvYXJkTmFtZSk7CiAgICAgCiAgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgpKTsKICAgICAK
QEAgLTIyNSwyNSArMjIyLDI1IEBAIHN0YXRpYyB2b2lkIHdyaXRlVVJMRm9yVHlwZXMoTlNBcnJh
eSogdHkKICAgICAgICAgaWYgKFt0aXRsZSBsZW5ndGhdID09IDApCiAgICAgICAgICAgICB0aXRs
ZSA9IHVzZXJWaXNpYmxlU3RyaW5nOwogICAgIH0KLSAgICAgICAgCi0gICAgaWYgKFt0eXBlcyBj
b250YWluc09iamVjdDpXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVdKQotICAgICAgICBbcGFz
dGVib2FyZCBzZXRQcm9wZXJ0eUxpc3Q6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3Q6dXNlclZpc2libGVTdHJpbmddLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6KE5TU3RyaW5nKil0
aXRsZVN0ci5zdHJpcFdoaXRlU3BhY2UoKV0sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5pbF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOldlYlVS
THNXaXRoVGl0bGVzUGJvYXJkVHlwZV07Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpO
U1VSTFBib2FyZFR5cGVdKQotICAgICAgICBbY29jb2FVUkwgd3JpdGVUb1Bhc3RlYm9hcmQ6cGFz
dGVib2FyZF07Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJVUkxQYm9hcmRUeXBl
XSkKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOnVzZXJWaXNpYmxlU3RyaW5nIGZvclR5
cGU6V2ViVVJMUGJvYXJkVHlwZV07Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJV
UkxOYW1lUGJvYXJkVHlwZV0pCi0gICAgICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzp0aXRsZSBm
b3JUeXBlOldlYlVSTE5hbWVQYm9hcmRUeXBlXTsKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0pCi0gICAgICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzp1
c2VyVmlzaWJsZVN0cmluZyBmb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV07CisgICAgaWYgKHR5
cGVzLmNvbnRhaW5zKFdlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSkpIHsKKyAgICAgICAgVmVj
dG9yPFN0cmluZz4gcGF0aHM7CisgICAgICAgIHBhdGhzLmFwcGVuZCh1c2VyVmlzaWJsZVN0cmlu
Zyk7CisgICAgICAgIHBhdGhzLmFwcGVuZCh0aXRsZVN0ci5zdHJpcFdoaXRlU3BhY2UoKSk7Cisg
ICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0UGF0
aG5hbWVzRm9yVHlwZShwYXRocywgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBwYXN0ZWJv
YXJkTmFtZSk7CisgICAgfQorICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoTlNVUkxQYm9h
cmRUeXBlKSkpCisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+c2V0U3RyaW5nRm9yVHlwZShbY29jb2FVUkwgYWJzb2x1dGVTdHJpbmddLCBOU1VSTFBi
b2FyZFR5cGUsIHBhc3RlYm9hcmROYW1lKTsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoV2ViVVJM
UGJvYXJkVHlwZSkpCisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZSh1c2VyVmlzaWJsZVN0cmluZywgV2ViVVJMUGJvYXJk
VHlwZSwgcGFzdGVib2FyZE5hbWUpOworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJVUkxOYW1l
UGJvYXJkVHlwZSkpCisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZSh0aXRsZSwgV2ViVVJMTmFtZVBib2FyZFR5cGUsIHBh
c3RlYm9hcmROYW1lKTsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TU3RyaW5nUGJv
YXJkVHlwZSkpKQorICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUodXNlclZpc2libGVTdHJpbmcsIE5TU3RyaW5nUGJvYXJk
VHlwZSwgcGFzdGVib2FyZE5hbWUpOwogfQogICAgIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVS
TChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGVTdHIsIEZyYW1lKiBmcmFtZSkK
IHsKLSAgICB3cml0ZVVSTEZvclR5cGVzKHdyaXRhYmxlVHlwZXNGb3JVUkwoKSwgbV9wYXN0ZWJv
YXJkLmdldCgpLCB1cmwsIHRpdGxlU3RyLCBmcmFtZSk7CisgICAgd3JpdGVVUkxGb3JUeXBlcyh3
cml0YWJsZVR5cGVzRm9yVVJMKCksIG1fcGFzdGVib2FyZE5hbWUsIHVybCwgdGl0bGVTdHIsIGZy
YW1lKTsKIH0KIAogc3RhdGljIE5TRmlsZVdyYXBwZXIqIGZpbGVXcmFwcGVyRm9ySW1hZ2UoQ2Fj
aGVkUmVzb3VyY2UqIHJlc291cmNlLCBOU1VSTCAqdXJsKQpAQCAtMjU5LDcgKzI1Niw3IEBAIHN0
YXRpYyBOU0ZpbGVXcmFwcGVyKiBmaWxlV3JhcHBlckZvckltYWcKICAgICByZXR1cm4gd3JhcHBl
cjsKIH0KIAotc3RhdGljIHZvaWQgd3JpdGVGaWxlV3JhcHBlckFzUlRGREF0dGFjaG1lbnQoTlNG
aWxlV3JhcHBlciogd3JhcHBlciwgTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkKQorc3RhdGljIHZv
aWQgd3JpdGVGaWxlV3JhcHBlckFzUlRGREF0dGFjaG1lbnQoTlNGaWxlV3JhcHBlciogd3JhcHBl
ciwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBOU1RleHRBdHRhY2htZW50
ICphdHRhY2htZW50ID0gW1tOU1RleHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aEZpbGVXcmFw
cGVyOndyYXBwZXJdOwogICAgIApAQCAtMjY3LDcgKzI2NCw3IEBAIHN0YXRpYyB2b2lkIHdyaXRl
RmlsZVdyYXBwZXJBc1JURkRBdHRhY2gKICAgICBbYXR0YWNobWVudCByZWxlYXNlXTsKICAgICAK
ICAgICBOU0RhdGEgKlJURkREYXRhID0gW3N0cmluZyBSVEZERnJvbVJhbmdlOk5TTWFrZVJhbmdl
KDAsIFtzdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07Ci0gICAgW3Bhc3Rl
Ym9hcmQgc2V0RGF0YTpSVEZERGF0YSBmb3JUeXBlOk5TUlRGRFBib2FyZFR5cGVdOworICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0QnVmZmVyRm9yVHlw
ZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoKE5TRGF0YSAqKVJURkREYXRhKS5nZXQoKSwgTlNS
VEZEUGJvYXJkVHlwZSwgcGFzdGVib2FyZE5hbWUpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxl
KQpAQCAtMjc3LDggKzI3NCw2IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBu
b2RlLCAKICAgICBpZiAoIShub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlz
SW1hZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRv
Y3VtZW50KCktPmZyYW1lKCk7Ci0KICAgICBOU1VSTCAqY29jb2FVUkwgPSB1cmw7CiAgICAgQVNT
RVJUKGNvY29hVVJMKTsKIApAQCAtMjg3LDY4ICsyODIsNzUgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3
cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1h
Z2UtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgd3JpdGVVUkxGb3JU
eXBlcyh3cml0YWJsZVR5cGVzRm9ySW1hZ2UoKSwgbV9wYXN0ZWJvYXJkLmdldCgpLCBjb2NvYVVS
TCwgbnNTdHJpbmdOaWxJZkVtcHR5KHRpdGxlKSwgZnJhbWUpOworICAgIHdyaXRlVVJMRm9yVHlw
ZXMod3JpdGFibGVUeXBlc0ZvckltYWdlKCksIG1fcGFzdGVib2FyZE5hbWUsIGNvY29hVVJMLCBu
c1N0cmluZ05pbElmRW1wdHkodGl0bGUpLCBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKICAg
ICAKICAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5k
ZXJlcik7CiAgICAgQVNTRVJUKGltYWdlKTsKICAgICAKLSAgICBbbV9wYXN0ZWJvYXJkLmdldCgp
IHNldERhdGE6W2ltYWdlLT5nZXROU0ltYWdlKCkgVElGRlJlcHJlc2VudGF0aW9uXSBmb3JUeXBl
Ok5TVElGRlBib2FyZFR5cGVdOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJk
U3RyYXRlZ3koKS0+c2V0QnVmZmVyRm9yVHlwZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoKE5T
RGF0YSAqKWltYWdlLT5nZXROU0ltYWdlKCkpLCBOU1RJRkZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9h
cmROYW1lKTsKIAogICAgIFN0cmluZyBNSU1FVHlwZSA9IGNhY2hlZEltYWdlLT5yZXNwb25zZSgp
Lm1pbWVUeXBlKCk7CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1h
Z2VSZXNvdXJjZU1JTUVUeXBlKE1JTUVUeXBlKSk7CiAKLSAgICB3cml0ZUZpbGVXcmFwcGVyQXNS
VEZEQXR0YWNobWVudChmaWxlV3JhcHBlckZvckltYWdlKGNhY2hlZEltYWdlLCBjb2NvYVVSTCks
IG1fcGFzdGVib2FyZC5nZXQoKSk7CisgICAgd3JpdGVGaWxlV3JhcHBlckFzUlRGREF0dGFjaG1l
bnQoZmlsZVdyYXBwZXJGb3JJbWFnZShjYWNoZWRJbWFnZSwgY29jb2FVUkwpLCBtX3Bhc3RlYm9h
cmROYW1lKTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUNsaXBib2FyZChDbGlwYm9hcmQq
IGNsaXBib2FyZCkKIHsKKyAgICAvLyBGSVhNRTogdGhpcyBpcyB0aGUgbGFzdCBhY2Nlc3MgdG8g
TlNQYXN0ZWJvYXJkLiBJdCB3aWxsIHJlbW92ZWQgd2hlbiB0aGUgQ2xpcGJvYXJkTWFjCisgICAg
Ly8gY2xhc3MgaXMgcmVmYWN0b3JlZC4KICAgICBOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQgPSBz
dGF0aWNfY2FzdDxDbGlwYm9hcmRNYWMqPihjbGlwYm9hcmQpLT5wYXN0ZWJvYXJkKCk7Ci0gICAg
TlNBcnJheSogdHlwZXMgPSBbcGFzdGVib2FyZCB0eXBlc107Ci0KLSAgICBbbV9wYXN0ZWJvYXJk
LmdldCgpIGFkZFR5cGVzOnR5cGVzIG93bmVyOm5pbF07Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGkg
PSAwOyBpIDwgW3R5cGVzIGNvdW50XTsgaSsrKSB7Ci0gICAgICAgIE5TU3RyaW5nKiB0eXBlID0g
W3R5cGVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0
RGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTp0eXBlXSBmb3JUeXBlOnR5cGVdOwotICAgIH0K
KyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNvcHkoW3Bh
c3RlYm9hcmQgbmFtZV0sIG1fcGFzdGVib2FyZE5hbWUpOwogfQogCiBib29sIFBhc3RlYm9hcmQ6
OmNhblNtYXJ0UmVwbGFjZSgpCiB7Ci0gICAgcmV0dXJuIFtbbV9wYXN0ZWJvYXJkLmdldCgpIHR5
cGVzXSBjb250YWluc09iamVjdDpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07CisgICAgVmVjdG9y
PFN0cmluZz4gdHlwZXM7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJh
dGVneSgpLT5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgcmV0dXJuIHR5
cGVzLmNvbnRhaW5zKFdlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlKTsKIH0KIAogU3RyaW5nIFBhc3Rl
Ym9hcmQ6OnBsYWluVGV4dChGcmFtZSogZnJhbWUpCiB7Ci0gICAgTlNBcnJheSAqdHlwZXMgPSBb
bV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVzXTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAg
ICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5
cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKICAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0pCi0gICAgICAgIHJldHVybiBbW21fcGFzdGVib2FyZC5n
ZXQoKSBzdHJpbmdGb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdX
aXRoQ2Fub25pY2FsTWFwcGluZ107CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU1N0
cmluZ1Bib2FyZFR5cGUpKSkKKyAgICAgICAgcmV0dXJuIFsoTlNTdHJpbmcgKilwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnN0cmluZ0ZvclR5cGUoTlNTdHJpbmdQ
Ym9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmlj
YWxNYXBwaW5nXTsKICAgICAKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJp
bmcgPSBuaWw7CiAgICAgTlNTdHJpbmcgKnN0cmluZzsKIAotICAgIGlmIChbdHlwZXMgY29udGFp
bnNPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV0pCi0gICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOlttX3Bhc3RlYm9hcmQuZ2V0
KCkgZGF0YUZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExd
OwotICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5pbCAmJiBbdHlwZXMgY29udGFpbnNPYmpl
Y3Q6TlNSVEZQYm9hcmRUeXBlXSkKLSAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtbTlNBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpbbV9wYXN0ZWJvYXJkLmdldCgpIGRhdGFG
b3JUeXBlOk5TUlRGUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOworICAgIGlm
ICh0eXBlcy5jb250YWlucyhTdHJpbmcoTlNSVEZEUGJvYXJkVHlwZSkpKSB7CisgICAgICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5cGUoTlNSVEZEUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJk
TmFtZSk7CisgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhSVEZEOltkYXRhLT5jcmVhdGVOU0RhdGEoKSBhdXRvcmVsZWFzZV0gZG9j
dW1lbnRBdHRyaWJ1dGVzOk5VTExdOworICAgIH0KKyAgICBpZiAoYXR0cmlidXRlZFN0cmluZyA9
PSBuaWwgJiYgdHlwZXMuY29udGFpbnMoU3RyaW5nKE5TUlRGUGJvYXJkVHlwZSkpKSB7CisgICAg
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5cGUoTlNSVEZQYm9hcmRUeXBlLCBtX3Bhc3Rl
Ym9hcmROYW1lKTsKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFJURjpbZGF0YS0+Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVhc2Vd
IGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICB9CiAgICAgaWYgKGF0dHJpYnV0ZWRTdHJp
bmcgIT0gbmlsKSB7CiAgICAgICAgIHN0cmluZyA9IFtbYXR0cmlidXRlZFN0cmluZyBzdHJpbmdd
IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOwogICAgICAgICBbYXR0cmli
dXRlZFN0cmluZyByZWxlYXNlXTsKICAgICAgICAgcmV0dXJuIHN0cmluZzsKICAgICB9CiAgICAg
Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdKSB7
Ci0gICAgICAgIHN0cmluZyA9IFtbW21fcGFzdGVib2FyZC5nZXQoKSBwcm9wZXJ0eUxpc3RGb3JU
eXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV0gY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiXG4i
XSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXTsKKyAgICBpZiAodHlwZXMu
Y29udGFpbnMoU3RyaW5nKE5TRmlsZW5hbWVzUGJvYXJkVHlwZSkpKSB7CisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IHBhdGhuYW1lczsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5nZXRQYXRobmFtZXNGb3JUeXBlKHBhdGhuYW1lcywgTlNGaWxlbmFt
ZXNQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwYXRobmFtZXMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICBzdHJpbmcgPSBbc3Ry
aW5nIGxlbmd0aF0gPyBAIlxuIiArIHBhdGhuYW1lc1tpXSA6IHBhdGhuYW1lc1tpXTsKKyAgICAg
ICAgc3RyaW5nID0gW3N0cmluZyBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5n
XTsKICAgICAgICAgaWYgKHN0cmluZyAhPSBuaWwpCiAgICAgICAgICAgICByZXR1cm4gc3RyaW5n
OwogICAgIH0KICAgICAKLSAgICAKLSAgICBpZiAoTlNVUkwgKnVybCA9IFtOU1VSTCBVUkxGcm9t
UGFzdGVib2FyZDptX3Bhc3RlYm9hcmQuZ2V0KCldKSB7CisgICAgc3RyaW5nID0gcGxhdGZvcm1T
dHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zdHJpbmdGb3JUeXBlKE5TVVJMUGJv
YXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgaWYgKFtzdHJpbmcgbGVuZ3RoXSkgewog
ICAgICAgICAvLyBGSVhNRTogdXNpbmcgdGhlIGVkaXRvckNsaWVudCB0byBjYWxsIGludG8gd2Vi
a2l0LCBmb3Igbm93LCBzaW5jZSAKICAgICAgICAgLy8gY2FsbGluZyBfd2ViX3VzZXJWaXNpYmxl
U3RyaW5nIGZyb20gV2ViQ29yZSBpbnZvbHZlcyBtaWdyYXRpbmcgYSBzaXphYmxlIHdlYiBvZiAK
ICAgICAgICAgLy8gaGVscGVyIGNvZGUgdGhhdCBzaG91bGQgZWl0aGVyIGJlIGRvbmUgaW4gYSBz
ZXBhcmF0ZSBwYXRjaCBvciBmaWd1cmVkIG91dCBpbiBhbm90aGVyIHdheS4KLSAgICAgICAgc3Ry
aW5nID0gZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+dXNlclZpc2libGVTdHJpbmcodXJsKTsK
KyAgICAgICAgc3RyaW5nID0gZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+dXNlclZpc2libGVT
dHJpbmcoW05TVVJMIFVSTFdpdGhTdHJpbmc6c3RyaW5nXSk7CiAgICAgICAgIGlmIChbc3RyaW5n
IGxlbmd0aF0gPiAwKQogICAgICAgICAgICAgcmV0dXJuIFtzdHJpbmcgcHJlY29tcG9zZWRTdHJp
bmdXaXRoQ2Fub25pY2FsTWFwcGluZ107CiAgICAgfQpAQCAtMzc3LDE2ICszNzksMjAgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdQogICAgIHJldHVybiAwOwogfQog
Ci1zdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50V2l0
aFJURihGcmFtZSogZnJhbWUsIE5TU3RyaW5nICpwYXN0ZWJvYXJkVHlwZSwgTlNQYXN0ZWJvYXJk
ICpwYXN0ZWJvYXJkKQorc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1l
bnRGcmFnbWVudFdpdGhSVEYoRnJhbWUqIGZyYW1lLCBOU1N0cmluZyAqcGFzdGVib2FyZFR5cGUs
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvcmROYW1lKQogewogICAgIGlmICghZnJhbWUgfHwgIWZyYW1l
LT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IG5pbDsK
LSAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0gTlNSVEZEUGJvYXJkVHlwZSkKLSAgICAgICAgc3Ry
aW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpbcGFzdGVib2Fy
ZCBkYXRhRm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07
Ci0gICAgaWYgKHN0cmluZyA9PSBuaWwpCi0gICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURlBi
b2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICBpZiAocGFzdGVib2FyZFR5
cGUgPT0gTlNSVEZEUGJvYXJkVHlwZSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBk
YXRhID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5idWZmZXJG
b3JUeXBlKE5TUlRGRFBib2FyZFR5cGUsIHBhc3RlYm9yZE5hbWUpOworICAgICAgICBzdHJpbmcg
PSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOltkYXRhLT5jcmVhdGVO
U0RhdGEoKSBhdXRvcmVsZWFzZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOworICAgIH0KKyAg
ICBpZiAoc3RyaW5nID09IG5pbCkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRh
ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5idWZmZXJGb3JU
eXBlKE5TUlRGUGJvYXJkVHlwZSwgcGFzdGVib3JkTmFtZSk7CisgICAgICAgIHN0cmluZyA9IFtb
TlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpbZGF0YS0+Y3JlYXRlTlNEYXRh
KCkgYXV0b3JlbGVhc2VdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICB9CiAgICAgaWYg
KHN0cmluZyA9PSBuaWwpCiAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTQyNiwxMiArNDMyLDEz
IEBAIHN0YXRpYyBOU1VSTCogdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydCgKIAogUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBm
cmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9v
bCYgY2hvc2VQbGFpblRleHQpCiB7Ci0gICAgTlNBcnJheSAqdHlwZXMgPSBbbV9wYXN0ZWJvYXJk
LmdldCgpIHR5cGVzXTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3Rl
Ym9hcmROYW1lKTsKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQ7CiAgICAg
Y2hvc2VQbGFpblRleHQgPSBmYWxzZTsKIAotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6
V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7Ci0gICAgICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBjb3JlQXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShLVVJMKCksIFNoYXJlZEJ1
ZmZlcjo6d3JhcE5TRGF0YShbbV9wYXN0ZWJvYXJkLmdldCgpIGRhdGFGb3JUeXBlOldlYkFyY2hp
dmVQYm9hcmRUeXBlXSkuZ2V0KCkpOworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJBcmNoaXZl
UGJvYXJkVHlwZSkpIHsKKyAgICAgICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNvcmVBcmNo
aXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKEtVUkwoKSwgcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5idWZmZXJGb3JUeXBlKFdlYkFyY2hpdmVQYm9hcmRU
eXBlLCBtX3Bhc3RlYm9hcmROYW1lKS5nZXQoKSk7CiAgICAgICAgIGlmIChjb3JlQXJjaGl2ZSkg
ewogICAgICAgICAgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gbWFpblJlc291cmNlID0gY29y
ZUFyY2hpdmUtPm1haW5SZXNvdXJjZSgpOwogICAgICAgICAgICAgaWYgKG1haW5SZXNvdXJjZSkg
ewpAQCAtNDU0LDE3ICs0NjEsMTYgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0
ZWJvYXJkOgogICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICB9IAog
Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdKSB7
Ci0gICAgICAgIE5TQXJyYXkqIHBhdGhzID0gW21fcGFzdGVib2FyZC5nZXQoKSBwcm9wZXJ0eUxp
c3RGb3JUeXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV07Ci0gICAgICAgIE5TRW51bWVyYXRvciog
ZW51bWVyYXRvciA9IFtwYXRocyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICAgICAgTlNTdHJpbmcq
IHBhdGg7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU0ZpbGVuYW1lc1Bib2FyZFR5
cGUpKSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKKyAgICAgICAgcGxhdGZvcm1T
dHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRQYXRobmFtZXNGb3JUeXBlKHBh
dGhzLCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogICAgICAgICBW
ZWN0b3I8IFJlZlB0cjxOb2RlPiA+IHJlZk5vZGVzVmVjdG9yOwogICAgICAgICBWZWN0b3I8Tm9k
ZSo+IG5vZGVzVmVjdG9yOwogCi0gICAgICAgIHdoaWxlICgocGF0aCA9IFtlbnVtZXJhdG9yIG5l
eHRPYmplY3RdKSAhPSBuaWwpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXRo
cy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgLy8gTm9uLWltYWdlIGZpbGUgdHlwZXM7IF93
ZWJfdXNlclZpc2libGVTdHJpbmcgaXMgYXBwcm9wcmlhdGUgaGVyZSBiZWNhdXNlIHRoaXMgd2ls
bAogICAgICAgICAgICAgLy8gYmUgcGFzdGVkIGFzIHZpc2libGUgdGV4dC4KLSAgICAgICAgICAg
IE5TU3RyaW5nICp1cmwgPSBmcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpLT51c2VyVmlzaWJsZVN0
cmluZyhbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGhdKTsKKyAgICAgICAgICAgIE5TU3RyaW5n
ICp1cmwgPSBmcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpLT51c2VyVmlzaWJsZVN0cmluZyhbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOnBhdGhzW2ldXSk7CiAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4g
dGV4dE5vZGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUodXJsKTsKICAgICAg
ICAgICAgIHJlZk5vZGVzVmVjdG9yLmFwcGVuZCh0ZXh0Tm9kZS5nZXQoKSk7CiAgICAgICAgICAg
ICBub2Rlc1ZlY3Rvci5hcHBlbmQodGV4dE5vZGUuZ2V0KCkpOwpAQCAtNDc0LDggKzQ4MCw4IEBA
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDoKICAgICAgICAgICAgIHJl
dHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgaWYgKFt0eXBlcyBjb250YWlu
c09iamVjdDpOU0hUTUxQYm9hcmRUeXBlXSkgewotICAgICAgICBOU1N0cmluZyAqSFRNTFN0cmlu
ZyA9IFttX3Bhc3RlYm9hcmQuZ2V0KCkgc3RyaW5nRm9yVHlwZTpOU0hUTUxQYm9hcmRUeXBlXTsK
KyAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TSFRNTFBib2FyZFR5cGUpKSkgeworICAg
ICAgICBOU1N0cmluZyAqSFRNTFN0cmluZyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJv
YXJkU3RyYXRlZ3koKS0+c3RyaW5nRm9yVHlwZShOU0hUTUxQYm9hcmRUeXBlLCBtX3Bhc3RlYm9h
cmROYW1lKTsKICAgICAgICAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBNaWNyb3NvZnQncyBI
VE1MIHBhc3RlYm9hcmQgZGF0YSB3b3JrLiBTZWUgMzc3ODc4NS4KICAgICAgICAgaWYgKFtIVE1M
U3RyaW5nIGhhc1ByZWZpeDpAIlZlcnNpb246Il0pIHsKICAgICAgICAgICAgIE5TUmFuZ2UgcmFu
Z2UgPSBbSFRNTFN0cmluZyByYW5nZU9mU3RyaW5nOkAiPGh0bWwiIG9wdGlvbnM6TlNDYXNlSW5z
ZW5zaXRpdmVTZWFyY2hdOwpAQCAtNDg4LDM2ICs0OTQsMjggQEAgUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBQYXN0ZWJvYXJkOgogICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVh
c2UoKTsKICAgICB9CiAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2Fy
ZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRXaXRoUlRGKGZy
YW1lLCBOU1JURkRQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmQuZ2V0KCkpKSkKKyAgICBpZiAodHlw
ZXMuY29udGFpbnMoU3RyaW5nKE5TUlRGRFBib2FyZFR5cGUpKSAmJgorICAgICAgICAoZnJhZ21l
bnQgPSBkb2N1bWVudEZyYWdtZW50V2l0aFJURihmcmFtZSwgTlNSVEZEUGJvYXJkVHlwZSwgbV9w
YXN0ZWJvYXJkTmFtZSkpKQogICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAKLSAg
ICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGUGJvYXJkVHlwZV0gJiYKLSAgICAgICAg
KGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhSVEYoZnJhbWUsIE5TUlRGUGJvYXJkVHlw
ZSwgbV9wYXN0ZWJvYXJkLmdldCgpKSkpCisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhO
U1JURlBib2FyZFR5cGUpKSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50
V2l0aFJURihmcmFtZSwgTlNSVEZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKSkpCiAgICAg
ICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5z
T2JqZWN0Ok5TVElGRlBib2FyZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IGRvY3VtZW50
RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZShmcmFtZSwgQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUo
U2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtbW21fcGFzdGVib2FyZC5nZXQoKSBkYXRhRm9yVHlw
ZTpOU1RJRkZQYm9hcmRUeXBlXSBjb3B5XSBhdXRvcmVsZWFzZV0pLCB1bmlxdWVVUkxXaXRoUmVs
YXRpdmVQYXJ0KEAiaW1hZ2UudGlmZiIpLCAiaW1hZ2UvdGlmZiIsICIiLCAiIikpKSkKKyAgICBp
ZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TVElGRlBib2FyZFR5cGUpKSAmJgorICAgICAgICAo
ZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UoZnJhbWUsIEFyY2hp
dmVSZXNvdXJjZTo6Y3JlYXRlKHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+YnVmZmVyRm9yVHlwZShOU1RJRkZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKSwg
dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnRpZmYiKSwgImltYWdlL3RpZmYiLCAi
IiwgIiIpKSkpCiAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAKLSAgICBpZiAo
W3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUERGUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdt
ZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlKGZyYW1lLCBBcmNoaXZlUmVz
b3VyY2U6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoW1tbbV9wYXN0ZWJvYXJkLmdl
dCgpIGRhdGFGb3JUeXBlOk5TUERGUGJvYXJkVHlwZV0gY29weV0gYXV0b3JlbGVhc2VdKSwgdW5p
cXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImFwcGxpY2F0aW9uLnBkZiIpLCAiYXBwbGljYXRpb24v
cGRmIiwgIiIsICIiKSkpKQorICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoTlNQREZQYm9h
cmRUeXBlKSkgJiYKKyAgICAgICAgKGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFn
ZVJlc291cmNlKGZyYW1lLCBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5cGUoTlNQREZQYm9hcmRUeXBl
LCBtX3Bhc3RlYm9hcmROYW1lKS5nZXQoKSwgdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImFw
cGxpY2F0aW9uLnBkZiIpLCAiYXBwbGljYXRpb24vcGRmIiwgIiIsICIiKSkpKQogICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogCi0jaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRAot
ICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNQSUNUUGJvYXJkVHlwZV0gJiYKLSAgICAg
ICAgKGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlKGZyYW1lLCBB
cmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoW1tbbV9wYXN0
ZWJvYXJkLmdldCgpIGRhdGFGb3JUeXBlOk5TUElDVFBib2FyZFR5cGVdIGNvcHldIGF1dG9yZWxl
YXNlXSksIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS5waWN0IiksICJpbWFnZS9w
aWN0IiwgIiIsICIiKSkpKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotI2Vu
ZGlmCi0KLSAgICAvLyBPbmx5IDEwLjUgYW5kIGhpZ2hlciBzdXBwb3J0IHNldHRpbmcgYW5kIHJl
dHJpZXZpbmcgcGFzdGVib2FyZCB0eXBlcyB3aXRoIFVUSXMsIGJ1dCB3ZSBkb24ndCBiZWxpZXZl
Ci0gICAgLy8gdGhhdCBhbnkgYXBwbGljYXRpb25zIG9uIFRpZ2VyIHB1dCB0eXBlcyBmb3Igd2hp
Y2ggd2Ugb25seSBoYXZlIGEgVVRJLCBsaWtlIFBORywgb24gdGhlIHBhc3RlYm9hcmQuCi0gICAg
aWYgKFt0eXBlcyBjb250YWluc09iamVjdDooTlNTdHJpbmcqKWtVVFR5cGVQTkddICYmCi0gICAg
ICAgIChmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZShmcmFtZSwg
QXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKFtbW21fcGFz
dGVib2FyZC5nZXQoKSBkYXRhRm9yVHlwZTooTlNTdHJpbmcqKWtVVFR5cGVQTkddIGNvcHldIGF1
dG9yZWxlYXNlXSksIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS5wbmciKSwgImlt
YWdlL3BuZyIsICIiLCAiIikpKSkKKyAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKGtVVFR5
cGVQTkcpKSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdl
UmVzb3VyY2UoZnJhbWUsIEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVmZmVyRm9yVHlwZShTdHJpbmcoa1VUVHlwZVBO
RyksIG1fcGFzdGVib2FyZE5hbWUpLCB1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2Uu
cG5nIiksICJpbWFnZS9wbmciLCAiIiwgIiIpKSkpCiAgICAgICAgIHJldHVybiBmcmFnbWVudC5y
ZWxlYXNlKCk7CiAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TVVJMUGJvYXJkVHlw
ZV0pIHsKLSAgICAgICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxGcm9tUGFzdGVib2FyZDptX3Bh
c3RlYm9hcmQuZ2V0KCldOworICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoTlNVUkxQYm9h
cmRUeXBlKSkpIHsKKyAgICAgICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOnBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c3RyaW5nRm9yVHlwZShO
U1VSTFBib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpXTsKICAgICAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIEFTU0VSVChkb2N1bWVudCk7CiAg
ICAgICAgIGlmICghZG9jdW1lbnQpCkBAIC01MjYsNyArNTI0LDcgQEAgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOgogICAgICAgICBOU1N0cmluZyAqVVJMU3RyaW5nID0g
W1VSTCBhYnNvbHV0ZVN0cmluZ107IC8vIE9yaWdpbmFsIGRhdGEgaXMgQVNDSUktb25seSwgc28g
dGhlcmUgaXMgbm8gbmVlZCB0byBwcmVjb21wb3NlLgogICAgICAgICBpZiAoW1VSTFN0cmluZyBs
ZW5ndGhdID09IDApCiAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICBOU1N0cmluZyAq
VVJMVGl0bGVTdHJpbmcgPSBbW21fcGFzdGVib2FyZC5nZXQoKSBzdHJpbmdGb3JUeXBlOldlYlVS
TE5hbWVQYm9hcmRUeXBlXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXTsK
KyAgICAgICAgTlNTdHJpbmcgKlVSTFRpdGxlU3RyaW5nID0gW3BsYXRmb3JtU3RyYXRlZ2llcygp
LT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c3RyaW5nRm9yVHlwZShXZWJVUkxOYW1lUGJvYXJkVHlw
ZSwgbV9wYXN0ZWJvYXJkTmFtZSkgcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGlu
Z107CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIGFuY2hvci0+c2V0QXR0cmli
dXRlKEhUTUxOYW1lczo6aHJlZkF0dHIsIFVSTFN0cmluZyk7CiAgICAgICAgIGFuY2hvci0+YXBw
ZW5kQ2hpbGQoZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKFVSTFRpdGxlU3RyaW5nKSwgZWMpOwpA
QCAtNTM3LDkgKzUzNSw5IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2Fy
ZDoKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChhbGxvd1BsYWluVGV4dCAmJiBbdHlwZXMg
Y29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSkgeworICAgIGlmIChhbGxvd1BsYWlu
VGV4dCAmJiB0eXBlcy5jb250YWlucyhTdHJpbmcoTlNTdHJpbmdQYm9hcmRUeXBlKSkpIHsKICAg
ICAgICAgY2hvc2VQbGFpblRleHQgPSB0cnVlOwotICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZy
YWdtZW50RnJvbVRleHQoY29udGV4dC5nZXQoKSwgW1ttX3Bhc3RlYm9hcmQuZ2V0KCkgc3RyaW5n
Rm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNh
bE1hcHBpbmddKTsKKyAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNv
bnRleHQuZ2V0KCksIFtwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PnN0cmluZ0ZvclR5cGUoTlNTdHJpbmdQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKSBwcmVj
b21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSk7CiAgICAgICAgIHJldHVybiBmcmFn
bWVudC5yZWxlYXNlKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0JKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJQbGF0Zm9ybVBhc3RlYm9hcmQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQbGF0Zm9ybVBhc3RlYm9hcmQ6OlBsYXRmb3JtUGFzdGVib2FyZChjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKQorICAgIDogbV9wYXN0ZWJvYXJkKFtOU1Bhc3RlYm9hcmQg
cGFzdGVib2FyZFdpdGhOYW1lOnBhc3RlYm9hcmROYW1lXSkKK3sKKyAgICBBU1NFUlQocGFzdGVi
b2FyZE5hbWUpOworfQorCit2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6Z2V0VHlwZXMoVmVjdG9y
PFN0cmluZz4mIHR5cGVzKQoreworICAgIE5TQXJyYXkgKnBhc3RlYm9hcmRUeXBlcyA9IFttX3Bh
c3RlYm9hcmQuZ2V0KCkgdHlwZXNdOworICAgIAorICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IFtwYXN0ZWJvYXJkVHlwZXMgY291bnRdOyBpKyspCisgICAgICAgIHR5cGVzLmFwcGVuZChb
cGFzdGVib2FyZFR5cGVzIG9iamVjdEF0SW5kZXg6aV0pOworfQorCitQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gUGxhdGZvcm1QYXN0ZWJvYXJkOjpidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZFR5cGUpCit7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShb
W1ttX3Bhc3RlYm9hcmQuZ2V0KCkgZGF0YUZvclR5cGU6cGFzdGVib2FyZFR5cGVdIGNvcHldIGF1
dG9yZWxlYXNlXSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpnZXRQYXRobmFtZXNG
b3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZFR5cGUpCit7CisgICAgTlNBcnJheSogcGF0aHMgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHByb3Bl
cnR5TGlzdEZvclR5cGU6cGFzdGVib2FyZFR5cGVdOworICAgIGZvciAoTlNVSW50ZWdlciBpID0g
MDsgaSA8IFtwYXRocyBjb3VudF07IGkrKykKKyAgICAgICAgcGF0aG5hbWVzLmFwcGVuZChbcGF0
aHMgb2JqZWN0QXRJbmRleDppXSk7Cit9CisKK1N0cmluZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnN0
cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKK3sKKyAgICByZXR1cm4g
W21fcGFzdGVib2FyZC5nZXQoKSBzdHJpbmdGb3JUeXBlOnBhc3RlYm9hcmRUeXBlXTsKK30KKwor
dm9pZCBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2Fy
ZCkKK3sKKyAgICBOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3Rl
Ym9hcmRXaXRoTmFtZTpmcm9tUGFzdGVib2FyZF07CisgICAgTlNBcnJheSogdHlwZXMgPSBbcGFz
dGVib2FyZCB0eXBlc107CisgICAgCisgICAgW21fcGFzdGVib2FyZC5nZXQoKSBhZGRUeXBlczp0
eXBlcyBvd25lcjpuaWxdOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IFt0eXBlcyBj
b3VudF07IGkrKykgeworICAgICAgICBOU1N0cmluZyogdHlwZSA9IFt0eXBlcyBvYmplY3RBdElu
ZGV4OmldOworICAgICAgICBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldERhdGE6W3Bhc3RlYm9hcmQg
ZGF0YUZvclR5cGU6dHlwZV0gZm9yVHlwZTp0eXBlXTsKKyAgICB9ICAgIAorfQorCit2b2lkIFBs
YXRmb3JtUGFzdGVib2FyZDo6c2V0VHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcykKK3sKKyAgICBpZiAocGFzdGVib2FyZFR5cGVzLmlzRW1wdHkoKSkgeworICAgICAg
ICBbbV9wYXN0ZWJvYXJkLmdldCgpIGRlY2xhcmVUeXBlczpuaWwgb3duZXI6bmlsXTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gdHlwZXMo
QWRvcHROUywgW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGFzdGVib2FyZFR5cGVzLnNpemUoKTsgKytpKQorICAgICAgICBbdHlwZXMu
Z2V0KCkgYWRkT2JqZWN0OnBhc3RlYm9hcmRUeXBlc1tpXV07CisKKyAgICBbbV9wYXN0ZWJvYXJk
LmdldCgpIGRlY2xhcmVUeXBlczp0eXBlcy5nZXQoKSBvd25lcjpuaWxdOworfQorCit2b2lkIFBs
YXRmb3JtUGFzdGVib2FyZDo6c2V0QnVmZmVyRm9yVHlwZShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gYnVmZmVyLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQoreworICAgIFttX3Bhc3Rl
Ym9hcmQuZ2V0KCkgc2V0RGF0YTpbYnVmZmVyLT5jcmVhdGVOU0RhdGEoKSBhdXRvcmVsZWFzZV0g
Zm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV07Cit9CisKK3ZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpz
ZXRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpCit7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiBwYXRocyhBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7ICAgIAorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGF0aG5hbWVzLnNpemUoKTsgKytpKQorICAgICAgICBb
cGF0aHMuZ2V0KCkgYWRkT2JqZWN0OnBhdGhuYW1lc1tpXV07CisgICAgW21fcGFzdGVib2FyZC5n
ZXQoKSBzZXRQcm9wZXJ0eUxpc3Q6cGF0aHMuZ2V0KCkgZm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV07
Cit9CisKK3ZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpzZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQoreworICAgIFttX3Bh
c3RlYm9hcmQuZ2V0KCkgc2V0U3RyaW5nOnN0cmluZyBmb3JUeXBlOnBhc3RlYm9hcmRUeXBlXTsK
K30KKworfQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTA3NTg1KQorKysgU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTItMDItMTMg
IEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciBN
YWMgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2YgdGhlIFBhc3RlYm9hcmQgY2xhc3MgdG8gdXNl
IFBsYXRmb3JtIFN0cmF0ZWdpZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03ODI4MgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyBhbnkgYWNj
ZXNzcyB0byB0aGUgTlNQYXN0ZWJvYXJkIG9iamVjdCBmcm9tIHRoZSBQYXN0ZWJvYXJkIGNsYXNz
IHdoaWNoCisgICAgICAgIG5vdyBtYWtlcyB1c2Ugb2YgYSBuZXcgcGFzdGVib2FyZFN0cmF0ZWd5
IG9iamVjdCB0aGF0IGlzIGltcGxlbWVudGVkIGJvdGggaW4gV2ViS2l0IGFuZAorICAgICAgICBX
ZWJLaXQyLiBUaGUgYWN0dWFsIGFjY2VzcyB0byBOU1Bhc3RlYm9hcmQgaXMgbm93IHBlcmZvcm1l
ZCBpbnNpZGUgdGhlIFBsYXRmb3JtUGFzdGVib2FyZAorICAgICAgICBjbGFzcy4gQ3VycmVudGx5
IGJvdGggV2ViS2l0IGFuZCBXZWJLaXQyIHVzZSB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBvZiB0
aGUgUGFzdGVib2FyZFN0cmF0ZWd5CisgICAgICAgIGludGVyZmFjZSBidXQgdGhpcyBvbmUgbW9y
ZSBzdGVwIGluIHRoZSBkaXJlY3Rpb24gb2YgcmVtb3ZpbmcgYWNjZXNzIHRvIE5TUGFzdGVib2Fy
ZCBmcm9tCisgICAgICAgIHRoZSBXZWJQcm9jZXNzLgorICAgICAgICBBcyBwYXJ0IG9mIHRoZSBy
ZWZhY3RvcmluZyB0aGUgSSd2ZSByZWR1Y2VkIHRvIGEgbWluaW11bSB0aGUgdXNlIG9mIE9CSi1D
IGNsYXNzZXMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3Bw
OiBBZGRlZCBpbXBsZW1lbnRhdGlvbiBvZiBQYXN0ZWJvYXJkU3RyYXRlZ3kKKyAgICAgICAgaW50
ZXJmYWNlLgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBh
c3RlYm9hcmRTdHJhdGVneSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6Z2V0VHlwZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmJ1
ZmZlckZvclR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6Omdl
dFBhdGhuYW1lc0ZvclR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OnN0cmluZ0ZvclR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OmNvcHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFR5
cGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRCdWZmZXJG
b3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRQYXRo
bmFtZXNGb3JUeXBlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpz
ZXRTdHJpbmdGb3JUeXBlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlBsYXRmb3JtU3RyYXRlZ2llcy5oOiBBZGRlZCBQYXN0ZWJvYXJkU3RyYXRlZ3kuCisKIDIwMTIt
MDItMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBXaW5kb3dzIGJ1
aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHJldmlz
aW9uIDEwNzU4NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlByb2Nl
c3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRm
b3JtUGFzdGVib2FyZC5oPgogCiAjaWYgVVNFKENGKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KQEAgLTcwLDYgKzcxLDExIEBAIFZpc2l0ZWRMaW5rU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3Ry
YXRlZ2kKICAgICByZXR1cm4gdGhpczsKIH0KIAorUGFzdGVib2FyZFN0cmF0ZWd5KiBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpCit7CisgICAgcmV0dXJu
IHRoaXM7Cit9CisKIC8vIENvb2tpZXNTdHJhdGVneQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6bm90aWZ5Q29va2llc0NoYW5nZWQoKQpAQCAtMTI1LDYgKzEzMSw2NCBAQCB2b2lkIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6YWRkVmlzaXRlZExpCiAgICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkuYWRkVmlzaXRlZExpbmsobGlua0hhc2gpOwogfQogCisjaWYgUExBVEZPUk0oTUFDKQorLy8g
UGFzdGVib2FyZFN0cmF0ZWd5CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRUeXBl
cyhWZWN0b3I8U3RyaW5nPiYgdHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit7
CisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOworICAg
IHBhc3RlYm9hcmQuZ2V0VHlwZXModHlwZXMpOworfQorCitQYXNzUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpidWZmZXJGb3JUeXBlKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit7Cisg
ICAgUGxhdGZvcm1QYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOworICAgIHJl
dHVybiBwYXN0ZWJvYXJkLmJ1ZmZlckZvclR5cGUocGFzdGVib2FyZFR5cGUpOworfQorCit2b2lk
IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0b3I8U3RyaW5n
PiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKQoreworICAgIFBsYXRmb3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBh
c3RlYm9hcmROYW1lKTsKKyAgICBwYXN0ZWJvYXJkLmdldFBhdGhuYW1lc0ZvclR5cGUocGF0aG5h
bWVzLCBwYXN0ZWJvYXJkVHlwZSk7Cit9CisKK1N0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OnN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQgcGFzdGVib2FyZChw
YXN0ZWJvYXJkTmFtZSk7CisgICAgcmV0dXJuIHBhc3RlYm9hcmQuc3RyaW5nRm9yVHlwZShwYXN0
ZWJvYXJkVHlwZSk7Cit9CisKK3ZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb3B5KGNvbnN0
IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkKQorewor
ICAgIFBsYXRmb3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHRvUGFzdGVib2FyZCk7CisgICAgcmV0
dXJuIHBhc3RlYm9hcmQuY29weShmcm9tUGFzdGVib2FyZCk7Cit9CisKK3ZvaWQgV2ViUGxhdGZv
cm1TdHJhdGVnaWVzOjpzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5
cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQoreworICAgIFBsYXRmb3JtUGFzdGVi
b2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKKyAgICByZXR1cm4gcGFzdGVib2FyZC5z
ZXRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6c2V0QnVmZmVyRm9yVHlwZShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQor
eworICAgIFBsYXRmb3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKKyAg
ICByZXR1cm4gcGFzdGVib2FyZC5zZXRCdWZmZXJGb3JUeXBlKGJ1ZmZlciwgcGFzdGVib2FyZFR5
cGUpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0UGF0aG5hbWVzRm9yVHlw
ZShjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQoreworICAgIFBsYXRmb3JtUGFz
dGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKKyAgICBwYXN0ZWJvYXJkLnNldFBh
dGhuYW1lc0ZvclR5cGUocGF0aG5hbWVzLCBwYXN0ZWJvYXJkVHlwZSk7Cit9CisKK3ZvaWQgV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKQoreworICAgIFBsYXRmb3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1l
KTsKKyAgICByZXR1cm4gcGFzdGVib2FyZC5zZXRTdHJpbmdGb3JUeXBlKHN0cmluZywgcGFzdGVi
b2FyZFR5cGUpOyAgICAKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2Vu
ZGlmIC8vIFVTRShQTEFURk9STV9TVFJBVEVHSUVTKQpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5oCShyZXZpc2lvbiAxMDc1ODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSwxMyArMjksMTQgQEAKICNpZiBVU0UoUExBVEZPUk1fU1RSQVRFR0lFUykKIAogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29va2llc1N0cmF0ZWd5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYXN0
ZWJvYXJkU3RyYXRlZ3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU3RyYXRlZ2llcy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luU3RyYXRlZ3kuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1Zpc2l0ZWRMaW5rU3RyYXRlZ3kuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFdl
YlBsYXRmb3JtU3RyYXRlZ2llcyA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybVN0cmF0ZWdpZXMs
IHByaXZhdGUgV2ViQ29yZTo6Q29va2llc1N0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlBsdWdp
blN0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RyYXRlZ3kgeworY2xhc3Mg
V2ViUGxhdGZvcm1TdHJhdGVnaWVzIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2ll
cywgcHJpdmF0ZSBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGx1
Z2luU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6VmlzaXRlZExpbmtTdHJhdGVneSwgcHJpdmF0
ZSBXZWJDb3JlOjpQYXN0ZWJvYXJkU3RyYXRlZ3kgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IGluaXRpYWxpemUoKTsKICAgICAKQEAgLTQ2LDYgKzQ3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneSogY3JlYXRlQ29va2llc1N0cmF0ZWd5KCkgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSogY3JlYXRlUGx1Z2lu
U3RyYXRlZ3koKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3Ry
YXRlZ3kqIGNyZWF0ZVZpc2l0ZWRMaW5rU3RyYXRlZ3koKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OlBhc3RlYm9hcmRTdHJhdGVneSogY3JlYXRlUGFzdGVib2FyZFN0cmF0ZWd5KCkg
T1ZFUlJJREU7CiAKICAgICAvLyBXZWJDb3JlOjpDb29raWVzU3RyYXRlZ3kKICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5Q29va2llc0NoYW5nZWQoKSBPVkVSUklERTsKQEAgLTU5LDYgKzYxLDIwIEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzTGlua1Zpc2l0ZWQoV2ViQ29yZTo6UGFnZSos
IFdlYkNvcmU6OkxpbmtIYXNoLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBiYXNlVVJMLCBjb25zdCBX
VEY6OkF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgYWRkVmlzaXRlZExpbmsoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OkxpbmtIYXNoKSBPVkVS
UklERTsKIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAvLyBXZWJDb3JlOjpQYXN0ZWJvYXJkU3Ry
YXRlZ3kKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VHlwZXMoVmVjdG9yPFN0cmluZz4mIHR5cGVzLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRo
bmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0ZvclR5cGUoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkg
T1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvcHkoY29uc3QgU3RyaW5nJiBmcm9t
UGFzdGVib2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVz
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0QnVmZmVyRm9yVHlwZShQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4sIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFN0cmluZ0Zv
clR5cGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOworI2VuZGlmCisKICAgICBi
b29sIG1fcGx1Z2luQ2FjaGVJc1BvcHVsYXRlZDsKICAgICBib29sIG1fc2hvdWxkUmVmcmVzaFBs
dWdpbnM7CiAgICAgVmVjdG9yPFdlYkNvcmU6OlBsdWdpbkluZm8+IG1fY2FjaGVkUGx1Z2luczsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzU4NSkKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAyLTEz
ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgIFJlZmFjdG9y
IE1hYyBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUGFzdGVib2FyZCBjbGFzcyB0byB1
c2UgUGxhdGZvcm0gU3RyYXRlZ2llcy4KKyAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03ODI4MgorIAorICAgICAgICAgVGhpcyBwYXRjaCByZW1vdmVzIGFu
eSBhY2Nlc3NzIHRvIHRoZSBOU1Bhc3RlYm9hcmQgb2JqZWN0IGZyb20gdGhlIFBhc3RlYm9hcmQg
Y2xhc3Mgd2hpY2gKKyAgICAgICAgIG5vdyBtYWtlcyB1c2Ugb2YgYSBuZXcgcGFzdGVib2FyZFN0
cmF0ZWd5IG9iamVjdCB0aGF0IGlzIGltcGxlbWVudGVkIGJvdGggaW4gV2ViS2l0IGFuZAorICAg
ICAgICAgV2ViS2l0Mi4gVGhlIGFjdHVhbCBhY2Nlc3MgdG8gTlNQYXN0ZWJvYXJkIGlzIG5vdyBw
ZXJmb3JtZWQgaW5zaWRlIHRoZSBQbGF0Zm9ybVBhc3RlYm9hcmQKKyAgICAgICAgIGNsYXNzLiBD
dXJyZW50bHkgYm90aCBXZWJLaXQgYW5kIFdlYktpdDIgdXNlIHRoZSBzYW1lIGltcGxlbWVudGF0
aW9uIG9mIHRoZSBQYXN0ZWJvYXJkU3RyYXRlZ3kKKyAgICAgICAgIGludGVyZmFjZSBidXQgdGhp
cyBvbmUgbW9yZSBzdGVwIGluIHRoZSBkaXJlY3Rpb24gb2YgcmVtb3ZpbmcgYWNjZXNzIHRvIE5T
UGFzdGVib2FyZCBmcm9tCisgICAgICAgICB0aGUgV2ViUHJvY2Vzcy4KKyAgICAgICAgIEFzIHBh
cnQgb2YgdGhlIHJlZmFjdG9yaW5nIHRoZSBJJ3ZlIHJlZHVjZWQgdG8gYSBtaW5pbXVtIHRoZSB1
c2Ugb2YgT0JKLUMgY2xhc3Nlcy4KKyAgICAgICAgIAorICAgICAgICAgUmV2aWV3ZWQgYnkgQW5k
ZXJzIENhcmxzc29uLgorIAorICAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuaDogQWRkZWQgUGFzdGVib2FyZFN0cmF0ZWd5LgorICAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW06IEFkZGVkIGltcGxlbWVudGF0aW9uIG9m
IFBhc3RlYm9hcmRTdHJhdGVneSBpbnRlcmZhY2UuCisgICAgICAgICAoV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3kpOgorICAgICAgICAgKFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Z2V0VHlwZXMpOgorICAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
YnVmZmVyRm9yVHlwZSk6CisgICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQYXRo
bmFtZXNGb3JUeXBlKToKKyAgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnN0cmluZ0Zv
clR5cGUpOgorICAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29weSk6CisgICAgICAg
ICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRUeXBlcyk6CisgICAgICAgICAoV2ViUGxhdGZv
cm1TdHJhdGVnaWVzOjpzZXRCdWZmZXJGb3JUeXBlKToKKyAgICAgICAgIChXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OnNldFBhdGhuYW1lc0ZvclR5cGUpOgorICAgICAgICAgKFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6c2V0U3RyaW5nRm9yVHlwZSk6CisKIDIwMTItMDItMTIgIEhhamltZSBNb3JyaXRh
ICA8bW9ycml0YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUGFnZSBzaG91bGQgaGF2ZSBsZXNz
IGludHJ1c2l2ZSB3YXkgdG8gYXNzb2NpYXRlIEFQSSBpbXBsZW1lbnRhdGlvbiBvYmplY3RzLgpJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVn
aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDEwNzU4NSkKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywxMSArMjcsMTIgQEAKICNkZWZpbmUgV2ViUGxhdGZvcm1TdHJhdGVnaWVzX2gKIAog
I2luY2x1ZGUgPFdlYkNvcmUvQ29va2llc1N0cmF0ZWd5Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Q
YXN0ZWJvYXJkU3RyYXRlZ3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU3RyYXRlZ2ll
cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luU3RyYXRlZ3kuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Zpc2l0ZWRMaW5rU3RyYXRlZ3kuaD4KIAotY2xhc3MgV2ViUGxhdGZvcm1TdHJhdGVnaWVz
IDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtU3RyYXRlZ2llcywgcHJpdmF0ZSBXZWJDb3JlOjpD
b29raWVzU3RyYXRlZ3ksIHByaXZhdGUgV2ViQ29yZTo6UGx1Z2luU3RyYXRlZ3ksIHByaXZhdGUg
V2ViQ29yZTo6VmlzaXRlZExpbmtTdHJhdGVneSB7CitjbGFzcyBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1TdHJhdGVnaWVzLCBwcml2YXRlIFdlYkNvcmU6
OkNvb2tpZXNTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSwgcHJpdmF0
ZSBXZWJDb3JlOjpWaXNpdGVkTGlua1N0cmF0ZWd5LCBwcml2YXRlIFdlYkNvcmU6OlBhc3RlYm9h
cmRTdHJhdGVneSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAg
IApAQCAtNDIsNiArNDMsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29va2ll
c1N0cmF0ZWd5KiBjcmVhdGVDb29raWVzU3RyYXRlZ3koKSBPVkVSUklERTsKICAgICB2aXJ0dWFs
IFdlYkNvcmU6OlBsdWdpblN0cmF0ZWd5KiBjcmVhdGVQbHVnaW5TdHJhdGVneSgpIE9WRVJSSURF
OwogICAgIHZpcnR1YWwgV2ViQ29yZTo6VmlzaXRlZExpbmtTdHJhdGVneSogY3JlYXRlVmlzaXRl
ZExpbmtTdHJhdGVneSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6UGFzdGVib2Fy
ZFN0cmF0ZWd5KiBjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKSBPVkVSUklERTsKIAogICAgIC8v
IFdlYkNvcmU6OkNvb2tpZXNTdHJhdGVneQogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDb29raWVz
Q2hhbmdlZCgpIE9WRVJSSURFOwpAQCAtNTMsNiArNTUsMTkgQEAgcHJpdmF0ZToKICAgICAvLyBX
ZWJDb3JlOjpWaXNpdGVkTGlua1N0cmF0ZWd5CiAgICAgdmlydHVhbCBib29sIGlzTGlua1Zpc2l0
ZWQoV2ViQ29yZTo6UGFnZSosIFdlYkNvcmU6OkxpbmtIYXNoLCBjb25zdCBXZWJDb3JlOjpLVVJM
JiBiYXNlVVJMLCBjb25zdCBXVEY6OkF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkVmlzaXRlZExpbmsoV2ViQ29yZTo6UGFnZSosIFdlYkNv
cmU6OkxpbmtIYXNoKSBPVkVSUklERTsKKyAgICAKKyAgICAvLyBXZWJDb3JlOjpQYXN0ZWJvYXJk
U3RyYXRlZ3kKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VHlwZXMoVmVjdG9yPFN0cmluZz4mIHR5cGVz
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBw
YXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0ZvclR5cGUo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSkgT1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGNvcHkoY29uc3QgU3RyaW5nJiBm
cm9tUGFzdGVib2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5
cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0QnVmZmVyRm9yVHlwZShQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4g
YnVmZmVyLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGF0aG5hbWVzRm9yVHlw
ZShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICAK
IH07CiAKICNlbmRpZiAvLyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXNfaApJbmRleDogU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5tbQkocmV2aXNpb24gMTA3NTg1KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0Jsb2NrRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9QbGF0Zm9ybVBhc3RlYm9hcmQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
QEAgLTU4LDYgKzU5LDExIEBAIFZpc2l0ZWRMaW5rU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRl
Z2kKICAgICByZXR1cm4gdGhpczsKIH0KIAorUGFzdGVib2FyZFN0cmF0ZWd5KiBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpCit7CisgICAgcmV0dXJuIHRo
aXM7Cit9CisKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpub3RpZnlDb29raWVzQ2hhbmdl
ZCgpCiB7CiB9CkBAIC05MCwzICs5Niw1NyBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
YWRkVmlzaXRlZExpCiB7CiAgICAgcmV0dXJuIHBhZ2UtPmdyb3VwKCkuYWRkVmlzaXRlZExpbmtI
YXNoKGhhc2gpOwogfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0VHlwZXMoVmVj
dG9yPFN0cmluZz4mIHR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQoreworICAg
IFBsYXRmb3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKKyAgICBwYXN0
ZWJvYXJkLmdldFR5cGVzKHR5cGVzKTsKK30KKworUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQoreworICAgIFBs
YXRmb3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKKyAgICByZXR1cm4g
cGFzdGVib2FyZC5idWZmZXJGb3JUeXBlKHBhc3RlYm9hcmRUeXBlKTsKK30KKwordm9pZCBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9yPFN0cmluZz4mIHBh
dGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJv
YXJkTmFtZSk7CisgICAgcGFzdGVib2FyZC5nZXRQYXRobmFtZXNGb3JUeXBlKHBhdGhuYW1lcywg
cGFzdGVib2FyZFR5cGUpOworfQorCitTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzdHJp
bmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpCit7CisgICAgUGxhdGZvcm1QYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVi
b2FyZE5hbWUpOworICAgIHJldHVybiBwYXN0ZWJvYXJkLnN0cmluZ0ZvclR5cGUocGFzdGVib2Fy
ZFR5cGUpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29weShjb25zdCBTdHJp
bmcmIGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFzdGVib2FyZCkKK3sKKyAgICBQ
bGF0Zm9ybVBhc3RlYm9hcmQgcGFzdGVib2FyZCh0b1Bhc3RlYm9hcmQpOworICAgIHJldHVybiBw
YXN0ZWJvYXJkLmNvcHkoZnJvbVBhc3RlYm9hcmQpOworfQorCit2b2lkIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6c2V0VHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQg
cGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CisgICAgcmV0dXJuIHBhc3RlYm9hcmQuc2V0VHlw
ZXMocGFzdGVib2FyZFR5cGVzKTsKK30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNl
dEJ1ZmZlckZvclR5cGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3sKKyAg
ICBQbGF0Zm9ybVBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CisgICAgcmV0
dXJuIHBhc3RlYm9hcmQuc2V0QnVmZmVyRm9yVHlwZShidWZmZXIsIHBhc3RlYm9hcmRUeXBlKTsK
K30KKwordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFBhdGhuYW1lc0ZvclR5cGUoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlw
ZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9h
cmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CisgICAgcGFzdGVib2FyZC5zZXRQYXRobmFt
ZXNGb3JUeXBlKHBhdGhuYW1lcywgcGFzdGVib2FyZFR5cGUpOworfQorCit2b2lkIFdlYlBsYXRm
b3JtU3RyYXRlZ2llczo6c2V0U3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHN0cmluZywgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkK
K3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7Cisg
ICAgcmV0dXJuIHBhc3RlYm9hcmQuc2V0U3RyaW5nRm9yVHlwZShzdHJpbmcsIHBhc3RlYm9hcmRU
eXBlKTsgICAgCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gMTA3NTk2KQorKysgU291
cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAxMi0wMi0xMyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAg
IFJlZmFjdG9yIE1hYyBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUGFzdGVib2FyZCBj
bGFzcyB0byB1c2UgUGxhdGZvcm0gU3RyYXRlZ2llcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MjgyCisKKyAgICAgICAgQnVpbGQgZml4LiBVbnJl
dmlld2VkLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQu
Y3BwOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3Ry
YXRlZ3kpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0Lmg6
CisgICAgICAgIChQbGF0Zm9ybVN0cmF0ZWdpZXNRdCk6CisKIDIwMTItMDItMTIgIEhhamltZSBN
b3JyaXRhICA8bW9ycml0YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUGFnZSBzaG91bGQgaGF2
ZSBsZXNzIGludHJ1c2l2ZSB3YXkgdG8gYXNzb2NpYXRlIEFQSSBpbXBsZW1lbnRhdGlvbiBvYmpl
Y3RzLgpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QbGF0Zm9ybVN0cmF0
ZWdpZXNRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5jcHAJKHJldmlzaW9uIDEwNzU4NSkKKysrIFNvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGxhdGZvcm1TdHJhdGVnaWVzUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OCw2ICs3OCwxMSBAQCBWaXNpdGVkTGlua1N0cmF0ZWd5KiBQbGF0Zm9ybVN0
cmF0ZWdpZXNRCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKK1Bhc3RlYm9hcmRTdHJhdGVneSogV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVQYXN0ZWJvYXJkU3RyYXRlZ3koKQoreworICAgIHJl
dHVybiAwOworfQorCiB2b2lkIFBsYXRmb3JtU3RyYXRlZ2llc1F0Ojpub3RpZnlDb29raWVzQ2hh
bmdlZCgpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRm
b3JtU3RyYXRlZ2llc1F0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9QbGF0Zm9ybVN0cmF0ZWdpZXNRdC5oCShyZXZpc2lvbiAxMDc1ODUpCisrKyBTb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BsYXRmb3JtU3RyYXRlZ2llc1F0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
UGFnZTsKK2NsYXNzIFBhc3RlYm9hcmRTdHJhdGVneTsKIH0KIAogY2xhc3MgUGxhdGZvcm1TdHJh
dGVnaWVzUXQgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1TdHJhdGVnaWVzLCBwcml2YXRlIFdl
YkNvcmU6OkNvb2tpZXNTdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpQbHVnaW5TdHJhdGVneSwg
cHJpdmF0ZSBXZWJDb3JlOjpMb2NhbGl6YXRpb25TdHJhdGVneSwgcHJpdmF0ZSBXZWJDb3JlOjpW
aXNpdGVkTGlua1N0cmF0ZWd5IHsKQEAgLTUwLDYgKzUxLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIFdlYkNvcmU6OlBsdWdpblN0cmF0ZWd5KiBjcmVhdGVQbHVnaW5TdHJhdGVneSgpOwogICAg
IHZpcnR1YWwgV2ViQ29yZTo6TG9jYWxpemF0aW9uU3RyYXRlZ3kqIGNyZWF0ZUxvY2FsaXphdGlv
blN0cmF0ZWd5KCk7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpWaXNpdGVkTGlua1N0cmF0ZWd5KiBj
cmVhdGVWaXNpdGVkTGlua1N0cmF0ZWd5KCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpQYXN0ZWJv
YXJkU3RyYXRlZ3kqIGNyZWF0ZVBhc3RlYm9hcmRTdHJhdGVneSgpOwogICAgIAogICAgIC8vIFdl
YkNvcmU6OkNvb2tpZXNTdHJhdGVneQogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDb29raWVzQ2hh
bmdlZCgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>