<?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>210702</bug_id>
          
          <creation_ts>2020-04-18 15:22:10 -0700</creation_ts>
          <short_desc>[Cocoa] Use createNSArray in many more places that build NSArray objects from C++ collections</short_desc>
          <delta_ts>2020-04-24 16:06:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=210997</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>apinheiro</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jbedard</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mifenton</cc>
    
    <cc>philipj</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1643065</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-18 15:22:10 -0700</bug_when>
    <thetext>[Cocoa] Use createNSArray in many more places that build NSArray objects from C++ collections</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643067</commentid>
    <comment_count>1</comment_count>
      <attachid>396865</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-18 15:23:21 -0700</bug_when>
    <thetext>Created attachment 396865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643102</commentid>
    <comment_count>2</comment_count>
      <attachid>396875</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-18 17:18:35 -0700</bug_when>
    <thetext>Created attachment 396875
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643106</commentid>
    <comment_count>3</comment_count>
      <attachid>396877</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-18 17:31:06 -0700</bug_when>
    <thetext>Created attachment 396877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643116</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-18 18:05:09 -0700</bug_when>
    <thetext>I didn’t write a change log yet, but the change looks like it’s working well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643216</commentid>
    <comment_count>5</comment_count>
      <attachid>396916</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-19 10:10:46 -0700</bug_when>
    <thetext>Created attachment 396916
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643373</commentid>
    <comment_count>6</comment_count>
      <attachid>396953</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-20 00:05:31 -0700</bug_when>
    <thetext>Created attachment 396953
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643571</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-20 12:12:56 -0700</bug_when>
    <thetext>All tests passing. Ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643896</commentid>
    <comment_count>8</comment_count>
      <attachid>396953</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-21 09:22:44 -0700</bug_when>
    <thetext>Comment on attachment 396953
Patch

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

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.h:-29
&gt; -#ifndef WebAccessibilityObjectWrapperBase_h

Are we adding #pragma once in objc headers?

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1739
&gt; +        return nil;

I&apos;ve been using nullptr instead of nil for RetainPtr because it&apos;s a C++ type.  I guess once we transition to ARC we&apos;ll use nil, right?

&gt; Source/WebKitLegacy/mac/History/WebBackForwardList.mm:155
&gt; +constexpr auto WebBackForwardListDictionaryEntriesKey = @&quot;entries&quot;;

How do you feel about auto for objc types?  I&apos;ve tried to avoid it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643961</commentid>
    <comment_count>9</comment_count>
      <attachid>396953</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-21 12:17:08 -0700</bug_when>
    <thetext>Comment on attachment 396953
Patch

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

&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperBase.h:-29
&gt;&gt; -#ifndef WebAccessibilityObjectWrapperBase_h
&gt; 
&gt; Are we adding #pragma once in objc headers?

No, in fact we made a patch to remove #pragma once from them. They aren’t needed in Objective-C headers.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1739
&gt;&gt; +        return nil;
&gt; 
&gt; I&apos;ve been using nullptr instead of nil for RetainPtr because it&apos;s a C++ type.  I guess once we transition to ARC we&apos;ll use nil, right?

I don’t care at all which we use, but in case you are wondering how I choice nil, in my mind, the nil isn’t for RetainPtr, it’s for the pointer stored in RetainPtr. And yes, if we move to ARC we won’t need RetainPtr for Objective-C pointers any more, just for CF pointers.

&gt;&gt; Source/WebKitLegacy/mac/History/WebBackForwardList.mm:155
&gt;&gt; +constexpr auto WebBackForwardListDictionaryEntriesKey = @&quot;entries&quot;;
&gt; 
&gt; How do you feel about auto for objc types?  I&apos;ve tried to avoid it.

I like it. I understand that others may not share my tastes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643966</commentid>
    <comment_count>10</comment_count>
      <attachid>396953</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-21 12:24:58 -0700</bug_when>
    <thetext>Comment on attachment 396953
Patch

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

&gt;&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1739
&gt;&gt;&gt; +        return nil;
&gt;&gt; 
&gt;&gt; I&apos;ve been using nullptr instead of nil for RetainPtr because it&apos;s a C++ type.  I guess once we transition to ARC we&apos;ll use nil, right?
&gt; 
&gt; I don’t care at all which we use, but in case you are wondering how I choice nil, in my mind, the nil isn’t for RetainPtr, it’s for the pointer stored in RetainPtr. And yes, if we move to ARC we won’t need RetainPtr for Objective-C pointers any more, just for CF pointers.

I think it really depends on how abstract the code we are writing is. If it’s a RetainPtr and the underlying type is unknown, like in a template, then I would use nullptr. Or if it might not even be a RetainPtr, then I might use { }.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644143</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-21 18:30:20 -0700</bug_when>
    <thetext>Tools/Scripts/svn-apply failed to apply attachment 396953 to trunk.
Please resolve the conflicts and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644151</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-21 18:51:01 -0700</bug_when>
    <thetext>Committed r260485: &lt;https://trac.webkit.org/changeset/260485&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644152</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-21 18:51:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/62145691&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645408</commentid>
    <comment_count>14</comment_count>
      <attachid>396953</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-24 14:49:33 -0700</bug_when>
    <thetext>Comment on attachment 396953
Patch

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

&gt; Source/WebKit/Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:190
&gt; +    [result setThumbnailURLs:createNSArray(linkIconURLs).get()];

This caused a regression rdar://problem/62275343 because createNSArray(const Vector&lt;URL&gt;&amp;) returns NSArray&lt;NSString&gt; because URL has operator const String&amp;() const.  We want a makeNSArrayElement that takes a URL (easy), and we want to get rid of that operator String (hard).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645459</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-24 16:06:00 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #14)
&gt; This caused a regression rdar://problem/62275343 because createNSArray(const
&gt; Vector&lt;URL&gt;&amp;) returns NSArray&lt;NSString&gt;

So sorry about the breakage!

Really frustrating that we have no regression tests for this.

&gt; We want a makeNSArrayElement that takes a URL (easy)

OK. Or just use a lambda here.

&gt; and we want to get rid of that operator String (hard).

I don’t agree that we want to do this. I can imagine we might do it, but I see arguments against it too.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396865</attachid>
            <date>2020-04-18 15:23:21 -0700</date>
            <delta_ts>2020-04-18 17:18:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210702-20200418152319.patch</filename>
            <type>text/plain</type>
            <size>173192</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMzIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDhiZjE5NzhiNWIzZjBkYjljYWQwZTgz
MTljZjlhMDljMjRjZGJlYzIuLmI5NGE5NTMxOTQ4NWVkMTkwYjM0NGI5NzI3NzA1ZGNjMmI5MjIw
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTAgQEAKKzIwMjAtMDQtMTggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gVXNlIGNyZWF0ZU5TQXJyYXkgaW4gbWFueSBt
b3JlIHBsYWNlcyB0aGF0IGJ1aWxkIE5TQXJyYXkgb2JqZWN0cyBmcm9tIEMrKyBjb2xsZWN0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNzAy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKIDIwMjAtMDQtMTggIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbV1RGXSBNb3ZlIERh
dGFSZWYuaCBmcm9tIFdlYkNvcmUgdG8gV1RGIHRvIHV0aWxpemUgaXQgaW4gSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggZTcwN2QwZWQ1Yzk1NTc0M2MwYWEyZjJlZjNkMzJmNzU0M2ZjMWUzNS4uYjgxY2E0ZWNj
MDk5YjQ5YzFiMmExZTkwODlkMTkwZGJjYTI3NTk4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEw
IEBACisyMDIwLTA0LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAg
ICBbQ29jb2FdIFVzZSBjcmVhdGVOU0FycmF5IGluIG1hbnkgbW9yZSBwbGFjZXMgdGhhdCBidWls
ZCBOU0FycmF5IG9iamVjdHMgZnJvbSBDKysgY29sbGVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDcwMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCiAyMDIwLTA0LTE4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRp
QGFwcGxlLmNvbT4KIAogICAgICAgICBbQ1NTIHNlbGVjdG9yc10gU3VwcG9ydCA6d2hlcmUoKSBw
c2V1ZG8gY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZTU0OTAyYWY3OTcyYjU4NzM1NGRiZDRiNTc2MzcxZWFm
Y2QwMDg5ZS4uNWQ3ZDAzZTRjZjc2ZGZjYzc3ODQxNWU0Y2M4ZDdkNWVmMGU1MTc2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMCBAQAorMjAyMC0wNC0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBVc2UgY3JlYXRlTlNBcnJheSBpbiBtYW55IG1vcmUg
cGxhY2VzIHRoYXQgYnVpbGQgTlNBcnJheSBvYmplY3RzIGZyb20gQysrIGNvbGxlY3Rpb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA3MDIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAyMC0wNC0xOCAgUGFibG8g
U2FhdmVkcmEgIDxwc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIFJl
cGxhY2UgZXZpbCBzdHJ0b2soKSBjYWxscyB3aXRoIGZzY2FuZigpIGluIE1lbW9yeVByZXNzdXJl
TW9uaXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZwppbmRleCA5MmRkMzc1OWE4MTlj
YjY1OTMwZDY2YWQ1Y2FlYzYxZTVlOWIzNTFkLi5kODEzZGU1ZTYxZDM3OTlmNjBjN2ZlZTM4ZjBh
ZWRhMmEzNDU1MGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAg
QEAKKzIwMjAtMDQtMTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFtDb2NvYV0gVXNlIGNyZWF0ZU5TQXJyYXkgaW4gbWFueSBtb3JlIHBsYWNlcyB0aGF0IGJ1aWxk
IE5TQXJyYXkgb2JqZWN0cyBmcm9tIEMrKyBjb2xsZWN0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNzAyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKIDIwMjAtMDQtMTggIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlh
LmNvbT4KIAogICAgICAgICBSZWR1Y2UgcGFyYW1ldGVyIGxpc3Qgb2YgdGhlIEZyYW1lTG9hZFJl
cXVlc3QgY29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBhZmRiMDg1
YWY4ZTkwYWM3NzQ1YjBiZGIxMjRiOTc3MWE4MGIwMTdlLi5hMzFjMjg1NDI4NzEwMTRhNDg2OGY0
YTdjYjM0ODRiMGNmOThmYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTAgQEAKKzIwMjAtMDQtMTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFtDb2NvYV0gVXNlIGNyZWF0ZU5TQXJyYXkgaW4gbWFueSBtb3JlIHBsYWNlcyB0aGF0
IGJ1aWxkIE5TQXJyYXkgb2JqZWN0cyBmcm9tIEMrKyBjb2xsZWN0aW9ucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNzAyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKIDIwMjAtMDQtMTggIFJvYiBCdWlzICA8cmJ1aXNA
aWdhbGlhLmNvbT4KIAogICAgICAgICBSZWR1Y2UgcGFyYW1ldGVyIGxpc3Qgb2YgdGhlIEZyYW1l
TG9hZFJlcXVlc3QgY29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2NvY29h
L1ZlY3RvckNvY29hLmggYi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oCmluZGV4
IGI4Yzk1NmE2OGE0MzQzMTUzZjE2YTNjODhiYWQ2MzU1NWM2M2Q3YzguLmRiYzA5NzU0MmM3NThm
ZjdmYzg4ZGRlMzIzMmMzYmNhMjAwNzQxNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2Nv
Y29hL1ZlY3RvckNvY29hLmgKKysrIGIvU291cmNlL1dURi93dGYvY29jb2EvVmVjdG9yQ29jb2Eu
aApAQCAtMzQsNDEgKzM0LDQxIEBAIG5hbWVzcGFjZSBXVEYgewogCiAvLyBTcGVjaWFsaXplIHRo
ZSBiZWhhdmlvciBvZiB0aGVzZSBmdW5jdGlvbnMgYnkgb3ZlcmxvYWRpbmcgdGhlIG1ha2VOU0Fy
cmF5RWxlbWVudAogLy8gZnVuY3Rpb25zIGFuZCBtYWtlVmVjdG9yRWxlbWVudCBmdW5jdGlvbnMu
IFRoZSBtYWtlTlNBcnJheUVsZW1lbnQgZnVuY3Rpb24gdGFrZXMKLS8vIGEgY29uc3QmIHRvIGEg
dmVjdG9yIGVsZW1lbnQgYW5kIGNhbiByZXR1cm4gZWl0aGVyIGEgUmV0YWluUHRyPGlkPiBvciBh
biBpZAorLy8gYSBjb25zdCYgdG8gYSBjb2xsZWN0aW9uIGVsZW1lbnQgYW5kIGNhbiByZXR1cm4g
ZWl0aGVyIGEgUmV0YWluUHRyPGlkPiBvciBhbiBpZAogLy8gaWYgdGhlIHZhbHVlIGlzIGF1dG9y
ZWxlYXNlZC4gVGhlIG1ha2VWZWN0b3JFbGVtZW50IGZ1bmN0aW9uIHRha2VzIGFuIGlnbm9yZWQK
IC8vIHBvaW50ZXIgdG8gdGhlIHZlY3RvciBlbGVtZW50IHR5cGUsIG1ha2luZyBhcmd1bWVudC1k
ZXBlbmRlbnQgbG9va3VwIHdvcmssIGFuZCBhbgogLy8gaWQgZm9yIHRoZSBhcnJheSBlbGVtZW50
LCBhbmQgcmV0dXJucyBhbiBPcHRpb25hbDxUPiBvZiB0aGUgdGhlIHZlY3RvciBlbGVtZW50LAog
Ly8gYWxsb3dpbmcgdXMgdG8gZmlsdGVyIG91dCBhcnJheSBlbGVtZW50cyB0aGF0IGFyZSBub3Qg
b2YgdGhlIGV4cGVjdGVkIHR5cGUuCiAvLwotLy8gICAgUmV0YWluUHRyPGlkPiBtYWtlTlNBcnJh
eUVsZW1lbnQoY29uc3QgVmVjdG9yRWxlbWVudFR5cGUmIHZlY3RvckVsZW1lbnQpOworLy8gICAg
UmV0YWluUHRyPGlkPiBtYWtlTlNBcnJheUVsZW1lbnQoY29uc3QgQ29sbGVjdGlvbkVsZW1lbnRU
eXBlJiBjb2xsZWN0aW9uRWxlbWVudCk7CiAvLyAgICAgICAgLW9yLQogLy8gICAgaWQgbWFrZU5T
QXJyYXlFbGVtZW50KGNvbnN0IFZlY3RvckVsZW1lbnRUeXBlJiB2ZWN0b3JFbGVtZW50KTsKIC8v
CiAvLyAgICBPcHRpb25hbDxWZWN0b3JFbGVtZW50VHlwZT4gbWFrZVZlY3RvckVsZW1lbnQoY29u
c3QgVmVjdG9yRWxlbWVudFR5cGUqLCBpZCBhcnJheUVsZW1lbnQpOwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBWZWN0b3JUeXBlPiBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNBcnJheShjb25zdCBW
ZWN0b3JUeXBlJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4gUmV0YWluUHRy
PE5TQXJyYXk+IGNyZWF0ZU5TQXJyYXkoQ29sbGVjdGlvblR5cGUmJik7CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBWZWN0b3JFbGVtZW50VHlwZT4gVmVjdG9yPFZlY3RvckVsZW1lbnRUeXBlPiBtYWtlVmVj
dG9yKE5TQXJyYXkgKik7CiAKIC8vIFRoaXMgb3ZlcmxvYWQgb2YgY3JlYXRlTlNBcnJheSB0YWtl
cyBhIGZ1bmN0aW9uIHRvIG1hcCBlYWNoIHZlY3RvciBlbGVtZW50IHRvIGFuIE9iamVjdGl2ZS1D
IG9iamVjdC4KIC8vIFRoZSBtYXAgZnVuY3Rpb24gaGFzIHRoZSBzYW1lIGludGVyZmFjZSBhcyB0
aGUgbWFrZU5TQXJyYXlFbGVtZW50IGZ1bmN0aW9uIGFib3ZlLCBidXQgY2FuIGJlIGFueQogLy8g
ZnVuY3Rpb24gaW5jbHVkaW5nIGEgbGFtYmRhLCBhIGZ1bmN0aW9uLWxpa2Ugb2JqZWN0LCBvciBG
dW5jdGlvbjw+LgotdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZSwgdHlwZW5hbWUgTWFwRnVu
Y3Rpb25UeXBlPiBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNBcnJheShjb25zdCBWZWN0b3JU
eXBlJiwgY29uc3QgTWFwRnVuY3Rpb25UeXBlJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0
aW9uVHlwZSwgdHlwZW5hbWUgTWFwRnVuY3Rpb25UeXBlPiBSZXRhaW5QdHI8TlNBcnJheT4gY3Jl
YXRlTlNBcnJheShDb2xsZWN0aW9uVHlwZSYmLCBjb25zdCBNYXBGdW5jdGlvblR5cGUmKTsKIAog
Ly8gSW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgZnVuY3Rpb24gdGVtcGxhdGVzIGFib3Zl
LgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPiBSZXRhaW5QdHI8TlNBcnJheT4gY3Jl
YXRlTlNBcnJheShjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xsZWN0aW9uVHlwZT4gUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5TQXJyYXkoQ29sbGVjdGlv
blR5cGUmJiBjb2xsZWN0aW9uKQogewotICAgIGF1dG8gYXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6dmVjdG9yLnNpemUoKV0pOwotICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpnZXRQ
dHIobWFrZU5TQXJyYXlFbGVtZW50KGVsZW1lbnQpKV07CisgICAgYXV0byBhcnJheSA9IGFkb3B0
TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzdGQ6OnNpemUoY29s
bGVjdGlvbildKTsKKyAgICBmb3IgKGF1dG8mJiBlbGVtZW50IDogY29sbGVjdGlvbikKKyAgICAg
ICAgW2FycmF5IGFkZE9iamVjdDpnZXRQdHIobWFrZU5TQXJyYXlFbGVtZW50KHN0ZDo6Zm9yd2Fy
ZDxkZWNsdHlwZShlbGVtZW50KT4oZWxlbWVudCkpKV07CiAgICAgcmV0dXJuIGFycmF5OwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBlbmFtZSBNYXBGdW5jdGlvblR5cGU+
IFJldGFpblB0cjxOU0FycmF5PiBjcmVhdGVOU0FycmF5KGNvbnN0IFZlY3RvclR5cGUmIHZlY3Rv
ciwgY29uc3QgTWFwRnVuY3Rpb25UeXBlJiBmdW5jdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIENv
bGxlY3Rpb25UeXBlLCB0eXBlbmFtZSBNYXBGdW5jdGlvblR5cGU+IFJldGFpblB0cjxOU0FycmF5
PiBjcmVhdGVOU0FycmF5KENvbGxlY3Rpb25UeXBlJiYgY29sbGVjdGlvbiwgY29uc3QgTWFwRnVu
Y3Rpb25UeXBlJiBmdW5jdGlvbikKIHsKLSAgICBhdXRvIGFycmF5ID0gYWRvcHROUyhbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnZlY3Rvci5zaXplKCldKTsKLSAgICBm
b3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6Z2V0
UHRyKGZ1bmN0aW9uKGVsZW1lbnQpKV07CisgICAgYXV0byBhcnJheSA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzdGQ6OnNpemUoY29sbGVjdGlvbild
KTsKKyAgICBmb3IgKGF1dG8mJiBlbGVtZW50IDogY29sbGVjdGlvbikKKyAgICAgICAgW2FycmF5
IGFkZE9iamVjdDpnZXRQdHIoZnVuY3Rpb24oc3RkOjpmb3J3YXJkPGRlY2x0eXBlKGVsZW1lbnQp
PihlbGVtZW50KSkpXTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKQEAgLTg3LDQgKzg3LDUgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yRWxlbWVudFR5cGU+IFZlY3RvcjxWZWN0b3JFbGVtZW50
VHlwZT4gbWFrZVZlY3RvcihOU0FycmEKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKK3VzaW5nIFdU
Rjo6Y3JlYXRlTlNBcnJheTsKIHVzaW5nIFdURjo6bWFrZVZlY3RvcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJJT1MubW0KaW5kZXggZTRmMzhlMTQzMDI3YmFlOWRjYTExZDdjMjc1
NjVkZThiNjc5MjBlMi4uOTY3ODIwYjBlMDkzNzcxY2ZlMjI4MjRmOTBkZDI0MjY4MjIyMjEyOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KQEAgLTQ1LDcgKzQ1LDYg
QEAKICNpbXBvcnQgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxOYW1lcy5oIgog
I2ltcG9ydCAiSW50UmVjdC5oIgotI2ltcG9ydCAiSW50U2l6ZS5oIgogI2ltcG9ydCAiTG9jYWxp
emVkU3RyaW5ncy5oIgogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAiUmFuZ2UuaCIKQEAgLTU5
LDggKzU4LDggQEAKICNpbXBvcnQgIldBS1dpbmRvdy5oIgogI2ltcG9ydCAiV2ViQ29yZVRocmVh
ZC5oIgogI2ltcG9ydCAiVmlzaWJsZVVuaXRzLmgiCi0KICNpbXBvcnQgPENvcmVUZXh0L0NvcmVU
ZXh0Lmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogZW51bSB7CiAgICAg
TlNBdHRhY2htZW50Q2hhcmFjdGVyID0gMHhmZmZjICAgIC8qIFRvIGRlbm90ZSBhdHRhY2htZW50
cy4gKi8KQEAgLTE3NzMsMjAgKzE3NzIsMTcgQEAgLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlG
bG93VG9FbGVtZW50cwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciBjaGlsZHJlbjsKICAgICBzZWxmLmF4QmFja2luZ09iamVjdC0+YXJpYUZsb3dU
b0VsZW1lbnRzKGNoaWxkcmVuKTsKICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBjaGlsZHJl
bi5zaXplKCk7Ci0gICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5V2l0aENhcGFjaXR5Omxlbmd0aF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVy
ID0gY2hpbGRyZW5baV0tPndyYXBwZXIoKTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShjaGls
ZHJlbiwgW10gKGF1dG8mIGNoaWxkKSAtPiBpZCB7CisgICAgICAgIGF1dG8gd3JhcHBlciA9IGNo
aWxkLT53cmFwcGVyKCk7CiAgICAgICAgIEFTU0VSVCh3cmFwcGVyKTsKLSAgICAgICAgaWYgKCF3
cmFwcGVyKQotICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGNoaWxkcmVuW2ld
LT5pc0F0dGFjaG1lbnQoKSAmJiBbd3JhcHBlciBhdHRhY2htZW50Vmlld10pCi0gICAgICAgICAg
ICBbYXJyYXkgYWRkT2JqZWN0Olt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XV07Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6d3JhcHBlcl07Ci0gICAgfQotICAgIHJl
dHVybiBhcnJheTsKKyAgICAgICAgaWYgKGNoaWxkLT5pc0F0dGFjaG1lbnQoKSkgeworICAgICAg
ICAgICAgaWYgKGF1dG8gYXR0YWNobWVudFZpZXcgPSB3cmFwcGVyLmF0dGFjaG1lbnRWaWV3KQor
ICAgICAgICAgICAgICAgIHJldHVybiBhdHRhY2htZW50VmlldzsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB3cmFwcGVyOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKGlkKWFj
Y2Vzc2liaWxpdHlMaW5rZWRFbGVtZW50CkBAIC0yNzQzLDE1ICsyNzM5LDkgQEAgLSAoTlNBcnJh
eSAqKXJlY3RzRm9yU2VsZWN0aW9uUmVjdHM6KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rp
b25SZWN0PiYpc2VsZWMKICAgICBpZiAoIXNpemUpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
Ci0gICAgTlNNdXRhYmxlQXJyYXkgKnJlY3RzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENh
cGFjaXR5OnNpemVdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsK
LSAgICAgICAgY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uUmVjdCYgY29yZVJlY3QgPSBzZWxlY3Rp
b25SZWN0c1tpXTsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25SZWN0ID0gRmxvYXRSZWN0KGNvcmVS
ZWN0LnJlY3QoKSk7Ci0gICAgICAgIENHUmVjdCByZWN0ID0gW3NlbGYgY29udmVydFJlY3RUb1Nw
YWNlOnNlbGVjdGlvblJlY3Qgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6U2Ny
ZWVuXTsKLSAgICAgICAgW3JlY3RzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJl
Y3RdXTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlY3RzOworICAgIHJldHVybiBjcmVhdGVO
U0FycmF5KHNlbGVjdGlvblJlY3RzLCBbJl0gKGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvblJlY3Qm
IHJlY3QpIHsKKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6W3NlbGYgY29u
dmVydFJlY3RUb1NwYWNlOkZsb2F0UmVjdChyZWN0LnJlY3QoKSkgc3BhY2U6QWNjZXNzaWJpbGl0
eUNvbnZlcnNpb25TcGFjZTo6U2NyZWVuXV07CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAog
LSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKil0ZXh0TWFya2VyRm9yUG9pbnQ6KENHUG9p
bnQpcG9pbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmgKaW5kZXggOWUx
NjA0YWI4M2ViNWMyYjgyOWFmMmNjZjFjNDFmNjYzYTQzNDU1Mi4uNjgyZGZlNTc3ZDhiZDc1OWQ4
YTE2OTQxMDhjMDgxOTYxOWM1ZDY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJCYXNlLmgKQEAgLTI2LDggKzI2LDcgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2VfaAotI2RlZmluZSBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckJhc2VfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFw
aGljcy5oPgpAQCAtODIsOSArODEsOSBAQCBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiAtICh2b2lk
KWFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRpb246KE5TU3RyaW5nICopbm90aWZpY2F0aW9u
TmFtZTsKIC0gKHZvaWQpYWNjZXNzaWJpbGl0eVBvc3RlZE5vdGlmaWNhdGlvbjooTlNTdHJpbmcg
Kilub3RpZmljYXRpb25OYW1lIHVzZXJJbmZvOihOU0RpY3Rpb25hcnkgKil1c2VySW5mbzsKIAot
LSAoQ0dQYXRoUmVmKWNvbnZlcnRQYXRoVG9TY3JlZW5TcGFjZTooV2ViQ29yZTo6UGF0aCAmKXBh
dGg7CistIChDR1BhdGhSZWYpY29udmVydFBhdGhUb1NjcmVlblNwYWNlOihjb25zdCBXZWJDb3Jl
OjpQYXRoJilwYXRoOwogCi0tIChDR1JlY3QpY29udmVydFJlY3RUb1NwYWNlOihXZWJDb3JlOjpG
bG9hdFJlY3QgJilyZWN0IHNwYWNlOihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Q29udmVyc2lvblNw
YWNlKXNwYWNlOworLSAoQ0dSZWN0KWNvbnZlcnRSZWN0VG9TcGFjZTooY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JilyZWN0IHNwYWNlOihXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Q29udmVyc2lvblNw
YWNlKXNwYWNlOwogCiAvLyBNYXRoIHJlbGF0ZWQgZnVuY3Rpb25zCiAtIChOU0FycmF5ICopYWNj
ZXNzaWJpbGl0eU1hdGhQb3N0c2NyaXB0UGFpcnM7CkBAIC05OSw1ICs5OCwzIEBAIGV4dGVybiBO
U0FycmF5ICpjb252ZXJ0VG9OU0FycmF5KGNvbnN0IFdlYkNvcmU6OkFYQ29yZU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkCiAjZW5kaWYKIAogQGVuZAotCi0jZW5kaWYgLy8gV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJCYXNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZS5tbQppbmRleCA3MTg4MmI4NWFkMzM5ZTBiNGYyYTg2N2Q4MWIzMTY1MzFmMmNlNGZmLi4x
NGVjNDA3ODI0OGVhYTMzZDI2YTU5NTc3OWJhYjczOTJiN2Y4ZjZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCkBAIC02OCwxMCArNjgsMTIgQEAKICNpbXBvcnQg
PHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQorI2ltcG9ydCAi
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaCIKICNpbXBvcnQgPHBhbC9zcGkvbWFj
L0hJU2VydmljZXNTUEkuaD4KICNlbHNlCiAjaW1wb3J0ICJXQUtWaWV3LmgiCiAjaW1wb3J0ICJX
QUtXaW5kb3cuaCIKKyNpbXBvcnQgIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmgi
CiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yNDksMzUgKzI1MSwzMyBA
QCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgTlNBcnJheSAqY29udmVydE1h
dGhQYWlyc1RvTlNBcnJheShjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
TWF0aE11bHRpc2NyaXB0UGFpcnMmIHBhaXJzLCBOU1N0cmluZyAqc3Vic2NyaXB0S2V5LCBOU1N0
cmluZyAqc3VwZXJzY3JpcHRLZXkpCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gW05T
TXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnBhaXJzLnNpemUoKV07Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBwYWlyIDogcGFpcnMpIHsKLSAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAq
cGFpckRpY3Rpb25hcnkgPSBbTlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKyAgICBy
ZXR1cm4gY3JlYXRlTlNBcnJheShwYWlycywgWyZdIChhdXRvJiBwYWlyKSB7CisgICAgICAgIGlk
IHN1YnNjcmlwdCA9IG5pbDsKICAgICAgICAgaWYgKHBhaXIuZmlyc3QgJiYgcGFpci5maXJzdC0+
d3JhcHBlcigpICYmICFwYWlyLmZpcnN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCi0gICAg
ICAgICAgICBbcGFpckRpY3Rpb25hcnkgc2V0T2JqZWN0OnBhaXIuZmlyc3QtPndyYXBwZXIoKSBm
b3JLZXk6c3Vic2NyaXB0S2V5XTsKKyAgICAgICAgICAgIHN1YnNjcmlwdCA9IHBhaXIuZmlyc3Qt
PndyYXBwZXIoKTsKKyAgICAgICAgaWQgc3VwZXJzY3JpcHQgPSBuaWw7CiAgICAgICAgIGlmIChw
YWlyLnNlY29uZCAmJiBwYWlyLnNlY29uZC0+d3JhcHBlcigpICYmICFwYWlyLnNlY29uZC0+YWNj
ZXNzaWJpbGl0eUlzSWdub3JlZCgpKQotICAgICAgICAgICAgW3BhaXJEaWN0aW9uYXJ5IHNldE9i
amVjdDpwYWlyLnNlY29uZC0+d3JhcHBlcigpIGZvcktleTpzdXBlcnNjcmlwdEtleV07Ci0gICAg
ICAgIFthcnJheSBhZGRPYmplY3Q6cGFpckRpY3Rpb25hcnldOwotICAgIH0KLSAgICByZXR1cm4g
YXJyYXk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkZENoaWxkVG9BcnJheShBWENvcmVPYmplY3QmIGNo
aWxkLCBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGFycmF5KQotewotICAgIFdlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyICp3cmFwcGVyID0gY2hpbGQud3JhcHBlcigpOwotICAgIC8vIFdl
IHdhbnQgdG8gcmV0dXJuIHRoZSBhdHRhY2htZW50IHZpZXcgaW5zdGVhZCBvZiB0aGUgb2JqZWN0
IHJlcHJlc2VudGluZyB0aGUgYXR0YWNobWVudCwKLSAgICAvLyBvdGhlcndpc2UsIHdlIGdldCBw
YWxpbmRyb21lIGVycm9ycyBpbiB0aGUgQVggaGllcmFyY2h5LgotICAgIGlmIChjaGlsZC5pc0F0
dGFjaG1lbnQoKSAmJiBbd3JhcHBlciBhdHRhY2htZW50Vmlld10pCi0gICAgICAgIFthcnJheS5n
ZXQoKSBhZGRPYmplY3Q6W3dyYXBwZXIgYXR0YWNobWVudFZpZXddXTsKLSAgICBlbHNlIGlmICh3
cmFwcGVyKQotICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OndyYXBwZXJdOworICAgICAg
ICAgICAgc3VwZXJzY3JpcHQgPSBwYWlyLnNlY29uZC0+d3JhcHBlcigpOworICAgICAgICBpZiAo
IXN1YnNjcmlwdCAmJiAhc3VwZXJzY3JpcHQpCisgICAgICAgICAgICByZXR1cm4gQHsgfTsKKyAg
ICAgICAgaWYgKCFzdXBlcnNjcmlwdCkKKyAgICAgICAgICAgIHJldHVybiBAeyBzdWJzY3JpcHRL
ZXk6IHN1YnNjcmlwdCB9OworICAgICAgICBpZiAoIXN1YnNjcmlwdCkKKyAgICAgICAgICAgIHJl
dHVybiBAeyBzdXBlcnNjcmlwdEtleTogc3VwZXJzY3JpcHQgfTsKKyAgICAgICAgcmV0dXJuIEB7
IHN1YnNjcmlwdEtleTogc3Vic2NyaXB0LCBzdXBlcnNjcmlwdEtleTogc3VwZXJzY3JpcHQgfTsK
KyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiBOU0FycmF5ICpjb252ZXJ0VG9OU0FycmF5KGNv
bnN0IFdlYkNvcmU6OkFYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBj
aGlsZHJlbikKIHsKLSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjaGlsZHJlbi5zaXplKCldOwotICAgIGZvciAoY29u
c3QgYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKLSAgICAgICAgYWRkQ2hpbGRUb0FycmF5KCpjaGls
ZCwgcmVzdWx0KTsKLSAgICByZXR1cm4gW3Jlc3VsdCBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJu
IGNyZWF0ZU5TQXJyYXkoY2hpbGRyZW4sIFtdIChhdXRvJiBjaGlsZCkgLT4gaWQgeworICAgICAg
ICBhdXRvIHdyYXBwZXIgPSBjaGlsZC0+d3JhcHBlcigpOworICAgICAgICAvLyBXZSB3YW50IHRv
IHJldHVybiB0aGUgYXR0YWNobWVudCB2aWV3IGluc3RlYWQgb2YgdGhlIG9iamVjdCByZXByZXNl
bnRpbmcgdGhlIGF0dGFjaG1lbnQsCisgICAgICAgIC8vIG90aGVyd2lzZSwgd2UgZ2V0IHBhbGlu
ZHJvbWUgZXJyb3JzIGluIHRoZSBBWCBoaWVyYXJjaHkuCisgICAgICAgIGlmIChjaGlsZC0+aXNB
dHRhY2htZW50KCkgJiYgd3JhcHBlci5hdHRhY2htZW50VmlldykKKyAgICAgICAgICAgIHJldHVy
biB3cmFwcGVyLmF0dGFjaG1lbnRWaWV3OworICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICB9
KS5hdXRvcmVsZWFzZSgpOwogfQogCiBAaW1wbGVtZW50YXRpb24gV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlCkBAIC00NDYsNyArNDQ2LDcgQEAgc3RhdGljIHZvaWQgY29udmVydFBh
dGhUb1NjcmVlblNwYWNlRnVuY3Rpb24oUGF0aENvbnZlcnNpb25JbmZvJiBjb252ZXJzaW9uLCBj
b24KICAgICB9CiB9CiAKLS0gKENHUGF0aFJlZiljb252ZXJ0UGF0aFRvU2NyZWVuU3BhY2U6KFBh
dGggJilwYXRoCistIChDR1BhdGhSZWYpY29udmVydFBhdGhUb1NjcmVlblNwYWNlOihjb25zdCBQ
YXRoJilwYXRoCiB7CiAgICAgUGF0aENvbnZlcnNpb25JbmZvIGNvbnZlcnNpb24gPSB7IHNlbGYs
IENHUGF0aENyZWF0ZU11dGFibGUoKSB9OwogICAgIHBhdGguYXBwbHkoWyZjb252ZXJzaW9uXShj
b25zdCBQYXRoRWxlbWVudCYgcGF0aEVsZW1lbnQpIHsKQEAgLTQ2Myw3ICs0NjMsNyBAQCAtIChp
ZClfYWNjZXNzaWJpbGl0eVdlYkRvY3VtZW50VmlldwogICAgIHJldHVybiBuaWw7CiB9CiAKLS0g
KENHUmVjdCljb252ZXJ0UmVjdFRvU3BhY2U6KFdlYkNvcmU6OkZsb2F0UmVjdCAmKXJlY3Qgc3Bh
Y2U6KEFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2Upc3BhY2UKKy0gKENHUmVjdCljb252ZXJ0
UmVjdFRvU3BhY2U6KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpcmVjdCBzcGFjZTooQWNjZXNz
aWJpbGl0eUNvbnZlcnNpb25TcGFjZSlzcGFjZQogewogICAgIGlmICghc2VsZi5heEJhY2tpbmdP
YmplY3QpCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQppbmRleCBkMWZlMjZjMTFkZGQ4MmRhMmQ0YmM1ODcyYzBhNjFlNDFi
ZTBhODJjLi5iMTQ4MmFkYjkzZjQ4OTExODRkYmQzZjg0ZTEwNDNiYTVmNjM1MTZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtMzkzNSwxMiArMzkzNSwxMCBA
QCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIGF1dG8g
cmFuZ2VzID0gYmFja2luZ09iamVjdC0+ZmluZFRleHRSYW5nZXMoY3JpdGVyaWEpOwogICAgICAg
ICAgICAgaWYgKHJhbmdlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAgICAgICAgIE5TTXV0YWJsZUFycmF5ICptYXJrZXJzID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5V2l0aENhcGFjaXR5OnJhbmdlcy5zaXplKCldOwotICAgICAgICAgICAgZm9yIChhdXRvIHJh
bmdlIDogcmFuZ2VzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlkIG1hcmtlciA9IFtwcm90ZWN0
ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTpyYW5nZV0pCi0gICAgICAgICAgICAgICAg
ICAgIFttYXJrZXJzIGFkZE9iamVjdDptYXJrZXJdOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIG1hcmtlcnM7CisKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHJh
bmdlcywgWyZdIChhdXRvJiByYW5nZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBbcHJvdGVj
dGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6cmFuZ2VdOworICAgICAgICAgICAgfSku
YXV0b3JlbGVhc2UoKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zOTU1LDEwICszOTUzLDcg
QEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIH0pOwogICAg
ICAgICBpZiAob3BlcmF0aW9uUmVzdWx0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJy
YXlXaXRoQ2FwYWNpdHk6b3BlcmF0aW9uUmVzdWx0LnNpemUoKV07Ci0gICAgICAgIGZvciAoYXV0
byBzdHIgOiBvcGVyYXRpb25SZXN1bHQpCi0gICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpz
dHJdOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gY3JlYXRlTlNBcnJh
eShvcGVyYXRpb25SZXN1bHQpLmF1dG9yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVVJRWxlbWVudENvdW50Rm9yU2Vh
cmNoUHJlZGljYXRlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZXNDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZXNDb2NvYS5tbQppbmRleCBmNmY5MmE0
YzlkNGY5NmJhZDgzOTdmYTIzZmJkNTIwZWRmMjkzMDI4Li5kMTgzMzM0MjMwYWM4Njg5ZTk2YzBk
NDg0NjRkODE1YTc5MWYxYTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0ZvbnRBdHRyaWJ1dGVzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9Gb250QXR0cmlidXRlc0NvY29hLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQg
IkNvbG9yQ29jb2EuaCIKICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNBdHRyaWJ1dGVkU3RyaW5n
U1BJLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAjaW1wb3J0IDxwYWwvaW9zL1VJS2l0U29mdExpbmsuaD4KQEAgLTEyOSwx
MCArMTMwLDkgQEAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gRm9udEF0dHJpYnV0ZXM6OmNyZWF0
ZURpY3Rpb25hcnkoKSBjb25zdAogICAgIH0KIAogICAgIGlmICghdGV4dExpc3RzLmlzRW1wdHko
KSkgewotICAgICAgICBhdXRvIHRleHRMaXN0QXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6dGV4dExpc3RzLnNpemUoKV0pOwotICAgICAgICBm
b3IgKGF1dG8mIHRleHRMaXN0IDogdGV4dExpc3RzKQotICAgICAgICAgICAgW3RleHRMaXN0QXJy
YXkgYWRkT2JqZWN0OnRleHRMaXN0LmNyZWF0ZVRleHRMaXN0KCkuZ2V0KCldOwotICAgICAgICBb
c3R5bGUgc2V0VGV4dExpc3RzOnRleHRMaXN0QXJyYXkuZ2V0KCldOworICAgICAgICBbc3R5bGUg
c2V0VGV4dExpc3RzOmNyZWF0ZU5TQXJyYXkodGV4dExpc3RzLCBbXSAoYXV0byYgdGV4dExpc3Qp
IHsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0TGlzdC5jcmVhdGVUZXh0TGlzdCgpOworICAgICAg
ICB9KS5nZXQoKV07CiAgICAgfQogCiAgICAgYXR0cmlidXRlc1tOU1BhcmFncmFwaFN0eWxlQXR0
cmlidXRlTmFtZV0gPSBzdHlsZS5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0K
aW5kZXggYTIwN2NiMDliODA2MWU3ZDE5NDk5NTQ1ZmNkMTVjYWZmZDNkNDMxMC4uMTJiZjc1ZTc5
NjUxNWI2NzgyMGVkZGNmMGM0MzBjYTY2OWYxYmJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJh
bWVJT1MubW0KQEAgLTY4LDYgKzY4LDcgQEAKICNpbXBvcnQgIldBS1dpbmRvdy5oIgogI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0
aW9ucy5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1MTmFtZXM7
CkBAIC03ODksMTEgKzc5MCw5IEBAIE5TQXJyYXkgKkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JD
dXJyZW50Um9vdCgpIGNvbnN0CiAgICAgICAgICAgICBhcHBlbmQoaW50ZXJwcmV0YXRpb24sIHRl
eHRBZnRlckxhc3RNYXJrZXIpOwogICAgIH0KIAotICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIGZvciAoYXV0byYgaW50ZXJwcmV0YXRpb24g
OiBpbnRlcnByZXRhdGlvbnMpCi0gICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmFkb3B0TlMoW1tO
U1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzOnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5pY2hhcio+KGludGVycHJldGF0aW9uLmRhdGEoKSkgbGVuZ3RoOmludGVycHJldGF0aW9uLnNp
emUoKV0pLmdldCgpXTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNyZWF0ZU5T
QXJyYXkoaW50ZXJwcmV0YXRpb25zLCBbXSAoYXV0byYgaW50ZXJwcmV0YXRpb24pIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzOnJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5pY2hhcio+KGludGVycHJldGF0aW9uLmRhdGEoKSkgbGVu
Z3RoOmludGVycHJldGF0aW9uLnNpemUoKV0pOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAK
IHZvaWQgRnJhbWU6OnZpZXdwb3J0T2Zmc2V0Q2hhbmdlZChWaWV3cG9ydE9mZnNldENoYW5nZVR5
cGUgY2hhbmdlVHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L1NlYXJjaFBvcHVwTWVudUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
U2VhcmNoUG9wdXBNZW51Q29jb2EubW0KaW5kZXggNTI5Mzc0OWY1NDdlMzMxNTlkN2NlMGI0NGYz
MGVjYzg5ZWFjYTE2NS4uYjExOWQ4N2FmYzI4YzI1MDQ5ZjMzOTRhMGZkZWUwNDdlYjdmMGIwNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2VhcmNoUG9wdXBNZW51
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2VhcmNoUG9wdXBN
ZW51Q29jb2EubW0KQEAgLTI2LDYgKzI2LDggQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9y
dCAiU2VhcmNoUG9wdXBNZW51Q29jb2EuaCIKIAorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNv
Y29hLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIE5TU3RyaW5nICogY29uc3Qg
ZGF0ZUtleSA9IEAiZGF0ZSI7CkBAIC0xNTMsMTAgKzE1NSw5IEBAIHZvaWQgc2F2ZVJlY2VudFNl
YXJjaGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPFJlY2VudFNlYXJjaD4mIHNl
YXJjaEl0CiAgICAgaWYgKHNlYXJjaEl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgW2l0ZW1zRGlj
dGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6bmFtZV07CiAgICAgZWxzZSB7Ci0gICAgICAgIFJl
dGFpblB0cjxOU011dGFibGVBcnJheT4gaXRlbXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2VhcmNoSXRlbXMuc2l6ZSgpXSk7Ci0gICAgICAgIGZv
ciAoYXV0byYgc2VhcmNoSXRlbSA6IHNlYXJjaEl0ZW1zKQotICAgICAgICAgICAgW2l0ZW1zIGFk
ZE9iamVjdDphZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRL
ZXlzOnNlYXJjaEl0ZW0uc3RyaW5nLCBzZWFyY2hTdHJpbmdLZXksIHRvTlNEYXRlRnJvbVN5c3Rl
bUNsb2NrKHNlYXJjaEl0ZW0udGltZSksIGRhdGVLZXksIG5pbF0pLmdldCgpXTsKLQorICAgICAg
ICBhdXRvIGl0ZW1zID0gY3JlYXRlTlNBcnJheShzZWFyY2hJdGVtcywgW10gKGF1dG8mIHNlYXJj
aEl0ZW0pIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOnNlYXJjaEl0ZW0uc3RyaW5nLCBzZWFyY2hTdHJpbmdL
ZXksIHRvTlNEYXRlRnJvbVN5c3RlbUNsb2NrKHNlYXJjaEl0ZW0udGltZSksIGRhdGVLZXksIG5p
bF0pOworICAgICAgICB9KTsKICAgICAgICAgW2l0ZW1zRGljdGlvbmFyeSBzZXRPYmplY3Q6YWRv
cHROUyhbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czppdGVtcy5n
ZXQoKSwgc2VhcmNoZXNLZXksIG5pbF0pLmdldCgpIGZvcktleTpuYW1lXTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29h
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0K
aW5kZXggNGNhZGU1ZjBmNDQ0YTdjZjRmZjg1NDUyOWY0MzMwNmY4ZmZkODFmYS4uMzQzODk3YWIy
NzQyYzljNjI1NjE0OTZjZWU0ZTRlZGNlMmU0OWFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0KQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbXBvcnQg
PHN0cmluZy5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9jb2Nv
YS9WZWN0b3JDb2NvYS5oPgogCiBAaW50ZXJmYWNlIFdlYkNvcmVTaGFyZWRCdWZmZXJEYXRhIDog
TlNEYXRhCiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhEYXRhU2VnbWVudDooY29uc3QgV2ViQ29y
ZTo6U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudCYpZGF0YVNlZ21lbnQgcG9zaXRpb246KE5TVUlu
dGVnZXIpcG9zaXRpb247CkBAIC0xMTUsMTAgKzExNiw5IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlRnJvbVJlYWRpbmdGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBh
dGgpCiAKIFJldGFpblB0cjxOU0FycmF5PiBTaGFyZWRCdWZmZXI6OmNyZWF0ZU5TRGF0YUFycmF5
KCkgY29uc3QKIHsKLSAgICBhdXRvIGRhdGFBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTptX3NlZ21lbnRzLnNpemUoKV0pOwotICAgIGZvciAo
Y29uc3QgYXV0byYgc2VnbWVudCA6IG1fc2VnbWVudHMpCi0gICAgICAgIFtkYXRhQXJyYXkgYWRk
T2JqZWN0OnNlZ21lbnQuc2VnbWVudC0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCldOwotICAgIHJldHVy
biBXVEZNb3ZlKGRhdGFBcnJheSk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkobV9zZWdtZW50
cywgW10gKGF1dG8mIHNlZ21lbnQpIHsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQuc2VnbWVudC0+
Y3JlYXRlTlNEYXRhKCk7CisgICAgfSk7CiB9CiAKIFJldGFpblB0cjxOU0RhdGE+IFNoYXJlZEJ1
ZmZlcjo6RGF0YVNlZ21lbnQ6OmNyZWF0ZU5TRGF0YSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5j
ZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZP
YmpDLm1tCmluZGV4IGJmN2YzOGRlYjUwOGRiNmY4YWQ2YWFlYTA1NjY0MGEwNGE3NTM1OGMuLmYy
ZWNkMjE5ZDNjNjdkMGZhYjk3NzFmMDk2NzlkOTIzNzJhMWU5YzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNl
RmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDLm1tCkBAIC00Myw2ICs0Myw3IEBACiAjaW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgog
I2ltcG9ydCA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4K
KyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQmFz
ZTY0Lmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTY5MiwxMCArNjkz
LDEwIEBAIHN0YXRpYyBib29sIGlzRXF1YWwoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQogdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWlu
Z0FWRk9iakM6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGljZW5zZVR5cGUsIFJlZjxT
aGFyZWRCdWZmZXI+JiYgcmVzcG9uc2VEYXRhLCBMaWNlbnNlVXBkYXRlQ2FsbGJhY2smJiBjYWxs
YmFjaykKIHsKICAgICBpZiAoIW1fZXhwaXJlZFNlc3Npb25zLmlzRW1wdHkoKSAmJiBpc0VxdWFs
KHJlc3BvbnNlRGF0YSwgImFja25vd2xlZGdlZCJfcykpIHsKLSAgICAgICAgYXV0byBleHBpcmVk
U2Vzc2lvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICAg
ICAgZm9yIChhdXRvJiBzZXNzaW9uIDogbV9leHBpcmVkU2Vzc2lvbnMpCi0gICAgICAgICAgICBb
ZXhwaXJlZFNlc3Npb25zIGFkZE9iamVjdDpzZXNzaW9uLmdldCgpXTsKLQorICAgICAgICBhdXRv
IGV4cGlyZWRTZXNzaW9ucyA9IGNyZWF0ZU5TQXJyYXkobV9leHBpcmVkU2Vzc2lvbnMsIFtdIChh
dXRvJiBkYXRhKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWQgb3ZlcmxvYWQgbWFrZU5T
QXJyYXlFbGVtZW50IGZvciB0aGlzIGluIFJldGFpblB0ci5oIHBlcmhhcHM/CisgICAgICAgICAg
ICByZXR1cm4gZGF0YS5nZXQoKTsKKyAgICAgICAgfSk7CiAgICAgICAgIGF1dG8qIGNlcnRpZmlj
YXRlID0gbV9pbnN0YW5jZS0+c2VydmVyQ2VydGlmaWNhdGUoKTsKICAgICAgICAgYXV0byogc3Rv
cmFnZVVSTCA9IG1faW5zdGFuY2UtPnN0b3JhZ2VVUkwoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFW
Q29udGVudEtleVNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbQppbmRleCBk
NDM2YmU3NzcyM2Y2NGE0YWUxODllMGJjY2ViYjI5Mzc5ZTczNzVmLi4yNjRjNzY0ZGM0NDZmODU4
ZWU3NTJhY2FjOWE5NGQyNGU1NDllOGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vz
c2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbQpAQCAtNDMsNiArNDMsNyBA
QAogI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2Ev
QVZGb3VuZGF0aW9uU1BJLmg+CiAjaW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgorI2ltcG9ydCA8
d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKICNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5kYXRp
b25Tb2Z0TGluay5oPgogCkBAIC0yODIsMTQgKzI4Myw5IEBAIGJvb2wgQ0RNU2Vzc2lvbkFWQ29u
dGVudEtleVNlc3Npb246OnVwZGF0ZShVaW50OEFycmF5KiBrZXksIFJlZlB0cjxVaW50OEFycmF5
PiYKIAogICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBvcHRpb25zOwogICAgICAgICBp
ZiAoIW1fcHJvdG9jb2xWZXJzaW9ucy5pc0VtcHR5KCkgJiYgUEFMOjpjYW5Mb2FkX0FWRm91bmRh
dGlvbl9BVkNvbnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xWZXJzaW9uc0tleSgpKSB7Ci0gICAgICAg
ICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHByb3RvY29sVmVyc2lvbnNPcHRpb24gPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgdmVyc2lvbiA6IG1fcHJvdG9jb2xWZXJzaW9ucykgewotICAgICAgICAgICAgICAgIGlm
ICghdmVyc2lvbikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgW3Byb3RvY29sVmVyc2lvbnNPcHRpb24gYWRkT2JqZWN0OkAodmVyc2lvbildOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBvcHRpb25zID0gQHsgQVZDb250ZW50S2V5UmVxdWVzdFBy
b3RvY29sVmVyc2lvbnNLZXk6IHByb3RvY29sVmVyc2lvbnNPcHRpb24uZ2V0KCkgfTsKKyAgICAg
ICAgICAgIG9wdGlvbnMgPSBAeyBBVkNvbnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xWZXJzaW9uc0tl
eTogY3JlYXRlTlNBcnJheShtX3Byb3RvY29sVmVyc2lvbnMsIFtdIChpbnQgdmVyc2lvbikgLT4g
TlNOdW1iZXIgKiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHZlcnNpb24gPyBAKHZlcnNpb24p
IDogbmlsOworICAgICAgICAgICAgfSkuZ2V0KCkgfTsKICAgICAgICAgfQogCiAgICAgICAgIGVy
cm9yQ29kZSA9IE1lZGlhUGxheWVyOjpOb0Vycm9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWU3RyZWFt
U2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL0NETVNlc3Npb25BVlN0cmVhbVNlc3Npb24ubW0KaW5kZXggMTM4ZTJmZDk0N2U4MjVm
YzA5MzFmOGY3NzRkMjQ0OWVmNDEyNGI5ZC4uODk2YTI0NTIyYjhjNjJmYzM1MjRjMzQzNzg4ZTQz
MzZkMGJkZWZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9u
QVZTdHJlYW1TZXNzaW9uLm1tCkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0IDxwYWwvc3BpL2Nv
Y29hL0FWRm91bmRhdGlvblNQSS5oPgogI2ltcG9ydCA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbXBv
cnQgPHd0Zi9VVUlELmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogI2lt
cG9ydCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CiAKQEAgLTIyNiwxNCArMjI3
LDkgQEAgYm9vbCBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjp1cGRhdGUoVWludDhBcnJheSog
a2V5LCBSZWZQdHI8VWludDhBcnJheT4mIG5leHQKIAogICAgICAgICBSZXRhaW5QdHI8TlNEaWN0
aW9uYXJ5PiBvcHRpb25zOwogICAgICAgICBpZiAoIW1fcHJvdG9jb2xWZXJzaW9ucy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcHJvdG9jb2xWZXJz
aW9uc09wdGlvbiA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAg
ICAgICAgICAgZm9yIChhdXRvJiB2ZXJzaW9uIDogbV9wcm90b2NvbFZlcnNpb25zKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCF2ZXJzaW9uKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBbcHJvdG9jb2xWZXJzaW9uc09wdGlvbiBhZGRPYmplY3Q6QCh2ZXJz
aW9uKV07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG9wdGlvbnMgPSBAeyBBVlN0cmVh
bURhdGFQYXJzZXJDb250ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXk6IHByb3RvY29s
VmVyc2lvbnNPcHRpb24uZ2V0KCkgfTsKKyAgICAgICAgICAgIG9wdGlvbnMgPSBAeyBBVlN0cmVh
bURhdGFQYXJzZXJDb250ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXk6IGNyZWF0ZU5T
QXJyYXkobV9wcm90b2NvbFZlcnNpb25zLCBbXSAoaW50IHZlcnNpb24pIC0+IE5TTnVtYmVyICog
eworICAgICAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uID8gQCh2ZXJzaW9uKSA6IG5pbDsKKyAg
ICAgICAgICAgIH0pLmdldCgpIH07CiAgICAgICAgIH0KIAogICAgICAgICBOU0Vycm9yKiBlcnJv
ciA9IG5pbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCmluZGV4IGYwMDY5MDhmYzk5NDc2ZTM1MjFj
YjQ0ODRjMGQ4YWM5MDEyMmViNDQuLjA5ZmFjZjI1NTVkMzAyZTMxODQyODE1NjE4YmM3MDkxMzdk
OTVlNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpAQCAtNjcsNiArNjcsMTYgQEAKICNpbXBv
cnQgIldlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCAiV2ViQ29yZUNBTGF5ZXJF
eHRyYXMuaCIKICNpbXBvcnQgIldlYkNvcmVOU1VSTFNlc3Npb24uaCIKKyNpbXBvcnQgPEFWRm91
bmRhdGlvbi9BVkFzc2V0SW1hZ2VHZW5lcmF0b3IuaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9B
VkFzc2V0VHJhY2suaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVk1lZGlhU2VsZWN0aW9uR3Jv
dXAuaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVk1ldGFkYXRhSXRlbS5oPgorI2ltcG9ydCA8
QVZGb3VuZGF0aW9uL0FWUGxheWVyLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJJ
dGVtLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJJdGVtT3V0cHV0Lmg+CisjaW1w
b3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJJdGVtVHJhY2suaD4KKyNpbXBvcnQgPEFWRm91bmRh
dGlvbi9BVlBsYXllckxheWVyLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+CiAj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9EYXRhVmlldy5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSlNDSW5saW5lcy5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KQEAgLTg0LDIzICs5NCwxMyBAQAogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAjaW1wb3J0IDx3dGYvT1NPYmplY3RQdHIuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBv
cnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCiAjaWYgRU5BQkxFKEFWRl9DQVBUSU9OUykKICNpbmNsdWRlICJUZXh0VHJhY2suaCIKICNl
bmRpZgogCi0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldEltYWdlR2VuZXJhdG9yLmg+Ci0j
aW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldFRyYWNrLmg+Ci0jaW1wb3J0IDxBVkZvdW5kYXRp
b24vQVZNZWRpYVNlbGVjdGlvbkdyb3VwLmg+Ci0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZNZXRh
ZGF0YUl0ZW0uaD4KLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlBsYXllci5oPgotI2ltcG9ydCA8
QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbS5oPgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxh
eWVySXRlbU91dHB1dC5oPgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbVRyYWNr
Lmg+Ci0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJMYXllci5oPgotI2ltcG9ydCA8QVZG
b3VuZGF0aW9uL0FWVGltZS5oPgotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQg
IldBS0FwcEtpdFN0dWJzLmgiCiAjaW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUltYWdlLmg+CkBAIC04
MjYsMjMgKzgyNiwxOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OmNyZWF0ZUFWQXNzZXRGb3JVUkwoY29uc3QgVVJMJiB1cmwpCiAgICAgfQogCiAjaWYgRU5BQkxF
KEFWRl9DQVBUSU9OUykKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtVGV4dFRyYWNr
Pj4mIG91dE9mQmFuZFRyYWNrU291cmNlcyA9IHBsYXllcigpLT5vdXRPZkJhbmRUcmFja1NvdXJj
ZXMoKTsKKyAgICBhdXRvIG91dE9mQmFuZFRyYWNrU291cmNlcyA9IHBsYXllcigpLT5vdXRPZkJh
bmRUcmFja1NvdXJjZXMoKTsKICAgICBpZiAoIW91dE9mQmFuZFRyYWNrU291cmNlcy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBvdXRPZkJhbmRUcmFja3Mg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgZm9yIChh
dXRvJiB0cmFja1NvdXJjZSA6IG91dE9mQmFuZFRyYWNrU291cmNlcykgewotICAgICAgICAgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBsYWJlbCA9IHRyYWNrU291cmNlLT5sYWJlbCgpLmNyZWF0
ZUNGU3RyaW5nKCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxhbmd1YWdl
ID0gdHJhY2tTb3VyY2UtPmxhbmd1YWdlKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAgICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdW5pcXVlSUQgPSBTdHJpbmc6Om51bWJlcih0cmFja1Nv
dXJjZS0+dW5pcXVlSWQoKSkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gdXJsID0gdHJhY2tTb3VyY2UtPnVybCgpLmNyZWF0ZUNGU3RyaW5nKCk7
Ci0gICAgICAgICAgICBbb3V0T2ZCYW5kVHJhY2tzLmdldCgpIGFkZE9iamVjdDpAewotICAgICAg
ICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJuYXRlVHJhY2tEaXNwbGF5TmFtZUtleTogKF9fYnJp
ZGdlIE5TU3RyaW5nICopbGFiZWwuZ2V0KCksCi0gICAgICAgICAgICAgICAgQVZPdXRPZkJhbmRB
bHRlcm5hdGVUcmFja0V4dGVuZGVkTGFuZ3VhZ2VUYWdLZXk6IChfX2JyaWRnZSBOU1N0cmluZyAq
KWxhbmd1YWdlLmdldCgpLAorICAgICAgICBhdXRvIG91dE9mQmFuZFRyYWNrcyA9IGNyZWF0ZU5T
QXJyYXkob3V0T2ZCYW5kVHJhY2tTb3VyY2VzLCBbXSAoYXV0byYgdHJhY2tTb3VyY2UpIHsKKyAg
ICAgICAgICAgIHJldHVybiBAeworICAgICAgICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJuYXRl
VHJhY2tEaXNwbGF5TmFtZUtleTogdHJhY2tTb3VyY2UtPmxhYmVsKCksCisgICAgICAgICAgICAg
ICAgQVZPdXRPZkJhbmRBbHRlcm5hdGVUcmFja0V4dGVuZGVkTGFuZ3VhZ2VUYWdLZXk6IHRyYWNr
U291cmNlLT5sYW5ndWFnZSgpLAogICAgICAgICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJuYXRl
VHJhY2tJc0RlZmF1bHRLZXk6IHRyYWNrU291cmNlLT5pc0RlZmF1bHQoKSA/IEBZRVMgOiBATk8s
Ci0gICAgICAgICAgICAgICAgQVZPdXRPZkJhbmRBbHRlcm5hdGVUcmFja0lkZW50aWZpZXJLZXk6
IChfX2JyaWRnZSBOU1N0cmluZyAqKXVuaXF1ZUlELmdldCgpLAotICAgICAgICAgICAgICAgIEFW
T3V0T2ZCYW5kQWx0ZXJuYXRlVHJhY2tTb3VyY2VLZXk6IChfX2JyaWRnZSBOU1N0cmluZyAqKXVy
bC5nZXQoKSwKKyAgICAgICAgICAgICAgICBBVk91dE9mQmFuZEFsdGVybmF0ZVRyYWNrSWRlbnRp
ZmllcktleTogU3RyaW5nOjpudW1iZXIodHJhY2tTb3VyY2UtPnVuaXF1ZUlkKCkpLAorICAgICAg
ICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJuYXRlVHJhY2tTb3VyY2VLZXk6IHRyYWNrU291cmNl
LT51cmwoKSwKICAgICAgICAgICAgICAgICBBVk91dE9mQmFuZEFsdGVybmF0ZVRyYWNrTWVkaWFD
aGFyYWN0ZXJzdGljc0tleTogbWVkaWFEZXNjcmlwdGlvbkZvcktpbmQodHJhY2tTb3VyY2UtPmtp
bmQoKSksCi0gICAgICAgICAgICB9XTsKLSAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAg
ICAgfSk7CiAKICAgICAgICAgW29wdGlvbnMuZ2V0KCkgc2V0T2JqZWN0Om91dE9mQmFuZFRyYWNr
cy5nZXQoKSBmb3JLZXk6QVZVUkxBc3NldE91dE9mQmFuZEFsdGVybmF0ZVRyYWNrc0tleV07CiAg
ICAgfQpAQCAtODU3LDEwICs4NTIsOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JVUkwoY29uc3QgVVJMJiB1cmwpCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBWZWN0b3I8Q29va2llPiBjb29raWVzOwogICAgIGlmIChwbGF5
ZXIoKS0+Z2V0UmF3Q29va2llcyh1cmwsIGNvb2tpZXMpKSB7Ci0gICAgICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gbnNDb29raWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0V2l0aENhcGFjaXR5OmNvb2tpZXMuc2l6ZSgpXSk7Ci0gICAgICAgIGZvciAoYXV0byYg
Y29va2llIDogY29va2llcykKLSAgICAgICAgICAgIFtuc0Nvb2tpZXMgYWRkT2JqZWN0OihOU0hU
VFBDb29raWUgKiljb29raWVdOwotCisgICAgICAgIGF1dG8gbnNDb29raWVzID0gY3JlYXRlTlNB
cnJheShjb29raWVzLCBbXSAoYXV0byYgY29va2llKSAtPiBOU0hUVFBDb29raWUgKiB7CisgICAg
ICAgICAgICByZXR1cm4gY29va2llOworICAgICAgICB9KTsKICAgICAgICAgaWYgKFBBTDo6Y2Fu
TG9hZF9BVkZvdW5kYXRpb25fQVZVUkxBc3NldEhUVFBDb29raWVzS2V5KCkpCiAgICAgICAgICAg
ICBbb3B0aW9ucyBzZXRPYmplY3Q6bnNDb29raWVzLmdldCgpIGZvcktleTpBVlVSTEFzc2V0SFRU
UENvb2tpZXNLZXldOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2Nv
YS5tbQppbmRleCA0ODE2YjAwNGYxNDgxODBmYjkwMTU3OTE5Y2ViZTdiNWVkZGY1NWMwLi44ZmIy
YzEyM2ZiOTgxZWQzZjhiYzliMTg2OTUxMDY1ZjE1YWQzYmE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJUaW1p
bmdGdW5jdGlvbi5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1wb3J0
IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0
b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQ2MiwxMCArNDYzLDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkKICAgICBpZiAoYW5pbWF0
aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGFycmF5
ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnZhbHVlLnNpemUoKV07Ci0gICAg
Zm9yIChhdXRvIG51bWJlciA6IHZhbHVlKQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OkAobnVt
YmVyKV07Ci0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0VmFsdWVzOmFycmF5XTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFu
aW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6Y3JlYXRlTlNBcnJheSh2YWx1
ZSwgW10gKGZsb2F0IG51bWJlcikgeworICAgICAgICByZXR1cm4gQChudW1iZXIpOworICAgIH0p
LmdldCgpXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyhj
b25zdCBWZWN0b3I8VHJhbnNmb3JtYXRpb25NYXRyaXg+JiB2YWx1ZSkKQEAgLTQ3MywxMCArNDcz
LDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyhjb25zdCBWZWN0
b3I8VHJhbnNmb3JtYXRpb25NYXRyaXg+JiB2YWwKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9
IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGFycmF5ID0gW05TTXV0YWJs
ZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnZhbHVlLnNpemUoKV07Ci0gICAgZm9yIChhdXRvJiBt
YXRyaXggOiB2YWx1ZSkKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdp
dGhDQVRyYW5zZm9ybTNEOm1hdHJpeF1dOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5p
bWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczphcnJheV07CisgICAgW3N0YXRp
Y19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVz
OmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChhdXRvJiBtYXRyaXgpIHsKKyAgICAgICAgcmV0dXJu
IFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6bWF0cml4XTsKKyAgICB9KS5nZXQoKV07
CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3QgVmVj
dG9yPEZsb2F0UG9pbnQzRD4mIHZhbHVlKQpAQCAtNDg0LDEwICs0ODMsOSBAQCB2b2lkIFBsYXRm
b3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+
JiB2YWx1ZSkKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFj
aXR5OnZhbHVlLnNpemUoKV07Ci0gICAgZm9yIChhdXRvJiBwb2ludCA6IHZhbHVlKQotICAgICAg
ICBbYXJyYXkgYWRkT2JqZWN0OkBbQChwb2ludC54KCkpLCBAKHBvaW50LnkoKSksIEAocG9pbnQu
eigpKV1dOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRp
b24uZ2V0KCkpIHNldFZhbHVlczphcnJheV07CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVB
bmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFs
dWUsIFtdIChhdXRvJiBwb2ludCkgeworICAgICAgICByZXR1cm4gQFtAKHBvaW50LngoKSksIEAo
cG9pbnQueSgpKSwgQChwb2ludC56KCkpXTsKKyAgICB9KS5nZXQoKV07CiB9CiAKIHZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPENvbG9yPiYgdmFs
dWUpCkBAIC00OTUsMTAgKzQ5Myw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpz
ZXRWYWx1ZXMoY29uc3QgVmVjdG9yPENvbG9yPiYgdmFsdWUpCiAgICAgaWYgKGFuaW1hdGlvblR5
cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhcnJheSA9IFtO
U011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp2YWx1ZS5zaXplKCldOwotICAgIGZvciAo
YXV0byYgY29sb3IgOiB2YWx1ZSkKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpAW0AoY29sb3Iu
cmVkKCkpLCBAKGNvbG9yLmdyZWVuKCkpLCBAKGNvbG9yLmJsdWUoKSksIEAoY29sb3IuYWxwaGEo
KSldXTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9u
LmdldCgpKSBzZXRWYWx1ZXM6YXJyYXldOworICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5p
bWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVhdGVOU0FycmF5KHZhbHVl
LCBbXSAoYXV0byYgY29sb3IpIHsKKyAgICAgICAgcmV0dXJuIEBbQChjb2xvci5yZWQoKSksIEAo
Y29sb3IuZ3JlZW4oKSksIEAoY29sb3IuYmx1ZSgpKSwgQChjb2xvci5hbHBoYSgpKV07CisgICAg
fSkuZ2V0KCldOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVz
KGNvbnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPj4mIHZhbHVlcywgaW50IGludGVy
bmFsRmlsdGVyUHJvcGVydHlJbmRleCkKQEAgLTUwNiwxMCArNTAzLDkgQEAgdm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9w
ZXJhdGlvbj4+JgogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8gYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2Fw
YWNpdHk6dmFsdWVzLnNpemUoKV07Ci0gICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykKLSAg
ICAgICAgW2FycmF5IGFkZE9iamVjdDpQbGF0Zm9ybUNBRmlsdGVyczo6ZmlsdGVyVmFsdWVGb3JP
cGVyYXRpb24odmFsdWUuZ2V0KCksIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkuZ2V0KCld
OwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0
KCkpIHNldFZhbHVlczphcnJheV07CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRp
b24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWVzLCBb
Jl0gKGF1dG8mIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUNBRmlsdGVyczo6Zmls
dGVyVmFsdWVGb3JPcGVyYXRpb24odmFsdWUuZ2V0KCksIGludGVybmFsRmlsdGVyUHJvcGVydHlJ
bmRleCk7CisgICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2Nv
YTo6Y29weVZhbHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCkBAIC01
MjMsMTAgKzUxOSw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjb3B5VmFsdWVz
RnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKIAogdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uQ29jb2E6OnNldEtleVRpbWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlKQog
ewotICAgIGF1dG8gYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dmFs
dWUuc2l6ZSgpXTsKLSAgICBmb3IgKGF1dG8gdGltZSA6IHZhbHVlKQotICAgICAgICBbYXJyYXkg
YWRkT2JqZWN0OkAodGltZSldOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9u
Kj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEtleVRpbWVzOmFycmF5XTsKKyAgICBbc3RhdGljX2Nh
c3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRLZXlUaW1lczpj
cmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoZmxvYXQgdGltZSkgeworICAgICAgICByZXR1cm4gQCh0
aW1lKTsKKyAgICB9KS5nZXQoKV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29h
Ojpjb3B5S2V5VGltZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQpAQCAt
NTM3LDEwICs1MzIsOSBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weUtleVRp
bWVzRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZQogCiB2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYTo6c2V0VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBU
aW1pbmdGdW5jdGlvbio+JiB2YWx1ZSwgYm9vbCByZXZlcnNlKQogewotICAgIGF1dG8gYXJyYXkg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dmFsdWUuc2l6ZSgpXTsKLSAgICBm
b3IgKGF1dG8mIGZ1bmN0aW9uIDogdmFsdWUpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6dG9D
QU1lZGlhVGltaW5nRnVuY3Rpb24oZnVuY3Rpb24sIHJldmVyc2UpXTsKLSAgICBbc3RhdGljX2Nh
c3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUaW1pbmdGdW5j
dGlvbnM6YXJyYXldOworICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9h
bmltYXRpb24uZ2V0KCkpIHNldFRpbWluZ0Z1bmN0aW9uczpjcmVhdGVOU0FycmF5KHZhbHVlLCBb
Jl0gKGF1dG8mIGZ1bmN0aW9uKSB7CisgICAgICAgIHJldHVybiB0b0NBTWVkaWFUaW1pbmdGdW5j
dGlvbihmdW5jdGlvbiwgcmV2ZXJzZSk7CisgICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIFBsYXRm
b3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZv
cm1DQUFuaW1hdGlvbiYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5t
bQppbmRleCAzYzRkY2UyYWIzYjJlMDkzNTRiOGI3NDRlOTEzYzMwNmY2MDc3NmYzLi4wMWM1ZTJk
YTZkOGI0NTg4OWVhNWFlMzFhZjUzMjYzNTkwZGFlNjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3Jt
Q0FGaWx0ZXJzQ29jb2EubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFF1YXJ0ekNvcmUv
UXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CiAj
aW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1Zl
Y3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjIsMjEgKzYzLDIyIEBAIHZvaWQgUGxhdGZv
cm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25z
dCBGaWx0ZXJPcGVyCiAgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIC8vIEFzc3VtZSBmaWx0ZXJzQ2FuQmVDb21wb3Np
dGVkIHdhcyBjYWxsZWQgYW5kIGl0IHJldHVybmVkIHRydWUuCiAgICAgQVNTRVJUKFBsYXRmb3Jt
Q0FMYXllckNvY29hOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGZpbHRlcnMpKTsKLSAgICAKKwog
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIAotICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gYXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRd
KTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIFN0cmluZyBmaWx0ZXJOYW1lID0gbWFrZVN0cmluZygiZmlsdGVyXyIsIGkpOwot
ICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiA9ICpmaWx0ZXJz
LmF0KGkpOworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVOU0Fy
cmF5KGZpbHRlcnMub3BlcmF0aW9ucygpLCBbJl0gKGF1dG8mIG9wZXJhdGlvblB0cikgLT4gaWQg
eworICAgICAgICBTdHJpbmcgZmlsdGVyTmFtZSA9IG1ha2VTdHJpbmcoImZpbHRlcl8iLCBpKysp
OworICAgICAgICBhdXRvJiBmaWx0ZXJPcGVyYXRpb24gPSAqb3BlcmF0aW9uUHRyOwogICAgICAg
ICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi50eXBlKCkpIHsKICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkRFRkFVTFQ6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVO
Q0U6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpOT05FOgogICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewogICAg
ICAgICAgICAgLy8gRklYTUU6IEZvciBub3cgYXNzdW1lIGRyb3Agc2hhZG93IGlzIHRoZSBsYXN0
IGZpbHRlciwgcHV0IGl0IG9uIHRoZSBsYXllci4KICAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJv
YmxlbS8xMDk1OTk2OT4gSGFuZGxlIGNhc2Ugd2hlcmUgZHJvcC1zaGFkb3cgaXMgbm90IHRoZSBs
YXN0IGZpbHRlci4KQEAgLTg1LDcgKzg3LDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0
RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAg
ICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dDb2xvcjpjYWNoZWRDR0NvbG9yKGRyb3BTaGFkb3dP
cGVyYXRpb24uY29sb3IoKSldOwogICAgICAgICAgICAgW2xheWVyIHNldFNoYWRvd1JhZGl1czpk
cm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpXTsKICAgICAgICAgICAgIFtsYXllciBz
ZXRTaGFkb3dPcGFjaXR5OjFdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1
cm4gbmlsOwogICAgICAgICB9CiAjaWYgVVNFX0NBX0ZJTFRFUlMKICAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewpAQCAtOTMsMjQgKzk1LDIxIEBAIHZvaWQgUGxhdGZv
cm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25z
dCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZp
bHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTW9ub2Nocm9tZV07CiAgICAgICAgICAgICBbZmls
dGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Y29sb3JNYXRyaXhPcGVyYXRp
b24uYW1vdW50KCldIGZvcktleTpAImlucHV0QW1vdW50Il07CiAgICAgICAgICAgICBbZmlsdGVy
IHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0
OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7CiAgICAg
ICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FG
aWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKGZpbHRlck9wZXJhdGlvbi50eXBlKCks
ICZmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZp
bHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07CiAgICAgICAgICAgICBb
ZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRDb2xv
ck1hdHJpeCJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAg
ICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewogICAgICAgICAgICAgY29uc3QgYXV0byYgY29s
b3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtD
QUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvclNhdHVyYXRlXTsKICAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xvck1hdHJp
eE9wZXJhdGlvbi5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBbW91bnQiXTsKICAgICAgICAgICAg
IFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBh
ZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJu
IGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JP
VEFURTogewogICAgICAgICAgICAgY29uc3QgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBk
b3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwpAQCAtMTE4LDE2ICsxMTcsMTQgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVy
c09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpkZWcycmFkKGNv
bG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKV0gZm9yS2V5OkAiaW5wdXRBbmdsZSJdOwogICAg
ICAgICAgICAgW2ZpbHRlciBzZXROYW1lOkAiaHVlUm90YXRlIl07CiAgICAgICAgICAgICBbZmls
dGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2Jq
ZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0
ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDogewog
ICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9y
bUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24udHlw
ZSgpLCAmZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBb
Q0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwogICAgICAgICAg
ICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0
Q29sb3JNYXRyaXgiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsK
LSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzoKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkg
dXNlZCBpbiAtYXBwbGUtY29sb3ItZmlsdGVyLgpAQCAtMTM3LDI0ICsxMzQsMjEgQEAgdm9pZCBQ
bGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIs
IGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0
ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwogICAgICAgICAgICAgW2Zp
bHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29sb3JN
YXRyaXgiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAg
ICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewogICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFs
dWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1
ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24udHlwZSgpLCAmZmlsdGVyT3BlcmF0aW9uKTsKICAg
ICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NB
RmlsdGVyQ29sb3JNYXRyaXhdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1h
dHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29sb3JNYXRyaXgiXTsKICAgICAgICAgICAg
IFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBh
ZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJu
IGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6IHsKICAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVlID0g
UGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0
aW9uLnR5cGUoKSwgJmZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDQUZpbHRlciAqZmls
dGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsKICAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JLZXk6
QCJpbnB1dENvbG9yTWF0cml4Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVy
TmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAgICAgICAgICAgIGNvbnN0IGF1
dG8mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJP
cGVyYXRpb24pOwpAQCAtMTY1LDggKzE1OSw3IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNl
dEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAg
ICAgICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpAWUVTIGZvcktleTpAImlucHV0Tm9ybWFs
aXplRWRnZXMiXTsKICNlbmRpZgogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5h
bWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAjZWxz
ZQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7CkBAIC0xNzYsOCAr
MTY5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZv
cm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0
VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91
bnQoKV0gZm9yS2V5OkAiaW5wdXRJbnRlbnNpdHkiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0
VmFsdWU6W0NJQ29sb3IgY29sb3JXaXRoUmVkOjAuNjcgZ3JlZW46MC42NyBibHVlOjAuNjddIGZv
cktleTpAImlucHV0Q29sb3IiXTsgLy8gQ29sb3IgZGVyaXZlZCBlbXBpcmljYWxseSB0byBtYXRj
aCB6ZXJvIHNhdHVyYXRpb24gbGV2ZWxzLgogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZp
bHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewogICAgICAgICAgICAgY29u
c3QgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwpAQCAtMTk3LDggKzE4OSw3IEBAIHZv
aWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxh
eWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICAgICAgWTpXZWJDb3JlOjpibGVuZChz
ZXBpYU5vbmVDb25zdGFudHNbMl1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1syXVsxXSwgdCkKICAg
ICAgICAgICAgICAgICBaOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1syXVsyXSwg
c2VwaWFGdWxsQ29uc3RhbnRzWzJdWzJdLCB0KSBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJd
OwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAg
W2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpTQVRVUkFURTogewogICAgICAgICAgICAgY29uc3QgYXV0byYgY29sb3JNYXRyaXhP
cGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwpAQCAtMjA2LDggKzE5Nyw3IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6
OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVy
CiAgICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKICAgICAgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xvck1hdHJpeE9wZXJhdGlvbi5h
bW91bnQoKV0gZm9yS2V5OkAiaW5wdXRTYXR1cmF0aW9uIl07CiAgICAgICAgICAgICBbZmlsdGVy
IHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0
OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsK
ICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKQEAgLTIx
Niw4ICsyMDYsNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQ
bGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogCiAgICAgICAgICAgICBbZmls
dGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZGVnMnJhZChjb2xvck1hdHJp
eE9wZXJhdGlvbi5hbW91bnQoKSldIGZvcktleTpAImlucHV0QW5nbGUiXTsKICAgICAgICAgICAg
IFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBh
ZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJu
IGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJU
OiB7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7CkBAIC0yMzMsOCArMjIyLDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0
RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6
MCBXOjFdIGZvcktleTpAImlucHV0QVZlY3RvciJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6b3AtPmFtb3VudCgpIFk6b3AtPmFtb3VudCgpIFo6
b3AtPmFtb3VudCgpIFc6MF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CiAgICAgICAgICAg
ICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkg
YWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVy
biBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExF
X0lOVkVSVF9MSUdIVE5FU1M6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
QVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRl
ci4KQEAgLTI1MCw4ICsyMzgsNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJz
T25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogICAgICAgICAg
ICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6Y29t
cG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0QVZlY3RvciJd
OwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZ
OjAgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CiAgICAgICAgICAgICBbZmls
dGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2Jq
ZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0
ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6
IHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0g
ZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKQEAgLTI2Myw4ICsyNTAsNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRG
aWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogICAg
ICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOmFtb3Vu
dCBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKICAgICAgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6YW1vdW50IFc6MF0gZm9yS2V5
OkAiaW5wdXRCVmVjdG9yIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFt
ZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7CiAgICAgICAgICAgICBjb25zdCBh
dXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CkBAIC0yNzIsOCArMjU4
LDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1M
YXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVm
YXVsdHNdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0
aEZsb2F0OmNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1
dENvbnRyYXN0Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0g
ICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93
IHdlIGlnbm9yZSBzdGREZXZpYXRpb25ZLgpAQCAtMjgyLDIxICsyNjcsMTkgQEAgdm9pZCBQbGF0
Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNv
bnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwogICAgICAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmZsb2F0VmFs
dWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCldIGZvcktleTpAImlu
cHV0UmFkaXVzIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0g
ICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICNlbmRpZgogICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UEFTU1RIUk9VR0g6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVCgwKTsKLSAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgfQotICAgIH0KKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfSk7CiAK
LSAgICBpZiAoW2FycmF5LmdldCgpIGNvdW50XSA+IDApCisgICAgaWYgKFthcnJheSBjb3VudF0p
CiAgICAgICAgIFtsYXllciBzZXRGaWx0ZXJzOmFycmF5LmdldCgpXTsKLSAgICAKKwogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2Nv
YS5tbQppbmRleCAzYjEzYTFmM2IyNjVmZjliNDJlNWMyMjJlZjdiNmZhZjgzNGYzNzUwLi40ZGE5
ZmYxM2ZlMWRkMDE1NjU5YmJjMDg3ZWY0NjVkNTQxOTc0ZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9y
bUNBTGF5ZXJDb2NvYS5tbQpAQCAtNTEsNiArNTEsNyBAQAogI2ltcG9ydCA8b2JqYy9ydW50aW1l
Lmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKICNpZiBFTkFC
TEUoV0VCR1BVKQogI2ltcG9ydCAiV2ViR1BVTGF5ZXIuaCIKQEAgLTQ1NiwxMiArNDU3LDkgQEAg
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2V0U3VibGF5ZXJzKGNvbnN0IFBsYXRmb3JtQ0FM
YXllckxpc3QmIGxpc3QpCiAgICAgfQogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
Ci0gICAgTlNNdXRhYmxlQXJyYXkqIHN1YmxheWVycyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7ICsraSkKLSAg
ICAgICAgW3N1YmxheWVycyBhZGRPYmplY3Q6bGlzdFtpXS0+bV9sYXllci5nZXQoKV07Ci0KLSAg
ICBbbV9sYXllciBzZXRTdWJsYXllcnM6c3VibGF5ZXJzXTsKLSAgICBbc3VibGF5ZXJzIHJlbGVh
c2VdOworICAgIFttX2xheWVyIHNldFN1YmxheWVyczpjcmVhdGVOU0FycmF5KGxpc3QsIFtdIChh
dXRvJiBsYXllcikgeworICAgICAgICByZXR1cm4gbGF5ZXItPm1fbGF5ZXI7CisgICAgfSkuZ2V0
KCldOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KaW5kZXggYmFh
MjU1NTA4YzM4MDg2YWM2MGM0ZTEwMjkxYTEzYzczNjE1MWQ0MC4uZDJmMzIyMDA0N2Y2ZjM0MzUz
NTZjOTc4NzUxMDM4ZTZiOGIwZjE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCkBAIC02MTUsMTEgKzYxNSw5IEBAIHN0
YXRpYyBSZXRhaW5QdHI8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3Q+IGNyZWF0
ZUl0ZW1Qcm92aWRlclJlZ2lzdHJhCiAKIGludDY0X3QgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3cml0
ZShjb25zdCBWZWN0b3I8UGFzdGVib2FyZEN1c3RvbURhdGE+JiBpdGVtRGF0YSkKIHsKLSAgICBh
dXRvIHJlZ2lzdHJhdGlvbkxpc3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5Oml0ZW1EYXRhLnNpemUoKV0pOwotICAgIGZvciAoYXV0byYgZGF0YSA6
IGl0ZW1EYXRhKSB7Ci0gICAgICAgIGlmIChhdXRvIGl0ZW1MaXN0ID0gY3JlYXRlSXRlbVByb3Zp
ZGVyUmVnaXN0cmF0aW9uTGlzdChkYXRhKSkKLSAgICAgICAgICAgIFtyZWdpc3RyYXRpb25MaXN0
cyBhZGRPYmplY3Q6aXRlbUxpc3QuZ2V0KCldOwotICAgIH0KKyAgICBhdXRvIHJlZ2lzdHJhdGlv
bkxpc3RzID0gY3JlYXRlTlNBcnJheShpdGVtRGF0YSwgW10gKGF1dG8mIGRhdGEpIHsKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZUl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkxpc3QoZGF0YSk7CisgICAg
fSk7CiAgICAgcmVnaXN0ZXJJdGVtc1RvUGFzdGVib2FyZChyZWdpc3RyYXRpb25MaXN0cy5nZXQo
KSwgbV9wYXN0ZWJvYXJkLmdldCgpKTsKICAgICByZXR1cm4gW21fcGFzdGVib2FyZCBjaGFuZ2VD
b3VudF07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0KaW5kZXggYWE1NTQ5NGUxYWI3NjJiZWY0
MjY5NzlkNWM1NGVkYjhkYTdhMTFjMC4uZmYwMzlhZDliNDI1MWM2M2E4OGI1OWNmNWRjZTg1N2Y1
ZmRiMGViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXliYWNr
U2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbQpAQCAtMzgsNiArMzgsNyBAQAogI2lt
cG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9BVktp
dFNQSS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1Zl
Y3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW1wb3J0IDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMTU1LDIwICsxNTYsMTggQEAgdm9pZCBQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNhblBs
YXlGYXN0UmUKICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldENhblNjYW5CYWNrd2FyZDpjYW5Q
bGF5RmFzdFJldmVyc2VdOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBt
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYg
b3B0aW9ucykKK3N0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRpb25z
KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMpCiB7Ci0gICAgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om9wdGlvbnMuc2l6ZSgpXSk7Ci0gICAgZm9yIChh
dXRvJiBvcHRpb24gOiBvcHRpb25zKSB7Ci0gICAgICAgIFJldGFpblB0cjxXZWJBVk1lZGlhU2Vs
ZWN0aW9uT3B0aW9uPiB3ZWJPcHRpb24gPSBhZG9wdE5TKFtbV2ViQVZNZWRpYVNlbGVjdGlvbk9w
dGlvbiBhbGxvY10gaW5pdF0pOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KG9wdGlvbnMsIFtd
IChhdXRvJiBvcHRpb24pIHsKKyAgICAgICAgYXV0byB3ZWJPcHRpb24gPSBhZG9wdE5TKFtbV2Vi
QVZNZWRpYVNlbGVjdGlvbk9wdGlvbiBhbGxvY10gaW5pdF0pOwogICAgICAgICBbd2ViT3B0aW9u
IHNldExvY2FsaXplZERpc3BsYXlOYW1lOm9wdGlvbi5kaXNwbGF5TmFtZV07Ci0gICAgICAgIFt3
ZWJPcHRpb25zIGFkZE9iamVjdDp3ZWJPcHRpb24uZ2V0KCldOwotICAgIH0KLSAgICByZXR1cm4g
d2ViT3B0aW9uczsKKyAgICAgICAgcmV0dXJuIHdlYk9wdGlvbjsKKyAgICB9KTsKIH0KIAogdm9p
ZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMsIHVp
bnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3
ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOworICAgIGF1dG8gd2Vi
T3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKICAgICBbbV9wbGF5ZXJD
b250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCld
OwogICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQogICAgICAgICBb
bV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uOlt3
ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJ
bmRleCldXTsKQEAgLTE3Niw3ICsxNzUsNyBAQCB2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdAogCiB2
b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKKyAgICBhdXRv
IHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7CiAgICAgW21fcGxh
eWVyQ29udHJvbGxlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMu
Z2V0KCldOwogICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQogICAg
ICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihz
ZWxlY3RlZEluZGV4KV1dOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Q
bGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KaW5kZXggMDc2MjdmMWNiNDI0NzhiZDYzMzE5ZGU2Y2Zi
YTMzZjczNjlkZGExMy4uZmJlYTUzNjFiOWMzZThjMzA3NjhkZTNmYWVlYTM5ZTVhYjljZmQxZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2Fy
ZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJv
YXJkTWFjLm1tCkBAIC01MDYsMTEgKzUwNiwxMCBAQCBpbnQ2NF90IFBsYXRmb3JtUGFzdGVib2Fy
ZDo6d3JpdGUoY29uc3QgVmVjdG9yPFBhc3RlYm9hcmRDdXN0b21EYXRhPiYgaXRlbURhdGEpCiAg
ICAgaWYgKGl0ZW1EYXRhLnNpemUoKSA9PSAxKQogICAgICAgICByZXR1cm4gd3JpdGUoaXRlbURh
dGEuZmlyc3QoKSk7CiAKLSAgICBhdXRvIHBsYXRmb3JtSXRlbXMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6aXRlbURhdGEuc2l6ZSgpXSk7Ci0gICAg
Zm9yIChhdXRvJiBkYXRhIDogaXRlbURhdGEpCi0gICAgICAgIFtwbGF0Zm9ybUl0ZW1zIGFkZE9i
amVjdDpjcmVhdGVQYXN0ZWJvYXJkSXRlbShkYXRhKS5nZXQoKV07CiAgICAgW21fcGFzdGVib2Fy
ZCBjbGVhckNvbnRlbnRzXTsKLSAgICBbbV9wYXN0ZWJvYXJkIHdyaXRlT2JqZWN0czpwbGF0Zm9y
bUl0ZW1zLmdldCgpXTsKKyAgICBbbV9wYXN0ZWJvYXJkIHdyaXRlT2JqZWN0czpjcmVhdGVOU0Fy
cmF5KGl0ZW1EYXRhLCBbXSAoYXV0byYgZGF0YSkgeworICAgICAgICByZXR1cm4gY3JlYXRlUGFz
dGVib2FyZEl0ZW0oZGF0YSk7CisgICAgfSkuZ2V0KCldOwogICAgIHJldHVybiBbbV9wYXN0ZWJv
YXJkIGNoYW5nZUNvdW50XTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCmluZGV4IGNkYjQ2MjRmYmNh
YWJjZmQ0OGYyZDQzOGI1MzgxYTQyYWNjZGEwZjYuLmQ5NjBmYzgwYTg5NWI4Y2Y5MTMzZGFiOTY3
NWJkYzY1ZTA0OWQ5MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9X
ZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNp
bXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgogI2ltcG9ydCAiUGxheWJhY2tT
ZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorI2ltcG9ydCA8d3Rm
L2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJudWxsYWJpbGl0eS1jb21wbGV0ZW5lc3MiKQpAQCAtMjA4
LDE5ICsyMDksMTYgQEAgc3RhdGljIEFWVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvblR5cGUg
dG9BVlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25UeXBlKE0KICAgICByZXR1cm4gQVZUb3Vj
aEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZVJlZ3VsYXI7CiB9CiAKLXN0YXRpYyBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk+IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8TWVk
aWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zKQorc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiBt
ZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYg
b3B0aW9ucykKIHsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6b3B0aW9ucy5z
aXplKCldKTsKLSAgICBmb3IgKGF1dG8mIG9wdGlvbiA6IG9wdGlvbnMpIHsKLSAgICAgICAgaWYg
KGF1dG8gd2ViT3B0aW9uID0gYWRvcHROUyhbYWxsb2NBVlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25P
cHRpb25JbnN0YW5jZSgpIGluaXRXaXRoVGl0bGU6b3B0aW9uLmRpc3BsYXlOYW1lIHR5cGU6dG9B
VlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25UeXBlKG9wdGlvbi50eXBlKV0pKQotICAgICAg
ICAgICAgW3dlYk9wdGlvbnMgYWRkT2JqZWN0OndlYk9wdGlvbi5nZXQoKV07Ci0gICAgfQotICAg
IHJldHVybiB3ZWJPcHRpb25zOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KG9wdGlvbnMsIFtd
IChhdXRvJiBvcHRpb24pIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW2FsbG9jQVZUb3VjaEJh
ck1lZGlhU2VsZWN0aW9uT3B0aW9uSW5zdGFuY2UoKSBpbml0V2l0aFRpdGxlOm9wdGlvbi5kaXNw
bGF5TmFtZSB0eXBlOnRvQVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZShvcHRpb24u
dHlwZSldKTsKKyAgICB9KTsKIH0KIAogLSAodm9pZClzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0
aW9uczooY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYpb3B0aW9ucyB3aXRoU2Vs
ZWN0ZWRJbmRleDooTlNVSW50ZWdlcilzZWxlY3RlZEluZGV4CiB7Ci0gICAgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMp
OworICAgIGF1dG8gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsK
ICAgICBbc2VsZiBzZXRBdWRpb1RvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlv
bnMuZ2V0KCldOwogICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQog
ICAgICAgICBbc2VsZiBzZXRDdXJyZW50QXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9u
Olt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c2VsZWN0ZWRJbmRleF1dOwpAQCAtMjI4LDcgKzIy
Niw3IEBAIC0gKHZvaWQpc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6KGNvbnN0IFZlY3Rv
cjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mKW9wdGlvCiAKIC0gKHZvaWQpc2V0TGVnaWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uczooY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYpb3B0
aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDooTlNVSW50ZWdlcilzZWxlY3RlZEluZGV4CiB7Ci0gICAg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRp
b25zKG9wdGlvbnMpOworICAgIGF1dG8gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9u
cyhvcHRpb25zKTsKICAgICBbc2VsZiBzZXRMZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9w
dGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07CiAgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2ViT3B0
aW9ucyBjb3VudF0pCiAgICAgICAgIFtzZWxmIHNldEN1cnJlbnRMZWdpYmxlVG91Y2hCYXJNZWRp
YVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnNlbGVjdGVkSW5kZXhd
XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0
d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCmluZGV4IGM0YmQ1ZWZiYWNi
YWRhMGNlYTJlODBmYzg1NzE4ZDZhMTY3NmUyZjMuLmU2NzU5MDBlNDEwYjM5ZDI3ZTkwODYyNjZk
ZTUzZTVmZGU0NmMxZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQpA
QCAtMzYsNiArMzYsNyBAQAogI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAjaW1wb3J0IDx3dGYv
UHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL2Nv
Y29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
IEBpbnRlcmZhY2UgTlNVUkwgKCkKQEAgLTY0LDkgKzY1LDkgQEAgdm9pZCBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNvbnN0
IFVSTCYKIHsKICAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmlsZWdl
OjpDYW5BY2Nlc3NSYXdDb29raWVzKSB8fCBtX2lzSW5NZW1vcnlDb29raWVTdG9yZSk7CiAKLSAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG5zQ29va2llcyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb29raWVzLnNpemUoKV0pOwotICAgIGZv
ciAoY29uc3QgYXV0byYgY29va2llIDogY29va2llcykKLSAgICAgICAgW25zQ29va2llcyBhZGRP
YmplY3Q6KE5TSFRUUENvb2tpZSAqKWNvb2tpZV07CisgICAgYXV0byBuc0Nvb2tpZXMgPSBjcmVh
dGVOU0FycmF5KGNvb2tpZXMsIFtdIChhdXRvJiBjb29raWUpIC0+IE5TSFRUUENvb2tpZSAqIHsK
KyAgICAgICAgcmV0dXJuIGNvb2tpZTsKKyAgICB9KTsKIAogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKICAgICBbbnNDb29raWVTdG9yYWdlKCkgc2V0Q29va2llczpuc0Nvb2tpZXMu
Z2V0KCkgZm9yVVJMOihOU1VSTCAqKXVybCBtYWluRG9jdW1lbnRVUkw6KE5TVVJMICopbWFpbkRv
Y3VtZW50VVJMXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL1Jlc291cmNlUmVxdWVzdENvY29hLm1tCmluZGV4IDc2NmVhM2I4MmY1ODVh
ZjE2YWZkYWJlMTJhY2E4NzI4NjI0NDBiZDYuLjY5YjdhNzIyY2U1ZGYxNTdmY2NkYzc5Y2MwOThi
YjU1ZTYxMWUzYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jb2NvYS9SZXNvdXJjZVJlcXVlc3RDb2NvYS5tbQpAQCAtMjAxLDEzICsyMDEs
MTIgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUGxhdGZvcm1SZXF1ZXN0KCkKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGh0dHBIZWFkZXJGaWVsZHMoKSkKICAgICAgICAg
W25zUmVxdWVzdCBzZXRWYWx1ZTpoZWFkZXIudmFsdWUgZm9ySFRUUEhlYWRlckZpZWxkOmhlYWRl
ci5rZXldOwogCi0gICAgTlNNdXRhYmxlQXJyYXkgKmVuY29kaW5nRmFsbGJhY2tzID0gW05TTXV0
YWJsZUFycmF5IGFycmF5XTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVuY29kaW5nTmFtZSA6IG1f
cmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkpIHsKLSAgICAg
ICAgQ0ZTdHJpbmdFbmNvZGluZyBuc0VuY29kaW5nID0gQ0ZTdHJpbmdDb252ZXJ0RW5jb2RpbmdU
b05TU3RyaW5nRW5jb2RpbmcoQ0ZTdHJpbmdDb252ZXJ0SUFOQUNoYXJTZXROYW1lVG9FbmNvZGlu
ZyhlbmNvZGluZ05hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwotICAgICAgICBpZiAobnNF
bmNvZGluZyAhPSBrQ0ZTdHJpbmdFbmNvZGluZ0ludmFsaWRJZCkKLSAgICAgICAgICAgIFtlbmNv
ZGluZ0ZhbGxiYWNrcyBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZExvbmc6
bnNFbmNvZGluZ11dOwotICAgIH0KLSAgICBbbnNSZXF1ZXN0IHNldENvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheTplbmNvZGluZ0ZhbGxiYWNrc107CisgICAgW25zUmVxdWVz
dCBzZXRDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6Y3JlYXRlTlNBcnJh
eShtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LCBbXSAo
YXV0byYgZW5jb2RpbmdOYW1lKSAtPiBOU051bWJlciAqIHsKKyAgICAgICAgYXV0byBlbmNvZGlu
ZyA9IENGU3RyaW5nQ29udmVydEVuY29kaW5nVG9OU1N0cmluZ0VuY29kaW5nKENGU3RyaW5nQ29u
dmVydElBTkFDaGFyU2V0TmFtZVRvRW5jb2RpbmcoZW5jb2RpbmdOYW1lLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCkpKTsKKyAgICAgICAgaWYgKGVuY29kaW5nID09IGtDRlN0cmluZ0VuY29kaW5nSW52
YWxpZElkKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIEAoZW5jb2Rp
bmcpOworICAgIH0pLmdldCgpXTsKIAogICAgIFN0cmluZyBwYXJ0aXRpb24gPSBjYWNoZVBhcnRp
dGlvbigpOwogICAgIGlmICghcGFydGl0aW9uLmlzTnVsbCgpICYmICFwYXJ0aXRpb24uaXNFbXB0
eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29h
L1dlYkNvcmVOU1VSTFNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oCmluZGV4IDZkZjhkNDg3MDI4NzhmMWFjNzllOWYz
MGE5NTU4NGI5MGQyZTFjZGUuLjIyOTRhOWZkOTViYzc1YWY2NGYyNGJiOTFkMjM2MDJkMmU1ZWFi
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2Vi
Q29yZU5TVVJMU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oCkBAIC02Miw3ICs2Miw3IEBAIFdFQkNPUkVfRVhQ
T1JUIEBpbnRlcmZhY2UgV2ViQ29yZU5TVVJMU2Vzc2lvbiA6IE5TT2JqZWN0IHsKICAgICBXZWFr
T2JqQ1B0cjxpZDxOU1VSTFNlc3Npb25EZWxlZ2F0ZT4+IF9kZWxlZ2F0ZTsKICAgICBSZXRhaW5Q
dHI8TlNPcGVyYXRpb25RdWV1ZT4gX3F1ZXVlOwogICAgIFJldGFpblB0cjxOU1N0cmluZz4gX3Nl
c3Npb25EZXNjcmlwdGlvbjsKLSAgICBIYXNoU2V0PFJldGFpblB0cjxDRlR5cGVSZWY+PiBfZGF0
YVRhc2tzOworICAgIEhhc2hTZXQ8UmV0YWluUHRyPFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
az4+IF9kYXRhVGFza3M7CiAgICAgSGFzaFNldDxSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmln
aW4+PiBfb3JpZ2luczsKICAgICBMb2NrIF9kYXRhVGFza3NMb2NrOwogICAgIEJPT0wgX2ludmFs
aWRhdGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2Nv
YS9XZWJDb3JlTlNVUkxTZXNzaW9uLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLm1tCmluZGV4IDQ3MzgwYjE1Y2FhYzYyMjM3ZTBk
NDU4MDMyM2Y3MDMzOGY5ZTg1ZTcuLjc3ODdiNTBkZDIwYTkyMGE2OTViNDQwM2Q2MTU1ZDk2ZGQ1
NmIyOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2Ev
V2ViQ29yZU5TVVJMU2Vzc2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBv
cnQgIlN1YnJlc291cmNlTG9hZGVyLmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBv
cnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNv
Y29hLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC05Miw3ICs5Myw3IEBAIC0g
KHZvaWQpZGVhbGxvYwogICAgIHsKICAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihfZGF0YVRh
c2tzTG9jayk7CiAgICAgICAgIGZvciAoYXV0byYgdGFzayA6IF9kYXRhVGFza3MpCi0gICAgICAg
ICAgICAoKF9fYnJpZGdlIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqKXRhc2suZ2V0KCkp
LnNlc3Npb24gPSBuaWw7CisgICAgICAgICAgICBbdGFzayBzZXRTZXNzaW9uOm5pbF07CiAgICAg
fQogCiAgICAgY2FsbE9uTWFpblRocmVhZChbbG9hZGVyID0gV1RGTW92ZShfbG9hZGVyKV0gewpA
QCAtMTE1LDggKzExNiw4IEBAIC0gKHZvaWQpdGFza0NvbXBsZXRlZDooV2ViQ29yZU5TVVJMU2Vz
c2lvbkRhdGFUYXNrICopdGFzawogICAgIHsKICAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihf
ZGF0YVRhc2tzTG9jayk7CiAKLSAgICAgICAgQVNTRVJUKF9kYXRhVGFza3MuY29udGFpbnMoKF9f
YnJpZGdlIENGVHlwZVJlZil0YXNrKSk7Ci0gICAgICAgIF9kYXRhVGFza3MucmVtb3ZlKChfX2Jy
aWRnZSBDRlR5cGVSZWYpdGFzayk7CisgICAgICAgIEFTU0VSVChfZGF0YVRhc2tzLmNvbnRhaW5z
KHRhc2spKTsKKyAgICAgICAgX2RhdGFUYXNrcy5yZW1vdmUodGFzayk7CiAgICAgICAgIGlmICgh
X2RhdGFUYXNrcy5pc0VtcHR5KCkgfHwgIV9pbnZhbGlkYXRlZCkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0yMTcsNyArMjE4LDcgQEAgLSAodm9pZClmaW5pc2hUYXNrc0FuZEludmFs
aWRhdGUKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZXRhaW5QdHI8V2ViQ29y
ZU5TVVJMU2Vzc2lvbj4gc3Ryb25nU2VsZiB7IHNlbGYgfTsKKyAgICBhdXRvIHN0cm9uZ1NlbGYg
PSByZXRhaW5QdHIoc2VsZik7CiAgICAgW3NlbGYgYWRkRGVsZWdhdGVPcGVyYXRpb246W3N0cm9u
Z1NlbGZdIHsKICAgICAgICAgaWYgKFtzdHJvbmdTZWxmLmdldCgpLmRlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoVVJMU2Vzc2lvbjpkaWRCZWNvbWVJbnZhbGlkV2l0aEVycm9y
OildKQogICAgICAgICAgICAgW3N0cm9uZ1NlbGYuZ2V0KCkuZGVsZWdhdGUgVVJMU2Vzc2lvbjoo
TlNVUkxTZXNzaW9uICopc3Ryb25nU2VsZi5nZXQoKSBkaWRCZWNvbWVJbnZhbGlkV2l0aEVycm9y
Om5pbF07CkBAIC0yMjYsMTQgKzIyNywxNCBAQCAtICh2b2lkKWZpbmlzaFRhc2tzQW5kSW52YWxp
ZGF0ZQogCiAtICh2b2lkKWludmFsaWRhdGVBbmRDYW5jZWwKIHsKLSAgICBWZWN0b3I8UmV0YWlu
UHRyPENGVHlwZVJlZj4+IHRhc2tzQ29weTsKKyAgICBWZWN0b3I8UmV0YWluUHRyPFdlYkNvcmVO
U1VSTFNlc3Npb25EYXRhVGFzaz4+IHRhc2tzQ29weTsKICAgICB7CiAgICAgICAgIExvY2tlcjxM
b2NrPiBsb2NrZXIoX2RhdGFUYXNrc0xvY2spOwogICAgICAgICB0YXNrc0NvcHkgPSBjb3B5VG9W
ZWN0b3IoX2RhdGFUYXNrcyk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiB0YXNrIDogdGFza3ND
b3B5KQotICAgICAgICBbKF9fYnJpZGdlIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqKXRh
c2suZ2V0KCkgY2FuY2VsXTsKKyAgICAgICAgW3Rhc2sgY2FuY2VsXTsKIAogICAgIFtzZWxmIGZp
bmlzaFRhc2tzQW5kSW52YWxpZGF0ZV07CiB9CkBAIC0yNTYsMjkgKzI1NywyOSBAQCAtICh2b2lk
KWZsdXNoV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFu
ZGxlcgogCiAtICh2b2lkKWdldFRhc2tzV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShO
U0FycmF5PE5TVVJMU2Vzc2lvbkRhdGFUYXNrICo+ICpkYXRhVGFza3MsIE5TQXJyYXk8TlNVUkxT
ZXNzaW9uVXBsb2FkVGFzayAqPiAqdXBsb2FkVGFza3MsIE5TQXJyYXk8TlNVUkxTZXNzaW9uRG93
bmxvYWRUYXNrICo+ICpkb3dubG9hZFRhc2tzKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIE5T
TXV0YWJsZUFycmF5ICphcnJheSA9IG51bGxwdHI7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IGFy
cmF5OwogICAgIHsKICAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihfZGF0YVRhc2tzTG9jayk7
Ci0gICAgICAgIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Ol9kYXRh
VGFza3Muc2l6ZSgpXTsKLSAgICAgICAgZm9yIChhdXRvJiB0YXNrIDogX2RhdGFUYXNrcykKLSAg
ICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6KF9fYnJpZGdlIFdlYkNvcmVOU1VSTFNlc3Npb25E
YXRhVGFzayAqKXRhc2suZ2V0KCldOworICAgICAgICBhcnJheSA9IGNyZWF0ZU5TQXJyYXkoX2Rh
dGFUYXNrcywgW10gKGF1dG8mIHRhc2spIHsKKyAgICAgICAgICAgIHJldHVybiB0YXNrLmdldCgp
OworICAgICAgICB9KTsKICAgICB9CiAgICAgW3NlbGYgYWRkRGVsZWdhdGVPcGVyYXRpb246XnsK
LSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoYXJyYXksIG5pbCwgbmlsKTsKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoYXJyYXkuZ2V0KCksIG5pbCwgbmlsKTsKICAgICB9XTsKIH0KIAogLSAo
dm9pZClnZXRBbGxUYXNrc1dpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheTxf
X2tpbmRvZiBOU1VSTFNlc3Npb25UYXNrICo+ICp0YXNrcykpY29tcGxldGlvbkhhbmRsZXIKIHsK
LSAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBudWxscHRyOworICAgIFJldGFpblB0cjxOU0Fy
cmF5PiBhcnJheTsKICAgICB7CiAgICAgICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoX2RhdGFUYXNr
c0xvY2spOwotICAgICAgICBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0
eTpfZGF0YVRhc2tzLnNpemUoKV07Ci0gICAgICAgIGZvciAoYXV0byYgdGFzayA6IF9kYXRhVGFz
a3MpCi0gICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OihfX2JyaWRnZSBXZWJDb3JlTlNVUkxT
ZXNzaW9uRGF0YVRhc2sgKil0YXNrLmdldCgpXTsKKyAgICAgICAgYXJyYXkgPSBjcmVhdGVOU0Fy
cmF5KF9kYXRhVGFza3MsIFtdIChhdXRvJiB0YXNrKSB7CisgICAgICAgICAgICByZXR1cm4gdGFz
ay5nZXQoKTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIFtzZWxmIGFkZERlbGVnYXRlT3BlcmF0
aW9uOl57Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGFycmF5KTsKKyAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoYXJyYXkuZ2V0KCkpOwogICAgIH1dOwogfQogCkBAIC0yOTAsNyArMjkxLDcg
QEAgLSAoTlNVUkxTZXNzaW9uRGF0YVRhc2sgKilkYXRhVGFza1dpdGhSZXF1ZXN0OihOU1VSTFJl
cXVlc3QgKilyZXF1ZXN0CiAgICAgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICp0YXNrID0g
W1tXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgYWxsb2NdIGluaXRXaXRoU2Vzc2lvbjpzZWxm
IGlkZW50aWZpZXI6X25leHRUYXNrSWRlbnRpZmllcisrIHJlcXVlc3Q6cmVxdWVzdF07CiAgICAg
ewogICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2NrKTsKLSAgICAgICAg
X2RhdGFUYXNrcy5hZGQoKF9fYnJpZGdlIENGVHlwZVJlZil0YXNrKTsKKyAgICAgICAgX2RhdGFU
YXNrcy5hZGQodGFzayk7CiAgICAgfQogICAgIHJldHVybiAoTlNVUkxTZXNzaW9uRGF0YVRhc2sg
KilbdGFzayBhdXRvcmVsZWFzZV07CiB9CkBAIC0zMDMsNyArMzA0LDcgQEAgLSAoTlNVUkxTZXNz
aW9uRGF0YVRhc2sgKilkYXRhVGFza1dpdGhVUkw6KE5TVVJMICopdXJsCiAgICAgV2ViQ29yZU5T
VVJMU2Vzc2lvbkRhdGFUYXNrICp0YXNrID0gW1tXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sg
YWxsb2NdIGluaXRXaXRoU2Vzc2lvbjpzZWxmIGlkZW50aWZpZXI6X25leHRUYXNrSWRlbnRpZmll
cisrIFVSTDp1cmxdOwogICAgIHsKICAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihfZGF0YVRh
c2tzTG9jayk7Ci0gICAgICAgIF9kYXRhVGFza3MuYWRkKChfX2JyaWRnZSBDRlR5cGVSZWYpdGFz
ayk7CisgICAgICAgIF9kYXRhVGFza3MuYWRkKHRhc2spOwogICAgIH0KICAgICByZXR1cm4gKE5T
VVJMU2Vzc2lvbkRhdGFUYXNrICopW3Rhc2sgYXV0b3JlbGVhc2VdOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9jb2NvYS9QYXltZW50QXV0aG9yaXphdGlvblByZXNlbnRl
ci5tbSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY29jb2EvUGF5bWVudEF1dGhvcml6YXRpb25Q
cmVzZW50ZXIubW0KaW5kZXggMjZiNDdiYWNiYjg1YWUxZGNlODRkYzY4NDBkYjI2ZTJkNzQ1OWU3
ZS4uNmI1NWU5ZjZlMjBjZGM4NWVlZGZjMDkwNDNjODk4YjIyM2U3NTVmNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9jb2NvYS9QYXltZW50QXV0aG9yaXphdGlvblByZXNlbnRl
ci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NvY29hL1BheW1lbnRBdXRob3JpemF0
aW9uUHJlc2VudGVyLm1tCkBAIC0zNCw2ICszNCw4IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BheW1l
bnRNZXJjaGFudFNlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvUGF5bWVudE1ldGhvZFVwZGF0
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYXltZW50U3VtbWFyeUl0ZW1zLmg+CisjaW1wb3J0IDx3
dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KKwogI2ltcG9ydCA8cGFsL2NvY29hL1Bhc3NLaXRTb2Z0
TGluay5oPgogCiBTT0ZUX0xJTktfRlJBTUVXT1JLKENvbnRhY3RzKTsKQEAgLTE2MCwyMiArMTYy
LDE4IEBAIHN0YXRpYyBOU0Vycm9yICp0b05TRXJyb3IoY29uc3QgV2ViQ29yZTo6UGF5bWVudEVy
cm9yJiBlcnJvcikKICAgICByZXR1cm4gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOlBBTDo6Z2V0
X1Bhc3NLaXRfUEtQYXltZW50RXJyb3JEb21haW4oKSBjb2RlOnRvUEtQYXltZW50RXJyb3JDb2Rl
KGVycm9yLmNvZGUpIHVzZXJJbmZvOnVzZXJJbmZvLmdldCgpXTsKIH0KIAotc3RhdGljIE5TQXJy
YXkgKnRvTlNFcnJvcnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlBheW1lbnRFcnJvcj4mIGVycm9y
cykKK3N0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gdG9OU0Vycm9ycyhjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6UGF5bWVudEVycm9yPiYgZXJyb3JzKQogewotICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1
bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6ZXJyb3JzLnNpemUoKV07Ci0g
ICAgZm9yIChjb25zdCBhdXRvJiBlcnJvciA6IGVycm9ycykgewotICAgICAgICBpZiAoTlNFcnJv
ciAqbnNFcnJvciA9IHRvTlNFcnJvcihlcnJvcikpCi0gICAgICAgICAgICBbcmVzdWx0IGFkZE9i
amVjdDpuc0Vycm9yXTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY3Jl
YXRlTlNBcnJheShlcnJvcnMsIFtdIChhdXRvJiBlcnJvcikgeworICAgICAgICByZXR1cm4gdG9O
U0Vycm9yKGVycm9yKTsKKyAgICB9KTsKIH0KIAotc3RhdGljIE5TQXJyYXkgKnRvUEtTaGlwcGlu
Z01ldGhvZHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1
ZXN0OjpTaGlwcGluZ01ldGhvZD4mIHNoaXBwaW5nTWV0aG9kcykKK3N0YXRpYyBSZXRhaW5QdHI8
TlNBcnJheT4gdG9QS1NoaXBwaW5nTWV0aG9kcyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6QXBwbGVQ
YXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5nTWV0aG9kPiYgc2hpcHBpbmdNZXRob2Rz
KQogewotICAgIE5TTXV0YWJsZUFycmF5ICpwa1NoaXBwaW5nTWV0aG9kcyA9IFtOU011dGFibGVB
cnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaGlwcGluZ01ldGhvZHMuc2l6ZSgpXTsKLSAgICBmb3Ig
KGF1dG8mIHNoaXBwaW5nTWV0aG9kIDogc2hpcHBpbmdNZXRob2RzKQotICAgICAgICBbcGtTaGlw
cGluZ01ldGhvZHMgYWRkT2JqZWN0OnRvUEtTaGlwcGluZ01ldGhvZChzaGlwcGluZ01ldGhvZCld
OwotICAgIHJldHVybiBwa1NoaXBwaW5nTWV0aG9kczsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJh
eShzaGlwcGluZ01ldGhvZHMsIFtdIChhdXRvJiBzaGlwcGluZ01ldGhvZCkgeworICAgICAgICBy
ZXR1cm4gdG9QS1NoaXBwaW5nTWV0aG9kKHNoaXBwaW5nTWV0aG9kKTsKKyAgICB9KTsKIH0KIAog
dm9pZCBQYXltZW50QXV0aG9yaXphdGlvblByZXNlbnRlcjo6Y29tcGxldGVNZXJjaGFudFZhbGlk
YXRpb24oY29uc3QgV2ViQ29yZTo6UGF5bWVudE1lcmNoYW50U2Vzc2lvbiYgbWVyY2hhbnRTZXNz
aW9uKQpAQCAtMTk5LDggKzE5Nyw4IEBAIHZvaWQgUGF5bWVudEF1dGhvcml6YXRpb25QcmVzZW50
ZXI6OmNvbXBsZXRlUGF5bWVudFNlc3Npb24oY29uc3QgT3B0aW9uYWw8V2ViQ29yCiB7CiAgICAg
QVNTRVJUKHBsYXRmb3JtRGVsZWdhdGUoKSk7CiAgICAgYXV0byBzdGF0dXMgPSByZXN1bHQgPyB0
b1BLUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXMocmVzdWx0LT5zdGF0dXMpIDogUEtQYXltZW50
QXV0aG9yaXphdGlvblN0YXR1c1N1Y2Nlc3M7Ci0gICAgTlNBcnJheSAqZXJyb3JzID0gcmVzdWx0
ID8gdG9OU0Vycm9ycyhyZXN1bHQtPmVycm9ycykgOiBAWyBdOwotICAgIFtwbGF0Zm9ybURlbGVn
YXRlKCkgY29tcGxldGVQYXltZW50U2Vzc2lvbjpzdGF0dXMgZXJyb3JzOmVycm9ycyBkaWRSZWFj
aEZpbmFsU3RhdGU6V2ViQ29yZTo6aXNGaW5hbFN0YXRlUmVzdWx0KHJlc3VsdCldOworICAgIFJl
dGFpblB0cjxOU0FycmF5PiBlcnJvcnMgPSByZXN1bHQgPyB0b05TRXJyb3JzKHJlc3VsdC0+ZXJy
b3JzKSA6IEBbIF07CisgICAgW3BsYXRmb3JtRGVsZWdhdGUoKSBjb21wbGV0ZVBheW1lbnRTZXNz
aW9uOnN0YXR1cyBlcnJvcnM6ZXJyb3JzLmdldCgpIGRpZFJlYWNoRmluYWxTdGF0ZTpXZWJDb3Jl
Ojppc0ZpbmFsU3RhdGVSZXN1bHQocmVzdWx0KV07CiB9CiAKIHZvaWQgUGF5bWVudEF1dGhvcml6
YXRpb25QcmVzZW50ZXI6OmNvbXBsZXRlU2hpcHBpbmdDb250YWN0U2VsZWN0aW9uKGNvbnN0IE9w
dGlvbmFsPFdlYkNvcmU6OlNoaXBwaW5nQ29udGFjdFVwZGF0ZT4mIHVwZGF0ZSkKQEAgLTIxMiw3
ICsyMTAsNyBAQCB2b2lkIFBheW1lbnRBdXRob3JpemF0aW9uUHJlc2VudGVyOjpjb21wbGV0ZVNo
aXBwaW5nQ29udGFjdFNlbGVjdGlvbihjb25zdCBPcHRpbwogICAgIH0KIAogICAgIC8vIEZJWE1F
OiBXZWJDb3JlOjpTaGlwcGluZ0NvbnRhY3RVcGRhdGUgc2hvdWxkIGtub3cgaG93IHRvIGNvbnZl
cnQgaXRzZWxmIHRvIGEgUEtQYXltZW50UmVxdWVzdFNoaXBwaW5nQ29udGFjdFVwZGF0ZS4KLSAg
ICBhdXRvIHNoaXBwaW5nQ29udGFjdFVwZGF0ZSA9IGFkb3B0TlMoW1BBTDo6YWxsb2NQS1BheW1l
bnRSZXF1ZXN0U2hpcHBpbmdDb250YWN0VXBkYXRlSW5zdGFuY2UoKSBpbml0V2l0aEVycm9yczp0
b05TRXJyb3JzKHVwZGF0ZS0+ZXJyb3JzKSBwYXltZW50U3VtbWFyeUl0ZW1zOldlYkNvcmU6OnBs
YXRmb3JtU3VtbWFyeUl0ZW1zKHVwZGF0ZS0+bmV3VG90YWxBbmRMaW5lSXRlbXMpIHNoaXBwaW5n
TWV0aG9kczp0b1BLU2hpcHBpbmdNZXRob2RzKHVwZGF0ZS0+bmV3U2hpcHBpbmdNZXRob2RzKV0p
OworICAgIGF1dG8gc2hpcHBpbmdDb250YWN0VXBkYXRlID0gYWRvcHROUyhbUEFMOjphbGxvY1BL
UGF5bWVudFJlcXVlc3RTaGlwcGluZ0NvbnRhY3RVcGRhdGVJbnN0YW5jZSgpIGluaXRXaXRoRXJy
b3JzOnRvTlNFcnJvcnModXBkYXRlLT5lcnJvcnMpLmdldCgpIHBheW1lbnRTdW1tYXJ5SXRlbXM6
V2ViQ29yZTo6cGxhdGZvcm1TdW1tYXJ5SXRlbXModXBkYXRlLT5uZXdUb3RhbEFuZExpbmVJdGVt
cykgc2hpcHBpbmdNZXRob2RzOnRvUEtTaGlwcGluZ01ldGhvZHModXBkYXRlLT5uZXdTaGlwcGlu
Z01ldGhvZHMpLmdldCgpXSk7CiAgICAgW3BsYXRmb3JtRGVsZWdhdGUoKSBjb21wbGV0ZVNoaXBw
aW5nQ29udGFjdFNlbGVjdGlvbjpzaGlwcGluZ0NvbnRhY3RVcGRhdGUuZ2V0KCldOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBheS9jb2NvYS9XZWJQYXltZW50
Q29vcmRpbmF0b3JQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkv
Y29jb2EvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5tbQppbmRleCAzMTMwODg2NjUy
NWY2MThiOGY2MThhNmQ1NzlkYjg3MzYwNzAwZTg3Li5lZDY2MDliODc1ZmIzMWY1NDhjZjM2ODkx
MzFhYWVmOWI1ZmQ5YTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBh
eS9jb2NvYS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0FwcGxlUGF5L2NvY29hL1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5Q29j
b2EubW0KQEAgLTE4NywxNSArMTg3LDcgQEAgUmV0YWluUHRyPFBLUGF5bWVudFJlcXVlc3Q+IFdl
YlBheW1lbnRDb29yZGluYXRvclByb3h5OjpwbGF0Zm9ybVBheW1lbnRSZXF1ZXN0KGMKIAogICAg
IFtyZXN1bHQgc2V0T3JpZ2luYXRpbmdVUkw6b3JpZ2luYXRpbmdVUkxdOwogCi0gICAgLy8gRklY
TUU6IFdlIGRvbid0IHN1cHBvcnQgYW55IHBsYXRmb3JtcyB3aXRob3V0IC1zZXRUaHVtYm5haWxV
UkxzOiwgc28gdGhpcyBjYW4gYmUgc2ltcGxpZmllZC4KLSAgICBpZiAoW3Jlc3VsdCByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldFRodW1ibmFpbFVSTHM6KV0pIHsKLSAgICAgICAgYXV0
byB0aHVtYm5haWxVUkxzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7
Ci0gICAgICAgIGZvciAoYXV0byYgbGlua0ljb25VUkwgOiBsaW5rSWNvblVSTHMpCi0gICAgICAg
ICAgICBbdGh1bWJuYWlsVVJMcyBhZGRPYmplY3Q6c3RhdGljX2Nhc3Q8TlNVUkwgKj4obGlua0lj
b25VUkwpXTsKLQotICAgICAgICBbcmVzdWx0IHNldFRodW1ibmFpbFVSTHM6dGh1bWJuYWlsVVJM
cy5nZXQoKV07Ci0gICAgfSBlbHNlIGlmICghbGlua0ljb25VUkxzLmlzRW1wdHkoKSkKLSAgICAg
ICAgW3Jlc3VsdCBzZXRUaHVtYm5haWxVUkw6bGlua0ljb25VUkxzWzBdXTsKKyAgICBbcmVzdWx0
IHNldFRodW1ibmFpbFVSTHM6Y3JlYXRlTlNBcnJheShsaW5rSWNvblVSTHMpLmdldCgpXTsKIAog
ICAgIFtyZXN1bHQgc2V0QVBJVHlwZTp0b0FQSVR5cGUocGF5bWVudFJlcXVlc3QucmVxdWVzdGVy
KCkpXTsKIApAQCAtMjExLDEwICsyMDMsOSBAQCBSZXRhaW5QdHI8UEtQYXltZW50UmVxdWVzdD4g
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHk6OnBsYXRmb3JtUGF5bWVudFJlcXVlc3QoYwogCiAg
ICAgW3Jlc3VsdCBzZXRTaGlwcGluZ1R5cGU6dG9QS1NoaXBwaW5nVHlwZShwYXltZW50UmVxdWVz
dC5zaGlwcGluZ1R5cGUoKSldOwogCi0gICAgYXV0byBzaGlwcGluZ01ldGhvZHMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICBmb3IgKGF1dG8mIHNoaXBwaW5n
TWV0aG9kIDogcGF5bWVudFJlcXVlc3Quc2hpcHBpbmdNZXRob2RzKCkpCi0gICAgICAgIFtzaGlw
cGluZ01ldGhvZHMgYWRkT2JqZWN0OnRvUEtTaGlwcGluZ01ldGhvZChzaGlwcGluZ01ldGhvZCld
OwotICAgIFtyZXN1bHQgc2V0U2hpcHBpbmdNZXRob2RzOnNoaXBwaW5nTWV0aG9kcy5nZXQoKV07
CisgICAgW3Jlc3VsdCBzZXRTaGlwcGluZ01ldGhvZHM6Y3JlYXRlTlNBcnJheShwYXltZW50UmVx
dWVzdC5zaGlwcGluZ01ldGhvZHMoKSwgW10gKGF1dG8mIHNoaXBwaW5nTWV0aG9kKSB7CisgICAg
ICAgIHJldHVybiB0b1BLU2hpcHBpbmdNZXRob2Qoc2hpcHBpbmdNZXRob2QpOworICAgIH0pLmdl
dCgpXTsKIAogICAgIFtyZXN1bHQgc2V0UGF5bWVudFN1bW1hcnlJdGVtczpXZWJDb3JlOjpwbGF0
Zm9ybVN1bW1hcnlJdGVtcyhwYXltZW50UmVxdWVzdC50b3RhbCgpLCBwYXltZW50UmVxdWVzdC5s
aW5lSXRlbXMoKSldOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVM
YXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5t
bQppbmRleCBlNDcwMzVjY2ExZTdhODg5MmQxZDkwZWI4YjIxNTIzY2UxNGRhNDFlLi40MzU4ODU3
ODQwZmViNjcyZDk1ZjUxNzZmYTUyOGZlMGJkMGQyNGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVy
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
clRyZWVQcm9wZXJ0eUFwcGxpZXIubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdlYkNv
cmUvU2Nyb2xsYmFyVGhlbWVNYWMuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29y
ZVNQSS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0
Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBv
cnQgPFVJS2l0L1VJVmlldy5oPgpAQCAtMzEzLDM1ICszMTQsMjggQEAgdm9pZCBSZW1vdGVMYXll
clRyZWVQcm9wZXJ0eUFwcGxpZXI6OnVwZGF0ZUNoaWxkcmVuKFJlbW90ZUxheWVyVHJlZU5vZGUm
IG5vZGUsIGMKIAogICAgIGlmIChoYXNWaWV3Q2hpbGRyZW4oKSkgewogICAgICAgICBBU1NFUlQo
bm9kZS51aVZpZXcoKSk7Ci0KLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBzdWJ2
aWV3cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpw
cm9wZXJ0aWVzLmNoaWxkcmVuLnNpemUoKV0pOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDog
cHJvcGVydGllcy5jaGlsZHJlbikgeworICAgICAgICBbY29udGVudFZpZXcoKSBfd2ViX3NldFN1
YnZpZXdzOmNyZWF0ZU5TQXJyYXkocHJvcGVydGllcy5jaGlsZHJlbiwgWyZdIChhdXRvJiBjaGls
ZCkgLT4gVUlWaWV3ICogewogICAgICAgICAgICAgYXV0byogY2hpbGROb2RlID0gcmVsYXRlZExh
eWVycy5nZXQoY2hpbGQpOwogICAgICAgICAgICAgQVNTRVJUKGNoaWxkTm9kZSk7CiAgICAgICAg
ICAgICBpZiAoIWNoaWxkTm9kZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgQVNTRVJUKGNoaWxkTm9kZS0+dWlWaWV3
KCkpOwotICAgICAgICAgICAgW3N1YnZpZXdzIGFkZE9iamVjdDpjaGlsZE5vZGUtPnVpVmlldygp
XTsKLSAgICAgICAgfQotCi0gICAgICAgIFtjb250ZW50VmlldygpIF93ZWJfc2V0U3Vidmlld3M6
c3Vidmlld3MuZ2V0KCldOworICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS0+dWlWaWV3KCk7
CisgICAgICAgIH0pLmdldCgpXTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0g
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBzdWJsYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cHJvcGVydGllcy5jaGlsZHJlbi5zaXpl
KCldKTsKLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogcHJvcGVydGllcy5jaGlsZHJlbikgeworICAg
IG5vZGUubGF5ZXIoKS5zdWJsYXllcnMgPSBjcmVhdGVOU0FycmF5KHByb3BlcnRpZXMuY2hpbGRy
ZW4sIFsmXSAoYXV0byYgY2hpbGQpIC0+IENBTGF5ZXIgKiB7CiAgICAgICAgIGF1dG8qIGNoaWxk
Tm9kZSA9IHJlbGF0ZWRMYXllcnMuZ2V0KGNoaWxkKTsKICAgICAgICAgQVNTRVJUKGNoaWxkTm9k
ZSk7CiAgICAgICAgIGlmICghY2hpbGROb2RlKQotICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICByZXR1cm4gbmlsOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIEFT
U0VSVCghY2hpbGROb2RlLT51aVZpZXcoKSk7CiAjZW5kaWYKLSAgICAgICAgW3N1YmxheWVycyBh
ZGRPYmplY3Q6Y2hpbGROb2RlLT5sYXllcigpXTsKLSAgICB9Ci0KLSAgICBub2RlLmxheWVyKCku
c3VibGF5ZXJzID0gc3VibGF5ZXJzLmdldCgpOworICAgICAgICByZXR1cm4gY2hpbGROb2RlLT5s
YXllcigpOworICAgIH0pLmdldCgpOwogfQogCiB2b2lkIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5
QXBwbGllcjo6dXBkYXRlTWFzayhSZW1vdGVMYXllclRyZWVOb2RlJiBub2RlLCBjb25zdCBSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBjb25z
dCBSZWxhdGVkTGF5ZXJNYXAmIHJlbGF0ZWRMYXllcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KaW5kZXggMDg0Y2Zh
ZTQ3MmVlNzc5YzViY2E2YTFlYjI4OTczNTE2MGE3YzRhZS4uMDIzYTUyM2ZiMjY2YTY4MzczN2Vi
Mjc0ZWI5ODdkOWEzOGZjMDk5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQpAQCAtMzQsMTUgKzM0LDEzIEBACiAj
aW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3
dGYvV2Vha09iakNQdHIuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiBz
dGF0aWMgTlNBcnJheTxOU0hUVFBDb29raWUgKj4gKmNvcmVDb29raWVzVG9OU0Nvb2tpZXMoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4mIGNvcmVDb29raWVzKQogewotICAgIE5TTXV0YWJs
ZUFycmF5PE5TSFRUUENvb2tpZSAqPiAqbnNDb29raWVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5
V2l0aENhcGFjaXR5OmNvcmVDb29raWVzLnNpemUoKV07Ci0KLSAgICBmb3IgKGF1dG8mIGNvb2tp
ZSA6IGNvcmVDb29raWVzKQotICAgICAgICBbbnNDb29raWVzIGFkZE9iamVjdDooTlNIVFRQQ29v
a2llICopY29va2llXTsKLQotICAgIHJldHVybiBuc0Nvb2tpZXM7CisgICAgcmV0dXJuIGNyZWF0
ZU5TQXJyYXkoY29yZUNvb2tpZXMsIFtdIChhdXRvJiBjb29raWUpIC0+IE5TSFRUUENvb2tpZSAq
IHsKKyAgICAgICAgcmV0dXJuIGNvb2tpZTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiBj
bGFzcyBXS0hUVFBDb29raWVTdG9yZU9ic2VydmVyIDogcHVibGljIEFQSTo6SFRUUENvb2tpZVN0
b3JlOjpPYnNlcnZlciB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1Byb2Nlc3NQb29sLm1tCmluZGV4IGY1ZWFjZWUwZThjZTNiMzE0OTM0NTQxMGY5YTI2MWQ1
MjdlMzkxMTguLjQyZDQ1NmEyMWNiOTZiYzM0YzhjYzU5OTdhMWIzMTdmOTRiMjk1ZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1t
CkBAIC0xNjQsMTEgKzE2NCw5IEBAICsgKFdLUHJvY2Vzc1Bvb2wgKilfc2hhcmVkUHJvY2Vzc1Bv
b2wKIAogKyAoTlNBcnJheTxXS1Byb2Nlc3NQb29sICo+ICopX2FsbFByb2Nlc3NQb29sc0ZvclRl
c3RpbmcKIHsKLSAgICBhdXRvJiBhbGxQb29scyA9IFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFs
bFByb2Nlc3NQb29scygpOwotICAgIGF1dG8gbnNBbGxQb29scyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTphbGxQb29scy5zaXplKCldKTsKLSAgICBm
b3IgKGF1dG8qIHBvb2wgOiBhbGxQb29scykKLSAgICAgICAgW25zQWxsUG9vbHMgYWRkT2JqZWN0
OndyYXBwZXIoKnBvb2wpXTsKLSAgICByZXR1cm4gbnNBbGxQb29scy5hdXRvcmVsZWFzZSgpOwor
ICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nl
c3NQb29scygpLCBbXSAoYXV0byYgcG9vbCkgeworICAgICAgICByZXR1cm4gd3JhcHBlcigqcG9v
bCk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogKyAoTlNVUkwgKilfd2Vic2l0ZURhdGFV
UkxGb3JDb250YWluZXJXaXRoVVJMOihOU1VSTCAqKWNvbnRhaW5lclVSTApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggMDAzNDE1OGJhMjFm
ZjNhODEwN2ZjZTdkMDdmOGIwNjFkOWI0MjY2Mi4uNTNmYmIyZTkxNDhlZjQ5Mzk0ZmNiNzM4MmJk
NDEyNDhhMzNiZDBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tCkBAIC0xNjc0LDM3ICsxNjc0LDIzIEBAIC0gKHZvaWQpX3N0YXJ0VGV4dE1h
bmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3Vy
YXRpCiAgICAgICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgaWYgKCFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpk
aWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW1zOildKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IGl0ZW0gOiBpdGVtUmVmZXJlbmNlcykgewotICAgICAgICAgICAgICAgIE5TTXV0YWJsZUFycmF5
ICp3a1Rva2VucyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTppdGVtLnRva2Vu
cy5zaXplKCldOwotICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdG9rZW4gOiBpdGVtLnRva2Vu
cykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIHdrVG9rZW4gPSBhZG9wdE5TKFtbX1dLVGV4
dE1hbmlwdWxhdGlvblRva2VuIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgICAgICAgICAgICAgIFt3
a1Rva2VuIHNldElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIodG9rZW4uaWRlbnRpZmllci50b1VJ
bnQ2NCgpKV07Ci0gICAgICAgICAgICAgICAgICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6dG9rZW4u
Y29udGVudF07Ci0gICAgICAgICAgICAgICAgICAgIFt3a1Rva2VuIHNldEV4Y2x1ZGVkOnRva2Vu
LmlzRXhjbHVkZWRdOwotICAgICAgICAgICAgICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0Ondr
VG9rZW4uZ2V0KCldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhdXRvIHdr
SXRlbSA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSBhbGxvY10gaW5pdFdpdGhJ
ZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKGl0ZW0uaWRlbnRpZmllci50b1VJbnQ2NCgpKSB0b2tl
bnM6d2tUb2tlbnNdKTsKLSAgICAgICAgICAgICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6cmV0YWlu
ZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTp3a0l0ZW0uZ2V0KCldOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
TlNNdXRhYmxlQXJyYXkgKndrSXRlbXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNp
dHk6aXRlbVJlZmVyZW5jZXMuc2l6ZSgpXTsKLSAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRl
bVJlZmVyZW5jZXMpIHsKLSAgICAgICAgICAgIE5TTXV0YWJsZUFycmF5ICp3a1Rva2VucyA9IFtO
U011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTppdGVtLnRva2Vucy5zaXplKCldOwotICAg
ICAgICAgICAgZm9yIChhdXRvJiB0b2tlbiA6IGl0ZW0udG9rZW5zKSB7CisgICAgICAgIGF1dG8g
Y3JlYXRlV0tJdGVtID0gW10gKGNvbnN0IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpNYW5pcHVsYXRpb25JdGVtJiBpdGVtKSB7CisgICAgICAgICAgICBhdXRvIHRva2VucyA9
IGNyZWF0ZU5TQXJyYXkoaXRlbS50b2tlbnMsIFtdIChhdXRvJiB0b2tlbikgewogICAgICAgICAg
ICAgICAgIGF1dG8gd2tUb2tlbiA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4g
YWxsb2NdIGluaXRdKTsKICAgICAgICAgICAgICAgICBbd2tUb2tlbiBzZXRJZGVudGlmaWVyOlN0
cmluZzo6bnVtYmVyKHRva2VuLmlkZW50aWZpZXIudG9VSW50NjQoKSldOwogICAgICAgICAgICAg
ICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6dG9rZW4uY29udGVudF07CiAgICAgICAgICAgICAgICAg
W3drVG9rZW4gc2V0RXhjbHVkZWQ6dG9rZW4uaXNFeGNsdWRlZF07Ci0gICAgICAgICAgICAgICAg
W3drVG9rZW5zIGFkZE9iamVjdDp3a1Rva2VuLmdldCgpXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGF1dG8gd2tJdGVtID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGFs
bG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIoaXRlbS5pZGVudGlmaWVyLnRv
VUludDY0KCkpIHRva2Vuczp3a1Rva2Vuc10pOwotICAgICAgICAgICAgW3drSXRlbXMgYWRkT2Jq
ZWN0OndrSXRlbS5nZXQoKV07CisgICAgICAgICAgICAgICAgcmV0dXJuIHdrVG9rZW47CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxh
dGlvbkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcihpdGVtLmlk
ZW50aWZpZXIudG9VSW50NjQoKSkgdG9rZW5zOnRva2Vucy5nZXQoKV0pOworICAgICAgICB9Owor
CisgICAgICAgIGlmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2Vi
VmlldzpkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW1zOildKQorICAgICAgICAgICAgW2RlbGVn
YXRlIF93ZWJWaWV3OnJldGFpbmVkU2VsZi5nZXQoKSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0
ZW1zOmNyZWF0ZU5TQXJyYXkoaXRlbVJlZmVyZW5jZXMsIGNyZWF0ZVdLSXRlbSkuZ2V0KCldOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1SZWZlcmVu
Y2VzKQorICAgICAgICAgICAgICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzpyZXRhaW5lZFNlbGYuZ2V0
KCkgZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtOmNyZWF0ZVdLSXRlbShpdGVtKS5nZXQoKV07
CiAgICAgICAgIH0KLSAgICAgICAgW2RlbGVnYXRlIF93ZWJWaWV3OnJldGFpbmVkU2VsZi5nZXQo
KSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW1zOndrSXRlbXNdOwotCiAgICAgfSwgW2NhcHR1
cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
ewogICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9jaygpOwogICAgIH0pOwpAQCAtMTc1MSwz
NCArMTczNywzMCBAQCBzdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtYWtlRmFpbHVy
ZVNldEZvckFsbFRleHRNYW5pcHVsYXRpb25JdGVtcyhOU0FycgogCiBzdGF0aWMgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiB3a1RleHRNYW5pcHVsYXRpb25FcnJvcnMoTlNBcnJheTxfV0tUZXh0
TWFuaXB1bGF0aW9uSXRlbSAqPiAqaXRlbXMsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uRmFpbHVyZT4mIGZhaWx1cmVzKQogewot
ICAgIHVzaW5nIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOwotCiAgICAgaWYgKGZhaWx1
cmVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFJldGFpblB0cjxOU011dGFibGVBcnJheT4g
eyBuaWwgfTsKKyAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gd2tGYWlsdXJlcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhDYXBhY2l0eTpmYWlsdXJlcy5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIGNvcmVGYWlsdXJl
IDogZmFpbHVyZXMpIHsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShmYWlsdXJlcywgWyZdIChh
dXRvJiBjb3JlRmFpbHVyZSkgLT4gTlNFcnJvciAqIHsKICAgICAgICAgQVNTRVJUKGNvcmVGYWls
dXJlLmluZGV4IDwgaXRlbXMuY291bnQpOwogICAgICAgICBpZiAoY29yZUZhaWx1cmUuaW5kZXgg
Pj0gaXRlbXMuY291bnQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byogaXRl
bSA9IGl0ZW1zW2NvcmVGYWlsdXJlLmluZGV4XTsKLSAgICAgICAgQVNTRVJUKGNvcmVUZXh0TWFu
aXB1bGF0aW9uSXRlbUlkZW50aWZpZXJGcm9tU3RyaW5nKGl0ZW0uaWRlbnRpZmllcikgPT0gY29y
ZUZhaWx1cmUuaWRlbnRpZmllcik7Ci0gICAgICAgIGF1dG8gZXJyb3JDb2RlID0gKFsmY29yZUZh
aWx1cmVdKCkgeworICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgYXV0byBlcnJvckNv
ZGUgPSBzdGF0aWNfY2FzdDxOU0ludGVnZXI+KChbJmNvcmVGYWlsdXJlXSB7CisgICAgICAgICAg
ICB1c2luZyBUeXBlID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlw
dWxhdGlvbkZhaWx1cmVUeXBlOwogICAgICAgICAgICAgc3dpdGNoIChjb3JlRmFpbHVyZS50eXBl
KSB7Ci0gICAgICAgICAgICBjYXNlIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250ZW50Q2hh
bmdlZDoKKyAgICAgICAgICAgIGNhc2UgVHlwZTo6Q29udGVudENoYW5nZWQ6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtRXJyb3JDb250ZW50Q2hhbmdlZDsK
LSAgICAgICAgICAgIGNhc2UgTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkludmFsaWRJdGVtOgor
ICAgICAgICAgICAgY2FzZSBUeXBlOjpJbnZhbGlkSXRlbToKICAgICAgICAgICAgICAgICByZXR1
cm4gX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW1FcnJvckludmFsaWRJdGVtOwotICAgICAgICAgICAg
Y2FzZSBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6SW52YWxpZFRva2VuOgorICAgICAgICAgICAg
Y2FzZSBUeXBlOjpJbnZhbGlkVG9rZW46CiAgICAgICAgICAgICAgICAgcmV0dXJuIF9XS1RleHRN
YW5pcHVsYXRpb25JdGVtRXJyb3JJbnZhbGlkVG9rZW47Ci0gICAgICAgICAgICBjYXNlIE1hbmlw
dWxhdGlvbkZhaWx1cmVUeXBlOjpFeGNsdXNpb25WaW9sYXRpb246CisgICAgICAgICAgICBjYXNl
IFR5cGU6OkV4Y2x1c2lvblZpb2xhdGlvbjoKICAgICAgICAgICAgICAgICByZXR1cm4gX1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW1FcnJvckV4Y2x1c2lvblZpb2xhdGlvbjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgfSkoKTsKLSAgICAgICAgW3drRmFpbHVyZXMgYWRkT2JqZWN0OltOU0Vycm9yIGVy
cm9yV2l0aERvbWFpbjpfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbUVycm9yRG9tYWluIGNvZGU6c3Rh
dGljX2Nhc3Q8aW50PihlcnJvckNvZGUpIHVzZXJJbmZvOkB7X1dLVGV4dE1hbmlwdWxhdGlvbkl0
ZW1FcnJvckl0ZW1LZXk6IGl0ZW19XV07Ci0gICAgfQotCi0gICAgcmV0dXJuIHdrRmFpbHVyZXM7
CisgICAgICAgIH0pKCkpOworICAgICAgICBhdXRvIGl0ZW0gPSBpdGVtc1tjb3JlRmFpbHVyZS5p
bmRleF07CisgICAgICAgIEFTU0VSVChjb3JlVGV4dE1hbmlwdWxhdGlvbkl0ZW1JZGVudGlmaWVy
RnJvbVN0cmluZyhpdGVtLmlkZW50aWZpZXIpID09IGNvcmVGYWlsdXJlLmlkZW50aWZpZXIpOwor
ICAgICAgICByZXR1cm4gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOl9XS1RleHRNYW5pcHVsYXRp
b25JdGVtRXJyb3JEb21haW4gY29kZTplcnJvckNvZGUgdXNlckluZm86QHtfV0tUZXh0TWFuaXB1
bGF0aW9uSXRlbUVycm9ySXRlbUtleTogaXRlbX1dOworICAgIH0pOwogfQogCiAtICh2b2lkKV9j
b21wbGV0ZVRleHRNYW5pcHVsYXRpb25Gb3JJdGVtczooTlNBcnJheTxfV0tUZXh0TWFuaXB1bGF0
aW9uSXRlbSAqPiAqKWl0ZW1zIGNvbXBsZXRpb246KHZvaWQoXikoTlNBcnJheTxOU0Vycm9yICo+
ICplcnJvcnMpKWNvbXBsZXRpb25IYW5kbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0KaW5kZXggYTVhOTQx
ZjFkN2ZiMmRiZGJjZGVjYmYxNmRlM2JiZWNkYmVjOTlhMS4uOWE1MzAzNzQ4MDQyNjdlNTY1ZGUz
NTFmMDJjYmU3Yzg5M2U2ZTAwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5tbQpAQCAtMjUxLDExICsyNTEs
OSBAQCAtIChfV0tXZWJzaXRlUG9wVXBQb2xpY3kpX3BvcFVwUG9saWN5CiAKIC0gKE5TQXJyYXk8
X1dLQ3VzdG9tSGVhZGVyRmllbGRzICo+ICopX2N1c3RvbUhlYWRlckZpZWxkcwogewotICAgIGNv
bnN0IGF1dG8mIGZpZWxkcyA9IF93ZWJzaXRlUG9saWNpZXMtPmN1c3RvbUhlYWRlckZpZWxkcygp
OwotICAgIE5TTXV0YWJsZUFycmF5ICphcnJheSA9IFtbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5OmZpZWxkcy5zaXplKCldIGF1dG9yZWxlYXNlXTsKLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGZpZWxkIDogZmllbGRzKQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OndyYXBw
ZXIoQVBJOjpDdXN0b21IZWFkZXJGaWVsZHM6OmNyZWF0ZShmaWVsZCkpXTsKLSAgICByZXR1cm4g
YXJyYXk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoX3dlYnNpdGVQb2xpY2llcy0+Y3VzdG9t
SGVhZGVyRmllbGRzKCksIFtdIChhdXRvJiBmaWVsZCkgeworICAgICAgICByZXR1cm4gd3JhcHBl
cihBUEk6OkN1c3RvbUhlYWRlckZpZWxkczo6Y3JlYXRlKGZpZWxkKSk7CisgICAgfSkuYXV0b3Jl
bGVhc2UoKTsKIH0KIAogLSAodm9pZClfc2V0Q3VzdG9tSGVhZGVyRmllbGRzOihOU0FycmF5PF9X
S0N1c3RvbUhlYWRlckZpZWxkcyAqPiAqKWZpZWxkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVJlY29yZC5tbQppbmRleCA1OWQ0
ZGFhYWQyNDM5YjJkMjI5NzRmOTlkODc4ODUyZGUwMjRmMzNkLi40NTQwM2QxNjkzNmVhYTgyNTRj
ZDUwNWZhODg0ZWRmMGRhZmUwNDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVJlY29yZC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVJlY29yZC5tbQpAQCAtMTU0LDExICsxNTQs
OSBAQCAtIChfV0tXZWJzaXRlRGF0YVNpemUgKilfZGF0YVNpemUKIAogLSAoTlNBcnJheTxOU1N0
cmluZyAqPiAqKV9vcmlnaW5zU3RyaW5ncwogewotICAgIGF1dG8gb3JpZ2lucyA9IF93ZWJzaXRl
RGF0YVJlY29yZC0+d2Vic2l0ZURhdGFSZWNvcmQoKS5vcmlnaW5zOwotICAgIE5TTXV0YWJsZUFy
cmF5PE5TU3RyaW5nICo+ICphcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRo
Q2FwYWNpdHk6b3JpZ2lucy5zaXplKCldOwotICAgIGZvciAoYXV0byYgb3JpZ2luIDogb3JpZ2lu
cykKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDooTlNTdHJpbmcgKilvcmlnaW4udG9TdHJpbmco
KV07Ci0gICAgcmV0dXJuIFthcnJheSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIGNyZWF0ZU5T
QXJyYXkoX3dlYnNpdGVEYXRhUmVjb3JkLT53ZWJzaXRlRGF0YVJlY29yZCgpLm9yaWdpbnMsIFtd
IChhdXRvJiBvcmlnaW4pIC0+IE5TU3RyaW5nICogeworICAgICAgICByZXR1cm4gb3JpZ2luLnRv
U3RyaW5nKCk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0K
aW5kZXggYTQ4ZTFiNjIwMjZiNzcxMzJkZjRmNzk5MDI3Yjc3YzU2YTkxY2ZjYS4uNzNjOThhMzQ2
MjVkOGY1NTUyNDE0Mzg0ZTNjZTZiOGRiODQwZThkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCkBAIC01NDIs
MTEgKzU0Miw5IEBAIC0gKHZvaWQpX2dldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFy
eToodm9pZCAoXikoTlNBcnJheTxfV0tSZXNvdXJjZUxvYWRTCiB7CiAjaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKICAgICBfd2Vic2l0ZURhdGFTdG9yZS0+Z2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0
cihjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgdGhpcmRQYXJ0eURvbWFpbnMpIHsKLSAgICAg
ICAgTlNNdXRhYmxlQXJyYXk8X1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHkgKj4g
KmFwaVRoaXJkUGFydGllcyA9IFtbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5OnRoaXJkUGFydHlEb21haW5zLnNpemUoKV0gYXV0b3JlbGVhc2VdOwotICAgICAgICBmb3Ig
KGF1dG8mIHRoaXJkUGFydHkgOiB0aGlyZFBhcnR5RG9tYWlucykKLSAgICAgICAgICAgIFthcGlU
aGlyZFBhcnRpZXMgYWRkT2JqZWN0OndyYXBwZXIoQVBJOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGhpcmRQYXJ0eTo6Y3JlYXRlKFdURk1vdmUodGhpcmRQYXJ0eSkpKV07Ci0KLSAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoYXBpVGhpcmRQYXJ0aWVzKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoY3JlYXRlTlNBcnJheSh0aGlyZFBhcnR5RG9tYWlucywgW10gKGF1dG8mJiBkb21haW4pIHsK
KyAgICAgICAgICAgIHJldHVybiB3cmFwcGVyKEFQSTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Ro
aXJkUGFydHk6OmNyZWF0ZShXVEZNb3ZlKGRvbWFpbikpKTsKKyAgICAgICAgfSkuZ2V0KCkpOwog
ICAgIH0pOwogI2Vsc2UKICAgICBjb21wbGV0aW9uSGFuZGxlcihuaWwpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0Rvd25sb2FkLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0Rvd25sb2FkLm1tCmluZGV4IGQxYTY4M2Rk
MmU2OGU5OTYzZGVjOWYyOGZmNjgwZThiNDEyY2MzNGEuLmRhMGRiNWFkOWM2ZTM3N2EyM2JmZDY0
YTJmOTA2MzE2ZjVmMGM4MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tEb3dubG9hZC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLRG93bmxvYWQubW0KQEAgLTY3LDExICs2Nyw5IEBAIC0gKFdLV2ViVmlldyAqKW9y
aWdpbmF0aW5nV2ViVmlldwogCiAtKE5TQXJyYXk8TlNVUkwgKj4gKilyZWRpcmVjdENoYWluCiB7
Ci0gICAgYXV0byYgcmVkaXJlY3RVUkxzID0gX2Rvd25sb2FkLT5yZWRpcmVjdENoYWluKCk7Ci0g
ICAgTlNNdXRhYmxlQXJyYXk8TlNVUkwgKj4gKm5zVVJMcyA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTpyZWRpcmVjdFVSTHMuc2l6ZSgpXTsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IHJlZGlyZWN0VVJMIDogcmVkaXJlY3RVUkxzKQotICAgICAgICBbbnNVUkxzIGFkZE9iamVjdDoo
TlNVUkwgKilyZWRpcmVjdFVSTF07Ci0gICAgcmV0dXJuIG5zVVJMczsKKyAgICByZXR1cm4gY3Jl
YXRlTlNBcnJheShfZG93bmxvYWQtPnJlZGlyZWN0Q2hhaW4oKSwgW10gKGF1dG8mIHJlZGlyZWN0
VVJMKSAtPiBOU1VSTCAqIHsKKyAgICAgICAgcmV0dXJuIHJlZGlyZWN0VVJMOworICAgIH0pLmF1
dG9yZWxlYXNlKCk7CiB9CiAKIC0gKEJPT0wpd2FzVXNlckluaXRpYXRlZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0ZyYW1lVHJlZU5vZGUubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLRnJhbWVUcmVlTm9kZS5tbQppbmRl
eCBlYzRjNGE3ZWUwMmUyMjQ3ZmNlYmIwNDdlM2I2ZTc3ZThkZDY0Mjc4Li40ZDM5ZTIxNTgyMTY3
YmM4NTFiOTBkYzRhMTg1NjI0ZTZiZjBjMjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLRnJhbWVUcmVlTm9kZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLRnJhbWVUcmVlTm9kZS5tbQpAQCAtMjksNiArMjksNyBA
QAogI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxl
SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS0ZyYW1lVHJlZU5vZGVJbnRlcm5hbC5oIgorI2ltcG9y
dCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBfV0tGcmFtZVRy
ZWVOb2RlCiAKQEAgLTYyLDExICs2Myw5IEBAIC0gKFdLV2ViVmlldyAqKXdlYlZpZXcKIAogLSAo
TlNBcnJheTxfV0tGcmFtZVRyZWVOb2RlICo+ICopY2hpbGRGcmFtZXMKIHsKLSAgICBjb25zdCBh
dXRvJiBjaGlsZHJlbiA9IF9ub2RlLT5jaGlsZEZyYW1lcygpOwotICAgIE5TTXV0YWJsZUFycmF5
PF9XS0ZyYW1lVHJlZU5vZGUgKj4gKmFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENh
cGFjaXR5OmNoaWxkcmVuLnNpemUoKV07Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IGNo
aWxkcmVuKQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OndyYXBwZXIoQVBJOjpGcmFtZVRyZWVO
b2RlOjpjcmVhdGUoV2ViS2l0OjpGcmFtZVRyZWVOb2RlRGF0YShjaGlsZCksIF9ub2RlLT5wYWdl
KCkpKV07Ci0gICAgcmV0dXJuIGFycmF5OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KF9ub2Rl
LT5jaGlsZEZyYW1lcygpLCBbJl0gKGF1dG8mIGNoaWxkKSB7CisgICAgICAgIHJldHVybiB3cmFw
cGVyKEFQSTo6RnJhbWVUcmVlTm9kZTo6Y3JlYXRlKFdlYktpdDo6RnJhbWVUcmVlTm9kZURhdGEo
Y2hpbGQpLCBfbm9kZS0+cGFnZSgpKSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAo
aWQpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlv
bi5tbQppbmRleCBhZDM2NWJjYjFmNTFhZGIwNmU3NjI2MTYzM2UxODVkOGMxNWNhZWQwLi5jNDNk
NDI3MWU1ZjVjMzVlMzNkNjkxNDFkNDcyMjkxY2E3YWQyMDNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24ubW0KQEAgLTE0MywxMSArMTQzLDkgQEAgLSAoTlNBcnJheTxOU1VSTCAqPiAq
KWFkZGl0aW9uYWxSZWFkQWNjZXNzQWxsb3dlZFVSTHMKICAgICBpZiAocGF0aHMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gQFsgXTsKIAotICAgIE5TTXV0YWJsZUFycmF5ICp1cmxzID0gW05T
TXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnBhdGhzLnNpemUoKV07Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBwYXRoIDogcGF0aHMpCi0gICAgICAgIFt1cmxzIGFkZE9iamVjdDpbTlNVUkwg
ZmlsZVVSTFdpdGhGaWxlU3lzdGVtUmVwcmVzZW50YXRpb246cGF0aC5kYXRhKCkgaXNEaXJlY3Rv
cnk6Tk8gcmVsYXRpdmVUb1VSTDpuaWxdXTsKLQotICAgIHJldHVybiB1cmxzOworICAgIHJldHVy
biBjcmVhdGVOU0FycmF5KHBhdGhzLCBbXSAoYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4g
W05TVVJMIGZpbGVVUkxXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOnBhdGguZGF0YSgpIGlz
RGlyZWN0b3J5Ok5PIHJlbGF0aXZlVG9VUkw6bmlsXTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwog
fQogCiAtICh2b2lkKXNldEFkZGl0aW9uYWxSZWFkQWNjZXNzQWxsb3dlZFVSTHM6KE5TQXJyYXk8
TlNVUkwgKj4gKilhZGRpdGlvbmFsUmVhZEFjY2Vzc0FsbG93ZWRVUkxzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RoaXJkUGFydHkubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHkubW0KaW5kZXggNTNmOWQ5ZjM1OWVkNmFmNTQ1
ODE1NjU4YjM1MWQzZjdiMjQ0Y2M3ZS4uZjA0NmJkZGYzYTU4MjkxNWRhMDdjZDIxMDIzOWU4Mzg1
MjUwMjlmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eS5t
bQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Ro
aXJkUGFydHlJbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJBUElBcnJheS5oIgorI2ltcG9ydCA8d3Rm
L2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBfV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGhpcmRQYXJ0eQogCkBAIC00MywxMiArNDQsOSBAQCAtIChOU1N0cmluZyAqKXRo
aXJkUGFydHlEb21haW4KIAogLSAoTlNBcnJheTxfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmly
c3RQYXJ0eSAqPiAqKXVuZGVyRmlyc3RQYXJ0aWVzCiB7Ci0gICAgYXV0byBhcGlGaXJzdFBhcnRp
ZXMgPSBfdGhpcmRQYXJ0eS0+dW5kZXJGaXJzdFBhcnRpZXMoKTsKLSAgICBOU011dGFibGVBcnJh
eTxfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eSAqPiAqYXBpVW5kZXJGaXJzdFBh
cnRpZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6YXBpRmlyc3RQYXJ0aWVz
LnNpemUoKV07Ci0gICAgZm9yIChjb25zdCBhdXRvJiB0aGlyZFBhcnR5RGF0YVVuZGVyRmlyc3RQ
YXJ0eSA6IGFwaUZpcnN0UGFydGllcykKLSAgICAgICAgW2FwaVVuZGVyRmlyc3RQYXJ0aWVzIGFk
ZE9iamVjdDp3cmFwcGVyKEFQSTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHk6OmNy
ZWF0ZSh0aGlyZFBhcnR5RGF0YVVuZGVyRmlyc3RQYXJ0eSkpXTsKLQotICAgIHJldHVybiBhcGlV
bmRlckZpcnN0UGFydGllczsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShfdGhpcmRQYXJ0eS0+
dW5kZXJGaXJzdFBhcnRpZXMoKSwgW10gKGF1dG8mIGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIHdy
YXBwZXIoQVBJOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eTo6Y3JlYXRlKGRhdGEp
KTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChBUEk6Ok9iamVjdCYpX2FwaU9iamVj
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJ
T1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQpp
bmRleCBiYTA2YWNlOTZkYTA0OTY1YTcyZGZlY2Y3MjU1OWIyZDM2ZWUyNmIzLi5mNGQwNmM2NmRm
MmRhYTc3Yzc1MTllYzI4Y2RkZjJhNWU1YjE2ZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQpAQCAtNTYsNiArNTYsNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1
YXJ0ekNvcmVTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvaW9zL0dyYXBoaWNzU2VydmljZXNTUEku
aD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgRU5BQkxFKERBVEFf
REVURUNUSU9OKQogI2ltcG9ydCAiV0tEYXRhRGV0ZWN0b3JUeXBlc0ludGVybmFsLmgiCkBAIC0z
MDQ5LDEwICszMDUwLDkgQEAgLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNl
bGVjdGlvbk9mZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDoKICAgICBbX2NvbnRlbnRW
aWV3IF9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0Om9mZnNldCB3
aXRoVGV4dDp0ZXh0IGNvbXBsZXRpb25IYW5kbGVyOltjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVy
ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpTZWxlY3Rpb25SZWN0PiYgc2VsZWN0aW9uUmVjdHMpIHsKICAgICAgICAgaWYgKCFjYXB0dXJl
ZENvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRvIHJl
Y3RWYWx1ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNp
dHk6c2VsZWN0aW9uUmVjdHMuc2l6ZSgpXSk7Ci0gICAgICAgIGZvciAoYXV0byYgc2VsZWN0aW9u
UmVjdCA6IHNlbGVjdGlvblJlY3RzKQotICAgICAgICAgICAgW3JlY3RWYWx1ZXMgYWRkT2JqZWN0
OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpzZWxlY3Rpb25SZWN0LnJlY3QoKV1dOwotICAgICAg
ICBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKHJlY3RWYWx1ZXMuZ2V0KCkpOworICAgICAgICBj
YXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKGNyZWF0ZU5TQXJyYXkoc2VsZWN0aW9uUmVjdHMsIFtd
IChhdXRvJiBzZWxlY3Rpb25SZWN0KSB7CisgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFs
dWVXaXRoQ0dSZWN0OnNlbGVjdGlvblJlY3QucmVjdCgpXTsKKyAgICAgICAgfSkuZ2V0KCkpOwog
ICAgIH1dOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9O
YXZpZ2F0aW9uU3RhdGUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0
aW9uU3RhdGUubW0KaW5kZXggNWJhODgyNTY1MzhlZmE4MGIwYjA5ODJlMjgxNThhYzY1MGFlZGMy
YS4uOGIzOTZkYTAwODc2ZDBhNTU2ZWZhZDcyYjlmZDIyZTVhY2U5NmNiNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQpAQCAtNzgsNiAr
NzgsNyBAQAogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JD
b2NvYS5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFM
WVNUKQogI2ltcG9ydCA8cGFsL2lvcy9NYW5hZ2VkQ29uZmlndXJhdGlvblNvZnRMaW5rLmg+CkBA
IC00NTksMTMgKzQ2MCwxMyBAQCBib29sIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVu
dDo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KFdlYlBhZ2VQcm94eSYsCiAgICAgaWYgKCFuYXZp
Z2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE5TTXV0YWJsZUFy
cmF5PFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqPiAqcmVtb3ZlZEl0ZW1zID0gbmlsOwotICAgIGlm
IChyZW1vdmVkLnNpemUoKSkgewotICAgICAgICByZW1vdmVkSXRlbXMgPSBbW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpyZW1vdmVkLnNpemUoKV0gYXV0b3JlbGVhc2Vd
OwotICAgICAgICBmb3IgKGF1dG8mIHJlbW92ZWRJdGVtIDogcmVtb3ZlZCkKLSAgICAgICAgICAg
IFtyZW1vdmVkSXRlbXMgYWRkT2JqZWN0OndyYXBwZXIocmVtb3ZlZEl0ZW0uZ2V0KCkpXTsKKyAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8V0tCYWNrRm9yd2FyZExpc3RJdGVtICo+PiByZW1v
dmVkSXRlbXM7CisgICAgaWYgKCFyZW1vdmVkLmlzRW1wdHkoKSkgeworICAgICAgICByZW1vdmVk
SXRlbXMgPSBjcmVhdGVOU0FycmF5KHJlbW92ZWQsIFtdIChhdXRvJiByZW1vdmVkSXRlbSkgewor
ICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIocmVtb3ZlZEl0ZW0uZ2V0KCkpOworICAgICAgICB9
KTsKICAgICB9Ci0gICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0
aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGJhY2tGb3J3
YXJkTGlzdEl0ZW1BZGRlZDp3cmFwcGVyKGFkZGVkKSByZW1vdmVkOnJlbW92ZWRJdGVtc107Cisg
ICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUg
X3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGJhY2tGb3J3YXJkTGlzdEl0ZW1B
ZGRlZDp3cmFwcGVyKGFkZGVkKSByZW1vdmVkOnJlbW92ZWRJdGVtcy5nZXQoKV07CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90
ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlU2Ny
b2xsaW5nUGVyZm9ybWFuY2VEYXRhLm1tCmluZGV4IDgxM2IxODEyNzBmNTIwZTkyNGVmNGY2MTJk
ODE1MjVmZDZlNjNmNTAuLmVhZWZiOWUxYjUxZjJmYzZkYjZiMzRjOGQyOTk4MThiY2ZmNTMzMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZv
cm1hbmNlRGF0YS5tbQpAQCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCAiUmVtb3RlTGF5ZXJUcmVl
SG9zdC5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9DQUxheWVyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1RpbGVDb250cm9sbGVyLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTcyLDE2ICs3
MywxMyBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YTo6YXBw
ZW5kQmxhbmtQaXhlbENvdW50KEJsYW5rUGl4ZWxDbwogCiBOU0FycmF5ICpSZW1vdGVMYXllclRy
ZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGE6OmRhdGEoKQogewotICAgIE5TTXV0YWJsZUFycmF5
KiBkYXRhQXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bV9ibGFua1Bp
eGVsQ291bnRzLnNpemUoKV07Ci0gICAgCi0gICAgZm9yIChhdXRvIHBpeGVsRGF0YSA6IG1fYmxh
bmtQaXhlbENvdW50cykgewotICAgICAgICBbZGF0YUFycmF5IGFkZE9iamVjdDpAWworICAgIHJl
dHVybiBjcmVhdGVOU0FycmF5KG1fYmxhbmtQaXhlbENvdW50cywgW10gKGF1dG8mIHBpeGVsRGF0
YSkgeworICAgICAgICByZXR1cm4gQFsKICAgICAgICAgICAgIEAocGl4ZWxEYXRhLnN0YXJ0VGlt
ZSksCiAgICAgICAgICAgICAocGl4ZWxEYXRhLmV2ZW50VHlwZSA9PSBCbGFua1BpeGVsQ291bnQ6
OkZpbGxlZCkgPyBAImZpbGxlZCIgOiBAImV4cG9zZWQiLAogICAgICAgICAgICAgQChwaXhlbERh
dGEuYmxhbmtQaXhlbENvdW50KQotICAgICAgICBdXTsKLSAgICB9Ci0gICAgcmV0dXJuIGRhdGFB
cnJheTsKKyAgICAgICAgXTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiBzdGF0aWMgQ0FM
YXllciAqZmluZFRpbGVHcmlkQ29udGFpbmVyTGF5ZXIoQ0FMYXllciAqbGF5ZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRl
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0
ZS5tbQppbmRleCA1ODhlODNjOTUyYWM5MWYzMTllZGUxZDBjZjg1MzdmZWZjNzEwNzY2Li5mZjRl
NGZkMTRmMTJkY2M3YTcwNzVmOGMzZTJlZTEwNGVhYjA3ZWJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0KQEAg
LTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgPFdlYkNvcmUvRHJh
Z0l0ZW0uaD4KICNpbXBvcnQgPFdlYkNvcmUvSW1hZ2UuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwpAQCAtNTAsMjQgKzUxLDIyIEBAIHN0YXRpYyBSZXRhaW5QdHI8VUlUYXJnZXRlZERyYWdQ
cmV2aWV3PiBjcmVhdGVUYXJnZXRlZERyYWdQcmV2aWV3KFVJSW1hZ2UgKmltYWdlCiAgICAgaWYg
KGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVzLmlzRW1wdHkoKSB8fCAhaW1hZ2UgfHwgIXByZXZp
ZXdDb250YWluZXIud2luZG93KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIE5TTXV0
YWJsZUFycmF5ICpjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRl
cy5zaXplKCldOwotCiAgICAgRmxvYXRSZWN0IGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcyA9
IFtyb290VmlldyBjb252ZXJ0UmVjdDpmcmFtZUluUm9vdFZpZXdDb29yZGluYXRlcyB0b1ZpZXc6
cHJldmlld0NvbnRhaW5lcl07CiAgICAgaWYgKGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgRmxvYXRTaXplIHNjYWxp
bmdSYXRpbyA9IGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcy5zaXplKCkgLyBmcmFtZUluUm9v
dFZpZXdDb29yZGluYXRlcy5zaXplKCk7Ci0gICAgZm9yIChhdXRvIHJlY3QgOiBjbGlwcGluZ1Jl
Y3RzSW5GcmFtZUNvb3JkaW5hdGVzKSB7CisgICAgYXV0byBjbGlwcGluZ1JlY3RWYWx1ZXNJbkZy
YW1lQ29vcmRpbmF0ZXMgPSBjcmVhdGVOU0FycmF5KGNsaXBwaW5nUmVjdHNJbkZyYW1lQ29vcmRp
bmF0ZXMsIFsmXSAoYXV0byByZWN0KSB7CiAgICAgICAgIHJlY3Quc2NhbGUoc2NhbGluZ1JhdGlv
KTsKLSAgICAgICAgW2NsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcyBhZGRPYmpl
Y3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnJlY3RdXTsKLSAgICB9CisgICAgICAgIHJldHVy
biBbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6cmVjdF07CisgICAgfSk7CiAKICAgICBhdXRvIGlt
YWdlVmlldyA9IGFkb3B0TlMoW1tVSUltYWdlVmlldyBhbGxvY10gaW5pdFdpdGhJbWFnZTppbWFn
ZV0pOwogICAgIFtpbWFnZVZpZXcgc2V0RnJhbWU6ZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVz
XTsKIAogICAgIFJldGFpblB0cjxVSURyYWdQcmV2aWV3UGFyYW1ldGVycz4gcGFyYW1ldGVyczsK
LSAgICBpZiAoY2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVzLmNvdW50KQotICAg
ICAgICBwYXJhbWV0ZXJzID0gYWRvcHROUyhbW1VJRHJhZ1ByZXZpZXdQYXJhbWV0ZXJzIGFsbG9j
XSBpbml0V2l0aFRleHRMaW5lUmVjdHM6Y2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5h
dGVzXSk7CisgICAgaWYgKFtjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgY291
bnRdKQorICAgICAgICBwYXJhbWV0ZXJzID0gYWRvcHROUyhbW1VJRHJhZ1ByZXZpZXdQYXJhbWV0
ZXJzIGFsbG9jXSBpbml0V2l0aFRleHRMaW5lUmVjdHM6Y2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFt
ZUNvb3JkaW5hdGVzLmdldCgpXSk7CiAgICAgZWxzZQogICAgICAgICBwYXJhbWV0ZXJzID0gYWRv
cHROUyhbW1VJRHJhZ1ByZXZpZXdQYXJhbWV0ZXJzIGFsbG9jXSBpbml0XSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lm1tCmluZGV4IGExODhlMjRhYTlkZTE0MDdjNzI4OGU4OWZiYmNiODY2NjM5NTZmZTcuLjA0NmVl
ODFkYjZiYmE5ODA5NmE1OTk2NmQ1N2UzOGIxMGFkYjFjMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAt
MTY3NCwxNyArMTY3NCwxNCBAQCAtICh2b2lkKV91cGRhdGVUYXBIaWdobGlnaHQKICAgICBpZiAo
IVtfaGlnaGxpZ2h0VmlldyBzdXBlcnZpZXddKQogICAgICAgICByZXR1cm47CiAKLSAgICB7Ci0g
ICAgICAgIFJldGFpblB0cjxVSUNvbG9yPiBoaWdobGlnaHRVSUtpdENvbG9yID0gYWRvcHROUyhb
W1VJQ29sb3IgYWxsb2NdIGluaXRXaXRoQ0dDb2xvcjpjYWNoZWRDR0NvbG9yKF90YXBIaWdobGln
aHRJbmZvcm1hdGlvbi5jb2xvcildKTsKLSAgICAgICAgW19oaWdobGlnaHRWaWV3IHNldENvbG9y
OmhpZ2hsaWdodFVJS2l0Q29sb3IuZ2V0KCldOwotICAgIH0KKyAgICBbX2hpZ2hsaWdodFZpZXcg
c2V0Q29sb3I6YWRvcHROUyhbW1VJQ29sb3IgYWxsb2NdIGluaXRXaXRoQ0dDb2xvcjpjYWNoZWRD
R0NvbG9yKF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi5jb2xvcildKS5nZXQoKV07CiAKICAgICBD
R0Zsb2F0IHNlbGZTY2FsZSA9IHNlbGYubGF5ZXIudHJhbnNmb3JtLm0xMTsKICAgICBib29sIGFs
bEhpZ2hsaWdodFJlY3RzQXJlUmVjdGlsaW5lYXIgPSB0cnVlOwogICAgIGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yID0gX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkZsb2F0UXVhZD4mIGhpZ2hsaWdodGVkUXVhZHMgPSBfdGFwSGlnaGxpZ2h0SW5m
b3JtYXRpb24ucXVhZHM7Ci0gICAgY29uc3Qgc2l6ZV90IHF1YWRDb3VudCA9IGhpZ2hsaWdodGVk
UXVhZHMuc2l6ZSgpOwotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcmVjdHMgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c3RhdGljX2Nhc3Q8
Y29uc3QgTlNVSW50ZWdlcj4ocXVhZENvdW50KV0pOworICAgIE5TVUludGVnZXIgcXVhZENvdW50
ID0gaGlnaGxpZ2h0ZWRRdWFkcy5zaXplKCk7CisgICAgYXV0byByZWN0cyA9IGFkb3B0TlMoW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpxdWFkQ291bnRdKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRDb3VudDsgKytpKSB7CiAgICAgICAgIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UXVhZCYgcXVhZCA9IGhpZ2hsaWdodGVkUXVhZHNbaV07CiAgICAgICAgIGlm
IChxdWFkLmlzUmVjdGlsaW5lYXIoKSkgewpAQCAtMTY5NSw3ICsxNjkyLDcgQEAgLSAodm9pZClf
dXBkYXRlVGFwSGlnaGxpZ2h0CiAgICAgICAgICAgICBbcmVjdHMgYWRkT2JqZWN0OltOU1ZhbHVl
IHZhbHVlV2l0aENHUmVjdDpwaXhlbEFsaWduZWRSZWN0XV07CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBhbGxIaWdobGlnaHRSZWN0c0FyZVJlY3RpbGluZWFyID0gZmFsc2U7Ci0gICAg
ICAgICAgICByZWN0cy5jbGVhcigpOworICAgICAgICAgICAgcmVjdHMgPSBuaWw7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTE3MDMsNyArMTcwMCw3IEBAIC0gKHZv
aWQpX3VwZGF0ZVRhcEhpZ2hsaWdodAogICAgIGlmIChhbGxIaWdobGlnaHRSZWN0c0FyZVJlY3Rp
bGluZWFyKQogICAgICAgICBbX2hpZ2hsaWdodFZpZXcgc2V0RnJhbWVzOnJlY3RzLmdldCgpIGJv
dW5kYXJ5UmVjdDpfcGFnZS0+ZXhwb3NlZENvbnRlbnRSZWN0KCldOwogICAgIGVsc2UgewotICAg
ICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHF1YWRzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnN0YXRpY19jYXN0PGNvbnN0IE5TVUludGVn
ZXI+KHF1YWRDb3VudCldKTsKKyAgICAgICAgYXV0byBxdWFkcyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpxdWFkQ291bnQgKiA0XSk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZENvdW50OyArK2kpIHsKICAgICAgICAgICAgIFdl
YkNvcmU6OkZsb2F0UXVhZCBxdWFkID0gaGlnaGxpZ2h0ZWRRdWFkc1tpXTsKICAgICAgICAgICAg
IHF1YWQuc2NhbGUoc2VsZlNjYWxlKTsKQEAgLTE3MTcsMTEgKzE3MTQsMTIgQEAgLSAodm9pZClf
dXBkYXRlVGFwSGlnaGxpZ2h0CiAgICAgfQogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiBib3JkZXJSYWRpaSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTo0XSk7Ci0gICAgW2JvcmRlclJhZGlpIGFkZE9iamVjdDpuc1NpemVGb3JUYXBIaWdo
bGlnaHRCb3JkZXJSYWRpdXMoX3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLnRvcExlZnRSYWRpdXMs
IHNlbGZTY2FsZSldOwotICAgIFtib3JkZXJSYWRpaSBhZGRPYmplY3Q6bnNTaXplRm9yVGFwSGln
aGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi50b3BSaWdodFJhZGl1
cywgc2VsZlNjYWxlKV07Ci0gICAgW2JvcmRlclJhZGlpIGFkZE9iamVjdDpuc1NpemVGb3JUYXBI
aWdobGlnaHRCb3JkZXJSYWRpdXMoX3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLmJvdHRvbUxlZnRS
YWRpdXMsIHNlbGZTY2FsZSldOwotICAgIFtib3JkZXJSYWRpaSBhZGRPYmplY3Q6bnNTaXplRm9y
VGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi5ib3R0b21S
aWdodFJhZGl1cywgc2VsZlNjYWxlKV07Ci0gICAgW19oaWdobGlnaHRWaWV3IHNldENvcm5lclJh
ZGlpOmJvcmRlclJhZGlpLmdldCgpXTsKKyAgICBbX2hpZ2hsaWdodFZpZXcgc2V0Q29ybmVyUmFk
aWk6QFsKKyAgICAgICAgbnNTaXplRm9yVGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdo
bGlnaHRJbmZvcm1hdGlvbi50b3BMZWZ0UmFkaXVzLCBzZWxmU2NhbGUpLAorICAgICAgICBuc1Np
emVGb3JUYXBIaWdobGlnaHRCb3JkZXJSYWRpdXMoX3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLnRv
cFJpZ2h0UmFkaXVzLCBzZWxmU2NhbGUpLAorICAgICAgICBuc1NpemVGb3JUYXBIaWdobGlnaHRC
b3JkZXJSYWRpdXMoX3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLmJvdHRvbUxlZnRSYWRpdXMsIHNl
bGZTY2FsZSksCisgICAgICAgIG5zU2l6ZUZvclRhcEhpZ2hsaWdodEJvcmRlclJhZGl1cyhfdGFw
SGlnaGxpZ2h0SW5mb3JtYXRpb24uYm90dG9tUmlnaHRSYWRpdXMsIHNlbGZTY2FsZSksCisgICAg
XV07CiB9CiAKIC0gKHZvaWQpX3Nob3dUYXBIaWdobGlnaHQKQEAgLTI1NjQsMTQgKzI1NjIsMTEg
QEAgLSAoQk9PTCl0ZXh0SW50ZXJhY3Rpb25HZXN0dXJlOihVSVdLR2VzdHVyZVR5cGUpZ2VzdHVy
ZSBzaG91bGRCZWdpbkF0UG9pbnQ6KENHUG8KIAogLSAoTlNBcnJheSAqKXdlYlNlbGVjdGlvblJl
Y3RzRm9yU2VsZWN0aW9uUmVjdHM6KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0
PiYpc2VsZWN0aW9uUmVjdHMKIHsKLSAgICB1bnNpZ25lZCBzaXplID0gc2VsZWN0aW9uUmVjdHMu
c2l6ZSgpOwotICAgIGlmICghc2l6ZSkKKyAgICBpZiAoc2VsZWN0aW9uUmVjdHMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgTlNNdXRhYmxlQXJyYXkgKndlYlJlY3RzID0g
W05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnNpemVdOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgY29uc3QgV2ViQ29yZTo6U2VsZWN0
aW9uUmVjdCYgY29yZVJlY3QgPSBzZWxlY3Rpb25SZWN0c1tpXTsKLSAgICAgICAgV2ViU2VsZWN0
aW9uUmVjdCAqd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNlbGVjdGlvblJlY3RdOworICAg
IHJldHVybiBjcmVhdGVOU0FycmF5KHNlbGVjdGlvblJlY3RzLCBbXSAoYXV0byYgY29yZVJlY3Qp
IHsKKyAgICAgICAgYXV0byB3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVj
dF07CiAgICAgICAgIHdlYlJlY3QucmVjdCA9IGNvcmVSZWN0LnJlY3QoKTsKICAgICAgICAgd2Vi
UmVjdC53cml0aW5nRGlyZWN0aW9uID0gY29yZVJlY3QuZGlyZWN0aW9uKCkgPT0gV2ViQ29yZTo6
VGV4dERpcmVjdGlvbjo6TFRSID8gV0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dy
aXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKICAgICAgICAgd2ViUmVjdC5pc0xpbmVCcmVhayA9
IGNvcmVSZWN0LmlzTGluZUJyZWFrKCk7CkBAIC0yNTgxLDEwICsyNTc2LDggQEAgLSAoTlNBcnJh
eSAqKXdlYlNlbGVjdGlvblJlY3RzRm9yU2VsZWN0aW9uUmVjdHM6KGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpTZWxlY3Rpb24KICAgICAgICAgd2ViUmVjdC5jb250YWluc0VuZCA9IGNvcmVSZWN0LmNv
bnRhaW5zRW5kKCk7CiAgICAgICAgIHdlYlJlY3QuaXNJbkZpeGVkUG9zaXRpb24gPSBjb3JlUmVj
dC5pc0luRml4ZWRQb3NpdGlvbigpOwogICAgICAgICB3ZWJSZWN0LmlzSG9yaXpvbnRhbCA9IGNv
cmVSZWN0LmlzSG9yaXpvbnRhbCgpOwotICAgICAgICBbd2ViUmVjdHMgYWRkT2JqZWN0OndlYlJl
Y3RdOwotICAgIH0KLQotICAgIHJldHVybiB3ZWJSZWN0czsKKyAgICAgICAgcmV0dXJuIHdlYlJl
Y3Q7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNBcnJheSAqKXdlYlNlbGVjdGlv
blJlY3RzCkBAIC00NDU3LDE0ICs0NDUwLDExIEBAIC0gKHZvaWQpcmVwbGFjZVJhbmdlOihVSVRl
eHRSYW5nZSAqKXJhbmdlIHdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQKIHsKIH0KIAotc3RhdGlj
IE5TQXJyYXk8V0tUZXh0U2VsZWN0aW9uUmVjdCAqPiAqd2tUZXh0U2VsZWN0aW9uUmVjdHMoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiBjb3JlUmVjdHMpCitzdGF0aWMgTlNB
cnJheTxXS1RleHRTZWxlY3Rpb25SZWN0ICo+ICp3a1RleHRTZWxlY3Rpb25SZWN0cyhjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mIHJlY3RzKQogewotICAgIGF1dG8gcmVjdHMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29yZVJl
Y3RzLnNpemUoKV0pOwotICAgIGZvciAoYXV0byYgY29yZVJlY3QgOiBjb3JlUmVjdHMpIHsKLSAg
ICAgICAgYXV0byB3a1RleHRTZWxlY3Rpb25SZWN0ID0gYWRvcHROUyhbW1dLVGV4dFNlbGVjdGlv
blJlY3QgYWxsb2NdIGluaXRXaXRoU2VsZWN0aW9uUmVjdDpjb3JlUmVjdF0pOwotICAgICAgICBb
cmVjdHMgYWRkT2JqZWN0OndrVGV4dFNlbGVjdGlvblJlY3QuZ2V0KCldOwotICAgIH0KLSAgICBy
ZXR1cm4gcmVjdHMuYXV0b3JlbGVhc2UoKTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShyZWN0
cywgW10gKGF1dG8mIHJlY3QpIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXS1RleHRTZWxl
Y3Rpb25SZWN0IGFsbG9jXSBpbml0V2l0aFNlbGVjdGlvblJlY3Q6cmVjdF0pOworICAgIH0pLmF1
dG9yZWxlYXNlKCk7CiB9CiAKIC0gKFVJVGV4dFJhbmdlICopc2VsZWN0ZWRUZXh0UmFuZ2UKQEAg
LTc1ODIsMTcgKzc1NzIsMTUgQEAgc3RhdGljIFJldGFpblB0cjxVSVRhcmdldGVkUHJldmlldz4g
Y3JlYXRlVGFyZ2V0ZWRQcmV2aWV3KFVJSW1hZ2UgKmltYWdlLCBVSVZpZXcKICAgICBpZiAoZnJh
bWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsK
IAotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBzY2FsaW5nUmF0aW8gPSBmcmFtZUluQ29udGFpbmVy
Q29vcmRpbmF0ZXMuc2l6ZSgpIC8gZnJhbWVJblJvb3RWaWV3Q29vcmRpbmF0ZXMuc2l6ZSgpOwot
ICAgIE5TTXV0YWJsZUFycmF5ICpjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y2xpcHBpbmdSZWN0c0luRnJhbWVD
b29yZGluYXRlcy5zaXplKCldOwotCi0gICAgZm9yIChhdXRvIHJlY3QgOiBjbGlwcGluZ1JlY3Rz
SW5GcmFtZUNvb3JkaW5hdGVzKSB7CisgICAgYXV0byBzY2FsaW5nUmF0aW8gPSBmcmFtZUluQ29u
dGFpbmVyQ29vcmRpbmF0ZXMuc2l6ZSgpIC8gZnJhbWVJblJvb3RWaWV3Q29vcmRpbmF0ZXMuc2l6
ZSgpOworICAgIGF1dG8gY2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVzID0gY3Jl
YXRlTlNBcnJheShjbGlwcGluZ1JlY3RzSW5GcmFtZUNvb3JkaW5hdGVzLCBbJl0gKFdlYkNvcmU6
OkZsb2F0UmVjdCByZWN0KSB7CiAgICAgICAgIHJlY3Quc2NhbGUoc2NhbGluZ1JhdGlvKTsKLSAg
ICAgICAgW2NsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcyBhZGRPYmplY3Q6W05T
VmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnJlY3RdXTsKLSAgICB9CisgICAgICAgIHJldHVybiBbTlNW
YWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6cmVjdF07CisgICAgfSk7CiAKICAgICBSZXRhaW5QdHI8VUlQ
cmV2aWV3UGFyYW1ldGVycz4gcGFyYW1ldGVyczsKLSAgICBpZiAoY2xpcHBpbmdSZWN0VmFsdWVz
SW5GcmFtZUNvb3JkaW5hdGVzLmNvdW50KQotICAgICAgICBwYXJhbWV0ZXJzID0gYWRvcHROUyhb
W1VJUHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVGV4dExpbmVSZWN0czpjbGlwcGlu
Z1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXNdKTsKKyAgICBpZiAoW2NsaXBwaW5nUmVjdFZh
bHVlc0luRnJhbWVDb29yZGluYXRlcyBjb3VudF0pCisgICAgICAgIHBhcmFtZXRlcnMgPSBhZG9w
dE5TKFtbVUlQcmV2aWV3UGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhUZXh0TGluZVJlY3RzOmNs
aXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcy5nZXQoKV0pOwogICAgIGVsc2UKICAg
ICAgICAgcGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSVByZXZpZXdQYXJhbWV0ZXJzIGFsbG9jXSBp
bml0XSk7CiAKQEAgLTk2MzMsMjMgKzk2MjEsMTUgQEAgLSAoVUlJbWFnZSAqKV9wcmVzZW50YXRp
b25TbmFwc2hvdEZvclByZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2wK
IAogLSAoTlNBcnJheSAqKV9wcmVzZW50YXRpb25SZWN0c0ZvclByZXZpZXdJdGVtQ29udHJvbGxl
cjooVUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgKiljb250cm9sbGVyCiB7Ci0gICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiByZWN0QXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRdKTsKLQogICAgIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9y
LmNvbnRlbnRJbWFnZSkgewotICAgICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdpbiA9IF9w
b3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZp
ZXdDb29yZGluYXRlcy5sb2NhdGlvbigpOwotICAgICAgICBmb3IgKFdlYkNvcmU6OkZsb2F0UmVj
dCYgcmVjdCA6IF9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IudGV4dFJlY3RzSW5C
b3VuZGluZ1JlY3RDb29yZGluYXRlcykgewotICAgICAgICAgICAgQ0dSZWN0IGNnUmVjdCA9IHJl
Y3Q7Ci0gICAgICAgICAgICBjZ1JlY3Qub3JpZ2luLnggKz0gb3JpZ2luLngoKTsKLSAgICAgICAg
ICAgIGNnUmVjdC5vcmlnaW4ueSArPSBvcmlnaW4ueSgpOwotICAgICAgICAgICAgW3JlY3RBcnJh
eSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OmNnUmVjdF1dOwotICAgICAgICB9
CisgICAgICAgIGF1dG8gb3JpZ2luID0gX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRv
ci50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLmxvY2F0aW9uKCk7CisgICAg
ICAgIHJldHVybiBjcmVhdGVOU0FycmF5KF9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0
b3IudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcywgWyZdIChDR1JlY3QgcmVjdCkg
eworICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpDR1JlY3RPZmZz
ZXQocmVjdCwgb3JpZ2luLngoKSwgb3JpZ2luLnkoKSldOworICAgICAgICB9KS5hdXRvcmVsZWFz
ZSgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0IGZsb2F0IG1hcmdpbkluUHggPSA0ICog
X3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgICAgIENHUmVjdCBjZ1JlY3QgPSBDR1Jl
Y3RJbnNldChfcG9zaXRpb25JbmZvcm1hdGlvbi5ib3VuZHMsIC1tYXJnaW5JblB4LCAtbWFyZ2lu
SW5QeCk7Ci0gICAgICAgIFtyZWN0QXJyYXkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENH
UmVjdDpjZ1JlY3RdXTsKKyAgICAgICAgZmxvYXQgbWFyZ2luSW5QeCA9IDQgKiBfcGFnZS0+ZGV2
aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgcmV0dXJuIEBbW05TVmFsdWUgdmFsdWVXaXRoQ0dS
ZWN0OkNHUmVjdEluc2V0KF9wb3NpdGlvbkluZm9ybWF0aW9uLmJvdW5kcywgLW1hcmdpbkluUHgs
IC1tYXJnaW5JblB4KV1dOwogICAgIH0KLQotICAgIHJldHVybiByZWN0QXJyYXkuYXV0b3JlbGVh
c2UoKTsKIH0KIAogLSAodm9pZClfcHJldmlld0l0ZW1Db250cm9sbGVyRGlkQ2FuY2VsUHJldmll
dzooVUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgKiljb250cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbQppbmRleCAzNmFiZGZkMjQ2
NWU0ZGZkNTEwMjQzZGY3ZjlhNzhjMTBiOTFhNzhiLi5jOGEwNmExYzdmMWI4M2UzNjI1OTZjNTM3
ZjhjYThmNThkMmNjMzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V0tUZXh0RmluZGVyQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
S1RleHRGaW5kZXJDbGllbnQubW0KQEAgLTI3NiwxOSArMjc2LDE3IEBAIC0gKHZvaWQpZGlkRmlu
ZFN0cmluZ01hdGNoZXNXaXRoUmVjdHM6KGNvbnN0IFZlY3RvcjxWZWN0b3I8V2ViQ29yZTo6SW50
UmVjdD4+JilyCiAgICAgaWYgKF9maW5kUmVwbHlDYWxsYmFja3MuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIHJlcGx5Q2FsbGJhY2sgPSBfZmluZFJlcGx5Q2FsbGJhY2tz
LnRha2VGaXJzdCgpOwotICAgIGF1dG8gbWF0Y2hDb3VudCA9IHJlY3RzRm9yTWF0Y2hlcy5zaXpl
KCk7Ci0gICAgYXV0byBtYXRjaE9iamVjdHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRXaXRoQ2FwYWNpdHk6bWF0Y2hDb3VudF0pOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtYXRjaENvdW50OyBpKyspIHsKLSAgICAgICAgUmV0YWluUHRyPE5TQXJyYXk+IG5z
TWF0Y2hSZWN0czsKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgYXV0byBtYXRjaE9iamVj
dHMgPSBjcmVhdGVOU0FycmF5KHJlY3RzRm9yTWF0Y2hlcywgWyZdIChhdXRvJiByZWN0cykgewor
ICAgICAgICBSZXRhaW5QdHI8TlNBcnJheT4gcmVjdHNBcnJheTsKICAgICAgICAgaWYgKF91c2VQ
bGF0Zm9ybUZpbmRVSSkKLSAgICAgICAgICAgIG5zTWF0Y2hSZWN0cyA9IGNyZWF0ZU5TQXJyYXko
cmVjdHNGb3JNYXRjaGVzW2ldKTsKKyAgICAgICAgICAgIHJlY3RzQXJyYXkgPSBjcmVhdGVOU0Fy
cmF5KHJlY3RzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbnNNYXRjaFJlY3RzID0gQFtd
OwotICAgICAgICBbbWF0Y2hPYmplY3RzIGFkZE9iamVjdDphZG9wdE5TKFtbV0tUZXh0RmluZGVy
TWF0Y2ggYWxsb2NdIGluaXRXaXRoQ2xpZW50OnNlbGYgdmlldzpfdmlldyBpbmRleDppIHJlY3Rz
Om5zTWF0Y2hSZWN0cy5nZXQoKV0pLmdldCgpXTsKLSAgICB9CisgICAgICAgICAgICByZWN0c0Fy
cmF5ID0gQFtdOworICAgICAgICByZXR1cm4gYWRvcHROUyhbW1dLVGV4dEZpbmRlck1hdGNoIGFs
bG9jXSBpbml0V2l0aENsaWVudDpzZWxmIHZpZXc6X3ZpZXcgaW5kZXg6aW5kZXgrKyByZWN0czpy
ZWN0c0FycmF5LmdldCgpXSk7CisgICAgfSk7CiAKLSAgICByZXBseUNhbGxiYWNrKG1hdGNoT2Jq
ZWN0cy5nZXQoKSwgZGlkV3JhcEFyb3VuZCk7CisgICAgX2ZpbmRSZXBseUNhbGxiYWNrcy50YWtl
Rmlyc3QoKShtYXRjaE9iamVjdHMuZ2V0KCksIGRpZFdyYXBBcm91bmQpOwogfQogCiAtICh2b2lk
KWRpZEdldEltYWdlRm9yTWF0Y2hSZXN1bHQ6KFdlYktpdDo6V2ViSW1hZ2UgKilpbWFnZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dElucHV0V2luZG93Q29u
dHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRJbnB1dFdpbmRv
d0NvbnRyb2xsZXIubW0KaW5kZXggZjY0OGY5NDA3MzVlNjVhZjk5NzcxMWM1Y2E1OTI4MjY3YmY1
OTdjYi4uMzUyNzVkZjhmZDdjY2M0MDVjNjczMmQxYzg4ZmMxOTQ3Y2UxYTYyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dElucHV0V2luZG93Q29udHJvbGxl
ci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tUZXh0SW5wdXRXaW5kb3dD
b250cm9sbGVyLm1tCkBAIC00MCwxMCArNDAsNyBAQCBAaW1wbGVtZW50YXRpb24gV0tUZXh0SW5w
dXRWaWV3CiAtIChOU0FycmF5ICopdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dAogewogICAg
IC8vIExldCBUU00ga25vdyB0aGF0IGEgYm90dG9tIGlucHV0IHdpbmRvdyB3b3VsZCBiZSBjcmVh
dGVkIGZvciBtYXJrZWQgdGV4dC4KLSAgICBOU0FycmF5ICpyZWd1bGFyQXR0cmlidXRlcyA9IFtz
dXBlciB2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0XTsKLSAgICBOU011dGFibGVBcnJheSAq
ZmxvYXRpbmdXaW5kb3dBdHRyaWJ1dGVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aEFycmF5
OnJlZ3VsYXJBdHRyaWJ1dGVzXTsKLSAgICBbZmxvYXRpbmdXaW5kb3dBdHRyaWJ1dGVzIGFkZE9i
amVjdDpAIl9fTlNVc2VzRmxvYXRpbmdJbnB1dFdpbmRvdyJdOwotICAgIHJldHVybiBmbG9hdGlu
Z1dpbmRvd0F0dHJpYnV0ZXM7CisgICAgcmV0dXJuIFtbc3VwZXIgdmFsaWRBdHRyaWJ1dGVzRm9y
TWFya2VkVGV4dF0gYXJyYXlCeUFkZGluZ09iamVjdDpAIl9fTlNVc2VzRmxvYXRpbmdJbnB1dFdp
bmRvdyJdOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lLm1tIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nl
c3NQbHVnSW5GcmFtZS5tbQppbmRleCBiOTZiYjg5YmEwYWIyZmVkMzY1YTdkZjBjNzFlNzZkNTI5
OWIwOTM1Li4wM2MyN2M0NTUzZGNmMDgzNDE3NDcxMmNkNzM2MzlmMDBjNmY4M2Y4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dL
V2ViUHJvY2Vzc1BsdWdJbkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW0KQEAgLTQx
LDYgKzQxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSW50UG9pbnQuaD4KICNpbXBvcnQgPFdlYkNv
cmUvTGlua0ljb25Db2xsZWN0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvTGlua0ljb25UeXBlLmg+
CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogQGltcGxlbWVudGF0aW9uIFdL
V2ViUHJvY2Vzc1BsdWdJbkZyYW1lIHsKICAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8V2ViS2l0OjpX
ZWJGcmFtZT4gX2ZyYW1lOwpAQCAtMTExLDE2ICsxMTIsMTQgQEAgLSAoX1dLRnJhbWVIYW5kbGUg
KiloYW5kbGUKIAogc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiBjb2xsZWN0SWNvbnMoV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lLCBPcHRpb25TZXQ8V2ViQ29yZTo6TGlua0ljb25UeXBlPiBpY29uVHlw
ZXMpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdKTsKLQotICAgIGlmIChmcmFtZSkgewotICAgICAgICBpZiAoYXV0byogZG9jdW1lbnQg
PSBmcmFtZS0+ZG9jdW1lbnQoKSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBpY29uIDogV2Vi
Q29yZTo6TGlua0ljb25Db2xsZWN0b3IoKmRvY3VtZW50KS5pY29uc09mVHlwZXMoaWNvblR5cGVz
KSkKLSAgICAgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDooTlNVUkwgKilpY29uLnVybF07
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybiBAW107CisgICAgYXV0byBkb2N1bWVudCA9IGZyYW1l
LT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBAW107Cisg
ICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoV2ViQ29yZTo6TGlua0ljb25Db2xsZWN0b3IoKmRvY3Vt
ZW50KS5pY29uc09mVHlwZXMoaWNvblR5cGVzKSwgW10gKGF1dG8mIGljb24pIC0+IE5TVVJMICog
eworICAgICAgICByZXR1cm4gaWNvbi51cmw7CisgICAgfSk7CiB9CiAKIC0gKE5TQXJyYXkgKilh
cHBsZVRvdWNoSWNvblVSTHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29u
dHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
bWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbQppbmRleCBi
OWFjNjEzMDQwNjVkYjZiNjUwZWI2MTQ3MDJmMzcwZGNiYzljNDY0Li4yY2Y0YWI1YjI3ZmZlNDQ1
OTE0ZDFmMWY3OGI4NjRjNWM2NGY0NzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29u
dGV4dENvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVy
Lm1tCkBAIC01MzIsOSArNTMyLDkgQEAgLSAodm9pZClfc2V0Rm9ybURlbGVnYXRlOihpZCA8V0tX
ZWJQcm9jZXNzUGx1Z0luRm9ybURlbGVnYXRlUHJpdmF0ZT4pZm9ybURlbGVnYXQKICAgICAgICAg
ICAgIGlmICghW2Zvcm1EZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJQ
cm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOmRpZEFzc29jaWF0ZUZvcm1Db250
cm9sczopXSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGF1dG8gY29u
dHJvbHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6
ZWxlbWVudHMuc2l6ZSgpXSk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQg
OiBlbGVtZW50cykKLSAgICAgICAgICAgICAgICBbY29udHJvbHMgYWRkT2JqZWN0OndyYXBwZXIo
KldlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZShlbGVtZW50Lmdl
dCgpKSldOworICAgICAgICAgICAgYXV0byBjb250cm9scyA9IGNyZWF0ZU5TQXJyYXkoZWxlbWVu
dHMsIFtdIChhdXRvJiBlbGVtZW50KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIo
KldlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZShlbGVtZW50Lmdl
dCgpKSk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybiBbZm9ybURlbGVnYXRl
IF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciBk
aWRBc3NvY2lhdGVGb3JtQ29udHJvbHM6Y29udHJvbHMuZ2V0KCldOwogICAgICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KaW5k
ZXggMWRlZjA5NDBiMWQyZGY0N2RhYTY2NTZkMWIyNmViZmRiODdmNDg4ZS4uNzYxNTMyMGJlM2Zi
MTQyNzkzYjJlYzZhZWYyYTJjMDkxNTE5MjljZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1v
dGUubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJU
cmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KQEAgLTM4LDYgKzM4LDcgQEAKICNpbXBv
cnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrT2Jq
Q0V4Y2VwdGlvbnMuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9j
b2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBz
dGF0aWMgTW9ub3RvbmljVGltZSBtZWRpYVRpbWVUb0N1cnJlbnRUaW1lKENGVGltZUludGVydmFs
IHQpCkBAIC03MTMsOCArNzE0LDcgQEAgc3RhdGljIHZvaWQgYWRkQW5pbWF0aW9uVG9MYXllcihD
QUxheWVyICpsYXllciwgUmVtb3RlTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG8KICAgICBSZXRh
aW5QdHI8Q0FQcm9wZXJ0eUFuaW1hdGlvbj4gY2FBbmltYXRpb247CiAgICAgc3dpdGNoIChwcm9w
ZXJ0aWVzLmFuaW1hdGlvblR5cGUpIHsKICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OkJh
c2ljOiB7Ci0gICAgICAgIFJldGFpblB0cjxDQUJhc2ljQW5pbWF0aW9uPiBiYXNpY0FuaW1hdGlv
bjsKLSAgICAgICAgYmFzaWNBbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25X
aXRoS2V5UGF0aDpwcm9wZXJ0aWVzLmtleVBhdGhdOworICAgICAgICBhdXRvIGJhc2ljQW5pbWF0
aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5r
ZXlQYXRoXTsKICAgICAgICAgCiAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmtleVZhbHVlcy5zaXpl
KCkgPiAxKSB7CiAgICAgICAgICAgICBbYmFzaWNBbmltYXRpb24gc2V0RnJvbVZhbHVlOmFuaW1h
dGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUocHJvcGVydGllcy5rZXlWYWx1ZXNbMF0pXTsKQEAg
LTcyOCwzOSArNzI4LDMxIEBAIHN0YXRpYyB2b2lkIGFkZEFuaW1hdGlvblRvTGF5ZXIoQ0FMYXll
ciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvCiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OktleWZyYW1lOiB7Ci0gICAg
ICAgIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW1hdGlvbjsKLSAg
ICAgICAga2V5ZnJhbWVBbmltYXRpb24gPSBbQ0FLZXlmcmFtZUFuaW1hdGlvbiBhbmltYXRpb25X
aXRoS2V5UGF0aDpwcm9wZXJ0aWVzLmtleVBhdGhdOworICAgICAgICBhdXRvIGtleWZyYW1lQW5p
bWF0aW9uID0gW0NBS2V5ZnJhbWVBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6cHJvcGVy
dGllcy5rZXlQYXRoXTsKIAogICAgICAgICBpZiAocHJvcGVydGllcy5rZXlWYWx1ZXMuc2l6ZSgp
KSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGtleWZyYW1lcyA9IGFk
b3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpwcm9wZXJ0aWVz
LmtleVZhbHVlcy5zaXplKCldKTsKLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdmFsdWUg
OiBwcm9wZXJ0aWVzLmtleVZhbHVlcykKLSAgICAgICAgICAgICAgICBba2V5ZnJhbWVzIGFkZE9i
amVjdDphbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKHZhbHVlKV07Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIFtrZXlmcmFtZUFuaW1hdGlvbiBzZXRWYWx1ZXM6a2V5ZnJhbWVzLmdl
dCgpXTsKKyAgICAgICAgICAgIFtrZXlmcmFtZUFuaW1hdGlvbiBzZXRWYWx1ZXM6Y3JlYXRlTlNB
cnJheShwcm9wZXJ0aWVzLmtleVZhbHVlcywgW10gKGF1dG8mIHZhbHVlKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUodmFsdWUpOworICAg
ICAgICAgICAgfSkuZ2V0KCldOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHByb3BlcnRpZXMu
a2V5VGltZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+
IGtleVRpbWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5OnByb3BlcnRpZXMua2V5VGltZXMuc2l6ZSgpXSk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8g
a2V5VGltZSA6IHByb3BlcnRpZXMua2V5VGltZXMpCi0gICAgICAgICAgICAgICAgW2tleVRpbWVz
IGFkZE9iamVjdDpAKGtleVRpbWUpXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgW2tleWZy
YW1lQW5pbWF0aW9uIHNldEtleVRpbWVzOmtleVRpbWVzLmdldCgpXTsKKyAgICAgICAgICAgIFtr
ZXlmcmFtZUFuaW1hdGlvbiBzZXRLZXlUaW1lczpjcmVhdGVOU0FycmF5KHByb3BlcnRpZXMua2V5
VGltZXMsIFtdIChhdXRvJiB0aW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEAodGltZSk7
CisgICAgICAgICAgICB9KS5nZXQoKV07CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocHJvcGVy
dGllcy50aW1pbmdGdW5jdGlvbnMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHRpbWluZ0Z1bmN0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhDYXBhY2l0eTpwcm9wZXJ0aWVzLnRpbWluZ0Z1bmN0aW9ucy5zaXplKCld
KTsKLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdGltaW5nRnVuY3Rpb24gOiBwcm9wZXJ0
aWVzLnRpbWluZ0Z1bmN0aW9ucykKLSAgICAgICAgICAgICAgICBbdGltaW5nRnVuY3Rpb25zIGFk
ZE9iamVjdDp0b0NBTWVkaWFUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbi5nZXQoKSwgcHJv
cGVydGllcy5yZXZlcnNlVGltaW5nRnVuY3Rpb25zKV07Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIFtrZXlmcmFtZUFuaW1hdGlvbiBzZXRUaW1pbmdGdW5jdGlvbnM6dGltaW5nRnVuY3Rpb25z
LmdldCgpXTsKKyAgICAgICAgICAgIFtrZXlmcmFtZUFuaW1hdGlvbiBzZXRUaW1pbmdGdW5jdGlv
bnM6Y3JlYXRlTlNBcnJheShwcm9wZXJ0aWVzLnRpbWluZ0Z1bmN0aW9ucywgWyZdIChhdXRvJiBm
dW5jdGlvbikgeworICAgICAgICAgICAgICAgIHJldHVybiB0b0NBTWVkaWFUaW1pbmdGdW5jdGlv
bihmdW5jdGlvbi5nZXQoKSwgcHJvcGVydGllcy5yZXZlcnNlVGltaW5nRnVuY3Rpb25zKTsKKyAg
ICAgICAgICAgIH0pLmdldCgpXTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2FBbmlt
YXRpb24gPSBrZXlmcmFtZUFuaW1hdGlvbjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6U3ByaW5nOiB7Ci0gICAgICAgIFJldGFpblB0cjxDQVNw
cmluZ0FuaW1hdGlvbj4gc3ByaW5nQW5pbWF0aW9uOwotICAgICAgICBzcHJpbmdBbmltYXRpb24g
PSBbQ0FTcHJpbmdBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQ
YXRoXTsKKyAgICAgICAgYXV0byBzcHJpbmdBbmltYXRpb24gPSBbQ0FTcHJpbmdBbmltYXRpb24g
YW5pbWF0aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChwcm9wZXJ0aWVzLmtleVZhbHVlcy5zaXplKCkgPiAxKSB7CiAgICAgICAgICAgICBb
c3ByaW5nQW5pbWF0aW9uIHNldEZyb21WYWx1ZTphbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZh
bHVlKHByb3BlcnRpZXMua2V5VmFsdWVzWzBdKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5t
bSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlX
ZWJQYWdlT2JqZWN0TWFjLm1tCmluZGV4IGEwOWZmNjEzN2E5OGI0MDNhNTA2Njk5NTM4NjZkNzNj
MGY2NjIxMzguLjI2Mjc1ZDdiNjdiNTlhZDk4ZWJlZmViZWViODAyMDkzMWQzODk5OGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxp
dHlXZWJQYWdlT2JqZWN0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCkBAIC00Nyw2ICs0Nyw3
IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhci5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9O
U0FjY2Vzc2liaWxpdHlTUEkuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgog
CiBuYW1lc3BhY2UgYXggPSBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5OwogCkBAIC05NywxNSArOTgs
MTUgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAjZW5kaWYKIAogICAg
IGlkIG5hbWVzID0gYXg6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxSZXRhaW5QdHI8aWQ+
PihbUFJPVEVDVEVEX1NFTEZdICgpIC0+IFJldGFpblB0cjxpZD4gewotICAgICAgICBOU011dGFi
bGVBcnJheSAqbmFtZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgICAgICBpZiAoIXBy
b3RlY3RlZFNlbGYtPm1fcGFnZSkKLSAgICAgICAgICAgIHJldHVybiBuYW1lczsKKyAgICAgICAg
YXV0byBwYWdlID0gcHJvdGVjdGVkU2VsZi0+bV9wYWdlOworICAgICAgICBpZiAoIXBhZ2UpCisg
ICAgICAgICAgICByZXR1cm4gQFtdOwogCi0gICAgICAgIGlmIChhdXRvKiBjb3JlUGFnZSA9IHBy
b3RlY3RlZFNlbGYtPm1fcGFnZS0+Y29yZVBhZ2UoKSkgewotICAgICAgICAgICAgZm9yIChhdXRv
JiBuYW1lIDogY29yZVBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlc05hbWVzKHRydWUpKQotICAgICAgICAgICAgICAgIFtuYW1lcyBhZGRPYmpl
Y3Q6KE5TU3RyaW5nICopbmFtZV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5hbWVzOwor
ICAgICAgICBhdXRvIGNvcmVQYWdlID0gcGFnZS0+Y29yZVBhZ2UoKTsKKyAgICAgICAgaWYgKCFj
b3JlUGFnZSkKKyAgICAgICAgICAgIHJldHVybiBAW107CisKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZU5TQXJyYXkoY29yZVBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmNvcHlBY2Nlc3NpYmls
aXR5QXR0cmlidXRlc05hbWVzKHRydWUpKTsKICAgICB9KS5hdXRvcmVsZWFzZSgpOwogCiAjaWYg
RU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCmluZGV4IGU4MDdjNjcwZDIwZDkw
NDQ1ZmViZDk1NjIwMzBlMTk4MGZjMmU3MmMuLjk0MWExOWI3YTViODc1NzUwZDlmMWZmNTBmMWNl
ZTRkYmVkMzQ1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9X
ZWJQcm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dl
YlByb2Nlc3NDb2NvYS5tbQpAQCAtNDYxLDE0ICs0NjEsMTIgQEAgdm9pZCBXZWJQcm9jZXNzOjpy
ZWdpc3RlcldpdGhTdGF0ZUR1bXBlcigpCiAgICAgICAgICAgICAgICAgW3N0YXRlRGljdCBzZXRP
YmplY3Q6anNPYmplY3RDb3VudHMuZ2V0KCkgZm9yS2V5OkAiSmF2YVNjcmlwdCBPYmplY3QgQ291
bnRzIl07CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGF1dG8gcGFnZUxvYWRUaW1lcyA9
IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgICAgICAgICAgZm9y
IChhdXRvJiBwYWdlIDogbV9wYWdlTWFwLnZhbHVlcygpKSB7CisgICAgICAgICAgICBhdXRvIHBh
Z2VMb2FkVGltZXMgPSBjcmVhdGVOU0FycmF5KG1fcGFnZU1hcC52YWx1ZXMoKSwgW10gKGF1dG8m
IHBhZ2UpIC0+IGlkIHsKICAgICAgICAgICAgICAgICBpZiAocGFnZS0+dXNlc0VwaGVtZXJhbFNl
c3Npb24oKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBuaWw7CiAKLSAgICAgICAgICAgICAgICBOU0RhdGUqIGRhdGUgPSBbTlNEYXRl
IGRhdGVXaXRoVGltZUludGVydmFsU2luY2UxOTcwOnBhZ2UtPmxvYWRDb21taXRUaW1lKCkuc2Vj
b25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCldOwotICAgICAgICAgICAgICAgIFtwYWdlTG9hZFRp
bWVzIGFkZE9iamVjdDpkYXRlXTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gW05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDpwYWdlLT5sb2FkQ29tbWl0
VGltZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpXTsKKyAgICAgICAgICAgIH0pOwog
CiAgICAgICAgICAgICAvLyBBZGRpbmcgYW4gZW1wdHkgYXJyYXkgdG8gdGhlIHByb2Nlc3Mgc3Rh
dGUgbWF5IHByb3ZpZGUgYW4KICAgICAgICAgICAgIC8vIGluZGljYXRpb24gb2YgdGhlIGV4aXN0
YW5jZSBvZiBwcml2YXRlIHNlc3Npb25zLCB3aGljaCB3ZSdkIGxpa2UKQEAgLTYyOSwyMCArNjI3
LDIxIEBAIHN0YXRpYyBOU1VSTCAqb3JpZ2luKFdlYlBhZ2UmIHBhZ2UpCiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKE1BQykKKwogc3RhdGljIFJldGFpblB0cjxOU0FycmF5PE5TU3RyaW5nICo+PiBh
Y3RpdmVQYWdlc09yaWdpbnMoY29uc3QgSGFzaE1hcDxQYWdlSWRlbnRpZmllciwgUmVmUHRyPFdl
YlBhZ2U+PiYgcGFnZU1hcCkKIHsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk8TlNTdHJp
bmcgKj4+IGFjdGl2ZU9yaWdpbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRdKTsKLQotICAgIGZvciAoYXV0byYgcGFnZSA6IHBhZ2VNYXAudmFsdWVzKCkpIHsKKyAgICBy
ZXR1cm4gY3JlYXRlTlNBcnJheShwYWdlTWFwLnZhbHVlcygpLCBbXSAoYXV0byYgcGFnZSkgLT4g
TlNTdHJpbmcgKiB7CiAgICAgICAgIGlmIChwYWdlLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpKQot
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAg
IGlmIChOU1VSTCAqb3JpZ2luQXNVUkwgPSBvcmlnaW4oKnBhZ2UpKQotICAgICAgICAgICAgW2Fj
dGl2ZU9yaWdpbnMgYWRkT2JqZWN0OldURjo6dXNlclZpc2libGVTdHJpbmcob3JpZ2luQXNVUkwp
XTsKLSAgICB9CisgICAgICAgIE5TVVJMICpvcmlnaW5Bc1VSTCA9IG9yaWdpbigqcGFnZSk7Cisg
ICAgICAgIGlmICghb3JpZ2luQXNVUkwpCisgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAg
cmV0dXJuIGFjdGl2ZU9yaWdpbnM7CisgICAgICAgIHJldHVybiBXVEY6OnVzZXJWaXNpYmxlU3Ry
aW5nKG9yaWdpbkFzVVJMKTsKKyAgICB9KTsKIH0KKwogI2VuZGlmCiAKIHZvaWQgV2ViUHJvY2Vz
czo6dXBkYXRlQWN0aXZlUGFnZXMoY29uc3QgU3RyaW5nJiBvdmVycmlkZURpc3BsYXlOYW1lKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUlPUy5tbQppbmRleCA0NjE3NjhmNzBkMWJlYjI1Y2JiYzAyMTRkNGQ1YzNkNmY2N2E5MzBhLi5m
YWUzNGQxMjJkMjY2MzNhMGZkMTdkZjhlOWY2MzgyYjYzYTQ4ZWE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQpAQCAt
MjcsNiArMjcsMTYgQEAKIAogI2ltcG9ydCAiV2ViRnJhbWVJT1MuaCIKIAorI2ltcG9ydCAiRE9N
LmgiCisjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVJhbmdlLmgiCisj
aW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCisjaW1wb3J0ICJET01VSUtpdEV4dGVuc2lvbnMu
aCIKKyNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlNlbGVjdGlvblJl
Y3QuaCIKKyNpbXBvcnQgIldlYlVJS2l0RGVsZWdhdGUuaCIKKyNpbXBvcnQgIldlYlZpZXdQcml2
YXRlLmgiCisjaW1wb3J0ICJXZWJWaXNpYmxlUG9zaXRpb25JbnRlcm5hbC5oIgogI2ltcG9ydCA8
V2ViQ29yZS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRWRp
dGluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4KQEAgLTQwLDcgKzUwLDYgQEAKICNp
bXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Qb3NpdGlv
bi5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJP
YmplY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVGV4dC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlbGVjdGlvblJl
Y3QuaD4KQEAgLTQ5LDIwICs1OCw4IEBACiAjaW1wb3J0IDxXZWJDb3JlL1RleHRGbGFncy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9WaXNpYmxlUG9zaXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvVmlz
aWJsZVVuaXRzLmg+Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NLmg+Ci0jaW1wb3J0IDxXZWJL
aXRMZWdhY3kvRE9NUmFuZ2UuaD4KLSNpbXBvcnQgPFdlYktpdExlZ2FjeS9ET01VSUtpdEV4dGVu
c2lvbnMuaD4KLSNpbXBvcnQgPFdlYktpdExlZ2FjeS9XZWJTZWxlY3Rpb25SZWN0Lmg+Ci0jaW1w
b3J0IDxXZWJLaXRMZWdhY3kvV2ViVmlzaWJsZVBvc2l0aW9uLmg+CiAjaW1wb3J0IDx1bmljb2Rl
L3VjaGFyLmg+Ci0KLSNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NUmFu
Z2VJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2Vi
VUlLaXREZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV2ViVmlld1ByaXZhdGUuaCIKLSNpbXBvcnQgIldl
YlZpc2libGVQb3NpdGlvbi5oIgotI2ltcG9ydCAiV2ViVmlzaWJsZVBvc2l0aW9uSW50ZXJuYWwu
aCIKKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIApAQCAtMjE0LDEzICsyMTEsMTAgQEAgLSAoTlNBcnJheSAqKXNlbGVjdGlvblJl
Y3RzRm9yQ29yZVJhbmdlOihSYW5nZSAqKXJhbmdlCiAgICAgCiAgICAgVmVjdG9yPFNlbGVjdGlv
blJlY3Q+IHJlY3RzOwogICAgIHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocmVjdHMpOwot
ICAgIHVuc2lnbmVkIHNpemUgPSByZWN0cy5zaXplKCk7CiAgICAgCi0gICAgTlNNdXRhYmxlQXJy
YXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIFNlbGVjdGlv
blJlY3QgJmNvcmVSZWN0ID0gcmVjdHNbaV07Ci0gICAgICAgIFdlYlNlbGVjdGlvblJlY3QgKndl
YlJlY3QgPSBbV2ViU2VsZWN0aW9uUmVjdCBzZWxlY3Rpb25SZWN0XTsKLSAgICAgICAgd2ViUmVj
dC5yZWN0ID0gc3RhdGljX2Nhc3Q8Q0dSZWN0Pihjb3JlUmVjdC5yZWN0KCkpOworICAgIHJldHVy
biBjcmVhdGVOU0FycmF5KHJlY3RzLCBbXSAoYXV0byYgY29yZVJlY3QpIHsKKyAgICAgICAgYXV0
byB3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVjdF07CisgICAgICAgIHdl
YlJlY3QucmVjdCA9IGNvcmVSZWN0LnJlY3QoKTsKICAgICAgICAgd2ViUmVjdC53cml0aW5nRGly
ZWN0aW9uID0gY29yZVJlY3QuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gV0tX
cml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVm
dDsKICAgICAgICAgd2ViUmVjdC5pc0xpbmVCcmVhayA9IGNvcmVSZWN0LmlzTGluZUJyZWFrKCk7
CiAgICAgICAgIHdlYlJlY3QuaXNGaXJzdE9uTGluZSA9IGNvcmVSZWN0LmlzRmlyc3RPbkxpbmUo
KTsKQEAgLTIyOSwxMCArMjIzLDggQEAgLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yQ29y
ZVJhbmdlOihSYW5nZSAqKXJhbmdlCiAgICAgICAgIHdlYlJlY3QuY29udGFpbnNFbmQgPSBjb3Jl
UmVjdC5jb250YWluc0VuZCgpOwogICAgICAgICB3ZWJSZWN0LmlzSW5GaXhlZFBvc2l0aW9uID0g
Y29yZVJlY3QuaXNJbkZpeGVkUG9zaXRpb24oKTsKICAgICAgICAgd2ViUmVjdC5pc0hvcml6b250
YWwgPSBjb3JlUmVjdC5pc0hvcml6b250YWwoKTsKLSAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6
d2ViUmVjdF07Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7ICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHdlYlJlY3Q7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNBcnJh
eSAqKXNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6KERPTVJhbmdlICopZG9tUmFuZ2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0gYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NLm1tCmluZGV4IGQ4YWY2NzhkYWYwODg4Mjg0YWJkZGMxY2RiMTBhZGVi
MTRiNzY3NGYuLmRmMGI1MjA5MTFmZTE4NWNiOTM4ZmYxZjdjOTk3ZWFmZWEyNzBmM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQpAQCAtMTg3LDEzICsxODcsOSBAQCBzdGF0aWMgV0tR
dWFkIHdrUXVhZEZyb21GbG9hdFF1YWQoY29uc3QgRmxvYXRRdWFkJiBpblF1YWQpCiAKIHN0YXRp
YyBOU0FycmF5ICpraXQoY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQogewotICAgIE5T
TXV0YWJsZUFycmF5ICphcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpx
dWFkcy5zaXplKCldOwotICAgIGZvciAoYXV0byYgcXVhZCA6IHF1YWRzKSB7Ci0gICAgICAgIFdL
UXVhZE9iamVjdCAqcXVhZE9iamVjdCA9IFtbV0tRdWFkT2JqZWN0IGFsbG9jXSBpbml0V2l0aFF1
YWQ6d2tRdWFkRnJvbUZsb2F0UXVhZChxdWFkKV07Ci0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6
cXVhZE9iamVjdF07Ci0gICAgICAgIFtxdWFkT2JqZWN0IHJlbGVhc2VdOwotICAgIH0KLSAgICBy
ZXR1cm4gYXJyYXk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocXVhZHMsIFtdIChhdXRvJiBx
dWFkKSB7CisgICAgICAgIHJldHVybiBhZG9wdE5TKFtbV0tRdWFkT2JqZWN0IGFsbG9jXSBpbml0
V2l0aFF1YWQ6d2tRdWFkRnJvbUZsb2F0UXVhZChxdWFkKV0pOworICAgIH0pLmF1dG9yZWxlYXNl
KCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgV0tRdWFkIHplcm9RdWFkKCkKQEAgLTU0Miw4ICs1Mzgs
NiBAQCAtICh2b2lkKWdldFByZXZpZXdTbmFwc2hvdEltYWdlOihDR0ltYWdlUmVmKiljZ0ltYWdl
IGFuZFJlY3RzOihOU0FycmF5ICoqKXJlY3RzCiAgICAgICAgICAgICAqY2dJbWFnZSA9IGltYWdl
LT5uYXRpdmVJbWFnZSgpLmF1dG9yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiByZWN0QXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdKTsKLQogICAgIGlmICghKmNnSW1hZ2UpIHsKICAgICAgICAgaWYgKGF1dG8qIHJlbmRl
cmVyID0gbm9kZS5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdC
b3g7CkBAIC01NTEsMjcgKzU0NSwxOCBAQCAtICh2b2lkKWdldFByZXZpZXdTbmFwc2hvdEltYWdl
OihDR0ltYWdlUmVmKiljZ0ltYWdlIGFuZFJlY3RzOihOU0FycmF5ICoqKXJlY3RzCiAgICAgICAg
ICAgICAgICAgYm91bmRpbmdCb3ggPSBkb3duY2FzdDxSZW5kZXJJbWFnZT4oKnJlbmRlcmVyKS5h
YnNvbHV0ZUNvbnRlbnRRdWFkKCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBib3VuZGluZ0JveCA9IHJlbmRlcmVyLT5hYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgpOwotCiAgICAgICAgICAgICBib3VuZGluZ0JveC5pbmZsYXRlKG1hcmdp
bik7Ci0KLSAgICAgICAgICAgIENHUmVjdCBjZ1JlY3QgPSBub2RlLmRvY3VtZW50KCkuZnJhbWUo
KS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdCb3gp
KTsKLSAgICAgICAgICAgIFtyZWN0QXJyYXkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlOiZjZ1Jl
Y3Qgd2l0aE9iakNUeXBlOkBlbmNvZGUoQ0dSZWN0KV1dOwotCi0gICAgICAgICAgICAqcmVjdHMg
PSByZWN0QXJyYXkuYXV0b3JlbGVhc2UoKTsKKyAgICAgICAgICAgICpyZWN0cyA9IEBbbWFrZU5T
QXJyYXlFbGVtZW50KG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpLT52aWV3KCktPmNvbnRlbnRzVG9X
aW5kb3coZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ0JveCkpKV07CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIEZsb2F0UG9pbnQgb3JpZ2luID0gdGV4dEluZGljYXRv
ci0+dGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygpLmxvY2F0aW9uKCk7Ci0g
ICAgZm9yIChjb25zdCBGbG9hdFJlY3QmIHJlY3QgOiB0ZXh0SW5kaWNhdG9yLT50ZXh0UmVjdHNJ
bkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCkpIHsKLSAgICAgICAgQ0dSZWN0IGNnUmVjdCA9IHJl
Y3Q7Ci0gICAgICAgIGNnUmVjdC5vcmlnaW4ueCArPSBvcmlnaW4ueCgpOwotICAgICAgICBjZ1Jl
Y3Qub3JpZ2luLnkgKz0gb3JpZ2luLnkoKTsKLSAgICAgICAgY2dSZWN0ID0gbm9kZS5kb2N1bWVu
dCgpLmZyYW1lKCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KGNn
UmVjdCkpOwotICAgICAgICBbcmVjdEFycmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZTomY2dS
ZWN0IHdpdGhPYmpDVHlwZTpAZW5jb2RlKENHUmVjdCldXTsKLSAgICB9Ci0KLSAgICAqcmVjdHMg
PSByZWN0QXJyYXkuYXV0b3JlbGVhc2UoKTsKKyAgICAqcmVjdHMgPSBjcmVhdGVOU0FycmF5KHRl
eHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKSwgWyZdIChD
R1JlY3QgcmVjdCkgeworICAgICAgICByZWN0Lm9yaWdpbi54ICs9IG9yaWdpbi54KCk7CisgICAg
ICAgIHJlY3Qub3JpZ2luLnkgKz0gb3JpZ2luLnkoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VOU0Fy
cmF5RWxlbWVudChub2RlLmRvY3VtZW50KCkuZnJhbWUoKS0+dmlldygpLT5jb250ZW50c1RvV2lu
ZG93KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpKTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQog
CiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L1dlYkJh
Y2tGb3J3YXJkTGlzdC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViQmFj
a0ZvcndhcmRMaXN0Lm1tCmluZGV4IDhiOTk0ZWQyZDAwNzA2ZGQ4ZTRlZDZiMjJiNmIzYjdlOTg0
NWY2MzkuLmIwOWM4ZWY1ZTQ4ZGRhMzFkYTNmM2Y4ZGMyNjY5NmEwMTY4ZWExOTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0
Lm1tCkBAIC01MCw2ICs1MCw3IEBACiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNp
bXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW1w
b3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogdHlwZWRlZiBIYXNoTWFwPEJhY2tGb3J3
YXJkTGlzdCosIFdlYkJhY2tGb3J3YXJkTGlzdCo+IEJhY2tGb3J3YXJkTGlzdE1hcDsKIApAQCAt
MTUxLDQ5ICsxNTIsMzggQEAgLSAodm9pZClyZW1vdmVJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWl0
ZW0KIAogLy8gRklYTUU6IE1vdmUgaW50byBXZWJDb3JlIHRoZSBjb2RlIHRoYXQgZGVhbHMgZGly
ZWN0bHkgd2l0aCBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QuCiAKLSNkZWZpbmUgV2ViQmFja0Zv
cndhcmRMaXN0RGljdGlvbmFyeUVudHJpZXNLZXkgQCJlbnRyaWVzIgotI2RlZmluZSBXZWJCYWNr
Rm9yd2FyZExpc3REaWN0aW9uYXJ5Q2FwYWNpdHlLZXkgQCJjYXBhY2l0eSIKLSNkZWZpbmUgV2Vi
QmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUN1cnJlbnRLZXkgQCJjdXJyZW50IgorY29uc3RleHBy
IGF1dG8gV2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUVudHJpZXNLZXkgPSBAImVudHJpZXMi
OworY29uc3RleHByIGF1dG8gV2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUNhcGFjaXR5S2V5
ID0gQCJjYXBhY2l0eSI7Citjb25zdGV4cHIgYXV0byBXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9u
YXJ5Q3VycmVudEtleSA9IEAiY3VycmVudCI7CiAKIC0gKE5TRGljdGlvbmFyeSAqKWRpY3Rpb25h
cnlSZXByZXNlbnRhdGlvbgogewotICAgIEJhY2tGb3J3YXJkTGlzdCAqY29yZUJGTGlzdCA9IGNv
cmUoc2VsZik7Ci0KLSAgICBhdXRvJiBoaXN0b3J5SXRlbXMgPSBjb3JlQkZMaXN0LT5lbnRyaWVz
KCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGhpc3RvcnlJdGVtcy5zaXplKCk7Ci0gICAgTlNNdXRh
YmxlQXJyYXkgKmVudHJpZXNBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRo
Q2FwYWNpdHk6c2l6ZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgW2VudHJpZXNBcnJheSBhZGRPYmplY3Q6W2tpdChjb25zdF9jYXN0PFdlYkNvcmU6
Okhpc3RvcnlJdGVtKj4oaGlzdG9yeUl0ZW1zW2ldLnB0cigpKSkgZGljdGlvbmFyeVJlcHJlc2Vu
dGF0aW9uSW5jbHVkaW5nQ2hpbGRyZW46Tk9dXTsKLQotICAgIE5TRGljdGlvbmFyeSAqZGljdGlv
bmFyeSA9IEB7Ci0gICAgICAgIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlFbnRyaWVzS2V5
OiBlbnRyaWVzQXJyYXksCi0gICAgICAgIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlDdXJy
ZW50S2V5OiBAKGNvcmVCRkxpc3QtPmN1cnJlbnQoKSksCi0gICAgICAgIFdlYkJhY2tGb3J3YXJk
TGlzdERpY3Rpb25hcnlDYXBhY2l0eUtleTogQChjb3JlQkZMaXN0LT5jYXBhY2l0eSgpKSwKKyAg
ICBhdXRvJiBsaXN0ID0gKmNvcmUoc2VsZik7CisgICAgYXV0byBlbnRyaWVzID0gY3JlYXRlTlNB
cnJheShsaXN0LmVudHJpZXMoKSwgW10gKGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIFtr
aXQoY29uc3RfY2FzdDxXZWJDb3JlOjpIaXN0b3J5SXRlbSo+KGl0ZW0ucHRyKCkpKSBkaWN0aW9u
YXJ5UmVwcmVzZW50YXRpb25JbmNsdWRpbmdDaGlsZHJlbjpOT107CisgICAgfSk7CisgICAgcmV0
dXJuIEB7CisgICAgICAgIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlFbnRyaWVzS2V5OiBl
bnRyaWVzLmdldCgpLAorICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5Q3VycmVu
dEtleTogQChsaXN0LmN1cnJlbnQoKSksCisgICAgICAgIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rp
b25hcnlDYXBhY2l0eUtleTogQChsaXN0LmNhcGFjaXR5KCkpLAogICAgIH07Ci0KLSAgICBbZW50
cmllc0FycmF5IHJlbGVhc2VdOwotCi0gICAgcmV0dXJuIGRpY3Rpb25hcnk7CiB9CiAKIC0gKHZv
aWQpc2V0VG9NYXRjaERpY3Rpb25hcnlSZXByZXNlbnRhdGlvbjooTlNEaWN0aW9uYXJ5ICopZGlj
dGlvbmFyeQogewotICAgIEJhY2tGb3J3YXJkTGlzdCAqY29yZUJGTGlzdCA9IGNvcmUoc2VsZik7
Ci0gICAgCi0gICAgY29yZUJGTGlzdC0+c2V0Q2FwYWNpdHkoW1tkaWN0aW9uYXJ5IG9iamVjdEZv
cktleTpXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5Q2FwYWNpdHlLZXldIGludFZhbHVlXSk7
Ci0gICAgCi0gICAgZm9yIChOU0RpY3Rpb25hcnkgKml0ZW1EaWN0aW9uYXJ5IGluIFtkaWN0aW9u
YXJ5IG9iamVjdEZvcktleTpXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5RW50cmllc0tleV0p
IHsKLSAgICAgICAgV2ViSGlzdG9yeUl0ZW0gKml0ZW0gPSBbW1dlYkhpc3RvcnlJdGVtIGFsbG9j
XSBpbml0RnJvbURpY3Rpb25hcnlSZXByZXNlbnRhdGlvbjppdGVtRGljdGlvbmFyeV07Ci0gICAg
ICAgIGNvcmVCRkxpc3QtPmFkZEl0ZW0oKmNvcmUoaXRlbSkpOwotICAgICAgICBbaXRlbSByZWxl
YXNlXTsKLSAgICB9CisgICAgYXV0byYgbGlzdCA9ICpjb3JlKHNlbGYpOworCisgICAgbGlzdC5z
ZXRDYXBhY2l0eShbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYkJhY2tGb3J3YXJkTGlzdERp
Y3Rpb25hcnlDYXBhY2l0eUtleV0gdW5zaWduZWRJbnRWYWx1ZV0pOworICAgIGZvciAoTlNEaWN0
aW9uYXJ5ICppdGVtRGljdGlvbmFyeSBpbiBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6V2ViQmFj
a0ZvcndhcmRMaXN0RGljdGlvbmFyeUVudHJpZXNLZXldKQorICAgICAgICBsaXN0LmFkZEl0ZW0o
KmNvcmUoYWRvcHROUyhbW1dlYkhpc3RvcnlJdGVtIGFsbG9jXSBpbml0RnJvbURpY3Rpb25hcnlS
ZXByZXNlbnRhdGlvbjppdGVtRGljdGlvbmFyeV0pLmdldCgpKSk7CiAKICAgICB1bnNpZ25lZCBj
dXJyZW50SW5kZXggPSBbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYkJhY2tGb3J3YXJkTGlz
dERpY3Rpb25hcnlDdXJyZW50S2V5XSB1bnNpZ25lZEludFZhbHVlXTsKLSAgICBzaXplX3QgbGlz
dFNpemUgPSBjb3JlQkZMaXN0LT5lbnRyaWVzKCkuc2l6ZSgpOworICAgIHNpemVfdCBsaXN0U2l6
ZSA9IGxpc3QuZW50cmllcygpLnNpemUoKTsKICAgICBpZiAoY3VycmVudEluZGV4ID49IGxpc3RT
aXplKQogICAgICAgICBjdXJyZW50SW5kZXggPSBsaXN0U2l6ZSAtIDE7Ci0gICAgY29yZUJGTGlz
dC0+c2V0Q3VycmVudChjdXJyZW50SW5kZXgpOworICAgIGxpc3Quc2V0Q3VycmVudChjdXJyZW50
SW5kZXgpOwogfQorCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogLSAoQk9PTClj
b250YWluc0l0ZW06KFdlYkhpc3RvcnlJdGVtICopaXRlbQpAQCAtMjM1LDIyICsyMjUsMTEgQEAg
LSAoV2ViSGlzdG9yeUl0ZW0gKilmb3J3YXJkSXRlbQogICAgIHJldHVybiBbW2tpdChjb3JlKHNl
bGYpLT5mb3J3YXJkSXRlbSgpLmdldCgpKSByZXRhaW5dIGF1dG9yZWxlYXNlXTsKIH0KIAotc3Rh
dGljIE5TQXJyYXkqIHZlY3RvclRvTlNBcnJheShWZWN0b3I8UmVmPFdlYkNvcmU6Okhpc3RvcnlJ
dGVtPj4mIGxpc3QpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGxpc3Quc2l6ZSgpOwotICAgIE5T
TXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTpzaXplXSBhdXRvcmVsZWFzZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkKLSAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6a2l0KGxpc3RbaV0ucHRyKCkp
XTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBib29sIGJ1bXBlckNhckJhY2tG
b3J3YXJkSGFja05lZWRlZCgpIAorc3RhdGljIGJvb2wgYnVtcGVyQ2FyQmFja0ZvcndhcmRIYWNr
TmVlZGVkKCkKIHsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgYm9vbCBo
YWNrTmVlZGVkID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNF
cXVhbFRvU3RyaW5nOkAiY29tLmZyZWV2ZXJzZS5idW1wZXJjYXIiXSAmJiAKLSAgICAgICAgIVdl
YktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX0JVTVBFUkNB
Ul9CQUNLX0ZPUldBUkRfUVVJUkspOwotCisgICAgc3RhdGljIGJvb2wgaGFja05lZWRlZCA9IFtb
W05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpA
ImNvbS5mcmVldmVyc2UuYnVtcGVyY2FyIl0KKyAgICAgICAgJiYgIVdlYktpdExpbmtlZE9uT3JB
ZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX0JVTVBFUkNBUl9CQUNLX0ZPUldBUkRf
UVVJUkspOwogICAgIHJldHVybiBoYWNrTmVlZGVkOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7
CkBAIC0yNjEsMzAgKzI0MCwyOCBAQCAtIChOU0FycmF5ICopYmFja0xpc3RXaXRoTGltaXQ6KGlu
dClsaW1pdAogewogICAgIFZlY3RvcjxSZWY8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+PiBsaXN0Owog
ICAgIGNvcmUoc2VsZiktPmJhY2tMaXN0V2l0aExpbWl0KGxpbWl0LCBsaXN0KTsKLSAgICBOU0Fy
cmF5ICpyZXN1bHQgPSB2ZWN0b3JUb05TQXJyYXkobGlzdCk7Ci0gICAgCisgICAgYXV0byByZXN1
bHQgPSBjcmVhdGVOU0FycmF5KGxpc3QsIFtdIChhdXRvJiBpdGVtKSB7CisgICAgICAgIHJldHVy
biBraXQoaXRlbS5wdHIoKSk7CisgICAgfSk7CiAgICAgaWYgKGJ1bXBlckNhckJhY2tGb3J3YXJk
SGFja05lZWRlZCgpKSB7Ci0gICAgICAgIHN0YXRpYyBOU0FycmF5ICpsYXN0QmFja0xpc3RBcnJh
eSA9IG5pbDsKLSAgICAgICAgW2xhc3RCYWNrTGlzdEFycmF5IHJlbGVhc2VdOwotICAgICAgICBs
YXN0QmFja0xpc3RBcnJheSA9IFtyZXN1bHQgcmV0YWluXTsKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFJldGFpblB0cjxOU0FycmF5Pj4gbGFzdEJhY2tMaXN0QXJyYXk7CisgICAgICAg
IGxhc3RCYWNrTGlzdEFycmF5LmdldCgpID0gcmVzdWx0OwogICAgIH0KLSAgICAKLSAgICByZXR1
cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNB
cnJheSAqKWZvcndhcmRMaXN0V2l0aExpbWl0OihpbnQpbGltaXQKIHsKICAgICBWZWN0b3I8UmVm
PFdlYkNvcmU6Okhpc3RvcnlJdGVtPj4gbGlzdDsKICAgICBjb3JlKHNlbGYpLT5mb3J3YXJkTGlz
dFdpdGhMaW1pdChsaW1pdCwgbGlzdCk7Ci0gICAgTlNBcnJheSAqcmVzdWx0ID0gdmVjdG9yVG9O
U0FycmF5KGxpc3QpOwotICAgIAorICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTlNBcnJheShsaXN0
LCBbXSAoYXV0byYgaXRlbSkgeworICAgICAgICByZXR1cm4ga2l0KGl0ZW0ucHRyKCkpOworICAg
IH0pOwogICAgIGlmIChidW1wZXJDYXJCYWNrRm9yd2FyZEhhY2tOZWVkZWQoKSkgewotICAgICAg
ICBzdGF0aWMgTlNBcnJheSAqbGFzdEZvcndhcmRMaXN0QXJyYXkgPSBuaWw7Ci0gICAgICAgIFts
YXN0Rm9yd2FyZExpc3RBcnJheSByZWxlYXNlXTsKLSAgICAgICAgbGFzdEZvcndhcmRMaXN0QXJy
YXkgPSBbcmVzdWx0IHJldGFpbl07CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRh
aW5QdHI8TlNBcnJheT4+IGxhc3RGb3J3YXJkTGlzdEFycmF5OworICAgICAgICBsYXN0Rm9yd2Fy
ZExpc3RBcnJheS5nZXQoKSA9IHJlc3VsdDsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKGludCljYXBhY2l0
eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5
SXRlbS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW0u
bW0KaW5kZXggZGZhY2IzN2QxMDkzODVjZGE2MjU3MWIzZDAzZjM1YjliOTRlNjUyNS4uMzE1NTkx
MGJlMTM0NTIyNDNhNTE2MmEyMWU5MTI2MjA3OGViY2E1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtLm1tCkBAIC0yNTgsMTAgKzI1OCw4
IEBAIC0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KIEhpc3RvcnlJdGVtKiBjb3JlKFdlYkhpc3Rv
cnlJdGVtICppdGVtKQogewogICAgIGlmICghaXRlbSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEFTU0VSVChoaXN0b3J5SXRlbVdyYXBwZXJz
KCkuZ2V0KGNvcmUoaXRlbS0+X3ByaXZhdGUpKSA9PSBpdGVtKTsKLQogICAgIHJldHVybiBjb3Jl
KGl0ZW0tPl9wcml2YXRlKTsKIH0KIApAQCAtMjY5LDExICsyNjcsOCBAQCBXZWJIaXN0b3J5SXRl
bSAqa2l0KEhpc3RvcnlJdGVtKiBpdGVtKQogewogICAgIGlmICghaXRlbSkKICAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAgICAgCi0gICAgV2ViSGlzdG9yeUl0ZW0gKmtpdEl0ZW0gPSBoaXN0b3J5
SXRlbVdyYXBwZXJzKCkuZ2V0KGl0ZW0pOwotICAgIGlmIChraXRJdGVtKQorICAgIGlmIChhdXRv
IGtpdEl0ZW0gPSBoaXN0b3J5SXRlbVdyYXBwZXJzKCkuZ2V0KGl0ZW0pKQogICAgICAgICByZXR1
cm4ga2l0SXRlbTsKLSAgICAKICAgICByZXR1cm4gW1tbV2ViSGlzdG9yeUl0ZW0gYWxsb2NdIGlu
aXRXaXRoV2ViQ29yZUhpc3RvcnlJdGVtOippdGVtXSBhdXRvcmVsZWFzZV07CiB9CiAKQEAgLTI4
NSw5ICsyODAsNyBAQCArIChXZWJIaXN0b3J5SXRlbSAqKWVudHJ5V2l0aFVSTDooTlNVUkwgKilV
UkwKIC0gKGlkKWluaXRXaXRoVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmluZyB0aXRsZToo
TlNTdHJpbmcgKil0aXRsZSBkaXNwbGF5VGl0bGU6KE5TU3RyaW5nICopZGlzcGxheVRpdGxlIGxh
c3RWaXNpdGVkVGltZUludGVydmFsOihOU1RpbWVJbnRlcnZhbCl0aW1lCiB7CiAgICAgV2ViSGlz
dG9yeUl0ZW0gKml0ZW0gPSBbc2VsZiBpbml0V2l0aFdlYkNvcmVIaXN0b3J5SXRlbTpIaXN0b3J5
SXRlbTo6Y3JlYXRlKFVSTFN0cmluZywgdGl0bGUsIGRpc3BsYXlUaXRsZSldOwotCiAgICAgaXRl
bS0+X3ByaXZhdGUtPl9sYXN0VmlzaXRlZFRpbWUgPSB0aW1lOwotCiAgICAgcmV0dXJuIGl0ZW07
CiB9CiAKQEAgLTMwMCw3ICsyOTMsNyBAQCAtIChpZClpbml0V2l0aFdlYkNvcmVIaXN0b3J5SXRl
bTooUmVmPEhpc3RvcnlJdGVtPiYmKWl0ZW0KICAgICAvLyBOb3RlOiBXZSBhbHNvIGRvIHRoaXMg
aW4gW1dlYkZyYW1lVmlldyBpbml0V2l0aEZyYW1lOl0gd2hlcmUgd2UgZG8KICAgICAvLyBvdGhl
ciAiaW5pdCBiZWZvcmUgV2ViS2l0IGlzIHVzZWQiIHR5cGUgdGhpbmdzCiAgICAgV2ViQ29yZTo6
bm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkID0gV0tOb3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQ7Ci0g
ICAgCisKICAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5p
bDsKIApAQCAtNDgwLDE3ICs0NzMsMTMgQEAgLSAodm9pZClzZXRSU1NGZWVkUmVmZXJyZXI6KE5T
U3RyaW5nICopcmVmZXJyZXIKIAogLSAoTlNBcnJheSAqKWNoaWxkcmVuCiB7Ci0gICAgY29uc3Qg
YXV0byYgY2hpbGRyZW4gPSBjb3JlKF9wcml2YXRlKS0+Y2hpbGRyZW4oKTsKLSAgICBpZiAoIWNo
aWxkcmVuLnNpemUoKSkKKyAgICBhdXRvJiBjaGlsZHJlbiA9IGNvcmUoX3ByaXZhdGUpLT5jaGls
ZHJlbigpOworICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBuaWw7
CiAKLSAgICB1bnNpZ25lZCBzaXplID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgIE5TTXV0YWJsZUFy
cmF5ICpyZXN1bHQgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpz
aXplXSBhdXRvcmVsZWFzZV07Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkKLSAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6a2l0KGNvbnN0X2Nhc3Q8SGlzdG9y
eUl0ZW0qPihjaGlsZHJlbltpXS5wdHIoKSkpXTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiBjcmVhdGVOU0FycmF5KGNoaWxkcmVuLCBbXSAoYXV0byYgaXRlbSkgeworICAg
ICAgICByZXR1cm4ga2l0KGNvbnN0X2Nhc3Q8SGlzdG9yeUl0ZW0qPihpdGVtLnB0cigpKSk7Cisg
ICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNVUkwgKilVUkwKQEAgLTUxNCwxNiArNTAz
LDExIEBAIC0gKEJPT0wpbGFzdFZpc2l0V2FzRmFpbHVyZQogCiAtIChOU0FycmF5ICopX3JlZGly
ZWN0VVJMcwogewotICAgIFZlY3RvcjxTdHJpbmc+KiByZWRpcmVjdFVSTHMgPSBfcHJpdmF0ZS0+
X3JlZGlyZWN0VVJMcy5nZXQoKTsKKyAgICBhdXRvJiByZWRpcmVjdFVSTHMgPSBfcHJpdmF0ZS0+
X3JlZGlyZWN0VVJMczsKICAgICBpZiAoIXJlZGlyZWN0VVJMcykKICAgICAgICAgcmV0dXJuIG5p
bDsKIAotICAgIHNpemVfdCBzaXplID0gcmVkaXJlY3RVUkxzLT5zaXplKCk7Ci0gICAgQVNTRVJU
KHNpemUpOwotICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OnNpemVdOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDooTlNTdHJpbmcqKXJlZGlyZWN0
VVJMcy0+YXQoaSldOwotICAgIHJldHVybiBbcmVzdWx0IGF1dG9yZWxlYXNlXTsKKyAgICByZXR1
cm4gY3JlYXRlTlNBcnJheSgqcmVkaXJlY3RVUkxzKS5hdXRvcmVsZWFzZSgpOwogfQogCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNj
L1dlYkNvcmVTdGF0aXN0aWNzLm1tCmluZGV4IDRjNGZlYzc4ZjNhYjk1YTFkYzA3NGFlN2E0OGY5
OTBmMmMxNTM3NjAuLmQ1NDFjNGMwNGYyZDc1ZDA2YmVlMDgwZWJjZmU2NmIwYTQ1ZmJlZjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3Mu
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5t
bQpAQCAtODAsMzQgKzgwLDI3IEBAICsgKHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFs
T2JqZWN0c0NvdW50CiAgICAgcmV0dXJuIGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRHbG9iYWxP
YmplY3RDb3VudCgpOwogfQogCitzdGF0aWMgUmV0YWluUHRyPE5TQ291bnRlZFNldD4gY3JlYXRl
TlNDb3VudGVkU2V0KGNvbnN0IEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiYgc2V0KQorewor
ICAgIGF1dG8gcmVzdWx0ID0gYWRvcHROUyhbW05TQ291bnRlZFNldCBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTpzZXQuc2l6ZSgpXSk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHNldCkgeworICAg
ICAgICBhdXRvIGtleSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzplbnRyeS5rZXld
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cnkudmFsdWU7ICsraSkKKyAg
ICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmtleV07CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBl
Q291bnRzCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7Ci0gICAgCi0gICAg
TlNDb3VudGVkU2V0ICpyZXN1bHQgPSBbTlNDb3VudGVkU2V0IHNldF07Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9i
amVjdFR5cGVDb3VudHMoKSk7Ci0gICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVy
YXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwotICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Y29uc3Qg
Y2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZhbHVlOyArK2kpCi0gICAgICAg
ICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQt
PmtleV1dOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNyZWF0ZU5TQ291
bnRlZFNldCgqY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSkuYXV0
b3JlbGVhc2UoKTsKIH0KIAogKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdE9iamVjdFR5cGVD
b3VudHMKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKLSAgICAKLSAgICBO
U0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtOU0NvdW50ZWRTZXQgc2V0XTsKLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxUeXBlQ291bnRTZXQ+IGNvdW50cyhjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNv
dW50cygpKTsKLSAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGVuZCA9
IGNvdW50cy0+ZW5kKCk7Ci0gICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0
ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+dmFsdWU7ICsraSkKLSAgICAgICAgICAgIFtyZXN1
bHQgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzppdC0+a2V5XV07Ci0g
ICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY3JlYXRlTlNDb3VudGVkU2V0KCpj
b21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKS5hdXRvcmVsZWFzZSgpOwogfQogCiAr
ICh2b2lkKWdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1Bhc3RlYm9hcmRFeHRyYXMubW0KaW5kZXggZTFj
NWVlYjMyODNmMDY2ZDgxMmNjYjA1NmM0NzA3ZjM1MmIwODc3ZC4uYjgzNjM2NmYwM2ZmNjBkYTk4
NDExZDEwOTRhMTAzODk3YTIzMThiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJOU1Bhc3RlYm9hcmRFeHRyYXMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvTWlzYy9XZWJOU1Bhc3RlYm9hcmRFeHRyYXMubW0KQEAgLTI5OCw5ICsyOTgsNyBAQCAt
IChpZClfd2ViX2RlY2xhcmVBbmRXcml0ZURyYWdJbWFnZUZvckVsZW1lbnQ6KERPTUVsZW1lbnQg
KillbGVtZW50CiAgICAgICAgICAgICBleHRlbnNpb24gPSBVUkwucGF0aEV4dGVuc2lvbjsKICAg
ICAgICAgICAgIFt0eXBlcyBhZGRPYmplY3RzRnJvbUFycmF5OltOU1Bhc3RlYm9hcmQgX3dlYl9k
cmFnVHlwZXNGb3JVUkxdXTsKICAgICAgICAgICAgIFtzZWxmIGRlY2xhcmVUeXBlczp0eXBlcy5n
ZXQoKSBvd25lcjpzb3VyY2VdOwotICAgICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiBwYXRocyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgICAg
ICAgICAgW3BhdGhzLmdldCgpIGFkZE9iamVjdDp0aXRsZV07Ci0gICAgICAgICAgICBbc2VsZiBz
ZXRQcm9wZXJ0eUxpc3Q6cGF0aHMuZ2V0KCkgZm9yVHlwZTpsZWdhY3lGaWxlbmFtZXNQYXN0ZWJv
YXJkVHlwZSgpXTsKKyAgICAgICAgICAgIFtzZWxmIHNldFByb3BlcnR5TGlzdDpAW3RpdGxlXSBm
b3JUeXBlOmxlZ2FjeUZpbGVuYW1lc1Bhc3RlYm9hcmRUeXBlKCldOwogICAgICAgICB9CiAjZW5k
aWYKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dl
YkRhdGFiYXNlTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2Vi
RGF0YWJhc2VNYW5hZ2VyLm1tCmluZGV4IGU3Mjc1Yzc0ZGRkNzY3MWI0NTJjYjdkN2RkZDMxYTNl
YjM0NDNiZjMuLmNkNTUwYWY1MTVjNzg2NDEzZDA0MmU5MWZjY2ZhMjRjNzhmZWVkMmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2Vy
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5h
Z2VyLm1tCkBAIC05MiwxNCArOTIsOSBAQCAtIChpZClpbml0CiAKIC0gKE5TQXJyYXkgKilvcmln
aW5zCiB7Ci0gICAgYXV0byBjb3JlT3JpZ2lucyA9IERhdGFiYXNlVHJhY2tlcjo6c2luZ2xldG9u
KCkub3JpZ2lucygpOwotICAgIE5TTXV0YWJsZUFycmF5ICp3ZWJPcmlnaW5zID0gW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb3JlT3JpZ2lucy5zaXplKCldOwotICAg
IGZvciAoYXV0byYgY29yZU9yaWdpbiA6IGNvcmVPcmlnaW5zKSB7Ci0gICAgICAgIFdlYlNlY3Vy
aXR5T3JpZ2luICp3ZWJPcmlnaW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdp
dGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46Y29yZU9yaWdpbi5zZWN1cml0eU9yaWdpbigpLnB0cigp
XTsKLSAgICAgICAgW3dlYk9yaWdpbnMgYWRkT2JqZWN0OndlYk9yaWdpbl07Ci0gICAgICAgIFt3
ZWJPcmlnaW4gcmVsZWFzZV07Ci0gICAgfQotICAgIHJldHVybiBbd2ViT3JpZ2lucyBhdXRvcmVs
ZWFzZV07CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoRGF0YWJhc2VUcmFja2VyOjpzaW5nbGV0
b24oKS5vcmlnaW5zKCksIFtdIChhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
TlMoW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gX2luaXRXaXRoV2ViQ29yZVNlY3VyaXR5T3Jp
Z2luOm9yaWdpbi5zZWN1cml0eU9yaWdpbigpLnB0cigpXSk7CisgICAgfSkuYXV0b3JlbGVhc2Uo
KTsKIH0KIAogLSAoTlNBcnJheSAqKWRhdGFiYXNlc1dpdGhPcmlnaW46KFdlYlNlY3VyaXR5T3Jp
Z2luICopb3JpZ2luCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdl
L1dlYlN0b3JhZ2VNYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9X
ZWJTdG9yYWdlTWFuYWdlci5tbQppbmRleCA1M2NjMmIxNDU2MjhkNmYzM2Y2OWQzODE1OTcwYzg1
NjU1MWUzNDliLi5iYmZmZGM0NTQ4MDcwOGJlOTkyMTdkOGQwNDAyMGE5YThiYzI3MzY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2Vy
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFn
ZXIubW0KQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlY3Vy
aXR5T3JpZ2luRGF0YS5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC01OSwxNyArNjAsOSBAQCAtIChpZClpbml0CiAK
IC0gKE5TQXJyYXkgKilvcmlnaW5zCiB7Ci0gICAgYXV0byBjb3JlT3JpZ2lucyA9IFdlYktpdDo6
U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5vcmlnaW5zKCk7Ci0KLSAgICBOU011dGFibGVBcnJh
eSAqd2ViT3JpZ2lucyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6
Y29yZU9yaWdpbnMuc2l6ZSgpXTsKLQotICAgIGZvciAoYXV0byYgb3JpZ2luIDogY29yZU9yaWdp
bnMpIHsKLSAgICAgICAgV2ViU2VjdXJpdHlPcmlnaW4gKndlYk9yaWdpbiA9IFtbV2ViU2VjdXJp
dHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpvcmlnaW4uc2Vj
dXJpdHlPcmlnaW4oKS5wdHIoKV07Ci0gICAgICAgIFt3ZWJPcmlnaW5zIGFkZE9iamVjdDp3ZWJP
cmlnaW5dOwotICAgICAgICBbd2ViT3JpZ2luIHJlbGVhc2VdOwotICAgIH0KLQotICAgIHJldHVy
biBbd2ViT3JpZ2lucyBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoV2Vi
S2l0OjpTdG9yYWdlVHJhY2tlcjo6dHJhY2tlcigpLm9yaWdpbnMoKSwgW10gKGF1dG8mIG9yaWdp
bikgeworICAgICAgICByZXR1cm4gYWRvcHROUyhbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBf
aW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46b3JpZ2luLnNlY3VyaXR5T3JpZ2luKCkucHRy
KCldKTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtICh2b2lkKWRlbGV0ZUFsbE9yaWdp
bnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkFwcGxpY2F0aW9uQ2FjaGUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlLm1tCmluZGV4IGEyMjc4MWFlZmEzZGQ4ZTY1OTlmOTkw
NDA3YmJmZmI1YmQ2OGNlMWYuLjU4MTQyZjRhN2I5NjE1YmE3NTg1YmRlZWEzN2IxNjYzNzEzZTIz
YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkFwcGxpY2F0aW9uQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQXBwbGljYXRpb25DYWNoZS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9T
ZWN1cml0eU9yaWdpbi5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3Rm
L2NvY29hL1ZlY3RvckNvY29hLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9y
dCA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KQEAgLTEyMSwxNiArMTIyLDkg
QEAgKyAodm9pZClkZWxldGVDYWNoZUZvck9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmln
aW4KIAogKyAoTlNBcnJheSAqKW9yaWdpbnNXaXRoQ2FjaGUKIHsKLSAgICBhdXRvIGNvcmVPcmln
aW5zID0gd2ViQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UoKS5vcmlnaW5zV2l0aENhY2hlKCk7Ci0g
ICAgCi0gICAgTlNNdXRhYmxlQXJyYXkgKndlYk9yaWdpbnMgPSBbW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb3JlT3JpZ2lucy5zaXplKCldIGF1dG9yZWxlYXNlXTsK
LSAgICAKLSAgICBmb3IgKGF1dG8mIGNvcmVPcmlnaW4gOiBjb3JlT3JpZ2lucykgewotICAgICAg
ICBhdXRvIHdlYk9yaWdpbiA9IGFkb3B0TlMoW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gX2lu
aXRXaXRoV2ViQ29yZVNlY3VyaXR5T3JpZ2luOmNvcmVPcmlnaW4ucHRyKCldKTsKLSAgICAgICAg
W3dlYk9yaWdpbnMgYWRkT2JqZWN0OndlYk9yaWdpbi5nZXQoKV07Ci0gICAgfQotICAgIAotICAg
IHJldHVybiB3ZWJPcmlnaW5zOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHdlYkFwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlKCkub3JpZ2luc1dpdGhDYWNoZSgpLCBbXSAoYXV0byYgb3JpZ2luKSB7
CisgICAgICAgIHJldHVybiBhZG9wdE5TKFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0
V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpvcmlnaW4ucHRyKCldKTsKKyAgICB9KS5hdXRvcmVs
ZWFzZSgpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KaW5kZXggOGE3NTNjNTkwMTcyMmFj
YWNiNGMzMDUwYTMxZTFiZjcwOGNiNTRlYS4uMmZjNDUyN2M2OWM1MDY0NDcyMDY4YmJjNjViYzQy
ZTJjZWI4NjQ0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQpAQCAtMTAzOSwxMyArMTAzOSwxMSBAQCBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFy
YWdyYXBoKFN0cmluZ1ZpZXcgc3RyaQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwg
Y29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKIHsKLSAgICBOU011dGFibGVBcnJh
eSAqY29ycmVjdGlvbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIGZvciAoYXV0byYg
Z3Vlc3MgOiBncmFtbWFyRGV0YWlsLmd1ZXNzZXMpCi0gICAgICAgIFtjb3JyZWN0aW9ucyBhZGRP
YmplY3Q6Z3Vlc3NdOwotICAgIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IEB7Ci0gICAgICAg
IE5TR3JhbW1hclJhbmdlIDogW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6Z3JhbW1hckRldGFpbC5y
YW5nZV0sCi0gICAgICAgIE5TR3JhbW1hclVzZXJEZXNjcmlwdGlvbiA6IGdyYW1tYXJEZXRhaWwu
dXNlckRlc2NyaXB0aW9uLAotICAgICAgICBOU0dyYW1tYXJDb3JyZWN0aW9ucyA6IGNvcnJlY3Rp
b25zLAorICAgIGF1dG8gY29ycmVjdGlvbnMgPSBjcmVhdGVOU0FycmF5KGdyYW1tYXJEZXRhaWwu
Z3Vlc3Nlcyk7CisgICAgYXV0byBkaWN0aW9uYXJ5ID0gQHsKKyAgICAgICAgTlNHcmFtbWFyUmFu
Z2U6IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOmdyYW1tYXJEZXRhaWwucmFuZ2VdLAorICAgICAg
ICBOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb246IGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9u
LAorICAgICAgICBOU0dyYW1tYXJDb3JyZWN0aW9uczogY29ycmVjdGlvbnMuZ2V0KCksCiAgICAg
fTsKICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gdXBkYXRlU3BlbGxp
bmdQYW5lbFdpdGhHcmFtbWFyU3RyaW5nOmJhZEdyYW1tYXJQaHJhc2UgZGV0YWlsOmRpY3Rpb25h
cnldOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCmluZGV4IDY3ZGFlNmE3YjdmY2Zl
MTk0NzQzZGE5NWMzNmQwODQzYmNmYjU3ZTYuLjgyMWE2ZmQ0YmQ0Y2QzOTg0YzNkMzI4MzBjMDBm
NDE1MTUwZDhlNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0KQEAgLTM2LDYgKzM2
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaD4KICNpbXBvcnQgPHd0
Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2Eu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTg4LDE3ICs4OSwxNCBAQCB2b2lk
IFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6Y2xlYXJOb3RpZmljYXRpb25zKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpCiAgICAgaWYgKGl0ID09IG1fbm90aWZpY2F0aW9uQ29udGV4dE1h
cC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFZlY3RvcjxSZXRhaW5QdHI8V2Vi
Tm90aWZpY2F0aW9uPj4mIHdlYk5vdGlmaWNhdGlvbnMgPSBpdC0+dmFsdWU7Ci0gICAgTlNNdXRh
YmxlQXJyYXkgKm5zSURzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBzaXplX3QgY291
bnQgPSB3ZWJOb3RpZmljYXRpb25zLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKLSAgICAgICAgV2ViTm90aWZpY2F0aW9uICp3ZWJOb3RpZmljYXRpb24g
PSB3ZWJOb3RpZmljYXRpb25zW2ldLmdldCgpOwotICAgICAgICBbbnNJRHMgYWRkT2JqZWN0OltO
U051bWJlciBudW1iZXJXaXRoVW5zaWduZWRMb25nTG9uZzpbd2ViTm90aWZpY2F0aW9uIG5vdGlm
aWNhdGlvbklEXV1dOwotICAgICAgICBjb3JlKHdlYk5vdGlmaWNhdGlvbiktPmZpbmFsaXplKCk7
Ci0gICAgICAgIG1fbm90aWZpY2F0aW9uTWFwLnJlbW92ZShjb3JlKHdlYk5vdGlmaWNhdGlvbikp
OwotICAgIH0KLQotICAgIFtbbV93ZWJWaWV3IF9ub3RpZmljYXRpb25Qcm92aWRlcl0gY2xlYXJO
b3RpZmljYXRpb25zOm5zSURzXTsKKyAgICBhdXRvIGZpbmFsaXplZE5vdGlmaWNhdGlvbklEcyA9
IGNyZWF0ZU5TQXJyYXkoaXQtPnZhbHVlLCBbJl0gKGF1dG8mIG5vdGlmaWNhdGlvbikgeworICAg
ICAgICBhdXRvJiBjb3JlTm90aWZpY2F0aW9uID0gKmNvcmUobm90aWZpY2F0aW9uLmdldCgpKTsK
KyAgICAgICAgY29yZU5vdGlmaWNhdGlvbi5maW5hbGl6ZSgpOworICAgICAgICBtX25vdGlmaWNh
dGlvbk1hcC5yZW1vdmUoJmNvcmVOb3RpZmljYXRpb24pOworICAgICAgICByZXR1cm4gQChbbm90
aWZpY2F0aW9uIG5vdGlmaWNhdGlvbklEXSk7CisgICAgfSk7CisKKyAgICBbW21fd2ViVmlldyBf
bm90aWZpY2F0aW9uUHJvdmlkZXJdIGNsZWFyTm90aWZpY2F0aW9uczpmaW5hbGl6ZWROb3RpZmlj
YXRpb25JRHMuZ2V0KCldOwogICAgIG1fbm90aWZpY2F0aW9uQ29udGV4dE1hcC5yZW1vdmUoaXQp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkFy
Y2hpdmUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkFyY2hpdmUubW0K
aW5kZXggOGViZmI1M2U5MTRiZmVlZWU3MzM4ZTY2MDM2OTc4ZWZiYTViMmJkMS4uODE2MmEzMTRl
OWQ4YWY4ODA4NDY4ZDdiZTViZmUxZWY5MmE2OWZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJBcmNoaXZlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViQXJjaGl2ZS5tbQpAQCAtNDAsNiArNDAsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4K
ICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2Eu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTI4MCwxOSArMjgxLDEzIEBAIC0g
KE5TQXJyYXkgKilzdWJyZXNvdXJjZXMKICAgICAvLyBDdXJyZW50bHkgZnJvbSBXZWJLaXQgQVBJ
IHBlcnNwZWN0aXZlLCBXZWJBcmNoaXZlcyBhcmUgZW50aXJlbHkgaW1tdXRhYmxlIG9uY2UgY3Jl
YXRlZAogICAgIC8vIElmIHRoZXkgZXZlciBiZWNvbWUgbXV0YWJsZSwgd2UnbGwgbmVlZCB0byBy
ZXRoaW5rIHRoaXMuICAgICAKICAgICBpZiAoIV9wcml2YXRlLT5jYWNoZWRTdWJyZXNvdXJjZXMp
IHsKLSAgICAgICAgTGVnYWN5V2ViQXJjaGl2ZSogY29yZUFyY2hpdmUgPSBbX3ByaXZhdGUgY29y
ZUFyY2hpdmVdOworICAgICAgICBhdXRvIGNvcmVBcmNoaXZlID0gW19wcml2YXRlIGNvcmVBcmNo
aXZlXTsKICAgICAgICAgaWYgKCFjb3JlQXJjaGl2ZSkKICAgICAgICAgICAgIF9wcml2YXRlLT5j
YWNoZWRTdWJyZXNvdXJjZXMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRdOwogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGF1dG8mIHN1YnJlc291cmNlcyA9IGNvcmVBcmNoaXZlLT5zdWJyZXNv
dXJjZXMoKTsKLSAgICAgICAgICAgIE5TTXV0YWJsZUFycmF5ICptdXRhYmxlQXJyYXkgPSBbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnN1YnJlc291cmNlcy5zaXplKCld
OwotICAgICAgICAgICAgX3ByaXZhdGUtPmNhY2hlZFN1YnJlc291cmNlcyA9IG11dGFibGVBcnJh
eTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgc3VicmVzb3VyY2UgOiBzdWJyZXNvdXJjZXMpIHsK
LSAgICAgICAgICAgICAgICBpZiAoV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJj
ZSBhbGxvY10gX2luaXRXaXRoQ29yZVJlc291cmNlOnN1YnJlc291cmNlLmdldCgpXSkgewotICAg
ICAgICAgICAgICAgICAgICBbbXV0YWJsZUFycmF5IGFkZE9iamVjdDpyZXNvdXJjZV07Ci0gICAg
ICAgICAgICAgICAgICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBfcHJpdmF0ZS0+Y2FjaGVkU3VicmVzb3VyY2VzID0g
Y3JlYXRlTlNBcnJheShjb3JlQXJjaGl2ZS0+c3VicmVzb3VyY2VzKCksIFtdIChhdXRvJiBzdWJy
ZXNvdXJjZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdE5TKFtbV2ViUmVzb3VyY2Ug
YWxsb2NdIF9pbml0V2l0aENvcmVSZXNvdXJjZTpzdWJyZXNvdXJjZS5nZXQoKV0pOworICAgICAg
ICAgICAgfSkubGVha1JlZigpOwogICAgICAgICB9CiAgICAgfQogICAgIC8vIE1haW50YWluIHRo
ZSBXZWJLaXQgMyBiZWhhdmlvciBvZiB0aGlzIEFQSSwgd2hpY2ggaXMgZG9jdW1lbnRlZCBhbmQK
QEAgLTMxMSwxNCArMzA2LDkgQEAgLSAoTlNBcnJheSAqKXN1YmZyYW1lQXJjaGl2ZXMKICAgICAg
ICAgaWYgKCFjb3JlQXJjaGl2ZSkKICAgICAgICAgICAgIF9wcml2YXRlLT5jYWNoZWRTdWJmcmFt
ZUFyY2hpdmVzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0XTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBhdXRvJiBzdWJmcmFtZUFyY2hpdmVzID0gY29yZUFyY2hpdmUtPnN1YmZyYW1lQXJj
aGl2ZXMoKTsKLSAgICAgICAgICAgIGF1dG8gbXV0YWJsZUFycmF5ID0gW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzdWJmcmFtZUFyY2hpdmVzLnNpemUoKV07Ci0gICAg
ICAgICAgICBfcHJpdmF0ZS0+Y2FjaGVkU3ViZnJhbWVBcmNoaXZlcyA9IG11dGFibGVBcnJheTsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdWJmcmFtZUFyY2hpdmVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgV2ViQXJjaGl2ZSAqYXJjaGl2ZSA9IFtbV2Vi
QXJjaGl2ZSBhbGxvY10gX2luaXRXaXRoQ29yZUxlZ2FjeVdlYkFyY2hpdmU6c3RhdGljX2Nhc3Q8
TGVnYWN5V2ViQXJjaGl2ZSo+KHN1YmZyYW1lQXJjaGl2ZXNbaV0ucHRyKCkpXTsKLSAgICAgICAg
ICAgICAgICBbbXV0YWJsZUFycmF5IGFkZE9iamVjdDphcmNoaXZlXTsKLSAgICAgICAgICAgICAg
ICBbYXJjaGl2ZSByZWxlYXNlXTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9wcml2YXRl
LT5jYWNoZWRTdWJmcmFtZUFyY2hpdmVzID0gY3JlYXRlTlNBcnJheShjb3JlQXJjaGl2ZS0+c3Vi
ZnJhbWVBcmNoaXZlcygpLCBbXSAoYXV0byYgYXJjaGl2ZSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBhZG9wdE5TKFtbV2ViQXJjaGl2ZSBhbGxvY10gX2luaXRXaXRoQ29yZUxlZ2FjeVdlYkFy
Y2hpdmU6c3RhdGljX2Nhc3Q8TGVnYWN5V2ViQXJjaGl2ZSo+KGFyY2hpdmUucHRyKCkpXSk7Cisg
ICAgICAgICAgICB9KS5sZWFrUmVmKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0KaW5kZXggYmIw
Mjc2OTNjMjVhNmJjNjM4NjQzZDBlZWMyNjRhNDI1MGU0M2I3OS4uNjU4ZGQ0ZTExMTNjZWJmNTk2
Mjg0YmNkNzIwNTYwOWE4N2ZhOGMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbQpAQCAtNTQ4LDEzICs1NDgsOSBAQCAtIChXZWJSZXNv
dXJjZSAqKW1haW5SZXNvdXJjZQogCiAtIChOU0FycmF5ICopc3VicmVzb3VyY2VzCiB7Ci0gICAg
YXV0byBjb3JlU3VicmVzb3VyY2VzID0gdG9Qcml2YXRlKF9wcml2YXRlKS0+bG9hZGVyLT5zdWJy
ZXNvdXJjZXMoKTsKLSAgICBhdXRvIHN1YnJlc291cmNlcyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb3JlU3VicmVzb3VyY2VzLnNpemUoKV0pOwot
ICAgIGZvciAoYXV0byYgY29yZVN1YnJlc291cmNlIDogY29yZVN1YnJlc291cmNlcykgewotICAg
ICAgICBpZiAoYXV0byByZXNvdXJjZSA9IGFkb3B0TlMoW1tXZWJSZXNvdXJjZSBhbGxvY10gX2lu
aXRXaXRoQ29yZVJlc291cmNlOmNvcmVTdWJyZXNvdXJjZS5jb3B5UmVmKCldKSkKLSAgICAgICAg
ICAgIFtzdWJyZXNvdXJjZXMgYWRkT2JqZWN0OnJlc291cmNlLmdldCgpXTsKLSAgICB9Ci0gICAg
cmV0dXJuIHN1YnJlc291cmNlcy5hdXRvcmVsZWFzZSgpOworICAgIHJldHVybiBjcmVhdGVOU0Fy
cmF5KHRvUHJpdmF0ZShfcHJpdmF0ZSktPmxvYWRlci0+c3VicmVzb3VyY2VzKCksIFtdIChhdXRv
JiByZXNvdXJjZSkgeworICAgICAgICByZXR1cm4gYWRvcHROUyhbW1dlYlJlc291cmNlIGFsbG9j
XSBfaW5pdFdpdGhDb3JlUmVzb3VyY2U6cmVzb3VyY2UuY29weVJlZigpXSk7CisgICAgfSkuYXV0
b3JlbGVhc2UoKTsKIH0KIAogLSAoV2ViUmVzb3VyY2UgKilzdWJyZXNvdXJjZUZvclVSTDooTlNV
UkwgKilVUkwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmlu
ZGV4IDQzYmZkZWU5NjZlZDdhN2FlNjc2ODk3YjllY2Q5OTJhZDI5ZjhhYWUuLjUzNjczZTllMmY1
ZWQzYmY0Y2E1MTI0YzkyZjQxNmNmM2MzNzJlZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtNTczLDE1ICs1NzMsNiBAQCAtICh2b2lkKV9zZXRJ
c0NvbW1pdHRpbmc6KEJPT0wpdmFsdWUKIAogI2VuZGlmCiAKLS0gKE5TQXJyYXkgKilfbm9kZXNG
cm9tTGlzdDooVmVjdG9yPFdlYkNvcmU6Ok5vZGUqPiAqKW5vZGVzVmVjdG9yCi17Ci0gICAgc2l6
ZV90IHNpemUgPSBub2Rlc1ZlY3Rvci0+c2l6ZSgpOwotICAgIE5TTXV0YWJsZUFycmF5ICpub2Rl
cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgW25vZGVzIGFkZE9iamVjdDpraXQo
KCpub2Rlc1ZlY3RvcilbaV0pXTsKLSAgICByZXR1cm4gbm9kZXM7Ci19Ci0KIC0gKE5TU3RyaW5n
ICopX3NlbGVjdGVkU3RyaW5nCiB7CiAgICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPmRp
c3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9y
KCkuc2VsZWN0ZWRUZXh0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQppbmRleCAxMDMzYzlmZmQ1NjQxYjkw
NmQzNzM2NzhiNWZiZjQ3NmFmMmI3YmZmLi5hZDc3MWMxNjUwNjJhMzVlZTUyNjJiNTg0MDAxMWUy
MjkwYTU5ZTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkhUTUxSZXByZXNlbnRhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQpAQCAtNjUsNiArNjUsNyBAQAogI2ltcG9ydCA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9y
dCA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+
CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwpAQCAtMjc0LDcgKzI3NSw3IEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJp
YnV0ZWRTdHJpbmdGcm9tOihET01Ob2RlICopc3RhcnROb2RlIHN0YXJ0T2Zmc2V0OihpCiBzdGF0
aWMgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudEZyb21ET01FbGVtZW50KERPTUVsZW1lbnQg
KmVsZW1lbnQpCiB7CiAgICAgRWxlbWVudCogbm9kZSA9IGNvcmUoZWxlbWVudCk7Ci0gICAgcmV0
dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShmb3JtVGFnKSA/IHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudCo+KG5vZGUpIDogMDsKKyAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5oYXNUYWdO
YW1lKGZvcm1UYWcpID8gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obm9kZSkgOiBudWxs
cHRyOwogfQogCiAtIChET01FbGVtZW50ICopZWxlbWVudFdpdGhOYW1lOihOU1N0cmluZyAqKW5h
bWUgaW5Gb3JtOihET01FbGVtZW50ICopZm9ybQpAQCAtMzE2LDggKzMxNyw4IEBAIC0gKEJPT0wp
ZWxlbWVudElzUGFzc3dvcmQ6KERPTUVsZW1lbnQgKillbGVtZW50CiAKIC0gKERPTUVsZW1lbnQg
Kilmb3JtRm9yRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQKIHsKLSAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW1lbnRGcm9tRE9NRWxlbWVudChlbGVtZW50
KTsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50ID8ga2l0KGlucHV0RWxlbWVudC0+Zm9ybSgpKSA6
IDA7CisgICAgYXV0byBpbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW1lbnRGcm9tRE9NRWxlbWVudChl
bGVtZW50KTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50ID8ga2l0KGlucHV0RWxlbWVudC0+Zm9y
bSgpKSA6IG5pbDsKIH0KIAogLSAoRE9NRWxlbWVudCAqKWN1cnJlbnRGb3JtCkBAIC0zMjcsMjMg
KzMyOCwxOCBAQCAtIChET01FbGVtZW50ICopY3VycmVudEZvcm0KIAogLSAoTlNBcnJheSAqKWNv
bnRyb2xzSW5Gb3JtOihET01FbGVtZW50ICopZm9ybQogewotICAgIEhUTUxGb3JtRWxlbWVudCog
Zm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudEZyb21ET01FbGVtZW50KGZvcm0pOworICAgIGF1dG8g
Zm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudEZyb21ET01FbGVtZW50KGZvcm0pOwogICAgIGlmICgh
Zm9ybUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKnJl
c3VsdHMgPSBuaWw7CiAKICAgICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBz
Y3JpcHREaXNhbGxvd2VkU2NvcGU7Ci0gICAgZm9yIChhdXRvJiB3ZWFrRWxlbWVudCA6IGZvcm1F
bGVtZW50LT51bnNhZmVBc3NvY2lhdGVkRWxlbWVudHMoKSkgeworICAgIGF1dG8gcmVzdWx0ID0g
Y3JlYXRlTlNBcnJheShmb3JtRWxlbWVudC0+dW5zYWZlQXNzb2NpYXRlZEVsZW1lbnRzKCksIFtd
IChhdXRvJiB3ZWFrRWxlbWVudCkgLT4gRE9NRWxlbWVudCAqIHsKICAgICAgICAgYXV0byBjb3Jl
RWxlbWVudCA9IG1ha2VSZWZQdHIod2Vha0VsZW1lbnQuZ2V0KCkpOwotICAgICAgICBpZiAoY29y
ZUVsZW1lbnQtPmFzRm9ybUFzc29jaWF0ZWRFbGVtZW50KCktPmlzRW51bWVyYXRhYmxlKCkpIHsg
Ly8gU2tpcCBvcHRpb24gZWxlbWVudHMsIG90aGVyIGR1ZHMKLSAgICAgICAgICAgIERPTUVsZW1l
bnQgKmVsZW1lbnQgPSBraXQoY29yZUVsZW1lbnQuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKCFy
ZXN1bHRzKQotICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlX
aXRoT2JqZWN0OmVsZW1lbnRdOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFty
ZXN1bHRzIGFkZE9iamVjdDplbGVtZW50XTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0czsKKyAgICAgICAgaWYgKCFjb3JlRWxlbWVudC0+YXNGb3JtQXNzb2NpYXRlZEVsZW1l
bnQoKS0+aXNFbnVtZXJhdGFibGUoKSkgLy8gU2tpcCBvcHRpb24gZWxlbWVudHMsIG90aGVyIGR1
ZHMKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBraXQoY29yZUVsZW1l
bnQuZ2V0KCkpOworICAgIH0pOworICAgIHJldHVybiBbcmVzdWx0IGNvdW50XSA/IHJlc3VsdC5h
dXRvcmVsZWFzZSgpIDogbmlsOwogfQogCiAvLyBFaXRoZXIgZ2V0IGNhY2hlZCByZWdleHAgb3Ig
YnVpbGQgb25lIHRoYXQgbWF0Y2hlcyBhbnkgb2YgdGhlIGxhYmVscy4KQEAgLTQyMywxMiArNDE5
LDEyIEBAIHN0YXRpYyBOU1N0cmluZyogc2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChGcmFt
ZSogZnJhbWUsIE5TQXJyYXkqIGxhYmVscywgRWxlCiAgICAgQVNTRVJUKGVsZW1lbnQpOwogICAg
IFJlZ3VsYXJFeHByZXNzaW9uKiByZWdFeHAgPSByZWdFeHBGb3JMYWJlbHMobGFiZWxzKTsKICAg
ICAvLyBXZSBzdG9wIHNlYXJjaGluZyBhZnRlciB3ZSd2ZSBzZWVuIHRoaXMgbWFueSBjaGFycwot
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBjaGFyc1NlYXJjaGVkVGhyZXNob2xkID0gNTAwOworICAg
IGNvbnN0ZXhwciB1bnNpZ25lZCBjaGFyc1NlYXJjaGVkVGhyZXNob2xkID0gNTAwOwogICAgIC8v
IFRoaXMgaXMgdGhlIGFic29sdXRlIG1heCB3ZSBzZWFyY2guICBXZSBhbGxvdyBhIGxpdHRsZSBt
b3JlIHNsb3AgdGhhbgogICAgIC8vIGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQsIHRvIG1ha2UgaXQg
bW9yZSBsaWtlbHkgdGhhdCB3ZSdsbCBzZWFyY2ggd2hvbGUgbm9kZXMuCi0gICAgY29uc3QgdW5z
aWduZWQgaW50IG1heENoYXJzU2VhcmNoZWQgPSA2MDA7CisgICAgY29uc3RleHByIHVuc2lnbmVk
IG1heENoYXJzU2VhcmNoZWQgPSA2MDA7CiAgICAgLy8gSWYgdGhlIHN0YXJ0aW5nIGVsZW1lbnQg
aXMgd2l0aGluIGEgdGFibGUsIHRoZSBjZWxsIHRoYXQgY29udGFpbnMgaXQKLSAgICBIVE1MVGFi
bGVDZWxsRWxlbWVudCogc3RhcnRpbmdUYWJsZUNlbGwgPSAwOworICAgIEhUTUxUYWJsZUNlbGxF
bGVtZW50KiBzdGFydGluZ1RhYmxlQ2VsbCA9IG51bGxwdHI7CiAgICAgYm9vbCBzZWFyY2hlZENl
bGxBYm92ZSA9IGZhbHNlOwogICAgIAogICAgIGlmIChyZXN1bHREaXN0YW5jZSkKQEAgLTQ0Nyw4
ICs0NDMsOCBAQCBzdGF0aWMgTlNTdHJpbmcqIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQo
RnJhbWUqIGZyYW1lLCBOU0FycmF5KiBsYWJlbHMsIEVsZQogICAgICAgICBpZiAobi0+aGFzVGFn
TmFtZSh0ZFRhZykgJiYgIXN0YXJ0aW5nVGFibGVDZWxsKSB7CiAgICAgICAgICAgICBzdGFydGlu
Z1RhYmxlQ2VsbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50Kj4obik7CiAgICAg
ICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZSh0clRhZykgJiYgc3RhcnRpbmdUYWJsZUNlbGwp
IHsKLSAgICAgICAgICAgIE5TU3RyaW5nKiByZXN1bHQgPSBmcmFtZS0+c2VhcmNoRm9yTGFiZWxz
QWJvdmVDZWxsKCpyZWdFeHAsIHN0YXJ0aW5nVGFibGVDZWxsLCByZXN1bHREaXN0YW5jZSk7Ci0g
ICAgICAgICAgICBpZiAocmVzdWx0ICYmIFtyZXN1bHQgbGVuZ3RoXSA+IDApIHsKKyAgICAgICAg
ICAgIE5TU3RyaW5nICpyZXN1bHQgPSBmcmFtZS0+c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKCpy
ZWdFeHAsIHN0YXJ0aW5nVGFibGVDZWxsLCByZXN1bHREaXN0YW5jZSk7CisgICAgICAgICAgICBp
ZiAoW3Jlc3VsdCBsZW5ndGhdKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdElzSW5DZWxs
QWJvdmUpCiAgICAgICAgICAgICAgICAgICAgICpyZXN1bHRJc0luQ2VsbEFib3ZlID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDczLDggKzQ2OSw4IEBAIHN0YXRp
YyBOU1N0cmluZyogc2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChGcmFtZSogZnJhbWUsIE5T
QXJyYXkqIGxhYmVscywgRWxlCiAgICAgLy8gSWYgd2Ugc3RhcnRlZCBpbiBhIGNlbGwsIGJ1dCBi
YWlsZWQgYmVjYXVzZSB3ZSBmb3VuZCB0aGUgc3RhcnQgb2YgdGhlIGZvcm0gb3IgdGhlCiAgICAg
Ly8gcHJldmlvdXMgZWxlbWVudCwgd2Ugc3RpbGwgbWlnaHQgbmVlZCB0byBzZWFyY2ggdGhlIHJv
dyBhYm92ZSB1cyBmb3IgYSBsYWJlbC4KICAgICBpZiAoc3RhcnRpbmdUYWJsZUNlbGwgJiYgIXNl
YXJjaGVkQ2VsbEFib3ZlKSB7Ci0gICAgICAgIE5TU3RyaW5nKiByZXN1bHQgPSBmcmFtZS0+c2Vh
cmNoRm9yTGFiZWxzQWJvdmVDZWxsKCpyZWdFeHAsIHN0YXJ0aW5nVGFibGVDZWxsLCByZXN1bHRE
aXN0YW5jZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgJiYgW3Jlc3VsdCBsZW5ndGhdID4gMCkgewor
ICAgICAgICBOU1N0cmluZyAqcmVzdWx0ID0gZnJhbWUtPnNlYXJjaEZvckxhYmVsc0Fib3ZlQ2Vs
bCgqcmVnRXhwLCBzdGFydGluZ1RhYmxlQ2VsbCwgcmVzdWx0RGlzdGFuY2UpOworICAgICAgICBp
ZiAoW3Jlc3VsdCBsZW5ndGhdKSB7CiAgICAgICAgICAgICBpZiAocmVzdWx0SXNJbkNlbGxBYm92
ZSkKICAgICAgICAgICAgICAgICAqcmVzdWx0SXNJbkNlbGxBYm92ZSA9IHRydWU7CiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNTM2LDcgKzUzMiw3IEBAIHN0YXRpYyBOU1N0cmluZyAq
bWF0Y2hMYWJlbHNBZ2FpbnN0RWxlbWVudChOU0FycmF5ICpsYWJlbHMsIEVsZW1lbnQqIGVsZW1l
bnQpCiAKIC0gKE5TU3RyaW5nICopc2VhcmNoRm9yTGFiZWxzOihOU0FycmF5ICopbGFiZWxzIGJl
Zm9yZUVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50CiB7Ci0gICAgcmV0dXJuIFtzZWxmIHNl
YXJjaEZvckxhYmVsczpsYWJlbHMgYmVmb3JlRWxlbWVudDplbGVtZW50IHJlc3VsdERpc3RhbmNl
OjAgcmVzdWx0SXNJbkNlbGxBYm92ZTowXTsKKyAgICByZXR1cm4gW3NlbGYgc2VhcmNoRm9yTGFi
ZWxzOmxhYmVscyBiZWZvcmVFbGVtZW50OmVsZW1lbnQgcmVzdWx0RGlzdGFuY2U6bnVsbHB0ciBy
ZXN1bHRJc0luQ2VsbEFib3ZlOm51bGxwdHJdOwogfQogCiAtIChOU1N0cmluZyAqKXNlYXJjaEZv
ckxhYmVsczooTlNBcnJheSAqKWxhYmVscyBiZWZvcmVFbGVtZW50OihET01FbGVtZW50ICopZWxl
bWVudCByZXN1bHREaXN0YW5jZTooTlNVSW50ZWdlciopb3V0RGlzdGFuY2UgcmVzdWx0SXNJbkNl
bGxBYm92ZTooQk9PTCopb3V0SXNJbkNlbGxBYm92ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KaW5kZXggNTIwZWE1NjY0YWYyODc1NjlhODU1Yzc0
YjgxY2VhNTRjN2U4ZTIwMi4uNGI2YTExNWZjOTM2MzdkMzgzZWFkY2RlNThkZWJjOWQ1YWZlZDlh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
CkBAIC0zNjQxLDcgKzM2NDEsMTIgQEAgc3RhdGljIFJldGFpblB0cjxOU01lbnVJdGVtPiBjcmVh
dGVTaGFyZU1lbnVJdGVtKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmIGgKICAgICByZXR1
cm4gW05TTWVudUl0ZW0gc3RhbmRhcmRTaGFyZU1lbnVJdGVtRm9ySXRlbXM6aXRlbXMuZ2V0KCld
OwogfQogCi1zdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBjcmVhdGVNZW51SXRlbXMo
Y29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb250
ZXh0TWVudUl0ZW0+Jik7CitzdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBjcmVhdGVN
ZW51SXRlbXMoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwgY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbT4mIGl0ZW1zKQoreworICAgIHJldHVy
biBjcmVhdGVOU0FycmF5KGl0ZW1zLCBbJl0gKGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZU1lbnVJdGVtKGhpdFRlc3RSZXN1bHQsIGl0ZW0pOworICAgIH0pOworfQogCiBzdGF0
aWMgUmV0YWluUHRyPE5TTWVudUl0ZW0+IGNyZWF0ZU1lbnVJdGVtKGNvbnN0IFdlYkNvcmU6Okhp
dFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIGNvbnN0IFdlYkNvcmU6OkNvbnRleHRNZW51SXRl
bSYgaXRlbSkKIHsKQEAgLTM2NjgsOCArMzY3Myw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNNZW51
SXRlbT4gY3JlYXRlTWVudUl0ZW0oY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0VGVz
CiAgICAgY2FzZSBXZWJDb3JlOjpTdWJtZW51VHlwZTogewogICAgICAgICBhdXRvIG1lbnUgPSBh
ZG9wdE5TKFtbTlNNZW51IGFsbG9jXSBpbml0XSk7CiAKLSAgICAgICAgYXV0byBzdWJtZW51SXRl
bXMgPSBjcmVhdGVNZW51SXRlbXMoaGl0VGVzdFJlc3VsdCwgaXRlbS5zdWJNZW51SXRlbXMoKSk7
Ci0gICAgICAgIGZvciAoTlNNZW51SXRlbSAqbWVudUl0ZW0gaW4gc3VibWVudUl0ZW1zLmdldCgp
KQorICAgICAgICBmb3IgKE5TTWVudUl0ZW0gKm1lbnVJdGVtIGluIGNyZWF0ZU1lbnVJdGVtcyho
aXRUZXN0UmVzdWx0LCBpdGVtLnN1Yk1lbnVJdGVtcygpKS5nZXQoKSkKICAgICAgICAgICAgIFtt
ZW51IGFkZEl0ZW06bWVudUl0ZW1dOwogCiAgICAgICAgIGF1dG8gbWVudUl0ZW0gPSBhZG9wdE5T
KFtbTlNNZW51SXRlbSBhbGxvY10gaW5pdFdpdGhUaXRsZTppdGVtLnRpdGxlKCkgYWN0aW9uOm51
bGxwdHIga2V5RXF1aXZhbGVudDpAIiJdKTsKQEAgLTM2ODQsMTggKzM2ODgsNiBAQCBzdGF0aWMg
UmV0YWluUHRyPE5TTWVudUl0ZW0+IGNyZWF0ZU1lbnVJdGVtKGNvbnN0IFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQmIGhpdFRlcwogICAgIH0KIH0KIAotc3RhdGljIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gY3JlYXRlTWVudUl0ZW1zKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmIGhpdFRl
c3RSZXN1bHQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0+JiBpdGVtcykK
LXsKLSAgICBhdXRvIG1lbnVJdGVtcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOwotCi0gICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKLSAgICAgICAgaWYgKGF1
dG8gbWVudUl0ZW0gPSBjcmVhdGVNZW51SXRlbShoaXRUZXN0UmVzdWx0LCBpdGVtKSkKLSAgICAg
ICAgICAgIFttZW51SXRlbXMgYWRkT2JqZWN0Om1lbnVJdGVtLmdldCgpXTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbWVudUl0ZW1zOwotfQotCiBzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGN1c3Rv
bU1lbnVGcm9tRGVmYXVsdEl0ZW1zKFdlYlZpZXcgKndlYlZpZXcsIGNvbnN0IFdlYkNvcmU6OkNv
bnRleHRNZW51JiBkZWZhdWx0TWVudSkKIHsKICAgICBjb25zdCBhdXRvJiBoaXRUZXN0UmVzdWx0
ID0gd2ViVmlldy5wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS5oaXRUZXN0UmVzdWx0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggNTA1M2Nl
YTQ5YTBiZTQxNjNmZTA5M2IwYjYwOWNjMTUyNWQyNWZkYi4uNTM4NTg2N2M1NDc0MTJkNTM5NjUw
NWFhODZhNDc4MWRlMDI2MGVjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQpAQCAtNjkyLDExICs2OTIsNyBAQCAtIChXZWJVSVRleHRJbmRpY2F0b3JEYXRh
ICopaW5pdFdpdGhJbWFnZTooQ0dJbWFnZVJlZilpbWFnZSB0ZXh0SW5kaWNhdG9yRGF0YTooYwog
ICAgIF9kYXRhSW50ZXJhY3Rpb25JbWFnZSA9IFtQQUw6OmFsbG9jVUlJbWFnZUluc3RhbmNlKCkg
aW5pdFdpdGhDR0ltYWdlOmltYWdlIHNjYWxlOnNjYWxlIG9yaWVudGF0aW9uOlVJSW1hZ2VPcmll
bnRhdGlvbkRvd25NaXJyb3JlZF07CiAgICAgX3NlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRp
bmF0ZXMgPSBpbmRpY2F0b3JEYXRhLnNlbGVjdGlvblJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXM7
CiAgICAgX3RleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBpbmRpY2F0b3JE
YXRhLnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXM7Ci0KLSAgICBOU011dGFi
bGVBcnJheSAqdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IFtOU011dGFibGVB
cnJheSBhcnJheV07Ci0gICAgZm9yIChhdXRvIHJlY3QgOiBpbmRpY2F0b3JEYXRhLnRleHRSZWN0
c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpCi0gICAgICAgIFt0ZXh0UmVjdHNJbkJvdW5kaW5n
UmVjdENvb3JkaW5hdGVzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6cmVjdF1d
OwotICAgIF90ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzID0gW1tOU0FycmF5IGFy
cmF5V2l0aEFycmF5OnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXNdIHJldGFpbl07
CisgICAgX3RleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBjcmVhdGVOU0FycmF5
KGluZGljYXRvckRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcykubGVha1Jl
ZigpOwogICAgIF9jb250ZW50SW1hZ2VTY2FsZUZhY3RvciA9IGluZGljYXRvckRhdGEuY29udGVu
dEltYWdlU2NhbGVGYWN0b3I7CiAgICAgaWYgKGluZGljYXRvckRhdGEuY29udGVudEltYWdlV2l0
aEhpZ2hsaWdodCkKICAgICAgICAgX2NvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQgPSBbUEFMOjph
bGxvY1VJSW1hZ2VJbnN0YW5jZSgpIGluaXRXaXRoQ0dJbWFnZTppbmRpY2F0b3JEYXRhLmNvbnRl
bnRJbWFnZVdpdGhIaWdobGlnaHQuZ2V0KCktPm5hdGl2ZUltYWdlKCkuZ2V0KCkgc2NhbGU6c2Nh
bGUgb3JpZW50YXRpb246VUlJbWFnZU9yaWVudGF0aW9uRG93bk1pcnJvcmVkXTsKQEAgLTQzNTIs
NiArNDM0OCw3IEBAICsgKHZvaWQpX2RvTm90U3RhcnRPYnNlcnZpbmdOZXR3b3JrUmVhY2hhYmls
aXR5CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCisKIC0gKE5TQXJyYXkgKilfdG91Y2hFdmVudFJlZ2lvbnMKIHsKICAgICBhdXRvKiBm
cmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKQEAgLTQzNjUsMzggKzQzNjIsMzMgQEAgLSAo
TlNBcnJheSAqKV90b3VjaEV2ZW50UmVnaW9ucwogICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0
PiByZWN0czsKICAgICBkb2N1bWVudC0+Z2V0VG91Y2hSZWN0cyhyZWN0cyk7CiAKLSAgICBpZiAo
cmVjdHMuc2l6ZSgpID09IDApCisgICAgaWYgKHJlY3RzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIG5pbDsKIAotICAgIE5TTXV0YWJsZUFycmF5ICpldmVudFJlZ2lvbkFycmF5ID0gW1tbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cmVjdHMuc2l6ZSgpXSBhdXRvcmVs
ZWFzZV07Ci0KICAgICBOU1ZpZXcgPFdlYkRvY3VtZW50Vmlldz4gKmRvY3VtZW50VmlldyA9IFtb
W3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107Ci0gICAgVmVjdG9yPFdl
YkNvcmU6OkludFJlY3Q+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSByZWN0cy5lbmQoKTsKLSAgICBm
b3IgKFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZWN0cy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgcmVjdCA9ICppdDsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShyZWN0cywgWyZdIChhdXRv
JiByZWN0KSAtPiBSZXRhaW5QdHI8V2ViRXZlbnRSZWdpb24+IHsKICAgICAgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4gbmls
OwogCiAgICAgICAgIC8vIFRoZSB0b3VjaCByZWN0YW5nbGVzIGFyZSBpbiB0aGUgY29vcmRpbmF0
ZSBzeXN0ZW0gb2YgdGhlIGRvY3VtZW50IChpbnNpZGUgdGhlIFdlYkhUTUxWaWV3KSwgd2hpY2gg
aXMgbm90CiAgICAgICAgIC8vIHRoZSBzYW1lIGFzIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0
aGUgV2ViVmlldy4gVUlXZWJWaWV3IGN1cnJlbnRseSBleHBlY3RzIHZpZXcgY29vcmRpbmF0ZXMs
IHNvIHdlJ2xsCiAgICAgICAgIC8vIGNvbnZlcnQgdGhlbSBoZXJlIG5vdy4KLSAgICAgICAgV2Vi
Q29yZTo6SW50UmVjdCB2aWV3UmVjdCA9IFdlYkNvcmU6OkludFJlY3QoW2RvY3VtZW50VmlldyBj
b252ZXJ0UmVjdDpyZWN0IHRvVmlldzpzZWxmXSk7CisgICAgICAgIGF1dG8gdmlld1JlY3QgPSBb
ZG9jdW1lbnRWaWV3IGNvbnZlcnRSZWN0OnJlY3QgdG9WaWV3OnNlbGZdOwogCiAgICAgICAgIC8v
IFRoZSBldmVudCByZWdpb24gd2FudHMgdGhpcyBwb2ludHMgaW4gdGhpcyBvcmRlcjoKICAgICAg
ICAgLy8gIHAyLS0tLS0tcDMKICAgICAgICAgLy8gIHwgICAgICAgfAogICAgICAgICAvLyAgcDEt
LS0tLS1wNAotICAgICAgICAvLwotICAgICAgICBXZWJFdmVudFJlZ2lvbiAqZXZlbnRSZWdpb24g
PSBbW1dlYkV2ZW50UmVnaW9uIGFsbG9jXSBpbml0V2l0aFBvaW50czpXZWJDb3JlOjpGbG9hdFBv
aW50KHZpZXdSZWN0LngoKSwgdmlld1JlY3QubWF4WSgpKQotICAgICAgICAgICAgOiBXZWJDb3Jl
OjpGbG9hdFBvaW50KHZpZXdSZWN0LngoKSwgdmlld1JlY3QueSgpKSA6IFdlYkNvcmU6OkZsb2F0
UG9pbnQodmlld1JlY3QubWF4WCgpLCB2aWV3UmVjdC55KCkpIDogV2ViQ29yZTo6RmxvYXRQb2lu
dCh2aWV3UmVjdC5tYXhYKCksIHZpZXdSZWN0Lm1heFkoKSldOwotICAgICAgICBpZiAoZXZlbnRS
ZWdpb24pIHsKLSAgICAgICAgICAgIFtldmVudFJlZ2lvbkFycmF5IGFkZE9iamVjdDpldmVudFJl
Z2lvbl07Ci0gICAgICAgICAgICBbZXZlbnRSZWdpb24gcmVsZWFzZV07Ci0gICAgICAgIH0KLSAg
ICB9CiAKLSAgICByZXR1cm4gZXZlbnRSZWdpb25BcnJheTsKKyAgICAgICAgYXV0byBwMSA9IENH
UG9pbnRNYWtlKENHUmVjdEdldE1pblgodmlld1JlY3QpLCBDR1JlY3RHZXRNYXhZKHZpZXdSZWN0
KSk7CisgICAgICAgIGF1dG8gcDIgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNaW5YKHZpZXdSZWN0
KSwgQ0dSZWN0R2V0TWluWSh2aWV3UmVjdCkpOworICAgICAgICBhdXRvIHAzID0gQ0dQb2ludE1h
a2UoQ0dSZWN0R2V0TWF4WCh2aWV3UmVjdCksIENHUmVjdEdldE1pblkodmlld1JlY3QpKTsKKyAg
ICAgICAgYXV0byBwNCA9IENHUG9pbnRNYWtlKENHUmVjdEdldE1heFgodmlld1JlY3QpLCBDR1Jl
Y3RHZXRNYXhZKHZpZXdSZWN0KSk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXZWJFdmVu
dFJlZ2lvbiBhbGxvY10gaW5pdFdpdGhQb2ludHM6cDEgOnAyIDpwMyA6cDRdKTsKKyAgICB9KS5h
dXRvcmVsZWFzZSgpOwogfQorCiAjZW5kaWYgLy8gRU5BQkxFKFRPVUNIX0VWRU5UUykKIAogLy8g
Rm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdGhlIFdlYkJhY2tGb3J3YXJkTGlzdCBB
UEksIHdlIGhvbm9yIGJvdGgKQEAgLTQ1NjksMjAgKzQ1NjEsMTQgQEAgLSAodm9pZClyZXNldFRy
YWNrZWRSZXBhaW50cwogICAgICAgICB2aWV3LT5yZXNldFRyYWNrZWRSZXBhaW50cygpOwogfQog
Ci0tIChOU0FycmF5Kil0cmFja2VkUmVwYWludFJlY3RzCistIChOU0FycmF5ICopdHJhY2tlZFJl
cGFpbnRSZWN0cwogewotICAgIGF1dG8qIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1l
XTsKLSAgICBhdXRvKiB2aWV3ID0gY29yZUZyYW1lLT52aWV3KCk7CisgICAgYXV0byB2aWV3ID0g
c2VsZi5fbWFpbkNvcmVGcmFtZS0+dmlldygpOwogICAgIGlmICghdmlldyB8fCAhdmlldy0+aXNU
cmFja2luZ1JlcGFpbnRzKCkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBjb25zdCBWZWN0
b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgcmVwYWludFJlY3RzID0gdmlldy0+dHJhY2tlZFJlcGFp
bnRSZWN0cygpOwotICAgIE5TTXV0YWJsZUFycmF5KiByZWN0c0FycmF5ID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpyZXBhaW50UmVjdHMuc2l6ZSgpXTsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXBhaW50UmVjdHMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIFtyZWN0c0FycmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnNuYXBwZWRJ
bnRSZWN0KFdlYkNvcmU6OkxheW91dFJlY3QocmVwYWludFJlY3RzW2ldKSldXTsKLQotICAgIHJl
dHVybiBbcmVjdHNBcnJheSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXko
dmlldy0+dHJhY2tlZFJlcGFpbnRSZWN0cygpLCBbXSAoYXV0byYgcmVjdCkgeworICAgICAgICBy
ZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpzbmFwcGVkSW50UmVjdChXZWJDb3JlOjpMYXlv
dXRSZWN0IHsgcmVjdCB9KV07CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogI2lmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQpAQCAtMTAxOTksMTMgKzEwMTg1LDkgQEAgLSAoTlNBcnJheTxET01F
bGVtZW50ICo+ICopX2VkaXRhYmxlRWxlbWVudHNJblJlY3Q6KENHUmVjdClyZWN0CiAgICAgYXV0
byogcGFnZSA9IGNvcmUoc2VsZik7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gQFtd
OwotICAgIGF1dG8gY29yZUVsZW1lbnRzID0gcGFnZS0+ZWRpdGFibGVFbGVtZW50c0luUmVjdChy
ZWN0KTsKLSAgICBpZiAoY29yZUVsZW1lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEBb
XTsKLSAgICBhdXRvIHJlc3VsdCA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhDYXBhY2l0eTpjb3JlRWxlbWVudHMuc2l6ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBjb3Jl
RWxlbWVudCA6IGNvcmVFbGVtZW50cykKLSAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6a2l0KGNv
cmVFbGVtZW50LnB0cigpKV07Ci0gICAgcmV0dXJuIHJlc3VsdC5hdXRvcmVsZWFzZSgpOworICAg
IHJldHVybiBjcmVhdGVOU0FycmF5KHBhZ2UtPmVkaXRhYmxlRWxlbWVudHNJblJlY3QocmVjdCks
IFtdIChhdXRvJiBjb3JlRWxlbWVudCkgeworICAgICAgICByZXR1cm4ga2l0KGNvcmVFbGVtZW50
LnB0cigpKTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtICh2b2lkKXJldmVhbEN1cnJl
bnRTZWxlY3Rpb24KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA1YjhjNDI1ZGJlY2U4MmM1MGIxZTY0MjIzODBmODQ3OTZhNTQ1MGZhLi4zY2Q4MDVi
MDM0NzE2MDg2MTVmNjY4ZWUzNzM5ZTRlN2M5YzYwZTRhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAgQEAKKzIwMjAtMDQtMTgg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gVXNlIGNy
ZWF0ZU5TQXJyYXkgaW4gbWFueSBtb3JlIHBsYWNlcyB0aGF0IGJ1aWxkIE5TQXJyYXkgb2JqZWN0
cyBmcm9tIEMrKyBjb2xsZWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjEwNzAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKIDIwMjAtMDQtMTcgIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5j
b20+CiAKICAgICAgICAgRW5hYmxlIHNlcnZpY2Ugd29ya2VycyBmb3IgYXBwLWJvdW5kIGRvbWFp
bnMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCA5OTA2
YTlmN2NmMzM4OTRkM2UxNWUzOWQyYWUxMDY2N2FlOWRiMTc2Li4zMzQ2M2I0NDNkYWRlNThmNDdl
N2NmZmFmMjQ5MzcyOTFjZmVlYmI0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvRHVtcFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBS
ZW5kZXJUcmVlLm1tCkBAIC05OSw2ICs5OSw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CiAjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDx3dGYvVW5pcXVlQXJyYXkuaD4K
KyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTUwOSwz
MyArNTEwLDMxIEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlU3lzdGVtQ29yZVdlYkZvbnRzKCkKIAog
c3RhdGljIHZvaWQgYWN0aXZhdGVUZXN0aW5nRm9udHMoKQogewotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBmb250RmlsZU5hbWVzW10gPSB7Ci0gICAgICAgICJBSEVNX19fXy5UVEYiLAotICAgICAg
ICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0
Y2hlcjIwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjMwMC50dGYiLAotICAg
ICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjQwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0
V2F0Y2hlcjUwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjYwMC50dGYiLAot
ICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjgwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYi
LAotICAgICAgICAiRm9udFdpdGhGZWF0dXJlcy50dGYiLAotICAgICAgICAiRm9udFdpdGhGZWF0
dXJlcy5vdGYiLAotICAgICAgICAwCisgICAgY29uc3RleHByIE5TU3RyaW5nICpmb250RmlsZU5h
bWVzW10gPSB7CisgICAgICAgIEAiQUhFTV9fX18uVFRGIiwKKyAgICAgICAgQCJXZWJLaXRXZWln
aHRXYXRjaGVyMTAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYi
LAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXIzMDAudHRmIiwKKyAgICAgICAgQCJXZWJL
aXRXZWlnaHRXYXRjaGVyNDAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjUw
MC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI2MDAudHRmIiwKKyAgICAgICAg
QCJXZWJLaXRXZWlnaHRXYXRjaGVyNzAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0
Y2hlcjgwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmIiwKKyAg
ICAgICAgQCJGb250V2l0aEZlYXR1cmVzLnR0ZiIsCisgICAgICAgIEAiRm9udFdpdGhGZWF0dXJl
cy5vdGYiLAogICAgIH07CiAKLSAgICBOU011dGFibGVBcnJheSAqZm9udFVSTHMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXldOwogICAgIE5TVVJMICpyZXNvdXJjZXNEaXJlY3RvcnkgPSBbTlNVUkwg
VVJMV2l0aFN0cmluZzpAIkR1bXBSZW5kZXJUcmVlLnJlc291cmNlcyIgcmVsYXRpdmVUb1VSTDpb
W05TQnVuZGxlIG1haW5CdW5kbGVdIGV4ZWN1dGFibGVVUkxdXTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBmb250RmlsZU5hbWVzW2ldOyArK2kpIHsKLSAgICAgICAgTlNVUkwgKmZvbnRVUkwg
PSBbcmVzb3VyY2VzRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbTlNTdHJp
bmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6Zm9udEZpbGVOYW1lc1tpXV0gaXNEaXJlY3Rvcnk6Tk9d
OwotICAgICAgICBbZm9udFVSTHMgYWRkT2JqZWN0Oltmb250VVJMIGFic29sdXRlVVJMXV07Ci0g
ICAgfQorICAgIGF1dG8gZm9udFVSTHMgPSBjcmVhdGVOU0FycmF5KGZvbnRGaWxlTmFtZXMsIFsm
XSAoTlNTdHJpbmcgKm5hbWUpIHsKKyAgICAgICAgcmV0dXJuIFtyZXNvdXJjZXNEaXJlY3Rvcnkg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50Om5hbWUgaXNEaXJlY3Rvcnk6Tk9dLmFic29sdXRl
VVJMOworICAgIH0pOwogCi0gICAgQ0ZBcnJheVJlZiBlcnJvcnMgPSAwOwotICAgIGlmICghQ1RG
b250TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JVUkxzKChDRkFycmF5UmVmKWZvbnRVUkxzLCBrQ1RG
b250TWFuYWdlclNjb3BlUHJvY2VzcywgJmVycm9ycykpIHsKKyAgICBDRkFycmF5UmVmIGVycm9y
cyA9IG51bGxwdHI7CisgICAgaWYgKCFDVEZvbnRNYW5hZ2VyUmVnaXN0ZXJGb250c0ZvclVSTHMo
KENGQXJyYXlSZWYpZm9udFVSTHMuZ2V0KCksIGtDVEZvbnRNYW5hZ2VyU2NvcGVQcm9jZXNzLCAm
ZXJyb3JzKSkgewogICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBhY3RpdmF0ZSBmb250czogJUAi
LCBlcnJvcnMpOwotICAgICAgICBDRlJlbGVhc2UoZXJyb3JzKTsKKyAgICAgICAgaWYgKGVycm9y
cykKKyAgICAgICAgICAgIENGUmVsZWFzZShlcnJvcnMpOwogICAgICAgICBleGl0KDEpOwogICAg
IH0KIH0KQEAgLTU0NSw3ICs1NDQsOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RGb250cygpCiAgICAg
YWN0aXZhdGVTeXN0ZW1Db3JlV2ViRm9udHMoKTsKICAgICBhY3RpdmF0ZVRlc3RpbmdGb250cygp
OwogfQorCiAjZWxzZQorCiBzdGF0aWMgdm9pZCBhY3RpdmF0ZUZvbnRJT1MoY29uc3QgdWludDhf
dCogZm9udERhdGEsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBzdGQ6OnN0cmluZyBzZWN0aW9uTmFt
ZSkKIHsKICAgICBDR0RhdGFQcm92aWRlclJlZiBkYXRhID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVX
aXRoRGF0YShudWxscHRyLCBmb250RGF0YSwgbGVuZ3RoLCBudWxscHRyKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL1VJRGVsZWdhdGUubW0KaW5kZXggZDVmNGE0MmUxNjYzMzZkODljYmRkYzA5ZTU1
YjQ1MjM1ZTUxNzJjYS4uZjY5OTU1NTFlMGNkYTEwZDRiMmI3OWY5MmJhNmRhMzRiZTM1N2I4OCAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0KKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0KQEAgLTQ1LDYgKzQ1LDcgQEAK
ICNpbXBvcnQgPFdlYktpdC9XZWJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZh
dGUuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVj
dG9yQ29jb2EuaD4KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogRHVtcFJlbmRlclRyZWVE
cmFnZ2luZ0luZm8gKmRyYWdnaW5nSW5mbyA9IG5pbDsKQEAgLTM3NiwyMCArMzc3LDE4IEBAIC0g
KHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBydW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9u
V2l0aFJlc3VsdExpc3RlbmVyOihpCiAgICAgfQogCiAgICAgTlNVUkwgKmJhc2VVUkwgPSBbTlNV
UkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6Z1Rlc3RSdW5u
ZXItPnRlc3RVUkwoKS5jX3N0cigpXV07Ci0gICAgYXV0byBmaWxlUGF0aHMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6b3BlblBhbmVsRmlsZXMuc2l6
ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBmaWxlUGF0aCA6IG9wZW5QYW5lbEZpbGVzKSB7Ci0gICAg
ICAgIE5TVVJMICpmaWxlVVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNTdHJpbmcgc3Ry
aW5nV2l0aFVURjhTdHJpbmc6ZmlsZVBhdGguY19zdHIoKV0gcmVsYXRpdmVUb1VSTDpiYXNlVVJM
XTsKLSAgICAgICAgW2ZpbGVQYXRocyBhZGRPYmplY3Q6ZmlsZVVSTC5wYXRoXTsKLSAgICB9Cisg
ICAgYXV0byBmaWxlUGF0aHMgPSBjcmVhdGVOU0FycmF5KG9wZW5QYW5lbEZpbGVzLCBbJl0gKGNv
bnN0IHN0ZDo6c3RyaW5nJiBmaWxlUGF0aCkgeworICAgICAgICByZXR1cm4gW05TVVJMIGZpbGVV
UkxXaXRoUGF0aDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6ZmlsZVBhdGguY19zdHIo
KV0gcmVsYXRpdmVUb1VSTDpiYXNlVVJMXS5wYXRoOworICAgIH0pOwogCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBOU1VSTCAqZmlyc3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRo
OltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpvcGVuUGFuZWxGaWxlc1swXS5jX3N0cigp
XSByZWxhdGl2ZVRvVVJMOmJhc2VVUkxdOwogICAgIE5TU3RyaW5nICpkaXNwbGF5U3RyaW5nID0g
Zmlyc3RVUkwubGFzdFBhdGhDb21wb25lbnQ7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y2hhcj4m
IGljb25EYXRhID0gZ1Rlc3RSdW5uZXItPm9wZW5QYW5lbEZpbGVzTWVkaWFJY29uKCk7CisgICAg
YXV0byYgaWNvbkRhdGEgPSBnVGVzdFJ1bm5lci0+b3BlblBhbmVsRmlsZXNNZWRpYUljb24oKTsK
ICAgICBDR0ltYWdlUmVmIGltYWdlUmVmID0gbnVsbHB0cjsKICAgICBpZiAoIWljb25EYXRhLmVt
cHR5KCkpIHsKLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YVJlZiA9IGFkb3B0Q0Yo
Q0ZEYXRhQ3JlYXRlKG51bGxwdHIsICh1bnNpZ25lZCBjaGFyICopaWNvbkRhdGEuZGF0YSgpLCBp
Y29uRGF0YS5zaXplKCkpKTsKLSAgICAgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBp
bWFnZVByb3ZpZGVyUmVmID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEo
ZGF0YVJlZi5nZXQoKSkpOworICAgICAgICBhdXRvIGRhdGFSZWYgPSBhZG9wdENGKENGRGF0YUNy
ZWF0ZShudWxscHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oaWNvbkRhdGEuZGF0
YSgpKSwgaWNvbkRhdGEuc2l6ZSgpKSk7CisgICAgICAgIGF1dG8gaW1hZ2VQcm92aWRlclJlZiA9
IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGRhdGFSZWYuZ2V0KCkpKTsK
ICAgICAgICAgaW1hZ2VSZWYgPSBDR0ltYWdlQ3JlYXRlV2l0aEpQRUdEYXRhUHJvdmlkZXIoaW1h
Z2VQcm92aWRlclJlZi5nZXQoKSwgbnVsbHB0ciwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVm
YXVsdCk7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXJzL2NwcC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwLnB5CmluZGV4IGViYTgyZTFhMThiOWRkMzZjOGNkMDQ5ZTliMTI3MDdhN2I5MzU4
Y2MuLjAyNzdkN2E0NjdmNzhhMWQ0OTQ4MjQzZTJhZTQ5ZDIwYTQ5Mzc4NDEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CkBAIC00OTgsNyArNDk4LDcg
QEAgZGVmIGNyZWF0ZV9za2VsZXRvbl9wYXJhbWV0ZXJzKGFsbF9wYXJhbWV0ZXJzKToKIAogCiBk
ZWYgZmluZF9wYXJhbWV0ZXJfbmFtZV9pbmRleChza2VsZXRvbl9wYXJhbWV0ZXIpOgotICAgICIi
IkRldGVybWluZXMgd2hlcmUgdGhlIHBhcmFtZXRlcmUgbmFtZSBzdGFydHMgZ2l2ZW4gdGhlIHNr
ZWxldG9uIHBhcmFtZXRlci4iIiIKKyAgICAiIiJEZXRlcm1pbmVzIHdoZXJlIHRoZSBwYXJhbWV0
ZXIgbmFtZSBzdGFydHMgZ2l2ZW4gdGhlIHNrZWxldG9uIHBhcmFtZXRlci4iIiIKICAgICAjIFRo
ZSBmaXJzdCBzcGFjZSBmcm9tIHRoZSByaWdodCBpbiB0aGUgc2ltcGxpZmllZCBwYXJhbWV0ZXIg
aXMgd2hlcmUgdGhlIHBhcmFtZXRlcgogICAgICMgbmFtZSBzdGFydHMgdW5sZXNzIHRoZSBmaXJz
dCBzcGFjZSBpcyBiZWZvcmUgYW55IGNvbnRlbnQgaW4gdGhlIHNpbXBsaWZpZWQgcGFyYW1ldGVy
LgogICAgIGJlZm9yZV9uYW1lX2luZGV4ID0gc2tlbGV0b25fcGFyYW1ldGVyLnJzdHJpcCgpLnJm
aW5kKCcgJykKQEAgLTE3NzYsNiArMTc3Niw4IEBAIGRlZiBfY2hlY2tfcGFyYW1ldGVyX25hbWVf
YWdhaW5zdF90ZXh0KHBhcmFtZXRlciwgdGV4dCwgZXJyb3IpOgogICAgICMgY2FzZSBpbnNlbnNp
dGl2ZSB3aGlsZSBzdGlsbCByZXRhaW5pbmcgd29yZCBicmVha3MuIChUaGlzIGVuc3VyZXMgdGhh
dAogICAgICMgJ2VsYXRlJyBkb2Vzbid0IGxvb2sgbGlrZSBpdCBpcyBkdXBsaWNhdGluZyBvZiAn
TmF0ZUxhdGUnLikKICAgICBjYW5vbmljYWxfcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIubG93
ZXJfd2l0aF91bmRlcnNjb3Jlc19uYW1lKCkKKyAgICBpZiBjYW5vbmljYWxfcGFyYW1ldGVyX25h
bWUgPT0gIl0iOgorICAgICAgICByZXR1cm4gVHJ1ZSAgIyBXb3JrIGFyb3VuZCBhIGJ1ZyBwYXJz
aW5nIHNvbWUgT2JqZWN0aXZlLUMgY29kZS4KIAogICAgICMgQXBwZW5kcyAib2JqZWN0IiB0byBh
bGwgdGV4dCB0byBjYXRjaCB2YXJpYWJsZXMgdGhhdCBkaWQgdGhlIHNhbWUgKGJ1dCBvbmx5CiAg
ICAgIyBkbyB0aGlzIHdoZW4gdGhlIHBhcmFtZXRlciBuYW1lIGlzIG1vcmUgdGhhbiBhIHNpbmds
ZSBjaGFyYWN0ZXIgdG8gYXZvaWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvY29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KaW5k
ZXggZGIzYzI4OTMxZDA1ZjU0MjA2YjFiZjVkNTI5ODE0ODQ5OThhYTI0MC4uYjViM2MyMjg2ZDQ5
M2IyODM5OWJhNDE3NzdkNWRhNmUwZmRkNjk1NiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRz
Q29jb2EubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1N0cmluZ0NGLmg+
CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgVVNFKEFQUEtJVCkK
ICNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KQEAgLTU0LDEwICs1NSwxMCBAQCBzdGF0aWMgTlNV
UkwgKnJlc291cmNlc0RpcmVjdG9yeVVSTCgpCiAKIC8vIEFjdGl2YXRpbmcgc3lzdGVtIGNvcGll
cyBvZiB0aGVzZSBmb250cyBvdmVycmlkZXMgYW55IG90aGVycyB0aGF0IGNvdWxkIGJlIHByZWZl
cnJlZCwgc3VjaCBhcyBvbmVzCiAvLyBpbiAvTGlicmFyeS9Gb250cy9NaWNyb3NvZnQsIGFuZCB3
aGljaCBkb24ndCBhbHdheXMgaGF2ZSB0aGUgc2FtZSBtZXRyaWNzLgotLy8gRklYTUU6IFN3aXRj
aCB0byBhIHNvbHV0aW9uIGZyb20gPHJkYXI6Ly9wcm9ibGVtLzE5NTUzNTUwPiBvbmNlIGl0J3Mg
YXZhaWxhYmxlLgorLy8gRklYTUU6IE5vdyB0aGF0IDxyZGFyOi8vcHJvYmxlbS8xOTU1MzU1MD4g
aGFzIGJlZW4gcmVzb2x2ZWQgd2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgc29sdXRpb24uCiBzdGF0
aWMgdm9pZCBhY3RpdmF0ZVN5c3RlbUNvcmVXZWJGb250cygpCiB7Ci0gICAgTlNBcnJheSAqY29y
ZVdlYkZvbnROYW1lcyA9IEBbCisgICAgY29uc3RleHByIE5TU3RyaW5nICpjb3JlV2ViRm9udE5h
bWVzW10gPSB7CiAgICAgICAgIEAiQW5kYWxlIE1vbm8iLAogICAgICAgICBAIkFyaWFsIiwKICAg
ICAgICAgQCJBcmlhbCBCbGFjayIsCkBAIC02OSw3ICs3MCw3IEBAIHN0YXRpYyB2b2lkIGFjdGl2
YXRlU3lzdGVtQ29yZVdlYkZvbnRzKCkKICAgICAgICAgQCJUcmVidWNoZXQgTVMiLAogICAgICAg
ICBAIlZlcmRhbmEiLAogICAgICAgICBAIldlYmRpbmdzIgotICAgIF07CisgICAgfTsKIAogICAg
IE5TQXJyYXkgKmZvbnRGaWxlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY29u
dGVudHNPZkRpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvTGlicmFyeS9G
b250cyIgaXNEaXJlY3Rvcnk6WUVTXQogICAgICAgICBpbmNsdWRpbmdQcm9wZXJ0aWVzRm9yS2V5
czpAW05TVVJMRmlsZVJlc291cmNlVHlwZUtleSwgTlNVUkxOYW1lS2V5XSBvcHRpb25zOjAgZXJy
b3I6MF07CkBAIC04NSw3ICs4Niw3IEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlU3lzdGVtQ29yZVdl
YkZvbnRzKCkKIAogICAgICAgICAvLyBBY3RpdmF0ZSBhbGwgZm9udCB2YXJpYXRpb25zLCBzdWNo
IGFzIEFyaWFsIEJvbGQgSXRhbGljLnR0Zi4gVGhpcyBhbGdvcml0aG0gaXMgbm90IDEwMCUgcHJl
Y2lzZSwgYXMgaXQKICAgICAgICAgLy8gYWxzbyBhY3RpdmF0ZXMgZS5nLiBBcmlhbCBVbmljb2Rl
LCB3aGljaCBpcyBub3QgYSB2YXJpYXRpb24gb2YgQXJpYWwuCi0gICAgICAgIGZvciAoTlNTdHJp
bmcgKmNvcmVXZWJGb250TmFtZSBpbiBjb3JlV2ViRm9udE5hbWVzKSB7CisgICAgICAgIGZvciAo
YXV0byYgY29yZVdlYkZvbnROYW1lIDogY29yZVdlYkZvbnROYW1lcykgewogICAgICAgICAgICAg
aWYgKFtmaWxlTmFtZSBoYXNQcmVmaXg6Y29yZVdlYkZvbnROYW1lXSkgewogICAgICAgICAgICAg
ICAgIENGRXJyb3JSZWYgZXJyb3IgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIGlmICghQ1RG
b250TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JVUkwoKF9fYnJpZGdlIENGVVJMUmVmKWZvbnRVUkws
IGtDVEZvbnRNYW5hZ2VyU2NvcGVQcm9jZXNzLCAmZXJyb3IpKSB7CkBAIC0xMDIsMzAgKzEwMywy
NyBAQCBzdGF0aWMgdm9pZCBhY3RpdmF0ZVN5c3RlbUNvcmVXZWJGb250cygpCiAKIHZvaWQgYWN0
aXZhdGVGb250cygpCiB7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGaWxlTmFtZXNbXSA9
IHsKLSAgICAgICAgIkFIRU1fX19fLlRURiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVy
MTAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiIsCi0gICAgICAg
ICJXZWJLaXRXZWlnaHRXYXRjaGVyMzAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRj
aGVyNDAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyNTAwLnR0ZiIsCi0gICAg
ICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyNjAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRX
YXRjaGVyNzAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiIsCi0g
ICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiIsCi0gICAgICAgICJGb250V2l0aEZl
YXR1cmVzLm90ZiIsCi0gICAgICAgICJGb250V2l0aEZlYXR1cmVzLnR0ZiIsCi0gICAgICAgIDAK
KyAgICBjb25zdGV4cHIgTlNTdHJpbmcgKmZvbnRGaWxlTmFtZXNbXSA9IHsKKyAgICAgICAgQCJB
SEVNX19fXy5UVEYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmIiwKKyAg
ICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjMwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI0MDAudHRm
IiwKKyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyNTAwLnR0ZiIsCisgICAgICAgIEAiV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjYwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI3
MDAudHRmIiwKKyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiIsCisgICAgICAg
IEAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYiLAorICAgICAgICBAIkZvbnRXaXRoRmVhdHVy
ZXMub3RmIiwKKyAgICAgICAgQCJGb250V2l0aEZlYXR1cmVzLnR0ZiIsCiAgICAgfTsKIAotICAg
IE5TTXV0YWJsZUFycmF5ICpmb250VVJMcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgZm9udEZpbGVOYW1lc1tpXTsgKytpKSB7Ci0gICAgICAgIE5T
VVJMICpmb250VVJMID0gW3Jlc291cmNlc0RpcmVjdG9yeVVSTCgpIFVSTEJ5QXBwZW5kaW5nUGF0
aENvbXBvbmVudDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6Zm9udEZpbGVOYW1lc1tp
XV0gaXNEaXJlY3Rvcnk6Tk9dOwotICAgICAgICBbZm9udFVSTHMgYWRkT2JqZWN0Oltmb250VVJM
IGFic29sdXRlVVJMXV07Ci0gICAgfQorICAgIGF1dG8gZm9udFVSTHMgPSBjcmVhdGVOU0FycmF5
KGZvbnRGaWxlTmFtZXMsIFtdIChOU1N0cmluZyAqbmFtZSkgeworICAgICAgICByZXR1cm4gW3Jl
c291cmNlc0RpcmVjdG9yeVVSTCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpuYW1lIGlz
RGlyZWN0b3J5Ok5PXS5hYnNvbHV0ZVVSTDsKKyAgICB9KTsKIAogICAgIENGQXJyYXlSZWYgZXJy
b3JzID0gbnVsbHB0cjsKLSAgICBpZiAoIUNURm9udE1hbmFnZXJSZWdpc3RlckZvbnRzRm9yVVJM
cygoX19icmlkZ2UgQ0ZBcnJheVJlZilmb250VVJMcywga0NURm9udE1hbmFnZXJTY29wZVByb2Nl
c3MsICZlcnJvcnMpKSB7CisgICAgaWYgKCFDVEZvbnRNYW5hZ2VyUmVnaXN0ZXJGb250c0ZvclVS
THMoKF9fYnJpZGdlIENGQXJyYXlSZWYpZm9udFVSTHMuZ2V0KCksIGtDVEZvbnRNYW5hZ2VyU2Nv
cGVQcm9jZXNzLCAmZXJyb3JzKSkgewogICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBhY3RpdmF0
ZSBmb250czogJUAiLCBlcnJvcnMpOwogICAgICAgICBDRlJlbGVhc2UoZXJyb3JzKTsKICAgICAg
ICAgZXhpdCgxKTsKQEAgLTEzMyw3ICsxMzEsNyBAQCB2b2lkIGFjdGl2YXRlRm9udHMoKQogCiAj
aWYgVVNFKEFQUEtJVCkKICAgICBhY3RpdmF0ZVN5c3RlbUNvcmVXZWJGb250cygpOwotI2VuZGlm
IC8vIFVTRShBUFBLSVQpCisjZW5kaWYKIH0KIAogdm9pZCBpbnN0YWxsRmFrZUhlbHZldGljYShX
S1N0cmluZ1JlZiBjb25maWd1cmF0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396875</attachid>
            <date>2020-04-18 17:18:35 -0700</date>
            <delta_ts>2020-04-18 17:31:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210702-20200418171834.patch</filename>
            <type>text/plain</type>
            <size>173348</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGI5NzI2MDA1YmI3NmMyYWIwMzg5YTdl
MDM3ZGNiMTg5NGY1ZjFhNzIuLjc0OGQyYjlmYzc5ZDI5ZmE5YTdhNDRkZjgxZDFjMDRjNjI0YmJm
YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTAgQEAKKzIwMjAtMDQtMTggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gVXNlIGNyZWF0ZU5TQXJyYXkgaW4gbWFueSBt
b3JlIHBsYWNlcyB0aGF0IGJ1aWxkIE5TQXJyYXkgb2JqZWN0cyBmcm9tIEMrKyBjb2xsZWN0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNzAy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKIDIwMjAtMDQtMTggIEtl
aXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVkZXNpZ24g
aG93IHdlIGRvIGZvci1vZiBpdGVyYXRpb24gZm9yIEpTQXJyYXlzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTcw
N2QwZWQ1Yzk1NTc0M2MwYWEyZjJlZjNkMzJmNzU0M2ZjMWUzNS4uYjgxY2E0ZWNjMDk5YjQ5YzFi
MmExZTkwODlkMTkwZGJjYTI3NTk4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIw
LTA0LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2Fd
IFVzZSBjcmVhdGVOU0FycmF5IGluIG1hbnkgbW9yZSBwbGFjZXMgdGhhdCBidWlsZCBOU0FycmF5
IG9iamVjdHMgZnJvbSBDKysgY29sbGVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDcwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCiAyMDIwLTA0LTE4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KIAogICAgICAgICBbQ1NTIHNlbGVjdG9yc10gU3VwcG9ydCA6d2hlcmUoKSBwc2V1ZG8gY2xh
c3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggYzM3OTNhYmI0YmQ1YzI0ODExYzgzYWZjZTg0YjFiYWZlM2E1YjI3NS4u
M2UyYmMzY2VlNWI4Mjk5OTM2ZmJkZjBiODU1MmQ2ODRkMmJhOGE2YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMCBAQAorMjAyMC0wNC0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW0NvY29hXSBVc2UgY3JlYXRlTlNBcnJheSBpbiBtYW55IG1vcmUgcGxhY2VzIHRo
YXQgYnVpbGQgTlNBcnJheSBvYmplY3RzIGZyb20gQysrIGNvbGxlY3Rpb25zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA3MDIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAyMC0wNC0xOCAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBjbGllbnQgY2VydGlm
aWNhdGUgYXV0aGVudGljYXRpb24gd2hlbiB1c2luZyBub24tZGVmYXVsdCBXS1dlYnNpdGVEYXRh
U3RvcmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKaW5kZXggOTJkZDM3NTlhODE5Y2I2NTkz
MGQ2NmFkNWNhZWM2MWU1ZTliMzUxZC4uZDgxM2RlNWU2MWQzNzk5ZjYwYzdmZWUzOGYwYWVkYTJh
MzQ1NTBjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisy
MDIwLTA0LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29j
b2FdIFVzZSBjcmVhdGVOU0FycmF5IGluIG1hbnkgbW9yZSBwbGFjZXMgdGhhdCBidWlsZCBOU0Fy
cmF5IG9iamVjdHMgZnJvbSBDKysgY29sbGVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDcwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCiAyMDIwLTA0LTE4ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+
CiAKICAgICAgICAgUmVkdWNlIHBhcmFtZXRlciBsaXN0IG9mIHRoZSBGcmFtZUxvYWRSZXF1ZXN0
IGNvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggYWZkYjA4NWFmOGU5
MGFjNzc0NWIwYmRiMTI0Yjk3NzFhODBiMDE3ZS4uYTMxYzI4NTQyODcxMDE0YTQ4NjhmNGE3Y2Iz
NDg0YjBjZjk4ZmE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEw
IEBACisyMDIwLTA0LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAg
ICBbQ29jb2FdIFVzZSBjcmVhdGVOU0FycmF5IGluIG1hbnkgbW9yZSBwbGFjZXMgdGhhdCBidWls
ZCBOU0FycmF5IG9iamVjdHMgZnJvbSBDKysgY29sbGVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDcwMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCiAyMDIwLTA0LTE4ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxp
YS5jb20+CiAKICAgICAgICAgUmVkdWNlIHBhcmFtZXRlciBsaXN0IG9mIHRoZSBGcmFtZUxvYWRS
ZXF1ZXN0IGNvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9WZWN0
b3JDb2NvYS5oIGIvU291cmNlL1dURi93dGYvY29jb2EvVmVjdG9yQ29jb2EuaAppbmRleCBiOGM5
NTZhNjhhNDM0MzE1M2YxNmEzYzg4YmFkNjM1NTVjNjNkN2M4Li41MjBmNGJkMjRlYmM0NDA3MGVl
MzMyMDU5OGMwN2YyMmIwYzQ3M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1ZlY3RvckNvY29hLmgKQEAg
LTM0LDQxICszNCw0NyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogLy8gU3BlY2lhbGl6ZSB0aGUgYmVo
YXZpb3Igb2YgdGhlc2UgZnVuY3Rpb25zIGJ5IG92ZXJsb2FkaW5nIHRoZSBtYWtlTlNBcnJheUVs
ZW1lbnQKIC8vIGZ1bmN0aW9ucyBhbmQgbWFrZVZlY3RvckVsZW1lbnQgZnVuY3Rpb25zLiBUaGUg
bWFrZU5TQXJyYXlFbGVtZW50IGZ1bmN0aW9uIHRha2VzCi0vLyBhIGNvbnN0JiB0byBhIHZlY3Rv
ciBlbGVtZW50IGFuZCBjYW4gcmV0dXJuIGVpdGhlciBhIFJldGFpblB0cjxpZD4gb3IgYW4gaWQK
Ky8vIGEgY29uc3QmIHRvIGEgY29sbGVjdGlvbiBlbGVtZW50IGFuZCBjYW4gcmV0dXJuIGVpdGhl
ciBhIFJldGFpblB0cjxpZD4gb3IgYW4gaWQKIC8vIGlmIHRoZSB2YWx1ZSBpcyBhdXRvcmVsZWFz
ZWQuIFRoZSBtYWtlVmVjdG9yRWxlbWVudCBmdW5jdGlvbiB0YWtlcyBhbiBpZ25vcmVkCiAvLyBw
b2ludGVyIHRvIHRoZSB2ZWN0b3IgZWxlbWVudCB0eXBlLCBtYWtpbmcgYXJndW1lbnQtZGVwZW5k
ZW50IGxvb2t1cCB3b3JrLCBhbmQgYW4KIC8vIGlkIGZvciB0aGUgYXJyYXkgZWxlbWVudCwgYW5k
IHJldHVybnMgYW4gT3B0aW9uYWw8VD4gb2YgdGhlIHRoZSB2ZWN0b3IgZWxlbWVudCwKIC8vIGFs
bG93aW5nIHVzIHRvIGZpbHRlciBvdXQgYXJyYXkgZWxlbWVudHMgdGhhdCBhcmUgbm90IG9mIHRo
ZSBleHBlY3RlZCB0eXBlLgogLy8KLS8vICAgIFJldGFpblB0cjxpZD4gbWFrZU5TQXJyYXlFbGVt
ZW50KGNvbnN0IFZlY3RvckVsZW1lbnRUeXBlJiB2ZWN0b3JFbGVtZW50KTsKKy8vICAgIFJldGFp
blB0cjxpZD4gbWFrZU5TQXJyYXlFbGVtZW50KGNvbnN0IENvbGxlY3Rpb25FbGVtZW50VHlwZSYg
Y29sbGVjdGlvbkVsZW1lbnQpOwogLy8gICAgICAgIC1vci0KIC8vICAgIGlkIG1ha2VOU0FycmF5
RWxlbWVudChjb25zdCBWZWN0b3JFbGVtZW50VHlwZSYgdmVjdG9yRWxlbWVudCk7CiAvLwogLy8g
ICAgT3B0aW9uYWw8VmVjdG9yRWxlbWVudFR5cGU+IG1ha2VWZWN0b3JFbGVtZW50KGNvbnN0IFZl
Y3RvckVsZW1lbnRUeXBlKiwgaWQgYXJyYXlFbGVtZW50KTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
VmVjdG9yVHlwZT4gUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5TQXJyYXkoY29uc3QgVmVjdG9y
VHlwZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IFJldGFpblB0cjxOU0Fy
cmF5PiBjcmVhdGVOU0FycmF5KENvbGxlY3Rpb25UeXBlJiYpOwogdGVtcGxhdGU8dHlwZW5hbWUg
VmVjdG9yRWxlbWVudFR5cGU+IFZlY3RvcjxWZWN0b3JFbGVtZW50VHlwZT4gbWFrZVZlY3RvcihO
U0FycmF5ICopOwogCiAvLyBUaGlzIG92ZXJsb2FkIG9mIGNyZWF0ZU5TQXJyYXkgdGFrZXMgYSBm
dW5jdGlvbiB0byBtYXAgZWFjaCB2ZWN0b3IgZWxlbWVudCB0byBhbiBPYmplY3RpdmUtQyBvYmpl
Y3QuCiAvLyBUaGUgbWFwIGZ1bmN0aW9uIGhhcyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgdGhlIG1h
a2VOU0FycmF5RWxlbWVudCBmdW5jdGlvbiBhYm92ZSwgYnV0IGNhbiBiZSBhbnkKIC8vIGZ1bmN0
aW9uIGluY2x1ZGluZyBhIGxhbWJkYSwgYSBmdW5jdGlvbi1saWtlIG9iamVjdCwgb3IgRnVuY3Rp
b248Pi4KLXRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIE1hcEZ1bmN0aW9u
VHlwZT4gUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5TQXJyYXkoY29uc3QgVmVjdG9yVHlwZSYs
IGNvbnN0IE1hcEZ1bmN0aW9uVHlwZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5
cGUsIHR5cGVuYW1lIE1hcEZ1bmN0aW9uVHlwZT4gUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5T
QXJyYXkoQ29sbGVjdGlvblR5cGUmJiwgY29uc3QgTWFwRnVuY3Rpb25UeXBlJik7CiAKIC8vIElt
cGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIGZ1bmN0aW9uIHRlbXBsYXRlcyBhYm92ZS4KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4gUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5T
QXJyYXkoY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKQorc3RhdGljIHZvaWQgYWRkVW5sZXNzTmls
KE5TTXV0YWJsZUFycmF5ICphcnJheSwgaWQgdmFsdWUpCiB7Ci0gICAgYXV0byBhcnJheSA9IGFk
b3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTp2ZWN0b3Iuc2l6
ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICBbYXJyYXkg
YWRkT2JqZWN0OmdldFB0cihtYWtlTlNBcnJheUVsZW1lbnQoZWxlbWVudCkpXTsKKyAgICBpZiAo
dmFsdWUpCisgICAgICAgIFthcnJheSBhZGRPYmplY3Q6dmFsdWVdOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4gUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5TQXJyYXko
Q29sbGVjdGlvblR5cGUmJiBjb2xsZWN0aW9uKQoreworICAgIGF1dG8gYXJyYXkgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c3RkOjpzaXplKGNvbGxl
Y3Rpb24pXSk7CisgICAgZm9yIChhdXRvJiYgZWxlbWVudCA6IGNvbGxlY3Rpb24pCisgICAgICAg
IGFkZFVubGVzc05pbChhcnJheSwgZ2V0UHRyKG1ha2VOU0FycmF5RWxlbWVudChzdGQ6OmZvcndh
cmQ8ZGVjbHR5cGUoZWxlbWVudCk+KGVsZW1lbnQpKSkpOwogICAgIHJldHVybiBhcnJheTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZSwgdHlwZW5hbWUgTWFwRnVuY3Rpb25UeXBl
PiBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNBcnJheShjb25zdCBWZWN0b3JUeXBlJiB2ZWN0
b3IsIGNvbnN0IE1hcEZ1bmN0aW9uVHlwZSYgZnVuY3Rpb24pCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xsZWN0aW9uVHlwZSwgdHlwZW5hbWUgTWFwRnVuY3Rpb25UeXBlPiBSZXRhaW5QdHI8TlNBcnJh
eT4gY3JlYXRlTlNBcnJheShDb2xsZWN0aW9uVHlwZSYmIGNvbGxlY3Rpb24sIGNvbnN0IE1hcEZ1
bmN0aW9uVHlwZSYgZnVuY3Rpb24pCiB7Ci0gICAgYXV0byBhcnJheSA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTp2ZWN0b3Iuc2l6ZSgpXSk7Ci0gICAg
Zm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0Omdl
dFB0cihmdW5jdGlvbihlbGVtZW50KSldOworICAgIGF1dG8gYXJyYXkgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c3RkOjpzaXplKGNvbGxlY3Rpb24p
XSk7CisgICAgZm9yIChhdXRvJiYgZWxlbWVudCA6IGNvbGxlY3Rpb24pCisgICAgICAgIGFkZFVu
bGVzc05pbChhcnJheSwgZ2V0UHRyKGZ1bmN0aW9uKHN0ZDo6Zm9yd2FyZDxkZWNsdHlwZShlbGVt
ZW50KT4oZWxlbWVudCkpKSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCkBAIC04Nyw0ICs5Myw1
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvckVsZW1lbnRUeXBlPiBWZWN0b3I8VmVjdG9yRWxl
bWVudFR5cGU+IG1ha2VWZWN0b3IoTlNBcnJhCiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCit1c2lu
ZyBXVEY6OmNyZWF0ZU5TQXJyYXk7CiB1c2luZyBXVEY6Om1ha2VWZWN0b3I7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4IGU0ZjM4ZTE0MzAyN2JhZTlkY2ExMWQ3
YzI3NTY1ZGU4YjY3OTIwZTIuLjk2NzgyMGIwZTA5Mzc3MWNmZTIyODI0ZjkwZGQyNDI2ODIyMjIx
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC00NSw3ICs0
NSw2IEBACiAjaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MTmFtZXMu
aCIKICNpbXBvcnQgIkludFJlY3QuaCIKLSNpbXBvcnQgIkludFNpemUuaCIKICNpbXBvcnQgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQgIlJhbmdlLmgiCkBA
IC01OSw4ICs1OCw4IEBACiAjaW1wb3J0ICJXQUtXaW5kb3cuaCIKICNpbXBvcnQgIldlYkNvcmVU
aHJlYWQuaCIKICNpbXBvcnQgIlZpc2libGVVbml0cy5oIgotCiAjaW1wb3J0IDxDb3JlVGV4dC9D
b3JlVGV4dC5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIGVudW0gewog
ICAgIE5TQXR0YWNobWVudENoYXJhY3RlciA9IDB4ZmZmYyAgICAvKiBUbyBkZW5vdGUgYXR0YWNo
bWVudHMuICovCkBAIC0xNzczLDIwICsxNzcyLDE3IEBAIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmls
aXR5Rmxvd1RvRWxlbWVudHMKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW47CiAgICAgc2VsZi5heEJhY2tpbmdPYmplY3QtPmFyaWFG
bG93VG9FbGVtZW50cyhjaGlsZHJlbik7CiAgICAgCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gY2hp
bGRyZW4uc2l6ZSgpOwotICAgIE5TTXV0YWJsZUFycmF5KiBhcnJheSA9IFtOU011dGFibGVBcnJh
eSBhcnJheVdpdGhDYXBhY2l0eTpsZW5ndGhdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3Jh
cHBlciA9IGNoaWxkcmVuW2ldLT53cmFwcGVyKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXko
Y2hpbGRyZW4sIFtdIChhdXRvJiBjaGlsZCkgLT4gaWQgeworICAgICAgICBhdXRvIHdyYXBwZXIg
PSBjaGlsZC0+d3JhcHBlcigpOwogICAgICAgICBBU1NFUlQod3JhcHBlcik7Ci0gICAgICAgIGlm
ICghd3JhcHBlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChjaGlsZHJl
bltpXS0+aXNBdHRhY2htZW50KCkgJiYgW3dyYXBwZXIgYXR0YWNobWVudFZpZXddKQotICAgICAg
ICAgICAgW2FycmF5IGFkZE9iamVjdDpbd3JhcHBlciBhdHRhY2htZW50Vmlld11dOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OndyYXBwZXJdOwotICAgIH0KLSAg
ICByZXR1cm4gYXJyYXk7CisgICAgICAgIGlmIChjaGlsZC0+aXNBdHRhY2htZW50KCkpIHsKKyAg
ICAgICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnRWaWV3ID0gd3JhcHBlci5hdHRhY2htZW50Vmll
dykKKyAgICAgICAgICAgICAgICByZXR1cm4gYXR0YWNobWVudFZpZXc7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChp
ZClhY2Nlc3NpYmlsaXR5TGlua2VkRWxlbWVudApAQCAtMjc0MywxNSArMjczOSw5IEBAIC0gKE5T
QXJyYXkgKilyZWN0c0ZvclNlbGVjdGlvblJlY3RzOihjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2Vs
ZWN0aW9uUmVjdD4mKXNlbGVjCiAgICAgaWYgKCFzaXplKQogICAgICAgICByZXR1cm4gbmlsOwog
ICAgIAotICAgIE5TTXV0YWJsZUFycmF5ICpyZWN0cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdp
dGhDYXBhY2l0eTpzaXplXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvblJlY3QmIGNvcmVSZWN0ID0gc2Vs
ZWN0aW9uUmVjdHNbaV07Ci0gICAgICAgIGF1dG8gc2VsZWN0aW9uUmVjdCA9IEZsb2F0UmVjdChj
b3JlUmVjdC5yZWN0KCkpOwotICAgICAgICBDR1JlY3QgcmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0
VG9TcGFjZTpzZWxlY3Rpb25SZWN0IHNwYWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2U6
OlNjcmVlbl07Ci0gICAgICAgIFtyZWN0cyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoUmVj
dDpyZWN0XV07Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZWN0czsKKyAgICByZXR1cm4gY3Jl
YXRlTlNBcnJheShzZWxlY3Rpb25SZWN0cywgWyZdIChjb25zdCBXZWJDb3JlOjpTZWxlY3Rpb25S
ZWN0JiByZWN0KSB7CisgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OltzZWxm
IGNvbnZlcnRSZWN0VG9TcGFjZTpGbG9hdFJlY3QocmVjdC5yZWN0KCkpIHNwYWNlOkFjY2Vzc2li
aWxpdHlDb252ZXJzaW9uU3BhY2U6OlNjcmVlbl1dOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9
CiAKIC0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmtlckZvclBvaW50OihD
R1BvaW50KXBvaW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21h
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCmluZGV4
IDllMTYwNGFiODNlYjVjMmI4MjlhZjJjY2YxYzQxZjY2M2E0MzQ1NTIuLjY4MmRmZTU3N2Q4YmQ3
NTlkOGExNjk0MTA4YzA4MTk2MTljNWQ2NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQmFzZS5oCkBAIC0yNiw4ICsyNiw3IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5k
ZWYgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlX2gKLSNkZWZpbmUgV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQWNj
ZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3Jl
R3JhcGhpY3MuaD4KQEAgLTgyLDkgKzgxLDkgQEAgY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogLSAo
dm9pZClhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOihOU1N0cmluZyAqKW5vdGlmaWNh
dGlvbk5hbWU7CiAtICh2b2lkKWFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmljYXRpb246KE5TU3Ry
aW5nICopbm90aWZpY2F0aW9uTmFtZSB1c2VySW5mbzooTlNEaWN0aW9uYXJ5ICopdXNlckluZm87
CiAKLS0gKENHUGF0aFJlZiljb252ZXJ0UGF0aFRvU2NyZWVuU3BhY2U6KFdlYkNvcmU6OlBhdGgg
JilwYXRoOworLSAoQ0dQYXRoUmVmKWNvbnZlcnRQYXRoVG9TY3JlZW5TcGFjZTooY29uc3QgV2Vi
Q29yZTo6UGF0aCYpcGF0aDsKIAotLSAoQ0dSZWN0KWNvbnZlcnRSZWN0VG9TcGFjZTooV2ViQ29y
ZTo6RmxvYXRSZWN0ICYpcmVjdCBzcGFjZTooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUNvbnZlcnNp
b25TcGFjZSlzcGFjZTsKKy0gKENHUmVjdCljb252ZXJ0UmVjdFRvU3BhY2U6KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpcmVjdCBzcGFjZTooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUNvbnZlcnNp
b25TcGFjZSlzcGFjZTsKIAogLy8gTWF0aCByZWxhdGVkIGZ1bmN0aW9ucwogLSAoTlNBcnJheSAq
KWFjY2Vzc2liaWxpdHlNYXRoUG9zdHNjcmlwdFBhaXJzOwpAQCAtOTksNSArOTgsMyBAQCBleHRl
cm4gTlNBcnJheSAqY29udmVydFRvTlNBcnJheShjb25zdCBXZWJDb3JlOjpBWENvcmVPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZAogI2VuZGlmCiAKIEBlbmQKLQotI2VuZGlmIC8vIFdlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UubW0gYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlckJhc2UubW0KaW5kZXggNzE4ODJiODVhZDMzOWUwYjRmMmE4NjdkODFiMzE2NTMxZjJjZTRm
Zi4uMTRlYzQwNzgyNDhlYWEzM2QyNmE1OTU3NzliYWI3MzkyYjdmOGY2YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJCYXNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQpAQCAtNjgsMTAgKzY4LDEyIEBACiAjaW1w
b3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKKyNpbXBv
cnQgIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgiCiAjaW1wb3J0IDxwYWwvc3Bp
L21hYy9ISVNlcnZpY2VzU1BJLmg+CiAjZWxzZQogI2ltcG9ydCAiV0FLVmlldy5oIgogI2ltcG9y
dCAiV0FLV2luZG93LmgiCisjaW1wb3J0ICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklP
Uy5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMjQ5LDM1ICsyNTEs
MzMgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGljIE5TQXJyYXkgKmNvbnZl
cnRNYXRoUGFpcnNUb05TQXJyYXkoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJiBwYWlycywgTlNTdHJpbmcgKnN1YnNjcmlwdEtleSwg
TlNTdHJpbmcgKnN1cGVyc2NyaXB0S2V5KQogewotICAgIE5TTXV0YWJsZUFycmF5ICphcnJheSA9
IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpwYWlycy5zaXplKCldOwotICAgIGZv
ciAoY29uc3QgYXV0byYgcGFpciA6IHBhaXJzKSB7Ci0gICAgICAgIE5TTXV0YWJsZURpY3Rpb25h
cnkgKnBhaXJEaWN0aW9uYXJ5ID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07Cisg
ICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocGFpcnMsIFsmXSAoYXV0byYgcGFpcikgeworICAgICAg
ICBpZCBzdWJzY3JpcHQgPSBuaWw7CiAgICAgICAgIGlmIChwYWlyLmZpcnN0ICYmIHBhaXIuZmly
c3QtPndyYXBwZXIoKSAmJiAhcGFpci5maXJzdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQot
ICAgICAgICAgICAgW3BhaXJEaWN0aW9uYXJ5IHNldE9iamVjdDpwYWlyLmZpcnN0LT53cmFwcGVy
KCkgZm9yS2V5OnN1YnNjcmlwdEtleV07CisgICAgICAgICAgICBzdWJzY3JpcHQgPSBwYWlyLmZp
cnN0LT53cmFwcGVyKCk7CisgICAgICAgIGlkIHN1cGVyc2NyaXB0ID0gbmlsOwogICAgICAgICBp
ZiAocGFpci5zZWNvbmQgJiYgcGFpci5zZWNvbmQtPndyYXBwZXIoKSAmJiAhcGFpci5zZWNvbmQt
PmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKLSAgICAgICAgICAgIFtwYWlyRGljdGlvbmFyeSBz
ZXRPYmplY3Q6cGFpci5zZWNvbmQtPndyYXBwZXIoKSBmb3JLZXk6c3VwZXJzY3JpcHRLZXldOwot
ICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OnBhaXJEaWN0aW9uYXJ5XTsKLSAgICB9Ci0gICAgcmV0
dXJuIGFycmF5OwotfQotCi1zdGF0aWMgdm9pZCBhZGRDaGlsZFRvQXJyYXkoQVhDb3JlT2JqZWN0
JiBjaGlsZCwgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhcnJheSkKLXsKLSAgICBXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqd3JhcHBlciA9IGNoaWxkLndyYXBwZXIoKTsKLSAgICAv
LyBXZSB3YW50IHRvIHJldHVybiB0aGUgYXR0YWNobWVudCB2aWV3IGluc3RlYWQgb2YgdGhlIG9i
amVjdCByZXByZXNlbnRpbmcgdGhlIGF0dGFjaG1lbnQsCi0gICAgLy8gb3RoZXJ3aXNlLCB3ZSBn
ZXQgcGFsaW5kcm9tZSBlcnJvcnMgaW4gdGhlIEFYIGhpZXJhcmNoeS4KLSAgICBpZiAoY2hpbGQu
aXNBdHRhY2htZW50KCkgJiYgW3dyYXBwZXIgYXR0YWNobWVudFZpZXddKQotICAgICAgICBbYXJy
YXkuZ2V0KCkgYWRkT2JqZWN0Olt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XV07Ci0gICAgZWxzZSBp
ZiAod3JhcHBlcikKLSAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDp3cmFwcGVyXTsKKyAg
ICAgICAgICAgIHN1cGVyc2NyaXB0ID0gcGFpci5zZWNvbmQtPndyYXBwZXIoKTsKKyAgICAgICAg
aWYgKCFzdWJzY3JpcHQgJiYgIXN1cGVyc2NyaXB0KQorICAgICAgICAgICAgcmV0dXJuIEB7IH07
CisgICAgICAgIGlmICghc3VwZXJzY3JpcHQpCisgICAgICAgICAgICByZXR1cm4gQHsgc3Vic2Ny
aXB0S2V5OiBzdWJzY3JpcHQgfTsKKyAgICAgICAgaWYgKCFzdWJzY3JpcHQpCisgICAgICAgICAg
ICByZXR1cm4gQHsgc3VwZXJzY3JpcHRLZXk6IHN1cGVyc2NyaXB0IH07CisgICAgICAgIHJldHVy
biBAeyBzdWJzY3JpcHRLZXk6IHN1YnNjcmlwdCwgc3VwZXJzY3JpcHRLZXk6IHN1cGVyc2NyaXB0
IH07CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogTlNBcnJheSAqY29udmVydFRvTlNBcnJh
eShjb25zdCBXZWJDb3JlOjpBWENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciYgY2hpbGRyZW4pCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y2hpbGRyZW4uc2l6ZSgpXTsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCi0gICAgICAgIGFkZENoaWxkVG9BcnJheSgq
Y2hpbGQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIFtyZXN1bHQgYXV0b3JlbGVhc2VdOworICAgIHJl
dHVybiBjcmVhdGVOU0FycmF5KGNoaWxkcmVuLCBbXSAoYXV0byYgY2hpbGQpIC0+IGlkIHsKKyAg
ICAgICAgYXV0byB3cmFwcGVyID0gY2hpbGQtPndyYXBwZXIoKTsKKyAgICAgICAgLy8gV2Ugd2Fu
dCB0byByZXR1cm4gdGhlIGF0dGFjaG1lbnQgdmlldyBpbnN0ZWFkIG9mIHRoZSBvYmplY3QgcmVw
cmVzZW50aW5nIHRoZSBhdHRhY2htZW50LAorICAgICAgICAvLyBvdGhlcndpc2UsIHdlIGdldCBw
YWxpbmRyb21lIGVycm9ycyBpbiB0aGUgQVggaGllcmFyY2h5LgorICAgICAgICBpZiAoY2hpbGQt
PmlzQXR0YWNobWVudCgpICYmIHdyYXBwZXIuYXR0YWNobWVudFZpZXcpCisgICAgICAgICAgICBy
ZXR1cm4gd3JhcHBlci5hdHRhY2htZW50VmlldzsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7Cisg
ICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogQGltcGxlbWVudGF0aW9uIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyQmFzZQpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHN0YXRpYyB2b2lkIGNvbnZl
cnRQYXRoVG9TY3JlZW5TcGFjZUZ1bmN0aW9uKFBhdGhDb252ZXJzaW9uSW5mbyYgY29udmVyc2lv
biwgY29uCiAgICAgfQogfQogCi0tIChDR1BhdGhSZWYpY29udmVydFBhdGhUb1NjcmVlblNwYWNl
OihQYXRoICYpcGF0aAorLSAoQ0dQYXRoUmVmKWNvbnZlcnRQYXRoVG9TY3JlZW5TcGFjZTooY29u
c3QgUGF0aCYpcGF0aAogewogICAgIFBhdGhDb252ZXJzaW9uSW5mbyBjb252ZXJzaW9uID0geyBz
ZWxmLCBDR1BhdGhDcmVhdGVNdXRhYmxlKCkgfTsKICAgICBwYXRoLmFwcGx5KFsmY29udmVyc2lv
bl0oY29uc3QgUGF0aEVsZW1lbnQmIHBhdGhFbGVtZW50KSB7CkBAIC00NjMsNyArNDYzLDcgQEAg
LSAoaWQpX2FjY2Vzc2liaWxpdHlXZWJEb2N1bWVudFZpZXcKICAgICByZXR1cm4gbmlsOwogfQog
Ci0tIChDR1JlY3QpY29udmVydFJlY3RUb1NwYWNlOihXZWJDb3JlOjpGbG9hdFJlY3QgJilyZWN0
IHNwYWNlOihBY2Nlc3NpYmlsaXR5Q29udmVyc2lvblNwYWNlKXNwYWNlCistIChDR1JlY3QpY29u
dmVydFJlY3RUb1NwYWNlOihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKXJlY3Qgc3BhY2U6KEFj
Y2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2Upc3BhY2UKIHsKICAgICBpZiAoIXNlbGYuYXhCYWNr
aW5nT2JqZWN0KQogICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggZDFmZTI2YzExZGRkODJkYTJkNGJjNTg3MmMwYTYx
ZTQxYmUwYTgyYy4uYjE0ODJhZGI5M2Y0ODkxMTg0ZGJkM2Y4NGUxMDQzYmE1ZjYzNTE2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTM5MzUsMTIgKzM5MzUs
MTAgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBh
dXRvIHJhbmdlcyA9IGJhY2tpbmdPYmplY3QtPmZpbmRUZXh0UmFuZ2VzKGNyaXRlcmlhKTsKICAg
ICAgICAgICAgIGlmIChyYW5nZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgICAgICAgICBOU011dGFibGVBcnJheSAqbWFya2VycyA9IFtOU011dGFibGVBcnJh
eSBhcnJheVdpdGhDYXBhY2l0eTpyYW5nZXMuc2l6ZSgpXTsKLSAgICAgICAgICAgIGZvciAoYXV0
byByYW5nZSA6IHJhbmdlcykgewotICAgICAgICAgICAgICAgIGlmIChpZCBtYXJrZXIgPSBbcHJv
dGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6cmFuZ2VdKQotICAgICAgICAgICAg
ICAgICAgICBbbWFya2VycyBhZGRPYmplY3Q6bWFya2VyXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBtYXJrZXJzOworCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTlNBcnJh
eShyYW5nZXMsIFsmXSAoYXV0byYgcmFuZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gW3By
b3RlY3RlZFNlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOnJhbmdlXTsKKyAgICAgICAgICAg
IH0pLmF1dG9yZWxlYXNlKCk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtMzk1NSwxMCArMzk1
Myw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICB9KTsK
ICAgICAgICAgaWYgKG9wZXJhdGlvblJlc3VsdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1
cm4gbmlsOwotICAgICAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5
IGFycmF5V2l0aENhcGFjaXR5Om9wZXJhdGlvblJlc3VsdC5zaXplKCldOwotICAgICAgICBmb3Ig
KGF1dG8gc3RyIDogb3BlcmF0aW9uUmVzdWx0KQotICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmpl
Y3Q6c3RyXTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5T
QXJyYXkob3BlcmF0aW9uUmVzdWx0KS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIGlmIChb
YXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDb3VudEZv
clNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVzQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVzQ29jb2EubW0KaW5kZXggZjZm
OTJhNGM5ZDRmOTZiYWQ4Mzk3ZmEyM2ZiZDUyMGVkZjI5MzAyOC4uZDE4MzMzNDIzMGFjODY4OWU5
NmMwZDQ4NDY0ZDgxNWE3OTFmMWE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9Gb250QXR0cmlidXRlc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRm9udEF0dHJpYnV0ZXNDb2NvYS5tbQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW1w
b3J0ICJDb2xvckNvY29hLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TQXR0cmlidXRlZFN0
cmluZ1NQSS5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCA8cGFsL2lvcy9VSUtpdFNvZnRMaW5rLmg+CkBAIC0x
MjksMTAgKzEzMCw5IEBAIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IEZvbnRBdHRyaWJ1dGVzOjpj
cmVhdGVEaWN0aW9uYXJ5KCkgY29uc3QKICAgICB9CiAKICAgICBpZiAoIXRleHRMaXN0cy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgYXV0byB0ZXh0TGlzdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnRleHRMaXN0cy5zaXplKCldKTsKLSAgICAg
ICAgZm9yIChhdXRvJiB0ZXh0TGlzdCA6IHRleHRMaXN0cykKLSAgICAgICAgICAgIFt0ZXh0TGlz
dEFycmF5IGFkZE9iamVjdDp0ZXh0TGlzdC5jcmVhdGVUZXh0TGlzdCgpLmdldCgpXTsKLSAgICAg
ICAgW3N0eWxlIHNldFRleHRMaXN0czp0ZXh0TGlzdEFycmF5LmdldCgpXTsKKyAgICAgICAgW3N0
eWxlIHNldFRleHRMaXN0czpjcmVhdGVOU0FycmF5KHRleHRMaXN0cywgW10gKGF1dG8mIHRleHRM
aXN0KSB7CisgICAgICAgICAgICByZXR1cm4gdGV4dExpc3QuY3JlYXRlVGV4dExpc3QoKTsKKyAg
ICAgICAgfSkuZ2V0KCldOwogICAgIH0KIAogICAgIGF0dHJpYnV0ZXNbTlNQYXJhZ3JhcGhTdHls
ZUF0dHJpYnV0ZU5hbWVdID0gc3R5bGUuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9T
Lm1tCmluZGV4IGEyMDdjYjA5YjgwNjFlN2QxOTQ5OTU0NWZjZDE1Y2FmZmQzZDQzMTAuLjEyYmY3
NWU3OTY1MTViNjc4MjBlZGRjZjBjNDMwY2E2NjlmMWJiZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9z
L0ZyYW1lSU9TLm1tCkBAIC02OCw2ICs2OCw3IEBACiAjaW1wb3J0ICJXQUtXaW5kb3cuaCIKICNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4
Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5h
bWVzOwpAQCAtNzg5LDExICs3OTAsOSBAQCBOU0FycmF5ICpGcmFtZTo6aW50ZXJwcmV0YXRpb25z
Rm9yQ3VycmVudFJvb3QoKSBjb25zdAogICAgICAgICAgICAgYXBwZW5kKGludGVycHJldGF0aW9u
LCB0ZXh0QWZ0ZXJMYXN0TWFya2VyKTsKICAgICB9CiAKLSAgICBOU011dGFibGVBcnJheSAqcmVz
dWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBmb3IgKGF1dG8mIGludGVycHJldGF0
aW9uIDogaW50ZXJwcmV0YXRpb25zKQotICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDphZG9wdE5T
KFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyczpyZWludGVycHJldF9jYXN0PGNv
bnN0IHVuaWNoYXIqPihpbnRlcnByZXRhdGlvbi5kYXRhKCkpIGxlbmd0aDppbnRlcnByZXRhdGlv
bi5zaXplKCldKS5nZXQoKV07Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjcmVh
dGVOU0FycmF5KGludGVycHJldGF0aW9ucywgW10gKGF1dG8mIGludGVycHJldGF0aW9uKSB7Cisg
ICAgICAgIHJldHVybiBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVy
czpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuaWNoYXIqPihpbnRlcnByZXRhdGlvbi5kYXRhKCkp
IGxlbmd0aDppbnRlcnByZXRhdGlvbi5zaXplKCldKTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwog
fQogCiB2b2lkIEZyYW1lOjp2aWV3cG9ydE9mZnNldENoYW5nZWQoVmlld3BvcnRPZmZzZXRDaGFu
Z2VUeXBlIGNoYW5nZVR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
b2NvYS9TZWFyY2hQb3B1cE1lbnVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1NlYXJjaFBvcHVwTWVudUNvY29hLm1tCmluZGV4IDUyOTM3NDlmNTQ3ZTMzMTU5ZDdjZTBi
NDRmMzBlY2M4OWVhY2ExNjUuLmIxMTlkODdhZmMyOGMyNTA0OWYzMzk0YTBmZGVlMDQ3ZWI3ZjBi
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1NlYXJjaFBvcHVw
TWVudUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1NlYXJjaFBv
cHVwTWVudUNvY29hLm1tCkBAIC0yNiw2ICsyNiw4IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNp
bXBvcnQgIlNlYXJjaFBvcHVwTWVudUNvY29hLmgiCiAKKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0
b3JDb2NvYS5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBOU1N0cmluZyAqIGNv
bnN0IGRhdGVLZXkgPSBAImRhdGUiOwpAQCAtMTUzLDEwICsxNTUsOSBAQCB2b2lkIHNhdmVSZWNl
bnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxSZWNlbnRTZWFyY2g+
JiBzZWFyY2hJdAogICAgIGlmIChzZWFyY2hJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgIFtpdGVt
c0RpY3Rpb25hcnkgcmVtb3ZlT2JqZWN0Rm9yS2V5Om5hbWVdOwogICAgIGVsc2UgewotICAgICAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGl0ZW1zID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnNlYXJjaEl0ZW1zLnNpemUoKV0pOwotICAgICAg
ICBmb3IgKGF1dG8mIHNlYXJjaEl0ZW0gOiBzZWFyY2hJdGVtcykKLSAgICAgICAgICAgIFtpdGVt
cyBhZGRPYmplY3Q6YWRvcHROUyhbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3Rz
QW5kS2V5czpzZWFyY2hJdGVtLnN0cmluZywgc2VhcmNoU3RyaW5nS2V5LCB0b05TRGF0ZUZyb21T
eXN0ZW1DbG9jayhzZWFyY2hJdGVtLnRpbWUpLCBkYXRlS2V5LCBuaWxdKS5nZXQoKV07Ci0KKyAg
ICAgICAgYXV0byBpdGVtcyA9IGNyZWF0ZU5TQXJyYXkoc2VhcmNoSXRlbXMsIFtdIChhdXRvJiBz
ZWFyY2hJdGVtKSB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHROUyhbW05TRGljdGlvbmFyeSBh
bGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czpzZWFyY2hJdGVtLnN0cmluZywgc2VhcmNoU3Ry
aW5nS2V5LCB0b05TRGF0ZUZyb21TeXN0ZW1DbG9jayhzZWFyY2hJdGVtLnRpbWUpLCBkYXRlS2V5
LCBuaWxdKTsKKyAgICAgICAgfSk7CiAgICAgICAgIFtpdGVtc0RpY3Rpb25hcnkgc2V0T2JqZWN0
OmFkb3B0TlMoW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6aXRl
bXMuZ2V0KCksIHNlYXJjaGVzS2V5LCBuaWxdKS5nZXQoKSBmb3JLZXk6bmFtZV07CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TaGFyZWRCdWZmZXJD
b2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29h
Lm1tCmluZGV4IDRjYWRlNWYwZjQ0NGE3Y2Y0ZmY4NTQ1MjlmNDMzMDZmOGZmZDgxZmEuLjM0Mzg5
N2FiMjc0MmM5YzYyNTYxNDk2Y2VlNGU0ZWRjZTJlNDlhZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tCkBAIC0zMCw2ICszMCw3
IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW1w
b3J0IDxzdHJpbmcuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW1wb3J0IDx3dGYv
Y29jb2EvVmVjdG9yQ29jb2EuaD4KIAogQGludGVyZmFjZSBXZWJDb3JlU2hhcmVkQnVmZmVyRGF0
YSA6IE5TRGF0YQogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGF0YVNlZ21lbnQ6KGNvbnN0IFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQmKWRhdGFTZWdtZW50IHBvc2l0aW9uOihO
U1VJbnRlZ2VyKXBvc2l0aW9uOwpAQCAtMTE1LDEwICsxMTYsOSBAQCBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZUZyb21SZWFkaW5nRmlsZShjb25zdCBTdHJpbmcmIGZp
bGVQYXRoKQogCiBSZXRhaW5QdHI8TlNBcnJheT4gU2hhcmVkQnVmZmVyOjpjcmVhdGVOU0RhdGFB
cnJheSgpIGNvbnN0CiB7Ci0gICAgYXV0byBkYXRhQXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bV9zZWdtZW50cy5zaXplKCldKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIHNlZ21lbnQgOiBtX3NlZ21lbnRzKQotICAgICAgICBbZGF0YUFycmF5
IGFkZE9iamVjdDpzZWdtZW50LnNlZ21lbnQtPmNyZWF0ZU5TRGF0YSgpLmdldCgpXTsKLSAgICBy
ZXR1cm4gV1RGTW92ZShkYXRhQXJyYXkpOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KG1fc2Vn
bWVudHMsIFtdIChhdXRvJiBzZWdtZW50KSB7CisgICAgICAgIHJldHVybiBzZWdtZW50LnNlZ21l
bnQtPmNyZWF0ZU5TRGF0YSgpOworICAgIH0pOwogfQogCiBSZXRhaW5QdHI8TlNEYXRhPiBTaGFy
ZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpjcmVhdGVOU0RhdGEoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQy5tbQppbmRleCBiZjdmMzhkZWI1MDhkYjZmOGFkNmFhZWEwNTY2NDBhMDRhNzUzNThj
Li5mMmVjZDIxOWQzYzY3ZDBmYWI5NzcxZjA5Njc5ZDkyMzcyYTFlOWM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFt
aW5nQVZGT2JqQy5tbQpAQCAtNDMsNiArNDMsNyBAQAogI2ltcG9ydCA8d3RmL0ZpbGVTeXN0ZW0u
aD4KICNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW1wb3J0IDx3dGYvTG9nZ2VySGVscGVy
Lmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCkBAIC02OTIsMTAg
KzY5MywxMCBAQCBzdGF0aWMgYm9vbCBpc0VxdWFsKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYsIExpY2Vuc2VUeXBlLCBS
ZWY8U2hhcmVkQnVmZmVyPiYmIHJlc3BvbnNlRGF0YSwgTGljZW5zZVVwZGF0ZUNhbGxiYWNrJiYg
Y2FsbGJhY2spCiB7CiAgICAgaWYgKCFtX2V4cGlyZWRTZXNzaW9ucy5pc0VtcHR5KCkgJiYgaXNF
cXVhbChyZXNwb25zZURhdGEsICJhY2tub3dsZWRnZWQiX3MpKSB7Ci0gICAgICAgIGF1dG8gZXhw
aXJlZFNlc3Npb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0g
ICAgICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG1fZXhwaXJlZFNlc3Npb25zKQotICAgICAgICAg
ICAgW2V4cGlyZWRTZXNzaW9ucyBhZGRPYmplY3Q6c2Vzc2lvbi5nZXQoKV07Ci0KKyAgICAgICAg
YXV0byBleHBpcmVkU2Vzc2lvbnMgPSBjcmVhdGVOU0FycmF5KG1fZXhwaXJlZFNlc3Npb25zLCBb
XSAoYXV0byYgZGF0YSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFNob3VkIG92ZXJsb2FkIG1h
a2VOU0FycmF5RWxlbWVudCBmb3IgdGhpcyBpbiBSZXRhaW5QdHIuaCBwZXJoYXBzPworICAgICAg
ICAgICAgcmV0dXJuIGRhdGEuZ2V0KCk7CisgICAgICAgIH0pOwogICAgICAgICBhdXRvKiBjZXJ0
aWZpY2F0ZSA9IG1faW5zdGFuY2UtPnNlcnZlckNlcnRpZmljYXRlKCk7CiAgICAgICAgIGF1dG8q
IHN0b3JhZ2VVUkwgPSBtX2luc3RhbmNlLT5zdG9yYWdlVVJMKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Np
b25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW0KaW5k
ZXggZDQzNmJlNzc3MjNmNjRhNGFlMTg5ZTBiY2NlYmIyOTM3OWU3Mzc1Zi4uMjY0Yzc2NGRjNDQ2
Zjg1OGVlNzUyYWNhYzlhOTRkMjRlNTQ5ZThkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWQ29udGVudEtl
eVNlc3Npb24ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW0KQEAgLTQzLDYgKzQz
LDcgQEAKICNpbXBvcnQgPG9iamMvb2JqYy1ydW50aW1lLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2Nv
Y29hL0FWRm91bmRhdGlvblNQSS5oPgogI2ltcG9ydCA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbXBv
cnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaW1wb3J0IDxwYWwvY29jb2EvQVZGb3Vu
ZGF0aW9uU29mdExpbmsuaD4KIApAQCAtMjgyLDE0ICsyODMsOSBAQCBib29sIENETVNlc3Npb25B
VkNvbnRlbnRLZXlTZXNzaW9uOjp1cGRhdGUoVWludDhBcnJheSoga2V5LCBSZWZQdHI8VWludDhB
cnJheT4mCiAKICAgICAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gb3B0aW9uczsKICAgICAg
ICAgaWYgKCFtX3Byb3RvY29sVmVyc2lvbnMuaXNFbXB0eSgpICYmIFBBTDo6Y2FuTG9hZF9BVkZv
dW5kYXRpb25fQVZDb250ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXkoKSkgewotICAg
ICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBwcm90b2NvbFZlcnNpb25zT3B0aW9u
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgICAgICBm
b3IgKGF1dG8mIHZlcnNpb24gOiBtX3Byb3RvY29sVmVyc2lvbnMpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIXZlcnNpb24pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIFtwcm90b2NvbFZlcnNpb25zT3B0aW9uIGFkZE9iamVjdDpAKHZlcnNpb24pXTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3B0aW9ucyA9IEB7IEFWQ29udGVudEtleVJlcXVl
c3RQcm90b2NvbFZlcnNpb25zS2V5OiBwcm90b2NvbFZlcnNpb25zT3B0aW9uLmdldCgpIH07Cisg
ICAgICAgICAgICBvcHRpb25zID0gQHsgQVZDb250ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lv
bnNLZXk6IGNyZWF0ZU5TQXJyYXkobV9wcm90b2NvbFZlcnNpb25zLCBbXSAoaW50IHZlcnNpb24p
IC0+IE5TTnVtYmVyICogeworICAgICAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uID8gQCh2ZXJz
aW9uKSA6IG5pbDsKKyAgICAgICAgICAgIH0pLmdldCgpIH07CiAgICAgICAgIH0KIAogICAgICAg
ICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6Tm9FcnJvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVlN0
cmVhbVNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9DRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLm1tCmluZGV4IDEzOGUyZmQ5NDdl
ODI1ZmMwOTMxZjhmNzc0ZDI0NDllZjQxMjRiOWQuLjg5NmEyNDUyMmI4YzYyZmMzNTI0YzM0Mzc4
OGU0MzM2ZDBiZGVmZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVlN0cmVhbVNlc3Npb24ubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vz
c2lvbkFWU3RyZWFtU2Vzc2lvbi5tbQpAQCAtNDEsNiArNDEsNyBAQAogI2ltcG9ydCA8cGFsL3Nw
aS9jb2NvYS9BVkZvdW5kYXRpb25TUEkuaD4KICNpbXBvcnQgPHd0Zi9GaWxlU3lzdGVtLmg+CiAj
aW1wb3J0IDx3dGYvVVVJRC5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAK
ICNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGluay5oPgogCkBAIC0yMjYsMTQg
KzIyNyw5IEBAIGJvb2wgQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6dXBkYXRlKFVpbnQ4QXJy
YXkqIGtleSwgUmVmUHRyPFVpbnQ4QXJyYXk+JiBuZXh0CiAKICAgICAgICAgUmV0YWluUHRyPE5T
RGljdGlvbmFyeT4gb3B0aW9uczsKICAgICAgICAgaWYgKCFtX3Byb3RvY29sVmVyc2lvbnMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHByb3RvY29s
VmVyc2lvbnNPcHRpb24gPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgdmVyc2lvbiA6IG1fcHJvdG9jb2xWZXJzaW9ucykgewot
ICAgICAgICAgICAgICAgIGlmICghdmVyc2lvbikKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgW3Byb3RvY29sVmVyc2lvbnNPcHRpb24gYWRkT2JqZWN0OkAo
dmVyc2lvbildOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvcHRpb25zID0gQHsgQVZT
dHJlYW1EYXRhUGFyc2VyQ29udGVudEtleVJlcXVlc3RQcm90b2NvbFZlcnNpb25zS2V5OiBwcm90
b2NvbFZlcnNpb25zT3B0aW9uLmdldCgpIH07CisgICAgICAgICAgICBvcHRpb25zID0gQHsgQVZT
dHJlYW1EYXRhUGFyc2VyQ29udGVudEtleVJlcXVlc3RQcm90b2NvbFZlcnNpb25zS2V5OiBjcmVh
dGVOU0FycmF5KG1fcHJvdG9jb2xWZXJzaW9ucywgW10gKGludCB2ZXJzaW9uKSAtPiBOU051bWJl
ciAqIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmVyc2lvbiA/IEAodmVyc2lvbikgOiBuaWw7
CisgICAgICAgICAgICB9KS5nZXQoKSB9OwogICAgICAgICB9CiAKICAgICAgICAgTlNFcnJvciog
ZXJyb3IgPSBuaWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQppbmRleCBmMDA2OTA4ZmM5OTQ3NmUz
NTIxY2I0NDg0YzBkOGFjOTAxMjJlYjQ0Li4wOWZhY2YyNTU1ZDMwMmUzMTg0MjgxNTYxOGJjNzA5
MTM3ZDk1ZTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KQEAgLTY3LDYgKzY3LDE2IEBACiAj
aW1wb3J0ICJXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgIldlYkNvcmVDQUxh
eWVyRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJDb3JlTlNVUkxTZXNzaW9uLmgiCisjaW1wb3J0IDxB
VkZvdW5kYXRpb24vQVZBc3NldEltYWdlR2VuZXJhdG9yLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRp
b24vQVZBc3NldFRyYWNrLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZNZWRpYVNlbGVjdGlv
bkdyb3VwLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZNZXRhZGF0YUl0ZW0uaD4KKyNpbXBv
cnQgPEFWRm91bmRhdGlvbi9BVlBsYXllci5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxh
eWVySXRlbS5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbU91dHB1dC5oPgor
I2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbVRyYWNrLmg+CisjaW1wb3J0IDxBVkZv
dW5kYXRpb24vQVZQbGF5ZXJMYXllci5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5o
PgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvRGF0YVZpZXcuaD4KICNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJ
bmxpbmVzLmg+CkBAIC04NCwyMyArOTQsMTMgQEAKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogI2ltcG9ydCA8d3RmL09TT2JqZWN0UHRyLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+Cisj
aW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogI2lmIEVOQUJMRShBVkZfQ0FQVElPTlMpCiAjaW5jbHVkZSAiVGV4dFRyYWNrLmgi
CiAjZW5kaWYKIAotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWQXNzZXRJbWFnZUdlbmVyYXRvci5o
PgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWQXNzZXRUcmFjay5oPgotI2ltcG9ydCA8QVZGb3Vu
ZGF0aW9uL0FWTWVkaWFTZWxlY3Rpb25Hcm91cC5oPgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FW
TWV0YWRhdGFJdGVtLmg+Ci0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXIuaD4KLSNpbXBv
cnQgPEFWRm91bmRhdGlvbi9BVlBsYXllckl0ZW0uaD4KLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9B
VlBsYXllckl0ZW1PdXRwdXQuaD4KLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlBsYXllckl0ZW1U
cmFjay5oPgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVyTGF5ZXIuaD4KLSNpbXBvcnQg
PEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1w
b3J0ICJXQUtBcHBLaXRTdHVicy5oIgogI2ltcG9ydCA8Q29yZUltYWdlL0NvcmVJbWFnZS5oPgpA
QCAtODI2LDIzICs4MjYsMTggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpjcmVhdGVBVkFzc2V0Rm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAgIH0KIAogI2lmIEVO
QUJMRShBVkZfQ0FQVElPTlMpCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybVRleHRU
cmFjaz4+JiBvdXRPZkJhbmRUcmFja1NvdXJjZXMgPSBwbGF5ZXIoKS0+b3V0T2ZCYW5kVHJhY2tT
b3VyY2VzKCk7CisgICAgYXV0byBvdXRPZkJhbmRUcmFja1NvdXJjZXMgPSBwbGF5ZXIoKS0+b3V0
T2ZCYW5kVHJhY2tTb3VyY2VzKCk7CiAgICAgaWYgKCFvdXRPZkJhbmRUcmFja1NvdXJjZXMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gb3V0T2ZCYW5kVHJh
Y2tzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIGZv
ciAoYXV0byYgdHJhY2tTb3VyY2UgOiBvdXRPZkJhbmRUcmFja1NvdXJjZXMpIHsKLSAgICAgICAg
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbGFiZWwgPSB0cmFja1NvdXJjZS0+bGFiZWwoKS5j
cmVhdGVDRlN0cmluZygpOwotICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBsYW5n
dWFnZSA9IHRyYWNrU291cmNlLT5sYW5ndWFnZSgpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0gICAgICAg
ICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVuaXF1ZUlEID0gU3RyaW5nOjpudW1iZXIodHJh
Y2tTb3VyY2UtPnVuaXF1ZUlkKCkpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0gICAgICAgICAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHVybCA9IHRyYWNrU291cmNlLT51cmwoKS5jcmVhdGVDRlN0cmlu
ZygpOwotICAgICAgICAgICAgW291dE9mQmFuZFRyYWNrcy5nZXQoKSBhZGRPYmplY3Q6QHsKLSAg
ICAgICAgICAgICAgICBBVk91dE9mQmFuZEFsdGVybmF0ZVRyYWNrRGlzcGxheU5hbWVLZXk6IChf
X2JyaWRnZSBOU1N0cmluZyAqKWxhYmVsLmdldCgpLAotICAgICAgICAgICAgICAgIEFWT3V0T2ZC
YW5kQWx0ZXJuYXRlVHJhY2tFeHRlbmRlZExhbmd1YWdlVGFnS2V5OiAoX19icmlkZ2UgTlNTdHJp
bmcgKilsYW5ndWFnZS5nZXQoKSwKKyAgICAgICAgYXV0byBvdXRPZkJhbmRUcmFja3MgPSBjcmVh
dGVOU0FycmF5KG91dE9mQmFuZFRyYWNrU291cmNlcywgW10gKGF1dG8mIHRyYWNrU291cmNlKSB7
CisgICAgICAgICAgICByZXR1cm4gQHsKKyAgICAgICAgICAgICAgICBBVk91dE9mQmFuZEFsdGVy
bmF0ZVRyYWNrRGlzcGxheU5hbWVLZXk6IHRyYWNrU291cmNlLT5sYWJlbCgpLAorICAgICAgICAg
ICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJuYXRlVHJhY2tFeHRlbmRlZExhbmd1YWdlVGFnS2V5OiB0
cmFja1NvdXJjZS0+bGFuZ3VhZ2UoKSwKICAgICAgICAgICAgICAgICBBVk91dE9mQmFuZEFsdGVy
bmF0ZVRyYWNrSXNEZWZhdWx0S2V5OiB0cmFja1NvdXJjZS0+aXNEZWZhdWx0KCkgPyBAWUVTIDog
QE5PLAotICAgICAgICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJuYXRlVHJhY2tJZGVudGlmaWVy
S2V5OiAoX19icmlkZ2UgTlNTdHJpbmcgKil1bmlxdWVJRC5nZXQoKSwKLSAgICAgICAgICAgICAg
ICBBVk91dE9mQmFuZEFsdGVybmF0ZVRyYWNrU291cmNlS2V5OiAoX19icmlkZ2UgTlNTdHJpbmcg
Kil1cmwuZ2V0KCksCisgICAgICAgICAgICAgICAgQVZPdXRPZkJhbmRBbHRlcm5hdGVUcmFja0lk
ZW50aWZpZXJLZXk6IFN0cmluZzo6bnVtYmVyKHRyYWNrU291cmNlLT51bmlxdWVJZCgpKSwKKyAg
ICAgICAgICAgICAgICBBVk91dE9mQmFuZEFsdGVybmF0ZVRyYWNrU291cmNlS2V5OiB0cmFja1Nv
dXJjZS0+dXJsKCksCiAgICAgICAgICAgICAgICAgQVZPdXRPZkJhbmRBbHRlcm5hdGVUcmFja01l
ZGlhQ2hhcmFjdGVyc3RpY3NLZXk6IG1lZGlhRGVzY3JpcHRpb25Gb3JLaW5kKHRyYWNrU291cmNl
LT5raW5kKCkpLAotICAgICAgICAgICAgfV07Ci0gICAgICAgIH0KKyAgICAgICAgICAgIH07Cisg
ICAgICAgIH0pOwogCiAgICAgICAgIFtvcHRpb25zLmdldCgpIHNldE9iamVjdDpvdXRPZkJhbmRU
cmFja3MuZ2V0KCkgZm9yS2V5OkFWVVJMQXNzZXRPdXRPZkJhbmRBbHRlcm5hdGVUcmFja3NLZXld
OwogICAgIH0KQEAgLTg1NywxMCArODUyLDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0Rm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgVmVjdG9yPENvb2tpZT4gY29va2llczsKICAgICBpZiAo
cGxheWVyKCktPmdldFJhd0Nvb2tpZXModXJsLCBjb29raWVzKSkgewotICAgICAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk+IG5zQ29va2llcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb29raWVzLnNpemUoKV0pOwotICAgICAgICBmb3IgKGF1
dG8mIGNvb2tpZSA6IGNvb2tpZXMpCi0gICAgICAgICAgICBbbnNDb29raWVzIGFkZE9iamVjdDoo
TlNIVFRQQ29va2llICopY29va2llXTsKLQorICAgICAgICBhdXRvIG5zQ29va2llcyA9IGNyZWF0
ZU5TQXJyYXkoY29va2llcywgW10gKGF1dG8mIGNvb2tpZSkgLT4gTlNIVFRQQ29va2llICogewor
ICAgICAgICAgICAgcmV0dXJuIGNvb2tpZTsKKyAgICAgICAgfSk7CiAgICAgICAgIGlmIChQQUw6
OmNhbkxvYWRfQVZGb3VuZGF0aW9uX0FWVVJMQXNzZXRIVFRQQ29va2llc0tleSgpKQogICAgICAg
ICAgICAgW29wdGlvbnMgc2V0T2JqZWN0Om5zQ29va2llcy5nZXQoKSBmb3JLZXk6QVZVUkxBc3Nl
dEhUVFBDb29raWVzS2V5XTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2EubW0KaW5kZXggNDgxNmIwMDRmMTQ4MTgwZmI5MDE1NzkxOWNlYmU3YjVlZGRmNTVjMC4u
OGZiMmMxMjNmYjk4MWVkM2Y4YmM5YjE4Njk1MTA2NWYxNWFkM2JhOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlv
bkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29h
L1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAi
VGltaW5nRnVuY3Rpb24uaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2lt
cG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CisjaW1wb3J0IDx3dGYvY29jb2Ev
VmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC00NjIsMTAgKzQ2Myw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
bkNvY29hOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWUpCiAgICAgaWYgKGFu
aW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBh
cnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp2YWx1ZS5zaXplKCldOwot
ICAgIGZvciAoYXV0byBudW1iZXIgOiB2YWx1ZSkKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpA
KG51bWJlcildOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmlt
YXRpb24uZ2V0KCkpIHNldFZhbHVlczphcnJheV07CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJh
bWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXko
dmFsdWUsIFtdIChmbG9hdCBudW1iZXIpIHsKKyAgICAgICAgcmV0dXJuIEAobnVtYmVyKTsKKyAg
ICB9KS5nZXQoKV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1
ZXMoY29uc3QgVmVjdG9yPFRyYW5zZm9ybWF0aW9uTWF0cml4PiYgdmFsdWUpCkBAIC00NzMsMTAg
KzQ3Myw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3Qg
VmVjdG9yPFRyYW5zZm9ybWF0aW9uTWF0cml4PiYgdmFsCiAgICAgaWYgKGFuaW1hdGlvblR5cGUo
KSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhcnJheSA9IFtOU011
dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp2YWx1ZS5zaXplKCldOwotICAgIGZvciAoYXV0
byYgbWF0cml4IDogdmFsdWUpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6W05TVmFsdWUgdmFs
dWVXaXRoQ0FUcmFuc2Zvcm0zRDptYXRyaXhdXTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFt
ZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6YXJyYXldOworICAgIFtz
dGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZh
bHVlczpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYgbWF0cml4KSB7CisgICAgICAgIHJl
dHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOm1hdHJpeF07CisgICAgfSkuZ2V0
KCldOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0
IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZSkKQEAgLTQ4NCwxMCArNDgzLDkgQEAgdm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8RmxvYXRQb2lu
dDNEPiYgdmFsdWUpCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhD
YXBhY2l0eTp2YWx1ZS5zaXplKCldOwotICAgIGZvciAoYXV0byYgcG9pbnQgOiB2YWx1ZSkKLSAg
ICAgICAgW2FycmF5IGFkZE9iamVjdDpAW0AocG9pbnQueCgpKSwgQChwb2ludC55KCkpLCBAKHBv
aW50LnooKSldXTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5p
bWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6YXJyYXldOworICAgIFtzdGF0aWNfY2FzdDxDQUtleWZy
YW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVhdGVOU0FycmF5
KHZhbHVlLCBbXSAoYXV0byYgcG9pbnQpIHsKKyAgICAgICAgcmV0dXJuIEBbQChwb2ludC54KCkp
LCBAKHBvaW50LnkoKSksIEAocG9pbnQueigpKV07CisgICAgfSkuZ2V0KCldOwogfQogCiB2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxDb2xvcj4m
IHZhbHVlKQpAQCAtNDk1LDEwICs0OTMsOSBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2Nv
YTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxDb2xvcj4mIHZhbHVlKQogICAgIGlmIChhbmltYXRp
b25UeXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gYXJyYXkg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dmFsdWUuc2l6ZSgpXTsKLSAgICBm
b3IgKGF1dG8mIGNvbG9yIDogdmFsdWUpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6QFtAKGNv
bG9yLnJlZCgpKSwgQChjb2xvci5ncmVlbigpKSwgQChjb2xvci5ibHVlKCkpLCBAKGNvbG9yLmFs
cGhhKCkpXV07Ci0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1h
dGlvbi5nZXQoKSkgc2V0VmFsdWVzOmFycmF5XTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFt
ZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6Y3JlYXRlTlNBcnJheSh2
YWx1ZSwgW10gKGF1dG8mIGNvbG9yKSB7CisgICAgICAgIHJldHVybiBAW0AoY29sb3IucmVkKCkp
LCBAKGNvbG9yLmdyZWVuKCkpLCBAKGNvbG9yLmJsdWUoKSksIEAoY29sb3IuYWxwaGEoKSldOwor
ICAgIH0pLmdldCgpXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZh
bHVlcyhjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4+JiB2YWx1ZXMsIGludCBp
bnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCkBAIC01MDYsMTAgKzUwMyw5IEBAIHZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+PiYKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0
aENhcGFjaXR5OnZhbHVlcy5zaXplKCldOwotICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMp
Ci0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6UGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVl
Rm9yT3BlcmF0aW9uKHZhbHVlLmdldCgpLCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpLmdl
dCgpXTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9u
LmdldCgpKSBzZXRWYWx1ZXM6YXJyYXldOworICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5p
bWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVhdGVOU0FycmF5KHZhbHVl
cywgWyZdIChhdXRvJiB2YWx1ZSkgeworICAgICAgICByZXR1cm4gUGxhdGZvcm1DQUZpbHRlcnM6
OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKHZhbHVlLmdldCgpLCBpbnRlcm5hbEZpbHRlclByb3Bl
cnR5SW5kZXgpOworICAgIH0pLmdldCgpXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OmNvcHlWYWx1ZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQpA
QCAtNTIzLDEwICs1MTksOSBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weVZh
bHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCiAKIHZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpzZXRLZXlUaW1lcyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1
ZSkKIHsKLSAgICBhdXRvIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5
OnZhbHVlLnNpemUoKV07Ci0gICAgZm9yIChhdXRvIHRpbWUgOiB2YWx1ZSkKLSAgICAgICAgW2Fy
cmF5IGFkZE9iamVjdDpAKHRpbWUpXTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1h
dGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRLZXlUaW1lczphcnJheV07CisgICAgW3N0YXRp
Y19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0S2V5VGlt
ZXM6Y3JlYXRlTlNBcnJheSh2YWx1ZSwgW10gKGZsb2F0IHRpbWUpIHsKKyAgICAgICAgcmV0dXJu
IEAodGltZSk7CisgICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYTo6Y29weUtleVRpbWVzRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkK
QEAgLTUzNywxMCArNTMyLDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmNvcHlL
ZXlUaW1lc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUKIAogdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRpbWluZ0Z1bmN0aW9ucyhjb25zdCBWZWN0b3I8Y29u
c3QgVGltaW5nRnVuY3Rpb24qPiYgdmFsdWUsIGJvb2wgcmV2ZXJzZSkKIHsKLSAgICBhdXRvIGFy
cmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnZhbHVlLnNpemUoKV07Ci0g
ICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IHZhbHVlKQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0
OnRvQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uKGZ1bmN0aW9uLCByZXZlcnNlKV07Ci0gICAgW3N0YXRp
Y19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VGltaW5n
RnVuY3Rpb25zOmFycmF5XTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+
KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUaW1pbmdGdW5jdGlvbnM6Y3JlYXRlTlNBcnJheSh2YWx1
ZSwgWyZdIChhdXRvJiBmdW5jdGlvbikgeworICAgICAgICByZXR1cm4gdG9DQU1lZGlhVGltaW5n
RnVuY3Rpb24oZnVuY3Rpb24sIHJldmVyc2UpOworICAgIH0pLmdldCgpXTsKIH0KIAogdm9pZCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmNvcHlUaW1pbmdGdW5jdGlvbnNGcm9tKGNvbnN0IFBs
YXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FGaWx0ZXJzQ29j
b2EubW0KaW5kZXggM2M0ZGNlMmFiM2IyZTA5MzU0YjhiNzQ0ZTkxM2MzMDZmNjA3NzZmMy4uMDFj
NWUyZGE2ZDhiNDU4ODllYTVhZTMxYWY1MzI2MzU5MGRhZTY2MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBRmlsdGVyc0NvY29hLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0IDxRdWFydHpD
b3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5o
PgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9jb2Nv
YS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1i
ZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYyLDIxICs2MywyMiBAQCB2b2lkIFBs
YXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwg
Y29uc3QgRmlsdGVyT3BlcgogICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICAvLyBBc3N1bWUgZmlsdGVyc0NhbkJlQ29t
cG9zaXRlZCB3YXMgY2FsbGVkIGFuZCBpdCByZXR1cm5lZCB0cnVlLgogICAgIEFTU0VSVChQbGF0
Zm9ybUNBTGF5ZXJDb2NvYTo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0ZXJzKSk7Ci0gICAg
CisKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAKLSAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+IGFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsr
aSkgewotICAgICAgICBTdHJpbmcgZmlsdGVyTmFtZSA9IG1ha2VTdHJpbmcoImZpbHRlcl8iLCBp
KTsKLSAgICAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24gPSAqZmls
dGVycy5hdChpKTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBhdXRvIGFycmF5ID0gY3JlYXRl
TlNBcnJheShmaWx0ZXJzLm9wZXJhdGlvbnMoKSwgWyZdIChhdXRvJiBvcGVyYXRpb25QdHIpIC0+
IGlkIHsKKyAgICAgICAgU3RyaW5nIGZpbHRlck5hbWUgPSBtYWtlU3RyaW5nKCJmaWx0ZXJfIiwg
aSsrKTsKKyAgICAgICAgYXV0byYgZmlsdGVyT3BlcmF0aW9uID0gKm9wZXJhdGlvblB0cjsKICAg
ICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpERUZBVUxUOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVG
RVJFTkNFOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Tk9ORToKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBy
ZXR1cm4gbmlsOwogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGFzc3VtZSBkcm9wIHNoYWRvdyBpcyB0aGUg
bGFzdCBmaWx0ZXIsIHB1dCBpdCBvbiB0aGUgbGF5ZXIuCiAgICAgICAgICAgICAvLyA8cmRhcjov
L3Byb2JsZW0vMTA5NTk5Njk+IEhhbmRsZSBjYXNlIHdoZXJlIGRyb3Atc2hhZG93IGlzIG5vdCB0
aGUgbGFzdCBmaWx0ZXIuCkBAIC04NSw3ICs4Nyw3IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6
OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVy
CiAgICAgICAgICAgICBbbGF5ZXIgc2V0U2hhZG93Q29sb3I6Y2FjaGVkQ0dDb2xvcihkcm9wU2hh
ZG93T3BlcmF0aW9uLmNvbG9yKCkpXTsKICAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dSYWRp
dXM6ZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKV07CiAgICAgICAgICAgICBbbGF5
ZXIgc2V0U2hhZG93T3BhY2l0eToxXTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAgICAgfQogI2lmIFVTRV9DQV9GSUxURVJTCiAgICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKQEAgLTkzLDI0ICs5NSwyMSBAQCB2b2lkIFBs
YXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwg
Y29uc3QgRmlsdGVyT3BlcgogICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRl
ciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1vbm9jaHJvbWVdOwogICAgICAgICAgICAg
W2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmNvbG9yTWF0cml4T3Bl
cmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dEFtb3VudCJdOwogICAgICAgICAgICAgW2Zp
bHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9i
amVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmls
dGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewog
ICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9y
bUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24udHlw
ZSgpLCAmZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBb
Q0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwogICAgICAgICAg
ICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0
Q29sb3JNYXRyaXgiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsK
LSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8m
IGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIg
PSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JTYXR1cmF0ZV07CiAgICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Y29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0QW1vdW50Il07CiAgICAgICAg
ICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0
KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhV
RV9ST1RBVEU6IHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9u
ID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0
aW9uKTsKQEAgLTExOCwxNiArMTE3LDE0IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZp
bHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZGVnMnJh
ZChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSldIGZvcktleTpAImlucHV0QW5nbGUiXTsK
ICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpAImh1ZVJvdGF0ZSJdOwogICAgICAgICAgICAg
W2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFk
ZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4g
ZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6
IHsKICAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxh
dGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0aW9u
LnR5cGUoKSwgJmZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVy
ID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsKICAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JLZXk6QCJp
bnB1dENvbG9yTWF0cml4Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFt
ZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6CiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBv
bmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRlci4KQEAgLTEzNywyNCArMTM0LDIxIEBAIHZv
aWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxh
eWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NB
RmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsKICAgICAgICAgICAg
IFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JLZXk6QCJpbnB1dENv
bG9yTWF0cml4Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0g
ICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKICAgICAgICAgICAgIFJldGFpblB0cjxO
U1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4
VmFsdWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSwgJmZpbHRlck9wZXJhdGlvbik7
CiAgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBl
OmtDQUZpbHRlckNvbG9yTWF0cml4XTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29s
b3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07CiAgICAgICAg
ICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0
KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNP
TlRSQVNUOiB7CiAgICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1
ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKGZpbHRlck9w
ZXJhdGlvbi50eXBlKCksICZmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ0FGaWx0ZXIg
KmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07
CiAgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4VmFsdWUuZ2V0KCkgZm9y
S2V5OkAiaW5wdXRDb2xvck1hdHJpeCJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZp
bHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAgICAgICAgICAgICBjb25z
dCBhdXRvJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKQEAgLTE2NSw4ICsxNTksNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJz
OjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3Bl
cgogICAgICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6QFlFUyBmb3JLZXk6QCJpbnB1dE5v
cm1hbGl6ZUVkZ2VzIl07CiAjZW5kaWYKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0
ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsKICAgICAgICAgfQog
I2Vsc2UKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewpAQCAtMTc2
LDggKzE2OSw3IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBs
YXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Y29sb3JNYXRyaXhPcGVyYXRpb24u
YW1vdW50KCldIGZvcktleTpAImlucHV0SW50ZW5zaXR5Il07CiAgICAgICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltDSUNvbG9yIGNvbG9yV2l0aFJlZDowLjY3IGdyZWVuOjAuNjcgYmx1ZTowLjY3
XSBmb3JLZXk6QCJpbnB1dENvbG9yIl07IC8vIENvbG9yIGRlcml2ZWQgZW1waXJpY2FsbHkgdG8g
bWF0Y2ggemVybyBzYXR1cmF0aW9uIGxldmVscy4KICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFt
ZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVy
XTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsKICAgICAgICAgICAg
IGNvbnN0IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKQEAgLTE5Nyw4ICsxODksNyBA
QCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVy
KiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogICAgICAgICAgICAgICAgIFk6V2ViQ29yZTo6Ymxl
bmQoc2VwaWFOb25lQ29uc3RhbnRzWzJdWzFdLCBzZXBpYUZ1bGxDb25zdGFudHNbMl1bMV0sIHQp
CiAgICAgICAgICAgICAgICAgWjpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVDb25zdGFudHNbMl1b
Ml0sIHNlcGlhRnVsbENvbnN0YW50c1syXVsyXSwgdCkgVzowXSBmb3JLZXk6QCJpbnB1dEJWZWN0
b3IiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAg
ICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKQEAgLTIwNiw4ICsxOTcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0
ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVy
T3BlcgogICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CiAgICAgICAgICAgICBbZmls
dGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Y29sb3JNYXRyaXhPcGVyYXRp
b24uYW1vdW50KCldIGZvcktleTpAImlucHV0U2F0dXJhdGlvbiJdOwogICAgICAgICAgICAgW2Zp
bHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9i
amVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmls
dGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRF
OiB7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25j
YXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CkBA
IC0yMTYsOCArMjA2LDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5
ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKIAogICAgICAgICAgICAg
W2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmRlZzJyYWQoY29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCkpXSBmb3JLZXk6QCJpbnB1dEFuZ2xlIl07CiAgICAgICAg
ICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0
KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklO
VkVSVDogewogICAgICAgICAgICAgY29uc3QgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRp
b24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwpAQCAtMjMzLDggKzIyMiw3IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6
OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVy
CiAgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6
MCBaOjAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKICAgICAgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOm9wLT5hbW91bnQoKSBZOm9wLT5hbW91bnQo
KSBaOm9wLT5hbW91bnQoKSBXOjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwogICAgICAg
ICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5Lmdl
dCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBy
ZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpB
UFBMRV9JTlZFUlRfTElHSFRORVNTOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IC8vIEFQUExFX0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xvci1m
aWx0ZXIuCkBAIC0yNTAsOCArMjM4LDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0Rmls
dGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6MCBX
OmNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dEFWZWN0
b3IiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhY
OjAgWTowIFo6MCBXOjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwogICAgICAgICAgICAg
W2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFk
ZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4g
ZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRO
RVNTOiB7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
biA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7CkBAIC0yNjMsOCArMjUwLDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6
c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIK
ICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTph
bW91bnQgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07CiAgICAgICAgICAgICBbZmls
dGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOmFtb3VudCBXOjBdIGZv
cktleTpAImlucHV0QlZlY3RvciJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRl
ck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewogICAgICAgICAgICAgY29u
c3QgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwpAQCAtMjcyLDgg
KzI1OCw3IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRm
b3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBbZmlsdGVyIHNl
dERlZmF1bHRzXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJl
cldpdGhGbG9hdDpjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKV0gZm9yS2V5OkAi
aW5wdXRDb250cmFzdCJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVd
OwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAgICAgICAgICAgICAvLyBGSVhNRTogRm9y
IG5vdyB3ZSBpZ25vcmUgc3RkRGV2aWF0aW9uWS4KQEAgLTI4MiwyMSArMjY3LDE5IEBAIHZvaWQg
UGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVy
LCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKICAg
ICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpmbG9h
dFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApXSBmb3JLZXk6
QCJpbnB1dFJhZGl1cyJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVd
OwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAjZW5kaWYK
ICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlBBU1NUSFJPVUdIOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoMCk7Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIH0KLSAgICB9Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0p
OwogCi0gICAgaWYgKFthcnJheS5nZXQoKSBjb3VudF0gPiAwKQorICAgIGlmIChbYXJyYXkgY291
bnRdKQogICAgICAgICBbbGF5ZXIgc2V0RmlsdGVyczphcnJheS5nZXQoKV07Ci0gICAgCisKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EubW0KaW5kZXggM2IxM2ExZjNiMjY1ZmY5YjQyZTVjMjIyZWY3YjZmYWY4MzRmMzc1MC4u
NGRhOWZmMTNmZTFkZDAxNTY1OWJiYzA4N2VmNDY1ZDU0MTk3NGQ0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxh
dGZvcm1DQUxheWVyQ29jb2EubW0KQEAgLTUxLDYgKzUxLDcgQEAKICNpbXBvcnQgPG9iamMvcnVu
dGltZS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYg
RU5BQkxFKFdFQkdQVSkKICNpbXBvcnQgIldlYkdQVUxheWVyLmgiCkBAIC00NTYsMTIgKzQ1Nyw5
IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OnNldFN1YmxheWVycyhjb25zdCBQbGF0Zm9y
bUNBTGF5ZXJMaXN0JiBsaXN0KQogICAgIH0KIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwotICAgIE5TTXV0YWJsZUFycmF5KiBzdWJsYXllcnMgPSBbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyArK2kp
Ci0gICAgICAgIFtzdWJsYXllcnMgYWRkT2JqZWN0Omxpc3RbaV0tPm1fbGF5ZXIuZ2V0KCldOwot
Ci0gICAgW21fbGF5ZXIgc2V0U3VibGF5ZXJzOnN1YmxheWVyc107Ci0gICAgW3N1YmxheWVycyBy
ZWxlYXNlXTsKKyAgICBbbV9sYXllciBzZXRTdWJsYXllcnM6Y3JlYXRlTlNBcnJheShsaXN0LCBb
XSAoYXV0byYgbGF5ZXIpIHsKKyAgICAgICAgcmV0dXJuIGxheWVyLT5tX2xheWVyOworICAgIH0p
LmdldCgpXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCmluZGV4
IGJhYTI1NTUwOGMzODA4NmFjNjBjNGUxMDI5MWExM2M3MzYxNTFkNDAuLmQyZjMyMjAwNDdmNmYz
NDM1MzU2Yzk3ODc1MTAzOGU2YjhiMGYxOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQpAQCAtNjE1LDExICs2MTUsOSBA
QCBzdGF0aWMgUmV0YWluUHRyPFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkluZm9MaXN0PiBj
cmVhdGVJdGVtUHJvdmlkZXJSZWdpc3RyYQogCiBpbnQ2NF90IFBsYXRmb3JtUGFzdGVib2FyZDo6
d3JpdGUoY29uc3QgVmVjdG9yPFBhc3RlYm9hcmRDdXN0b21EYXRhPiYgaXRlbURhdGEpCiB7Ci0g
ICAgYXV0byByZWdpc3RyYXRpb25MaXN0cyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eTppdGVtRGF0YS5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIGRh
dGEgOiBpdGVtRGF0YSkgewotICAgICAgICBpZiAoYXV0byBpdGVtTGlzdCA9IGNyZWF0ZUl0ZW1Q
cm92aWRlclJlZ2lzdHJhdGlvbkxpc3QoZGF0YSkpCi0gICAgICAgICAgICBbcmVnaXN0cmF0aW9u
TGlzdHMgYWRkT2JqZWN0Oml0ZW1MaXN0LmdldCgpXTsKLSAgICB9CisgICAgYXV0byByZWdpc3Ry
YXRpb25MaXN0cyA9IGNyZWF0ZU5TQXJyYXkoaXRlbURhdGEsIFtdIChhdXRvJiBkYXRhKSB7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25MaXN0KGRhdGEpOwor
ICAgIH0pOwogICAgIHJlZ2lzdGVySXRlbXNUb1Bhc3RlYm9hcmQocmVnaXN0cmF0aW9uTGlzdHMu
Z2V0KCksIG1fcGFzdGVib2FyZC5nZXQoKSk7CiAgICAgcmV0dXJuIFttX3Bhc3RlYm9hcmQgY2hh
bmdlQ291bnRdOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bs
YXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCmluZGV4IGFhNTU0OTRlMWFiNzYy
YmVmNDI2OTc5ZDVjNTRlZGI4ZGE3YTExYzAuLmZmMDM5YWQ5YjQyNTFjNjNhODhiNTljZjVkY2U4
NTdmNWZkYjBlYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF5
YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0KQEAgLTM4LDYgKzM4LDcgQEAK
ICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2Ev
QVZLaXRTUEkuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9jb2Nv
YS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2ltcG9ydCA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTE1NSwyMCArMTU2LDE4IEBAIHZvaWQgUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNoYW5nZWQoYm9vbCBj
YW5QbGF5RmFzdFJlCiAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDYW5TY2FuQmFja3dhcmQ6
Y2FuUGxheUZhc3RSZXZlcnNlXTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4mIG9wdGlvbnMpCitzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IG1lZGlhU2VsZWN0aW9uT3B0
aW9ucyhjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zKQogewotICAg
IFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpvcHRpb25zLnNpemUoKV0pOwotICAgIGZv
ciAoYXV0byYgb3B0aW9uIDogb3B0aW9ucykgewotICAgICAgICBSZXRhaW5QdHI8V2ViQVZNZWRp
YVNlbGVjdGlvbk9wdGlvbj4gd2ViT3B0aW9uID0gYWRvcHROUyhbW1dlYkFWTWVkaWFTZWxlY3Rp
b25PcHRpb24gYWxsb2NdIGluaXRdKTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShvcHRpb25z
LCBbXSAoYXV0byYgb3B0aW9uKSB7CisgICAgICAgIGF1dG8gd2ViT3B0aW9uID0gYWRvcHROUyhb
W1dlYkFWTWVkaWFTZWxlY3Rpb25PcHRpb24gYWxsb2NdIGluaXRdKTsKICAgICAgICAgW3dlYk9w
dGlvbiBzZXRMb2NhbGl6ZWREaXNwbGF5TmFtZTpvcHRpb24uZGlzcGxheU5hbWVdOwotICAgICAg
ICBbd2ViT3B0aW9ucyBhZGRPYmplY3Q6d2ViT3B0aW9uLmdldCgpXTsKLSAgICB9Ci0gICAgcmV0
dXJuIHdlYk9wdGlvbnM7CisgICAgICAgIHJldHVybiB3ZWJPcHRpb247CisgICAgfSk7CiB9CiAK
IHZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25z
LCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKKyAgICBhdXRv
IHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7CiAgICAgW21fcGxh
eWVyQ29udHJvbGxlciBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczp3ZWJPcHRpb25zLmdl
dCgpXTsKICAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNvdW50XSkKICAgICAg
ICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDdXJyZW50QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlv
bjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNlbGVj
dGVkSW5kZXgpXV07CkBAIC0xNzYsNyArMTc1LDcgQEAgdm9pZCBQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3QK
IAogdm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6bGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0
aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
QXJyYXk+IHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7CisgICAg
YXV0byB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOwogICAgIFtt
X3BsYXllckNvbnRyb2xsZXIgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uczp3ZWJPcHRp
b25zLmdldCgpXTsKICAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNvdW50XSkK
ICAgICAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDdXJyZW50TGVnaWJsZU1lZGlhU2VsZWN0
aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdl
cj4oc2VsZWN0ZWRJbmRleCldXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCmluZGV4IDA3NjI3ZjFjYjQyNDc4YmQ2MzMxOWRl
NmNmYmEzM2Y3MzY5ZGRhMTMuLmZiZWE1MzYxYjljM2U4YzMwNzY4ZGUzZmFlZWEzOWU1YWI5Y2Zk
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3Rl
Ym9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFz
dGVib2FyZE1hYy5tbQpAQCAtNTA2LDExICs1MDYsMTAgQEAgaW50NjRfdCBQbGF0Zm9ybVBhc3Rl
Ym9hcmQ6OndyaXRlKGNvbnN0IFZlY3RvcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4mIGl0ZW1EYXRh
KQogICAgIGlmIChpdGVtRGF0YS5zaXplKCkgPT0gMSkKICAgICAgICAgcmV0dXJuIHdyaXRlKGl0
ZW1EYXRhLmZpcnN0KCkpOwogCi0gICAgYXV0byBwbGF0Zm9ybUl0ZW1zID0gYWRvcHROUyhbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Oml0ZW1EYXRhLnNpemUoKV0pOwot
ICAgIGZvciAoYXV0byYgZGF0YSA6IGl0ZW1EYXRhKQotICAgICAgICBbcGxhdGZvcm1JdGVtcyBh
ZGRPYmplY3Q6Y3JlYXRlUGFzdGVib2FyZEl0ZW0oZGF0YSkuZ2V0KCldOwogICAgIFttX3Bhc3Rl
Ym9hcmQgY2xlYXJDb250ZW50c107Ci0gICAgW21fcGFzdGVib2FyZCB3cml0ZU9iamVjdHM6cGxh
dGZvcm1JdGVtcy5nZXQoKV07CisgICAgW21fcGFzdGVib2FyZCB3cml0ZU9iamVjdHM6Y3JlYXRl
TlNBcnJheShpdGVtRGF0YSwgW10gKGF1dG8mIGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZVBhc3RlYm9hcmRJdGVtKGRhdGEpOworICAgIH0pLmdldCgpXTsKICAgICByZXR1cm4gW21fcGFz
dGVib2FyZCBjaGFuZ2VDb3VudF07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbQppbmRleCBjZGI0NjI0
ZmJjYWFiY2ZkNDhmMmQ0MzhiNTM4MWE0MmFjY2RhMGY2Li5kOTYwZmM4MGE4OTViOGNmOTEzM2Rh
Yjk2NzViZGM2NWUwNDlkOTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKICNpbXBvcnQgIlBsYXli
YWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQg
PHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIElHTk9SRV9XQVJOSU5HU19CRUdJTigibnVsbGFiaWxpdHktY29tcGxldGVuZXNzIikKQEAg
LTIwOCwxOSArMjA5LDE2IEBAIHN0YXRpYyBBVlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25U
eXBlIHRvQVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZShNCiAgICAgcmV0dXJuIEFW
VG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvblR5cGVSZWd1bGFyOwogfQogCi1zdGF0aWMgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9y
PE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucykKK3N0YXRpYyBSZXRhaW5QdHI8TlNBcnJh
eT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlv
bj4mIG9wdGlvbnMpCiB7Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25z
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om9wdGlv
bnMuc2l6ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBvcHRpb24gOiBvcHRpb25zKSB7Ci0gICAgICAg
IGlmIChhdXRvIHdlYk9wdGlvbiA9IGFkb3B0TlMoW2FsbG9jQVZUb3VjaEJhck1lZGlhU2VsZWN0
aW9uT3B0aW9uSW5zdGFuY2UoKSBpbml0V2l0aFRpdGxlOm9wdGlvbi5kaXNwbGF5TmFtZSB0eXBl
OnRvQVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZShvcHRpb24udHlwZSldKSkKLSAg
ICAgICAgICAgIFt3ZWJPcHRpb25zIGFkZE9iamVjdDp3ZWJPcHRpb24uZ2V0KCldOwotICAgIH0K
LSAgICByZXR1cm4gd2ViT3B0aW9uczsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShvcHRpb25z
LCBbXSAoYXV0byYgb3B0aW9uKSB7CisgICAgICAgIHJldHVybiBhZG9wdE5TKFthbGxvY0FWVG91
Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbkluc3RhbmNlKCkgaW5pdFdpdGhUaXRsZTpvcHRpb24u
ZGlzcGxheU5hbWUgdHlwZTp0b0FWVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvblR5cGUob3B0
aW9uLnR5cGUpXSk7CisgICAgfSk7CiB9CiAKIC0gKHZvaWQpc2V0QXVkaW9NZWRpYVNlbGVjdGlv
bk9wdGlvbnM6KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mKW9wdGlvbnMgd2l0
aFNlbGVjdGVkSW5kZXg6KE5TVUludGVnZXIpc2VsZWN0ZWRJbmRleAogewotICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRp
b25zKTsKKyAgICBhdXRvIHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9u
cyk7CiAgICAgW3NlbGYgc2V0QXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uczp3ZWJP
cHRpb25zLmdldCgpXTsKICAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNvdW50
XSkKICAgICAgICAgW3NlbGYgc2V0Q3VycmVudEF1ZGlvVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9w
dGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnNlbGVjdGVkSW5kZXhdXTsKQEAgLTIyOCw3
ICsyMjYsNyBAQCAtICh2b2lkKXNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOihjb25zdCBW
ZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JilvcHRpbwogCiAtICh2b2lkKXNldExlZ2libGVN
ZWRpYVNlbGVjdGlvbk9wdGlvbnM6KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4m
KW9wdGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6KE5TVUludGVnZXIpc2VsZWN0ZWRJbmRleAogewot
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9u
T3B0aW9ucyhvcHRpb25zKTsKKyAgICBhdXRvIHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9w
dGlvbnMob3B0aW9ucyk7CiAgICAgW3NlbGYgc2V0TGVnaWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rp
b25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOwogICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dl
Yk9wdGlvbnMgY291bnRdKQogICAgICAgICBbc2VsZiBzZXRDdXJyZW50TGVnaWJsZVRvdWNoQmFy
TWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzZWxlY3RlZElu
ZGV4XV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29h
L05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQppbmRleCBjNGJkNWVm
YmFjYmFkYTBjZWEyZTgwZmM4NTcxOGQ2YTE2NzZlMmYzLi5lNjc1OTAwZTQxMGIzOWQyN2U5MDg2
MjY2ZGU1M2U1ZmRlNDZjMWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2Eu
bW0KQEAgLTM2LDYgKzM2LDcgQEAKICNpbXBvcnQgPHd0Zi9PcHRpb25hbC5oPgogI2ltcG9ydCA8
d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0
Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogCiBAaW50ZXJmYWNlIE5TVVJMICgpCkBAIC02NCw5ICs2NSw5IEBAIHZvaWQgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxDb29raWU+JiBjb29raWVzLCBj
b25zdCBVUkwmCiB7CiAgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2UoUHJvY2Vzc1ByaXZp
bGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykgfHwgbV9pc0luTWVtb3J5Q29va2llU3RvcmUpOwog
Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBuc0Nvb2tpZXMgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29va2llcy5zaXplKCldKTsKLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCi0gICAgICAgIFtuc0Nvb2tpZXMg
YWRkT2JqZWN0OihOU0hUVFBDb29raWUgKiljb29raWVdOworICAgIGF1dG8gbnNDb29raWVzID0g
Y3JlYXRlTlNBcnJheShjb29raWVzLCBbXSAoYXV0byYgY29va2llKSAtPiBOU0hUVFBDb29raWUg
KiB7CisgICAgICAgIHJldHVybiBjb29raWU7CisgICAgfSk7CiAKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiAgICAgW25zQ29va2llU3RvcmFnZSgpIHNldENvb2tpZXM6bnNDb29r
aWVzLmdldCgpIGZvclVSTDooTlNVUkwgKil1cmwgbWFpbkRvY3VtZW50VVJMOihOU1VSTCAqKW1h
aW5Eb2N1bWVudFVSTF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NvY29hL1Jlc291cmNlUmVxdWVzdENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jb2NvYS9SZXNvdXJjZVJlcXVlc3RDb2NvYS5tbQppbmRleCA3NjZlYTNiODJm
NTg1YWYxNmFmZGFiZTEyYWNhODcyODYyNDQwYmQ2Li42OWI3YTcyMmNlNWRmMTU3ZmNjZGM3OWNj
MDk4YmI1NWU2MTFlM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NvY29hL1Jlc291cmNlUmVxdWVzdENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0KQEAgLTIwMSwxMyAr
MjAxLDEyIEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCgp
CiAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBodHRwSGVhZGVyRmllbGRzKCkpCiAgICAg
ICAgIFtuc1JlcXVlc3Qgc2V0VmFsdWU6aGVhZGVyLnZhbHVlIGZvckhUVFBIZWFkZXJGaWVsZDpo
ZWFkZXIua2V5XTsKIAotICAgIE5TTXV0YWJsZUFycmF5ICplbmNvZGluZ0ZhbGxiYWNrcyA9IFtO
U011dGFibGVBcnJheSBhcnJheV07Ci0gICAgZm9yIChjb25zdCBhdXRvJiBlbmNvZGluZ05hbWUg
OiBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KSB7Ci0g
ICAgICAgIENGU3RyaW5nRW5jb2RpbmcgbnNFbmNvZGluZyA9IENGU3RyaW5nQ29udmVydEVuY29k
aW5nVG9OU1N0cmluZ0VuY29kaW5nKENGU3RyaW5nQ29udmVydElBTkFDaGFyU2V0TmFtZVRvRW5j
b2RpbmcoZW5jb2RpbmdOYW1lLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKLSAgICAgICAgaWYg
KG5zRW5jb2RpbmcgIT0ga0NGU3RyaW5nRW5jb2RpbmdJbnZhbGlkSWQpCi0gICAgICAgICAgICBb
ZW5jb2RpbmdGYWxsYmFja3MgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRM
b25nOm5zRW5jb2RpbmddXTsKLSAgICB9Ci0gICAgW25zUmVxdWVzdCBzZXRDb250ZW50RGlzcG9z
aXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6ZW5jb2RpbmdGYWxsYmFja3NdOworICAgIFtuc1Jl
cXVlc3Qgc2V0Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5OmNyZWF0ZU5T
QXJyYXkobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSwg
W10gKGF1dG8mIGVuY29kaW5nTmFtZSkgLT4gTlNOdW1iZXIgKiB7CisgICAgICAgIGF1dG8gZW5j
b2RpbmcgPSBDRlN0cmluZ0NvbnZlcnRFbmNvZGluZ1RvTlNTdHJpbmdFbmNvZGluZyhDRlN0cmlu
Z0NvbnZlcnRJQU5BQ2hhclNldE5hbWVUb0VuY29kaW5nKGVuY29kaW5nTmFtZS5jcmVhdGVDRlN0
cmluZygpLmdldCgpKSk7CisgICAgICAgIGlmIChlbmNvZGluZyA9PSBrQ0ZTdHJpbmdFbmNvZGlu
Z0ludmFsaWRJZCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBAKGVu
Y29kaW5nKTsKKyAgICB9KS5nZXQoKV07CiAKICAgICBTdHJpbmcgcGFydGl0aW9uID0gY2FjaGVQ
YXJ0aXRpb24oKTsKICAgICBpZiAoIXBhcnRpdGlvbi5pc051bGwoKSAmJiAhcGFydGl0aW9uLmlz
RW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
b2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24uaAppbmRleCA2ZGY4ZDQ4NzAyODc4ZjFhYzc5
ZTlmMzBhOTU1ODRiOTBkMmUxY2RlLi4yMjk0YTlmZDk1YmM3NWFmNjRmMjRiYjkxZDIzNjAyZDJl
NWVhYmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29h
L1dlYkNvcmVOU1VSTFNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24uaApAQCAtNjIsNyArNjIsNyBAQCBXRUJDT1JF
X0VYUE9SVCBAaW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Npb24gOiBOU09iamVjdCB7CiAgICAg
V2Vha09iakNQdHI8aWQ8TlNVUkxTZXNzaW9uRGVsZWdhdGU+PiBfZGVsZWdhdGU7CiAgICAgUmV0
YWluUHRyPE5TT3BlcmF0aW9uUXVldWU+IF9xdWV1ZTsKICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+
IF9zZXNzaW9uRGVzY3JpcHRpb247Ci0gICAgSGFzaFNldDxSZXRhaW5QdHI8Q0ZUeXBlUmVmPj4g
X2RhdGFUYXNrczsKKyAgICBIYXNoU2V0PFJldGFpblB0cjxXZWJDb3JlTlNVUkxTZXNzaW9uRGF0
YVRhc2s+PiBfZGF0YVRhc2tzOwogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luPj4gX29yaWdpbnM7CiAgICAgTG9jayBfZGF0YVRhc2tzTG9jazsKICAgICBCT09MIF9p
bnZhbGlkYXRlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbQppbmRleCA0NzM4MGIxNWNhYWM2MjIz
N2UwZDQ1ODAzMjNmNzAzMzhmOWU4NWU3Li43Nzg3YjUwZGQyMGE5MjBhNjk1YjQ0MDNkNjE1NWQ5
NmRkNTZiMjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nv
Y29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLm1tCkBAIC0zMSw2ICszMSw3IEBACiAj
aW1wb3J0ICJTdWJyZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAj
aW1wb3J0IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0
b3JDb2NvYS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtOTIsNyArOTMsNyBA
QCAtICh2b2lkKWRlYWxsb2MKICAgICB7CiAgICAgICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoX2Rh
dGFUYXNrc0xvY2spOwogICAgICAgICBmb3IgKGF1dG8mIHRhc2sgOiBfZGF0YVRhc2tzKQotICAg
ICAgICAgICAgKChfX2JyaWRnZSBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKil0YXNrLmdl
dCgpKS5zZXNzaW9uID0gbmlsOworICAgICAgICAgICAgW3Rhc2sgc2V0U2Vzc2lvbjpuaWxdOwog
ICAgIH0KIAogICAgIGNhbGxPbk1haW5UaHJlYWQoW2xvYWRlciA9IFdURk1vdmUoX2xvYWRlcild
IHsKQEAgLTExNSw4ICsxMTYsOCBAQCAtICh2b2lkKXRhc2tDb21wbGV0ZWQ6KFdlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFzayAqKXRhc2sKICAgICB7CiAgICAgICAgIExvY2tlcjxMb2NrPiBsb2Nr
ZXIoX2RhdGFUYXNrc0xvY2spOwogCi0gICAgICAgIEFTU0VSVChfZGF0YVRhc2tzLmNvbnRhaW5z
KChfX2JyaWRnZSBDRlR5cGVSZWYpdGFzaykpOwotICAgICAgICBfZGF0YVRhc2tzLnJlbW92ZSgo
X19icmlkZ2UgQ0ZUeXBlUmVmKXRhc2spOworICAgICAgICBBU1NFUlQoX2RhdGFUYXNrcy5jb250
YWlucyh0YXNrKSk7CisgICAgICAgIF9kYXRhVGFza3MucmVtb3ZlKHRhc2spOwogICAgICAgICBp
ZiAoIV9kYXRhVGFza3MuaXNFbXB0eSgpIHx8ICFfaW52YWxpZGF0ZWQpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMjE3LDcgKzIxOCw3IEBAIC0gKHZvaWQpZmluaXNoVGFza3NBbmRJ
bnZhbGlkYXRlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmV0YWluUHRyPFdl
YkNvcmVOU1VSTFNlc3Npb24+IHN0cm9uZ1NlbGYgeyBzZWxmIH07CisgICAgYXV0byBzdHJvbmdT
ZWxmID0gcmV0YWluUHRyKHNlbGYpOwogICAgIFtzZWxmIGFkZERlbGVnYXRlT3BlcmF0aW9uOltz
dHJvbmdTZWxmXSB7CiAgICAgICAgIGlmIChbc3Ryb25nU2VsZi5nZXQoKS5kZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKFVSTFNlc3Npb246ZGlkQmVjb21lSW52YWxpZFdpdGhF
cnJvcjopXSkKICAgICAgICAgICAgIFtzdHJvbmdTZWxmLmdldCgpLmRlbGVnYXRlIFVSTFNlc3Np
b246KE5TVVJMU2Vzc2lvbiAqKXN0cm9uZ1NlbGYuZ2V0KCkgZGlkQmVjb21lSW52YWxpZFdpdGhF
cnJvcjpuaWxdOwpAQCAtMjI2LDE0ICsyMjcsMTQgQEAgLSAodm9pZClmaW5pc2hUYXNrc0FuZElu
dmFsaWRhdGUKIAogLSAodm9pZClpbnZhbGlkYXRlQW5kQ2FuY2VsCiB7Ci0gICAgVmVjdG9yPFJl
dGFpblB0cjxDRlR5cGVSZWY+PiB0YXNrc0NvcHk7CisgICAgVmVjdG9yPFJldGFpblB0cjxXZWJD
b3JlTlNVUkxTZXNzaW9uRGF0YVRhc2s+PiB0YXNrc0NvcHk7CiAgICAgewogICAgICAgICBMb2Nr
ZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2NrKTsKICAgICAgICAgdGFza3NDb3B5ID0gY29w
eVRvVmVjdG9yKF9kYXRhVGFza3MpOwogICAgIH0KIAogICAgIGZvciAoYXV0byYgdGFzayA6IHRh
c2tzQ29weSkKLSAgICAgICAgWyhfX2JyaWRnZSBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sg
Kil0YXNrLmdldCgpIGNhbmNlbF07CisgICAgICAgIFt0YXNrIGNhbmNlbF07CiAKICAgICBbc2Vs
ZiBmaW5pc2hUYXNrc0FuZEludmFsaWRhdGVdOwogfQpAQCAtMjU2LDI5ICsyNTcsMjkgQEAgLSAo
dm9pZClmbHVzaFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlv
bkhhbmRsZXIKIAogLSAodm9pZClnZXRUYXNrc1dpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoTlNBcnJheTxOU1VSTFNlc3Npb25EYXRhVGFzayAqPiAqZGF0YVRhc2tzLCBOU0FycmF5PE5T
VVJMU2Vzc2lvblVwbG9hZFRhc2sgKj4gKnVwbG9hZFRhc2tzLCBOU0FycmF5PE5TVVJMU2Vzc2lv
bkRvd25sb2FkVGFzayAqPiAqZG93bmxvYWRUYXNrcykpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAg
ICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBudWxscHRyOworICAgIFJldGFpblB0cjxOU0FycmF5
PiBhcnJheTsKICAgICB7CiAgICAgICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoX2RhdGFUYXNrc0xv
Y2spOwotICAgICAgICBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpf
ZGF0YVRhc2tzLnNpemUoKV07Ci0gICAgICAgIGZvciAoYXV0byYgdGFzayA6IF9kYXRhVGFza3Mp
Ci0gICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OihfX2JyaWRnZSBXZWJDb3JlTlNVUkxTZXNz
aW9uRGF0YVRhc2sgKil0YXNrLmdldCgpXTsKKyAgICAgICAgYXJyYXkgPSBjcmVhdGVOU0FycmF5
KF9kYXRhVGFza3MsIFtdIChhdXRvJiB0YXNrKSB7CisgICAgICAgICAgICByZXR1cm4gdGFzay5n
ZXQoKTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIFtzZWxmIGFkZERlbGVnYXRlT3BlcmF0aW9u
Ol57Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGFycmF5LCBuaWwsIG5pbCk7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKGFycmF5LmdldCgpLCBuaWwsIG5pbCk7CiAgICAgfV07CiB9CiAK
IC0gKHZvaWQpZ2V0QWxsVGFza3NXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJy
YXk8X19raW5kb2YgTlNVUkxTZXNzaW9uVGFzayAqPiAqdGFza3MpKWNvbXBsZXRpb25IYW5kbGVy
CiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gbnVsbHB0cjsKKyAgICBSZXRhaW5QdHI8
TlNBcnJheT4gYXJyYXk7CiAgICAgewogICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9kYXRh
VGFza3NMb2NrKTsKLSAgICAgICAgYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2Fw
YWNpdHk6X2RhdGFUYXNrcy5zaXplKCldOwotICAgICAgICBmb3IgKGF1dG8mIHRhc2sgOiBfZGF0
YVRhc2tzKQotICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDooX19icmlkZ2UgV2ViQ29yZU5T
VVJMU2Vzc2lvbkRhdGFUYXNrICopdGFzay5nZXQoKV07CisgICAgICAgIGFycmF5ID0gY3JlYXRl
TlNBcnJheShfZGF0YVRhc2tzLCBbXSAoYXV0byYgdGFzaykgeworICAgICAgICAgICAgcmV0dXJu
IHRhc2suZ2V0KCk7CisgICAgICAgIH0pOwogICAgIH0KICAgICBbc2VsZiBhZGREZWxlZ2F0ZU9w
ZXJhdGlvbjpeewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihhcnJheSk7CisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGFycmF5LmdldCgpKTsKICAgICB9XTsKIH0KIApAQCAtMjkwLDcgKzI5
MSw3IEBAIC0gKE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2tXaXRoUmVxdWVzdDooTlNV
UkxSZXF1ZXN0ICopcmVxdWVzdAogICAgIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFz
ayA9IFtbV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIGFsbG9jXSBpbml0V2l0aFNlc3Npb246
c2VsZiBpZGVudGlmaWVyOl9uZXh0VGFza0lkZW50aWZpZXIrKyByZXF1ZXN0OnJlcXVlc3RdOwog
ICAgIHsKICAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihfZGF0YVRhc2tzTG9jayk7Ci0gICAg
ICAgIF9kYXRhVGFza3MuYWRkKChfX2JyaWRnZSBDRlR5cGVSZWYpdGFzayk7CisgICAgICAgIF9k
YXRhVGFza3MuYWRkKHRhc2spOwogICAgIH0KICAgICByZXR1cm4gKE5TVVJMU2Vzc2lvbkRhdGFU
YXNrICopW3Rhc2sgYXV0b3JlbGVhc2VdOwogfQpAQCAtMzAzLDcgKzMwNCw3IEBAIC0gKE5TVVJM
U2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2tXaXRoVVJMOihOU1VSTCAqKXVybAogICAgIFdlYkNv
cmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFzayA9IFtbV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFU
YXNrIGFsbG9jXSBpbml0V2l0aFNlc3Npb246c2VsZiBpZGVudGlmaWVyOl9uZXh0VGFza0lkZW50
aWZpZXIrKyBVUkw6dXJsXTsKICAgICB7CiAgICAgICAgIExvY2tlcjxMb2NrPiBsb2NrZXIoX2Rh
dGFUYXNrc0xvY2spOwotICAgICAgICBfZGF0YVRhc2tzLmFkZCgoX19icmlkZ2UgQ0ZUeXBlUmVm
KXRhc2spOworICAgICAgICBfZGF0YVRhc2tzLmFkZCh0YXNrKTsKICAgICB9CiAgICAgcmV0dXJu
IChOU1VSTFNlc3Npb25EYXRhVGFzayAqKVt0YXNrIGF1dG9yZWxlYXNlXTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY29jb2EvUGF5bWVudEF1dGhvcml6YXRpb25QcmVz
ZW50ZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NvY29hL1BheW1lbnRBdXRob3JpemF0
aW9uUHJlc2VudGVyLm1tCmluZGV4IDI2YjQ3YmFjYmI4NWFlMWRjZTg0ZGM2ODQwZGIyNmUyZDc0
NTllN2UuLjZiNTVlOWY2ZTIwY2RjODVlZWRmYzA5MDQzYzg5OGIyMjNlNzU1ZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY29jb2EvUGF5bWVudEF1dGhvcml6YXRpb25QcmVz
ZW50ZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jb2NvYS9QYXltZW50QXV0aG9y
aXphdGlvblByZXNlbnRlci5tbQpAQCAtMzQsNiArMzQsOCBAQAogI2ltcG9ydCA8V2ViQ29yZS9Q
YXltZW50TWVyY2hhbnRTZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BheW1lbnRNZXRob2RV
cGRhdGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGF5bWVudFN1bW1hcnlJdGVtcy5oPgorI2ltcG9y
dCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CisKICNpbXBvcnQgPHBhbC9jb2NvYS9QYXNzS2l0
U29mdExpbmsuaD4KIAogU09GVF9MSU5LX0ZSQU1FV09SSyhDb250YWN0cyk7CkBAIC0xNjAsMjIg
KzE2MiwxOCBAQCBzdGF0aWMgTlNFcnJvciAqdG9OU0Vycm9yKGNvbnN0IFdlYkNvcmU6OlBheW1l
bnRFcnJvciYgZXJyb3IpCiAgICAgcmV0dXJuIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpQQUw6
OmdldF9QYXNzS2l0X1BLUGF5bWVudEVycm9yRG9tYWluKCkgY29kZTp0b1BLUGF5bWVudEVycm9y
Q29kZShlcnJvci5jb2RlKSB1c2VySW5mbzp1c2VySW5mby5nZXQoKV07CiB9CiAKLXN0YXRpYyBO
U0FycmF5ICp0b05TRXJyb3JzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpQYXltZW50RXJyb3I+JiBl
cnJvcnMpCitzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IHRvTlNFcnJvcnMoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OlBheW1lbnRFcnJvcj4mIGVycm9ycykKIHsKLSAgICBOU011dGFibGVBcnJheSAq
cmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmVycm9ycy5zaXplKCld
OwotICAgIGZvciAoY29uc3QgYXV0byYgZXJyb3IgOiBlcnJvcnMpIHsKLSAgICAgICAgaWYgKE5T
RXJyb3IgKm5zRXJyb3IgPSB0b05TRXJyb3IoZXJyb3IpKQotICAgICAgICAgICAgW3Jlc3VsdCBh
ZGRPYmplY3Q6bnNFcnJvcl07Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IGNyZWF0ZU5TQXJyYXkoZXJyb3JzLCBbXSAoYXV0byYgZXJyb3IpIHsKKyAgICAgICAgcmV0dXJu
IHRvTlNFcnJvcihlcnJvcik7CisgICAgfSk7CiB9CiAKLXN0YXRpYyBOU0FycmF5ICp0b1BLU2hp
cHBpbmdNZXRob2RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXltZW50
UmVxdWVzdDo6U2hpcHBpbmdNZXRob2Q+JiBzaGlwcGluZ01ldGhvZHMpCitzdGF0aWMgUmV0YWlu
UHRyPE5TQXJyYXk+IHRvUEtTaGlwcGluZ01ldGhvZHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkFw
cGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ01ldGhvZD4mIHNoaXBwaW5nTWV0
aG9kcykKIHsKLSAgICBOU011dGFibGVBcnJheSAqcGtTaGlwcGluZ01ldGhvZHMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2hpcHBpbmdNZXRob2RzLnNpemUoKV07Ci0gICAg
Zm9yIChhdXRvJiBzaGlwcGluZ01ldGhvZCA6IHNoaXBwaW5nTWV0aG9kcykKLSAgICAgICAgW3Br
U2hpcHBpbmdNZXRob2RzIGFkZE9iamVjdDp0b1BLU2hpcHBpbmdNZXRob2Qoc2hpcHBpbmdNZXRo
b2QpXTsKLSAgICByZXR1cm4gcGtTaGlwcGluZ01ldGhvZHM7CisgICAgcmV0dXJuIGNyZWF0ZU5T
QXJyYXkoc2hpcHBpbmdNZXRob2RzLCBbXSAoYXV0byYgc2hpcHBpbmdNZXRob2QpIHsKKyAgICAg
ICAgcmV0dXJuIHRvUEtTaGlwcGluZ01ldGhvZChzaGlwcGluZ01ldGhvZCk7CisgICAgfSk7CiB9
CiAKIHZvaWQgUGF5bWVudEF1dGhvcml6YXRpb25QcmVzZW50ZXI6OmNvbXBsZXRlTWVyY2hhbnRW
YWxpZGF0aW9uKGNvbnN0IFdlYkNvcmU6OlBheW1lbnRNZXJjaGFudFNlc3Npb24mIG1lcmNoYW50
U2Vzc2lvbikKQEAgLTE5OSw4ICsxOTcsOCBAQCB2b2lkIFBheW1lbnRBdXRob3JpemF0aW9uUHJl
c2VudGVyOjpjb21wbGV0ZVBheW1lbnRTZXNzaW9uKGNvbnN0IE9wdGlvbmFsPFdlYkNvcgogewog
ICAgIEFTU0VSVChwbGF0Zm9ybURlbGVnYXRlKCkpOwogICAgIGF1dG8gc3RhdHVzID0gcmVzdWx0
ID8gdG9QS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzKHJlc3VsdC0+c3RhdHVzKSA6IFBLUGF5
bWVudEF1dGhvcml6YXRpb25TdGF0dXNTdWNjZXNzOwotICAgIE5TQXJyYXkgKmVycm9ycyA9IHJl
c3VsdCA/IHRvTlNFcnJvcnMocmVzdWx0LT5lcnJvcnMpIDogQFsgXTsKLSAgICBbcGxhdGZvcm1E
ZWxlZ2F0ZSgpIGNvbXBsZXRlUGF5bWVudFNlc3Npb246c3RhdHVzIGVycm9yczplcnJvcnMgZGlk
UmVhY2hGaW5hbFN0YXRlOldlYkNvcmU6OmlzRmluYWxTdGF0ZVJlc3VsdChyZXN1bHQpXTsKKyAg
ICBSZXRhaW5QdHI8TlNBcnJheT4gZXJyb3JzID0gcmVzdWx0ID8gdG9OU0Vycm9ycyhyZXN1bHQt
PmVycm9ycykgOiBAWyBdOworICAgIFtwbGF0Zm9ybURlbGVnYXRlKCkgY29tcGxldGVQYXltZW50
U2Vzc2lvbjpzdGF0dXMgZXJyb3JzOmVycm9ycy5nZXQoKSBkaWRSZWFjaEZpbmFsU3RhdGU6V2Vi
Q29yZTo6aXNGaW5hbFN0YXRlUmVzdWx0KHJlc3VsdCldOwogfQogCiB2b2lkIFBheW1lbnRBdXRo
b3JpemF0aW9uUHJlc2VudGVyOjpjb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbihjb25z
dCBPcHRpb25hbDxXZWJDb3JlOjpTaGlwcGluZ0NvbnRhY3RVcGRhdGU+JiB1cGRhdGUpCkBAIC0y
MTIsNyArMjEwLDcgQEAgdm9pZCBQYXltZW50QXV0aG9yaXphdGlvblByZXNlbnRlcjo6Y29tcGxl
dGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24oY29uc3QgT3B0aW8KICAgICB9CiAKICAgICAvLyBG
SVhNRTogV2ViQ29yZTo6U2hpcHBpbmdDb250YWN0VXBkYXRlIHNob3VsZCBrbm93IGhvdyB0byBj
b252ZXJ0IGl0c2VsZiB0byBhIFBLUGF5bWVudFJlcXVlc3RTaGlwcGluZ0NvbnRhY3RVcGRhdGUu
Ci0gICAgYXV0byBzaGlwcGluZ0NvbnRhY3RVcGRhdGUgPSBhZG9wdE5TKFtQQUw6OmFsbG9jUEtQ
YXltZW50UmVxdWVzdFNoaXBwaW5nQ29udGFjdFVwZGF0ZUluc3RhbmNlKCkgaW5pdFdpdGhFcnJv
cnM6dG9OU0Vycm9ycyh1cGRhdGUtPmVycm9ycykgcGF5bWVudFN1bW1hcnlJdGVtczpXZWJDb3Jl
OjpwbGF0Zm9ybVN1bW1hcnlJdGVtcyh1cGRhdGUtPm5ld1RvdGFsQW5kTGluZUl0ZW1zKSBzaGlw
cGluZ01ldGhvZHM6dG9QS1NoaXBwaW5nTWV0aG9kcyh1cGRhdGUtPm5ld1NoaXBwaW5nTWV0aG9k
cyldKTsKKyAgICBhdXRvIHNoaXBwaW5nQ29udGFjdFVwZGF0ZSA9IGFkb3B0TlMoW1BBTDo6YWxs
b2NQS1BheW1lbnRSZXF1ZXN0U2hpcHBpbmdDb250YWN0VXBkYXRlSW5zdGFuY2UoKSBpbml0V2l0
aEVycm9yczp0b05TRXJyb3JzKHVwZGF0ZS0+ZXJyb3JzKS5nZXQoKSBwYXltZW50U3VtbWFyeUl0
ZW1zOldlYkNvcmU6OnBsYXRmb3JtU3VtbWFyeUl0ZW1zKHVwZGF0ZS0+bmV3VG90YWxBbmRMaW5l
SXRlbXMpIHNoaXBwaW5nTWV0aG9kczp0b1BLU2hpcHBpbmdNZXRob2RzKHVwZGF0ZS0+bmV3U2hp
cHBpbmdNZXRob2RzKS5nZXQoKV0pOwogICAgIFtwbGF0Zm9ybURlbGVnYXRlKCkgY29tcGxldGVT
aGlwcGluZ0NvbnRhY3RTZWxlY3Rpb246c2hpcHBpbmdDb250YWN0VXBkYXRlLmdldCgpXTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvY29jb2EvV2ViUGF5
bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxl
UGF5L2NvY29hL1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5Q29jb2EubW0KaW5kZXggMzEzMDg4
NjY1MjVmNjE4YjhmNjE4YTZkNTc5ZGI4NzM2MDcwMGU4Ny4uZWQ2NjA5Yjg3NWZiMzFmNTQ4Y2Yz
Njg5MTMxYWFlZjliNWZkOWEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXBw
bGVQYXkvY29jb2EvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBheS9jb2NvYS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94
eUNvY29hLm1tCkBAIC0xODcsMTUgKzE4Nyw3IEBAIFJldGFpblB0cjxQS1BheW1lbnRSZXF1ZXN0
PiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6cGxhdGZvcm1QYXltZW50UmVxdWVzdChjCiAK
ICAgICBbcmVzdWx0IHNldE9yaWdpbmF0aW5nVVJMOm9yaWdpbmF0aW5nVVJMXTsKIAotICAgIC8v
IEZJWE1FOiBXZSBkb24ndCBzdXBwb3J0IGFueSBwbGF0Zm9ybXMgd2l0aG91dCAtc2V0VGh1bWJu
YWlsVVJMczosIHNvIHRoaXMgY2FuIGJlIHNpbXBsaWZpZWQuCi0gICAgaWYgKFtyZXN1bHQgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRUaHVtYm5haWxVUkxzOildKSB7Ci0gICAgICAg
IGF1dG8gdGh1bWJuYWlsVVJMcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dF0pOwotICAgICAgICBmb3IgKGF1dG8mIGxpbmtJY29uVVJMIDogbGlua0ljb25VUkxzKQotICAg
ICAgICAgICAgW3RodW1ibmFpbFVSTHMgYWRkT2JqZWN0OnN0YXRpY19jYXN0PE5TVVJMICo+KGxp
bmtJY29uVVJMKV07Ci0KLSAgICAgICAgW3Jlc3VsdCBzZXRUaHVtYm5haWxVUkxzOnRodW1ibmFp
bFVSTHMuZ2V0KCldOwotICAgIH0gZWxzZSBpZiAoIWxpbmtJY29uVVJMcy5pc0VtcHR5KCkpCi0g
ICAgICAgIFtyZXN1bHQgc2V0VGh1bWJuYWlsVVJMOmxpbmtJY29uVVJMc1swXV07CisgICAgW3Jl
c3VsdCBzZXRUaHVtYm5haWxVUkxzOmNyZWF0ZU5TQXJyYXkobGlua0ljb25VUkxzKS5nZXQoKV07
CiAKICAgICBbcmVzdWx0IHNldEFQSVR5cGU6dG9BUElUeXBlKHBheW1lbnRSZXF1ZXN0LnJlcXVl
c3RlcigpKV07CiAKQEAgLTIxMSwxMCArMjAzLDkgQEAgUmV0YWluUHRyPFBLUGF5bWVudFJlcXVl
c3Q+IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpwbGF0Zm9ybVBheW1lbnRSZXF1ZXN0KGMK
IAogICAgIFtyZXN1bHQgc2V0U2hpcHBpbmdUeXBlOnRvUEtTaGlwcGluZ1R5cGUocGF5bWVudFJl
cXVlc3Quc2hpcHBpbmdUeXBlKCkpXTsKIAotICAgIGF1dG8gc2hpcHBpbmdNZXRob2RzID0gYWRv
cHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgZm9yIChhdXRvJiBzaGlw
cGluZ01ldGhvZCA6IHBheW1lbnRSZXF1ZXN0LnNoaXBwaW5nTWV0aG9kcygpKQotICAgICAgICBb
c2hpcHBpbmdNZXRob2RzIGFkZE9iamVjdDp0b1BLU2hpcHBpbmdNZXRob2Qoc2hpcHBpbmdNZXRo
b2QpXTsKLSAgICBbcmVzdWx0IHNldFNoaXBwaW5nTWV0aG9kczpzaGlwcGluZ01ldGhvZHMuZ2V0
KCldOworICAgIFtyZXN1bHQgc2V0U2hpcHBpbmdNZXRob2RzOmNyZWF0ZU5TQXJyYXkocGF5bWVu
dFJlcXVlc3Quc2hpcHBpbmdNZXRob2RzKCksIFtdIChhdXRvJiBzaGlwcGluZ01ldGhvZCkgewor
ICAgICAgICByZXR1cm4gdG9QS1NoaXBwaW5nTWV0aG9kKHNoaXBwaW5nTWV0aG9kKTsKKyAgICB9
KS5nZXQoKV07CiAKICAgICBbcmVzdWx0IHNldFBheW1lbnRTdW1tYXJ5SXRlbXM6V2ViQ29yZTo6
cGxhdGZvcm1TdW1tYXJ5SXRlbXMocGF5bWVudFJlcXVlc3QudG90YWwoKSwgcGF5bWVudFJlcXVl
c3QubGluZUl0ZW1zKCkpXTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbSBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxp
ZXIubW0KaW5kZXggZTQ3MDM1Y2NhMWU3YTg4OTJkMWQ5MGViOGIyMTUyM2NlMTRkYTQxZS4uNDM1
ODg1Nzg0MGZlYjY3MmQ5NWY1MTc2ZmE1MjhmZTBiZDBkMjRkNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBw
bGllci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
TGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0IDxX
ZWJDb3JlL1Njcm9sbGJhclRoZW1lTWFjLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0
ekNvcmVTUEkuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0
IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAj
aW1wb3J0IDxVSUtpdC9VSVZpZXcuaD4KQEAgLTMxMywzNSArMzE0LDI4IEBAIHZvaWQgUmVtb3Rl
TGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyOjp1cGRhdGVDaGlsZHJlbihSZW1vdGVMYXllclRyZWVO
b2RlJiBub2RlLCBjCiAKICAgICBpZiAoaGFzVmlld0NoaWxkcmVuKCkpIHsKICAgICAgICAgQVNT
RVJUKG5vZGUudWlWaWV3KCkpOwotCi0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4g
c3Vidmlld3MgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNp
dHk6cHJvcGVydGllcy5jaGlsZHJlbi5zaXplKCldKTsKLSAgICAgICAgZm9yIChhdXRvJiBjaGls
ZCA6IHByb3BlcnRpZXMuY2hpbGRyZW4pIHsKKyAgICAgICAgW2NvbnRlbnRWaWV3KCkgX3dlYl9z
ZXRTdWJ2aWV3czpjcmVhdGVOU0FycmF5KHByb3BlcnRpZXMuY2hpbGRyZW4sIFsmXSAoYXV0byYg
Y2hpbGQpIC0+IFVJVmlldyAqIHsKICAgICAgICAgICAgIGF1dG8qIGNoaWxkTm9kZSA9IHJlbGF0
ZWRMYXllcnMuZ2V0KGNoaWxkKTsKICAgICAgICAgICAgIEFTU0VSVChjaGlsZE5vZGUpOwogICAg
ICAgICAgICAgaWYgKCFjaGlsZE5vZGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgICAgIEFTU0VSVChjaGlsZE5vZGUtPnVp
VmlldygpKTsKLSAgICAgICAgICAgIFtzdWJ2aWV3cyBhZGRPYmplY3Q6Y2hpbGROb2RlLT51aVZp
ZXcoKV07Ci0gICAgICAgIH0KLQotICAgICAgICBbY29udGVudFZpZXcoKSBfd2ViX3NldFN1YnZp
ZXdzOnN1YnZpZXdzLmdldCgpXTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGUtPnVpVmll
dygpOworICAgICAgICB9KS5nZXQoKV07CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYK
IAotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gc3VibGF5ZXJzID0gYWRvcHROUyhbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnByb3BlcnRpZXMuY2hpbGRyZW4u
c2l6ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IHByb3BlcnRpZXMuY2hpbGRyZW4pIHsK
KyAgICBub2RlLmxheWVyKCkuc3VibGF5ZXJzID0gY3JlYXRlTlNBcnJheShwcm9wZXJ0aWVzLmNo
aWxkcmVuLCBbJl0gKGF1dG8mIGNoaWxkKSAtPiBDQUxheWVyICogewogICAgICAgICBhdXRvKiBj
aGlsZE5vZGUgPSByZWxhdGVkTGF5ZXJzLmdldChjaGlsZCk7CiAgICAgICAgIEFTU0VSVChjaGls
ZE5vZGUpOwogICAgICAgICBpZiAoIWNoaWxkTm9kZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAg
ICBBU1NFUlQoIWNoaWxkTm9kZS0+dWlWaWV3KCkpOwogI2VuZGlmCi0gICAgICAgIFtzdWJsYXll
cnMgYWRkT2JqZWN0OmNoaWxkTm9kZS0+bGF5ZXIoKV07Ci0gICAgfQotCi0gICAgbm9kZS5sYXll
cigpLnN1YmxheWVycyA9IHN1YmxheWVycy5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkTm9k
ZS0+bGF5ZXIoKTsKKyAgICB9KS5nZXQoKTsKIH0KIAogdm9pZCBSZW1vdGVMYXllclRyZWVQcm9w
ZXJ0eUFwcGxpZXI6OnVwZGF0ZU1hc2soUmVtb3RlTGF5ZXJUcmVlTm9kZSYgbm9kZSwgY29uc3Qg
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyYgcHJvcGVydGllcywg
Y29uc3QgUmVsYXRlZExheWVyTWFwJiByZWxhdGVkTGF5ZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLSFRUUENvb2tpZVN0b3JlLm1tCmluZGV4IDA4
NGNmYWU0NzJlZTc3OWM1YmNhNmExZWIyODk3MzUxNjBhN2M0YWUuLjAyM2E1MjNmYjI2NmE2ODM3
MzdlYjI3NGViOTg3ZDlhMzhmYzA5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KQEAgLTM0LDE1ICszNCwxMyBA
QAogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgogI2ltcG9y
dCA8d3RmL1dlYWtPYmpDUHRyLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4K
IAogc3RhdGljIE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICpjb3JlQ29va2llc1RvTlNDb29raWVz
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb3JlQ29va2llcykKIHsKLSAgICBOU011
dGFibGVBcnJheTxOU0hUVFBDb29raWUgKj4gKm5zQ29va2llcyA9IFtOU011dGFibGVBcnJheSBh
cnJheVdpdGhDYXBhY2l0eTpjb3JlQ29va2llcy5zaXplKCldOwotCi0gICAgZm9yIChhdXRvJiBj
b29raWUgOiBjb3JlQ29va2llcykKLSAgICAgICAgW25zQ29va2llcyBhZGRPYmplY3Q6KE5TSFRU
UENvb2tpZSAqKWNvb2tpZV07Ci0KLSAgICByZXR1cm4gbnNDb29raWVzOworICAgIHJldHVybiBj
cmVhdGVOU0FycmF5KGNvcmVDb29raWVzLCBbXSAoYXV0byYgY29va2llKSAtPiBOU0hUVFBDb29r
aWUgKiB7CisgICAgICAgIHJldHVybiBjb29raWU7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0K
IAogY2xhc3MgV0tIVFRQQ29va2llU3RvcmVPYnNlcnZlciA6IHB1YmxpYyBBUEk6OkhUVFBDb29r
aWVTdG9yZTo6T2JzZXJ2ZXIgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBmNWVhY2VlMGU4Y2UzYjMxNDkzNDU0MTBmOWEy
NjFkNTI3ZTM5MTE4Li40MmQ0NTZhMjFjYjk2YmMzNGM4Y2M1OTk3YTFiMzE3Zjk0YjI5NWZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9v
bC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9v
bC5tbQpAQCAtMTY0LDExICsxNjQsOSBAQCArIChXS1Byb2Nlc3NQb29sICopX3NoYXJlZFByb2Nl
c3NQb29sCiAKICsgKE5TQXJyYXk8V0tQcm9jZXNzUG9vbCAqPiAqKV9hbGxQcm9jZXNzUG9vbHNG
b3JUZXN0aW5nCiB7Ci0gICAgYXV0byYgYWxsUG9vbHMgPSBXZWJLaXQ6OldlYlByb2Nlc3NQb29s
OjphbGxQcm9jZXNzUG9vbHMoKTsKLSAgICBhdXRvIG5zQWxsUG9vbHMgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6YWxsUG9vbHMuc2l6ZSgpXSk7Ci0g
ICAgZm9yIChhdXRvKiBwb29sIDogYWxsUG9vbHMpCi0gICAgICAgIFtuc0FsbFBvb2xzIGFkZE9i
amVjdDp3cmFwcGVyKCpwb29sKV07Ci0gICAgcmV0dXJuIG5zQWxsUG9vbHMuYXV0b3JlbGVhc2Uo
KTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjphbGxQ
cm9jZXNzUG9vbHMoKSwgW10gKGF1dG8mIHBvb2wpIHsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIo
KnBvb2wpOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKICsgKE5TVVJMICopX3dlYnNpdGVE
YXRhVVJMRm9yQ29udGFpbmVyV2l0aFVSTDooTlNVUkwgKiljb250YWluZXJVUkwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDAwMzQxNThi
YTIxZmYzYTgxMDdmY2U3ZDA3ZjhiMDYxZDliNDI2NjIuLjUzZmJiMmU5MTQ4ZWY0OTM5NGZjYjcz
ODJiZDQxMjQ4YTMzYmQwZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlldy5tbQpAQCAtMTY3NCwzNyArMTY3NCwyMyBAQCAtICh2b2lkKV9zdGFydFRl
eHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25Db25m
aWd1cmF0aQogICAgICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIGlmICghW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZp
ZXc6ZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtczopXSkgewotICAgICAgICAgICAgZm9yIChh
dXRvJiBpdGVtIDogaXRlbVJlZmVyZW5jZXMpIHsKLSAgICAgICAgICAgICAgICBOU011dGFibGVB
cnJheSAqd2tUb2tlbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6aXRlbS50
b2tlbnMuc2l6ZSgpXTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHRva2VuIDogaXRlbS50
b2tlbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byB3a1Rva2VuID0gYWRvcHROUyhbW19X
S1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOwotICAgICAgICAgICAgICAgICAg
ICBbd2tUb2tlbiBzZXRJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKHRva2VuLmlkZW50aWZpZXIu
dG9VSW50NjQoKSldOwotICAgICAgICAgICAgICAgICAgICBbd2tUb2tlbiBzZXRDb250ZW50OnRv
a2VuLmNvbnRlbnRdOwotICAgICAgICAgICAgICAgICAgICBbd2tUb2tlbiBzZXRFeGNsdWRlZDp0
b2tlbi5pc0V4Y2x1ZGVkXTsKLSAgICAgICAgICAgICAgICAgICAgW3drVG9rZW5zIGFkZE9iamVj
dDp3a1Rva2VuLmdldCgpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXV0
byB3a0l0ZW0gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gYWxsb2NdIGluaXRX
aXRoSWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcihpdGVtLmlkZW50aWZpZXIudG9VSW50NjQoKSkg
dG9rZW5zOndrVG9rZW5zXSk7Ci0gICAgICAgICAgICAgICAgW2RlbGVnYXRlIF93ZWJWaWV3OnJl
dGFpbmVkU2VsZi5nZXQoKSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW06d2tJdGVtLmdldCgp
XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIE5TTXV0YWJsZUFycmF5ICp3a0l0ZW1zID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENh
cGFjaXR5Oml0ZW1SZWZlcmVuY2VzLnNpemUoKV07Ci0gICAgICAgIGZvciAoYXV0byYgaXRlbSA6
IGl0ZW1SZWZlcmVuY2VzKSB7Ci0gICAgICAgICAgICBOU011dGFibGVBcnJheSAqd2tUb2tlbnMg
PSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6aXRlbS50b2tlbnMuc2l6ZSgpXTsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgdG9rZW4gOiBpdGVtLnRva2VucykgeworICAgICAgICBh
dXRvIGNyZWF0ZVdLSXRlbSA9IFtdIChjb25zdCBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlcjo6TWFuaXB1bGF0aW9uSXRlbSYgaXRlbSkgeworICAgICAgICAgICAgYXV0byB0b2tl
bnMgPSBjcmVhdGVOU0FycmF5KGl0ZW0udG9rZW5zLCBbXSAoYXV0byYgdG9rZW4pIHsKICAgICAg
ICAgICAgICAgICBhdXRvIHdrVG9rZW4gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvblRv
a2VuIGFsbG9jXSBpbml0XSk7CiAgICAgICAgICAgICAgICAgW3drVG9rZW4gc2V0SWRlbnRpZmll
cjpTdHJpbmc6Om51bWJlcih0b2tlbi5pZGVudGlmaWVyLnRvVUludDY0KCkpXTsKICAgICAgICAg
ICAgICAgICBbd2tUb2tlbiBzZXRDb250ZW50OnRva2VuLmNvbnRlbnRdOwogICAgICAgICAgICAg
ICAgIFt3a1Rva2VuIHNldEV4Y2x1ZGVkOnRva2VuLmlzRXhjbHVkZWRdOwotICAgICAgICAgICAg
ICAgIFt3a1Rva2VucyBhZGRPYmplY3Q6d2tUb2tlbi5nZXQoKV07Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBhdXRvIHdrSXRlbSA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uSXRl
bSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKGl0ZW0uaWRlbnRpZmll
ci50b1VJbnQ2NCgpKSB0b2tlbnM6d2tUb2tlbnNdKTsKLSAgICAgICAgICAgIFt3a0l0ZW1zIGFk
ZE9iamVjdDp3a0l0ZW0uZ2V0KCldOworICAgICAgICAgICAgICAgIHJldHVybiB3a1Rva2VuOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHROUyhbW19XS1RleHRNYW5p
cHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIoaXRl
bS5pZGVudGlmaWVyLnRvVUludDY0KCkpIHRva2Vuczp0b2tlbnMuZ2V0KCldKTsKKyAgICAgICAg
fTsKKworICAgICAgICBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
X3dlYlZpZXc6ZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtczopXSkKKyAgICAgICAgICAgIFtk
ZWxlZ2F0ZSBfd2ViVmlldzpyZXRhaW5lZFNlbGYuZ2V0KCkgZGlkRmluZFRleHRNYW5pcHVsYXRp
b25JdGVtczpjcmVhdGVOU0FycmF5KGl0ZW1SZWZlcmVuY2VzLCBjcmVhdGVXS0l0ZW0pLmdldCgp
XTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtUmVm
ZXJlbmNlcykKKyAgICAgICAgICAgICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6cmV0YWluZWRTZWxm
LmdldCgpIGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTpjcmVhdGVXS0l0ZW0oaXRlbSkuZ2V0
KCldOwogICAgICAgICB9Ci0gICAgICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzpyZXRhaW5lZFNlbGYu
Z2V0KCkgZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtczp3a0l0ZW1zXTsKLQogICAgIH0sIFtj
YXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcild
ICgpIHsKICAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uQmxvY2soKTsKICAgICB9KTsKQEAgLTE3
NTEsMzQgKzE3MzcsMzAgQEAgc3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gbWFrZUZh
aWx1cmVTZXRGb3JBbGxUZXh0TWFuaXB1bGF0aW9uSXRlbXMoTlNBcnIKIAogc3RhdGljIFJldGFp
blB0cjxOU011dGFibGVBcnJheT4gd2tUZXh0TWFuaXB1bGF0aW9uRXJyb3JzKE5TQXJyYXk8X1dL
VGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKml0ZW1zLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvbkZhaWx1cmU+JiBmYWlsdXJlcykK
IHsKLSAgICB1c2luZyBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZSA9IFdlYkNvcmU6OlRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTsKLQogICAgIGlmIChm
YWlsdXJlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBSZXRhaW5QdHI8TlNNdXRhYmxlQXJy
YXk+IHsgbmlsIH07CisgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk+IHdrRmFpbHVyZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6ZmFpbHVyZXMuc2l6ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBjb3JlRmFp
bHVyZSA6IGZhaWx1cmVzKSB7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoZmFpbHVyZXMsIFsm
XSAoYXV0byYgY29yZUZhaWx1cmUpIC0+IE5TRXJyb3IgKiB7CiAgICAgICAgIEFTU0VSVChjb3Jl
RmFpbHVyZS5pbmRleCA8IGl0ZW1zLmNvdW50KTsKICAgICAgICAgaWYgKGNvcmVGYWlsdXJlLmlu
ZGV4ID49IGl0ZW1zLmNvdW50KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8q
IGl0ZW0gPSBpdGVtc1tjb3JlRmFpbHVyZS5pbmRleF07Ci0gICAgICAgIEFTU0VSVChjb3JlVGV4
dE1hbmlwdWxhdGlvbkl0ZW1JZGVudGlmaWVyRnJvbVN0cmluZyhpdGVtLmlkZW50aWZpZXIpID09
IGNvcmVGYWlsdXJlLmlkZW50aWZpZXIpOwotICAgICAgICBhdXRvIGVycm9yQ29kZSA9IChbJmNv
cmVGYWlsdXJlXSgpIHsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIGF1dG8gZXJy
b3JDb2RlID0gc3RhdGljX2Nhc3Q8TlNJbnRlZ2VyPigoWyZjb3JlRmFpbHVyZV0geworICAgICAg
ICAgICAgdXNpbmcgVHlwZSA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpN
YW5pcHVsYXRpb25GYWlsdXJlVHlwZTsKICAgICAgICAgICAgIHN3aXRjaCAoY29yZUZhaWx1cmUu
dHlwZSkgewotICAgICAgICAgICAgY2FzZSBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6Q29udGVu
dENoYW5nZWQ6CisgICAgICAgICAgICBjYXNlIFR5cGU6OkNvbnRlbnRDaGFuZ2VkOgogICAgICAg
ICAgICAgICAgIHJldHVybiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbUVycm9yQ29udGVudENoYW5n
ZWQ7Ci0gICAgICAgICAgICBjYXNlIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpJbnZhbGlkSXRl
bToKKyAgICAgICAgICAgIGNhc2UgVHlwZTo6SW52YWxpZEl0ZW06CiAgICAgICAgICAgICAgICAg
cmV0dXJuIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtRXJyb3JJbnZhbGlkSXRlbTsKLSAgICAgICAg
ICAgIGNhc2UgTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkludmFsaWRUb2tlbjoKKyAgICAgICAg
ICAgIGNhc2UgVHlwZTo6SW52YWxpZFRva2VuOgogICAgICAgICAgICAgICAgIHJldHVybiBfV0tU
ZXh0TWFuaXB1bGF0aW9uSXRlbUVycm9ySW52YWxpZFRva2VuOwotICAgICAgICAgICAgY2FzZSBN
YW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6RXhjbHVzaW9uVmlvbGF0aW9uOgorICAgICAgICAgICAg
Y2FzZSBUeXBlOjpFeGNsdXNpb25WaW9sYXRpb246CiAgICAgICAgICAgICAgICAgcmV0dXJuIF9X
S1RleHRNYW5pcHVsYXRpb25JdGVtRXJyb3JFeGNsdXNpb25WaW9sYXRpb247CiAgICAgICAgICAg
ICB9Ci0gICAgICAgIH0pKCk7Ci0gICAgICAgIFt3a0ZhaWx1cmVzIGFkZE9iamVjdDpbTlNFcnJv
ciBlcnJvcldpdGhEb21haW46X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW1FcnJvckRvbWFpbiBjb2Rl
OnN0YXRpY19jYXN0PGludD4oZXJyb3JDb2RlKSB1c2VySW5mbzpAe19XS1RleHRNYW5pcHVsYXRp
b25JdGVtRXJyb3JJdGVtS2V5OiBpdGVtfV1dOwotICAgIH0KLQotICAgIHJldHVybiB3a0ZhaWx1
cmVzOworICAgICAgICB9KSgpKTsKKyAgICAgICAgYXV0byBpdGVtID0gaXRlbXNbY29yZUZhaWx1
cmUuaW5kZXhdOworICAgICAgICBBU1NFUlQoY29yZVRleHRNYW5pcHVsYXRpb25JdGVtSWRlbnRp
ZmllckZyb21TdHJpbmcoaXRlbS5pZGVudGlmaWVyKSA9PSBjb3JlRmFpbHVyZS5pZGVudGlmaWVy
KTsKKyAgICAgICAgcmV0dXJuIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tUZXh0TWFuaXB1
bGF0aW9uSXRlbUVycm9yRG9tYWluIGNvZGU6ZXJyb3JDb2RlIHVzZXJJbmZvOkB7X1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW1FcnJvckl0ZW1LZXk6IGl0ZW19XTsKKyAgICB9KTsKIH0KIAogLSAodm9p
ZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6KE5TQXJyYXk8X1dLVGV4dE1hbmlw
dWxhdGlvbkl0ZW0gKj4gKilpdGVtcyBjb21wbGV0aW9uOih2b2lkKF4pKE5TQXJyYXk8TlNFcnJv
ciAqPiAqZXJyb3JzKSljb21wbGV0aW9uSGFuZGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tCmluZGV4IGE1
YTk0MWYxZDdmYjJkYmRiY2RlY2JmMTZkZTNiYmVjZGJlYzk5YTEuLjlhNTMwMzc0ODA0MjY3ZTU2
NWRlMzUxZjAyY2JlN2M4OTNlNmUwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0KQEAgLTI1MSwxMSAr
MjUxLDkgQEAgLSAoX1dLV2Vic2l0ZVBvcFVwUG9saWN5KV9wb3BVcFBvbGljeQogCiAtIChOU0Fy
cmF5PF9XS0N1c3RvbUhlYWRlckZpZWxkcyAqPiAqKV9jdXN0b21IZWFkZXJGaWVsZHMKIHsKLSAg
ICBjb25zdCBhdXRvJiBmaWVsZHMgPSBfd2Vic2l0ZVBvbGljaWVzLT5jdXN0b21IZWFkZXJGaWVs
ZHMoKTsKLSAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eTpmaWVsZHMuc2l6ZSgpXSBhdXRvcmVsZWFzZV07Ci0gICAgZm9y
IChjb25zdCBhdXRvJiBmaWVsZCA6IGZpZWxkcykKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDp3
cmFwcGVyKEFQSTo6Q3VzdG9tSGVhZGVyRmllbGRzOjpjcmVhdGUoZmllbGQpKV07Ci0gICAgcmV0
dXJuIGFycmF5OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KF93ZWJzaXRlUG9saWNpZXMtPmN1
c3RvbUhlYWRlckZpZWxkcygpLCBbXSAoYXV0byYgZmllbGQpIHsKKyAgICAgICAgcmV0dXJuIHdy
YXBwZXIoQVBJOjpDdXN0b21IZWFkZXJGaWVsZHM6OmNyZWF0ZShmaWVsZCkpOworICAgIH0pLmF1
dG9yZWxlYXNlKCk7CiB9CiAKIC0gKHZvaWQpX3NldEN1c3RvbUhlYWRlckZpZWxkczooTlNBcnJh
eTxfV0tDdXN0b21IZWFkZXJGaWVsZHMgKj4gKilmaWVsZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0KaW5kZXgg
NTlkNGRhYWFkMjQzOWIyZDIyOTc0Zjk5ZDg3ODg1MmRlMDI0ZjMzZC4uNDU0MDNkMTY5MzZlYWE4
MjU0Y2Q1MDVmYTg4NGVkZjBkYWZlMDQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0KQEAgLTE1NCwxMSAr
MTU0LDkgQEAgLSAoX1dLV2Vic2l0ZURhdGFTaXplICopX2RhdGFTaXplCiAKIC0gKE5TQXJyYXk8
TlNTdHJpbmcgKj4gKilfb3JpZ2luc1N0cmluZ3MKIHsKLSAgICBhdXRvIG9yaWdpbnMgPSBfd2Vi
c2l0ZURhdGFSZWNvcmQtPndlYnNpdGVEYXRhUmVjb3JkKCkub3JpZ2luczsKLSAgICBOU011dGFi
bGVBcnJheTxOU1N0cmluZyAqPiAqYXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
V2l0aENhcGFjaXR5Om9yaWdpbnMuc2l6ZSgpXTsKLSAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IG9y
aWdpbnMpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nICopb3JpZ2luLnRvU3Ry
aW5nKCldOwotICAgIHJldHVybiBbYXJyYXkgYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBjcmVh
dGVOU0FycmF5KF93ZWJzaXRlRGF0YVJlY29yZC0+d2Vic2l0ZURhdGFSZWNvcmQoKS5vcmlnaW5z
LCBbXSAoYXV0byYgb3JpZ2luKSAtPiBOU1N0cmluZyAqIHsKKyAgICAgICAgcmV0dXJuIG9yaWdp
bi50b1N0cmluZygpOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIEBlbmQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3Jl
Lm1tCmluZGV4IGE0OGUxYjYyMDI2Yjc3MTMyZGY0Zjc5OTAyN2I3N2M1NmE5MWNmY2EuLjczYzk4
YTM0NjI1ZDhmNTU1MjQxNDM4NGUzY2U2YjhkYjg0MGU4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAt
NTQyLDExICs1NDIsOSBAQCAtICh2b2lkKV9nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1
bW1hcnk6KHZvaWQgKF4pKE5TQXJyYXk8X1dLUmVzb3VyY2VMb2FkUwogewogI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgX3dlYnNpdGVEYXRhU3RvcmUtPmdldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHRoaXJkUGFydHlEb21haW5zKSB7Ci0g
ICAgICAgIE5TTXV0YWJsZUFycmF5PF9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5
ICo+ICphcGlUaGlyZFBhcnRpZXMgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTp0aGlyZFBhcnR5RG9tYWlucy5zaXplKCldIGF1dG9yZWxlYXNlXTsKLSAgICAgICAg
Zm9yIChhdXRvJiB0aGlyZFBhcnR5IDogdGhpcmRQYXJ0eURvbWFpbnMpCi0gICAgICAgICAgICBb
YXBpVGhpcmRQYXJ0aWVzIGFkZE9iamVjdDp3cmFwcGVyKEFQSTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1RoaXJkUGFydHk6OmNyZWF0ZShXVEZNb3ZlKHRoaXJkUGFydHkpKSldOwotCi0gICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKGFwaVRoaXJkUGFydGllcyk7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKGNyZWF0ZU5TQXJyYXkodGhpcmRQYXJ0eURvbWFpbnMsIFtdIChhdXRvJiYgZG9tYWlu
KSB7CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcihBUEk6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUaGlyZFBhcnR5OjpjcmVhdGUoV1RGTW92ZShkb21haW4pKSk7CisgICAgICAgIH0pLmdldCgp
KTsKICAgICB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tEb3dubG9hZC5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tEb3dubG9hZC5tbQppbmRleCBkMWE2
ODNkZDJlNjhlOTk2M2RlYzlmMjhmZjY4MGU4YjQxMmNjMzRhLi5kYTBkYjVhZDljNmUzNzdhMjNi
ZmQ2NGEyZjkwNjMxNmY1ZjBjODE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLRG93bmxvYWQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS0Rvd25sb2FkLm1tCkBAIC02NywxMSArNjcsOSBAQCAtIChXS1dlYlZpZXcg
KilvcmlnaW5hdGluZ1dlYlZpZXcKIAogLShOU0FycmF5PE5TVVJMICo+ICopcmVkaXJlY3RDaGFp
bgogewotICAgIGF1dG8mIHJlZGlyZWN0VVJMcyA9IF9kb3dubG9hZC0+cmVkaXJlY3RDaGFpbigp
OwotICAgIE5TTXV0YWJsZUFycmF5PE5TVVJMICo+ICpuc1VSTHMgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXlXaXRoQ2FwYWNpdHk6cmVkaXJlY3RVUkxzLnNpemUoKV07Ci0gICAgZm9yIChjb25zdCBh
dXRvJiByZWRpcmVjdFVSTCA6IHJlZGlyZWN0VVJMcykKLSAgICAgICAgW25zVVJMcyBhZGRPYmpl
Y3Q6KE5TVVJMICopcmVkaXJlY3RVUkxdOwotICAgIHJldHVybiBuc1VSTHM7CisgICAgcmV0dXJu
IGNyZWF0ZU5TQXJyYXkoX2Rvd25sb2FkLT5yZWRpcmVjdENoYWluKCksIFtdIChhdXRvJiByZWRp
cmVjdFVSTCkgLT4gTlNVUkwgKiB7CisgICAgICAgIHJldHVybiByZWRpcmVjdFVSTDsKKyAgICB9
KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChCT09MKXdhc1VzZXJJbml0aWF0ZWQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tGcmFtZVRyZWVOb2RlLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0ZyYW1lVHJlZU5vZGUubW0K
aW5kZXggZWM0YzRhN2VlMDJlMjI0N2ZjZWJiMDQ3ZTNiNmU3N2U4ZGQ2NDI3OC4uNGQzOWUyMTU4
MjE2N2JjODUxYjkwZGM0YTE4NTYyNGU2YmYwYzIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0ZyYW1lVHJlZU5vZGUubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0ZyYW1lVHJlZU5vZGUubW0KQEAgLTI5LDYgKzI5
LDcgQEAKICNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tGcmFtZUhh
bmRsZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tGcmFtZVRyZWVOb2RlSW50ZXJuYWwuaCIKKyNp
bXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiBAaW1wbGVtZW50YXRpb24gX1dLRnJh
bWVUcmVlTm9kZQogCkBAIC02MiwxMSArNjMsOSBAQCAtIChXS1dlYlZpZXcgKil3ZWJWaWV3CiAK
IC0gKE5TQXJyYXk8X1dLRnJhbWVUcmVlTm9kZSAqPiAqKWNoaWxkRnJhbWVzCiB7Ci0gICAgY29u
c3QgYXV0byYgY2hpbGRyZW4gPSBfbm9kZS0+Y2hpbGRGcmFtZXMoKTsKLSAgICBOU011dGFibGVB
cnJheTxfV0tGcmFtZVRyZWVOb2RlICo+ICphcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdp
dGhDYXBhY2l0eTpjaGlsZHJlbi5zaXplKCldOwotICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQg
OiBjaGlsZHJlbikKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDp3cmFwcGVyKEFQSTo6RnJhbWVU
cmVlTm9kZTo6Y3JlYXRlKFdlYktpdDo6RnJhbWVUcmVlTm9kZURhdGEoY2hpbGQpLCBfbm9kZS0+
cGFnZSgpKSldOwotICAgIHJldHVybiBhcnJheTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShf
bm9kZS0+Y2hpbGRGcmFtZXMoKSwgWyZdIChhdXRvJiBjaGlsZCkgeworICAgICAgICByZXR1cm4g
d3JhcHBlcihBUEk6OkZyYW1lVHJlZU5vZGU6OmNyZWF0ZShXZWJLaXQ6OkZyYW1lVHJlZU5vZGVE
YXRhKGNoaWxkKSwgX25vZGUtPnBhZ2UoKSkpOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAK
IC0gKGlkKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24ubW0KaW5kZXggYWQzNjViY2IxZjUxYWRiMDZlNzYyNjE2MzNlMTg1ZDhjMTVjYWVkMC4u
YzQzZDQyNzFlNWY1YzM1ZTMzZDY5MTQxZDQ3MjI5MWNhN2FkMjAzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlv
bi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uLm1tCkBAIC0xNDMsMTEgKzE0Myw5IEBAIC0gKE5TQXJyYXk8TlNVUkwg
Kj4gKilhZGRpdGlvbmFsUmVhZEFjY2Vzc0FsbG93ZWRVUkxzCiAgICAgaWYgKHBhdGhzLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIEBbIF07CiAKLSAgICBOU011dGFibGVBcnJheSAqdXJscyA9
IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpwYXRocy5zaXplKCldOwotICAgIGZv
ciAoY29uc3QgYXV0byYgcGF0aCA6IHBhdGhzKQotICAgICAgICBbdXJscyBhZGRPYmplY3Q6W05T
VVJMIGZpbGVVUkxXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOnBhdGguZGF0YSgpIGlzRGly
ZWN0b3J5Ok5PIHJlbGF0aXZlVG9VUkw6bmlsXV07Ci0KLSAgICByZXR1cm4gdXJsczsKKyAgICBy
ZXR1cm4gY3JlYXRlTlNBcnJheShwYXRocywgW10gKGF1dG8mIHBhdGgpIHsKKyAgICAgICAgcmV0
dXJuIFtOU1VSTCBmaWxlVVJMV2l0aEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbjpwYXRoLmRhdGEo
KSBpc0RpcmVjdG9yeTpOTyByZWxhdGl2ZVRvVVJMOm5pbF07CisgICAgfSkuYXV0b3JlbGVhc2Uo
KTsKIH0KIAogLSAodm9pZClzZXRBZGRpdGlvbmFsUmVhZEFjY2Vzc0FsbG93ZWRVUkxzOihOU0Fy
cmF5PE5TVVJMICo+ICopYWRkaXRpb25hbFJlYWRBY2Nlc3NBbGxvd2VkVVJMcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NUaGlyZFBhcnR5Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Lm1tCmluZGV4IDUzZjlkOWYzNTllZDZh
ZjU0NTgxNTY1OGIzNTFkM2Y3YjI0NGNjN2UuLmYwNDZiZGRmM2E1ODI5MTVkYTA3Y2QyMTAyMzll
ODM4NTI1MDI5ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFy
dHkubW0KQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIl9XS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUaGlyZFBhcnR5SW50ZXJuYWwuaCIKIAogI2ltcG9ydCAiQVBJQXJyYXkuaCIKKyNpbXBvcnQg
PHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiBAaW1wbGVtZW50YXRpb24gX1dLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RoaXJkUGFydHkKIApAQCAtNDMsMTIgKzQ0LDkgQEAgLSAoTlNTdHJpbmcg
Kil0aGlyZFBhcnR5RG9tYWluCiAKIC0gKE5TQXJyYXk8X1dLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0ZpcnN0UGFydHkgKj4gKil1bmRlckZpcnN0UGFydGllcwogewotICAgIGF1dG8gYXBpRmlyc3RQ
YXJ0aWVzID0gX3RoaXJkUGFydHktPnVuZGVyRmlyc3RQYXJ0aWVzKCk7Ci0gICAgTlNNdXRhYmxl
QXJyYXk8X1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHkgKj4gKmFwaVVuZGVyRmly
c3RQYXJ0aWVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmFwaUZpcnN0UGFy
dGllcy5zaXplKCldOwotICAgIGZvciAoY29uc3QgYXV0byYgdGhpcmRQYXJ0eURhdGFVbmRlckZp
cnN0UGFydHkgOiBhcGlGaXJzdFBhcnRpZXMpCi0gICAgICAgIFthcGlVbmRlckZpcnN0UGFydGll
cyBhZGRPYmplY3Q6d3JhcHBlcihBUEk6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5
OjpjcmVhdGUodGhpcmRQYXJ0eURhdGFVbmRlckZpcnN0UGFydHkpKV07Ci0KLSAgICByZXR1cm4g
YXBpVW5kZXJGaXJzdFBhcnRpZXM7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoX3RoaXJkUGFy
dHktPnVuZGVyRmlyc3RQYXJ0aWVzKCksIFtdIChhdXRvJiBkYXRhKSB7CisgICAgICAgIHJldHVy
biB3cmFwcGVyKEFQSTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHk6OmNyZWF0ZShk
YXRhKSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoQVBJOjpPYmplY3QmKV9hcGlP
YmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJW
aWV3SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1Mu
bW0KaW5kZXggYmEwNmFjZTk2ZGEwNDk2NWE3MmRmZWNmNzI1NTliMmQzNmVlMjZiMy4uZjRkMDZj
NjZkZjJkYWE3N2M3NTE5ZWMyOGNkZGYyYTVlNWIxNmRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0KQEAgLTU2LDYgKzU2LDcgQEAKICNp
bXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2Nv
YS9RdWFydHpDb3JlU1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9HcmFwaGljc1NlcnZpY2Vz
U1BJLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogI2lmIEVOQUJMRShE
QVRBX0RFVEVDVElPTikKICNpbXBvcnQgIldLRGF0YURldGVjdG9yVHlwZXNJbnRlcm5hbC5oIgpA
QCAtMzA0OSwxMCArMzA1MCw5IEBAIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3Rz
QXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0aFRleHQ6CiAgICAgW19jb250
ZW50VmlldyBfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9mZnNldDpvZmZz
ZXQgd2l0aFRleHQ6dGV4dCBjb21wbGV0aW9uSGFuZGxlcjpbY2FwdHVyZWRDb21wbGV0aW9uSGFu
ZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChjb25zdCBWZWN0b3I8V2Vi
Q29yZTo6U2VsZWN0aW9uUmVjdD4mIHNlbGVjdGlvblJlY3RzKSB7CiAgICAgICAgIGlmICghY2Fw
dHVyZWRDb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0
byByZWN0VmFsdWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5OnNlbGVjdGlvblJlY3RzLnNpemUoKV0pOwotICAgICAgICBmb3IgKGF1dG8mIHNlbGVj
dGlvblJlY3QgOiBzZWxlY3Rpb25SZWN0cykKLSAgICAgICAgICAgIFtyZWN0VmFsdWVzIGFkZE9i
amVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6c2VsZWN0aW9uUmVjdC5yZWN0KCldXTsKLSAg
ICAgICAgY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcihyZWN0VmFsdWVzLmdldCgpKTsKKyAgICAg
ICAgY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcihjcmVhdGVOU0FycmF5KHNlbGVjdGlvblJlY3Rz
LCBbXSAoYXV0byYgc2VsZWN0aW9uUmVjdCkgeworICAgICAgICAgICAgcmV0dXJuIFtOU1ZhbHVl
IHZhbHVlV2l0aENHUmVjdDpzZWxlY3Rpb25SZWN0LnJlY3QoKV07CisgICAgICAgIH0pLmdldCgp
KTsKICAgICB9XTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvTmF2aWdhdGlvblN0YXRlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2
aWdhdGlvblN0YXRlLm1tCmluZGV4IDViYTg4MjU2NTM4ZWZhODBiMGIwOTgyZTI4MTU4YWM2NTBh
ZWRjMmEuLjhiMzk2ZGEwMDg3NmQwYTU1NmVmYWQ3MmI5ZmQyMmU1YWNlOTZjYjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KQEAgLTc4
LDYgKzc4LDcgQEAKICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVj
dG9yQ29jb2EuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQTEFURk9STShNQUND
QVRBTFlTVCkKICNpbXBvcnQgPHBhbC9pb3MvTWFuYWdlZENvbmZpZ3VyYXRpb25Tb2Z0TGluay5o
PgpAQCAtNDU5LDEzICs0NjAsMTMgQEAgYm9vbCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25D
bGllbnQ6OmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXZWJQYWdlUHJveHkmLAogICAgIGlmICgh
bmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBOU011dGFi
bGVBcnJheTxXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKj4gKnJlbW92ZWRJdGVtcyA9IG5pbDsKLSAg
ICBpZiAocmVtb3ZlZC5zaXplKCkpIHsKLSAgICAgICAgcmVtb3ZlZEl0ZW1zID0gW1tbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cmVtb3ZlZC5zaXplKCldIGF1dG9yZWxl
YXNlXTsKLSAgICAgICAgZm9yIChhdXRvJiByZW1vdmVkSXRlbSA6IHJlbW92ZWQpCi0gICAgICAg
ICAgICBbcmVtb3ZlZEl0ZW1zIGFkZE9iamVjdDp3cmFwcGVyKHJlbW92ZWRJdGVtLmdldCgpKV07
CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqPj4g
cmVtb3ZlZEl0ZW1zOworICAgIGlmICghcmVtb3ZlZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVt
b3ZlZEl0ZW1zID0gY3JlYXRlTlNBcnJheShyZW1vdmVkLCBbXSAoYXV0byYgcmVtb3ZlZEl0ZW0p
IHsKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVyKHJlbW92ZWRJdGVtLmdldCgpKTsKKyAgICAg
ICAgfSk7CiAgICAgfQotICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2
aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBiYWNr
Rm9yd2FyZExpc3RJdGVtQWRkZWQ6d3JhcHBlcihhZGRlZCkgcmVtb3ZlZDpyZW1vdmVkSXRlbXNd
OworICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVn
YXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBiYWNrRm9yd2FyZExpc3RJ
dGVtQWRkZWQ6d3JhcHBlcihhZGRlZCkgcmVtb3ZlZDpyZW1vdmVkSXRlbXMuZ2V0KCldOwogICAg
IHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJl
ZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5tbQppbmRleCA4MTNiMTgxMjcwZjUyMGU5MjRlZjRm
NjEyZDgxNTI1ZmQ2ZTYzZjUwLi5lYWVmYjllMWI1MWYyZmM2ZGI2YjM0YzhkMjk5ODE4YmNmZjUz
MzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUv
UmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQ
ZXJmb3JtYW5jZURhdGEubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIlJlbW90ZUxheWVy
VHJlZUhvc3QuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FMYXllci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9UaWxlQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC03Miwx
NiArNzMsMTMgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGE6
OmFwcGVuZEJsYW5rUGl4ZWxDb3VudChCbGFua1BpeGVsQ28KIAogTlNBcnJheSAqUmVtb3RlTGF5
ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhOjpkYXRhKCkKIHsKLSAgICBOU011dGFibGVB
cnJheSogZGF0YUFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Om1fYmxh
bmtQaXhlbENvdW50cy5zaXplKCldOwotICAgIAotICAgIGZvciAoYXV0byBwaXhlbERhdGEgOiBt
X2JsYW5rUGl4ZWxDb3VudHMpIHsKLSAgICAgICAgW2RhdGFBcnJheSBhZGRPYmplY3Q6QFsKKyAg
ICByZXR1cm4gY3JlYXRlTlNBcnJheShtX2JsYW5rUGl4ZWxDb3VudHMsIFtdIChhdXRvJiBwaXhl
bERhdGEpIHsKKyAgICAgICAgcmV0dXJuIEBbCiAgICAgICAgICAgICBAKHBpeGVsRGF0YS5zdGFy
dFRpbWUpLAogICAgICAgICAgICAgKHBpeGVsRGF0YS5ldmVudFR5cGUgPT0gQmxhbmtQaXhlbENv
dW50OjpGaWxsZWQpID8gQCJmaWxsZWQiIDogQCJleHBvc2VkIiwKICAgICAgICAgICAgIEAocGl4
ZWxEYXRhLmJsYW5rUGl4ZWxDb3VudCkKLSAgICAgICAgXV07Ci0gICAgfQotICAgIHJldHVybiBk
YXRhQXJyYXk7CisgICAgICAgIF07CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogc3RhdGlj
IENBTGF5ZXIgKmZpbmRUaWxlR3JpZENvbnRhaW5lckxheWVyKENBTGF5ZXIgKmxheWVyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJvcEludGVyYWN0aW9u
U3RhdGUubW0KaW5kZXggNTg4ZTgzYzk1MmFjOTFmMzE5ZWRlMWQwY2Y4NTM3ZmVmYzcxMDc2Ni4u
ZmY0ZTRmZDE0ZjEyZGNjN2E3MDc1ZjhjM2UyZWUxMDRlYWIwN2ViZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1t
CkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0IDxXZWJDb3Jl
L0RyYWdJdGVtLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ltYWdlLmg+CisjaW1wb3J0IDx3dGYvY29j
b2EvVmVjdG9yQ29jb2EuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKQEAgLTUwLDI0ICs1MSwyMiBAQCBzdGF0aWMgUmV0YWluUHRyPFVJVGFyZ2V0ZWRE
cmFnUHJldmlldz4gY3JlYXRlVGFyZ2V0ZWREcmFnUHJldmlldyhVSUltYWdlICppbWFnZQogICAg
IGlmIChmcmFtZUluUm9vdFZpZXdDb29yZGluYXRlcy5pc0VtcHR5KCkgfHwgIWltYWdlIHx8ICFw
cmV2aWV3Q29udGFpbmVyLndpbmRvdykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBO
U011dGFibGVBcnJheSAqY2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVzID0gW05T
TXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNsaXBwaW5nUmVjdHNJbkZyYW1lQ29vcmRp
bmF0ZXMuc2l6ZSgpXTsKLQogICAgIEZsb2F0UmVjdCBmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0
ZXMgPSBbcm9vdFZpZXcgY29udmVydFJlY3Q6ZnJhbWVJblJvb3RWaWV3Q29vcmRpbmF0ZXMgdG9W
aWV3OnByZXZpZXdDb250YWluZXJdOwogICAgIGlmIChmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0
ZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEZsb2F0U2l6ZSBz
Y2FsaW5nUmF0aW8gPSBmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXMuc2l6ZSgpIC8gZnJhbWVJ
blJvb3RWaWV3Q29vcmRpbmF0ZXMuc2l6ZSgpOwotICAgIGZvciAoYXV0byByZWN0IDogY2xpcHBp
bmdSZWN0c0luRnJhbWVDb29yZGluYXRlcykgeworICAgIGF1dG8gY2xpcHBpbmdSZWN0VmFsdWVz
SW5GcmFtZUNvb3JkaW5hdGVzID0gY3JlYXRlTlNBcnJheShjbGlwcGluZ1JlY3RzSW5GcmFtZUNv
b3JkaW5hdGVzLCBbJl0gKGF1dG8gcmVjdCkgewogICAgICAgICByZWN0LnNjYWxlKHNjYWxpbmdS
YXRpbyk7Ci0gICAgICAgIFtjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgYWRk
T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XV07Ci0gICAgfQorICAgICAgICBy
ZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnJlY3RdOworICAgIH0pOwogCiAgICAgYXV0
byBpbWFnZVZpZXcgPSBhZG9wdE5TKFtbVUlJbWFnZVZpZXcgYWxsb2NdIGluaXRXaXRoSW1hZ2U6
aW1hZ2VdKTsKICAgICBbaW1hZ2VWaWV3IHNldEZyYW1lOmZyYW1lSW5Db250YWluZXJDb29yZGlu
YXRlc107CiAKICAgICBSZXRhaW5QdHI8VUlEcmFnUHJldmlld1BhcmFtZXRlcnM+IHBhcmFtZXRl
cnM7Ci0gICAgaWYgKGNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcy5jb3VudCkK
LSAgICAgICAgcGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSURyYWdQcmV2aWV3UGFyYW1ldGVycyBh
bGxvY10gaW5pdFdpdGhUZXh0TGluZVJlY3RzOmNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29y
ZGluYXRlc10pOworICAgIGlmIChbY2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVz
IGNvdW50XSkKKyAgICAgICAgcGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSURyYWdQcmV2aWV3UGFy
YW1ldGVycyBhbGxvY10gaW5pdFdpdGhUZXh0TGluZVJlY3RzOmNsaXBwaW5nUmVjdFZhbHVlc0lu
RnJhbWVDb29yZGluYXRlcy5nZXQoKV0pOwogICAgIGVsc2UKICAgICAgICAgcGFyYW1ldGVycyA9
IGFkb3B0TlMoW1tVSURyYWdQcmV2aWV3UGFyYW1ldGVycyBhbGxvY10gaW5pdF0pOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFj
dGlvbi5tbQppbmRleCBhMTg4ZTI0YWE5ZGUxNDA3YzcyODhlODlmYmJjYjg2NjYzOTU2ZmU3Li4w
NDZlZTgxZGI2YmJhOTgwOTZhNTk5NjZkNTdlMzhiMTBhZGIxYzEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0K
QEAgLTE2NzQsMTcgKzE2NzQsMTQgQEAgLSAodm9pZClfdXBkYXRlVGFwSGlnaGxpZ2h0CiAgICAg
aWYgKCFbX2hpZ2hsaWdodFZpZXcgc3VwZXJ2aWV3XSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
ewotICAgICAgICBSZXRhaW5QdHI8VUlDb2xvcj4gaGlnaGxpZ2h0VUlLaXRDb2xvciA9IGFkb3B0
TlMoW1tVSUNvbG9yIGFsbG9jXSBpbml0V2l0aENHQ29sb3I6Y2FjaGVkQ0dDb2xvcihfdGFwSGln
aGxpZ2h0SW5mb3JtYXRpb24uY29sb3IpXSk7Ci0gICAgICAgIFtfaGlnaGxpZ2h0VmlldyBzZXRD
b2xvcjpoaWdobGlnaHRVSUtpdENvbG9yLmdldCgpXTsKLSAgICB9CisgICAgW19oaWdobGlnaHRW
aWV3IHNldENvbG9yOmFkb3B0TlMoW1tVSUNvbG9yIGFsbG9jXSBpbml0V2l0aENHQ29sb3I6Y2Fj
aGVkQ0dDb2xvcihfdGFwSGlnaGxpZ2h0SW5mb3JtYXRpb24uY29sb3IpXSkuZ2V0KCldOwogCiAg
ICAgQ0dGbG9hdCBzZWxmU2NhbGUgPSBzZWxmLmxheWVyLnRyYW5zZm9ybS5tMTE7CiAgICAgYm9v
bCBhbGxIaWdobGlnaHRSZWN0c0FyZVJlY3RpbGluZWFyID0gdHJ1ZTsKICAgICBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvciA9IF9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogICAgIGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpGbG9hdFF1YWQ+JiBoaWdobGlnaHRlZFF1YWRzID0gX3RhcEhpZ2hsaWdo
dEluZm9ybWF0aW9uLnF1YWRzOwotICAgIGNvbnN0IHNpemVfdCBxdWFkQ291bnQgPSBoaWdobGln
aHRlZFF1YWRzLnNpemUoKTsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJlY3RzID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnN0YXRpY19j
YXN0PGNvbnN0IE5TVUludGVnZXI+KHF1YWRDb3VudCldKTsKKyAgICBOU1VJbnRlZ2VyIHF1YWRD
b3VudCA9IGhpZ2hsaWdodGVkUXVhZHMuc2l6ZSgpOworICAgIGF1dG8gcmVjdHMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cXVhZENvdW50XSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkQ291bnQ7ICsraSkgewogICAgICAgICBjb25z
dCBXZWJDb3JlOjpGbG9hdFF1YWQmIHF1YWQgPSBoaWdobGlnaHRlZFF1YWRzW2ldOwogICAgICAg
ICBpZiAocXVhZC5pc1JlY3RpbGluZWFyKCkpIHsKQEAgLTE2OTUsNyArMTY5Miw3IEBAIC0gKHZv
aWQpX3VwZGF0ZVRhcEhpZ2hsaWdodAogICAgICAgICAgICAgW3JlY3RzIGFkZE9iamVjdDpbTlNW
YWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6cGl4ZWxBbGlnbmVkUmVjdF1dOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgYWxsSGlnaGxpZ2h0UmVjdHNBcmVSZWN0aWxpbmVhciA9IGZhbHNlOwot
ICAgICAgICAgICAgcmVjdHMuY2xlYXIoKTsKKyAgICAgICAgICAgIHJlY3RzID0gbmlsOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzAzLDcgKzE3MDAsNyBAQCAt
ICh2b2lkKV91cGRhdGVUYXBIaWdobGlnaHQKICAgICBpZiAoYWxsSGlnaGxpZ2h0UmVjdHNBcmVS
ZWN0aWxpbmVhcikKICAgICAgICAgW19oaWdobGlnaHRWaWV3IHNldEZyYW1lczpyZWN0cy5nZXQo
KSBib3VuZGFyeVJlY3Q6X3BhZ2UtPmV4cG9zZWRDb250ZW50UmVjdCgpXTsKICAgICBlbHNlIHsK
LSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBxdWFkcyA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzdGF0aWNfY2FzdDxjb25zdCBOU1VJ
bnRlZ2VyPihxdWFkQ291bnQpXSk7CisgICAgICAgIGF1dG8gcXVhZHMgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cXVhZENvdW50ICogNF0pOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRDb3VudDsgKytpKSB7CiAgICAgICAgICAg
ICBXZWJDb3JlOjpGbG9hdFF1YWQgcXVhZCA9IGhpZ2hsaWdodGVkUXVhZHNbaV07CiAgICAgICAg
ICAgICBxdWFkLnNjYWxlKHNlbGZTY2FsZSk7CkBAIC0xNzE3LDExICsxNzE0LDEyIEBAIC0gKHZv
aWQpX3VwZGF0ZVRhcEhpZ2hsaWdodAogICAgIH0KIAogICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gYm9yZGVyUmFkaWkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRX
aXRoQ2FwYWNpdHk6NF0pOwotICAgIFtib3JkZXJSYWRpaSBhZGRPYmplY3Q6bnNTaXplRm9yVGFw
SGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi50b3BMZWZ0UmFk
aXVzLCBzZWxmU2NhbGUpXTsKLSAgICBbYm9yZGVyUmFkaWkgYWRkT2JqZWN0Om5zU2l6ZUZvclRh
cEhpZ2hsaWdodEJvcmRlclJhZGl1cyhfdGFwSGlnaGxpZ2h0SW5mb3JtYXRpb24udG9wUmlnaHRS
YWRpdXMsIHNlbGZTY2FsZSldOwotICAgIFtib3JkZXJSYWRpaSBhZGRPYmplY3Q6bnNTaXplRm9y
VGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi5ib3R0b21M
ZWZ0UmFkaXVzLCBzZWxmU2NhbGUpXTsKLSAgICBbYm9yZGVyUmFkaWkgYWRkT2JqZWN0Om5zU2l6
ZUZvclRhcEhpZ2hsaWdodEJvcmRlclJhZGl1cyhfdGFwSGlnaGxpZ2h0SW5mb3JtYXRpb24uYm90
dG9tUmlnaHRSYWRpdXMsIHNlbGZTY2FsZSldOwotICAgIFtfaGlnaGxpZ2h0VmlldyBzZXRDb3Ju
ZXJSYWRpaTpib3JkZXJSYWRpaS5nZXQoKV07CisgICAgW19oaWdobGlnaHRWaWV3IHNldENvcm5l
clJhZGlpOkBbCisgICAgICAgIG5zU2l6ZUZvclRhcEhpZ2hsaWdodEJvcmRlclJhZGl1cyhfdGFw
SGlnaGxpZ2h0SW5mb3JtYXRpb24udG9wTGVmdFJhZGl1cywgc2VsZlNjYWxlKSwKKyAgICAgICAg
bnNTaXplRm9yVGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlv
bi50b3BSaWdodFJhZGl1cywgc2VsZlNjYWxlKSwKKyAgICAgICAgbnNTaXplRm9yVGFwSGlnaGxp
Z2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi5ib3R0b21MZWZ0UmFkaXVz
LCBzZWxmU2NhbGUpLAorICAgICAgICBuc1NpemVGb3JUYXBIaWdobGlnaHRCb3JkZXJSYWRpdXMo
X3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLmJvdHRvbVJpZ2h0UmFkaXVzLCBzZWxmU2NhbGUpLAor
ICAgIF1dOwogfQogCiAtICh2b2lkKV9zaG93VGFwSGlnaGxpZ2h0CkBAIC0yNTY0LDE0ICsyNTYy
LDExIEBAIC0gKEJPT0wpdGV4dEludGVyYWN0aW9uR2VzdHVyZTooVUlXS0dlc3R1cmVUeXBlKWdl
c3R1cmUgc2hvdWxkQmVnaW5BdFBvaW50OihDR1BvCiAKIC0gKE5TQXJyYXkgKil3ZWJTZWxlY3Rp
b25SZWN0c0ZvclNlbGVjdGlvblJlY3RzOihjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9u
UmVjdD4mKXNlbGVjdGlvblJlY3RzCiB7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IHNlbGVjdGlvblJl
Y3RzLnNpemUoKTsKLSAgICBpZiAoIXNpemUpCisgICAgaWYgKHNlbGVjdGlvblJlY3RzLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIE5TTXV0YWJsZUFycmF5ICp3ZWJSZWN0
cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvcmU6OlNl
bGVjdGlvblJlY3QmIGNvcmVSZWN0ID0gc2VsZWN0aW9uUmVjdHNbaV07Ci0gICAgICAgIFdlYlNl
bGVjdGlvblJlY3QgKndlYlJlY3QgPSBbV2ViU2VsZWN0aW9uUmVjdCBzZWxlY3Rpb25SZWN0XTsK
KyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShzZWxlY3Rpb25SZWN0cywgW10gKGF1dG8mIGNvcmVS
ZWN0KSB7CisgICAgICAgIGF1dG8gd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNlbGVjdGlv
blJlY3RdOwogICAgICAgICB3ZWJSZWN0LnJlY3QgPSBjb3JlUmVjdC5yZWN0KCk7CiAgICAgICAg
IHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGNvcmVSZWN0LmRpcmVjdGlvbigpID09IFdlYkNv
cmU6OlRleHREaXJlY3Rpb246OkxUUiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDog
V0tXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAgICAgICAgIHdlYlJlY3QuaXNMaW5lQnJl
YWsgPSBjb3JlUmVjdC5pc0xpbmVCcmVhaygpOwpAQCAtMjU4MSwxMCArMjU3Niw4IEBAIC0gKE5T
QXJyYXkgKil3ZWJTZWxlY3Rpb25SZWN0c0ZvclNlbGVjdGlvblJlY3RzOihjb25zdCBWZWN0b3I8
V2ViQ29yZTo6U2VsZWN0aW9uCiAgICAgICAgIHdlYlJlY3QuY29udGFpbnNFbmQgPSBjb3JlUmVj
dC5jb250YWluc0VuZCgpOwogICAgICAgICB3ZWJSZWN0LmlzSW5GaXhlZFBvc2l0aW9uID0gY29y
ZVJlY3QuaXNJbkZpeGVkUG9zaXRpb24oKTsKICAgICAgICAgd2ViUmVjdC5pc0hvcml6b250YWwg
PSBjb3JlUmVjdC5pc0hvcml6b250YWwoKTsKLSAgICAgICAgW3dlYlJlY3RzIGFkZE9iamVjdDp3
ZWJSZWN0XTsKLSAgICB9Ci0KLSAgICByZXR1cm4gd2ViUmVjdHM7CisgICAgICAgIHJldHVybiB3
ZWJSZWN0OworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TQXJyYXkgKil3ZWJTZWxl
Y3Rpb25SZWN0cwpAQCAtNDQ1NywxNCArNDQ1MCwxMSBAQCAtICh2b2lkKXJlcGxhY2VSYW5nZToo
VUlUZXh0UmFuZ2UgKilyYW5nZSB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7CiB9CiAKLXN0
YXRpYyBOU0FycmF5PFdLVGV4dFNlbGVjdGlvblJlY3QgKj4gKndrVGV4dFNlbGVjdGlvblJlY3Rz
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYgY29yZVJlY3RzKQorc3RhdGlj
IE5TQXJyYXk8V0tUZXh0U2VsZWN0aW9uUmVjdCAqPiAqd2tUZXh0U2VsZWN0aW9uUmVjdHMoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiByZWN0cykKIHsKLSAgICBhdXRvIHJl
Y3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNv
cmVSZWN0cy5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIGNvcmVSZWN0IDogY29yZVJlY3RzKSB7
Ci0gICAgICAgIGF1dG8gd2tUZXh0U2VsZWN0aW9uUmVjdCA9IGFkb3B0TlMoW1tXS1RleHRTZWxl
Y3Rpb25SZWN0IGFsbG9jXSBpbml0V2l0aFNlbGVjdGlvblJlY3Q6Y29yZVJlY3RdKTsKLSAgICAg
ICAgW3JlY3RzIGFkZE9iamVjdDp3a1RleHRTZWxlY3Rpb25SZWN0LmdldCgpXTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHJlY3RzLmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXko
cmVjdHMsIFtdIChhdXRvJiByZWN0KSB7CisgICAgICAgIHJldHVybiBhZG9wdE5TKFtbV0tUZXh0
U2VsZWN0aW9uUmVjdCBhbGxvY10gaW5pdFdpdGhTZWxlY3Rpb25SZWN0OnJlY3RdKTsKKyAgICB9
KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChVSVRleHRSYW5nZSAqKXNlbGVjdGVkVGV4dFJhbmdl
CkBAIC03NTgyLDE3ICs3NTcyLDE1IEBAIHN0YXRpYyBSZXRhaW5QdHI8VUlUYXJnZXRlZFByZXZp
ZXc+IGNyZWF0ZVRhcmdldGVkUHJldmlldyhVSUltYWdlICppbWFnZSwgVUlWaWV3CiAgICAgaWYg
KGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBu
aWw7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2NhbGluZ1JhdGlvID0gZnJhbWVJbkNvbnRh
aW5lckNvb3JkaW5hdGVzLnNpemUoKSAvIGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVzLnNpemUo
KTsKLSAgICBOU011dGFibGVBcnJheSAqY2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5h
dGVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNsaXBwaW5nUmVjdHNJbkZy
YW1lQ29vcmRpbmF0ZXMuc2l6ZSgpXTsKLQotICAgIGZvciAoYXV0byByZWN0IDogY2xpcHBpbmdS
ZWN0c0luRnJhbWVDb29yZGluYXRlcykgeworICAgIGF1dG8gc2NhbGluZ1JhdGlvID0gZnJhbWVJ
bkNvbnRhaW5lckNvb3JkaW5hdGVzLnNpemUoKSAvIGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVz
LnNpemUoKTsKKyAgICBhdXRvIGNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcyA9
IGNyZWF0ZU5TQXJyYXkoY2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcywgWyZdIChXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCkgewogICAgICAgICByZWN0LnNjYWxlKHNjYWxpbmdSYXRpbyk7
Ci0gICAgICAgIFtjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgYWRkT2JqZWN0
OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XV07Ci0gICAgfQorICAgICAgICByZXR1cm4g
W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnJlY3RdOworICAgIH0pOwogCiAgICAgUmV0YWluUHRy
PFVJUHJldmlld1BhcmFtZXRlcnM+IHBhcmFtZXRlcnM7Ci0gICAgaWYgKGNsaXBwaW5nUmVjdFZh
bHVlc0luRnJhbWVDb29yZGluYXRlcy5jb3VudCkKLSAgICAgICAgcGFyYW1ldGVycyA9IGFkb3B0
TlMoW1tVSVByZXZpZXdQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFRleHRMaW5lUmVjdHM6Y2xp
cHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVzXSk7CisgICAgaWYgKFtjbGlwcGluZ1Jl
Y3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgY291bnRdKQorICAgICAgICBwYXJhbWV0ZXJzID0g
YWRvcHROUyhbW1VJUHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVGV4dExpbmVSZWN0
czpjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMuZ2V0KCldKTsKICAgICBlbHNl
CiAgICAgICAgIHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbVUlQcmV2aWV3UGFyYW1ldGVycyBhbGxv
Y10gaW5pdF0pOwogCkBAIC05NjMzLDIzICs5NjIxLDE1IEBAIC0gKFVJSW1hZ2UgKilfcHJlc2Vu
dGF0aW9uU25hcHNob3RGb3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6KFVJUHJldmlld0l0ZW1Db250
cm9sCiAKIC0gKE5TQXJyYXkgKilfcHJlc2VudGF0aW9uUmVjdHNGb3JQcmV2aWV3SXRlbUNvbnRy
b2xsZXI6KFVJUHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgogewotICAgIFJldGFp
blB0cjxOU011dGFibGVBcnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0XSk7Ci0KICAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGlj
YXRvci5jb250ZW50SW1hZ2UpIHsKLSAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4g
PSBfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLnRleHRCb3VuZGluZ1JlY3RJblJv
b3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICAgICAgZm9yIChXZWJDb3JlOjpGbG9h
dFJlY3QmIHJlY3QgOiBfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLnRleHRSZWN0
c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKLSAgICAgICAgICAgIENHUmVjdCBjZ1JlY3Qg
PSByZWN0OwotICAgICAgICAgICAgY2dSZWN0Lm9yaWdpbi54ICs9IG9yaWdpbi54KCk7Ci0gICAg
ICAgICAgICBjZ1JlY3Qub3JpZ2luLnkgKz0gb3JpZ2luLnkoKTsKLSAgICAgICAgICAgIFtyZWN0
QXJyYXkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpjZ1JlY3RdXTsKLSAgICAg
ICAgfQorICAgICAgICBhdXRvIG9yaWdpbiA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRp
Y2F0b3IudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5sb2NhdGlvbigpOwor
ICAgICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5k
aWNhdG9yLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMsIFsmXSAoQ0dSZWN0IHJl
Y3QpIHsKKyAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6Q0dSZWN0
T2Zmc2V0KHJlY3QsIG9yaWdpbi54KCksIG9yaWdpbi55KCkpXTsKKyAgICAgICAgfSkuYXV0b3Jl
bGVhc2UoKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb25zdCBmbG9hdCBtYXJnaW5JblB4ID0g
NCAqIF9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgICAgICBDR1JlY3QgY2dSZWN0ID0g
Q0dSZWN0SW5zZXQoX3Bvc2l0aW9uSW5mb3JtYXRpb24uYm91bmRzLCAtbWFyZ2luSW5QeCwgLW1h
cmdpbkluUHgpOwotICAgICAgICBbcmVjdEFycmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdp
dGhDR1JlY3Q6Y2dSZWN0XV07CisgICAgICAgIGZsb2F0IG1hcmdpbkluUHggPSA0ICogX3BhZ2Ut
PmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIHJldHVybiBAW1tOU1ZhbHVlIHZhbHVlV2l0
aENHUmVjdDpDR1JlY3RJbnNldChfcG9zaXRpb25JbmZvcm1hdGlvbi5ib3VuZHMsIC1tYXJnaW5J
blB4LCAtbWFyZ2luSW5QeCldXTsKICAgICB9Ci0KLSAgICByZXR1cm4gcmVjdEFycmF5LmF1dG9y
ZWxlYXNlKCk7CiB9CiAKIC0gKHZvaWQpX3ByZXZpZXdJdGVtQ29udHJvbGxlckRpZENhbmNlbFBy
ZXZpZXc6KFVJUHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQubW0KaW5kZXggMzZhYmRm
ZDI0NjVlNGRmZDUxMDI0M2RmN2Y5YTc4YzEwYjkxYTc4Yi4uYzhhMDZhMWM3ZjFiODNlMzYyNTk2
YzUzN2Y4Y2E4ZjU4ZDJjYzMzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9t
YWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tCkBAIC0yNzYsMTkgKzI3NiwxNyBAQCAtICh2b2lkKWRp
ZEZpbmRTdHJpbmdNYXRjaGVzV2l0aFJlY3RzOihjb25zdCBWZWN0b3I8VmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+PiYpcgogICAgIGlmIChfZmluZFJlcGx5Q2FsbGJhY2tzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byByZXBseUNhbGxiYWNrID0gX2ZpbmRSZXBseUNhbGxi
YWNrcy50YWtlRmlyc3QoKTsKLSAgICBhdXRvIG1hdGNoQ291bnQgPSByZWN0c0Zvck1hdGNoZXMu
c2l6ZSgpOwotICAgIGF1dG8gbWF0Y2hPYmplY3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om1hdGNoQ291bnRdKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbWF0Y2hDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU0FycmF5
PiBuc01hdGNoUmVjdHM7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIGF1dG8gbWF0Y2hP
YmplY3RzID0gY3JlYXRlTlNBcnJheShyZWN0c0Zvck1hdGNoZXMsIFsmXSAoYXV0byYgcmVjdHMp
IHsKKyAgICAgICAgUmV0YWluUHRyPE5TQXJyYXk+IHJlY3RzQXJyYXk7CiAgICAgICAgIGlmIChf
dXNlUGxhdGZvcm1GaW5kVUkpCi0gICAgICAgICAgICBuc01hdGNoUmVjdHMgPSBjcmVhdGVOU0Fy
cmF5KHJlY3RzRm9yTWF0Y2hlc1tpXSk7CisgICAgICAgICAgICByZWN0c0FycmF5ID0gY3JlYXRl
TlNBcnJheShyZWN0cyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5zTWF0Y2hSZWN0cyA9
IEBbXTsKLSAgICAgICAgW21hdGNoT2JqZWN0cyBhZGRPYmplY3Q6YWRvcHROUyhbW1dLVGV4dEZp
bmRlck1hdGNoIGFsbG9jXSBpbml0V2l0aENsaWVudDpzZWxmIHZpZXc6X3ZpZXcgaW5kZXg6aSBy
ZWN0czpuc01hdGNoUmVjdHMuZ2V0KCldKS5nZXQoKV07Ci0gICAgfQorICAgICAgICAgICAgcmVj
dHNBcnJheSA9IEBbXTsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXS1RleHRGaW5kZXJNYXRj
aCBhbGxvY10gaW5pdFdpdGhDbGllbnQ6c2VsZiB2aWV3Ol92aWV3IGluZGV4OmluZGV4KysgcmVj
dHM6cmVjdHNBcnJheS5nZXQoKV0pOworICAgIH0pOwogCi0gICAgcmVwbHlDYWxsYmFjayhtYXRj
aE9iamVjdHMuZ2V0KCksIGRpZFdyYXBBcm91bmQpOworICAgIF9maW5kUmVwbHlDYWxsYmFja3Mu
dGFrZUZpcnN0KCkobWF0Y2hPYmplY3RzLmdldCgpLCBkaWRXcmFwQXJvdW5kKTsKIH0KIAogLSAo
dm9pZClkaWRHZXRJbWFnZUZvck1hdGNoUmVzdWx0OihXZWJLaXQ6OldlYkltYWdlICopaW1hZ2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRJbnB1dFdpbmRv
d0NvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tUZXh0SW5wdXRX
aW5kb3dDb250cm9sbGVyLm1tCmluZGV4IGY2NDhmOTQwNzM1ZTY1YWY5OTc3MTFjNWNhNTkyODI2
N2JmNTk3Y2IuLjM1Mjc1ZGY4ZmQ3Y2NjNDA1YzY3MzJkMWM4OGZjMTk0N2NlMWE2MmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRJbnB1dFdpbmRvd0NvbnRy
b2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dElucHV0V2lu
ZG93Q29udHJvbGxlci5tbQpAQCAtNDAsMTAgKzQwLDcgQEAgQGltcGxlbWVudGF0aW9uIFdLVGV4
dElucHV0VmlldwogLSAoTlNBcnJheSAqKXZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHQKIHsK
ICAgICAvLyBMZXQgVFNNIGtub3cgdGhhdCBhIGJvdHRvbSBpbnB1dCB3aW5kb3cgd291bGQgYmUg
Y3JlYXRlZCBmb3IgbWFya2VkIHRleHQuCi0gICAgTlNBcnJheSAqcmVndWxhckF0dHJpYnV0ZXMg
PSBbc3VwZXIgdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dF07Ci0gICAgTlNNdXRhYmxlQXJy
YXkgKmZsb2F0aW5nV2luZG93QXR0cmlidXRlcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhB
cnJheTpyZWd1bGFyQXR0cmlidXRlc107Ci0gICAgW2Zsb2F0aW5nV2luZG93QXR0cmlidXRlcyBh
ZGRPYmplY3Q6QCJfX05TVXNlc0Zsb2F0aW5nSW5wdXRXaW5kb3ciXTsKLSAgICByZXR1cm4gZmxv
YXRpbmdXaW5kb3dBdHRyaWJ1dGVzOworICAgIHJldHVybiBbW3N1cGVyIHZhbGlkQXR0cmlidXRl
c0Zvck1hcmtlZFRleHRdIGFycmF5QnlBZGRpbmdPYmplY3Q6QCJfX05TVXNlc0Zsb2F0aW5nSW5w
dXRXaW5kb3ciXTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5GcmFtZS5tbSBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQ
cm9jZXNzUGx1Z0luRnJhbWUubW0KaW5kZXggYjk2YmI4OWJhMGFiMmZlZDM2NWE3ZGYwYzcxZTc2
ZDUyOTliMDkzNS4uMDNjMjdjNDU1M2RjZjA4MzQxNzQ3MTJjZDczNjM5ZjAwYzZmODNmOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2Nv
YS9XS1dlYlByb2Nlc3NQbHVnSW5GcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lLm1tCkBA
IC00MSw2ICs0MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ludFBvaW50Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0xpbmtJY29uQ29sbGVjdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xpbmtJY29uVHlw
ZS5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIEBpbXBsZW1lbnRhdGlv
biBXS1dlYlByb2Nlc3NQbHVnSW5GcmFtZSB7CiAgICAgQVBJOjpPYmplY3RTdG9yYWdlPFdlYktp
dDo6V2ViRnJhbWU+IF9mcmFtZTsKQEAgLTExMSwxNiArMTEyLDE0IEBAIC0gKF9XS0ZyYW1lSGFu
ZGxlICopaGFuZGxlCiAKIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gY29sbGVjdEljb25zKFdl
YkNvcmU6OkZyYW1lKiBmcmFtZSwgT3B0aW9uU2V0PFdlYkNvcmU6OkxpbmtJY29uVHlwZT4gaWNv
blR5cGVzKQogewotICAgIGF1dG8gcmVzdWx0ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XSk7Ci0KLSAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgaWYgKGF1dG8qIGRvY3Vt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgaWNvbiA6
IFdlYkNvcmU6OkxpbmtJY29uQ29sbGVjdG9yKCpkb2N1bWVudCkuaWNvbnNPZlR5cGVzKGljb25U
eXBlcykpCi0gICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6KE5TVVJMICopaWNvbi51
cmxdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAg
ICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gQFtdOworICAgIGF1dG8gZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gQFtd
OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFdlYkNvcmU6OkxpbmtJY29uQ29sbGVjdG9yKCpk
b2N1bWVudCkuaWNvbnNPZlR5cGVzKGljb25UeXBlcyksIFtdIChhdXRvJiBpY29uKSAtPiBOU1VS
TCAqIHsKKyAgICAgICAgcmV0dXJuIGljb24udXJsOworICAgIH0pOwogfQogCiAtIChOU0FycmF5
ICopYXBwbGVUb3VjaEljb25VUkxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4
dENvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0KaW5k
ZXggYjlhYzYxMzA0MDY1ZGI2YjY1MGViNjE0NzAyZjM3MGRjYmM5YzQ2NC4uMmNmNGFiNWIyN2Zm
ZTQ0NTkxNGQxZjFmNzhiODY0YzVjNjRmNDcyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3Nl
ckNvbnRleHRDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJv
bGxlci5tbQpAQCAtNTMyLDkgKzUzMiw5IEBAIC0gKHZvaWQpX3NldEZvcm1EZWxlZ2F0ZTooaWQg
PFdLV2ViUHJvY2Vzc1BsdWdJbkZvcm1EZWxlZ2F0ZVByaXZhdGU+KWZvcm1EZWxlZ2F0CiAgICAg
ICAgICAgICBpZiAoIVtmb3JtRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihf
d2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjpkaWRBc3NvY2lhdGVGb3Jt
Q29udHJvbHM6KV0pCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBhdXRv
IGNvbnRyb2xzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5OmVsZW1lbnRzLnNpemUoKV0pOwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlbGVt
ZW50IDogZWxlbWVudHMpCi0gICAgICAgICAgICAgICAgW2NvbnRyb2xzIGFkZE9iamVjdDp3cmFw
cGVyKCpXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoZWxlbWVu
dC5nZXQoKSkpXTsKKyAgICAgICAgICAgIGF1dG8gY29udHJvbHMgPSBjcmVhdGVOU0FycmF5KGVs
ZW1lbnRzLCBbXSAoYXV0byYgZWxlbWVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiB3cmFw
cGVyKCpXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoZWxlbWVu
dC5nZXQoKSkpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm4gW2Zvcm1EZWxl
Z2F0ZSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjptX2NvbnRyb2xs
ZXIgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzOmNvbnRyb2xzLmdldCgpXTsKICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXll
clRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1t
CmluZGV4IDFkZWYwOTQwYjFkMmRmNDdkYWE2NjU2ZDFiMjZlYmZkYjg3ZjQ4OGUuLjc2MTUzMjBi
ZTNmYjE0Mjc5M2IyZWM2YWVmMmEyYzA5MTUxOTI5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9u
UmVtb3RlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxh
eWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCkBAIC0zOCw2ICszOCw3IEBACiAj
aW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KICNpbXBvcnQgPHd0Zi9CbG9j
a09iakNFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3
dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
IAogc3RhdGljIE1vbm90b25pY1RpbWUgbWVkaWFUaW1lVG9DdXJyZW50VGltZShDRlRpbWVJbnRl
cnZhbCB0KQpAQCAtNzEzLDggKzcxNCw3IEBAIHN0YXRpYyB2b2lkIGFkZEFuaW1hdGlvblRvTGF5
ZXIoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvCiAgICAg
UmV0YWluUHRyPENBUHJvcGVydHlBbmltYXRpb24+IGNhQW5pbWF0aW9uOwogICAgIHN3aXRjaCAo
cHJvcGVydGllcy5hbmltYXRpb25UeXBlKSB7CiAgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9u
OjpCYXNpYzogewotICAgICAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gYmFzaWNBbmlt
YXRpb247Ci0gICAgICAgIGJhc2ljQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0
aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsKKyAgICAgICAgYXV0byBiYXNpY0Fu
aW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOnByb3BlcnRp
ZXMua2V5UGF0aF07CiAgICAgICAgIAogICAgICAgICBpZiAocHJvcGVydGllcy5rZXlWYWx1ZXMu
c2l6ZSgpID4gMSkgewogICAgICAgICAgICAgW2Jhc2ljQW5pbWF0aW9uIHNldEZyb21WYWx1ZTph
bmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKHByb3BlcnRpZXMua2V5VmFsdWVzWzBdKV07
CkBAIC03MjgsMzkgKzcyOCwzMSBAQCBzdGF0aWMgdm9pZCBhZGRBbmltYXRpb25Ub0xheWVyKENB
TGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIbwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpLZXlmcmFtZTogewot
ICAgICAgICBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltYXRpb247
Ci0gICAgICAgIGtleWZyYW1lQW5pbWF0aW9uID0gW0NBS2V5ZnJhbWVBbmltYXRpb24gYW5pbWF0
aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsKKyAgICAgICAgYXV0byBrZXlmcmFt
ZUFuaW1hdGlvbiA9IFtDQUtleWZyYW1lQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOnBy
b3BlcnRpZXMua2V5UGF0aF07CiAKICAgICAgICAgaWYgKHByb3BlcnRpZXMua2V5VmFsdWVzLnNp
emUoKSkgewotICAgICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBrZXlmcmFtZXMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cHJvcGVy
dGllcy5rZXlWYWx1ZXMuc2l6ZSgpXSk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZh
bHVlIDogcHJvcGVydGllcy5rZXlWYWx1ZXMpCi0gICAgICAgICAgICAgICAgW2tleWZyYW1lcyBh
ZGRPYmplY3Q6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZSh2YWx1ZSldOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBba2V5ZnJhbWVBbmltYXRpb24gc2V0VmFsdWVzOmtleWZyYW1l
cy5nZXQoKV07CisgICAgICAgICAgICBba2V5ZnJhbWVBbmltYXRpb24gc2V0VmFsdWVzOmNyZWF0
ZU5TQXJyYXkocHJvcGVydGllcy5rZXlWYWx1ZXMsIFtdIChhdXRvJiB2YWx1ZSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBhbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKHZhbHVlKTsK
KyAgICAgICAgICAgIH0pLmdldCgpXTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChwcm9wZXJ0
aWVzLmtleVRpbWVzLnNpemUoKSkgewotICAgICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFy
cmF5PiBrZXlUaW1lcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTpwcm9wZXJ0aWVzLmtleVRpbWVzLnNpemUoKV0pOwotICAgICAgICAgICAgZm9yIChh
dXRvIGtleVRpbWUgOiBwcm9wZXJ0aWVzLmtleVRpbWVzKQotICAgICAgICAgICAgICAgIFtrZXlU
aW1lcyBhZGRPYmplY3Q6QChrZXlUaW1lKV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFtr
ZXlmcmFtZUFuaW1hdGlvbiBzZXRLZXlUaW1lczprZXlUaW1lcy5nZXQoKV07CisgICAgICAgICAg
ICBba2V5ZnJhbWVBbmltYXRpb24gc2V0S2V5VGltZXM6Y3JlYXRlTlNBcnJheShwcm9wZXJ0aWVz
LmtleVRpbWVzLCBbXSAoYXV0byYgdGltZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBAKHRp
bWUpOworICAgICAgICAgICAgfSkuZ2V0KCldOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBy
b3BlcnRpZXMudGltaW5nRnVuY3Rpb25zLnNpemUoKSkgewotICAgICAgICAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiB0aW1pbmdGdW5jdGlvbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cHJvcGVydGllcy50aW1pbmdGdW5jdGlvbnMuc2l6
ZSgpXSk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRpbWluZ0Z1bmN0aW9uIDogcHJv
cGVydGllcy50aW1pbmdGdW5jdGlvbnMpCi0gICAgICAgICAgICAgICAgW3RpbWluZ0Z1bmN0aW9u
cyBhZGRPYmplY3Q6dG9DQU1lZGlhVGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24uZ2V0KCks
IHByb3BlcnRpZXMucmV2ZXJzZVRpbWluZ0Z1bmN0aW9ucyldOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBba2V5ZnJhbWVBbmltYXRpb24gc2V0VGltaW5nRnVuY3Rpb25zOnRpbWluZ0Z1bmN0
aW9ucy5nZXQoKV07CisgICAgICAgICAgICBba2V5ZnJhbWVBbmltYXRpb24gc2V0VGltaW5nRnVu
Y3Rpb25zOmNyZWF0ZU5TQXJyYXkocHJvcGVydGllcy50aW1pbmdGdW5jdGlvbnMsIFsmXSAoYXV0
byYgZnVuY3Rpb24pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9DQU1lZGlhVGltaW5nRnVu
Y3Rpb24oZnVuY3Rpb24uZ2V0KCksIHByb3BlcnRpZXMucmV2ZXJzZVRpbWluZ0Z1bmN0aW9ucyk7
CisgICAgICAgICAgICB9KS5nZXQoKV07CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNh
QW5pbWF0aW9uID0ga2V5ZnJhbWVBbmltYXRpb247CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OlNwcmluZzogewotICAgICAgICBSZXRhaW5QdHI8
Q0FTcHJpbmdBbmltYXRpb24+IHNwcmluZ0FuaW1hdGlvbjsKLSAgICAgICAgc3ByaW5nQW5pbWF0
aW9uID0gW0NBU3ByaW5nQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOnByb3BlcnRpZXMu
a2V5UGF0aF07CisgICAgICAgIGF1dG8gc3ByaW5nQW5pbWF0aW9uID0gW0NBU3ByaW5nQW5pbWF0
aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOnByb3BlcnRpZXMua2V5UGF0aF07CiAgICAgICAgIAog
ICAgICAgICBpZiAocHJvcGVydGllcy5rZXlWYWx1ZXMuc2l6ZSgpID4gMSkgewogICAgICAgICAg
ICAgW3NwcmluZ0FuaW1hdGlvbiBzZXRGcm9tVmFsdWU6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJh
bWVWYWx1ZShwcm9wZXJ0aWVzLmtleVZhbHVlc1swXSldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RN
YWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmls
aXR5V2ViUGFnZU9iamVjdE1hYy5tbQppbmRleCBhMDlmZjYxMzdhOThiNDAzYTUwNjY5OTUzODY2
ZDczYzBmNjYyMTM4Li4yNjI3NWQ3YjY3YjU5YWQ5OGViZWZlYmVlYjgwMjA5MzFkMzg5OThlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3Np
YmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQpAQCAtNDcsNiAr
NDcsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KICNpbXBvcnQgPFdlYkNvcmUv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29j
b2EvTlNBY2Nlc3NpYmlsaXR5U1BJLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2Eu
aD4KIAogbmFtZXNwYWNlIGF4ID0gV2ViQ29yZTo6QWNjZXNzaWJpbGl0eTsKIApAQCAtOTcsMTUg
Kzk4LDE1IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogI2VuZGlmCiAK
ICAgICBpZCBuYW1lcyA9IGF4OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8UmV0YWluUHRy
PGlkPj4oW1BST1RFQ1RFRF9TRUxGXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKLSAgICAgICAgTlNN
dXRhYmxlQXJyYXkgKm5hbWVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICAgICAgaWYg
KCFwcm90ZWN0ZWRTZWxmLT5tX3BhZ2UpCi0gICAgICAgICAgICByZXR1cm4gbmFtZXM7CisgICAg
ICAgIGF1dG8gcGFnZSA9IHByb3RlY3RlZFNlbGYtPm1fcGFnZTsKKyAgICAgICAgaWYgKCFwYWdl
KQorICAgICAgICAgICAgcmV0dXJuIEBbXTsKIAotICAgICAgICBpZiAoYXV0byogY29yZVBhZ2Ug
PSBwcm90ZWN0ZWRTZWxmLT5tX3BhZ2UtPmNvcmVQYWdlKCkpIHsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgbmFtZSA6IGNvcmVQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyh0cnVlKSkKLSAgICAgICAgICAgICAgICBbbmFtZXMgYWRk
T2JqZWN0OihOU1N0cmluZyAqKW5hbWVdOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuYW1l
czsKKyAgICAgICAgYXV0byBjb3JlUGFnZSA9IHBhZ2UtPmNvcmVQYWdlKCk7CisgICAgICAgIGlm
ICghY29yZVBhZ2UpCisgICAgICAgICAgICByZXR1cm4gQFtdOworCisgICAgICAgIHJldHVybiBj
cmVhdGVOU0FycmF5KGNvcmVQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5jb3B5QWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyh0cnVlKSk7CiAgICAgfSkuYXV0b3JlbGVhc2UoKTsKIAog
I2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQppbmRleCBlODA3YzY3MGQy
MGQ5MDQ0NWZlYmQ5NTYyMDMwZTE5ODBmYzJlNzJjLi45NDFhMTliN2E1Yjg3NTc1MGQ5ZjFmZjUw
ZjFjZWU0ZGJlZDM0NWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29j
b2EvV2ViUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2Nv
YS9XZWJQcm9jZXNzQ29jb2EubW0KQEAgLTQ2MSwxNCArNDYxLDEyIEBAIHZvaWQgV2ViUHJvY2Vz
czo6cmVnaXN0ZXJXaXRoU3RhdGVEdW1wZXIoKQogICAgICAgICAgICAgICAgIFtzdGF0ZURpY3Qg
c2V0T2JqZWN0OmpzT2JqZWN0Q291bnRzLmdldCgpIGZvcktleTpAIkphdmFTY3JpcHQgT2JqZWN0
IENvdW50cyJdOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhdXRvIHBhZ2VMb2FkVGlt
ZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgICAg
IGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZU1hcC52YWx1ZXMoKSkgeworICAgICAgICAgICAgYXV0
byBwYWdlTG9hZFRpbWVzID0gY3JlYXRlTlNBcnJheShtX3BhZ2VNYXAudmFsdWVzKCksIFtdIChh
dXRvJiBwYWdlKSAtPiBpZCB7CiAgICAgICAgICAgICAgICAgaWYgKHBhZ2UtPnVzZXNFcGhlbWVy
YWxTZXNzaW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgICAgICAgICAgTlNEYXRlKiBkYXRlID0gW05T
RGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDpwYWdlLT5sb2FkQ29tbWl0VGltZSgp
LnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpXTsKLSAgICAgICAgICAgICAgICBbcGFnZUxv
YWRUaW1lcyBhZGRPYmplY3Q6ZGF0ZV07Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6cGFnZS0+bG9hZENv
bW1pdFRpbWUoKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKV07CisgICAgICAgICAgICB9
KTsKIAogICAgICAgICAgICAgLy8gQWRkaW5nIGFuIGVtcHR5IGFycmF5IHRvIHRoZSBwcm9jZXNz
IHN0YXRlIG1heSBwcm92aWRlIGFuCiAgICAgICAgICAgICAvLyBpbmRpY2F0aW9uIG9mIHRoZSBl
eGlzdGFuY2Ugb2YgcHJpdmF0ZSBzZXNzaW9ucywgd2hpY2ggd2UnZCBsaWtlCkBAIC02MjksMjAg
KzYyNywyMSBAQCBzdGF0aWMgTlNVUkwgKm9yaWdpbihXZWJQYWdlJiBwYWdlKQogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShNQUMpCisKIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheTxOU1N0cmluZyAq
Pj4gYWN0aXZlUGFnZXNPcmlnaW5zKGNvbnN0IEhhc2hNYXA8UGFnZUlkZW50aWZpZXIsIFJlZlB0
cjxXZWJQYWdlPj4mIHBhZ2VNYXApCiB7Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PE5T
U3RyaW5nICo+PiBhY3RpdmVPcmlnaW5zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XSk7Ci0KLSAgICBmb3IgKGF1dG8mIHBhZ2UgOiBwYWdlTWFwLnZhbHVlcygpKSB7Cisg
ICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocGFnZU1hcC52YWx1ZXMoKSwgW10gKGF1dG8mIHBhZ2Up
IC0+IE5TU3RyaW5nICogewogICAgICAgICBpZiAocGFnZS0+dXNlc0VwaGVtZXJhbFNlc3Npb24o
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAg
ICAgICBpZiAoTlNVUkwgKm9yaWdpbkFzVVJMID0gb3JpZ2luKCpwYWdlKSkKLSAgICAgICAgICAg
IFthY3RpdmVPcmlnaW5zIGFkZE9iamVjdDpXVEY6OnVzZXJWaXNpYmxlU3RyaW5nKG9yaWdpbkFz
VVJMKV07Ci0gICAgfQorICAgICAgICBOU1VSTCAqb3JpZ2luQXNVUkwgPSBvcmlnaW4oKnBhZ2Up
OworICAgICAgICBpZiAoIW9yaWdpbkFzVVJMKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAot
ICAgIHJldHVybiBhY3RpdmVPcmlnaW5zOworICAgICAgICByZXR1cm4gV1RGOjp1c2VyVmlzaWJs
ZVN0cmluZyhvcmlnaW5Bc1VSTCk7CisgICAgfSk7CiB9CisKICNlbmRpZgogCiB2b2lkIFdlYlBy
b2Nlc3M6OnVwZGF0ZUFjdGl2ZVBhZ2VzKGNvbnN0IFN0cmluZyYgb3ZlcnJpZGVEaXNwbGF5TmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lSU9TLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVJT1MubW0KaW5kZXggNDYxNzY4ZjcwZDFiZWIyNWNiYmMwMjE0ZDRkNWMzZDZmNjdhOTMw
YS4uZmFlMzRkMTIyZDI2NjMzYTBmZDE3ZGY4ZTlmNjM4MmI2M2E0OGVhNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0K
QEAgLTI3LDYgKzI3LDE2IEBACiAKICNpbXBvcnQgIldlYkZyYW1lSU9TLmgiCiAKKyNpbXBvcnQg
IkRPTS5oIgorI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01SYW5nZS5o
IgorI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NVUlLaXRFeHRlbnNp
b25zLmgiCisjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCisjaW1wb3J0ICJXZWJTZWxlY3Rp
b25SZWN0LmgiCisjaW1wb3J0ICJXZWJVSUtpdERlbGVnYXRlLmgiCisjaW1wb3J0ICJXZWJWaWV3
UHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViVmlzaWJsZVBvc2l0aW9uSW50ZXJuYWwuaCIKICNpbXBv
cnQgPFdlYkNvcmUvRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0VkaXRpbmcuaD4KICNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+CkBAIC00MCw3ICs1MCw2IEBA
CiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUG9z
aXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVu
ZGVyT2JqZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclRleHQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyZWREb2N1bWVudE1hcmtlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZWxlY3Rp
b25SZWN0Lmg+CkBAIC00OSwyMCArNTgsOCBAQAogI2ltcG9ydCA8V2ViQ29yZS9UZXh0RmxhZ3Mu
aD4KICNpbXBvcnQgPFdlYkNvcmUvVmlzaWJsZVBvc2l0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1Zpc2libGVVbml0cy5oPgotI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTS5oPgotI2ltcG9ydCA8
V2ViS2l0TGVnYWN5L0RPTVJhbmdlLmg+Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NVUlLaXRF
eHRlbnNpb25zLmg+Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvV2ViU2VsZWN0aW9uUmVjdC5oPgot
I2ltcG9ydCA8V2ViS2l0TGVnYWN5L1dlYlZpc2libGVQb3NpdGlvbi5oPgogI2ltcG9ydCA8dW5p
Y29kZS91Y2hhci5oPgotCi0jaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRP
TVJhbmdlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKLSNpbXBvcnQg
IldlYlVJS2l0RGVsZWdhdGUuaCIKLSNpbXBvcnQgIldlYlZpZXdQcml2YXRlLmgiCi0jaW1wb3J0
ICJXZWJWaXNpYmxlUG9zaXRpb24uaCIKLSNpbXBvcnQgIldlYlZpc2libGVQb3NpdGlvbkludGVy
bmFsLmgiCisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKQEAgLTIxNCwxMyArMjExLDEwIEBAIC0gKE5TQXJyYXkgKilzZWxlY3Rp
b25SZWN0c0ZvckNvcmVSYW5nZTooUmFuZ2UgKilyYW5nZQogICAgIAogICAgIFZlY3RvcjxTZWxl
Y3Rpb25SZWN0PiByZWN0czsKICAgICByYW5nZS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHJlY3Rz
KTsKLSAgICB1bnNpZ25lZCBzaXplID0gcmVjdHMuc2l6ZSgpOwogICAgIAotICAgIE5TTXV0YWJs
ZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2l6ZV07
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBTZWxl
Y3Rpb25SZWN0ICZjb3JlUmVjdCA9IHJlY3RzW2ldOwotICAgICAgICBXZWJTZWxlY3Rpb25SZWN0
ICp3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVjdF07Ci0gICAgICAgIHdl
YlJlY3QucmVjdCA9IHN0YXRpY19jYXN0PENHUmVjdD4oY29yZVJlY3QucmVjdCgpKTsKKyAgICBy
ZXR1cm4gY3JlYXRlTlNBcnJheShyZWN0cywgW10gKGF1dG8mIGNvcmVSZWN0KSB7CisgICAgICAg
IGF1dG8gd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNlbGVjdGlvblJlY3RdOworICAgICAg
ICB3ZWJSZWN0LnJlY3QgPSBjb3JlUmVjdC5yZWN0KCk7CiAgICAgICAgIHdlYlJlY3Qud3JpdGlu
Z0RpcmVjdGlvbiA9IGNvcmVSZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/
IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogV0tXcml0aW5nRGlyZWN0aW9uUmlnaHRU
b0xlZnQ7CiAgICAgICAgIHdlYlJlY3QuaXNMaW5lQnJlYWsgPSBjb3JlUmVjdC5pc0xpbmVCcmVh
aygpOwogICAgICAgICB3ZWJSZWN0LmlzRmlyc3RPbkxpbmUgPSBjb3JlUmVjdC5pc0ZpcnN0T25M
aW5lKCk7CkBAIC0yMjksMTAgKzIyMyw4IEBAIC0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0c0Zv
ckNvcmVSYW5nZTooUmFuZ2UgKilyYW5nZQogICAgICAgICB3ZWJSZWN0LmNvbnRhaW5zRW5kID0g
Y29yZVJlY3QuY29udGFpbnNFbmQoKTsKICAgICAgICAgd2ViUmVjdC5pc0luRml4ZWRQb3NpdGlv
biA9IGNvcmVSZWN0LmlzSW5GaXhlZFBvc2l0aW9uKCk7CiAgICAgICAgIHdlYlJlY3QuaXNIb3Jp
em9udGFsID0gY29yZVJlY3QuaXNIb3Jpem9udGFsKCk7Ci0gICAgICAgIFtyZXN1bHQgYWRkT2Jq
ZWN0OndlYlJlY3RdOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OyAgICAgICAgCisg
ICAgICAgIHJldHVybiB3ZWJSZWN0OworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5T
QXJyYXkgKilzZWxlY3Rpb25SZWN0c0ZvclJhbmdlOihET01SYW5nZSAqKWRvbVJhbmdlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvRE9NL0RPTS5tbQppbmRleCBkOGFmNjc4ZGFmMDg4ODI4NGFiZGRjMWNkYjEw
YWRlYjE0Yjc2NzRmLi5kZjBiNTIwOTExZmUxODVjYjkzOGZmMWY3Yzk5N2VhZmVhMjcwZjNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KQEAgLTE4NywxMyArMTg3LDkgQEAgc3RhdGlj
IFdLUXVhZCB3a1F1YWRGcm9tRmxvYXRRdWFkKGNvbnN0IEZsb2F0UXVhZCYgaW5RdWFkKQogCiBz
dGF0aWMgTlNBcnJheSAqa2l0KGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKIHsKLSAg
ICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNp
dHk6cXVhZHMuc2l6ZSgpXTsKLSAgICBmb3IgKGF1dG8mIHF1YWQgOiBxdWFkcykgewotICAgICAg
ICBXS1F1YWRPYmplY3QgKnF1YWRPYmplY3QgPSBbW1dLUXVhZE9iamVjdCBhbGxvY10gaW5pdFdp
dGhRdWFkOndrUXVhZEZyb21GbG9hdFF1YWQocXVhZCldOwotICAgICAgICBbYXJyYXkgYWRkT2Jq
ZWN0OnF1YWRPYmplY3RdOwotICAgICAgICBbcXVhZE9iamVjdCByZWxlYXNlXTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGFycmF5OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHF1YWRzLCBbXSAoYXV0
byYgcXVhZCkgeworICAgICAgICByZXR1cm4gYWRvcHROUyhbW1dLUXVhZE9iamVjdCBhbGxvY10g
aW5pdFdpdGhRdWFkOndrUXVhZEZyb21GbG9hdFF1YWQocXVhZCldKTsKKyAgICB9KS5hdXRvcmVs
ZWFzZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIFdLUXVhZCB6ZXJvUXVhZCgpCkBAIC01NDIsOCAr
NTM4LDYgQEAgLSAodm9pZClnZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJ
bWFnZSBhbmRSZWN0czooTlNBcnJheSAqKilyZWN0cwogICAgICAgICAgICAgKmNnSW1hZ2UgPSBp
bWFnZS0+bmF0aXZlSW1hZ2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAotICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XSk7Ci0KICAgICBpZiAoISpjZ0ltYWdlKSB7CiAgICAgICAgIGlmIChhdXRvKiBy
ZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKSkgewogICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5k
aW5nQm94OwpAQCAtNTUxLDI3ICs1NDUsMTggQEAgLSAodm9pZClnZXRQcmV2aWV3U25hcHNob3RJ
bWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0czooTlNBcnJheSAqKilyZWN0cwogICAg
ICAgICAgICAgICAgIGJvdW5kaW5nQm94ID0gZG93bmNhc3Q8UmVuZGVySW1hZ2U+KCpyZW5kZXJl
cikuYWJzb2x1dGVDb250ZW50UXVhZCgpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYm91bmRpbmdCb3ggPSByZW5kZXJlci0+YWJzb2x1
dGVCb3VuZGluZ0JveFJlY3QoKTsKLQogICAgICAgICAgICAgYm91bmRpbmdCb3guaW5mbGF0ZSht
YXJnaW4pOwotCi0gICAgICAgICAgICBDR1JlY3QgY2dSZWN0ID0gbm9kZS5kb2N1bWVudCgpLmZy
YW1lKCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KGJvdW5kaW5n
Qm94KSk7Ci0gICAgICAgICAgICBbcmVjdEFycmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZTom
Y2dSZWN0IHdpdGhPYmpDVHlwZTpAZW5jb2RlKENHUmVjdCldXTsKLQotICAgICAgICAgICAgKnJl
Y3RzID0gcmVjdEFycmF5LmF1dG9yZWxlYXNlKCk7CisgICAgICAgICAgICAqcmVjdHMgPSBAW21h
a2VOU0FycmF5RWxlbWVudChub2RlLmRvY3VtZW50KCkuZnJhbWUoKS0+dmlldygpLT5jb250ZW50
c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdCb3gpKSldOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBGbG9hdFBvaW50IG9yaWdpbiA9IHRleHRJbmRp
Y2F0b3ItPnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMoKS5sb2NhdGlvbigp
OwotICAgIGZvciAoY29uc3QgRmxvYXRSZWN0JiByZWN0IDogdGV4dEluZGljYXRvci0+dGV4dFJl
Y3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcygpKSB7Ci0gICAgICAgIENHUmVjdCBjZ1JlY3Qg
PSByZWN0OwotICAgICAgICBjZ1JlY3Qub3JpZ2luLnggKz0gb3JpZ2luLngoKTsKLSAgICAgICAg
Y2dSZWN0Lm9yaWdpbi55ICs9IG9yaWdpbi55KCk7Ci0gICAgICAgIGNnUmVjdCA9IG5vZGUuZG9j
dW1lbnQoKS5mcmFtZSgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVj
dChjZ1JlY3QpKTsKLSAgICAgICAgW3JlY3RBcnJheSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWU6
JmNnUmVjdCB3aXRoT2JqQ1R5cGU6QGVuY29kZShDR1JlY3QpXV07Ci0gICAgfQotCi0gICAgKnJl
Y3RzID0gcmVjdEFycmF5LmF1dG9yZWxlYXNlKCk7CisgICAgKnJlY3RzID0gY3JlYXRlTlNBcnJh
eSh0ZXh0SW5kaWNhdG9yLT50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCksIFsm
XSAoQ0dSZWN0IHJlY3QpIHsKKyAgICAgICAgcmVjdC5vcmlnaW4ueCArPSBvcmlnaW4ueCgpOwor
ICAgICAgICByZWN0Lm9yaWdpbi55ICs9IG9yaWdpbi55KCk7CisgICAgICAgIHJldHVybiBtYWtl
TlNBcnJheUVsZW1lbnQobm9kZS5kb2N1bWVudCgpLmZyYW1lKCktPnZpZXcoKS0+Y29udGVudHNU
b1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsK
IH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9X
ZWJCYWNrRm9yd2FyZExpc3QubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L1dl
YkJhY2tGb3J3YXJkTGlzdC5tbQppbmRleCA4Yjk5NGVkMmQwMDcwNmRkOGU0ZWQ2YjIyYjZiM2I3
ZTk4NDVmNjM5Li5iMDljOGVmNWU0OGRkYTMxZGEzZjNmOGRjMjY2OTZhMDE2OGVhMTk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlz
dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJk
TGlzdC5tbQpAQCAtNTAsNiArNTAsNyBAQAogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
I2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIHR5cGVkZWYgSGFzaE1hcDxCYWNr
Rm9yd2FyZExpc3QqLCBXZWJCYWNrRm9yd2FyZExpc3QqPiBCYWNrRm9yd2FyZExpc3RNYXA7CiAK
QEAgLTE1MSw0OSArMTUyLDM4IEBAIC0gKHZvaWQpcmVtb3ZlSXRlbTooV2ViSGlzdG9yeUl0ZW0g
KilpdGVtCiAKIC8vIEZJWE1FOiBNb3ZlIGludG8gV2ViQ29yZSB0aGUgY29kZSB0aGF0IGRlYWxz
IGRpcmVjdGx5IHdpdGggV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0LgogCi0jZGVmaW5lIFdlYkJh
Y2tGb3J3YXJkTGlzdERpY3Rpb25hcnlFbnRyaWVzS2V5IEAiZW50cmllcyIKLSNkZWZpbmUgV2Vi
QmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUNhcGFjaXR5S2V5IEAiY2FwYWNpdHkiCi0jZGVmaW5l
IFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlDdXJyZW50S2V5IEAiY3VycmVudCIKK2NvbnN0
ZXhwciBhdXRvIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlFbnRyaWVzS2V5ID0gQCJlbnRy
aWVzIjsKK2NvbnN0ZXhwciBhdXRvIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlDYXBhY2l0
eUtleSA9IEAiY2FwYWNpdHkiOworY29uc3RleHByIGF1dG8gV2ViQmFja0ZvcndhcmRMaXN0RGlj
dGlvbmFyeUN1cnJlbnRLZXkgPSBAImN1cnJlbnQiOwogCiAtIChOU0RpY3Rpb25hcnkgKilkaWN0
aW9uYXJ5UmVwcmVzZW50YXRpb24KIHsKLSAgICBCYWNrRm9yd2FyZExpc3QgKmNvcmVCRkxpc3Qg
PSBjb3JlKHNlbGYpOwotCi0gICAgYXV0byYgaGlzdG9yeUl0ZW1zID0gY29yZUJGTGlzdC0+ZW50
cmllcygpOwotICAgIHVuc2lnbmVkIHNpemUgPSBoaXN0b3J5SXRlbXMuc2l6ZSgpOwotICAgIE5T
TXV0YWJsZUFycmF5ICplbnRyaWVzQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
V2l0aENhcGFjaXR5OnNpemVdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCi0gICAgICAgIFtlbnRyaWVzQXJyYXkgYWRkT2JqZWN0OltraXQoY29uc3RfY2FzdDxXZWJD
b3JlOjpIaXN0b3J5SXRlbSo+KGhpc3RvcnlJdGVtc1tpXS5wdHIoKSkpIGRpY3Rpb25hcnlSZXBy
ZXNlbnRhdGlvbkluY2x1ZGluZ0NoaWxkcmVuOk5PXV07Ci0KLSAgICBOU0RpY3Rpb25hcnkgKmRp
Y3Rpb25hcnkgPSBAewotICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5RW50cmll
c0tleTogZW50cmllc0FycmF5LAotICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5
Q3VycmVudEtleTogQChjb3JlQkZMaXN0LT5jdXJyZW50KCkpLAotICAgICAgICBXZWJCYWNrRm9y
d2FyZExpc3REaWN0aW9uYXJ5Q2FwYWNpdHlLZXk6IEAoY29yZUJGTGlzdC0+Y2FwYWNpdHkoKSks
CisgICAgYXV0byYgbGlzdCA9ICpjb3JlKHNlbGYpOworICAgIGF1dG8gZW50cmllcyA9IGNyZWF0
ZU5TQXJyYXkobGlzdC5lbnRyaWVzKCksIFtdIChhdXRvJiBpdGVtKSB7CisgICAgICAgIHJldHVy
biBba2l0KGNvbnN0X2Nhc3Q8V2ViQ29yZTo6SGlzdG9yeUl0ZW0qPihpdGVtLnB0cigpKSkgZGlj
dGlvbmFyeVJlcHJlc2VudGF0aW9uSW5jbHVkaW5nQ2hpbGRyZW46Tk9dOworICAgIH0pOworICAg
IHJldHVybiBAeworICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5RW50cmllc0tl
eTogZW50cmllcy5nZXQoKSwKKyAgICAgICAgV2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUN1
cnJlbnRLZXk6IEAobGlzdC5jdXJyZW50KCkpLAorICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RE
aWN0aW9uYXJ5Q2FwYWNpdHlLZXk6IEAobGlzdC5jYXBhY2l0eSgpKSwKICAgICB9OwotCi0gICAg
W2VudHJpZXNBcnJheSByZWxlYXNlXTsKLQotICAgIHJldHVybiBkaWN0aW9uYXJ5OwogfQogCiAt
ICh2b2lkKXNldFRvTWF0Y2hEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb246KE5TRGljdGlvbmFyeSAq
KWRpY3Rpb25hcnkKIHsKLSAgICBCYWNrRm9yd2FyZExpc3QgKmNvcmVCRkxpc3QgPSBjb3JlKHNl
bGYpOwotICAgIAotICAgIGNvcmVCRkxpc3QtPnNldENhcGFjaXR5KFtbZGljdGlvbmFyeSBvYmpl
Y3RGb3JLZXk6V2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUNhcGFjaXR5S2V5XSBpbnRWYWx1
ZV0pOwotICAgIAotICAgIGZvciAoTlNEaWN0aW9uYXJ5ICppdGVtRGljdGlvbmFyeSBpbiBbZGlj
dGlvbmFyeSBvYmplY3RGb3JLZXk6V2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUVudHJpZXNL
ZXldKSB7Ci0gICAgICAgIFdlYkhpc3RvcnlJdGVtICppdGVtID0gW1tXZWJIaXN0b3J5SXRlbSBh
bGxvY10gaW5pdEZyb21EaWN0aW9uYXJ5UmVwcmVzZW50YXRpb246aXRlbURpY3Rpb25hcnldOwot
ICAgICAgICBjb3JlQkZMaXN0LT5hZGRJdGVtKCpjb3JlKGl0ZW0pKTsKLSAgICAgICAgW2l0ZW0g
cmVsZWFzZV07Ci0gICAgfQorICAgIGF1dG8mIGxpc3QgPSAqY29yZShzZWxmKTsKKworICAgIGxp
c3Quc2V0Q2FwYWNpdHkoW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXZWJCYWNrRm9yd2FyZExp
c3REaWN0aW9uYXJ5Q2FwYWNpdHlLZXldIHVuc2lnbmVkSW50VmFsdWVdKTsKKyAgICBmb3IgKE5T
RGljdGlvbmFyeSAqaXRlbURpY3Rpb25hcnkgaW4gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Oldl
YkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlFbnRyaWVzS2V5XSkKKyAgICAgICAgbGlzdC5hZGRJ
dGVtKCpjb3JlKGFkb3B0TlMoW1tXZWJIaXN0b3J5SXRlbSBhbGxvY10gaW5pdEZyb21EaWN0aW9u
YXJ5UmVwcmVzZW50YXRpb246aXRlbURpY3Rpb25hcnldKS5nZXQoKSkpOwogCiAgICAgdW5zaWdu
ZWQgY3VycmVudEluZGV4ID0gW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXZWJCYWNrRm9yd2Fy
ZExpc3REaWN0aW9uYXJ5Q3VycmVudEtleV0gdW5zaWduZWRJbnRWYWx1ZV07Ci0gICAgc2l6ZV90
IGxpc3RTaXplID0gY29yZUJGTGlzdC0+ZW50cmllcygpLnNpemUoKTsKKyAgICBzaXplX3QgbGlz
dFNpemUgPSBsaXN0LmVudHJpZXMoKS5zaXplKCk7CiAgICAgaWYgKGN1cnJlbnRJbmRleCA+PSBs
aXN0U2l6ZSkKICAgICAgICAgY3VycmVudEluZGV4ID0gbGlzdFNpemUgLSAxOwotICAgIGNvcmVC
Rkxpc3QtPnNldEN1cnJlbnQoY3VycmVudEluZGV4KTsKKyAgICBsaXN0LnNldEN1cnJlbnQoY3Vy
cmVudEluZGV4KTsKIH0KKwogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIC0gKEJP
T0wpY29udGFpbnNJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWl0ZW0KQEAgLTIzNSwyMiArMjI1LDEx
IEBAIC0gKFdlYkhpc3RvcnlJdGVtICopZm9yd2FyZEl0ZW0KICAgICByZXR1cm4gW1traXQoY29y
ZShzZWxmKS0+Zm9yd2FyZEl0ZW0oKS5nZXQoKSkgcmV0YWluXSBhdXRvcmVsZWFzZV07CiB9CiAK
LXN0YXRpYyBOU0FycmF5KiB2ZWN0b3JUb05TQXJyYXkoVmVjdG9yPFJlZjxXZWJDb3JlOjpIaXN0
b3J5SXRlbT4+JiBsaXN0KQotewotICAgIHVuc2lnbmVkIHNpemUgPSBsaXN0LnNpemUoKTsKLSAg
ICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW1tbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRX
aXRoQ2FwYWNpdHk6c2l6ZV0gYXV0b3JlbGVhc2VdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCi0gICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmtpdChsaXN0W2ldLnB0
cigpKV07Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgYm9vbCBidW1wZXJDYXJC
YWNrRm9yd2FyZEhhY2tOZWVkZWQoKSAKK3N0YXRpYyBib29sIGJ1bXBlckNhckJhY2tGb3J3YXJk
SGFja05lZWRlZCgpCiB7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIGJv
b2wgaGFja05lZWRlZCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJd
IGlzRXF1YWxUb1N0cmluZzpAImNvbS5mcmVldmVyc2UuYnVtcGVyY2FyIl0gJiYgCi0gICAgICAg
ICFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9VVF9CVU1Q
RVJDQVJfQkFDS19GT1JXQVJEX1FVSVJLKTsKLQorICAgIHN0YXRpYyBib29sIGhhY2tOZWVkZWQg
PSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBpc0VxdWFsVG9TdHJp
bmc6QCJjb20uZnJlZXZlcnNlLmJ1bXBlcmNhciJdCisgICAgICAgICYmICFXZWJLaXRMaW5rZWRP
bk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9VVF9CVU1QRVJDQVJfQkFDS19GT1JX
QVJEX1FVSVJLKTsKICAgICByZXR1cm4gaGFja05lZWRlZDsKICNlbHNlCiAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMjYxLDMwICsyNDAsMjggQEAgLSAoTlNBcnJheSAqKWJhY2tMaXN0V2l0aExpbWl0
OihpbnQpbGltaXQKIHsKICAgICBWZWN0b3I8UmVmPFdlYkNvcmU6Okhpc3RvcnlJdGVtPj4gbGlz
dDsKICAgICBjb3JlKHNlbGYpLT5iYWNrTGlzdFdpdGhMaW1pdChsaW1pdCwgbGlzdCk7Ci0gICAg
TlNBcnJheSAqcmVzdWx0ID0gdmVjdG9yVG9OU0FycmF5KGxpc3QpOwotICAgIAorICAgIGF1dG8g
cmVzdWx0ID0gY3JlYXRlTlNBcnJheShsaXN0LCBbXSAoYXV0byYgaXRlbSkgeworICAgICAgICBy
ZXR1cm4ga2l0KGl0ZW0ucHRyKCkpOworICAgIH0pOwogICAgIGlmIChidW1wZXJDYXJCYWNrRm9y
d2FyZEhhY2tOZWVkZWQoKSkgewotICAgICAgICBzdGF0aWMgTlNBcnJheSAqbGFzdEJhY2tMaXN0
QXJyYXkgPSBuaWw7Ci0gICAgICAgIFtsYXN0QmFja0xpc3RBcnJheSByZWxlYXNlXTsKLSAgICAg
ICAgbGFzdEJhY2tMaXN0QXJyYXkgPSBbcmVzdWx0IHJldGFpbl07CisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8TlNBcnJheT4+IGxhc3RCYWNrTGlzdEFycmF5OworICAg
ICAgICBsYXN0QmFja0xpc3RBcnJheS5nZXQoKSA9IHJlc3VsdDsKICAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0g
KE5TQXJyYXkgKilmb3J3YXJkTGlzdFdpdGhMaW1pdDooaW50KWxpbWl0CiB7CiAgICAgVmVjdG9y
PFJlZjxXZWJDb3JlOjpIaXN0b3J5SXRlbT4+IGxpc3Q7CiAgICAgY29yZShzZWxmKS0+Zm9yd2Fy
ZExpc3RXaXRoTGltaXQobGltaXQsIGxpc3QpOwotICAgIE5TQXJyYXkgKnJlc3VsdCA9IHZlY3Rv
clRvTlNBcnJheShsaXN0KTsKLSAgICAKKyAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZU5TQXJyYXko
bGlzdCwgW10gKGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGtpdChpdGVtLnB0cigpKTsK
KyAgICB9KTsKICAgICBpZiAoYnVtcGVyQ2FyQmFja0ZvcndhcmRIYWNrTmVlZGVkKCkpIHsKLSAg
ICAgICAgc3RhdGljIE5TQXJyYXkgKmxhc3RGb3J3YXJkTGlzdEFycmF5ID0gbmlsOwotICAgICAg
ICBbbGFzdEZvcndhcmRMaXN0QXJyYXkgcmVsZWFzZV07Ci0gICAgICAgIGxhc3RGb3J3YXJkTGlz
dEFycmF5ID0gW3Jlc3VsdCByZXRhaW5dOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
UmV0YWluUHRyPE5TQXJyYXk+PiBsYXN0Rm9yd2FyZExpc3RBcnJheTsKKyAgICAgICAgbGFzdEZv
cndhcmRMaXN0QXJyYXkuZ2V0KCkgPSByZXN1bHQ7CiAgICAgfQotICAgIAotICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdC5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChpbnQpY2Fw
YWNpdHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViSGlz
dG9yeUl0ZW0ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJ
dGVtLm1tCmluZGV4IGRmYWNiMzdkMTA5Mzg1Y2RhNjI1NzFiM2QwM2YzNWI5Yjk0ZTY1MjUuLjMx
NTU5MTBiZTEzNDUyMjQzYTUxNjJhMjFlOTEyNjIwNzhlYmNhNTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW0ubW0KKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbS5tbQpAQCAtMjU4LDEwICsy
NTgsOCBAQCAtIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCiBIaXN0b3J5SXRlbSogY29yZShXZWJI
aXN0b3J5SXRlbSAqaXRlbSkKIHsKICAgICBpZiAoIWl0ZW0pCi0gICAgICAgIHJldHVybiAwOwot
ICAgIAorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBBU1NFUlQoaGlzdG9yeUl0ZW1XcmFw
cGVycygpLmdldChjb3JlKGl0ZW0tPl9wcml2YXRlKSkgPT0gaXRlbSk7Ci0KICAgICByZXR1cm4g
Y29yZShpdGVtLT5fcHJpdmF0ZSk7CiB9CiAKQEAgLTI2OSwxMSArMjY3LDggQEAgV2ViSGlzdG9y
eUl0ZW0gKmtpdChIaXN0b3J5SXRlbSogaXRlbSkKIHsKICAgICBpZiAoIWl0ZW0pCiAgICAgICAg
IHJldHVybiBuaWw7Ci0gICAgICAgIAotICAgIFdlYkhpc3RvcnlJdGVtICpraXRJdGVtID0gaGlz
dG9yeUl0ZW1XcmFwcGVycygpLmdldChpdGVtKTsKLSAgICBpZiAoa2l0SXRlbSkKKyAgICBpZiAo
YXV0byBraXRJdGVtID0gaGlzdG9yeUl0ZW1XcmFwcGVycygpLmdldChpdGVtKSkKICAgICAgICAg
cmV0dXJuIGtpdEl0ZW07Ci0gICAgCiAgICAgcmV0dXJuIFtbW1dlYkhpc3RvcnlJdGVtIGFsbG9j
XSBpbml0V2l0aFdlYkNvcmVIaXN0b3J5SXRlbToqaXRlbV0gYXV0b3JlbGVhc2VdOwogfQogCkBA
IC0yODUsOSArMjgwLDcgQEAgKyAoV2ViSGlzdG9yeUl0ZW0gKillbnRyeVdpdGhVUkw6KE5TVVJM
ICopVVJMCiAtIChpZClpbml0V2l0aFVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJpbmcgdGl0
bGU6KE5TU3RyaW5nICopdGl0bGUgZGlzcGxheVRpdGxlOihOU1N0cmluZyAqKWRpc3BsYXlUaXRs
ZSBsYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDooTlNUaW1lSW50ZXJ2YWwpdGltZQogewogICAgIFdl
Ykhpc3RvcnlJdGVtICppdGVtID0gW3NlbGYgaW5pdFdpdGhXZWJDb3JlSGlzdG9yeUl0ZW06SGlz
dG9yeUl0ZW06OmNyZWF0ZShVUkxTdHJpbmcsIHRpdGxlLCBkaXNwbGF5VGl0bGUpXTsKLQogICAg
IGl0ZW0tPl9wcml2YXRlLT5fbGFzdFZpc2l0ZWRUaW1lID0gdGltZTsKLQogICAgIHJldHVybiBp
dGVtOwogfQogCkBAIC0zMDAsNyArMjkzLDcgQEAgLSAoaWQpaW5pdFdpdGhXZWJDb3JlSGlzdG9y
eUl0ZW06KFJlZjxIaXN0b3J5SXRlbT4mJilpdGVtCiAgICAgLy8gTm90ZTogV2UgYWxzbyBkbyB0
aGlzIGluIFtXZWJGcmFtZVZpZXcgaW5pdFdpdGhGcmFtZTpdIHdoZXJlIHdlIGRvCiAgICAgLy8g
b3RoZXIgImluaXQgYmVmb3JlIFdlYktpdCBpcyB1c2VkIiB0eXBlIHRoaW5ncwogICAgIFdlYkNv
cmU6Om5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCA9IFdLTm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2Vk
OwotICAgIAorCiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVy
biBuaWw7CiAKQEAgLTQ4MCwxNyArNDczLDEzIEBAIC0gKHZvaWQpc2V0UlNTRmVlZFJlZmVycmVy
OihOU1N0cmluZyAqKXJlZmVycmVyCiAKIC0gKE5TQXJyYXkgKiljaGlsZHJlbgogewotICAgIGNv
bnN0IGF1dG8mIGNoaWxkcmVuID0gY29yZShfcHJpdmF0ZSktPmNoaWxkcmVuKCk7Ci0gICAgaWYg
KCFjaGlsZHJlbi5zaXplKCkpCisgICAgYXV0byYgY2hpbGRyZW4gPSBjb3JlKF9wcml2YXRlKS0+
Y2hpbGRyZW4oKTsKKyAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
bmlsOwogCi0gICAgdW5zaWduZWQgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICBOU011dGFi
bGVBcnJheSAqcmVzdWx0ID0gW1tbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNp
dHk6c2l6ZV0gYXV0b3JlbGVhc2VdOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpCi0gICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmtpdChjb25zdF9jYXN0PEhp
c3RvcnlJdGVtKj4oY2hpbGRyZW5baV0ucHRyKCkpKV07Ci0gICAgCi0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShjaGlsZHJlbiwgW10gKGF1dG8mIGl0ZW0pIHsK
KyAgICAgICAgcmV0dXJuIGtpdChjb25zdF9jYXN0PEhpc3RvcnlJdGVtKj4oaXRlbS5wdHIoKSkp
OworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TVVJMICopVVJMCkBAIC01MTQsMTYg
KzUwMywxMSBAQCAtIChCT09MKWxhc3RWaXNpdFdhc0ZhaWx1cmUKIAogLSAoTlNBcnJheSAqKV9y
ZWRpcmVjdFVSTHMKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiogcmVkaXJlY3RVUkxzID0gX3ByaXZh
dGUtPl9yZWRpcmVjdFVSTHMuZ2V0KCk7CisgICAgYXV0byYgcmVkaXJlY3RVUkxzID0gX3ByaXZh
dGUtPl9yZWRpcmVjdFVSTHM7CiAgICAgaWYgKCFyZWRpcmVjdFVSTHMpCiAgICAgICAgIHJldHVy
biBuaWw7CiAKLSAgICBzaXplX3Qgc2l6ZSA9IHJlZGlyZWN0VVJMcy0+c2l6ZSgpOwotICAgIEFT
U0VSVChzaXplKTsKLSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzaXplXTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkKLSAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6KE5TU3RyaW5nKilyZWRp
cmVjdFVSTHMtPmF0KGkpXTsKLSAgICByZXR1cm4gW3Jlc3VsdCBhdXRvcmVsZWFzZV07CisgICAg
cmV0dXJuIGNyZWF0ZU5TQXJyYXkoKnJlZGlyZWN0VVJMcykuYXV0b3JlbGVhc2UoKTsKIH0KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
TWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQppbmRleCA0YzRmZWM3OGYzYWI5NWExZGMwNzRhZTdh
NDhmOTkwZjJjMTUzNzYwLi5kNTQxYzRjMDRmMmQ3NWQwNmJlZTA4MGViY2ZlNjZiMGE0NWZiZWY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0
aWNzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3Rp
Y3MubW0KQEAgLTgwLDM0ICs4MCwyNyBAQCArIChzaXplX3QpamF2YVNjcmlwdFByb3RlY3RlZEds
b2JhbE9iamVjdHNDb3VudAogICAgIHJldHVybiBjb21tb25WTSgpLmhlYXAucHJvdGVjdGVkR2xv
YmFsT2JqZWN0Q291bnQoKTsKIH0KIAorc3RhdGljIFJldGFpblB0cjxOU0NvdW50ZWRTZXQ+IGNy
ZWF0ZU5TQ291bnRlZFNldChjb25zdCBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4mIHNldCkK
K3sKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0TlMoW1tOU0NvdW50ZWRTZXQgYWxsb2NdIGluaXRX
aXRoQ2FwYWNpdHk6c2V0LnNpemUoKV0pOworICAgIGZvciAoYXV0byYgZW50cnkgOiBzZXQpIHsK
KyAgICAgICAgYXV0byBrZXkgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6ZW50cnku
a2V5XTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJ5LnZhbHVlOyArK2kp
CisgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDprZXldOworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0
VHlwZUNvdW50cwogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZNKCkpOwotICAgIAot
ICAgIE5TQ291bnRlZFNldCAqcmVzdWx0ID0gW05TQ291bnRlZFNldCBzZXRdOwotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gY291bnRzKGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0
ZWRPYmplY3RUeXBlQ291bnRzKCkpOwotICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6
aXRlcmF0b3IgZW5kID0gY291bnRzLT5lbmQoKTsKLSAgICBmb3IgKEhhc2hDb3VudGVkU2V0PGNv
bnN0IGNoYXIqPjo6aXRlcmF0b3IgaXQgPSBjb3VudHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT52YWx1ZTsgKytpKQotICAg
ICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5n
Oml0LT5rZXldXTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjcmVhdGVO
U0NvdW50ZWRTZXQoKmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkp
LmF1dG9yZWxlYXNlKCk7CiB9CiAKICsgKE5TQ291bnRlZFNldCAqKWphdmFTY3JpcHRPYmplY3RU
eXBlQ291bnRzCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7Ci0gICAgCi0g
ICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBbTlNDb3VudGVkU2V0IHNldF07Ci0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoY29tbW9uVk0oKS5oZWFwLm9iamVjdFR5
cGVDb3VudHMoKSk7Ci0gICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBl
bmQgPSBjb3VudHMtPmVuZCgpOwotICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+
OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZhbHVlOyArK2kpCi0gICAgICAgICAgICBb
cmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmtleV1d
OwotICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNyZWF0ZU5TQ291bnRlZFNl
dCgqY29tbW9uVk0oKS5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSkuYXV0b3JlbGVhc2UoKTsKIH0K
IAogKyAodm9pZClnYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYk5TUGFzdGVib2FyZEV4dHJhcy5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tCmluZGV4
IGUxYzVlZWIzMjgzZjA2NmQ4MTJjY2IwNTZjNDcwN2YzNTJiMDg3N2QuLmI4MzYzNjZmMDNmZjYw
ZGE5ODQxMWQxMDk0YTEwMzg5N2EyMzE4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL01pc2MvV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL01pc2MvV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tCkBAIC0yOTgsOSArMjk4LDcg
QEAgLSAoaWQpX3dlYl9kZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2VGb3JFbGVtZW50OihET01FbGVt
ZW50ICopZWxlbWVudAogICAgICAgICAgICAgZXh0ZW5zaW9uID0gVVJMLnBhdGhFeHRlbnNpb247
CiAgICAgICAgICAgICBbdHlwZXMgYWRkT2JqZWN0c0Zyb21BcnJheTpbTlNQYXN0ZWJvYXJkIF93
ZWJfZHJhZ1R5cGVzRm9yVVJMXV07CiAgICAgICAgICAgICBbc2VsZiBkZWNsYXJlVHlwZXM6dHlw
ZXMuZ2V0KCkgb3duZXI6c291cmNlXTsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gcGF0aHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAg
ICAgICAgICAgIFtwYXRocy5nZXQoKSBhZGRPYmplY3Q6dGl0bGVdOwotICAgICAgICAgICAgW3Nl
bGYgc2V0UHJvcGVydHlMaXN0OnBhdGhzLmdldCgpIGZvclR5cGU6bGVnYWN5RmlsZW5hbWVzUGFz
dGVib2FyZFR5cGUoKV07CisgICAgICAgICAgICBbc2VsZiBzZXRQcm9wZXJ0eUxpc3Q6QFt0aXRs
ZV0gZm9yVHlwZTpsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgpXTsKICAgICAgICAgfQog
I2VuZGlmCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFn
ZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdl
L1dlYkRhdGFiYXNlTWFuYWdlci5tbQppbmRleCBlNzI3NWM3NGRkZDc2NzFiNDUyY2I3ZDdkZGQz
MWEzZWIzNDQzYmYzLi5jZDU1MGFmNTE1Yzc4NjQxM2QwNDJlOTFmY2NmYTI0Yzc4ZmVlZDJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFu
YWdlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNl
TWFuYWdlci5tbQpAQCAtOTIsMTQgKzkyLDkgQEAgLSAoaWQpaW5pdAogCiAtIChOU0FycmF5ICop
b3JpZ2lucwogewotICAgIGF1dG8gY29yZU9yaWdpbnMgPSBEYXRhYmFzZVRyYWNrZXI6OnNpbmds
ZXRvbigpLm9yaWdpbnMoKTsKLSAgICBOU011dGFibGVBcnJheSAqd2ViT3JpZ2lucyA9IFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29yZU9yaWdpbnMuc2l6ZSgpXTsK
LSAgICBmb3IgKGF1dG8mIGNvcmVPcmlnaW4gOiBjb3JlT3JpZ2lucykgewotICAgICAgICBXZWJT
ZWN1cml0eU9yaWdpbiAqd2ViT3JpZ2luID0gW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gX2lu
aXRXaXRoV2ViQ29yZVNlY3VyaXR5T3JpZ2luOmNvcmVPcmlnaW4uc2VjdXJpdHlPcmlnaW4oKS5w
dHIoKV07Ci0gICAgICAgIFt3ZWJPcmlnaW5zIGFkZE9iamVjdDp3ZWJPcmlnaW5dOwotICAgICAg
ICBbd2ViT3JpZ2luIHJlbGVhc2VdOwotICAgIH0KLSAgICByZXR1cm4gW3dlYk9yaWdpbnMgYXV0
b3JlbGVhc2VdOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KERhdGFiYXNlVHJhY2tlcjo6c2lu
Z2xldG9uKCkub3JpZ2lucygpLCBbXSAoYXV0byYgb3JpZ2luKSB7CisgICAgICAgIHJldHVybiBh
ZG9wdE5TKFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0
eU9yaWdpbjpvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKS5wdHIoKV0pOworICAgIH0pLmF1dG9yZWxl
YXNlKCk7CiB9CiAKIC0gKE5TQXJyYXkgKilkYXRhYmFzZXNXaXRoT3JpZ2luOihXZWJTZWN1cml0
eU9yaWdpbiAqKW9yaWdpbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3Rv
cmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3Jh
Z2UvV2ViU3RvcmFnZU1hbmFnZXIubW0KaW5kZXggNTNjYzJiMTQ1NjI4ZDZmMzNmNjlkMzgxNTk3
MGM4NTY1NTFlMzQ5Yi4uYmJmZmRjNDU0ODA3MDhiZTk5MjE3ZDhkMDQwMjBhOWE4YmMyNzM2NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFu
YWdlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VN
YW5hZ2VyLm1tCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VHcm91cC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9T
ZWN1cml0eU9yaWdpbkRhdGEuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTksMTcgKzYwLDkgQEAgLSAoaWQpaW5p
dAogCiAtIChOU0FycmF5ICopb3JpZ2lucwogewotICAgIGF1dG8gY29yZU9yaWdpbnMgPSBXZWJL
aXQ6OlN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkub3JpZ2lucygpOwotCi0gICAgTlNNdXRhYmxl
QXJyYXkgKndlYk9yaWdpbnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5OmNvcmVPcmlnaW5zLnNpemUoKV07Ci0KLSAgICBmb3IgKGF1dG8mIG9yaWdpbiA6IGNvcmVP
cmlnaW5zKSB7Ci0gICAgICAgIFdlYlNlY3VyaXR5T3JpZ2luICp3ZWJPcmlnaW4gPSBbW1dlYlNl
Y3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46b3JpZ2lu
LnNlY3VyaXR5T3JpZ2luKCkucHRyKCldOwotICAgICAgICBbd2ViT3JpZ2lucyBhZGRPYmplY3Q6
d2ViT3JpZ2luXTsKLSAgICAgICAgW3dlYk9yaWdpbiByZWxlYXNlXTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gW3dlYk9yaWdpbnMgYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5
KFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5vcmlnaW5zKCksIFtdIChhdXRvJiBv
cmlnaW4pIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxv
Y10gX2luaXRXaXRoV2ViQ29yZVNlY3VyaXR5T3JpZ2luOm9yaWdpbi5zZWN1cml0eU9yaWdpbigp
LnB0cigpXSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAodm9pZClkZWxldGVBbGxP
cmlnaW5zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJBcHBsaWNhdGlvbkNhY2hlLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQXBwbGljYXRpb25DYWNoZS5tbQppbmRleCBhMjI3ODFhZWZhM2RkOGU2NTk5
Zjk5MDQwN2JiZmZiNWJkNjhjZTFmLi41ODE0MmY0YTdiOTYxNWJhNzU4NWJkZWVhMzdiMTY2Mzcx
M2UyM2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJBcHBsaWNhdGlvbkNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KICNpbXBvcnQgPFdlYkNv
cmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQg
PHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNp
bXBvcnQgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CkBAIC0xMjEsMTYgKzEy
Miw5IEBAICsgKHZvaWQpZGVsZXRlQ2FjaGVGb3JPcmlnaW46KFdlYlNlY3VyaXR5T3JpZ2luICop
b3JpZ2luCiAKICsgKE5TQXJyYXkgKilvcmlnaW5zV2l0aENhY2hlCiB7Ci0gICAgYXV0byBjb3Jl
T3JpZ2lucyA9IHdlYkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCkub3JpZ2luc1dpdGhDYWNoZSgp
OwotICAgIAotICAgIE5TTXV0YWJsZUFycmF5ICp3ZWJPcmlnaW5zID0gW1tbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29yZU9yaWdpbnMuc2l6ZSgpXSBhdXRvcmVsZWFz
ZV07Ci0gICAgCi0gICAgZm9yIChhdXRvJiBjb3JlT3JpZ2luIDogY29yZU9yaWdpbnMpIHsKLSAg
ICAgICAgYXV0byB3ZWJPcmlnaW4gPSBhZG9wdE5TKFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2Nd
IF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpjb3JlT3JpZ2luLnB0cigpXSk7Ci0gICAg
ICAgIFt3ZWJPcmlnaW5zIGFkZE9iamVjdDp3ZWJPcmlnaW4uZ2V0KCldOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gd2ViT3JpZ2luczsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheSh3ZWJBcHBs
aWNhdGlvbkNhY2hlU3RvcmFnZSgpLm9yaWdpbnNXaXRoQ2FjaGUoKSwgW10gKGF1dG8mIG9yaWdp
bikgeworICAgICAgICByZXR1cm4gYWRvcHROUyhbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBf
aW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46b3JpZ2luLnB0cigpXSk7CisgICAgfSkuYXV0
b3JlbGVhc2UoKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCmluZGV4IDhhNzUzYzU5MDE3
MjJhY2FjYjRjMzA1MGEzMWUxYmY3MDhjYjU0ZWEuLjJmYzQ1MjdjNjljNTA2NDQ3MjA2OGJiYzY1
YmM0MmUyY2ViODY0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KQEAgLTEwMzksMTMgKzEwMzksMTEg
QEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRP
ZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmkKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJh
c2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgTlNNdXRhYmxl
QXJyYXkgKmNvcnJlY3Rpb25zID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBmb3IgKGF1
dG8mIGd1ZXNzIDogZ3JhbW1hckRldGFpbC5ndWVzc2VzKQotICAgICAgICBbY29ycmVjdGlvbnMg
YWRkT2JqZWN0Omd1ZXNzXTsKLSAgICBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBAewotICAg
ICAgICBOU0dyYW1tYXJSYW5nZSA6IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOmdyYW1tYXJEZXRh
aWwucmFuZ2VdLAotICAgICAgICBOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24gOiBncmFtbWFyRGV0
YWlsLnVzZXJEZXNjcmlwdGlvbiwKLSAgICAgICAgTlNHcmFtbWFyQ29ycmVjdGlvbnMgOiBjb3Jy
ZWN0aW9ucywKKyAgICBhdXRvIGNvcnJlY3Rpb25zID0gY3JlYXRlTlNBcnJheShncmFtbWFyRGV0
YWlsLmd1ZXNzZXMpOworICAgIGF1dG8gZGljdGlvbmFyeSA9IEB7CisgICAgICAgIE5TR3JhbW1h
clJhbmdlOiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpncmFtbWFyRGV0YWlsLnJhbmdlXSwKKyAg
ICAgICAgTlNHcmFtbWFyVXNlckRlc2NyaXB0aW9uOiBncmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlw
dGlvbiwKKyAgICAgICAgTlNHcmFtbWFyQ29ycmVjdGlvbnM6IGNvcnJlY3Rpb25zLmdldCgpLAog
ICAgIH07CiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHVwZGF0ZVNw
ZWxsaW5nUGFuZWxXaXRoR3JhbW1hclN0cmluZzpiYWRHcmFtbWFyUGhyYXNlIGRldGFpbDpkaWN0
aW9uYXJ5XTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQppbmRleCA2N2RhZTZhN2I3
ZmNmZTE5NDc0M2RhOTVjMzZkMDg0M2JjZmI1N2U2Li44MjFhNmZkNGJkNGNkMzk4NGMzZDMyODMw
YzAwZjQxNTE1MGQ4ZTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCkBAIC0zNiw2
ICszNiw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL05vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFj
ay5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg+CiAjaW1wb3J0
IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNv
Y29hLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC04OCwxNyArODksMTQgQEAg
dm9pZCBXZWJOb3RpZmljYXRpb25DbGllbnQ6OmNsZWFyTm90aWZpY2F0aW9ucyhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIGlmIChpdCA9PSBtX25vdGlmaWNhdGlvbkNvbnRl
eHRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBWZWN0b3I8UmV0YWluUHRy
PFdlYk5vdGlmaWNhdGlvbj4+JiB3ZWJOb3RpZmljYXRpb25zID0gaXQtPnZhbHVlOwotICAgIE5T
TXV0YWJsZUFycmF5ICpuc0lEcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgc2l6ZV90
IGNvdW50ID0gd2ViTm90aWZpY2F0aW9ucy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFdlYk5vdGlmaWNhdGlvbiAqd2ViTm90aWZpY2F0
aW9uID0gd2ViTm90aWZpY2F0aW9uc1tpXS5nZXQoKTsKLSAgICAgICAgW25zSURzIGFkZE9iamVj
dDpbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkTG9uZ0xvbmc6W3dlYk5vdGlmaWNhdGlvbiBu
b3RpZmljYXRpb25JRF1dXTsKLSAgICAgICAgY29yZSh3ZWJOb3RpZmljYXRpb24pLT5maW5hbGl6
ZSgpOwotICAgICAgICBtX25vdGlmaWNhdGlvbk1hcC5yZW1vdmUoY29yZSh3ZWJOb3RpZmljYXRp
b24pKTsKLSAgICB9Ci0KLSAgICBbW21fd2ViVmlldyBfbm90aWZpY2F0aW9uUHJvdmlkZXJdIGNs
ZWFyTm90aWZpY2F0aW9uczpuc0lEc107CisgICAgYXV0byBmaW5hbGl6ZWROb3RpZmljYXRpb25J
RHMgPSBjcmVhdGVOU0FycmF5KGl0LT52YWx1ZSwgWyZdIChhdXRvJiBub3RpZmljYXRpb24pIHsK
KyAgICAgICAgYXV0byYgY29yZU5vdGlmaWNhdGlvbiA9ICpjb3JlKG5vdGlmaWNhdGlvbi5nZXQo
KSk7CisgICAgICAgIGNvcmVOb3RpZmljYXRpb24uZmluYWxpemUoKTsKKyAgICAgICAgbV9ub3Rp
ZmljYXRpb25NYXAucmVtb3ZlKCZjb3JlTm90aWZpY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuIEAo
W25vdGlmaWNhdGlvbiBub3RpZmljYXRpb25JRF0pOworICAgIH0pOworCisgICAgW1ttX3dlYlZp
ZXcgX25vdGlmaWNhdGlvblByb3ZpZGVyXSBjbGVhck5vdGlmaWNhdGlvbnM6ZmluYWxpemVkTm90
aWZpY2F0aW9uSURzLmdldCgpXTsKICAgICBtX25vdGlmaWNhdGlvbkNvbnRleHRNYXAucmVtb3Zl
KGl0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJBcmNoaXZlLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJBcmNoaXZl
Lm1tCmluZGV4IDhlYmZiNTNlOTE0YmZlZWVlNzMzOGU2NjAzNjk3OGVmYmE1YjJiZDEuLjgxNjJh
MzE0ZTlkOGFmODgwODQ2OGQ3YmU1YmZlMWVmOTJhNjlmYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViQXJjaGl2ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkFyY2hpdmUubW0KQEAgLTQwLDYgKzQwLDcgQEAKICNpbXBv
cnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNv
Y29hLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0yODAsMTkgKzI4MSwxMyBA
QCAtIChOU0FycmF5ICopc3VicmVzb3VyY2VzCiAgICAgLy8gQ3VycmVudGx5IGZyb20gV2ViS2l0
IEFQSSBwZXJzcGVjdGl2ZSwgV2ViQXJjaGl2ZXMgYXJlIGVudGlyZWx5IGltbXV0YWJsZSBvbmNl
IGNyZWF0ZWQKICAgICAvLyBJZiB0aGV5IGV2ZXIgYmVjb21lIG11dGFibGUsIHdlJ2xsIG5lZWQg
dG8gcmV0aGluayB0aGlzLiAgICAgCiAgICAgaWYgKCFfcHJpdmF0ZS0+Y2FjaGVkU3VicmVzb3Vy
Y2VzKSB7Ci0gICAgICAgIExlZ2FjeVdlYkFyY2hpdmUqIGNvcmVBcmNoaXZlID0gW19wcml2YXRl
IGNvcmVBcmNoaXZlXTsKKyAgICAgICAgYXV0byBjb3JlQXJjaGl2ZSA9IFtfcHJpdmF0ZSBjb3Jl
QXJjaGl2ZV07CiAgICAgICAgIGlmICghY29yZUFyY2hpdmUpCiAgICAgICAgICAgICBfcHJpdmF0
ZS0+Y2FjaGVkU3VicmVzb3VyY2VzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0XTsKICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBhdXRvJiBzdWJyZXNvdXJjZXMgPSBjb3JlQXJjaGl2ZS0+c3Vi
cmVzb3VyY2VzKCk7Ci0gICAgICAgICAgICBOU011dGFibGVBcnJheSAqbXV0YWJsZUFycmF5ID0g
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzdWJyZXNvdXJjZXMuc2l6
ZSgpXTsKLSAgICAgICAgICAgIF9wcml2YXRlLT5jYWNoZWRTdWJyZXNvdXJjZXMgPSBtdXRhYmxl
QXJyYXk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHN1YnJlc291cmNlIDogc3VicmVzb3VyY2Vz
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVz
b3VyY2UgYWxsb2NdIF9pbml0V2l0aENvcmVSZXNvdXJjZTpzdWJyZXNvdXJjZS5nZXQoKV0pIHsK
LSAgICAgICAgICAgICAgICAgICAgW211dGFibGVBcnJheSBhZGRPYmplY3Q6cmVzb3VyY2VdOwot
ICAgICAgICAgICAgICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQorICAgICAgICAgICAgX3ByaXZhdGUtPmNhY2hlZFN1YnJlc291cmNl
cyA9IGNyZWF0ZU5TQXJyYXkoY29yZUFyY2hpdmUtPnN1YnJlc291cmNlcygpLCBbXSAoYXV0byYg
c3VicmVzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHROUyhbW1dlYlJlc291
cmNlIGFsbG9jXSBfaW5pdFdpdGhDb3JlUmVzb3VyY2U6c3VicmVzb3VyY2UuZ2V0KCldKTsKKyAg
ICAgICAgICAgIH0pLmxlYWtSZWYoKTsKICAgICAgICAgfQogICAgIH0KICAgICAvLyBNYWludGFp
biB0aGUgV2ViS2l0IDMgYmVoYXZpb3Igb2YgdGhpcyBBUEksIHdoaWNoIGlzIGRvY3VtZW50ZWQg
YW5kCkBAIC0zMTEsMTQgKzMwNiw5IEBAIC0gKE5TQXJyYXkgKilzdWJmcmFtZUFyY2hpdmVzCiAg
ICAgICAgIGlmICghY29yZUFyY2hpdmUpCiAgICAgICAgICAgICBfcHJpdmF0ZS0+Y2FjaGVkU3Vi
ZnJhbWVBcmNoaXZlcyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdF07CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgYXV0byYgc3ViZnJhbWVBcmNoaXZlcyA9IGNvcmVBcmNoaXZlLT5zdWJmcmFt
ZUFyY2hpdmVzKCk7Ci0gICAgICAgICAgICBhdXRvIG11dGFibGVBcnJheSA9IFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c3ViZnJhbWVBcmNoaXZlcy5zaXplKCldOwot
ICAgICAgICAgICAgX3ByaXZhdGUtPmNhY2hlZFN1YmZyYW1lQXJjaGl2ZXMgPSBtdXRhYmxlQXJy
YXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3ViZnJhbWVBcmNoaXZl
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIFdlYkFyY2hpdmUgKmFyY2hpdmUgPSBb
W1dlYkFyY2hpdmUgYWxsb2NdIF9pbml0V2l0aENvcmVMZWdhY3lXZWJBcmNoaXZlOnN0YXRpY19j
YXN0PExlZ2FjeVdlYkFyY2hpdmUqPihzdWJmcmFtZUFyY2hpdmVzW2ldLnB0cigpKV07Ci0gICAg
ICAgICAgICAgICAgW211dGFibGVBcnJheSBhZGRPYmplY3Q6YXJjaGl2ZV07Ci0gICAgICAgICAg
ICAgICAgW2FyY2hpdmUgcmVsZWFzZV07Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBfcHJp
dmF0ZS0+Y2FjaGVkU3ViZnJhbWVBcmNoaXZlcyA9IGNyZWF0ZU5TQXJyYXkoY29yZUFyY2hpdmUt
PnN1YmZyYW1lQXJjaGl2ZXMoKSwgW10gKGF1dG8mIGFyY2hpdmUpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYWRvcHROUyhbW1dlYkFyY2hpdmUgYWxsb2NdIF9pbml0V2l0aENvcmVMZWdhY3lX
ZWJBcmNoaXZlOnN0YXRpY19jYXN0PExlZ2FjeVdlYkFyY2hpdmUqPihhcmNoaXZlLnB0cigpKV0p
OworICAgICAgICAgICAgfSkubGVha1JlZigpOwogICAgICAgICB9CiAgICAgfQogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCmluZGV4
IGJiMDI3NjkzYzI1YTZiYzYzODY0M2QwZWVjMjY0YTQyNTBlNDNiNzkuLjY1OGRkNGUxMTEzY2Vi
ZjU5NjI4NGJjZDcyMDU2MDlhODdmYThjMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0KQEAgLTU0OCwxMyArNTQ4LDkgQEAgLSAoV2Vi
UmVzb3VyY2UgKiltYWluUmVzb3VyY2UKIAogLSAoTlNBcnJheSAqKXN1YnJlc291cmNlcwogewot
ICAgIGF1dG8gY29yZVN1YnJlc291cmNlcyA9IHRvUHJpdmF0ZShfcHJpdmF0ZSktPmxvYWRlci0+
c3VicmVzb3VyY2VzKCk7Ci0gICAgYXV0byBzdWJyZXNvdXJjZXMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29yZVN1YnJlc291cmNlcy5zaXplKCld
KTsKLSAgICBmb3IgKGF1dG8mIGNvcmVTdWJyZXNvdXJjZSA6IGNvcmVTdWJyZXNvdXJjZXMpIHsK
LSAgICAgICAgaWYgKGF1dG8gcmVzb3VyY2UgPSBhZG9wdE5TKFtbV2ViUmVzb3VyY2UgYWxsb2Nd
IF9pbml0V2l0aENvcmVSZXNvdXJjZTpjb3JlU3VicmVzb3VyY2UuY29weVJlZigpXSkpCi0gICAg
ICAgICAgICBbc3VicmVzb3VyY2VzIGFkZE9iamVjdDpyZXNvdXJjZS5nZXQoKV07Ci0gICAgfQot
ICAgIHJldHVybiBzdWJyZXNvdXJjZXMuYXV0b3JlbGVhc2UoKTsKKyAgICByZXR1cm4gY3JlYXRl
TlNBcnJheSh0b1ByaXZhdGUoX3ByaXZhdGUpLT5sb2FkZXItPnN1YnJlc291cmNlcygpLCBbXSAo
YXV0byYgcmVzb3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXZWJSZXNvdXJjZSBh
bGxvY10gX2luaXRXaXRoQ29yZVJlc291cmNlOnJlc291cmNlLmNvcHlSZWYoKV0pOworICAgIH0p
LmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKFdlYlJlc291cmNlICopc3VicmVzb3VyY2VGb3JVUkw6
KE5TVVJMICopVVJMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQppbmRleCA0M2JmZGVlOTY2ZWQ3YTdhZTY3Njg5N2I5ZWNkOTkyYWQyOWY4YWFlLi41MzY3M2U5
ZTJmNWVkM2JmNGNhNTEyNGM5MmY0MTZjZjNjMzcyZWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTU3MywxNSArNTczLDYgQEAgLSAodm9pZClf
c2V0SXNDb21taXR0aW5nOihCT09MKXZhbHVlCiAKICNlbmRpZgogCi0tIChOU0FycmF5ICopX25v
ZGVzRnJvbUxpc3Q6KFZlY3RvcjxXZWJDb3JlOjpOb2RlKj4gKilub2Rlc1ZlY3RvcgotewotICAg
IHNpemVfdCBzaXplID0gbm9kZXNWZWN0b3ItPnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSAq
bm9kZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2l6ZV07Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIFtub2RlcyBhZGRPYmplY3Q6
a2l0KCgqbm9kZXNWZWN0b3IpW2ldKV07Ci0gICAgcmV0dXJuIG5vZGVzOwotfQotCiAtIChOU1N0
cmluZyAqKV9zZWxlY3RlZFN0cmluZwogewogICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKF9wcml2YXRlLT5jb3JlRnJhbWUtPmVk
aXRvcigpLnNlbGVjdGVkVGV4dCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KaW5kZXggMTAzM2M5ZmZkNTY0
MWI5MDZkMzczNjc4YjVmYmY0NzZhZjJiN2JmZi4uYWQ3NzFjMTY1MDYyYTM1ZWU1MjYyYjU4NDAw
MTFlMjI5MGE1OWU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KQEAgLTY1LDYgKzY1LDcgQEAKICNpbXBv
cnQgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNp
bXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2Nv
YS5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKQEAgLTI3NCw3ICsyNzUsNyBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilh
dHRyaWJ1dGVkU3RyaW5nRnJvbTooRE9NTm9kZSAqKXN0YXJ0Tm9kZSBzdGFydE9mZnNldDooaQog
c3RhdGljIEhUTUxGb3JtRWxlbWVudCogZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChET01FbGVt
ZW50ICplbGVtZW50KQogewogICAgIEVsZW1lbnQqIG5vZGUgPSBjb3JlKGVsZW1lbnQpOwotICAg
IHJldHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykgPyBzdGF0aWNfY2FzdDxI
VE1MRm9ybUVsZW1lbnQqPihub2RlKSA6IDA7CisgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFz
VGFnTmFtZShmb3JtVGFnKSA/IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KG5vZGUpIDog
bnVsbHB0cjsKIH0KIAogLSAoRE9NRWxlbWVudCAqKWVsZW1lbnRXaXRoTmFtZTooTlNTdHJpbmcg
KiluYW1lIGluRm9ybTooRE9NRWxlbWVudCAqKWZvcm0KQEAgLTMxNiw4ICszMTcsOCBAQCAtIChC
T09MKWVsZW1lbnRJc1Bhc3N3b3JkOihET01FbGVtZW50ICopZWxlbWVudAogCiAtIChET01FbGVt
ZW50ICopZm9ybUZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50CiB7Ci0gICAgSFRNTElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQoZWxl
bWVudCk7Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCA/IGtpdChpbnB1dEVsZW1lbnQtPmZvcm0o
KSkgOiAwOworICAgIGF1dG8gaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtZW50RnJvbURPTUVsZW1l
bnQoZWxlbWVudCk7CisgICAgcmV0dXJuIGlucHV0RWxlbWVudCA/IGtpdChpbnB1dEVsZW1lbnQt
PmZvcm0oKSkgOiBuaWw7CiB9CiAKIC0gKERPTUVsZW1lbnQgKiljdXJyZW50Rm9ybQpAQCAtMzI3
LDIzICszMjgsMTggQEAgLSAoRE9NRWxlbWVudCAqKWN1cnJlbnRGb3JtCiAKIC0gKE5TQXJyYXkg
Kiljb250cm9sc0luRm9ybTooRE9NRWxlbWVudCAqKWZvcm0KIHsKLSAgICBIVE1MRm9ybUVsZW1l
bnQqIGZvcm1FbGVtZW50ID0gZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChmb3JtKTsKKyAgICBh
dXRvIGZvcm1FbGVtZW50ID0gZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChmb3JtKTsKICAgICBp
ZiAoIWZvcm1FbGVtZW50KQogICAgICAgICByZXR1cm4gbmlsOwotICAgIE5TTXV0YWJsZUFycmF5
ICpyZXN1bHRzID0gbmlsOwogCiAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJl
YWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOwotICAgIGZvciAoYXV0byYgd2Vha0VsZW1lbnQgOiBm
b3JtRWxlbWVudC0+dW5zYWZlQXNzb2NpYXRlZEVsZW1lbnRzKCkpIHsKKyAgICBhdXRvIHJlc3Vs
dCA9IGNyZWF0ZU5TQXJyYXkoZm9ybUVsZW1lbnQtPnVuc2FmZUFzc29jaWF0ZWRFbGVtZW50cygp
LCBbXSAoYXV0byYgd2Vha0VsZW1lbnQpIC0+IERPTUVsZW1lbnQgKiB7CiAgICAgICAgIGF1dG8g
Y29yZUVsZW1lbnQgPSBtYWtlUmVmUHRyKHdlYWtFbGVtZW50LmdldCgpKTsKLSAgICAgICAgaWYg
KGNvcmVFbGVtZW50LT5hc0Zvcm1Bc3NvY2lhdGVkRWxlbWVudCgpLT5pc0VudW1lcmF0YWJsZSgp
KSB7IC8vIFNraXAgb3B0aW9uIGVsZW1lbnRzLCBvdGhlciBkdWRzCi0gICAgICAgICAgICBET01F
bGVtZW50ICplbGVtZW50ID0ga2l0KGNvcmVFbGVtZW50LmdldCgpKTsKLSAgICAgICAgICAgIGlm
ICghcmVzdWx0cykKLSAgICAgICAgICAgICAgICByZXN1bHRzID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5V2l0aE9iamVjdDplbGVtZW50XTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBbcmVzdWx0cyBhZGRPYmplY3Q6ZWxlbWVudF07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdHM7CisgICAgICAgIGlmICghY29yZUVsZW1lbnQtPmFzRm9ybUFzc29jaWF0ZWRF
bGVtZW50KCktPmlzRW51bWVyYXRhYmxlKCkpIC8vIFNraXAgb3B0aW9uIGVsZW1lbnRzLCBvdGhl
ciBkdWRzCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4ga2l0KGNvcmVF
bGVtZW50LmdldCgpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gW3Jlc3VsdCBjb3VudF0gPyByZXN1
bHQuYXV0b3JlbGVhc2UoKSA6IG5pbDsKIH0KIAogLy8gRWl0aGVyIGdldCBjYWNoZWQgcmVnZXhw
IG9yIGJ1aWxkIG9uZSB0aGF0IG1hdGNoZXMgYW55IG9mIHRoZSBsYWJlbHMuCkBAIC00MjMsMTIg
KzQxOSwxMiBAQCBzdGF0aWMgTlNTdHJpbmcqIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQo
RnJhbWUqIGZyYW1lLCBOU0FycmF5KiBsYWJlbHMsIEVsZQogICAgIEFTU0VSVChlbGVtZW50KTsK
ICAgICBSZWd1bGFyRXhwcmVzc2lvbiogcmVnRXhwID0gcmVnRXhwRm9yTGFiZWxzKGxhYmVscyk7
CiAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgYWZ0ZXIgd2UndmUgc2VlbiB0aGlzIG1hbnkgY2hh
cnMKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgY2hhcnNTZWFyY2hlZFRocmVzaG9sZCA9IDUwMDsK
KyAgICBjb25zdGV4cHIgdW5zaWduZWQgY2hhcnNTZWFyY2hlZFRocmVzaG9sZCA9IDUwMDsKICAg
ICAvLyBUaGlzIGlzIHRoZSBhYnNvbHV0ZSBtYXggd2Ugc2VhcmNoLiAgV2UgYWxsb3cgYSBsaXR0
bGUgbW9yZSBzbG9wIHRoYW4KICAgICAvLyBjaGFyc1NlYXJjaGVkVGhyZXNob2xkLCB0byBtYWtl
IGl0IG1vcmUgbGlrZWx5IHRoYXQgd2UnbGwgc2VhcmNoIHdob2xlIG5vZGVzLgotICAgIGNvbnN0
IHVuc2lnbmVkIGludCBtYXhDaGFyc1NlYXJjaGVkID0gNjAwOworICAgIGNvbnN0ZXhwciB1bnNp
Z25lZCBtYXhDaGFyc1NlYXJjaGVkID0gNjAwOwogICAgIC8vIElmIHRoZSBzdGFydGluZyBlbGVt
ZW50IGlzIHdpdGhpbiBhIHRhYmxlLCB0aGUgY2VsbCB0aGF0IGNvbnRhaW5zIGl0Ci0gICAgSFRN
TFRhYmxlQ2VsbEVsZW1lbnQqIHN0YXJ0aW5nVGFibGVDZWxsID0gMDsKKyAgICBIVE1MVGFibGVD
ZWxsRWxlbWVudCogc3RhcnRpbmdUYWJsZUNlbGwgPSBudWxscHRyOwogICAgIGJvb2wgc2VhcmNo
ZWRDZWxsQWJvdmUgPSBmYWxzZTsKICAgICAKICAgICBpZiAocmVzdWx0RGlzdGFuY2UpCkBAIC00
NDcsOCArNDQzLDggQEAgc3RhdGljIE5TU3RyaW5nKiBzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVt
ZW50KEZyYW1lKiBmcmFtZSwgTlNBcnJheSogbGFiZWxzLCBFbGUKICAgICAgICAgaWYgKG4tPmhh
c1RhZ05hbWUodGRUYWcpICYmICFzdGFydGluZ1RhYmxlQ2VsbCkgewogICAgICAgICAgICAgc3Rh
cnRpbmdUYWJsZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudCo+KG4pOwog
ICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUodHJUYWcpICYmIHN0YXJ0aW5nVGFibGVD
ZWxsKSB7Ci0gICAgICAgICAgICBOU1N0cmluZyogcmVzdWx0ID0gZnJhbWUtPnNlYXJjaEZvckxh
YmVsc0Fib3ZlQ2VsbCgqcmVnRXhwLCBzdGFydGluZ1RhYmxlQ2VsbCwgcmVzdWx0RGlzdGFuY2Up
OwotICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBbcmVzdWx0IGxlbmd0aF0gPiAwKSB7CisgICAg
ICAgICAgICBOU1N0cmluZyAqcmVzdWx0ID0gZnJhbWUtPnNlYXJjaEZvckxhYmVsc0Fib3ZlQ2Vs
bCgqcmVnRXhwLCBzdGFydGluZ1RhYmxlQ2VsbCwgcmVzdWx0RGlzdGFuY2UpOworICAgICAgICAg
ICAgaWYgKFtyZXN1bHQgbGVuZ3RoXSkgewogICAgICAgICAgICAgICAgIGlmIChyZXN1bHRJc0lu
Q2VsbEFib3ZlKQogICAgICAgICAgICAgICAgICAgICAqcmVzdWx0SXNJbkNlbGxBYm92ZSA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQ3Myw4ICs0NjksOCBAQCBz
dGF0aWMgTlNTdHJpbmcqIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQoRnJhbWUqIGZyYW1l
LCBOU0FycmF5KiBsYWJlbHMsIEVsZQogICAgIC8vIElmIHdlIHN0YXJ0ZWQgaW4gYSBjZWxsLCBi
dXQgYmFpbGVkIGJlY2F1c2Ugd2UgZm91bmQgdGhlIHN0YXJ0IG9mIHRoZSBmb3JtIG9yIHRoZQog
ICAgIC8vIHByZXZpb3VzIGVsZW1lbnQsIHdlIHN0aWxsIG1pZ2h0IG5lZWQgdG8gc2VhcmNoIHRo
ZSByb3cgYWJvdmUgdXMgZm9yIGEgbGFiZWwuCiAgICAgaWYgKHN0YXJ0aW5nVGFibGVDZWxsICYm
ICFzZWFyY2hlZENlbGxBYm92ZSkgewotICAgICAgICBOU1N0cmluZyogcmVzdWx0ID0gZnJhbWUt
PnNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbCgqcmVnRXhwLCBzdGFydGluZ1RhYmxlQ2VsbCwgcmVz
dWx0RGlzdGFuY2UpOwotICAgICAgICBpZiAocmVzdWx0ICYmIFtyZXN1bHQgbGVuZ3RoXSA+IDAp
IHsKKyAgICAgICAgTlNTdHJpbmcgKnJlc3VsdCA9IGZyYW1lLT5zZWFyY2hGb3JMYWJlbHNBYm92
ZUNlbGwoKnJlZ0V4cCwgc3RhcnRpbmdUYWJsZUNlbGwsIHJlc3VsdERpc3RhbmNlKTsKKyAgICAg
ICAgaWYgKFtyZXN1bHQgbGVuZ3RoXSkgewogICAgICAgICAgICAgaWYgKHJlc3VsdElzSW5DZWxs
QWJvdmUpCiAgICAgICAgICAgICAgICAgKnJlc3VsdElzSW5DZWxsQWJvdmUgPSB0cnVlOwogICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTUzNiw3ICs1MzIsNyBAQCBzdGF0aWMgTlNTdHJp
bmcgKm1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lbnQoTlNBcnJheSAqbGFiZWxzLCBFbGVtZW50KiBl
bGVtZW50KQogCiAtIChOU1N0cmluZyAqKXNlYXJjaEZvckxhYmVsczooTlNBcnJheSAqKWxhYmVs
cyBiZWZvcmVFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudAogewotICAgIHJldHVybiBbc2Vs
ZiBzZWFyY2hGb3JMYWJlbHM6bGFiZWxzIGJlZm9yZUVsZW1lbnQ6ZWxlbWVudCByZXN1bHREaXN0
YW5jZTowIHJlc3VsdElzSW5DZWxsQWJvdmU6MF07CisgICAgcmV0dXJuIFtzZWxmIHNlYXJjaEZv
ckxhYmVsczpsYWJlbHMgYmVmb3JlRWxlbWVudDplbGVtZW50IHJlc3VsdERpc3RhbmNlOm51bGxw
dHIgcmVzdWx0SXNJbkNlbGxBYm92ZTpudWxscHRyXTsKIH0KIAogLSAoTlNTdHJpbmcgKilzZWFy
Y2hGb3JMYWJlbHM6KE5TQXJyYXkgKilsYWJlbHMgYmVmb3JlRWxlbWVudDooRE9NRWxlbWVudCAq
KWVsZW1lbnQgcmVzdWx0RGlzdGFuY2U6KE5TVUludGVnZXIqKW91dERpc3RhbmNlIHJlc3VsdElz
SW5DZWxsQWJvdmU6KEJPT0wqKW91dElzSW5DZWxsQWJvdmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDUyMGVhNTY2NGFmMjg3NTY5YTg1
NWM3NGI4MWNlYTU0YzdlOGUyMDIuLjRiNmExMTVmYzkzNjM3ZDM4M2VhZGNkZTU4ZGViYzlkNWFm
ZWQ5YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbQpAQCAtMzY0MSw3ICszNjQxLDEyIEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNNZW51SXRlbT4g
Y3JlYXRlU2hhcmVNZW51SXRlbShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiBoCiAgICAg
cmV0dXJuIFtOU01lbnVJdGVtIHN0YW5kYXJkU2hhcmVNZW51SXRlbUZvckl0ZW1zOml0ZW1zLmdl
dCgpXTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gY3JlYXRlTWVudUl0
ZW1zKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29udGV4dE1lbnVJdGVtPiYpOworc3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gY3Jl
YXRlTWVudUl0ZW1zKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0+JiBpdGVtcykKK3sKKyAgICBy
ZXR1cm4gY3JlYXRlTlNBcnJheShpdGVtcywgWyZdIChhdXRvJiBpdGVtKSB7CisgICAgICAgIHJl
dHVybiBjcmVhdGVNZW51SXRlbShoaXRUZXN0UmVzdWx0LCBpdGVtKTsKKyAgICB9KTsKK30KIAog
c3RhdGljIFJldGFpblB0cjxOU01lbnVJdGVtPiBjcmVhdGVNZW51SXRlbShjb25zdCBXZWJDb3Jl
OjpIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBjb25zdCBXZWJDb3JlOjpDb250ZXh0TWVu
dUl0ZW0mIGl0ZW0pCiB7CkBAIC0zNjY4LDggKzM2NzMsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5T
TWVudUl0ZW0+IGNyZWF0ZU1lbnVJdGVtKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmIGhp
dFRlcwogICAgIGNhc2UgV2ViQ29yZTo6U3VibWVudVR5cGU6IHsKICAgICAgICAgYXV0byBtZW51
ID0gYWRvcHROUyhbW05TTWVudSBhbGxvY10gaW5pdF0pOwogCi0gICAgICAgIGF1dG8gc3VibWVu
dUl0ZW1zID0gY3JlYXRlTWVudUl0ZW1zKGhpdFRlc3RSZXN1bHQsIGl0ZW0uc3ViTWVudUl0ZW1z
KCkpOwotICAgICAgICBmb3IgKE5TTWVudUl0ZW0gKm1lbnVJdGVtIGluIHN1Ym1lbnVJdGVtcy5n
ZXQoKSkKKyAgICAgICAgZm9yIChOU01lbnVJdGVtICptZW51SXRlbSBpbiBjcmVhdGVNZW51SXRl
bXMoaGl0VGVzdFJlc3VsdCwgaXRlbS5zdWJNZW51SXRlbXMoKSkuZ2V0KCkpCiAgICAgICAgICAg
ICBbbWVudSBhZGRJdGVtOm1lbnVJdGVtXTsKIAogICAgICAgICBhdXRvIG1lbnVJdGVtID0gYWRv
cHROUyhbW05TTWVudUl0ZW0gYWxsb2NdIGluaXRXaXRoVGl0bGU6aXRlbS50aXRsZSgpIGFjdGlv
bjpudWxscHRyIGtleUVxdWl2YWxlbnQ6QCIiXSk7CkBAIC0zNjg0LDE4ICszNjg4LDYgQEAgc3Rh
dGljIFJldGFpblB0cjxOU01lbnVJdGVtPiBjcmVhdGVNZW51SXRlbShjb25zdCBXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0JiBoaXRUZXMKICAgICB9CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk+IGNyZWF0ZU1lbnVJdGVtcyhjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiBo
aXRUZXN0UmVzdWx0LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtPiYgaXRl
bXMpCi17Ci0gICAgYXV0byBtZW51SXRlbXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRdKTsKLQotICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7Ci0gICAgICAgIGlm
IChhdXRvIG1lbnVJdGVtID0gY3JlYXRlTWVudUl0ZW0oaGl0VGVzdFJlc3VsdCwgaXRlbSkpCi0g
ICAgICAgICAgICBbbWVudUl0ZW1zIGFkZE9iamVjdDptZW51SXRlbS5nZXQoKV07Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1lbnVJdGVtczsKLX0KLQogc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiBj
dXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyhXZWJWaWV3ICp3ZWJWaWV3LCBjb25zdCBXZWJDb3Jl
OjpDb250ZXh0TWVudSYgZGVmYXVsdE1lbnUpCiB7CiAgICAgY29uc3QgYXV0byYgaGl0VGVzdFJl
c3VsdCA9IHdlYlZpZXcucGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkuaGl0VGVzdFJlc3Vs
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDUw
NTNjZWE0OWEwYmU0MTYzZmUwOTNiMGI2MDljYzE1MjVkMjVmZGIuLjUzODU4NjdjNTQ3NDEyZDUz
OTY1MDVhYTg2YTQ3ODFkZTAyNjBlY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0KQEAgLTY5MiwxMSArNjkyLDcgQEAgLSAoV2ViVUlUZXh0SW5kaWNhdG9y
RGF0YSAqKWluaXRXaXRoSW1hZ2U6KENHSW1hZ2VSZWYpaW1hZ2UgdGV4dEluZGljYXRvckRhdGE6
KGMKICAgICBfZGF0YUludGVyYWN0aW9uSW1hZ2UgPSBbUEFMOjphbGxvY1VJSW1hZ2VJbnN0YW5j
ZSgpIGluaXRXaXRoQ0dJbWFnZTppbWFnZSBzY2FsZTpzY2FsZSBvcmllbnRhdGlvbjpVSUltYWdl
T3JpZW50YXRpb25Eb3duTWlycm9yZWRdOwogICAgIF9zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nv
b3JkaW5hdGVzID0gaW5kaWNhdG9yRGF0YS5zZWxlY3Rpb25SZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzOwogICAgIF90ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gaW5kaWNh
dG9yRGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzOwotCi0gICAgTlNN
dXRhYmxlQXJyYXkgKnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXldOwotICAgIGZvciAoYXV0byByZWN0IDogaW5kaWNhdG9yRGF0YS50ZXh0
UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKQotICAgICAgICBbdGV4dFJlY3RzSW5Cb3Vu
ZGluZ1JlY3RDb29yZGluYXRlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnJl
Y3RdXTsKLSAgICBfdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IFtbTlNBcnJh
eSBhcnJheVdpdGhBcnJheTp0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzXSByZXRh
aW5dOworICAgIF90ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzID0gY3JlYXRlTlNB
cnJheShpbmRpY2F0b3JEYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpLmxl
YWtSZWYoKTsKICAgICBfY29udGVudEltYWdlU2NhbGVGYWN0b3IgPSBpbmRpY2F0b3JEYXRhLmNv
bnRlbnRJbWFnZVNjYWxlRmFjdG9yOwogICAgIGlmIChpbmRpY2F0b3JEYXRhLmNvbnRlbnRJbWFn
ZVdpdGhIaWdobGlnaHQpCiAgICAgICAgIF9jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0ID0gW1BB
TDo6YWxsb2NVSUltYWdlSW5zdGFuY2UoKSBpbml0V2l0aENHSW1hZ2U6aW5kaWNhdG9yRGF0YS5j
b250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0LmdldCgpLT5uYXRpdmVJbWFnZSgpLmdldCgpIHNjYWxl
OnNjYWxlIG9yaWVudGF0aW9uOlVJSW1hZ2VPcmllbnRhdGlvbkRvd25NaXJyb3JlZF07CkBAIC00
MzUyLDYgKzQzNDgsNyBAQCArICh2b2lkKV9kb05vdFN0YXJ0T2JzZXJ2aW5nTmV0d29ya1JlYWNo
YWJpbGl0eQogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKICNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKQorCiAtIChOU0FycmF5ICopX3RvdWNoRXZlbnRSZWdpb25zCiB7CiAgICAgYXV0
byogZnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CkBAIC00MzY1LDM4ICs0MzYyLDMzIEBA
IC0gKE5TQXJyYXkgKilfdG91Y2hFdmVudFJlZ2lvbnMKICAgICBWZWN0b3I8V2ViQ29yZTo6SW50
UmVjdD4gcmVjdHM7CiAgICAgZG9jdW1lbnQtPmdldFRvdWNoUmVjdHMocmVjdHMpOwogCi0gICAg
aWYgKHJlY3RzLnNpemUoKSA9PSAwKQorICAgIGlmIChyZWN0cy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBuaWw7CiAKLSAgICBOU011dGFibGVBcnJheSAqZXZlbnRSZWdpb25BcnJheSA9IFtb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnJlY3RzLnNpemUoKV0gYXV0
b3JlbGVhc2VdOwotCiAgICAgTlNWaWV3IDxXZWJEb2N1bWVudFZpZXc+ICpkb2N1bWVudFZpZXcg
PSBbW1tzZWxmIG1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAgIFZlY3Rv
cjxXZWJDb3JlOjpJbnRSZWN0Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVjdHMuZW5kKCk7Ci0g
ICAgZm9yIChWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVj
dHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHJlY3QgPSAqaXQ7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocmVjdHMsIFsmXSAo
YXV0byYgcmVjdCkgLT4gUmV0YWluUHRyPFdlYkV2ZW50UmVnaW9uPiB7CiAgICAgICAgIGlmIChy
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJu
IG5pbDsKIAogICAgICAgICAvLyBUaGUgdG91Y2ggcmVjdGFuZ2xlcyBhcmUgaW4gdGhlIGNvb3Jk
aW5hdGUgc3lzdGVtIG9mIHRoZSBkb2N1bWVudCAoaW5zaWRlIHRoZSBXZWJIVE1MVmlldyksIHdo
aWNoIGlzIG5vdAogICAgICAgICAvLyB0aGUgc2FtZSBhcyB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0g
b2YgdGhlIFdlYlZpZXcuIFVJV2ViVmlldyBjdXJyZW50bHkgZXhwZWN0cyB2aWV3IGNvb3JkaW5h
dGVzLCBzbyB3ZSdsbAogICAgICAgICAvLyBjb252ZXJ0IHRoZW0gaGVyZSBub3cuCi0gICAgICAg
IFdlYkNvcmU6OkludFJlY3Qgdmlld1JlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KFtkb2N1bWVudFZp
ZXcgY29udmVydFJlY3Q6cmVjdCB0b1ZpZXc6c2VsZl0pOworICAgICAgICBhdXRvIHZpZXdSZWN0
ID0gW2RvY3VtZW50VmlldyBjb252ZXJ0UmVjdDpyZWN0IHRvVmlldzpzZWxmXTsKIAogICAgICAg
ICAvLyBUaGUgZXZlbnQgcmVnaW9uIHdhbnRzIHRoaXMgcG9pbnRzIGluIHRoaXMgb3JkZXI6CiAg
ICAgICAgIC8vICBwMi0tLS0tLXAzCiAgICAgICAgIC8vICB8ICAgICAgIHwKICAgICAgICAgLy8g
IHAxLS0tLS0tcDQKLSAgICAgICAgLy8KLSAgICAgICAgV2ViRXZlbnRSZWdpb24gKmV2ZW50UmVn
aW9uID0gW1tXZWJFdmVudFJlZ2lvbiBhbGxvY10gaW5pdFdpdGhQb2ludHM6V2ViQ29yZTo6Rmxv
YXRQb2ludCh2aWV3UmVjdC54KCksIHZpZXdSZWN0Lm1heFkoKSkKLSAgICAgICAgICAgIDogV2Vi
Q29yZTo6RmxvYXRQb2ludCh2aWV3UmVjdC54KCksIHZpZXdSZWN0LnkoKSkgOiBXZWJDb3JlOjpG
bG9hdFBvaW50KHZpZXdSZWN0Lm1heFgoKSwgdmlld1JlY3QueSgpKSA6IFdlYkNvcmU6OkZsb2F0
UG9pbnQodmlld1JlY3QubWF4WCgpLCB2aWV3UmVjdC5tYXhZKCkpXTsKLSAgICAgICAgaWYgKGV2
ZW50UmVnaW9uKSB7Ci0gICAgICAgICAgICBbZXZlbnRSZWdpb25BcnJheSBhZGRPYmplY3Q6ZXZl
bnRSZWdpb25dOwotICAgICAgICAgICAgW2V2ZW50UmVnaW9uIHJlbGVhc2VdOwotICAgICAgICB9
Ci0gICAgfQogCi0gICAgcmV0dXJuIGV2ZW50UmVnaW9uQXJyYXk7CisgICAgICAgIGF1dG8gcDEg
PSBDR1BvaW50TWFrZShDR1JlY3RHZXRNaW5YKHZpZXdSZWN0KSwgQ0dSZWN0R2V0TWF4WSh2aWV3
UmVjdCkpOworICAgICAgICBhdXRvIHAyID0gQ0dQb2ludE1ha2UoQ0dSZWN0R2V0TWluWCh2aWV3
UmVjdCksIENHUmVjdEdldE1pblkodmlld1JlY3QpKTsKKyAgICAgICAgYXV0byBwMyA9IENHUG9p
bnRNYWtlKENHUmVjdEdldE1heFgodmlld1JlY3QpLCBDR1JlY3RHZXRNaW5ZKHZpZXdSZWN0KSk7
CisgICAgICAgIGF1dG8gcDQgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNYXhYKHZpZXdSZWN0KSwg
Q0dSZWN0R2V0TWF4WSh2aWV3UmVjdCkpOworCisgICAgICAgIHJldHVybiBhZG9wdE5TKFtbV2Vi
RXZlbnRSZWdpb24gYWxsb2NdIGluaXRXaXRoUG9pbnRzOnAxIDpwMiA6cDMgOnA0XSk7CisgICAg
fSkuYXV0b3JlbGVhc2UoKTsKIH0KKwogI2VuZGlmIC8vIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAK
IC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBXZWJCYWNrRm9yd2FyZExp
c3QgQVBJLCB3ZSBob25vciBib3RoCkBAIC00NTY5LDIwICs0NTYxLDE0IEBAIC0gKHZvaWQpcmVz
ZXRUcmFja2VkUmVwYWludHMKICAgICAgICAgdmlldy0+cmVzZXRUcmFja2VkUmVwYWludHMoKTsK
IH0KIAotLSAoTlNBcnJheSopdHJhY2tlZFJlcGFpbnRSZWN0cworLSAoTlNBcnJheSAqKXRyYWNr
ZWRSZXBhaW50UmVjdHMKIHsKLSAgICBhdXRvKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVG
cmFtZV07Ci0gICAgYXV0byogdmlldyA9IGNvcmVGcmFtZS0+dmlldygpOworICAgIGF1dG8gdmll
dyA9IHNlbGYuX21haW5Db3JlRnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcgfHwgIXZpZXct
PmlzVHJhY2tpbmdSZXBhaW50cygpKQogICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHJlcGFpbnRSZWN0cyA9IHZpZXctPnRyYWNrZWRS
ZXBhaW50UmVjdHMoKTsKLSAgICBOU011dGFibGVBcnJheSogcmVjdHNBcnJheSA9IFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cmVwYWludFJlY3RzLnNpemUoKV07Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVwYWludFJlY3RzLnNpemUoKTsgKytpKQot
ICAgICAgICBbcmVjdHNBcnJheSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoUmVjdDpzbmFw
cGVkSW50UmVjdChXZWJDb3JlOjpMYXlvdXRSZWN0KHJlcGFpbnRSZWN0c1tpXSkpXV07Ci0KLSAg
ICByZXR1cm4gW3JlY3RzQXJyYXkgYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBjcmVhdGVOU0Fy
cmF5KHZpZXctPnRyYWNrZWRSZXBhaW50UmVjdHMoKSwgW10gKGF1dG8mIHJlY3QpIHsKKyAgICAg
ICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6c25hcHBlZEludFJlY3QoV2ViQ29yZTo6
TGF5b3V0UmVjdCB7IHJlY3QgfSldOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKICNpZiAh
UExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTEwMTk5LDEzICsxMDE4NSw5IEBAIC0gKE5TQXJyYXk8
RE9NRWxlbWVudCAqPiAqKV9lZGl0YWJsZUVsZW1lbnRzSW5SZWN0OihDR1JlY3QpcmVjdAogICAg
IGF1dG8qIHBhZ2UgPSBjb3JlKHNlbGYpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJu
IEBbXTsKLSAgICBhdXRvIGNvcmVFbGVtZW50cyA9IHBhZ2UtPmVkaXRhYmxlRWxlbWVudHNJblJl
Y3QocmVjdCk7Ci0gICAgaWYgKGNvcmVFbGVtZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBAW107Ci0gICAgYXV0byByZXN1bHQgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6Y29yZUVsZW1lbnRzLnNpemUoKV0pOwotICAgIGZvciAoYXV0byYg
Y29yZUVsZW1lbnQgOiBjb3JlRWxlbWVudHMpCi0gICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0Omtp
dChjb3JlRWxlbWVudC5wdHIoKSldOwotICAgIHJldHVybiByZXN1bHQuYXV0b3JlbGVhc2UoKTsK
KyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShwYWdlLT5lZGl0YWJsZUVsZW1lbnRzSW5SZWN0KHJl
Y3QpLCBbXSAoYXV0byYgY29yZUVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIGtpdChjb3JlRWxl
bWVudC5wdHIoKSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAodm9pZClyZXZlYWxD
dXJyZW50U2VsZWN0aW9uCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFu
Z2VMb2cKaW5kZXggNWFhZDcyN2E0OGJkZTRiOTlmMjVhYmRhMjA4MTQ0MmY1ZmVlZTcyMi4uMjYw
YWI2ZTQyZDRiZTU3ZjJkNDY0MmMxZWIyZDA1NjBlNjdjMTIxYyAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA0
LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIFVz
ZSBjcmVhdGVOU0FycmF5IGluIG1hbnkgbW9yZSBwbGFjZXMgdGhhdCBidWlsZCBOU0FycmF5IG9i
amVjdHMgZnJvbSBDKysgY29sbGVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMDcwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCiAyMDIwLTA0LTE4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgRml4IGNsaWVudCBjZXJ0aWZpY2F0ZSBhdXRoZW50aWNhdGlv
biB3aGVuIHVzaW5nIG5vbi1kZWZhdWx0IFdLV2Vic2l0ZURhdGFTdG9yZXMKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCA5OTA2YTlmN2NmMzM4OTRkM2Ux
NWUzOWQyYWUxMDY2N2FlOWRiMTc2Li4zMzQ2M2I0NDNkYWRlNThmNDdlN2NmZmFmMjQ5MzcyOTFj
ZmVlYmI0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRy
ZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCkBA
IC05OSw2ICs5OSw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYv
VGhyZWFkaW5nLmg+CiAjaW1wb3J0IDx3dGYvVW5pcXVlQXJyYXkuaD4KKyNpbXBvcnQgPHd0Zi9j
b2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
I2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTUwOSwzMyArNTEwLDMxIEBAIHN0
YXRpYyB2b2lkIGFjdGl2YXRlU3lzdGVtQ29yZVdlYkZvbnRzKCkKIAogc3RhdGljIHZvaWQgYWN0
aXZhdGVUZXN0aW5nRm9udHMoKQogewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmb250RmlsZU5h
bWVzW10gPSB7Ci0gICAgICAgICJBSEVNX19fXy5UVEYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0
V2F0Y2hlcjEwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYiLAot
ICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjMwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjQwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjUwMC50dGYi
LAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjYwMC50dGYiLAotICAgICAgICAiV2ViS2l0
V2VpZ2h0V2F0Y2hlcjcwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50
dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYiLAotICAgICAgICAiRm9u
dFdpdGhGZWF0dXJlcy50dGYiLAotICAgICAgICAiRm9udFdpdGhGZWF0dXJlcy5vdGYiLAotICAg
ICAgICAwCisgICAgY29uc3RleHByIE5TU3RyaW5nICpmb250RmlsZU5hbWVzW10gPSB7CisgICAg
ICAgIEAiQUhFTV9fX18uVFRGIiwKKyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0
ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYiLAorICAgICAgICBAIldl
YktpdFdlaWdodFdhdGNoZXIzMDAudHRmIiwKKyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVy
NDAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjUwMC50dGYiLAorICAgICAg
ICBAIldlYktpdFdlaWdodFdhdGNoZXI2MDAudHRmIiwKKyAgICAgICAgQCJXZWJLaXRXZWlnaHRX
YXRjaGVyNzAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYiLAor
ICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmIiwKKyAgICAgICAgQCJGb250V2l0
aEZlYXR1cmVzLnR0ZiIsCisgICAgICAgIEAiRm9udFdpdGhGZWF0dXJlcy5vdGYiLAogICAgIH07
CiAKLSAgICBOU011dGFibGVBcnJheSAqZm9udFVSTHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXld
OwogICAgIE5TVVJMICpyZXNvdXJjZXNEaXJlY3RvcnkgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpA
IkR1bXBSZW5kZXJUcmVlLnJlc291cmNlcyIgcmVsYXRpdmVUb1VSTDpbW05TQnVuZGxlIG1haW5C
dW5kbGVdIGV4ZWN1dGFibGVVUkxdXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBmb250Rmls
ZU5hbWVzW2ldOyArK2kpIHsKLSAgICAgICAgTlNVUkwgKmZvbnRVUkwgPSBbcmVzb3VyY2VzRGly
ZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVU
RjhTdHJpbmc6Zm9udEZpbGVOYW1lc1tpXV0gaXNEaXJlY3Rvcnk6Tk9dOwotICAgICAgICBbZm9u
dFVSTHMgYWRkT2JqZWN0Oltmb250VVJMIGFic29sdXRlVVJMXV07Ci0gICAgfQorICAgIGF1dG8g
Zm9udFVSTHMgPSBjcmVhdGVOU0FycmF5KGZvbnRGaWxlTmFtZXMsIFsmXSAoTlNTdHJpbmcgKm5h
bWUpIHsKKyAgICAgICAgcmV0dXJuIFtyZXNvdXJjZXNEaXJlY3RvcnkgVVJMQnlBcHBlbmRpbmdQ
YXRoQ29tcG9uZW50Om5hbWUgaXNEaXJlY3Rvcnk6Tk9dLmFic29sdXRlVVJMOworICAgIH0pOwog
Ci0gICAgQ0ZBcnJheVJlZiBlcnJvcnMgPSAwOwotICAgIGlmICghQ1RGb250TWFuYWdlclJlZ2lz
dGVyRm9udHNGb3JVUkxzKChDRkFycmF5UmVmKWZvbnRVUkxzLCBrQ1RGb250TWFuYWdlclNjb3Bl
UHJvY2VzcywgJmVycm9ycykpIHsKKyAgICBDRkFycmF5UmVmIGVycm9ycyA9IG51bGxwdHI7Cisg
ICAgaWYgKCFDVEZvbnRNYW5hZ2VyUmVnaXN0ZXJGb250c0ZvclVSTHMoKENGQXJyYXlSZWYpZm9u
dFVSTHMuZ2V0KCksIGtDVEZvbnRNYW5hZ2VyU2NvcGVQcm9jZXNzLCAmZXJyb3JzKSkgewogICAg
ICAgICBOU0xvZyhAIkZhaWxlZCB0byBhY3RpdmF0ZSBmb250czogJUAiLCBlcnJvcnMpOwotICAg
ICAgICBDRlJlbGVhc2UoZXJyb3JzKTsKKyAgICAgICAgaWYgKGVycm9ycykKKyAgICAgICAgICAg
IENGUmVsZWFzZShlcnJvcnMpOwogICAgICAgICBleGl0KDEpOwogICAgIH0KIH0KQEAgLTU0NSw3
ICs1NDQsOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RGb250cygpCiAgICAgYWN0aXZhdGVTeXN0ZW1D
b3JlV2ViRm9udHMoKTsKICAgICBhY3RpdmF0ZVRlc3RpbmdGb250cygpOwogfQorCiAjZWxzZQor
CiBzdGF0aWMgdm9pZCBhY3RpdmF0ZUZvbnRJT1MoY29uc3QgdWludDhfdCogZm9udERhdGEsIHVu
c2lnbmVkIGxvbmcgbGVuZ3RoLCBzdGQ6OnN0cmluZyBzZWN0aW9uTmFtZSkKIHsKICAgICBDR0Rh
dGFQcm92aWRlclJlZiBkYXRhID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRy
LCBmb250RGF0YSwgbGVuZ3RoLCBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVs
ZWdhdGUubW0KaW5kZXggZDVmNGE0MmUxNjYzMzZkODljYmRkYzA5ZTU1YjQ1MjM1ZTUxNzJjYS4u
ZjY5OTU1NTFlMGNkYTEwZDRiMmI3OWY5MmJhNmRhMzRiZTM1N2I4OCAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL1VJRGVsZWdhdGUubW0KQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbXBvcnQgPFdlYktp
dC9XZWJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAog
I2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogRHVtcFJlbmRlclRyZWVEcmFnZ2luZ0luZm8gKmRy
YWdnaW5nSW5mbyA9IG5pbDsKQEAgLTM3NiwyMCArMzc3LDE4IEBAIC0gKHZvaWQpd2ViVmlldzoo
V2ViVmlldyAqKXNlbmRlciBydW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9uV2l0aFJlc3VsdExpc3Rl
bmVyOihpCiAgICAgfQogCiAgICAgTlNVUkwgKmJhc2VVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6Z1Rlc3RSdW5uZXItPnRlc3RVUkwoKS5j
X3N0cigpXV07Ci0gICAgYXV0byBmaWxlUGF0aHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6b3BlblBhbmVsRmlsZXMuc2l6ZSgpXSk7Ci0gICAgZm9y
IChhdXRvJiBmaWxlUGF0aCA6IG9wZW5QYW5lbEZpbGVzKSB7Ci0gICAgICAgIE5TVVJMICpmaWxl
VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJp
bmc6ZmlsZVBhdGguY19zdHIoKV0gcmVsYXRpdmVUb1VSTDpiYXNlVVJMXTsKLSAgICAgICAgW2Zp
bGVQYXRocyBhZGRPYmplY3Q6ZmlsZVVSTC5wYXRoXTsKLSAgICB9CisgICAgYXV0byBmaWxlUGF0
aHMgPSBjcmVhdGVOU0FycmF5KG9wZW5QYW5lbEZpbGVzLCBbJl0gKGNvbnN0IHN0ZDo6c3RyaW5n
JiBmaWxlUGF0aCkgeworICAgICAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNT
dHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6ZmlsZVBhdGguY19zdHIoKV0gcmVsYXRpdmVUb1VS
TDpiYXNlVVJMXS5wYXRoOworICAgIH0pOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBOU1VSTCAqZmlyc3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1N0cmluZyBzdHJp
bmdXaXRoVVRGOFN0cmluZzpvcGVuUGFuZWxGaWxlc1swXS5jX3N0cigpXSByZWxhdGl2ZVRvVVJM
OmJhc2VVUkxdOwogICAgIE5TU3RyaW5nICpkaXNwbGF5U3RyaW5nID0gZmlyc3RVUkwubGFzdFBh
dGhDb21wb25lbnQ7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y2hhcj4mIGljb25EYXRhID0gZ1Rl
c3RSdW5uZXItPm9wZW5QYW5lbEZpbGVzTWVkaWFJY29uKCk7CisgICAgYXV0byYgaWNvbkRhdGEg
PSBnVGVzdFJ1bm5lci0+b3BlblBhbmVsRmlsZXNNZWRpYUljb24oKTsKICAgICBDR0ltYWdlUmVm
IGltYWdlUmVmID0gbnVsbHB0cjsKICAgICBpZiAoIWljb25EYXRhLmVtcHR5KCkpIHsKLSAgICAg
ICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YVJlZiA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51
bGxwdHIsICh1bnNpZ25lZCBjaGFyICopaWNvbkRhdGEuZGF0YSgpLCBpY29uRGF0YS5zaXplKCkp
KTsKLSAgICAgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBpbWFnZVByb3ZpZGVyUmVm
ID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEoZGF0YVJlZi5nZXQoKSkp
OworICAgICAgICBhdXRvIGRhdGFSZWYgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oaWNvbkRhdGEuZGF0YSgpKSwgaWNvbkRhdGEu
c2l6ZSgpKSk7CisgICAgICAgIGF1dG8gaW1hZ2VQcm92aWRlclJlZiA9IGFkb3B0Q0YoQ0dEYXRh
UHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGRhdGFSZWYuZ2V0KCkpKTsKICAgICAgICAgaW1hZ2VS
ZWYgPSBDR0ltYWdlQ3JlYXRlV2l0aEpQRUdEYXRhUHJvdmlkZXIoaW1hZ2VQcm92aWRlclJlZi5n
ZXQoKSwgbnVsbHB0ciwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CiAgICAgfQog
I2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJz
L2NwcC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5Cmlu
ZGV4IGViYTgyZTFhMThiOWRkMzZjOGNkMDQ5ZTliMTI3MDdhN2I5MzU4Y2MuLjAyNzdkN2E0Njdm
NzhhMWQ0OTQ4MjQzZTJhZTQ5ZDIwYTQ5Mzc4NDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CkBAIC00OTgsNyArNDk4LDcgQEAgZGVmIGNyZWF0ZV9z
a2VsZXRvbl9wYXJhbWV0ZXJzKGFsbF9wYXJhbWV0ZXJzKToKIAogCiBkZWYgZmluZF9wYXJhbWV0
ZXJfbmFtZV9pbmRleChza2VsZXRvbl9wYXJhbWV0ZXIpOgotICAgICIiIkRldGVybWluZXMgd2hl
cmUgdGhlIHBhcmFtZXRlcmUgbmFtZSBzdGFydHMgZ2l2ZW4gdGhlIHNrZWxldG9uIHBhcmFtZXRl
ci4iIiIKKyAgICAiIiJEZXRlcm1pbmVzIHdoZXJlIHRoZSBwYXJhbWV0ZXIgbmFtZSBzdGFydHMg
Z2l2ZW4gdGhlIHNrZWxldG9uIHBhcmFtZXRlci4iIiIKICAgICAjIFRoZSBmaXJzdCBzcGFjZSBm
cm9tIHRoZSByaWdodCBpbiB0aGUgc2ltcGxpZmllZCBwYXJhbWV0ZXIgaXMgd2hlcmUgdGhlIHBh
cmFtZXRlcgogICAgICMgbmFtZSBzdGFydHMgdW5sZXNzIHRoZSBmaXJzdCBzcGFjZSBpcyBiZWZv
cmUgYW55IGNvbnRlbnQgaW4gdGhlIHNpbXBsaWZpZWQgcGFyYW1ldGVyLgogICAgIGJlZm9yZV9u
YW1lX2luZGV4ID0gc2tlbGV0b25fcGFyYW1ldGVyLnJzdHJpcCgpLnJmaW5kKCcgJykKQEAgLTE3
NzYsNiArMTc3Niw4IEBAIGRlZiBfY2hlY2tfcGFyYW1ldGVyX25hbWVfYWdhaW5zdF90ZXh0KHBh
cmFtZXRlciwgdGV4dCwgZXJyb3IpOgogICAgICMgY2FzZSBpbnNlbnNpdGl2ZSB3aGlsZSBzdGls
bCByZXRhaW5pbmcgd29yZCBicmVha3MuIChUaGlzIGVuc3VyZXMgdGhhdAogICAgICMgJ2VsYXRl
JyBkb2Vzbid0IGxvb2sgbGlrZSBpdCBpcyBkdXBsaWNhdGluZyBvZiAnTmF0ZUxhdGUnLikKICAg
ICBjYW5vbmljYWxfcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIubG93ZXJfd2l0aF91bmRlcnNj
b3Jlc19uYW1lKCkKKyAgICBpZiBjYW5vbmljYWxfcGFyYW1ldGVyX25hbWUgPT0gIl0iOgorICAg
ICAgICByZXR1cm4gVHJ1ZSAgIyBXb3JrIGFyb3VuZCBhIGJ1ZyBwYXJzaW5nIHNvbWUgT2JqZWN0
aXZlLUMgY29kZS4KIAogICAgICMgQXBwZW5kcyAib2JqZWN0IiB0byBhbGwgdGV4dCB0byBjYXRj
aCB2YXJpYWJsZXMgdGhhdCBkaWQgdGhlIHNhbWUgKGJ1dCBvbmx5CiAgICAgIyBkbyB0aGlzIHdo
ZW4gdGhlIHBhcmFtZXRlciBuYW1lIGlzIG1vcmUgdGhhbiBhIHNpbmdsZSBjaGFyYWN0ZXIgdG8g
YXZvaWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
Y29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KaW5kZXggZGIzYzI4OTMxZDA1
ZjU0MjA2YjFiZjVkNTI5ODE0ODQ5OThhYTI0MC4uYjViM2MyMjg2ZDQ5M2IyODM5OWJhNDE3Nzdk
NWRhNmUwZmRkNjk1NiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KQEAgLTMx
LDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1N0cmluZ0NGLmg+CiAjaW1wb3J0IDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0
Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgVVNFKEFQUEtJVCkKICNpbXBvcnQgPEFwcEtp
dC9BcHBLaXQuaD4KQEAgLTU0LDEwICs1NSwxMCBAQCBzdGF0aWMgTlNVUkwgKnJlc291cmNlc0Rp
cmVjdG9yeVVSTCgpCiAKIC8vIEFjdGl2YXRpbmcgc3lzdGVtIGNvcGllcyBvZiB0aGVzZSBmb250
cyBvdmVycmlkZXMgYW55IG90aGVycyB0aGF0IGNvdWxkIGJlIHByZWZlcnJlZCwgc3VjaCBhcyBv
bmVzCiAvLyBpbiAvTGlicmFyeS9Gb250cy9NaWNyb3NvZnQsIGFuZCB3aGljaCBkb24ndCBhbHdh
eXMgaGF2ZSB0aGUgc2FtZSBtZXRyaWNzLgotLy8gRklYTUU6IFN3aXRjaCB0byBhIHNvbHV0aW9u
IGZyb20gPHJkYXI6Ly9wcm9ibGVtLzE5NTUzNTUwPiBvbmNlIGl0J3MgYXZhaWxhYmxlLgorLy8g
RklYTUU6IE5vdyB0aGF0IDxyZGFyOi8vcHJvYmxlbS8xOTU1MzU1MD4gaGFzIGJlZW4gcmVzb2x2
ZWQgd2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgc29sdXRpb24uCiBzdGF0aWMgdm9pZCBhY3RpdmF0
ZVN5c3RlbUNvcmVXZWJGb250cygpCiB7Ci0gICAgTlNBcnJheSAqY29yZVdlYkZvbnROYW1lcyA9
IEBbCisgICAgY29uc3RleHByIE5TU3RyaW5nICpjb3JlV2ViRm9udE5hbWVzW10gPSB7CiAgICAg
ICAgIEAiQW5kYWxlIE1vbm8iLAogICAgICAgICBAIkFyaWFsIiwKICAgICAgICAgQCJBcmlhbCBC
bGFjayIsCkBAIC02OSw3ICs3MCw3IEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlU3lzdGVtQ29yZVdl
YkZvbnRzKCkKICAgICAgICAgQCJUcmVidWNoZXQgTVMiLAogICAgICAgICBAIlZlcmRhbmEiLAog
ICAgICAgICBAIldlYmRpbmdzIgotICAgIF07CisgICAgfTsKIAogICAgIE5TQXJyYXkgKmZvbnRG
aWxlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY29udGVudHNPZkRpcmVjdG9y
eUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvTGlicmFyeS9Gb250cyIgaXNEaXJlY3Rv
cnk6WUVTXQogICAgICAgICBpbmNsdWRpbmdQcm9wZXJ0aWVzRm9yS2V5czpAW05TVVJMRmlsZVJl
c291cmNlVHlwZUtleSwgTlNVUkxOYW1lS2V5XSBvcHRpb25zOjAgZXJyb3I6MF07CkBAIC04NSw3
ICs4Niw3IEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlU3lzdGVtQ29yZVdlYkZvbnRzKCkKIAogICAg
ICAgICAvLyBBY3RpdmF0ZSBhbGwgZm9udCB2YXJpYXRpb25zLCBzdWNoIGFzIEFyaWFsIEJvbGQg
SXRhbGljLnR0Zi4gVGhpcyBhbGdvcml0aG0gaXMgbm90IDEwMCUgcHJlY2lzZSwgYXMgaXQKICAg
ICAgICAgLy8gYWxzbyBhY3RpdmF0ZXMgZS5nLiBBcmlhbCBVbmljb2RlLCB3aGljaCBpcyBub3Qg
YSB2YXJpYXRpb24gb2YgQXJpYWwuCi0gICAgICAgIGZvciAoTlNTdHJpbmcgKmNvcmVXZWJGb250
TmFtZSBpbiBjb3JlV2ViRm9udE5hbWVzKSB7CisgICAgICAgIGZvciAoYXV0byYgY29yZVdlYkZv
bnROYW1lIDogY29yZVdlYkZvbnROYW1lcykgewogICAgICAgICAgICAgaWYgKFtmaWxlTmFtZSBo
YXNQcmVmaXg6Y29yZVdlYkZvbnROYW1lXSkgewogICAgICAgICAgICAgICAgIENGRXJyb3JSZWYg
ZXJyb3IgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIGlmICghQ1RGb250TWFuYWdlclJlZ2lz
dGVyRm9udHNGb3JVUkwoKF9fYnJpZGdlIENGVVJMUmVmKWZvbnRVUkwsIGtDVEZvbnRNYW5hZ2Vy
U2NvcGVQcm9jZXNzLCAmZXJyb3IpKSB7CkBAIC0xMDIsMzAgKzEwMywyNyBAQCBzdGF0aWMgdm9p
ZCBhY3RpdmF0ZVN5c3RlbUNvcmVXZWJGb250cygpCiAKIHZvaWQgYWN0aXZhdGVGb250cygpCiB7
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGaWxlTmFtZXNbXSA9IHsKLSAgICAgICAgIkFI
RU1fX19fLlRURiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0ZiIsCi0gICAg
ICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRX
YXRjaGVyMzAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyNDAwLnR0ZiIsCi0g
ICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyNTAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWln
aHRXYXRjaGVyNjAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyNzAwLnR0ZiIs
Ci0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRX
ZWlnaHRXYXRjaGVyOTAwLnR0ZiIsCi0gICAgICAgICJGb250V2l0aEZlYXR1cmVzLm90ZiIsCi0g
ICAgICAgICJGb250V2l0aEZlYXR1cmVzLnR0ZiIsCi0gICAgICAgIDAKKyAgICBjb25zdGV4cHIg
TlNTdHJpbmcgKmZvbnRGaWxlTmFtZXNbXSA9IHsKKyAgICAgICAgQCJBSEVNX19fXy5UVEYiLAor
ICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmIiwKKyAgICAgICAgQCJXZWJLaXRX
ZWlnaHRXYXRjaGVyMjAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjMwMC50
dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI0MDAudHRmIiwKKyAgICAgICAgQCJX
ZWJLaXRXZWlnaHRXYXRjaGVyNTAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0Y2hl
cjYwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI3MDAudHRmIiwKKyAgICAg
ICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0
V2F0Y2hlcjkwMC50dGYiLAorICAgICAgICBAIkZvbnRXaXRoRmVhdHVyZXMub3RmIiwKKyAgICAg
ICAgQCJGb250V2l0aEZlYXR1cmVzLnR0ZiIsCiAgICAgfTsKIAotICAgIE5TTXV0YWJsZUFycmF5
ICpmb250VVJMcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgZm9udEZpbGVOYW1lc1tpXTsgKytpKSB7Ci0gICAgICAgIE5TVVJMICpmb250VVJMID0g
W3Jlc291cmNlc0RpcmVjdG9yeVVSTCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbTlNT
dHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6Zm9udEZpbGVOYW1lc1tpXV0gaXNEaXJlY3Rvcnk6
Tk9dOwotICAgICAgICBbZm9udFVSTHMgYWRkT2JqZWN0Oltmb250VVJMIGFic29sdXRlVVJMXV07
Ci0gICAgfQorICAgIGF1dG8gZm9udFVSTHMgPSBjcmVhdGVOU0FycmF5KGZvbnRGaWxlTmFtZXMs
IFtdIChOU1N0cmluZyAqbmFtZSkgeworICAgICAgICByZXR1cm4gW3Jlc291cmNlc0RpcmVjdG9y
eVVSTCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpuYW1lIGlzRGlyZWN0b3J5Ok5PXS5h
YnNvbHV0ZVVSTDsKKyAgICB9KTsKIAogICAgIENGQXJyYXlSZWYgZXJyb3JzID0gbnVsbHB0cjsK
LSAgICBpZiAoIUNURm9udE1hbmFnZXJSZWdpc3RlckZvbnRzRm9yVVJMcygoX19icmlkZ2UgQ0ZB
cnJheVJlZilmb250VVJMcywga0NURm9udE1hbmFnZXJTY29wZVByb2Nlc3MsICZlcnJvcnMpKSB7
CisgICAgaWYgKCFDVEZvbnRNYW5hZ2VyUmVnaXN0ZXJGb250c0ZvclVSTHMoKF9fYnJpZGdlIENG
QXJyYXlSZWYpZm9udFVSTHMuZ2V0KCksIGtDVEZvbnRNYW5hZ2VyU2NvcGVQcm9jZXNzLCAmZXJy
b3JzKSkgewogICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBhY3RpdmF0ZSBmb250czogJUAiLCBl
cnJvcnMpOwogICAgICAgICBDRlJlbGVhc2UoZXJyb3JzKTsKICAgICAgICAgZXhpdCgxKTsKQEAg
LTEzMyw3ICsxMzEsNyBAQCB2b2lkIGFjdGl2YXRlRm9udHMoKQogCiAjaWYgVVNFKEFQUEtJVCkK
ICAgICBhY3RpdmF0ZVN5c3RlbUNvcmVXZWJGb250cygpOwotI2VuZGlmIC8vIFVTRShBUFBLSVQp
CisjZW5kaWYKIH0KIAogdm9pZCBpbnN0YWxsRmFrZUhlbHZldGljYShXS1N0cmluZ1JlZiBjb25m
aWd1cmF0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396877</attachid>
            <date>2020-04-18 17:31:06 -0700</date>
            <delta_ts>2020-04-19 10:10:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210702-20200418173105.patch</filename>
            <type>text/plain</type>
            <size>173360</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGI5NzI2MDA1YmI3NmMyYWIwMzg5YTdl
MDM3ZGNiMTg5NGY1ZjFhNzIuLjc0OGQyYjlmYzc5ZDI5ZmE5YTdhNDRkZjgxZDFjMDRjNjI0YmJm
YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTAgQEAKKzIwMjAtMDQtMTggIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gVXNlIGNyZWF0ZU5TQXJyYXkgaW4gbWFueSBt
b3JlIHBsYWNlcyB0aGF0IGJ1aWxkIE5TQXJyYXkgb2JqZWN0cyBmcm9tIEMrKyBjb2xsZWN0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNzAy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKIDIwMjAtMDQtMTggIEtl
aXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVkZXNpZ24g
aG93IHdlIGRvIGZvci1vZiBpdGVyYXRpb24gZm9yIEpTQXJyYXlzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTcw
N2QwZWQ1Yzk1NTc0M2MwYWEyZjJlZjNkMzJmNzU0M2ZjMWUzNS4uYjgxY2E0ZWNjMDk5YjQ5YzFi
MmExZTkwODlkMTkwZGJjYTI3NTk4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIw
LTA0LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2Fd
IFVzZSBjcmVhdGVOU0FycmF5IGluIG1hbnkgbW9yZSBwbGFjZXMgdGhhdCBidWlsZCBOU0FycmF5
IG9iamVjdHMgZnJvbSBDKysgY29sbGVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDcwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCiAyMDIwLTA0LTE4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KIAogICAgICAgICBbQ1NTIHNlbGVjdG9yc10gU3VwcG9ydCA6d2hlcmUoKSBwc2V1ZG8gY2xh
c3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggYzM3OTNhYmI0YmQ1YzI0ODExYzgzYWZjZTg0YjFiYWZlM2E1YjI3NS4u
M2UyYmMzY2VlNWI4Mjk5OTM2ZmJkZjBiODU1MmQ2ODRkMmJhOGE2YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMCBAQAorMjAyMC0wNC0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW0NvY29hXSBVc2UgY3JlYXRlTlNBcnJheSBpbiBtYW55IG1vcmUgcGxhY2VzIHRo
YXQgYnVpbGQgTlNBcnJheSBvYmplY3RzIGZyb20gQysrIGNvbGxlY3Rpb25zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA3MDIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogMjAyMC0wNC0xOCAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBjbGllbnQgY2VydGlm
aWNhdGUgYXV0aGVudGljYXRpb24gd2hlbiB1c2luZyBub24tZGVmYXVsdCBXS1dlYnNpdGVEYXRh
U3RvcmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKaW5kZXggOTJkZDM3NTlhODE5Y2I2NTkz
MGQ2NmFkNWNhZWM2MWU1ZTliMzUxZC4uZDgxM2RlNWU2MWQzNzk5ZjYwYzdmZWUzOGYwYWVkYTJh
MzQ1NTBjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisy
MDIwLTA0LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29j
b2FdIFVzZSBjcmVhdGVOU0FycmF5IGluIG1hbnkgbW9yZSBwbGFjZXMgdGhhdCBidWlsZCBOU0Fy
cmF5IG9iamVjdHMgZnJvbSBDKysgY29sbGVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDcwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCiAyMDIwLTA0LTE4ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+
CiAKICAgICAgICAgUmVkdWNlIHBhcmFtZXRlciBsaXN0IG9mIHRoZSBGcmFtZUxvYWRSZXF1ZXN0
IGNvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggYWZkYjA4NWFmOGU5
MGFjNzc0NWIwYmRiMTI0Yjk3NzFhODBiMDE3ZS4uYTMxYzI4NTQyODcxMDE0YTQ4NjhmNGE3Y2Iz
NDg0YjBjZjk4ZmE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEw
IEBACisyMDIwLTA0LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAg
ICBbQ29jb2FdIFVzZSBjcmVhdGVOU0FycmF5IGluIG1hbnkgbW9yZSBwbGFjZXMgdGhhdCBidWls
ZCBOU0FycmF5IG9iamVjdHMgZnJvbSBDKysgY29sbGVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDcwMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCiAyMDIwLTA0LTE4ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxp
YS5jb20+CiAKICAgICAgICAgUmVkdWNlIHBhcmFtZXRlciBsaXN0IG9mIHRoZSBGcmFtZUxvYWRS
ZXF1ZXN0IGNvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9WZWN0
b3JDb2NvYS5oIGIvU291cmNlL1dURi93dGYvY29jb2EvVmVjdG9yQ29jb2EuaAppbmRleCBiOGM5
NTZhNjhhNDM0MzE1M2YxNmEzYzg4YmFkNjM1NTVjNjNkN2M4Li42NWI1NDZlMTIyYmI2ZTQ4ZWMy
NDZjMGE2M2Y4NGJiMTQyYWQxYjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2NvY29hL1ZlY3RvckNvY29hLmgKQEAg
LTM0LDQxICszNCw0NyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogLy8gU3BlY2lhbGl6ZSB0aGUgYmVo
YXZpb3Igb2YgdGhlc2UgZnVuY3Rpb25zIGJ5IG92ZXJsb2FkaW5nIHRoZSBtYWtlTlNBcnJheUVs
ZW1lbnQKIC8vIGZ1bmN0aW9ucyBhbmQgbWFrZVZlY3RvckVsZW1lbnQgZnVuY3Rpb25zLiBUaGUg
bWFrZU5TQXJyYXlFbGVtZW50IGZ1bmN0aW9uIHRha2VzCi0vLyBhIGNvbnN0JiB0byBhIHZlY3Rv
ciBlbGVtZW50IGFuZCBjYW4gcmV0dXJuIGVpdGhlciBhIFJldGFpblB0cjxpZD4gb3IgYW4gaWQK
Ky8vIGEgY29uc3QmIHRvIGEgY29sbGVjdGlvbiBlbGVtZW50IGFuZCBjYW4gcmV0dXJuIGVpdGhl
ciBhIFJldGFpblB0cjxpZD4gb3IgYW4gaWQKIC8vIGlmIHRoZSB2YWx1ZSBpcyBhdXRvcmVsZWFz
ZWQuIFRoZSBtYWtlVmVjdG9yRWxlbWVudCBmdW5jdGlvbiB0YWtlcyBhbiBpZ25vcmVkCiAvLyBw
b2ludGVyIHRvIHRoZSB2ZWN0b3IgZWxlbWVudCB0eXBlLCBtYWtpbmcgYXJndW1lbnQtZGVwZW5k
ZW50IGxvb2t1cCB3b3JrLCBhbmQgYW4KIC8vIGlkIGZvciB0aGUgYXJyYXkgZWxlbWVudCwgYW5k
IHJldHVybnMgYW4gT3B0aW9uYWw8VD4gb2YgdGhlIHRoZSB2ZWN0b3IgZWxlbWVudCwKIC8vIGFs
bG93aW5nIHVzIHRvIGZpbHRlciBvdXQgYXJyYXkgZWxlbWVudHMgdGhhdCBhcmUgbm90IG9mIHRo
ZSBleHBlY3RlZCB0eXBlLgogLy8KLS8vICAgIFJldGFpblB0cjxpZD4gbWFrZU5TQXJyYXlFbGVt
ZW50KGNvbnN0IFZlY3RvckVsZW1lbnRUeXBlJiB2ZWN0b3JFbGVtZW50KTsKKy8vICAgIFJldGFp
blB0cjxpZD4gbWFrZU5TQXJyYXlFbGVtZW50KGNvbnN0IENvbGxlY3Rpb25FbGVtZW50VHlwZSYg
Y29sbGVjdGlvbkVsZW1lbnQpOwogLy8gICAgICAgIC1vci0KIC8vICAgIGlkIG1ha2VOU0FycmF5
RWxlbWVudChjb25zdCBWZWN0b3JFbGVtZW50VHlwZSYgdmVjdG9yRWxlbWVudCk7CiAvLwogLy8g
ICAgT3B0aW9uYWw8VmVjdG9yRWxlbWVudFR5cGU+IG1ha2VWZWN0b3JFbGVtZW50KGNvbnN0IFZl
Y3RvckVsZW1lbnRUeXBlKiwgaWQgYXJyYXlFbGVtZW50KTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
VmVjdG9yVHlwZT4gUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5TQXJyYXkoY29uc3QgVmVjdG9y
VHlwZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+IFJldGFpblB0cjxOU0Fy
cmF5PiBjcmVhdGVOU0FycmF5KENvbGxlY3Rpb25UeXBlJiYpOwogdGVtcGxhdGU8dHlwZW5hbWUg
VmVjdG9yRWxlbWVudFR5cGU+IFZlY3RvcjxWZWN0b3JFbGVtZW50VHlwZT4gbWFrZVZlY3RvcihO
U0FycmF5ICopOwogCiAvLyBUaGlzIG92ZXJsb2FkIG9mIGNyZWF0ZU5TQXJyYXkgdGFrZXMgYSBm
dW5jdGlvbiB0byBtYXAgZWFjaCB2ZWN0b3IgZWxlbWVudCB0byBhbiBPYmplY3RpdmUtQyBvYmpl
Y3QuCiAvLyBUaGUgbWFwIGZ1bmN0aW9uIGhhcyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgdGhlIG1h
a2VOU0FycmF5RWxlbWVudCBmdW5jdGlvbiBhYm92ZSwgYnV0IGNhbiBiZSBhbnkKIC8vIGZ1bmN0
aW9uIGluY2x1ZGluZyBhIGxhbWJkYSwgYSBmdW5jdGlvbi1saWtlIG9iamVjdCwgb3IgRnVuY3Rp
b248Pi4KLXRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIE1hcEZ1bmN0aW9u
VHlwZT4gUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5TQXJyYXkoY29uc3QgVmVjdG9yVHlwZSYs
IGNvbnN0IE1hcEZ1bmN0aW9uVHlwZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5
cGUsIHR5cGVuYW1lIE1hcEZ1bmN0aW9uVHlwZT4gUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5T
QXJyYXkoQ29sbGVjdGlvblR5cGUmJiwgY29uc3QgTWFwRnVuY3Rpb25UeXBlJik7CiAKIC8vIElt
cGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIGZ1bmN0aW9uIHRlbXBsYXRlcyBhYm92ZS4KIAot
dGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4gUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5T
QXJyYXkoY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKQoraW5saW5lIHZvaWQgYWRkVW5sZXNzTmls
KE5TTXV0YWJsZUFycmF5ICphcnJheSwgaWQgdmFsdWUpCiB7Ci0gICAgYXV0byBhcnJheSA9IGFk
b3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTp2ZWN0b3Iuc2l6
ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICBbYXJyYXkg
YWRkT2JqZWN0OmdldFB0cihtYWtlTlNBcnJheUVsZW1lbnQoZWxlbWVudCkpXTsKKyAgICBpZiAo
dmFsdWUpCisgICAgICAgIFthcnJheSBhZGRPYmplY3Q6dmFsdWVdOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4gUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5TQXJyYXko
Q29sbGVjdGlvblR5cGUmJiBjb2xsZWN0aW9uKQoreworICAgIGF1dG8gYXJyYXkgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c3RkOjpzaXplKGNvbGxl
Y3Rpb24pXSk7CisgICAgZm9yIChhdXRvJiYgZWxlbWVudCA6IGNvbGxlY3Rpb24pCisgICAgICAg
IGFkZFVubGVzc05pbChhcnJheS5nZXQoKSwgZ2V0UHRyKG1ha2VOU0FycmF5RWxlbWVudChzdGQ6
OmZvcndhcmQ8ZGVjbHR5cGUoZWxlbWVudCk+KGVsZW1lbnQpKSkpOwogICAgIHJldHVybiBhcnJh
eTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZSwgdHlwZW5hbWUgTWFwRnVuY3Rp
b25UeXBlPiBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNBcnJheShjb25zdCBWZWN0b3JUeXBl
JiB2ZWN0b3IsIGNvbnN0IE1hcEZ1bmN0aW9uVHlwZSYgZnVuY3Rpb24pCit0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xsZWN0aW9uVHlwZSwgdHlwZW5hbWUgTWFwRnVuY3Rpb25UeXBlPiBSZXRhaW5QdHI8
TlNBcnJheT4gY3JlYXRlTlNBcnJheShDb2xsZWN0aW9uVHlwZSYmIGNvbGxlY3Rpb24sIGNvbnN0
IE1hcEZ1bmN0aW9uVHlwZSYgZnVuY3Rpb24pCiB7Ci0gICAgYXV0byBhcnJheSA9IGFkb3B0TlMo
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTp2ZWN0b3Iuc2l6ZSgpXSk7
Ci0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICBbYXJyYXkgYWRkT2Jq
ZWN0OmdldFB0cihmdW5jdGlvbihlbGVtZW50KSldOworICAgIGF1dG8gYXJyYXkgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c3RkOjpzaXplKGNvbGxl
Y3Rpb24pXSk7CisgICAgZm9yIChhdXRvJiYgZWxlbWVudCA6IGNvbGxlY3Rpb24pCisgICAgICAg
IGFkZFVubGVzc05pbChhcnJheS5nZXQoKSwgZ2V0UHRyKGZ1bmN0aW9uKHN0ZDo6Zm9yd2FyZDxk
ZWNsdHlwZShlbGVtZW50KT4oZWxlbWVudCkpKSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCkBA
IC04Nyw0ICs5Myw1IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvckVsZW1lbnRUeXBlPiBWZWN0
b3I8VmVjdG9yRWxlbWVudFR5cGU+IG1ha2VWZWN0b3IoTlNBcnJhCiAKIH0gLy8gbmFtZXNwYWNl
IFdURgogCit1c2luZyBXVEY6OmNyZWF0ZU5TQXJyYXk7CiB1c2luZyBXVEY6Om1ha2VWZWN0b3I7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4IGU0ZjM4ZTE0MzAy
N2JhZTlkY2ExMWQ3YzI3NTY1ZGU4YjY3OTIwZTIuLjk2NzgyMGIwZTA5Mzc3MWNmZTIyODI0Zjkw
ZGQyNDI2ODIyMjIxMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1t
CkBAIC00NSw3ICs0NSw2IEBACiAjaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW1wb3J0
ICJIVE1MTmFtZXMuaCIKICNpbXBvcnQgIkludFJlY3QuaCIKLSNpbXBvcnQgIkludFNpemUuaCIK
ICNpbXBvcnQgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQg
IlJhbmdlLmgiCkBAIC01OSw4ICs1OCw4IEBACiAjaW1wb3J0ICJXQUtXaW5kb3cuaCIKICNpbXBv
cnQgIldlYkNvcmVUaHJlYWQuaCIKICNpbXBvcnQgIlZpc2libGVVbml0cy5oIgotCiAjaW1wb3J0
IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+
CiAKIGVudW0gewogICAgIE5TQXR0YWNobWVudENoYXJhY3RlciA9IDB4ZmZmYyAgICAvKiBUbyBk
ZW5vdGUgYXR0YWNobWVudHMuICovCkBAIC0xNzczLDIwICsxNzcyLDE3IEBAIC0gKE5TQXJyYXkg
KilhY2Nlc3NpYmlsaXR5Rmxvd1RvRWxlbWVudHMKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW47CiAgICAgc2VsZi5heEJhY2tpbmdP
YmplY3QtPmFyaWFGbG93VG9FbGVtZW50cyhjaGlsZHJlbik7CiAgICAgCi0gICAgdW5zaWduZWQg
bGVuZ3RoID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgIE5TTXV0YWJsZUFycmF5KiBhcnJheSA9IFtO
U011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpsZW5ndGhdOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciogd3JhcHBlciA9IGNoaWxkcmVuW2ldLT53cmFwcGVyKCk7CisgICAgcmV0dXJuIGNy
ZWF0ZU5TQXJyYXkoY2hpbGRyZW4sIFtdIChhdXRvJiBjaGlsZCkgLT4gaWQgeworICAgICAgICBh
dXRvIHdyYXBwZXIgPSBjaGlsZC0+d3JhcHBlcigpOwogICAgICAgICBBU1NFUlQod3JhcHBlcik7
Ci0gICAgICAgIGlmICghd3JhcHBlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IGlmIChjaGlsZHJlbltpXS0+aXNBdHRhY2htZW50KCkgJiYgW3dyYXBwZXIgYXR0YWNobWVudFZp
ZXddKQotICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbd3JhcHBlciBhdHRhY2htZW50Vmll
d11dOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OndyYXBwZXJd
OwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIGlmIChjaGlsZC0+aXNBdHRhY2ht
ZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGF0dGFjaG1lbnRWaWV3ID0gd3JhcHBlci5h
dHRhY2htZW50VmlldykKKyAgICAgICAgICAgICAgICByZXR1cm4gYXR0YWNobWVudFZpZXc7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICB9KS5hdXRvcmVsZWFzZSgp
OwogfQogCiAtIChpZClhY2Nlc3NpYmlsaXR5TGlua2VkRWxlbWVudApAQCAtMjc0MywxNSArMjcz
OSw5IEBAIC0gKE5TQXJyYXkgKilyZWN0c0ZvclNlbGVjdGlvblJlY3RzOihjb25zdCBWZWN0b3I8
V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mKXNlbGVjCiAgICAgaWYgKCFzaXplKQogICAgICAgICBy
ZXR1cm4gbmlsOwogICAgIAotICAgIE5TTXV0YWJsZUFycmF5ICpyZWN0cyA9IFtOU011dGFibGVB
cnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvcmU6OlNlbGVjdGlvblJlY3QmIGNv
cmVSZWN0ID0gc2VsZWN0aW9uUmVjdHNbaV07Ci0gICAgICAgIGF1dG8gc2VsZWN0aW9uUmVjdCA9
IEZsb2F0UmVjdChjb3JlUmVjdC5yZWN0KCkpOwotICAgICAgICBDR1JlY3QgcmVjdCA9IFtzZWxm
IGNvbnZlcnRSZWN0VG9TcGFjZTpzZWxlY3Rpb25SZWN0IHNwYWNlOkFjY2Vzc2liaWxpdHlDb252
ZXJzaW9uU3BhY2U6OlNjcmVlbl07Ci0gICAgICAgIFtyZWN0cyBhZGRPYmplY3Q6W05TVmFsdWUg
dmFsdWVXaXRoUmVjdDpyZWN0XV07Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZWN0czsKKyAg
ICByZXR1cm4gY3JlYXRlTlNBcnJheShzZWxlY3Rpb25SZWN0cywgWyZdIChjb25zdCBXZWJDb3Jl
OjpTZWxlY3Rpb25SZWN0JiByZWN0KSB7CisgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdp
dGhSZWN0OltzZWxmIGNvbnZlcnRSZWN0VG9TcGFjZTpGbG9hdFJlY3QocmVjdC5yZWN0KCkpIHNw
YWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2U6OlNjcmVlbl1dOworICAgIH0pLmF1dG9y
ZWxlYXNlKCk7CiB9CiAKIC0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmtl
ckZvclBvaW50OihDR1BvaW50KXBvaW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZS5oCmluZGV4IDllMTYwNGFiODNlYjVjMmI4MjlhZjJjY2YxYzQxZjY2M2E0MzQ1NTIuLjY4
MmRmZTU3N2Q4YmQ3NTlkOGExNjk0MTA4YzA4MTk2MTljNWQ2NDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oCkBAIC0yNiw4ICsyNiw3IEBACiAgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLSNpZm5kZWYgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlX2gKLSNkZWZp
bmUgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlX2gKKyNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIgogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KQEAgLTgyLDkgKzgxLDkgQEAgY2xhc3MgVmlzaWJsZVBv
c2l0aW9uOwogLSAodm9pZClhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOihOU1N0cmlu
ZyAqKW5vdGlmaWNhdGlvbk5hbWU7CiAtICh2b2lkKWFjY2Vzc2liaWxpdHlQb3N0ZWROb3RpZmlj
YXRpb246KE5TU3RyaW5nICopbm90aWZpY2F0aW9uTmFtZSB1c2VySW5mbzooTlNEaWN0aW9uYXJ5
ICopdXNlckluZm87CiAKLS0gKENHUGF0aFJlZiljb252ZXJ0UGF0aFRvU2NyZWVuU3BhY2U6KFdl
YkNvcmU6OlBhdGggJilwYXRoOworLSAoQ0dQYXRoUmVmKWNvbnZlcnRQYXRoVG9TY3JlZW5TcGFj
ZTooY29uc3QgV2ViQ29yZTo6UGF0aCYpcGF0aDsKIAotLSAoQ0dSZWN0KWNvbnZlcnRSZWN0VG9T
cGFjZTooV2ViQ29yZTo6RmxvYXRSZWN0ICYpcmVjdCBzcGFjZTooV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eUNvbnZlcnNpb25TcGFjZSlzcGFjZTsKKy0gKENHUmVjdCljb252ZXJ0UmVjdFRvU3BhY2U6
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpcmVjdCBzcGFjZTooV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eUNvbnZlcnNpb25TcGFjZSlzcGFjZTsKIAogLy8gTWF0aCByZWxhdGVkIGZ1bmN0aW9ucwog
LSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlNYXRoUG9zdHNjcmlwdFBhaXJzOwpAQCAtOTksNSAr
OTgsMyBAQCBleHRlcm4gTlNBcnJheSAqY29udmVydFRvTlNBcnJheShjb25zdCBXZWJDb3JlOjpB
WENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZAogI2VuZGlmCiAKIEBlbmQKLQotI2VuZGlm
IC8vIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlckJhc2UubW0KaW5kZXggNzE4ODJiODVhZDMzOWUwYjRmMmE4NjdkODFi
MzE2NTMxZjJjZTRmZi4uMTRlYzQwNzgyNDhlYWEzM2QyNmE1OTU3NzliYWI3MzkyYjdmOGY2YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQpAQCAtNjgsMTAgKzY4
LDEyIEBACiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogI2lmIFBMQVRGT1JN
KE1BQykKKyNpbXBvcnQgIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgiCiAjaW1w
b3J0IDxwYWwvc3BpL21hYy9ISVNlcnZpY2VzU1BJLmg+CiAjZWxzZQogI2ltcG9ydCAiV0FLVmll
dy5oIgogI2ltcG9ydCAiV0FLV2luZG93LmgiCisjaW1wb3J0ICJXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcklPUy5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAt
MjQ5LDM1ICsyNTEsMzMgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGljIE5T
QXJyYXkgKmNvbnZlcnRNYXRoUGFpcnNUb05TQXJyYXkoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJiBwYWlycywgTlNTdHJpbmcgKnN1
YnNjcmlwdEtleSwgTlNTdHJpbmcgKnN1cGVyc2NyaXB0S2V5KQogewotICAgIE5TTXV0YWJsZUFy
cmF5ICphcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpwYWlycy5zaXpl
KCldOwotICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IHBhaXJzKSB7Ci0gICAgICAgIE5TTXV0
YWJsZURpY3Rpb25hcnkgKnBhaXJEaWN0aW9uYXJ5ID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGlj
dGlvbmFyeV07CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocGFpcnMsIFsmXSAoYXV0byYgcGFp
cikgeworICAgICAgICBpZCBzdWJzY3JpcHQgPSBuaWw7CiAgICAgICAgIGlmIChwYWlyLmZpcnN0
ICYmIHBhaXIuZmlyc3QtPndyYXBwZXIoKSAmJiAhcGFpci5maXJzdC0+YWNjZXNzaWJpbGl0eUlz
SWdub3JlZCgpKQotICAgICAgICAgICAgW3BhaXJEaWN0aW9uYXJ5IHNldE9iamVjdDpwYWlyLmZp
cnN0LT53cmFwcGVyKCkgZm9yS2V5OnN1YnNjcmlwdEtleV07CisgICAgICAgICAgICBzdWJzY3Jp
cHQgPSBwYWlyLmZpcnN0LT53cmFwcGVyKCk7CisgICAgICAgIGlkIHN1cGVyc2NyaXB0ID0gbmls
OwogICAgICAgICBpZiAocGFpci5zZWNvbmQgJiYgcGFpci5zZWNvbmQtPndyYXBwZXIoKSAmJiAh
cGFpci5zZWNvbmQtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKLSAgICAgICAgICAgIFtwYWly
RGljdGlvbmFyeSBzZXRPYmplY3Q6cGFpci5zZWNvbmQtPndyYXBwZXIoKSBmb3JLZXk6c3VwZXJz
Y3JpcHRLZXldOwotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OnBhaXJEaWN0aW9uYXJ5XTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGFycmF5OwotfQotCi1zdGF0aWMgdm9pZCBhZGRDaGlsZFRvQXJyYXko
QVhDb3JlT2JqZWN0JiBjaGlsZCwgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhcnJheSkKLXsK
LSAgICBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqd3JhcHBlciA9IGNoaWxkLndyYXBw
ZXIoKTsKLSAgICAvLyBXZSB3YW50IHRvIHJldHVybiB0aGUgYXR0YWNobWVudCB2aWV3IGluc3Rl
YWQgb2YgdGhlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGF0dGFjaG1lbnQsCi0gICAgLy8gb3Ro
ZXJ3aXNlLCB3ZSBnZXQgcGFsaW5kcm9tZSBlcnJvcnMgaW4gdGhlIEFYIGhpZXJhcmNoeS4KLSAg
ICBpZiAoY2hpbGQuaXNBdHRhY2htZW50KCkgJiYgW3dyYXBwZXIgYXR0YWNobWVudFZpZXddKQot
ICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0Olt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XV07
Ci0gICAgZWxzZSBpZiAod3JhcHBlcikKLSAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDp3
cmFwcGVyXTsKKyAgICAgICAgICAgIHN1cGVyc2NyaXB0ID0gcGFpci5zZWNvbmQtPndyYXBwZXIo
KTsKKyAgICAgICAgaWYgKCFzdWJzY3JpcHQgJiYgIXN1cGVyc2NyaXB0KQorICAgICAgICAgICAg
cmV0dXJuIEB7IH07CisgICAgICAgIGlmICghc3VwZXJzY3JpcHQpCisgICAgICAgICAgICByZXR1
cm4gQHsgc3Vic2NyaXB0S2V5OiBzdWJzY3JpcHQgfTsKKyAgICAgICAgaWYgKCFzdWJzY3JpcHQp
CisgICAgICAgICAgICByZXR1cm4gQHsgc3VwZXJzY3JpcHRLZXk6IHN1cGVyc2NyaXB0IH07Cisg
ICAgICAgIHJldHVybiBAeyBzdWJzY3JpcHRLZXk6IHN1YnNjcmlwdCwgc3VwZXJzY3JpcHRLZXk6
IHN1cGVyc2NyaXB0IH07CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogTlNBcnJheSAqY29u
dmVydFRvTlNBcnJheShjb25zdCBXZWJDb3JlOjpBWENvcmVPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciYgY2hpbGRyZW4pCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y2hpbGRyZW4uc2l6ZSgp
XTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCi0gICAgICAgIGFkZENo
aWxkVG9BcnJheSgqY2hpbGQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIFtyZXN1bHQgYXV0b3JlbGVh
c2VdOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KGNoaWxkcmVuLCBbXSAoYXV0byYgY2hpbGQp
IC0+IGlkIHsKKyAgICAgICAgYXV0byB3cmFwcGVyID0gY2hpbGQtPndyYXBwZXIoKTsKKyAgICAg
ICAgLy8gV2Ugd2FudCB0byByZXR1cm4gdGhlIGF0dGFjaG1lbnQgdmlldyBpbnN0ZWFkIG9mIHRo
ZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBhdHRhY2htZW50LAorICAgICAgICAvLyBvdGhlcndp
c2UsIHdlIGdldCBwYWxpbmRyb21lIGVycm9ycyBpbiB0aGUgQVggaGllcmFyY2h5LgorICAgICAg
ICBpZiAoY2hpbGQtPmlzQXR0YWNobWVudCgpICYmIHdyYXBwZXIuYXR0YWNobWVudFZpZXcpCisg
ICAgICAgICAgICByZXR1cm4gd3JhcHBlci5hdHRhY2htZW50VmlldzsKKyAgICAgICAgcmV0dXJu
IHdyYXBwZXI7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogQGltcGxlbWVudGF0aW9uIFdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZQpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHN0YXRp
YyB2b2lkIGNvbnZlcnRQYXRoVG9TY3JlZW5TcGFjZUZ1bmN0aW9uKFBhdGhDb252ZXJzaW9uSW5m
byYgY29udmVyc2lvbiwgY29uCiAgICAgfQogfQogCi0tIChDR1BhdGhSZWYpY29udmVydFBhdGhU
b1NjcmVlblNwYWNlOihQYXRoICYpcGF0aAorLSAoQ0dQYXRoUmVmKWNvbnZlcnRQYXRoVG9TY3Jl
ZW5TcGFjZTooY29uc3QgUGF0aCYpcGF0aAogewogICAgIFBhdGhDb252ZXJzaW9uSW5mbyBjb252
ZXJzaW9uID0geyBzZWxmLCBDR1BhdGhDcmVhdGVNdXRhYmxlKCkgfTsKICAgICBwYXRoLmFwcGx5
KFsmY29udmVyc2lvbl0oY29uc3QgUGF0aEVsZW1lbnQmIHBhdGhFbGVtZW50KSB7CkBAIC00NjMs
NyArNDYzLDcgQEAgLSAoaWQpX2FjY2Vzc2liaWxpdHlXZWJEb2N1bWVudFZpZXcKICAgICByZXR1
cm4gbmlsOwogfQogCi0tIChDR1JlY3QpY29udmVydFJlY3RUb1NwYWNlOihXZWJDb3JlOjpGbG9h
dFJlY3QgJilyZWN0IHNwYWNlOihBY2Nlc3NpYmlsaXR5Q29udmVyc2lvblNwYWNlKXNwYWNlCist
IChDR1JlY3QpY29udmVydFJlY3RUb1NwYWNlOihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKXJl
Y3Qgc3BhY2U6KEFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2Upc3BhY2UKIHsKICAgICBpZiAo
IXNlbGYuYXhCYWNraW5nT2JqZWN0KQogICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggZDFmZTI2YzExZGRkODJkYTJk
NGJjNTg3MmMwYTYxZTQxYmUwYTgyYy4uYjE0ODJhZGI5M2Y0ODkxMTg0ZGJkM2Y4NGUxMDQzYmE1
ZjYzNTE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTM5
MzUsMTIgKzM5MzUsMTAgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgICAgICAgICBhdXRvIHJhbmdlcyA9IGJhY2tpbmdPYmplY3QtPmZpbmRUZXh0UmFuZ2VzKGNy
aXRlcmlhKTsKICAgICAgICAgICAgIGlmIChyYW5nZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICBOU011dGFibGVBcnJheSAqbWFya2VycyA9IFtO
U011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpyYW5nZXMuc2l6ZSgpXTsKLSAgICAgICAg
ICAgIGZvciAoYXV0byByYW5nZSA6IHJhbmdlcykgewotICAgICAgICAgICAgICAgIGlmIChpZCBt
YXJrZXIgPSBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6cmFuZ2VdKQot
ICAgICAgICAgICAgICAgICAgICBbbWFya2VycyBhZGRPYmplY3Q6bWFya2VyXTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJzOworCisgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlTlNBcnJheShyYW5nZXMsIFsmXSAoYXV0byYgcmFuZ2UpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOnJhbmdlXTsK
KyAgICAgICAgICAgIH0pLmF1dG9yZWxlYXNlKCk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAt
Mzk1NSwxMCArMzk1Myw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgICAgICB9KTsKICAgICAgICAgaWYgKG9wZXJhdGlvblJlc3VsdC5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05T
TXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Om9wZXJhdGlvblJlc3VsdC5zaXplKCldOwot
ICAgICAgICBmb3IgKGF1dG8gc3RyIDogb3BlcmF0aW9uUmVzdWx0KQotICAgICAgICAgICAgW3Jl
c3VsdCBhZGRPYmplY3Q6c3RyXTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZU5TQXJyYXkob3BlcmF0aW9uUmVzdWx0KS5hdXRvcmVsZWFzZSgpOwogICAgIH0K
IAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRDb3VudEZvclNlYXJjaFByZWRpY2F0ZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVzQ29j
b2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVzQ29jb2Eu
bW0KaW5kZXggZjZmOTJhNGM5ZDRmOTZiYWQ4Mzk3ZmEyM2ZiZDUyMGVkZjI5MzAyOC4uZDE4MzMz
NDIzMGFjODY4OWU5NmMwZDQ4NDY0ZDgxNWE3OTFmMWE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9Gb250QXR0cmlidXRlc0NvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZXNDb2NvYS5tbQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaW1wb3J0ICJDb2xvckNvY29hLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05T
QXR0cmlidXRlZFN0cmluZ1NQSS5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+
CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCA8cGFsL2lvcy9VSUtpdFNvZnRM
aW5rLmg+CkBAIC0xMjksMTAgKzEzMCw5IEBAIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IEZvbnRB
dHRyaWJ1dGVzOjpjcmVhdGVEaWN0aW9uYXJ5KCkgY29uc3QKICAgICB9CiAKICAgICBpZiAoIXRl
eHRMaXN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byB0ZXh0TGlzdEFycmF5ID0gYWRvcHRO
UyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnRleHRMaXN0cy5zaXpl
KCldKTsKLSAgICAgICAgZm9yIChhdXRvJiB0ZXh0TGlzdCA6IHRleHRMaXN0cykKLSAgICAgICAg
ICAgIFt0ZXh0TGlzdEFycmF5IGFkZE9iamVjdDp0ZXh0TGlzdC5jcmVhdGVUZXh0TGlzdCgpLmdl
dCgpXTsKLSAgICAgICAgW3N0eWxlIHNldFRleHRMaXN0czp0ZXh0TGlzdEFycmF5LmdldCgpXTsK
KyAgICAgICAgW3N0eWxlIHNldFRleHRMaXN0czpjcmVhdGVOU0FycmF5KHRleHRMaXN0cywgW10g
KGF1dG8mIHRleHRMaXN0KSB7CisgICAgICAgICAgICByZXR1cm4gdGV4dExpc3QuY3JlYXRlVGV4
dExpc3QoKTsKKyAgICAgICAgfSkuZ2V0KCldOwogICAgIH0KIAogICAgIGF0dHJpYnV0ZXNbTlNQ
YXJhZ3JhcGhTdHlsZUF0dHJpYnV0ZU5hbWVdID0gc3R5bGUuZ2V0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
aW9zL0ZyYW1lSU9TLm1tCmluZGV4IGEyMDdjYjA5YjgwNjFlN2QxOTQ5OTU0NWZjZDE1Y2FmZmQz
ZDQzMTAuLjEyYmY3NWU3OTY1MTViNjc4MjBlZGRjZjBjNDMwY2E2NjlmMWJiZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC02OCw2ICs2OCw3IEBACiAjaW1wb3J0ICJXQUtX
aW5kb3cuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgogI2ltcG9ydCA8d3Rm
L0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5o
PgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTo6SFRNTE5hbWVzOwpAQCAtNzg5LDExICs3OTAsOSBAQCBOU0FycmF5ICpGcmFtZTo6aW50
ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3QoKSBjb25zdAogICAgICAgICAgICAgYXBwZW5kKGlu
dGVycHJldGF0aW9uLCB0ZXh0QWZ0ZXJMYXN0TWFya2VyKTsKICAgICB9CiAKLSAgICBOU011dGFi
bGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBmb3IgKGF1dG8m
IGludGVycHJldGF0aW9uIDogaW50ZXJwcmV0YXRpb25zKQotICAgICAgICBbcmVzdWx0IGFkZE9i
amVjdDphZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyczpyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuaWNoYXIqPihpbnRlcnByZXRhdGlvbi5kYXRhKCkpIGxlbmd0aDpp
bnRlcnByZXRhdGlvbi5zaXplKCldKS5nZXQoKV07Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiBjcmVhdGVOU0FycmF5KGludGVycHJldGF0aW9ucywgW10gKGF1dG8mIGludGVycHJl
dGF0aW9uKSB7CisgICAgICAgIHJldHVybiBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRX
aXRoQ2hhcmFjdGVyczpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuaWNoYXIqPihpbnRlcnByZXRh
dGlvbi5kYXRhKCkpIGxlbmd0aDppbnRlcnByZXRhdGlvbi5zaXplKCldKTsKKyAgICB9KS5hdXRv
cmVsZWFzZSgpOwogfQogCiB2b2lkIEZyYW1lOjp2aWV3cG9ydE9mZnNldENoYW5nZWQoVmlld3Bv
cnRPZmZzZXRDaGFuZ2VUeXBlIGNoYW5nZVR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9TZWFyY2hQb3B1cE1lbnVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1NlYXJjaFBvcHVwTWVudUNvY29hLm1tCmluZGV4IDUyOTM3NDlmNTQ3
ZTMzMTU5ZDdjZTBiNDRmMzBlY2M4OWVhY2ExNjUuLmIxMTlkODdhZmMyOGMyNTA0OWYzMzk0YTBm
ZGVlMDQ3ZWI3ZjBiMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L1NlYXJjaFBvcHVwTWVudUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1NlYXJjaFBvcHVwTWVudUNvY29hLm1tCkBAIC0yNiw2ICsyNiw4IEBACiAjaW1wb3J0ICJj
b25maWcuaCIKICNpbXBvcnQgIlNlYXJjaFBvcHVwTWVudUNvY29hLmgiCiAKKyNpbXBvcnQgPHd0
Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBO
U1N0cmluZyAqIGNvbnN0IGRhdGVLZXkgPSBAImRhdGUiOwpAQCAtMTUzLDEwICsxNTUsOSBAQCB2
b2lkIHNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3RvcjxS
ZWNlbnRTZWFyY2g+JiBzZWFyY2hJdAogICAgIGlmIChzZWFyY2hJdGVtcy5pc0VtcHR5KCkpCiAg
ICAgICAgIFtpdGVtc0RpY3Rpb25hcnkgcmVtb3ZlT2JqZWN0Rm9yS2V5Om5hbWVdOwogICAgIGVs
c2UgewotICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGl0ZW1zID0gYWRvcHROUyhb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnNlYXJjaEl0ZW1zLnNpemUo
KV0pOwotICAgICAgICBmb3IgKGF1dG8mIHNlYXJjaEl0ZW0gOiBzZWFyY2hJdGVtcykKLSAgICAg
ICAgICAgIFtpdGVtcyBhZGRPYmplY3Q6YWRvcHROUyhbW05TRGljdGlvbmFyeSBhbGxvY10gaW5p
dFdpdGhPYmplY3RzQW5kS2V5czpzZWFyY2hJdGVtLnN0cmluZywgc2VhcmNoU3RyaW5nS2V5LCB0
b05TRGF0ZUZyb21TeXN0ZW1DbG9jayhzZWFyY2hJdGVtLnRpbWUpLCBkYXRlS2V5LCBuaWxdKS5n
ZXQoKV07Ci0KKyAgICAgICAgYXV0byBpdGVtcyA9IGNyZWF0ZU5TQXJyYXkoc2VhcmNoSXRlbXMs
IFtdIChhdXRvJiBzZWFyY2hJdGVtKSB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHROUyhbW05T
RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czpzZWFyY2hJdGVtLnN0cmlu
Zywgc2VhcmNoU3RyaW5nS2V5LCB0b05TRGF0ZUZyb21TeXN0ZW1DbG9jayhzZWFyY2hJdGVtLnRp
bWUpLCBkYXRlS2V5LCBuaWxdKTsKKyAgICAgICAgfSk7CiAgICAgICAgIFtpdGVtc0RpY3Rpb25h
cnkgc2V0T2JqZWN0OmFkb3B0TlMoW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0
c0FuZEtleXM6aXRlbXMuZ2V0KCksIHNlYXJjaGVzS2V5LCBuaWxdKS5nZXQoKSBmb3JLZXk6bmFt
ZV07CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9T
aGFyZWRCdWZmZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1NoYXJl
ZEJ1ZmZlckNvY29hLm1tCmluZGV4IDRjYWRlNWYwZjQ0NGE3Y2Y0ZmY4NTQ1MjlmNDMzMDZmOGZm
ZDgxZmEuLjM0Mzg5N2FiMjc0MmM5YzYyNTYxNDk2Y2VlNGU0ZWRjZTJlNDlhZWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tCkBA
IC0zMCw2ICszMCw3IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmg+CiAjaW1wb3J0IDxzdHJpbmcuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+Cisj
aW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogQGludGVyZmFjZSBXZWJDb3JlU2hh
cmVkQnVmZmVyRGF0YSA6IE5TRGF0YQogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRGF0YVNlZ21l
bnQ6KGNvbnN0IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQmKWRhdGFTZWdtZW50
IHBvc2l0aW9uOihOU1VJbnRlZ2VyKXBvc2l0aW9uOwpAQCAtMTE1LDEwICsxMTYsOSBAQCBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZUZyb21SZWFkaW5nRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVQYXRoKQogCiBSZXRhaW5QdHI8TlNBcnJheT4gU2hhcmVkQnVmZmVyOjpj
cmVhdGVOU0RhdGFBcnJheSgpIGNvbnN0CiB7Ci0gICAgYXV0byBkYXRhQXJyYXkgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6bV9zZWdtZW50cy5zaXpl
KCldKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNlZ21lbnQgOiBtX3NlZ21lbnRzKQotICAgICAg
ICBbZGF0YUFycmF5IGFkZE9iamVjdDpzZWdtZW50LnNlZ21lbnQtPmNyZWF0ZU5TRGF0YSgpLmdl
dCgpXTsKLSAgICByZXR1cm4gV1RGTW92ZShkYXRhQXJyYXkpOworICAgIHJldHVybiBjcmVhdGVO
U0FycmF5KG1fc2VnbWVudHMsIFtdIChhdXRvJiBzZWdtZW50KSB7CisgICAgICAgIHJldHVybiBz
ZWdtZW50LnNlZ21lbnQtPmNyZWF0ZU5TRGF0YSgpOworICAgIH0pOwogfQogCiBSZXRhaW5QdHI8
TlNEYXRhPiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpjcmVhdGVOU0RhdGEoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQ
bGF5U3RyZWFtaW5nQVZGT2JqQy5tbQppbmRleCBiZjdmMzhkZWI1MDhkYjZmOGFkNmFhZWEwNTY2
NDBhMDRhNzUzNThjLi5mMmVjZDIxOWQzYzY3ZDBmYWI5NzcxZjA5Njc5ZDkyMzcyYTFlOWM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZh
aXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQpAQCAtNDMsNiArNDMsNyBAQAogI2ltcG9ydCA8d3Rm
L0ZpbGVTeXN0ZW0uaD4KICNpbXBvcnQgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW1wb3J0IDx3dGYv
TG9nZ2VySGVscGVyLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBv
cnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgog
CkBAIC02OTIsMTAgKzY5MywxMCBAQCBzdGF0aWMgYm9vbCBpc0VxdWFsKGNvbnN0IFNoYXJlZEJ1
ZmZlciYgZGF0YSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9u
RmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYsIExp
Y2Vuc2VUeXBlLCBSZWY8U2hhcmVkQnVmZmVyPiYmIHJlc3BvbnNlRGF0YSwgTGljZW5zZVVwZGF0
ZUNhbGxiYWNrJiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKCFtX2V4cGlyZWRTZXNzaW9ucy5pc0Vt
cHR5KCkgJiYgaXNFcXVhbChyZXNwb25zZURhdGEsICJhY2tub3dsZWRnZWQiX3MpKSB7Ci0gICAg
ICAgIGF1dG8gZXhwaXJlZFNlc3Npb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XSk7Ci0gICAgICAgIGZvciAoYXV0byYgc2Vzc2lvbiA6IG1fZXhwaXJlZFNlc3Npb25z
KQotICAgICAgICAgICAgW2V4cGlyZWRTZXNzaW9ucyBhZGRPYmplY3Q6c2Vzc2lvbi5nZXQoKV07
Ci0KKyAgICAgICAgYXV0byBleHBpcmVkU2Vzc2lvbnMgPSBjcmVhdGVOU0FycmF5KG1fZXhwaXJl
ZFNlc3Npb25zLCBbXSAoYXV0byYgZGF0YSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFNob3Vk
IG92ZXJsb2FkIG1ha2VOU0FycmF5RWxlbWVudCBmb3IgdGhpcyBpbiBSZXRhaW5QdHIuaCBwZXJo
YXBzPworICAgICAgICAgICAgcmV0dXJuIGRhdGEuZ2V0KCk7CisgICAgICAgIH0pOwogICAgICAg
ICBhdXRvKiBjZXJ0aWZpY2F0ZSA9IG1faW5zdGFuY2UtPnNlcnZlckNlcnRpZmljYXRlKCk7CiAg
ICAgICAgIGF1dG8qIHN0b3JhZ2VVUkwgPSBtX2luc3RhbmNlLT5zdG9yYWdlVVJMKCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNl
c3Npb24ubW0KaW5kZXggZDQzNmJlNzc3MjNmNjRhNGFlMTg5ZTBiY2NlYmIyOTM3OWU3Mzc1Zi4u
MjY0Yzc2NGRjNDQ2Zjg1OGVlNzUyYWNhYzlhOTRkMjRlNTQ5ZThkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lv
bkFWQ29udGVudEtleVNlc3Npb24ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW0K
QEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQgPG9iamMvb2JqYy1ydW50aW1lLmg+CiAjaW1wb3J0
IDxwYWwvc3BpL2NvY29hL0FWRm91bmRhdGlvblNQSS5oPgogI2ltcG9ydCA8d3RmL0ZpbGVTeXN0
ZW0uaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaW1wb3J0IDxwYWwv
Y29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmsuaD4KIApAQCAtMjgyLDE0ICsyODMsOSBAQCBib29s
IENETVNlc3Npb25BVkNvbnRlbnRLZXlTZXNzaW9uOjp1cGRhdGUoVWludDhBcnJheSoga2V5LCBS
ZWZQdHI8VWludDhBcnJheT4mCiAKICAgICAgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gb3B0
aW9uczsKICAgICAgICAgaWYgKCFtX3Byb3RvY29sVmVyc2lvbnMuaXNFbXB0eSgpICYmIFBBTDo6
Y2FuTG9hZF9BVkZvdW5kYXRpb25fQVZDb250ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNL
ZXkoKSkgewotICAgICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBwcm90b2NvbFZl
cnNpb25zT3B0aW9uID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8mIHZlcnNpb24gOiBtX3Byb3RvY29sVmVyc2lvbnMpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIXZlcnNpb24pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIFtwcm90b2NvbFZlcnNpb25zT3B0aW9uIGFkZE9iamVjdDpAKHZl
cnNpb24pXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3B0aW9ucyA9IEB7IEFWQ29u
dGVudEtleVJlcXVlc3RQcm90b2NvbFZlcnNpb25zS2V5OiBwcm90b2NvbFZlcnNpb25zT3B0aW9u
LmdldCgpIH07CisgICAgICAgICAgICBvcHRpb25zID0gQHsgQVZDb250ZW50S2V5UmVxdWVzdFBy
b3RvY29sVmVyc2lvbnNLZXk6IGNyZWF0ZU5TQXJyYXkobV9wcm90b2NvbFZlcnNpb25zLCBbXSAo
aW50IHZlcnNpb24pIC0+IE5TTnVtYmVyICogeworICAgICAgICAgICAgICAgIHJldHVybiB2ZXJz
aW9uID8gQCh2ZXJzaW9uKSA6IG5pbDsKKyAgICAgICAgICAgIH0pLmdldCgpIH07CiAgICAgICAg
IH0KIAogICAgICAgICBlcnJvckNvZGUgPSBNZWRpYVBsYXllcjo6Tm9FcnJvcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NE
TVNlc3Npb25BVlN0cmVhbVNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uLm1tCmluZGV4
IDEzOGUyZmQ5NDdlODI1ZmMwOTMxZjhmNzc0ZDI0NDllZjQxMjRiOWQuLjg5NmEyNDUyMmI4YzYy
ZmMzNTI0YzM0Mzc4OGU0MzM2ZDBiZGVmZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETVNlc3Npb25BVlN0cmVhbVNlc3Np
b24ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5tbQpAQCAtNDEsNiArNDEsNyBAQAogI2lt
cG9ydCA8cGFsL3NwaS9jb2NvYS9BVkZvdW5kYXRpb25TUEkuaD4KICNpbXBvcnQgPHd0Zi9GaWxl
U3lzdGVtLmg+CiAjaW1wb3J0IDx3dGYvVVVJRC5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3Rv
ckNvY29hLmg+CiAKICNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGluay5oPgog
CkBAIC0yMjYsMTQgKzIyNyw5IEBAIGJvb2wgQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbjo6dXBk
YXRlKFVpbnQ4QXJyYXkqIGtleSwgUmVmUHRyPFVpbnQ4QXJyYXk+JiBuZXh0CiAKICAgICAgICAg
UmV0YWluUHRyPE5TRGljdGlvbmFyeT4gb3B0aW9uczsKICAgICAgICAgaWYgKCFtX3Byb3RvY29s
VmVyc2lvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJy
YXk+IHByb3RvY29sVmVyc2lvbnNPcHRpb24gPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRdKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdmVyc2lvbiA6IG1fcHJvdG9jb2xW
ZXJzaW9ucykgewotICAgICAgICAgICAgICAgIGlmICghdmVyc2lvbikKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgW3Byb3RvY29sVmVyc2lvbnNPcHRpb24g
YWRkT2JqZWN0OkAodmVyc2lvbildOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvcHRp
b25zID0gQHsgQVZTdHJlYW1EYXRhUGFyc2VyQ29udGVudEtleVJlcXVlc3RQcm90b2NvbFZlcnNp
b25zS2V5OiBwcm90b2NvbFZlcnNpb25zT3B0aW9uLmdldCgpIH07CisgICAgICAgICAgICBvcHRp
b25zID0gQHsgQVZTdHJlYW1EYXRhUGFyc2VyQ29udGVudEtleVJlcXVlc3RQcm90b2NvbFZlcnNp
b25zS2V5OiBjcmVhdGVOU0FycmF5KG1fcHJvdG9jb2xWZXJzaW9ucywgW10gKGludCB2ZXJzaW9u
KSAtPiBOU051bWJlciAqIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmVyc2lvbiA/IEAodmVy
c2lvbikgOiBuaWw7CisgICAgICAgICAgICB9KS5nZXQoKSB9OwogICAgICAgICB9CiAKICAgICAg
ICAgTlNFcnJvciogZXJyb3IgPSBuaWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQppbmRleCBmMDA2
OTA4ZmM5OTQ3NmUzNTIxY2I0NDg0YzBkOGFjOTAxMjJlYjQ0Li4wOWZhY2YyNTU1ZDMwMmUzMTg0
MjgxNTYxOGJjNzA5MTM3ZDk1ZTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KQEAgLTY3LDYg
KzY3LDE2IEBACiAjaW1wb3J0ICJXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQg
IldlYkNvcmVDQUxheWVyRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJDb3JlTlNVUkxTZXNzaW9uLmgi
CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldEltYWdlR2VuZXJhdG9yLmg+CisjaW1wb3J0
IDxBVkZvdW5kYXRpb24vQVZBc3NldFRyYWNrLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZN
ZWRpYVNlbGVjdGlvbkdyb3VwLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZNZXRhZGF0YUl0
ZW0uaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlBsYXllci5oPgorI2ltcG9ydCA8QVZGb3Vu
ZGF0aW9uL0FWUGxheWVySXRlbS5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRl
bU91dHB1dC5oPgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbVRyYWNrLmg+Cisj
aW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJMYXllci5oPgorI2ltcG9ydCA8QVZGb3VuZGF0
aW9uL0FWVGltZS5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvRGF0YVZpZXcuaD4KICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L1R5cGVkQXJyYXlJbmxpbmVzLmg+CkBAIC04NCwyMyArOTQsMTMgQEAKICNpbXBvcnQgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL09TT2JqZWN0UHRyLmg+CiAjaW1wb3J0IDx3
dGYvVVJMLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShBVkZfQ0FQVElPTlMpCiAjaW5jbHVkZSAi
VGV4dFRyYWNrLmgiCiAjZW5kaWYKIAotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWQXNzZXRJbWFn
ZUdlbmVyYXRvci5oPgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWQXNzZXRUcmFjay5oPgotI2lt
cG9ydCA8QVZGb3VuZGF0aW9uL0FWTWVkaWFTZWxlY3Rpb25Hcm91cC5oPgotI2ltcG9ydCA8QVZG
b3VuZGF0aW9uL0FWTWV0YWRhdGFJdGVtLmg+Ci0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5
ZXIuaD4KLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlBsYXllckl0ZW0uaD4KLSNpbXBvcnQgPEFW
Rm91bmRhdGlvbi9BVlBsYXllckl0ZW1PdXRwdXQuaD4KLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9B
VlBsYXllckl0ZW1UcmFjay5oPgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVyTGF5ZXIu
aD4KLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KLQogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAjaW1wb3J0ICJXQUtBcHBLaXRTdHVicy5oIgogI2ltcG9ydCA8Q29yZUltYWdlL0Nv
cmVJbWFnZS5oPgpAQCAtODI2LDIzICs4MjYsMTggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0Rm9yVVJMKGNvbnN0IFVSTCYgdXJsKQogICAg
IH0KIAogI2lmIEVOQUJMRShBVkZfQ0FQVElPTlMpCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxQ
bGF0Zm9ybVRleHRUcmFjaz4+JiBvdXRPZkJhbmRUcmFja1NvdXJjZXMgPSBwbGF5ZXIoKS0+b3V0
T2ZCYW5kVHJhY2tTb3VyY2VzKCk7CisgICAgYXV0byBvdXRPZkJhbmRUcmFja1NvdXJjZXMgPSBw
bGF5ZXIoKS0+b3V0T2ZCYW5kVHJhY2tTb3VyY2VzKCk7CiAgICAgaWYgKCFvdXRPZkJhbmRUcmFj
a1NvdXJjZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4g
b3V0T2ZCYW5kVHJhY2tzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7
Ci0gICAgICAgIGZvciAoYXV0byYgdHJhY2tTb3VyY2UgOiBvdXRPZkJhbmRUcmFja1NvdXJjZXMp
IHsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbGFiZWwgPSB0cmFja1NvdXJj
ZS0+bGFiZWwoKS5jcmVhdGVDRlN0cmluZygpOwotICAgICAgICAgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBsYW5ndWFnZSA9IHRyYWNrU291cmNlLT5sYW5ndWFnZSgpLmNyZWF0ZUNGU3RyaW5n
KCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVuaXF1ZUlEID0gU3RyaW5n
OjpudW1iZXIodHJhY2tTb3VyY2UtPnVuaXF1ZUlkKCkpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0gICAg
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVybCA9IHRyYWNrU291cmNlLT51cmwoKS5j
cmVhdGVDRlN0cmluZygpOwotICAgICAgICAgICAgW291dE9mQmFuZFRyYWNrcy5nZXQoKSBhZGRP
YmplY3Q6QHsKLSAgICAgICAgICAgICAgICBBVk91dE9mQmFuZEFsdGVybmF0ZVRyYWNrRGlzcGxh
eU5hbWVLZXk6IChfX2JyaWRnZSBOU1N0cmluZyAqKWxhYmVsLmdldCgpLAotICAgICAgICAgICAg
ICAgIEFWT3V0T2ZCYW5kQWx0ZXJuYXRlVHJhY2tFeHRlbmRlZExhbmd1YWdlVGFnS2V5OiAoX19i
cmlkZ2UgTlNTdHJpbmcgKilsYW5ndWFnZS5nZXQoKSwKKyAgICAgICAgYXV0byBvdXRPZkJhbmRU
cmFja3MgPSBjcmVhdGVOU0FycmF5KG91dE9mQmFuZFRyYWNrU291cmNlcywgW10gKGF1dG8mIHRy
YWNrU291cmNlKSB7CisgICAgICAgICAgICByZXR1cm4gQHsKKyAgICAgICAgICAgICAgICBBVk91
dE9mQmFuZEFsdGVybmF0ZVRyYWNrRGlzcGxheU5hbWVLZXk6IHRyYWNrU291cmNlLT5sYWJlbCgp
LAorICAgICAgICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJuYXRlVHJhY2tFeHRlbmRlZExhbmd1
YWdlVGFnS2V5OiB0cmFja1NvdXJjZS0+bGFuZ3VhZ2UoKSwKICAgICAgICAgICAgICAgICBBVk91
dE9mQmFuZEFsdGVybmF0ZVRyYWNrSXNEZWZhdWx0S2V5OiB0cmFja1NvdXJjZS0+aXNEZWZhdWx0
KCkgPyBAWUVTIDogQE5PLAotICAgICAgICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJuYXRlVHJh
Y2tJZGVudGlmaWVyS2V5OiAoX19icmlkZ2UgTlNTdHJpbmcgKil1bmlxdWVJRC5nZXQoKSwKLSAg
ICAgICAgICAgICAgICBBVk91dE9mQmFuZEFsdGVybmF0ZVRyYWNrU291cmNlS2V5OiAoX19icmlk
Z2UgTlNTdHJpbmcgKil1cmwuZ2V0KCksCisgICAgICAgICAgICAgICAgQVZPdXRPZkJhbmRBbHRl
cm5hdGVUcmFja0lkZW50aWZpZXJLZXk6IFN0cmluZzo6bnVtYmVyKHRyYWNrU291cmNlLT51bmlx
dWVJZCgpKSwKKyAgICAgICAgICAgICAgICBBVk91dE9mQmFuZEFsdGVybmF0ZVRyYWNrU291cmNl
S2V5OiB0cmFja1NvdXJjZS0+dXJsKCksCiAgICAgICAgICAgICAgICAgQVZPdXRPZkJhbmRBbHRl
cm5hdGVUcmFja01lZGlhQ2hhcmFjdGVyc3RpY3NLZXk6IG1lZGlhRGVzY3JpcHRpb25Gb3JLaW5k
KHRyYWNrU291cmNlLT5raW5kKCkpLAotICAgICAgICAgICAgfV07Ci0gICAgICAgIH0KKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0pOwogCiAgICAgICAgIFtvcHRpb25zLmdldCgpIHNldE9iamVj
dDpvdXRPZkJhbmRUcmFja3MuZ2V0KCkgZm9yS2V5OkFWVVJMQXNzZXRPdXRPZkJhbmRBbHRlcm5h
dGVUcmFja3NLZXldOwogICAgIH0KQEAgLTg1NywxMCArODUyLDkgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0Rm9yVVJMKGNvbnN0IFVSTCYg
dXJsKQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgVmVjdG9yPENvb2tpZT4gY29va2ll
czsKICAgICBpZiAocGxheWVyKCktPmdldFJhd0Nvb2tpZXModXJsLCBjb29raWVzKSkgewotICAg
ICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG5zQ29va2llcyA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb29raWVzLnNpemUoKV0pOwotICAg
ICAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCi0gICAgICAgICAgICBbbnNDb29raWVz
IGFkZE9iamVjdDooTlNIVFRQQ29va2llICopY29va2llXTsKLQorICAgICAgICBhdXRvIG5zQ29v
a2llcyA9IGNyZWF0ZU5TQXJyYXkoY29va2llcywgW10gKGF1dG8mIGNvb2tpZSkgLT4gTlNIVFRQ
Q29va2llICogeworICAgICAgICAgICAgcmV0dXJuIGNvb2tpZTsKKyAgICAgICAgfSk7CiAgICAg
ICAgIGlmIChQQUw6OmNhbkxvYWRfQVZGb3VuZGF0aW9uX0FWVVJMQXNzZXRIVFRQQ29va2llc0tl
eSgpKQogICAgICAgICAgICAgW29wdGlvbnMgc2V0T2JqZWN0Om5zQ29va2llcy5nZXQoKSBmb3JL
ZXk6QVZVUkxBc3NldEhUVFBDb29raWVzS2V5XTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9y
bUNBQW5pbWF0aW9uQ29jb2EubW0KaW5kZXggNDgxNmIwMDRmMTQ4MTgwZmI5MDE1NzkxOWNlYmU3
YjVlZGRmNTVjMC4uOGZiMmMxMjNmYjk4MWVkM2Y4YmM5YjE4Njk1MTA2NWYxNWFkM2JhOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQpAQCAtMzEsNiArMzEsNyBA
QAogI2ltcG9ydCAiVGltaW5nRnVuY3Rpb24uaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6
Q29yZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CisjaW1wb3J0
IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NjIsMTAgKzQ2Myw5IEBAIHZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWUp
CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp2YWx1
ZS5zaXplKCldOwotICAgIGZvciAoYXV0byBudW1iZXIgOiB2YWx1ZSkKLSAgICAgICAgW2FycmF5
IGFkZE9iamVjdDpAKG51bWJlcildOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0
aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczphcnJheV07CisgICAgW3N0YXRpY19j
YXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNy
ZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChmbG9hdCBudW1iZXIpIHsKKyAgICAgICAgcmV0dXJuIEAo
bnVtYmVyKTsKKyAgICB9KS5nZXQoKV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFRyYW5zZm9ybWF0aW9uTWF0cml4PiYgdmFsdWUp
CkBAIC00NzMsMTAgKzQ3Myw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRW
YWx1ZXMoY29uc3QgVmVjdG9yPFRyYW5zZm9ybWF0aW9uTWF0cml4PiYgdmFsCiAgICAgaWYgKGFu
aW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBh
cnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp2YWx1ZS5zaXplKCldOwot
ICAgIGZvciAoYXV0byYgbWF0cml4IDogdmFsdWUpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6
W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDptYXRyaXhdXTsKLSAgICBbc3RhdGljX2Nh
c3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6YXJy
YXldOworICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24u
Z2V0KCkpIHNldFZhbHVlczpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYgbWF0cml4KSB7
CisgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOm1hdHJpeF07
CisgICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0
VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZSkKQEAgLTQ4NCwxMCArNDgz
LDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyhjb25zdCBWZWN0
b3I8RmxvYXRQb2ludDNEPiYgdmFsdWUpCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlm
cmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhcnJheSA9IFtOU011dGFibGVBcnJh
eSBhcnJheVdpdGhDYXBhY2l0eTp2YWx1ZS5zaXplKCldOwotICAgIGZvciAoYXV0byYgcG9pbnQg
OiB2YWx1ZSkKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpAW0AocG9pbnQueCgpKSwgQChwb2lu
dC55KCkpLCBAKHBvaW50LnooKSldXTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1h
dGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6YXJyYXldOworICAgIFtzdGF0aWNf
Y2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpj
cmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYgcG9pbnQpIHsKKyAgICAgICAgcmV0dXJuIEBb
QChwb2ludC54KCkpLCBAKHBvaW50LnkoKSksIEAocG9pbnQueigpKV07CisgICAgfSkuZ2V0KCld
OwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZl
Y3RvcjxDb2xvcj4mIHZhbHVlKQpAQCAtNDk1LDEwICs0OTMsOSBAQCB2b2lkIFBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxDb2xvcj4mIHZhbHVlKQogICAg
IGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dmFsdWUuc2l6
ZSgpXTsKLSAgICBmb3IgKGF1dG8mIGNvbG9yIDogdmFsdWUpCi0gICAgICAgIFthcnJheSBhZGRP
YmplY3Q6QFtAKGNvbG9yLnJlZCgpKSwgQChjb2xvci5ncmVlbigpKSwgQChjb2xvci5ibHVlKCkp
LCBAKGNvbG9yLmFscGhhKCkpXV07Ci0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRp
b24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmFycmF5XTsKKyAgICBbc3RhdGljX2Nh
c3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6Y3Jl
YXRlTlNBcnJheSh2YWx1ZSwgW10gKGF1dG8mIGNvbG9yKSB7CisgICAgICAgIHJldHVybiBAW0Ao
Y29sb3IucmVkKCkpLCBAKGNvbG9yLmdyZWVuKCkpLCBAKGNvbG9yLmJsdWUoKSksIEAoY29sb3Iu
YWxwaGEoKSldOworICAgIH0pLmdldCgpXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4+JiB2
YWx1ZXMsIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpCkBAIC01MDYsMTAgKzUwMyw5
IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9y
PFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+PiYKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtl
eWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGFycmF5ID0gW05TTXV0YWJsZUFy
cmF5IGFycmF5V2l0aENhcGFjaXR5OnZhbHVlcy5zaXplKCldOwotICAgIGZvciAoYXV0byYgdmFs
dWUgOiB2YWx1ZXMpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6UGxhdGZvcm1DQUZpbHRlcnM6
OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKHZhbHVlLmdldCgpLCBpbnRlcm5hbEZpbHRlclByb3Bl
cnR5SW5kZXgpLmdldCgpXTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+
KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6YXJyYXldOworICAgIFtzdGF0aWNfY2FzdDxD
QUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVhdGVO
U0FycmF5KHZhbHVlcywgWyZdIChhdXRvJiB2YWx1ZSkgeworICAgICAgICByZXR1cm4gUGxhdGZv
cm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKHZhbHVlLmdldCgpLCBpbnRlcm5h
bEZpbHRlclByb3BlcnR5SW5kZXgpOworICAgIH0pLmdldCgpXTsKIH0KIAogdm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uQ29jb2E6OmNvcHlWYWx1ZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRp
b24mIHZhbHVlKQpAQCAtNTIzLDEwICs1MTksOSBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYTo6Y29weVZhbHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCiAK
IHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRLZXlUaW1lcyhjb25zdCBWZWN0b3I8
ZmxvYXQ+JiB2YWx1ZSkKIHsKLSAgICBhdXRvIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5
V2l0aENhcGFjaXR5OnZhbHVlLnNpemUoKV07Ci0gICAgZm9yIChhdXRvIHRpbWUgOiB2YWx1ZSkK
LSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpAKHRpbWUpXTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FL
ZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRLZXlUaW1lczphcnJheV07
CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQo
KSkgc2V0S2V5VGltZXM6Y3JlYXRlTlNBcnJheSh2YWx1ZSwgW10gKGZsb2F0IHRpbWUpIHsKKyAg
ICAgICAgcmV0dXJuIEAodGltZSk7CisgICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYTo6Y29weUtleVRpbWVzRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0
aW9uJiB2YWx1ZSkKQEAgLTUzNywxMCArNTMyLDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OmNvcHlLZXlUaW1lc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUK
IAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRpbWluZ0Z1bmN0aW9ucyhjb25z
dCBWZWN0b3I8Y29uc3QgVGltaW5nRnVuY3Rpb24qPiYgdmFsdWUsIGJvb2wgcmV2ZXJzZSkKIHsK
LSAgICBhdXRvIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnZhbHVl
LnNpemUoKV07Ci0gICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IHZhbHVlKQotICAgICAgICBbYXJy
YXkgYWRkT2JqZWN0OnRvQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uKGZ1bmN0aW9uLCByZXZlcnNlKV07
Ci0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQo
KSkgc2V0VGltaW5nRnVuY3Rpb25zOmFycmF5XTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFt
ZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUaW1pbmdGdW5jdGlvbnM6Y3JlYXRl
TlNBcnJheSh2YWx1ZSwgWyZdIChhdXRvJiBmdW5jdGlvbikgeworICAgICAgICByZXR1cm4gdG9D
QU1lZGlhVGltaW5nRnVuY3Rpb24oZnVuY3Rpb24sIHJldmVyc2UpOworICAgIH0pLmdldCgpXTsK
IH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmNvcHlUaW1pbmdGdW5jdGlvbnNG
cm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3Jt
Q0FGaWx0ZXJzQ29jb2EubW0KaW5kZXggM2M0ZGNlMmFiM2IyZTA5MzU0YjhiNzQ0ZTkxM2MzMDZm
NjA3NzZmMy4uMDFjNWUyZGE2ZDhiNDU4ODllYTVhZTMxYWY1MzI2MzU5MGRhZTY2MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1D
QUZpbHRlcnNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1w
b3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29jb2EvUXVh
cnR6Q29yZVNQSS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBv
cnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYyLDIxICs2Mywy
MiBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxh
eWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TCiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICAvLyBBc3N1bWUgZmls
dGVyc0NhbkJlQ29tcG9zaXRlZCB3YXMgY2FsbGVkIGFuZCBpdCByZXR1cm5lZCB0cnVlLgogICAg
IEFTU0VSVChQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChmaWx0
ZXJzKSk7Ci0gICAgCisKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAKLSAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0XSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVy
cy5zaXplKCk7ICsraSkgewotICAgICAgICBTdHJpbmcgZmlsdGVyTmFtZSA9IG1ha2VTdHJpbmco
ImZpbHRlcl8iLCBpKTsKLSAgICAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVy
YXRpb24gPSAqZmlsdGVycy5hdChpKTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBhdXRvIGFy
cmF5ID0gY3JlYXRlTlNBcnJheShmaWx0ZXJzLm9wZXJhdGlvbnMoKSwgWyZdIChhdXRvJiBvcGVy
YXRpb25QdHIpIC0+IGlkIHsKKyAgICAgICAgU3RyaW5nIGZpbHRlck5hbWUgPSBtYWtlU3RyaW5n
KCJmaWx0ZXJfIiwgaSsrKTsKKyAgICAgICAgYXV0byYgZmlsdGVyT3BlcmF0aW9uID0gKm9wZXJh
dGlvblB0cjsKICAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpERUZBVUxUOgorICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6UkVGRVJFTkNFOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Tk9ORToK
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJP
UF9TSEFET1c6IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IGFzc3VtZSBkcm9wIHNo
YWRvdyBpcyB0aGUgbGFzdCBmaWx0ZXIsIHB1dCBpdCBvbiB0aGUgbGF5ZXIuCiAgICAgICAgICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vMTA5NTk5Njk+IEhhbmRsZSBjYXNlIHdoZXJlIGRyb3Atc2hh
ZG93IGlzIG5vdCB0aGUgbGFzdCBmaWx0ZXIuCkBAIC04NSw3ICs4Nyw3IEBAIHZvaWQgUGxhdGZv
cm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25z
dCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBbbGF5ZXIgc2V0U2hhZG93Q29sb3I6Y2FjaGVkQ0dD
b2xvcihkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCkpXTsKICAgICAgICAgICAgIFtsYXllciBz
ZXRTaGFkb3dSYWRpdXM6ZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24oKV07CiAgICAg
ICAgICAgICBbbGF5ZXIgc2V0U2hhZG93T3BhY2l0eToxXTsKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgfQogI2lmIFVTRV9DQV9GSUxURVJTCiAg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKQEAgLTkzLDI0ICs5NSwy
MSBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxh
eWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRl
ciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1vbm9jaHJvbWVdOwog
ICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmNv
bG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJpbnB1dEFtb3VudCJdOwogICAg
ICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5
LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpTRVBJQTogewogICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFs
dWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJP
cGVyYXRpb24udHlwZSgpLCAmZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENBRmlsdGVy
ICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhd
OwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZv
cktleTpAImlucHV0Q29sb3JNYXRyaXgiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpm
aWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsK
LSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKICAgICAgICAgICAg
IGNvbnN0IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENBRmls
dGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JTYXR1
cmF0ZV07CiAgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRo
RmxvYXQ6Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0QW1vdW50
Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAg
ICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkhVRV9ST1RBVEU6IHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKQEAgLTExOCwxNiArMTE3LDE0IEBAIHZvaWQgUGxhdGZvcm1DQUZp
bHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0
ZXJPcGVyCiAgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRo
RmxvYXQ6ZGVnMnJhZChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSldIGZvcktleTpAImlu
cHV0QW5nbGUiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpAImh1ZVJvdGF0ZSJdOwog
ICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2Fy
cmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpJTlZFUlQ6IHsKICAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJp
eFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoZmls
dGVyT3BlcmF0aW9uLnR5cGUoKSwgJmZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDQUZp
bHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0
cml4XTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQo
KSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5h
bWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRl
cl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5F
U1M6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJ
R0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRlci4KQEAgLTEzNywyNCAr
MTM0LDIxIEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRm
b3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBDQUZpbHRlciAq
ZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsK
ICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JL
ZXk6QCJpbnB1dENvbG9yTWF0cml4Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6Zmls
dGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKICAgICAgICAgICAg
IFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6
OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSwgJmZpbHRl
ck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVyIGZp
bHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsKICAgICAgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JLZXk6QCJpbnB1dENvbG9yTWF0cml4
Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAg
ICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNPTlRSQVNUOiB7CiAgICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29s
b3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmls
dGVyKGZpbHRlck9wZXJhdGlvbi50eXBlKCksICZmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAg
ICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJD
b2xvck1hdHJpeF07CiAgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4VmFs
dWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRDb2xvck1hdHJpeCJdOwogICAgICAgICAgICAgW2ZpbHRl
ciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVj
dDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVy
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAgICAg
ICAgICAgICBjb25zdCBhdXRvJiBibHVyT3BlcmF0aW9uID0gZG93bmNhc3Q8Qmx1ckZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKQEAgLTE2NSw4ICsxNTksNyBAQCB2b2lkIFBsYXRm
b3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29u
c3QgRmlsdGVyT3BlcgogICAgICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6QFlFUyBmb3JL
ZXk6QCJpbnB1dE5vcm1hbGl6ZUVkZ2VzIl07CiAjZW5kaWYKICAgICAgICAgICAgIFtmaWx0ZXIg
c2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6
ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsK
ICAgICAgICAgfQogI2Vsc2UKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FM
RTogewpAQCAtMTc2LDggKzE2OSw3IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRl
cnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgICAg
ICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Y29sb3JNYXRy
aXhPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0SW50ZW5zaXR5Il07CiAgICAgICAg
ICAgICBbZmlsdGVyIHNldFZhbHVlOltDSUNvbG9yIGNvbG9yV2l0aFJlZDowLjY3IGdyZWVuOjAu
NjcgYmx1ZTowLjY3XSBmb3JLZXk6QCJpbnB1dENvbG9yIl07IC8vIENvbG9yIGRlcml2ZWQgZW1w
aXJpY2FsbHkgdG8gbWF0Y2ggemVybyBzYXR1cmF0aW9uIGxldmVscy4KICAgICAgICAgICAgIFtm
aWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRP
YmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZp
bHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsK
ICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKQEAgLTE5
Nyw4ICsxODksNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQ
bGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogICAgICAgICAgICAgICAgIFk6
V2ViQ29yZTo6YmxlbmQoc2VwaWFOb25lQ29uc3RhbnRzWzJdWzFdLCBzZXBpYUZ1bGxDb25zdGFu
dHNbMl1bMV0sIHQpCiAgICAgICAgICAgICAgICAgWjpXZWJDb3JlOjpibGVuZChzZXBpYU5vbmVD
b25zdGFudHNbMl1bMl0sIHNlcGlhRnVsbENvbnN0YW50c1syXVsyXSwgdCkgVzowXSBmb3JLZXk6
QCJpbnB1dEJWZWN0b3IiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1l
XTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKICAgICAgICAgICAgIGNvbnN0IGF1
dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKQEAgLTIwNiw4ICsxOTcsNyBAQCB2b2lkIFBs
YXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwg
Y29uc3QgRmlsdGVyT3BlcgogICAgICAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CiAgICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Y29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0U2F0dXJhdGlvbiJdOwogICAg
ICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5
LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpIVUVfUk9UQVRFOiB7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBjb2xvck1hdHJpeE9wZXJh
dGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9w
ZXJhdGlvbik7CkBAIC0yMTYsOCArMjA2LDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0
RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKIAog
ICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmRl
ZzJyYWQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpXSBmb3JLZXk6QCJpbnB1dEFuZ2xl
Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAg
ICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OklOVkVSVDogewogICAgICAgICAgICAgY29uc3QgYXV0byYgY29tcG9uZW50VHJh
bnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwpAQCAtMjMzLDggKzIyMiw3IEBAIHZvaWQgUGxhdGZv
cm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25z
dCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDowIFk6MCBaOjAgVzoxXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKICAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOm9wLT5hbW91bnQoKSBZ
Om9wLT5hbW91bnQoKSBaOm9wLT5hbW91bnQoKSBXOjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3Rv
ciJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAg
ICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOgogICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIEFQUExFX0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1h
cHBsZS1jb2xvci1maWx0ZXIuCkBAIC0yNTAsOCArMjM4LDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmls
dGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRl
ck9wZXIKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhY
OjAgWTowIFo6MCBXOmNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6
QCJpbnB1dEFWZWN0b3IiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9y
IHZlY3RvcldpdGhYOjAgWTowIFo6MCBXOjBdIGZvcktleTpAImlucHV0Qmlhc1ZlY3RvciJdOwog
ICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2Fy
cmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpCUklHSFRORVNTOiB7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBjb21wb25lbnRUcmFu
c2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24+KGZpbHRlck9wZXJhdGlvbik7CkBAIC0yNjMsOCArMjUwLDcgQEAgdm9pZCBQbGF0Zm9y
bUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0
IEZpbHRlck9wZXIKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3Rv
cldpdGhYOjAgWTphbW91bnQgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07CiAgICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDowIFk6MCBaOmFt
b3VudCBXOjBdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwogICAgICAgICAgICAgW2ZpbHRlciBz
ZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpm
aWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewogICAg
ICAgICAgICAgY29uc3QgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwpAQCAtMjcyLDggKzI1OCw3IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNP
bkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAg
ICBbZmlsdGVyIHNldERlZmF1bHRzXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQo
KV0gZm9yS2V5OkAiaW5wdXRDb250cmFzdCJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1l
OmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJd
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgc3RkRGV2aWF0aW9uWS4KQEAgLTI4MiwyMSArMjY3
LDE5IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3Jt
TGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBbZmlsdGVyIHNldERl
ZmF1bHRzXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDpmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCks
IDApXSBmb3JLZXk6QCJpbnB1dFJhZGl1cyJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1l
OmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJd
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAg
ICB9CiAjZW5kaWYKICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlBBU1NUSFJPVUdIOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQo
MCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAg
IH0KLSAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
bmlsOworICAgIH0pOwogCi0gICAgaWYgKFthcnJheS5nZXQoKSBjb3VudF0gPiAwKQorICAgIGlm
IChbYXJyYXkgY291bnRdKQogICAgICAgICBbbGF5ZXIgc2V0RmlsdGVyczphcnJheS5nZXQoKV07
Ci0gICAgCisKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXll
ckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxh
dGZvcm1DQUxheWVyQ29jb2EubW0KaW5kZXggM2IxM2ExZjNiMjY1ZmY5YjQyZTVjMjIyZWY3YjZm
YWY4MzRmMzc1MC4uNGRhOWZmMTNmZTFkZDAxNTY1OWJiYzA4N2VmNDY1ZDU0MTk3NGQ0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZv
cm1DQUxheWVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0KQEAgLTUxLDYgKzUxLDcgQEAKICNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4K
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2Nv
YS5oPgogCiAjaWYgRU5BQkxFKFdFQkdQVSkKICNpbXBvcnQgIldlYkdQVUxheWVyLmgiCkBAIC00
NTYsMTIgKzQ1Nyw5IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyQ29jb2E6OnNldFN1YmxheWVycyhj
b25zdCBQbGF0Zm9ybUNBTGF5ZXJMaXN0JiBsaXN0KQogICAgIH0KIAogICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUwotICAgIE5TTXV0YWJsZUFycmF5KiBzdWJsYXllcnMgPSBbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3Qu
c2l6ZSgpOyArK2kpCi0gICAgICAgIFtzdWJsYXllcnMgYWRkT2JqZWN0Omxpc3RbaV0tPm1fbGF5
ZXIuZ2V0KCldOwotCi0gICAgW21fbGF5ZXIgc2V0U3VibGF5ZXJzOnN1YmxheWVyc107Ci0gICAg
W3N1YmxheWVycyByZWxlYXNlXTsKKyAgICBbbV9sYXllciBzZXRTdWJsYXllcnM6Y3JlYXRlTlNB
cnJheShsaXN0LCBbXSAoYXV0byYgbGF5ZXIpIHsKKyAgICAgICAgcmV0dXJuIGxheWVyLT5tX2xh
eWVyOworICAgIH0pLmdldCgpXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9h
cmRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJk
SU9TLm1tCmluZGV4IGJhYTI1NTUwOGMzODA4NmFjNjBjNGUxMDI5MWExM2M3MzYxNTFkNDAuLmQy
ZjMyMjAwNDdmNmYzNDM1MzU2Yzk3ODc1MTAzOGU2YjhiMGYxOWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQpAQCAtNjE1
LDExICs2MTUsOSBAQCBzdGF0aWMgUmV0YWluUHRyPFdlYkl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlv
bkluZm9MaXN0PiBjcmVhdGVJdGVtUHJvdmlkZXJSZWdpc3RyYQogCiBpbnQ2NF90IFBsYXRmb3Jt
UGFzdGVib2FyZDo6d3JpdGUoY29uc3QgVmVjdG9yPFBhc3RlYm9hcmRDdXN0b21EYXRhPiYgaXRl
bURhdGEpCiB7Ci0gICAgYXV0byByZWdpc3RyYXRpb25MaXN0cyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTppdGVtRGF0YS5zaXplKCldKTsKLSAgICBm
b3IgKGF1dG8mIGRhdGEgOiBpdGVtRGF0YSkgewotICAgICAgICBpZiAoYXV0byBpdGVtTGlzdCA9
IGNyZWF0ZUl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkxpc3QoZGF0YSkpCi0gICAgICAgICAgICBb
cmVnaXN0cmF0aW9uTGlzdHMgYWRkT2JqZWN0Oml0ZW1MaXN0LmdldCgpXTsKLSAgICB9CisgICAg
YXV0byByZWdpc3RyYXRpb25MaXN0cyA9IGNyZWF0ZU5TQXJyYXkoaXRlbURhdGEsIFtdIChhdXRv
JiBkYXRhKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVJdGVtUHJvdmlkZXJSZWdpc3RyYXRpb25M
aXN0KGRhdGEpOworICAgIH0pOwogICAgIHJlZ2lzdGVySXRlbXNUb1Bhc3RlYm9hcmQocmVnaXN0
cmF0aW9uTGlzdHMuZ2V0KCksIG1fcGFzdGVib2FyZC5nZXQoKSk7CiAgICAgcmV0dXJuIFttX3Bh
c3RlYm9hcmQgY2hhbmdlQ291bnRdOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCmluZGV4IGFh
NTU0OTRlMWFiNzYyYmVmNDI2OTc5ZDVjNTRlZGI4ZGE3YTExYzAuLmZmMDM5YWQ5YjQyNTFjNjNh
ODhiNTljZjVkY2U4NTdmNWZkYjBlYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0KQEAgLTM4
LDYgKzM4LDcgQEAKICNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlRpbWUuaD4KICNpbXBvcnQgPHBh
bC9zcGkvY29jb2EvQVZLaXRTUEkuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBv
cnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5o
PgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTE1NSwyMCArMTU2LDE4IEBA
IHZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmNhblBsYXlGYXN0UmV2ZXJzZUNo
YW5nZWQoYm9vbCBjYW5QbGF5RmFzdFJlCiAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDYW5T
Y2FuQmFja3dhcmQ6Y2FuUGxheUZhc3RSZXZlcnNlXTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxNZWRpYVNl
bGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMpCitzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IG1lZGlh
U2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zKQogewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IGFkb3B0
TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpvcHRpb25zLnNpemUo
KV0pOwotICAgIGZvciAoYXV0byYgb3B0aW9uIDogb3B0aW9ucykgewotICAgICAgICBSZXRhaW5Q
dHI8V2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbj4gd2ViT3B0aW9uID0gYWRvcHROUyhbW1dlYkFW
TWVkaWFTZWxlY3Rpb25PcHRpb24gYWxsb2NdIGluaXRdKTsKKyAgICByZXR1cm4gY3JlYXRlTlNB
cnJheShvcHRpb25zLCBbXSAoYXV0byYgb3B0aW9uKSB7CisgICAgICAgIGF1dG8gd2ViT3B0aW9u
ID0gYWRvcHROUyhbW1dlYkFWTWVkaWFTZWxlY3Rpb25PcHRpb24gYWxsb2NdIGluaXRdKTsKICAg
ICAgICAgW3dlYk9wdGlvbiBzZXRMb2NhbGl6ZWREaXNwbGF5TmFtZTpvcHRpb24uZGlzcGxheU5h
bWVdOwotICAgICAgICBbd2ViT3B0aW9ucyBhZGRPYmplY3Q6d2ViT3B0aW9uLmdldCgpXTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHdlYk9wdGlvbnM7CisgICAgICAgIHJldHVybiB3ZWJPcHRpb247Cisg
ICAgfSk7CiB9CiAKIHZvaWQgUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQ6OmF1ZGlvTWVk
aWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRp
b24+JiBvcHRpb25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewotICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25z
KTsKKyAgICBhdXRvIHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7
CiAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczp3
ZWJPcHRpb25zLmdldCgpXTsKICAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25zIGNv
dW50XSkKICAgICAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDdXJyZW50QXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnN0YXRpY19jYXN0PE5TVUlu
dGVnZXI+KHNlbGVjdGVkSW5kZXgpXV07CkBAIC0xNzYsNyArMTc1LDcgQEAgdm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnNDaGFuZ2Vk
KGNvbnN0IFZlY3QKIAogdm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6bGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9u
T3B0aW9uPiYgb3B0aW9ucywgdWludDY0X3Qgc2VsZWN0ZWRJbmRleCkKIHsKLSAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0
aW9ucyk7CisgICAgYXV0byB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlv
bnMpOwogICAgIFttX3BsYXllckNvbnRyb2xsZXIgc2V0TGVnaWJsZU1lZGlhU2VsZWN0aW9uT3B0
aW9uczp3ZWJPcHRpb25zLmdldCgpXTsKICAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRp
b25zIGNvdW50XSkKICAgICAgICAgW21fcGxheWVyQ29udHJvbGxlciBzZXRDdXJyZW50TGVnaWJs
ZU1lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nh
c3Q8TlNVSW50ZWdlcj4oc2VsZWN0ZWRJbmRleCldXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCmluZGV4IDA3NjI3ZjFjYjQy
NDc4YmQ2MzMxOWRlNmNmYmEzM2Y3MzY5ZGRhMTMuLmZiZWE1MzYxYjljM2U4YzMwNzY4ZGUzZmFl
ZWEzOWU1YWI5Y2ZkMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Q
bGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbQpAQCAtNTA2LDExICs1MDYsMTAgQEAgaW50NjRfdCBQ
bGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFZlY3RvcjxQYXN0ZWJvYXJkQ3VzdG9tRGF0
YT4mIGl0ZW1EYXRhKQogICAgIGlmIChpdGVtRGF0YS5zaXplKCkgPT0gMSkKICAgICAgICAgcmV0
dXJuIHdyaXRlKGl0ZW1EYXRhLmZpcnN0KCkpOwogCi0gICAgYXV0byBwbGF0Zm9ybUl0ZW1zID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Oml0ZW1EYXRh
LnNpemUoKV0pOwotICAgIGZvciAoYXV0byYgZGF0YSA6IGl0ZW1EYXRhKQotICAgICAgICBbcGxh
dGZvcm1JdGVtcyBhZGRPYmplY3Q6Y3JlYXRlUGFzdGVib2FyZEl0ZW0oZGF0YSkuZ2V0KCldOwog
ICAgIFttX3Bhc3RlYm9hcmQgY2xlYXJDb250ZW50c107Ci0gICAgW21fcGFzdGVib2FyZCB3cml0
ZU9iamVjdHM6cGxhdGZvcm1JdGVtcy5nZXQoKV07CisgICAgW21fcGFzdGVib2FyZCB3cml0ZU9i
amVjdHM6Y3JlYXRlTlNBcnJheShpdGVtRGF0YSwgW10gKGF1dG8mIGRhdGEpIHsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZVBhc3RlYm9hcmRJdGVtKGRhdGEpOworICAgIH0pLmdldCgpXTsKICAgICBy
ZXR1cm4gW21fcGFzdGVib2FyZCBjaGFuZ2VDb3VudF07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbQpp
bmRleCBjZGI0NjI0ZmJjYWFiY2ZkNDhmMmQ0MzhiNTM4MWE0MmFjY2RhMGY2Li5kOTYwZmM4MGE4
OTViOGNmOTEzM2RhYjk2NzViZGM2NWUwNDlkOTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCkBAIC0z
Miw2ICszMiw3IEBACiAjaW1wb3J0ICJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMuaCIKICNp
bXBvcnQgIlBsYXliYWNrU2Vzc2lvbk1vZGVsLmgiCiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcu
aD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIElHTk9SRV9XQVJOSU5HU19CRUdJTigibnVsbGFiaWxpdHktY29tcGxl
dGVuZXNzIikKQEAgLTIwOCwxOSArMjA5LDE2IEBAIHN0YXRpYyBBVlRvdWNoQmFyTWVkaWFTZWxl
Y3Rpb25PcHRpb25UeXBlIHRvQVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZShNCiAg
ICAgcmV0dXJuIEFWVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvblR5cGVSZWd1bGFyOwogfQog
Ci1zdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMo
Y29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYgb3B0aW9ucykKK3N0YXRpYyBSZXRh
aW5QdHI8TlNBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRpb25zKGNvbnN0IFZlY3RvcjxNZWRpYVNl
bGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMpCiB7Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiB3ZWJPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5Om9wdGlvbnMuc2l6ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBvcHRpb24gOiBvcHRpb25z
KSB7Ci0gICAgICAgIGlmIChhdXRvIHdlYk9wdGlvbiA9IGFkb3B0TlMoW2FsbG9jQVZUb3VjaEJh
ck1lZGlhU2VsZWN0aW9uT3B0aW9uSW5zdGFuY2UoKSBpbml0V2l0aFRpdGxlOm9wdGlvbi5kaXNw
bGF5TmFtZSB0eXBlOnRvQVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZShvcHRpb24u
dHlwZSldKSkKLSAgICAgICAgICAgIFt3ZWJPcHRpb25zIGFkZE9iamVjdDp3ZWJPcHRpb24uZ2V0
KCldOwotICAgIH0KLSAgICByZXR1cm4gd2ViT3B0aW9uczsKKyAgICByZXR1cm4gY3JlYXRlTlNB
cnJheShvcHRpb25zLCBbXSAoYXV0byYgb3B0aW9uKSB7CisgICAgICAgIHJldHVybiBhZG9wdE5T
KFthbGxvY0FWVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvbkluc3RhbmNlKCkgaW5pdFdpdGhU
aXRsZTpvcHRpb24uZGlzcGxheU5hbWUgdHlwZTp0b0FWVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9w
dGlvblR5cGUob3B0aW9uLnR5cGUpXSk7CisgICAgfSk7CiB9CiAKIC0gKHZvaWQpc2V0QXVkaW9N
ZWRpYVNlbGVjdGlvbk9wdGlvbnM6KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4m
KW9wdGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6KE5TVUludGVnZXIpc2VsZWN0ZWRJbmRleAogewot
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9u
T3B0aW9ucyhvcHRpb25zKTsKKyAgICBhdXRvIHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9w
dGlvbnMob3B0aW9ucyk7CiAgICAgW3NlbGYgc2V0QXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9u
T3B0aW9uczp3ZWJPcHRpb25zLmdldCgpXTsKICAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJP
cHRpb25zIGNvdW50XSkKICAgICAgICAgW3NlbGYgc2V0Q3VycmVudEF1ZGlvVG91Y2hCYXJNZWRp
YVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnNlbGVjdGVkSW5kZXhd
XTsKQEAgLTIyOCw3ICsyMjYsNyBAQCAtICh2b2lkKXNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRp
b25zOihjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JilvcHRpbwogCiAtICh2b2lk
KXNldExlZ2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbnM6KGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVj
dGlvbk9wdGlvbj4mKW9wdGlvbnMgd2l0aFNlbGVjdGVkSW5kZXg6KE5TVUludGVnZXIpc2VsZWN0
ZWRJbmRleAogewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1l
ZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKKyAgICBhdXRvIHdlYk9wdGlvbnMgPSBtZWRp
YVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7CiAgICAgW3NlbGYgc2V0TGVnaWJsZVRvdWNoQmFy
TWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOwogICAgIGlmIChzZWxlY3Rl
ZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQogICAgICAgICBbc2VsZiBzZXRDdXJyZW50TGVn
aWJsZVRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRl
eDpzZWxlY3RlZEluZGV4XV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5tbQpp
bmRleCBjNGJkNWVmYmFjYmFkYTBjZWEyZTgwZmM4NTcxOGQ2YTE2NzZlMmYzLi5lNjc1OTAwZTQx
MGIzOWQyN2U5MDg2MjY2ZGU1M2U1ZmRlNDZjMWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uQ29jb2EubW0KQEAgLTM2LDYgKzM2LDcgQEAKICNpbXBvcnQgPHd0Zi9PcHRpb25hbC5o
PgogI2ltcG9ydCA8d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4K
KyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgogCiBAaW50ZXJmYWNlIE5TVVJMICgpCkBAIC02NCw5ICs2NSw5IEBAIHZv
aWQgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29raWVzKGNvbnN0IFZlY3RvcjxDb29raWU+
JiBjb29raWVzLCBjb25zdCBVUkwmCiB7CiAgICAgQVNTRVJUKGhhc1Byb2Nlc3NQcml2aWxlZ2Uo
UHJvY2Vzc1ByaXZpbGVnZTo6Q2FuQWNjZXNzUmF3Q29va2llcykgfHwgbV9pc0luTWVtb3J5Q29v
a2llU3RvcmUpOwogCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBuc0Nvb2tpZXMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29va2llcy5z
aXplKCldKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IGNvb2tpZXMpCi0gICAgICAg
IFtuc0Nvb2tpZXMgYWRkT2JqZWN0OihOU0hUVFBDb29raWUgKiljb29raWVdOworICAgIGF1dG8g
bnNDb29raWVzID0gY3JlYXRlTlNBcnJheShjb29raWVzLCBbXSAoYXV0byYgY29va2llKSAtPiBO
U0hUVFBDb29raWUgKiB7CisgICAgICAgIHJldHVybiBjb29raWU7CisgICAgfSk7CiAKICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgW25zQ29va2llU3RvcmFnZSgpIHNldENv
b2tpZXM6bnNDb29raWVzLmdldCgpIGZvclVSTDooTlNVUkwgKil1cmwgbWFpbkRvY3VtZW50VVJM
OihOU1VSTCAqKW1haW5Eb2N1bWVudFVSTF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NvY29hL1Jlc291cmNlUmVxdWVzdENvY29hLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9SZXNvdXJjZVJlcXVlc3RDb2NvYS5tbQppbmRl
eCA3NjZlYTNiODJmNTg1YWYxNmFmZGFiZTEyYWNhODcyODYyNDQwYmQ2Li42OWI3YTcyMmNlNWRm
MTU3ZmNjZGM3OWNjMDk4YmI1NWU2MTFlM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NvY29hL1Jlc291cmNlUmVxdWVzdENvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0K
QEAgLTIwMSwxMyArMjAxLDEyIEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVBsYXRm
b3JtUmVxdWVzdCgpCiAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBodHRwSGVhZGVyRmll
bGRzKCkpCiAgICAgICAgIFtuc1JlcXVlc3Qgc2V0VmFsdWU6aGVhZGVyLnZhbHVlIGZvckhUVFBI
ZWFkZXJGaWVsZDpoZWFkZXIua2V5XTsKIAotICAgIE5TTXV0YWJsZUFycmF5ICplbmNvZGluZ0Zh
bGxiYWNrcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgZm9yIChjb25zdCBhdXRvJiBl
bmNvZGluZ05hbWUgOiBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFj
a0FycmF5KSB7Ci0gICAgICAgIENGU3RyaW5nRW5jb2RpbmcgbnNFbmNvZGluZyA9IENGU3RyaW5n
Q29udmVydEVuY29kaW5nVG9OU1N0cmluZ0VuY29kaW5nKENGU3RyaW5nQ29udmVydElBTkFDaGFy
U2V0TmFtZVRvRW5jb2RpbmcoZW5jb2RpbmdOYW1lLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsK
LSAgICAgICAgaWYgKG5zRW5jb2RpbmcgIT0ga0NGU3RyaW5nRW5jb2RpbmdJbnZhbGlkSWQpCi0g
ICAgICAgICAgICBbZW5jb2RpbmdGYWxsYmFja3MgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJX
aXRoVW5zaWduZWRMb25nOm5zRW5jb2RpbmddXTsKLSAgICB9Ci0gICAgW25zUmVxdWVzdCBzZXRD
b250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6ZW5jb2RpbmdGYWxsYmFja3Nd
OworICAgIFtuc1JlcXVlc3Qgc2V0Q29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0Fy
cmF5OmNyZWF0ZU5TQXJyYXkobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFs
bGJhY2tBcnJheSwgW10gKGF1dG8mIGVuY29kaW5nTmFtZSkgLT4gTlNOdW1iZXIgKiB7CisgICAg
ICAgIGF1dG8gZW5jb2RpbmcgPSBDRlN0cmluZ0NvbnZlcnRFbmNvZGluZ1RvTlNTdHJpbmdFbmNv
ZGluZyhDRlN0cmluZ0NvbnZlcnRJQU5BQ2hhclNldE5hbWVUb0VuY29kaW5nKGVuY29kaW5nTmFt
ZS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgICAgIGlmIChlbmNvZGluZyA9PSBrQ0ZT
dHJpbmdFbmNvZGluZ0ludmFsaWRJZCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAg
IHJldHVybiBAKGVuY29kaW5nKTsKKyAgICB9KS5nZXQoKV07CiAKICAgICBTdHJpbmcgcGFydGl0
aW9uID0gY2FjaGVQYXJ0aXRpb24oKTsKICAgICBpZiAoIXBhcnRpdGlvbi5pc051bGwoKSAmJiAh
cGFydGl0aW9uLmlzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24uaAppbmRleCA2ZGY4ZDQ4
NzAyODc4ZjFhYzc5ZTlmMzBhOTU1ODRiOTBkMmUxY2RlLi4yMjk0YTlmZDk1YmM3NWFmNjRmMjRi
YjkxZDIzNjAyZDJlNWVhYmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24uaApAQCAtNjIsNyArNjIs
NyBAQCBXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIFdlYkNvcmVOU1VSTFNlc3Npb24gOiBOU09i
amVjdCB7CiAgICAgV2Vha09iakNQdHI8aWQ8TlNVUkxTZXNzaW9uRGVsZWdhdGU+PiBfZGVsZWdh
dGU7CiAgICAgUmV0YWluUHRyPE5TT3BlcmF0aW9uUXVldWU+IF9xdWV1ZTsKICAgICBSZXRhaW5Q
dHI8TlNTdHJpbmc+IF9zZXNzaW9uRGVzY3JpcHRpb247Ci0gICAgSGFzaFNldDxSZXRhaW5QdHI8
Q0ZUeXBlUmVmPj4gX2RhdGFUYXNrczsKKyAgICBIYXNoU2V0PFJldGFpblB0cjxXZWJDb3JlTlNV
UkxTZXNzaW9uRGF0YVRhc2s+PiBfZGF0YVRhc2tzOwogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luPj4gX29yaWdpbnM7CiAgICAgTG9jayBfZGF0YVRhc2tzTG9jazsK
ICAgICBCT09MIF9pbnZhbGlkYXRlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5tbQppbmRleCA0NzM4
MGIxNWNhYWM2MjIzN2UwZDQ1ODAzMjNmNzAzMzhmOWU4NWU3Li43Nzg3YjUwZGQyMGE5MjBhNjk1
YjQ0MDNkNjE1NWQ5NmRkNTZiMjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9uLm1tCkBAIC0zMSw2
ICszMSw3IEBACiAjaW1wb3J0ICJTdWJyZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCA8d3RmL0Js
b2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbXBvcnQgPHd0
Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAt
OTIsNyArOTMsNyBAQCAtICh2b2lkKWRlYWxsb2MKICAgICB7CiAgICAgICAgIExvY2tlcjxMb2Nr
PiBsb2NrZXIoX2RhdGFUYXNrc0xvY2spOwogICAgICAgICBmb3IgKGF1dG8mIHRhc2sgOiBfZGF0
YVRhc2tzKQotICAgICAgICAgICAgKChfX2JyaWRnZSBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRh
c2sgKil0YXNrLmdldCgpKS5zZXNzaW9uID0gbmlsOworICAgICAgICAgICAgW3Rhc2sgc2V0U2Vz
c2lvbjpuaWxdOwogICAgIH0KIAogICAgIGNhbGxPbk1haW5UaHJlYWQoW2xvYWRlciA9IFdURk1v
dmUoX2xvYWRlcildIHsKQEAgLTExNSw4ICsxMTYsOCBAQCAtICh2b2lkKXRhc2tDb21wbGV0ZWQ6
KFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqKXRhc2sKICAgICB7CiAgICAgICAgIExvY2tl
cjxMb2NrPiBsb2NrZXIoX2RhdGFUYXNrc0xvY2spOwogCi0gICAgICAgIEFTU0VSVChfZGF0YVRh
c2tzLmNvbnRhaW5zKChfX2JyaWRnZSBDRlR5cGVSZWYpdGFzaykpOwotICAgICAgICBfZGF0YVRh
c2tzLnJlbW92ZSgoX19icmlkZ2UgQ0ZUeXBlUmVmKXRhc2spOworICAgICAgICBBU1NFUlQoX2Rh
dGFUYXNrcy5jb250YWlucyh0YXNrKSk7CisgICAgICAgIF9kYXRhVGFza3MucmVtb3ZlKHRhc2sp
OwogICAgICAgICBpZiAoIV9kYXRhVGFza3MuaXNFbXB0eSgpIHx8ICFfaW52YWxpZGF0ZWQpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjE3LDcgKzIxOCw3IEBAIC0gKHZvaWQpZmlu
aXNoVGFza3NBbmRJbnZhbGlkYXRlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
UmV0YWluUHRyPFdlYkNvcmVOU1VSTFNlc3Npb24+IHN0cm9uZ1NlbGYgeyBzZWxmIH07CisgICAg
YXV0byBzdHJvbmdTZWxmID0gcmV0YWluUHRyKHNlbGYpOwogICAgIFtzZWxmIGFkZERlbGVnYXRl
T3BlcmF0aW9uOltzdHJvbmdTZWxmXSB7CiAgICAgICAgIGlmIChbc3Ryb25nU2VsZi5nZXQoKS5k
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKFVSTFNlc3Npb246ZGlkQmVjb21l
SW52YWxpZFdpdGhFcnJvcjopXSkKICAgICAgICAgICAgIFtzdHJvbmdTZWxmLmdldCgpLmRlbGVn
YXRlIFVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXN0cm9uZ1NlbGYuZ2V0KCkgZGlkQmVjb21l
SW52YWxpZFdpdGhFcnJvcjpuaWxdOwpAQCAtMjI2LDE0ICsyMjcsMTQgQEAgLSAodm9pZClmaW5p
c2hUYXNrc0FuZEludmFsaWRhdGUKIAogLSAodm9pZClpbnZhbGlkYXRlQW5kQ2FuY2VsCiB7Ci0g
ICAgVmVjdG9yPFJldGFpblB0cjxDRlR5cGVSZWY+PiB0YXNrc0NvcHk7CisgICAgVmVjdG9yPFJl
dGFpblB0cjxXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2s+PiB0YXNrc0NvcHk7CiAgICAgewog
ICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2NrKTsKICAgICAgICAgdGFz
a3NDb3B5ID0gY29weVRvVmVjdG9yKF9kYXRhVGFza3MpOwogICAgIH0KIAogICAgIGZvciAoYXV0
byYgdGFzayA6IHRhc2tzQ29weSkKLSAgICAgICAgWyhfX2JyaWRnZSBXZWJDb3JlTlNVUkxTZXNz
aW9uRGF0YVRhc2sgKil0YXNrLmdldCgpIGNhbmNlbF07CisgICAgICAgIFt0YXNrIGNhbmNlbF07
CiAKICAgICBbc2VsZiBmaW5pc2hUYXNrc0FuZEludmFsaWRhdGVdOwogfQpAQCAtMjU2LDI5ICsy
NTcsMjkgQEAgLSAodm9pZClmbHVzaFdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9p
ZCkpY29tcGxldGlvbkhhbmRsZXIKIAogLSAodm9pZClnZXRUYXNrc1dpdGhDb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoTlNBcnJheTxOU1VSTFNlc3Npb25EYXRhVGFzayAqPiAqZGF0YVRhc2tz
LCBOU0FycmF5PE5TVVJMU2Vzc2lvblVwbG9hZFRhc2sgKj4gKnVwbG9hZFRhc2tzLCBOU0FycmF5
PE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayAqPiAqZG93bmxvYWRUYXNrcykpY29tcGxldGlvbkhh
bmRsZXIKIHsKLSAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBudWxscHRyOworICAgIFJldGFp
blB0cjxOU0FycmF5PiBhcnJheTsKICAgICB7CiAgICAgICAgIExvY2tlcjxMb2NrPiBsb2NrZXIo
X2RhdGFUYXNrc0xvY2spOwotICAgICAgICBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdp
dGhDYXBhY2l0eTpfZGF0YVRhc2tzLnNpemUoKV07Ci0gICAgICAgIGZvciAoYXV0byYgdGFzayA6
IF9kYXRhVGFza3MpCi0gICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OihfX2JyaWRnZSBXZWJD
b3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKil0YXNrLmdldCgpXTsKKyAgICAgICAgYXJyYXkgPSBj
cmVhdGVOU0FycmF5KF9kYXRhVGFza3MsIFtdIChhdXRvJiB0YXNrKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGFzay5nZXQoKTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIFtzZWxmIGFkZERlbGVn
YXRlT3BlcmF0aW9uOl57Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGFycmF5LCBuaWwsIG5p
bCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGFycmF5LmdldCgpLCBuaWwsIG5pbCk7CiAg
ICAgfV07CiB9CiAKIC0gKHZvaWQpZ2V0QWxsVGFza3NXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKE5TQXJyYXk8X19raW5kb2YgTlNVUkxTZXNzaW9uVGFzayAqPiAqdGFza3MpKWNvbXBs
ZXRpb25IYW5kbGVyCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gbnVsbHB0cjsKKyAg
ICBSZXRhaW5QdHI8TlNBcnJheT4gYXJyYXk7CiAgICAgewogICAgICAgICBMb2NrZXI8TG9jaz4g
bG9ja2VyKF9kYXRhVGFza3NMb2NrKTsKLSAgICAgICAgYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXlXaXRoQ2FwYWNpdHk6X2RhdGFUYXNrcy5zaXplKCldOwotICAgICAgICBmb3IgKGF1dG8m
IHRhc2sgOiBfZGF0YVRhc2tzKQotICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDooX19icmlk
Z2UgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopdGFzay5nZXQoKV07CisgICAgICAgIGFy
cmF5ID0gY3JlYXRlTlNBcnJheShfZGF0YVRhc2tzLCBbXSAoYXV0byYgdGFzaykgeworICAgICAg
ICAgICAgcmV0dXJuIHRhc2suZ2V0KCk7CisgICAgICAgIH0pOwogICAgIH0KICAgICBbc2VsZiBh
ZGREZWxlZ2F0ZU9wZXJhdGlvbjpeewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihhcnJheSk7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGFycmF5LmdldCgpKTsKICAgICB9XTsKIH0KIApA
QCAtMjkwLDcgKzI5MSw3IEBAIC0gKE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2tXaXRo
UmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAogICAgIFdlYkNvcmVOU1VSTFNlc3Npb25E
YXRhVGFzayAqdGFzayA9IFtbV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIGFsbG9jXSBpbml0
V2l0aFNlc3Npb246c2VsZiBpZGVudGlmaWVyOl9uZXh0VGFza0lkZW50aWZpZXIrKyByZXF1ZXN0
OnJlcXVlc3RdOwogICAgIHsKICAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihfZGF0YVRhc2tz
TG9jayk7Ci0gICAgICAgIF9kYXRhVGFza3MuYWRkKChfX2JyaWRnZSBDRlR5cGVSZWYpdGFzayk7
CisgICAgICAgIF9kYXRhVGFza3MuYWRkKHRhc2spOwogICAgIH0KICAgICByZXR1cm4gKE5TVVJM
U2Vzc2lvbkRhdGFUYXNrICopW3Rhc2sgYXV0b3JlbGVhc2VdOwogfQpAQCAtMzAzLDcgKzMwNCw3
IEBAIC0gKE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopZGF0YVRhc2tXaXRoVVJMOihOU1VSTCAqKXVy
bAogICAgIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayAqdGFzayA9IFtbV2ViQ29yZU5TVVJM
U2Vzc2lvbkRhdGFUYXNrIGFsbG9jXSBpbml0V2l0aFNlc3Npb246c2VsZiBpZGVudGlmaWVyOl9u
ZXh0VGFza0lkZW50aWZpZXIrKyBVUkw6dXJsXTsKICAgICB7CiAgICAgICAgIExvY2tlcjxMb2Nr
PiBsb2NrZXIoX2RhdGFUYXNrc0xvY2spOwotICAgICAgICBfZGF0YVRhc2tzLmFkZCgoX19icmlk
Z2UgQ0ZUeXBlUmVmKXRhc2spOworICAgICAgICBfZGF0YVRhc2tzLmFkZCh0YXNrKTsKICAgICB9
CiAgICAgcmV0dXJuIChOU1VSTFNlc3Npb25EYXRhVGFzayAqKVt0YXNrIGF1dG9yZWxlYXNlXTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY29jb2EvUGF5bWVudEF1dGhv
cml6YXRpb25QcmVzZW50ZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NvY29hL1BheW1l
bnRBdXRob3JpemF0aW9uUHJlc2VudGVyLm1tCmluZGV4IDI2YjQ3YmFjYmI4NWFlMWRjZTg0ZGM2
ODQwZGIyNmUyZDc0NTllN2UuLjZiNTVlOWY2ZTIwY2RjODVlZWRmYzA5MDQzYzg5OGIyMjNlNzU1
ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY29jb2EvUGF5bWVudEF1dGhv
cml6YXRpb25QcmVzZW50ZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jb2NvYS9Q
YXltZW50QXV0aG9yaXphdGlvblByZXNlbnRlci5tbQpAQCAtMzQsNiArMzQsOCBAQAogI2ltcG9y
dCA8V2ViQ29yZS9QYXltZW50TWVyY2hhbnRTZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Bh
eW1lbnRNZXRob2RVcGRhdGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGF5bWVudFN1bW1hcnlJdGVt
cy5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CisKICNpbXBvcnQgPHBhbC9j
b2NvYS9QYXNzS2l0U29mdExpbmsuaD4KIAogU09GVF9MSU5LX0ZSQU1FV09SSyhDb250YWN0cyk7
CkBAIC0xNjAsMjIgKzE2MiwxOCBAQCBzdGF0aWMgTlNFcnJvciAqdG9OU0Vycm9yKGNvbnN0IFdl
YkNvcmU6OlBheW1lbnRFcnJvciYgZXJyb3IpCiAgICAgcmV0dXJuIFtOU0Vycm9yIGVycm9yV2l0
aERvbWFpbjpQQUw6OmdldF9QYXNzS2l0X1BLUGF5bWVudEVycm9yRG9tYWluKCkgY29kZTp0b1BL
UGF5bWVudEVycm9yQ29kZShlcnJvci5jb2RlKSB1c2VySW5mbzp1c2VySW5mby5nZXQoKV07CiB9
CiAKLXN0YXRpYyBOU0FycmF5ICp0b05TRXJyb3JzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpQYXlt
ZW50RXJyb3I+JiBlcnJvcnMpCitzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IHRvTlNFcnJvcnMo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OlBheW1lbnRFcnJvcj4mIGVycm9ycykKIHsKLSAgICBOU011
dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmVy
cm9ycy5zaXplKCldOwotICAgIGZvciAoY29uc3QgYXV0byYgZXJyb3IgOiBlcnJvcnMpIHsKLSAg
ICAgICAgaWYgKE5TRXJyb3IgKm5zRXJyb3IgPSB0b05TRXJyb3IoZXJyb3IpKQotICAgICAgICAg
ICAgW3Jlc3VsdCBhZGRPYmplY3Q6bnNFcnJvcl07Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7
CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoZXJyb3JzLCBbXSAoYXV0byYgZXJyb3IpIHsKKyAg
ICAgICAgcmV0dXJuIHRvTlNFcnJvcihlcnJvcik7CisgICAgfSk7CiB9CiAKLXN0YXRpYyBOU0Fy
cmF5ICp0b1BLU2hpcHBpbmdNZXRob2RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpBcHBsZVBheVNl
c3Npb25QYXltZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2Q+JiBzaGlwcGluZ01ldGhvZHMpCitz
dGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IHRvUEtTaGlwcGluZ01ldGhvZHMoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpTaGlwcGluZ01ldGhvZD4m
IHNoaXBwaW5nTWV0aG9kcykKIHsKLSAgICBOU011dGFibGVBcnJheSAqcGtTaGlwcGluZ01ldGhv
ZHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2hpcHBpbmdNZXRob2RzLnNp
emUoKV07Ci0gICAgZm9yIChhdXRvJiBzaGlwcGluZ01ldGhvZCA6IHNoaXBwaW5nTWV0aG9kcykK
LSAgICAgICAgW3BrU2hpcHBpbmdNZXRob2RzIGFkZE9iamVjdDp0b1BLU2hpcHBpbmdNZXRob2Qo
c2hpcHBpbmdNZXRob2QpXTsKLSAgICByZXR1cm4gcGtTaGlwcGluZ01ldGhvZHM7CisgICAgcmV0
dXJuIGNyZWF0ZU5TQXJyYXkoc2hpcHBpbmdNZXRob2RzLCBbXSAoYXV0byYgc2hpcHBpbmdNZXRo
b2QpIHsKKyAgICAgICAgcmV0dXJuIHRvUEtTaGlwcGluZ01ldGhvZChzaGlwcGluZ01ldGhvZCk7
CisgICAgfSk7CiB9CiAKIHZvaWQgUGF5bWVudEF1dGhvcml6YXRpb25QcmVzZW50ZXI6OmNvbXBs
ZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGNvbnN0IFdlYkNvcmU6OlBheW1lbnRNZXJjaGFudFNlc3Np
b24mIG1lcmNoYW50U2Vzc2lvbikKQEAgLTE5OSw4ICsxOTcsOCBAQCB2b2lkIFBheW1lbnRBdXRo
b3JpemF0aW9uUHJlc2VudGVyOjpjb21wbGV0ZVBheW1lbnRTZXNzaW9uKGNvbnN0IE9wdGlvbmFs
PFdlYkNvcgogewogICAgIEFTU0VSVChwbGF0Zm9ybURlbGVnYXRlKCkpOwogICAgIGF1dG8gc3Rh
dHVzID0gcmVzdWx0ID8gdG9QS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVzKHJlc3VsdC0+c3Rh
dHVzKSA6IFBLUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXNTdWNjZXNzOwotICAgIE5TQXJyYXkg
KmVycm9ycyA9IHJlc3VsdCA/IHRvTlNFcnJvcnMocmVzdWx0LT5lcnJvcnMpIDogQFsgXTsKLSAg
ICBbcGxhdGZvcm1EZWxlZ2F0ZSgpIGNvbXBsZXRlUGF5bWVudFNlc3Npb246c3RhdHVzIGVycm9y
czplcnJvcnMgZGlkUmVhY2hGaW5hbFN0YXRlOldlYkNvcmU6OmlzRmluYWxTdGF0ZVJlc3VsdChy
ZXN1bHQpXTsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZXJyb3JzID0gcmVzdWx0ID8gdG9OU0Vy
cm9ycyhyZXN1bHQtPmVycm9ycykgOiBAWyBdOworICAgIFtwbGF0Zm9ybURlbGVnYXRlKCkgY29t
cGxldGVQYXltZW50U2Vzc2lvbjpzdGF0dXMgZXJyb3JzOmVycm9ycy5nZXQoKSBkaWRSZWFjaEZp
bmFsU3RhdGU6V2ViQ29yZTo6aXNGaW5hbFN0YXRlUmVzdWx0KHJlc3VsdCldOwogfQogCiB2b2lk
IFBheW1lbnRBdXRob3JpemF0aW9uUHJlc2VudGVyOjpjb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNl
bGVjdGlvbihjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaGlwcGluZ0NvbnRhY3RVcGRhdGU+JiB1
cGRhdGUpCkBAIC0yMTIsNyArMjEwLDcgQEAgdm9pZCBQYXltZW50QXV0aG9yaXphdGlvblByZXNl
bnRlcjo6Y29tcGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24oY29uc3QgT3B0aW8KICAgICB9
CiAKICAgICAvLyBGSVhNRTogV2ViQ29yZTo6U2hpcHBpbmdDb250YWN0VXBkYXRlIHNob3VsZCBr
bm93IGhvdyB0byBjb252ZXJ0IGl0c2VsZiB0byBhIFBLUGF5bWVudFJlcXVlc3RTaGlwcGluZ0Nv
bnRhY3RVcGRhdGUuCi0gICAgYXV0byBzaGlwcGluZ0NvbnRhY3RVcGRhdGUgPSBhZG9wdE5TKFtQ
QUw6OmFsbG9jUEtQYXltZW50UmVxdWVzdFNoaXBwaW5nQ29udGFjdFVwZGF0ZUluc3RhbmNlKCkg
aW5pdFdpdGhFcnJvcnM6dG9OU0Vycm9ycyh1cGRhdGUtPmVycm9ycykgcGF5bWVudFN1bW1hcnlJ
dGVtczpXZWJDb3JlOjpwbGF0Zm9ybVN1bW1hcnlJdGVtcyh1cGRhdGUtPm5ld1RvdGFsQW5kTGlu
ZUl0ZW1zKSBzaGlwcGluZ01ldGhvZHM6dG9QS1NoaXBwaW5nTWV0aG9kcyh1cGRhdGUtPm5ld1No
aXBwaW5nTWV0aG9kcyldKTsKKyAgICBhdXRvIHNoaXBwaW5nQ29udGFjdFVwZGF0ZSA9IGFkb3B0
TlMoW1BBTDo6YWxsb2NQS1BheW1lbnRSZXF1ZXN0U2hpcHBpbmdDb250YWN0VXBkYXRlSW5zdGFu
Y2UoKSBpbml0V2l0aEVycm9yczp0b05TRXJyb3JzKHVwZGF0ZS0+ZXJyb3JzKS5nZXQoKSBwYXlt
ZW50U3VtbWFyeUl0ZW1zOldlYkNvcmU6OnBsYXRmb3JtU3VtbWFyeUl0ZW1zKHVwZGF0ZS0+bmV3
VG90YWxBbmRMaW5lSXRlbXMpIHNoaXBwaW5nTWV0aG9kczp0b1BLU2hpcHBpbmdNZXRob2RzKHVw
ZGF0ZS0+bmV3U2hpcHBpbmdNZXRob2RzKS5nZXQoKV0pOwogICAgIFtwbGF0Zm9ybURlbGVnYXRl
KCkgY29tcGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb246c2hpcHBpbmdDb250YWN0VXBkYXRl
LmdldCgpXTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkv
Y29jb2EvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0FwcGxlUGF5L2NvY29hL1dlYlBheW1lbnRDb29yZGluYXRvclByb3h5Q29jb2EubW0K
aW5kZXggMzEzMDg4NjY1MjVmNjE4YjhmNjE4YTZkNTc5ZGI4NzM2MDcwMGU4Ny4uZWQ2NjA5Yjg3
NWZiMzFmNTQ4Y2YzNjg5MTMxYWFlZjliNWZkOWEyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvQXBwbGVQYXkvY29jb2EvV2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BcHBsZVBheS9jb2NvYS9XZWJQYXltZW50Q29v
cmRpbmF0b3JQcm94eUNvY29hLm1tCkBAIC0xODcsMTUgKzE4Nyw3IEBAIFJldGFpblB0cjxQS1Bh
eW1lbnRSZXF1ZXN0PiBXZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eTo6cGxhdGZvcm1QYXltZW50
UmVxdWVzdChjCiAKICAgICBbcmVzdWx0IHNldE9yaWdpbmF0aW5nVVJMOm9yaWdpbmF0aW5nVVJM
XTsKIAotICAgIC8vIEZJWE1FOiBXZSBkb24ndCBzdXBwb3J0IGFueSBwbGF0Zm9ybXMgd2l0aG91
dCAtc2V0VGh1bWJuYWlsVVJMczosIHNvIHRoaXMgY2FuIGJlIHNpbXBsaWZpZWQuCi0gICAgaWYg
KFtyZXN1bHQgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRUaHVtYm5haWxVUkxzOild
KSB7Ci0gICAgICAgIGF1dG8gdGh1bWJuYWlsVVJMcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJh
eSBhbGxvY10gaW5pdF0pOwotICAgICAgICBmb3IgKGF1dG8mIGxpbmtJY29uVVJMIDogbGlua0lj
b25VUkxzKQotICAgICAgICAgICAgW3RodW1ibmFpbFVSTHMgYWRkT2JqZWN0OnN0YXRpY19jYXN0
PE5TVVJMICo+KGxpbmtJY29uVVJMKV07Ci0KLSAgICAgICAgW3Jlc3VsdCBzZXRUaHVtYm5haWxV
UkxzOnRodW1ibmFpbFVSTHMuZ2V0KCldOwotICAgIH0gZWxzZSBpZiAoIWxpbmtJY29uVVJMcy5p
c0VtcHR5KCkpCi0gICAgICAgIFtyZXN1bHQgc2V0VGh1bWJuYWlsVVJMOmxpbmtJY29uVVJMc1sw
XV07CisgICAgW3Jlc3VsdCBzZXRUaHVtYm5haWxVUkxzOmNyZWF0ZU5TQXJyYXkobGlua0ljb25V
UkxzKS5nZXQoKV07CiAKICAgICBbcmVzdWx0IHNldEFQSVR5cGU6dG9BUElUeXBlKHBheW1lbnRS
ZXF1ZXN0LnJlcXVlc3RlcigpKV07CiAKQEAgLTIxMSwxMCArMjAzLDkgQEAgUmV0YWluUHRyPFBL
UGF5bWVudFJlcXVlc3Q+IFdlYlBheW1lbnRDb29yZGluYXRvclByb3h5OjpwbGF0Zm9ybVBheW1l
bnRSZXF1ZXN0KGMKIAogICAgIFtyZXN1bHQgc2V0U2hpcHBpbmdUeXBlOnRvUEtTaGlwcGluZ1R5
cGUocGF5bWVudFJlcXVlc3Quc2hpcHBpbmdUeXBlKCkpXTsKIAotICAgIGF1dG8gc2hpcHBpbmdN
ZXRob2RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgZm9y
IChhdXRvJiBzaGlwcGluZ01ldGhvZCA6IHBheW1lbnRSZXF1ZXN0LnNoaXBwaW5nTWV0aG9kcygp
KQotICAgICAgICBbc2hpcHBpbmdNZXRob2RzIGFkZE9iamVjdDp0b1BLU2hpcHBpbmdNZXRob2Qo
c2hpcHBpbmdNZXRob2QpXTsKLSAgICBbcmVzdWx0IHNldFNoaXBwaW5nTWV0aG9kczpzaGlwcGlu
Z01ldGhvZHMuZ2V0KCldOworICAgIFtyZXN1bHQgc2V0U2hpcHBpbmdNZXRob2RzOmNyZWF0ZU5T
QXJyYXkocGF5bWVudFJlcXVlc3Quc2hpcHBpbmdNZXRob2RzKCksIFtdIChhdXRvJiBzaGlwcGlu
Z01ldGhvZCkgeworICAgICAgICByZXR1cm4gdG9QS1NoaXBwaW5nTWV0aG9kKHNoaXBwaW5nTWV0
aG9kKTsKKyAgICB9KS5nZXQoKV07CiAKICAgICBbcmVzdWx0IHNldFBheW1lbnRTdW1tYXJ5SXRl
bXM6V2ViQ29yZTo6cGxhdGZvcm1TdW1tYXJ5SXRlbXMocGF5bWVudFJlcXVlc3QudG90YWwoKSwg
cGF5bWVudFJlcXVlc3QubGluZUl0ZW1zKCkpXTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5t
bSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVQ
cm9wZXJ0eUFwcGxpZXIubW0KaW5kZXggZTQ3MDM1Y2NhMWU3YTg4OTJkMWQ5MGViOGIyMTUyM2Nl
MTRkYTQxZS4uNDM1ODg1Nzg0MGZlYjY3MmQ5NWY1MTc2ZmE1MjhmZTBiZDBkMjRkNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJl
ZVByb3BlcnR5QXBwbGllci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXll
clRyZWUvUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lTWFjLmg+CiAjaW1wb3J0IDxwYWwvc3Bp
L2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25z
Lmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAjaW1wb3J0IDxVSUtpdC9VSVZpZXcuaD4KQEAgLTMxMywzNSArMzE0LDI4IEBA
IHZvaWQgUmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyOjp1cGRhdGVDaGlsZHJlbihSZW1v
dGVMYXllclRyZWVOb2RlJiBub2RlLCBjCiAKICAgICBpZiAoaGFzVmlld0NoaWxkcmVuKCkpIHsK
ICAgICAgICAgQVNTRVJUKG5vZGUudWlWaWV3KCkpOwotCi0gICAgICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gc3Vidmlld3MgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6cHJvcGVydGllcy5jaGlsZHJlbi5zaXplKCldKTsKLSAgICAgICAgZm9y
IChhdXRvJiBjaGlsZCA6IHByb3BlcnRpZXMuY2hpbGRyZW4pIHsKKyAgICAgICAgW2NvbnRlbnRW
aWV3KCkgX3dlYl9zZXRTdWJ2aWV3czpjcmVhdGVOU0FycmF5KHByb3BlcnRpZXMuY2hpbGRyZW4s
IFsmXSAoYXV0byYgY2hpbGQpIC0+IFVJVmlldyAqIHsKICAgICAgICAgICAgIGF1dG8qIGNoaWxk
Tm9kZSA9IHJlbGF0ZWRMYXllcnMuZ2V0KGNoaWxkKTsKICAgICAgICAgICAgIEFTU0VSVChjaGls
ZE5vZGUpOwogICAgICAgICAgICAgaWYgKCFjaGlsZE5vZGUpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgICAgIEFTU0VSVChj
aGlsZE5vZGUtPnVpVmlldygpKTsKLSAgICAgICAgICAgIFtzdWJ2aWV3cyBhZGRPYmplY3Q6Y2hp
bGROb2RlLT51aVZpZXcoKV07Ci0gICAgICAgIH0KLQotICAgICAgICBbY29udGVudFZpZXcoKSBf
d2ViX3NldFN1YnZpZXdzOnN1YnZpZXdzLmdldCgpXTsKKyAgICAgICAgICAgIHJldHVybiBjaGls
ZE5vZGUtPnVpVmlldygpOworICAgICAgICB9KS5nZXQoKV07CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYKIAotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gc3VibGF5ZXJzID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnByb3BlcnRp
ZXMuY2hpbGRyZW4uc2l6ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IHByb3BlcnRpZXMu
Y2hpbGRyZW4pIHsKKyAgICBub2RlLmxheWVyKCkuc3VibGF5ZXJzID0gY3JlYXRlTlNBcnJheShw
cm9wZXJ0aWVzLmNoaWxkcmVuLCBbJl0gKGF1dG8mIGNoaWxkKSAtPiBDQUxheWVyICogewogICAg
ICAgICBhdXRvKiBjaGlsZE5vZGUgPSByZWxhdGVkTGF5ZXJzLmdldChjaGlsZCk7CiAgICAgICAg
IEFTU0VSVChjaGlsZE5vZGUpOwogICAgICAgICBpZiAoIWNoaWxkTm9kZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuIG5pbDsKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogICAgICAgICBBU1NFUlQoIWNoaWxkTm9kZS0+dWlWaWV3KCkpOwogI2VuZGlmCi0gICAg
ICAgIFtzdWJsYXllcnMgYWRkT2JqZWN0OmNoaWxkTm9kZS0+bGF5ZXIoKV07Ci0gICAgfQotCi0g
ICAgbm9kZS5sYXllcigpLnN1YmxheWVycyA9IHN1YmxheWVycy5nZXQoKTsKKyAgICAgICAgcmV0
dXJuIGNoaWxkTm9kZS0+bGF5ZXIoKTsKKyAgICB9KS5nZXQoKTsKIH0KIAogdm9pZCBSZW1vdGVM
YXllclRyZWVQcm9wZXJ0eUFwcGxpZXI6OnVwZGF0ZU1hc2soUmVtb3RlTGF5ZXJUcmVlTm9kZSYg
bm9kZSwgY29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllcyYg
cHJvcGVydGllcywgY29uc3QgUmVsYXRlZExheWVyTWFwJiByZWxhdGVkTGF5ZXJzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLSFRUUENvb2tpZVN0b3Jl
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLSFRUUENvb2tpZVN0b3Jl
Lm1tCmluZGV4IDA4NGNmYWU0NzJlZTc3OWM1YmNhNmExZWIyODk3MzUxNjBhN2M0YWUuLjAyM2E1
MjNmYjI2NmE2ODM3MzdlYjI3NGViOTg3ZDlhMzhmYzA5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0hUVFBDb29raWVTdG9yZS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tIVFRQQ29va2llU3RvcmUubW0KQEAgLTM0
LDE1ICszNCwxMyBAQAogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1VS
TC5oPgogI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVj
dG9yQ29jb2EuaD4KIAogc3RhdGljIE5TQXJyYXk8TlNIVFRQQ29va2llICo+ICpjb3JlQ29va2ll
c1RvTlNDb29raWVzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29raWU+JiBjb3JlQ29va2llcykK
IHsKLSAgICBOU011dGFibGVBcnJheTxOU0hUVFBDb29raWUgKj4gKm5zQ29va2llcyA9IFtOU011
dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpjb3JlQ29va2llcy5zaXplKCldOwotCi0gICAg
Zm9yIChhdXRvJiBjb29raWUgOiBjb3JlQ29va2llcykKLSAgICAgICAgW25zQ29va2llcyBhZGRP
YmplY3Q6KE5TSFRUUENvb2tpZSAqKWNvb2tpZV07Ci0KLSAgICByZXR1cm4gbnNDb29raWVzOwor
ICAgIHJldHVybiBjcmVhdGVOU0FycmF5KGNvcmVDb29raWVzLCBbXSAoYXV0byYgY29va2llKSAt
PiBOU0hUVFBDb29raWUgKiB7CisgICAgICAgIHJldHVybiBjb29raWU7CisgICAgfSkuYXV0b3Jl
bGVhc2UoKTsKIH0KIAogY2xhc3MgV0tIVFRQQ29va2llU3RvcmVPYnNlcnZlciA6IHB1YmxpYyBB
UEk6OkhUVFBDb29raWVTdG9yZTo6T2JzZXJ2ZXIgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQppbmRleCBmNWVhY2VlMGU4Y2UzYjMx
NDkzNDU0MTBmOWEyNjFkNTI3ZTM5MTE4Li40MmQ0NTZhMjFjYjk2YmMzNGM4Y2M1OTk3YTFiMzE3
Zjk0YjI5NWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzUG9vbC5tbQpAQCAtMTY0LDExICsxNjQsOSBAQCArIChXS1Byb2Nlc3NQb29sICop
X3NoYXJlZFByb2Nlc3NQb29sCiAKICsgKE5TQXJyYXk8V0tQcm9jZXNzUG9vbCAqPiAqKV9hbGxQ
cm9jZXNzUG9vbHNGb3JUZXN0aW5nCiB7Ci0gICAgYXV0byYgYWxsUG9vbHMgPSBXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKTsKLSAgICBhdXRvIG5zQWxsUG9vbHMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6YWxsUG9vbHMu
c2l6ZSgpXSk7Ci0gICAgZm9yIChhdXRvKiBwb29sIDogYWxsUG9vbHMpCi0gICAgICAgIFtuc0Fs
bFBvb2xzIGFkZE9iamVjdDp3cmFwcGVyKCpwb29sKV07Ci0gICAgcmV0dXJuIG5zQWxsUG9vbHMu
YXV0b3JlbGVhc2UoKTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShXZWJLaXQ6OldlYlByb2Nl
c3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSwgW10gKGF1dG8mIHBvb2wpIHsKKyAgICAgICAgcmV0
dXJuIHdyYXBwZXIoKnBvb2wpOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKICsgKE5TVVJM
ICopX3dlYnNpdGVEYXRhVVJMRm9yQ29udGFpbmVyV2l0aFVSTDooTlNVUkwgKiljb250YWluZXJV
UkwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmlu
ZGV4IDAwMzQxNThiYTIxZmYzYTgxMDdmY2U3ZDA3ZjhiMDYxZDliNDI2NjIuLjUzZmJiMmU5MTQ4
ZWY0OTM5NGZjYjczODJiZDQxMjQ4YTMzYmQwZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtMTY3NCwzNyArMTY3NCwyMyBAQCAtICh2
b2lkKV9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5p
cHVsYXRpb25Db25maWd1cmF0aQogICAgICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIGlmICghW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoX3dlYlZpZXc6ZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtczopXSkgewotICAgICAg
ICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbVJlZmVyZW5jZXMpIHsKLSAgICAgICAgICAgICAg
ICBOU011dGFibGVBcnJheSAqd2tUb2tlbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2Fw
YWNpdHk6aXRlbS50b2tlbnMuc2l6ZSgpXTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHRv
a2VuIDogaXRlbS50b2tlbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byB3a1Rva2VuID0g
YWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOwotICAgICAg
ICAgICAgICAgICAgICBbd2tUb2tlbiBzZXRJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKHRva2Vu
LmlkZW50aWZpZXIudG9VSW50NjQoKSldOwotICAgICAgICAgICAgICAgICAgICBbd2tUb2tlbiBz
ZXRDb250ZW50OnRva2VuLmNvbnRlbnRdOwotICAgICAgICAgICAgICAgICAgICBbd2tUb2tlbiBz
ZXRFeGNsdWRlZDp0b2tlbi5pc0V4Y2x1ZGVkXTsKLSAgICAgICAgICAgICAgICAgICAgW3drVG9r
ZW5zIGFkZE9iamVjdDp3a1Rva2VuLmdldCgpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYXV0byB3a0l0ZW0gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0g
YWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcihpdGVtLmlkZW50aWZpZXIu
dG9VSW50NjQoKSkgdG9rZW5zOndrVG9rZW5zXSk7Ci0gICAgICAgICAgICAgICAgW2RlbGVnYXRl
IF93ZWJWaWV3OnJldGFpbmVkU2VsZi5nZXQoKSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW06
d2tJdGVtLmdldCgpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIE5TTXV0YWJsZUFycmF5ICp3a0l0ZW1zID0gW05TTXV0YWJsZUFycmF5
IGFycmF5V2l0aENhcGFjaXR5Oml0ZW1SZWZlcmVuY2VzLnNpemUoKV07Ci0gICAgICAgIGZvciAo
YXV0byYgaXRlbSA6IGl0ZW1SZWZlcmVuY2VzKSB7Ci0gICAgICAgICAgICBOU011dGFibGVBcnJh
eSAqd2tUb2tlbnMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6aXRlbS50b2tl
bnMuc2l6ZSgpXTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgdG9rZW4gOiBpdGVtLnRva2Vucykg
eworICAgICAgICBhdXRvIGNyZWF0ZVdLSXRlbSA9IFtdIChjb25zdCBXZWJDb3JlOjpUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uSXRlbSYgaXRlbSkgeworICAgICAgICAg
ICAgYXV0byB0b2tlbnMgPSBjcmVhdGVOU0FycmF5KGl0ZW0udG9rZW5zLCBbXSAoYXV0byYgdG9r
ZW4pIHsKICAgICAgICAgICAgICAgICBhdXRvIHdrVG9rZW4gPSBhZG9wdE5TKFtbX1dLVGV4dE1h
bmlwdWxhdGlvblRva2VuIGFsbG9jXSBpbml0XSk7CiAgICAgICAgICAgICAgICAgW3drVG9rZW4g
c2V0SWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcih0b2tlbi5pZGVudGlmaWVyLnRvVUludDY0KCkp
XTsKICAgICAgICAgICAgICAgICBbd2tUb2tlbiBzZXRDb250ZW50OnRva2VuLmNvbnRlbnRdOwog
ICAgICAgICAgICAgICAgIFt3a1Rva2VuIHNldEV4Y2x1ZGVkOnRva2VuLmlzRXhjbHVkZWRdOwot
ICAgICAgICAgICAgICAgIFt3a1Rva2VucyBhZGRPYmplY3Q6d2tUb2tlbi5nZXQoKV07Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvIHdrSXRlbSA9IGFkb3B0TlMoW1tfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKGl0
ZW0uaWRlbnRpZmllci50b1VJbnQ2NCgpKSB0b2tlbnM6d2tUb2tlbnNdKTsKLSAgICAgICAgICAg
IFt3a0l0ZW1zIGFkZE9iamVjdDp3a0l0ZW0uZ2V0KCldOworICAgICAgICAgICAgICAgIHJldHVy
biB3a1Rva2VuOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHROUyhb
W19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3RyaW5n
OjpudW1iZXIoaXRlbS5pZGVudGlmaWVyLnRvVUludDY0KCkpIHRva2Vuczp0b2tlbnMuZ2V0KCld
KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoX3dlYlZpZXc6ZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtczopXSkKKyAg
ICAgICAgICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzpyZXRhaW5lZFNlbGYuZ2V0KCkgZGlkRmluZFRl
eHRNYW5pcHVsYXRpb25JdGVtczpjcmVhdGVOU0FycmF5KGl0ZW1SZWZlcmVuY2VzLCBjcmVhdGVX
S0l0ZW0pLmdldCgpXTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGl0
ZW0gOiBpdGVtUmVmZXJlbmNlcykKKyAgICAgICAgICAgICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6
cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbTpjcmVhdGVXS0l0
ZW0oaXRlbSkuZ2V0KCldOwogICAgICAgICB9Ci0gICAgICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzpy
ZXRhaW5lZFNlbGYuZ2V0KCkgZGlkRmluZFRleHRNYW5pcHVsYXRpb25JdGVtczp3a0l0ZW1zXTsK
LQogICAgIH0sIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0
aW9uSGFuZGxlcildICgpIHsKICAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uQmxvY2soKTsKICAg
ICB9KTsKQEAgLTE3NTEsMzQgKzE3MzcsMzAgQEAgc3RhdGljIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gbWFrZUZhaWx1cmVTZXRGb3JBbGxUZXh0TWFuaXB1bGF0aW9uSXRlbXMoTlNBcnIKIAog
c3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2tUZXh0TWFuaXB1bGF0aW9uRXJyb3Jz
KE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKml0ZW1zLCBjb25zdCBWZWN0b3I8
V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvbkZhaWx1cmU+
JiBmYWlsdXJlcykKIHsKLSAgICB1c2luZyBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZSA9IFdlYkNv
cmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTsK
LQogICAgIGlmIChmYWlsdXJlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk+IHsgbmlsIH07CisgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdrRmFpbHVyZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6ZmFpbHVyZXMuc2l6ZSgpXSk7Ci0gICAgZm9yIChh
dXRvJiBjb3JlRmFpbHVyZSA6IGZhaWx1cmVzKSB7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXko
ZmFpbHVyZXMsIFsmXSAoYXV0byYgY29yZUZhaWx1cmUpIC0+IE5TRXJyb3IgKiB7CiAgICAgICAg
IEFTU0VSVChjb3JlRmFpbHVyZS5pbmRleCA8IGl0ZW1zLmNvdW50KTsKICAgICAgICAgaWYgKGNv
cmVGYWlsdXJlLmluZGV4ID49IGl0ZW1zLmNvdW50KQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGF1dG8qIGl0ZW0gPSBpdGVtc1tjb3JlRmFpbHVyZS5pbmRleF07Ci0gICAgICAgIEFT
U0VSVChjb3JlVGV4dE1hbmlwdWxhdGlvbkl0ZW1JZGVudGlmaWVyRnJvbVN0cmluZyhpdGVtLmlk
ZW50aWZpZXIpID09IGNvcmVGYWlsdXJlLmlkZW50aWZpZXIpOwotICAgICAgICBhdXRvIGVycm9y
Q29kZSA9IChbJmNvcmVGYWlsdXJlXSgpIHsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAg
ICAgIGF1dG8gZXJyb3JDb2RlID0gc3RhdGljX2Nhc3Q8TlNJbnRlZ2VyPigoWyZjb3JlRmFpbHVy
ZV0geworICAgICAgICAgICAgdXNpbmcgVHlwZSA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTsKICAgICAgICAgICAgIHN3aXRjaCAo
Y29yZUZhaWx1cmUudHlwZSkgewotICAgICAgICAgICAgY2FzZSBNYW5pcHVsYXRpb25GYWlsdXJl
VHlwZTo6Q29udGVudENoYW5nZWQ6CisgICAgICAgICAgICBjYXNlIFR5cGU6OkNvbnRlbnRDaGFu
Z2VkOgogICAgICAgICAgICAgICAgIHJldHVybiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbUVycm9y
Q29udGVudENoYW5nZWQ7Ci0gICAgICAgICAgICBjYXNlIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBl
OjpJbnZhbGlkSXRlbToKKyAgICAgICAgICAgIGNhc2UgVHlwZTo6SW52YWxpZEl0ZW06CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtRXJyb3JJbnZhbGlkSXRl
bTsKLSAgICAgICAgICAgIGNhc2UgTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkludmFsaWRUb2tl
bjoKKyAgICAgICAgICAgIGNhc2UgVHlwZTo6SW52YWxpZFRva2VuOgogICAgICAgICAgICAgICAg
IHJldHVybiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbUVycm9ySW52YWxpZFRva2VuOwotICAgICAg
ICAgICAgY2FzZSBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6RXhjbHVzaW9uVmlvbGF0aW9uOgor
ICAgICAgICAgICAgY2FzZSBUeXBlOjpFeGNsdXNpb25WaW9sYXRpb246CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtRXJyb3JFeGNsdXNpb25WaW9sYXRpb247
CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0pKCk7Ci0gICAgICAgIFt3a0ZhaWx1cmVzIGFkZE9i
amVjdDpbTlNFcnJvciBlcnJvcldpdGhEb21haW46X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW1FcnJv
ckRvbWFpbiBjb2RlOnN0YXRpY19jYXN0PGludD4oZXJyb3JDb2RlKSB1c2VySW5mbzpAe19XS1Rl
eHRNYW5pcHVsYXRpb25JdGVtRXJyb3JJdGVtS2V5OiBpdGVtfV1dOwotICAgIH0KLQotICAgIHJl
dHVybiB3a0ZhaWx1cmVzOworICAgICAgICB9KSgpKTsKKyAgICAgICAgYXV0byBpdGVtID0gaXRl
bXNbY29yZUZhaWx1cmUuaW5kZXhdOworICAgICAgICBBU1NFUlQoY29yZVRleHRNYW5pcHVsYXRp
b25JdGVtSWRlbnRpZmllckZyb21TdHJpbmcoaXRlbS5pZGVudGlmaWVyKSA9PSBjb3JlRmFpbHVy
ZS5pZGVudGlmaWVyKTsKKyAgICAgICAgcmV0dXJuIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpf
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbUVycm9yRG9tYWluIGNvZGU6ZXJyb3JDb2RlIHVzZXJJbmZv
OkB7X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW1FcnJvckl0ZW1LZXk6IGl0ZW19XTsKKyAgICB9KTsK
IH0KIAogLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6KE5TQXJyYXk8
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKilpdGVtcyBjb21wbGV0aW9uOih2b2lkKF4pKE5T
QXJyYXk8TlNFcnJvciAqPiAqZXJyb3JzKSljb21wbGV0aW9uSGFuZGxlcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2Vz
Lm1tCmluZGV4IGE1YTk0MWYxZDdmYjJkYmRiY2RlY2JmMTZkZTNiYmVjZGJlYzk5YTEuLjlhNTMw
Mzc0ODA0MjY3ZTU2NWRlMzUxZjAyY2JlN2M4OTNlNmUwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0K
QEAgLTI1MSwxMSArMjUxLDkgQEAgLSAoX1dLV2Vic2l0ZVBvcFVwUG9saWN5KV9wb3BVcFBvbGlj
eQogCiAtIChOU0FycmF5PF9XS0N1c3RvbUhlYWRlckZpZWxkcyAqPiAqKV9jdXN0b21IZWFkZXJG
aWVsZHMKIHsKLSAgICBjb25zdCBhdXRvJiBmaWVsZHMgPSBfd2Vic2l0ZVBvbGljaWVzLT5jdXN0
b21IZWFkZXJGaWVsZHMoKTsKLSAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpmaWVsZHMuc2l6ZSgpXSBhdXRvcmVsZWFz
ZV07Ci0gICAgZm9yIChjb25zdCBhdXRvJiBmaWVsZCA6IGZpZWxkcykKLSAgICAgICAgW2FycmF5
IGFkZE9iamVjdDp3cmFwcGVyKEFQSTo6Q3VzdG9tSGVhZGVyRmllbGRzOjpjcmVhdGUoZmllbGQp
KV07Ci0gICAgcmV0dXJuIGFycmF5OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KF93ZWJzaXRl
UG9saWNpZXMtPmN1c3RvbUhlYWRlckZpZWxkcygpLCBbXSAoYXV0byYgZmllbGQpIHsKKyAgICAg
ICAgcmV0dXJuIHdyYXBwZXIoQVBJOjpDdXN0b21IZWFkZXJGaWVsZHM6OmNyZWF0ZShmaWVsZCkp
OworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKHZvaWQpX3NldEN1c3RvbUhlYWRlckZp
ZWxkczooTlNBcnJheTxfV0tDdXN0b21IZWFkZXJGaWVsZHMgKj4gKilmaWVsZHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3Jk
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNv
cmQubW0KaW5kZXggNTlkNGRhYWFkMjQzOWIyZDIyOTc0Zjk5ZDg3ODg1MmRlMDI0ZjMzZC4uNDU0
MDNkMTY5MzZlYWE4MjU0Y2Q1MDVmYTg4NGVkZjBkYWZlMDQ5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0K
QEAgLTE1NCwxMSArMTU0LDkgQEAgLSAoX1dLV2Vic2l0ZURhdGFTaXplICopX2RhdGFTaXplCiAK
IC0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKilfb3JpZ2luc1N0cmluZ3MKIHsKLSAgICBhdXRvIG9y
aWdpbnMgPSBfd2Vic2l0ZURhdGFSZWNvcmQtPndlYnNpdGVEYXRhUmVjb3JkKCkub3JpZ2luczsK
LSAgICBOU011dGFibGVBcnJheTxOU1N0cmluZyAqPiAqYXJyYXkgPSBbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om9yaWdpbnMuc2l6ZSgpXTsKLSAgICBmb3IgKGF1dG8m
IG9yaWdpbiA6IG9yaWdpbnMpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nICop
b3JpZ2luLnRvU3RyaW5nKCldOwotICAgIHJldHVybiBbYXJyYXkgYXV0b3JlbGVhc2VdOworICAg
IHJldHVybiBjcmVhdGVOU0FycmF5KF93ZWJzaXRlRGF0YVJlY29yZC0+d2Vic2l0ZURhdGFSZWNv
cmQoKS5vcmlnaW5zLCBbXSAoYXV0byYgb3JpZ2luKSAtPiBOU1N0cmluZyAqIHsKKyAgICAgICAg
cmV0dXJuIG9yaWdpbi50b1N0cmluZygpOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIEBl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJz
aXRlRGF0YVN0b3JlLm1tCmluZGV4IGE0OGUxYjYyMDI2Yjc3MTMyZGY0Zjc5OTAyN2I3N2M1NmE5
MWNmY2EuLjczYzk4YTM0NjI1ZDhmNTU1MjQxNDM4NGUzY2U2YjhkYjg0MGU4ZDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZS5tbQpAQCAtNTQyLDExICs1NDIsOSBAQCAtICh2b2lkKV9nZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YVN1bW1hcnk6KHZvaWQgKF4pKE5TQXJyYXk8X1dLUmVzb3VyY2VMb2FkUwogewog
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgX3dlYnNpdGVEYXRhU3Rv
cmUtPmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShbY29tcGxldGlvbkhhbmRs
ZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHRoaXJkUGFydHlE
b21haW5zKSB7Ci0gICAgICAgIE5TTXV0YWJsZUFycmF5PF9XS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUaGlyZFBhcnR5ICo+ICphcGlUaGlyZFBhcnRpZXMgPSBbW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eTp0aGlyZFBhcnR5RG9tYWlucy5zaXplKCldIGF1dG9yZWxlYXNl
XTsKLSAgICAgICAgZm9yIChhdXRvJiB0aGlyZFBhcnR5IDogdGhpcmRQYXJ0eURvbWFpbnMpCi0g
ICAgICAgICAgICBbYXBpVGhpcmRQYXJ0aWVzIGFkZE9iamVjdDp3cmFwcGVyKEFQSTo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHk6OmNyZWF0ZShXVEZNb3ZlKHRoaXJkUGFydHkpKSld
OwotCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGFwaVRoaXJkUGFydGllcyk7CisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKGNyZWF0ZU5TQXJyYXkodGhpcmRQYXJ0eURvbWFpbnMsIFtdIChh
dXRvJiYgZG9tYWluKSB7CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcihBUEk6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5OjpjcmVhdGUoV1RGTW92ZShkb21haW4pKSk7CisgICAg
ICAgIH0pLmdldCgpKTsKICAgICB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIobmls
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tEb3du
bG9hZC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tEb3dubG9hZC5t
bQppbmRleCBkMWE2ODNkZDJlNjhlOTk2M2RlYzlmMjhmZjY4MGU4YjQxMmNjMzRhLi5kYTBkYjVh
ZDljNmUzNzdhMjNiZmQ2NGEyZjkwNjMxNmY1ZjBjODE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLRG93bmxvYWQubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0Rvd25sb2FkLm1tCkBAIC02NywxMSArNjcsOSBAQCAt
IChXS1dlYlZpZXcgKilvcmlnaW5hdGluZ1dlYlZpZXcKIAogLShOU0FycmF5PE5TVVJMICo+ICop
cmVkaXJlY3RDaGFpbgogewotICAgIGF1dG8mIHJlZGlyZWN0VVJMcyA9IF9kb3dubG9hZC0+cmVk
aXJlY3RDaGFpbigpOwotICAgIE5TTXV0YWJsZUFycmF5PE5TVVJMICo+ICpuc1VSTHMgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6cmVkaXJlY3RVUkxzLnNpemUoKV07Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiByZWRpcmVjdFVSTCA6IHJlZGlyZWN0VVJMcykKLSAgICAgICAgW25z
VVJMcyBhZGRPYmplY3Q6KE5TVVJMICopcmVkaXJlY3RVUkxdOwotICAgIHJldHVybiBuc1VSTHM7
CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoX2Rvd25sb2FkLT5yZWRpcmVjdENoYWluKCksIFtd
IChhdXRvJiByZWRpcmVjdFVSTCkgLT4gTlNVUkwgKiB7CisgICAgICAgIHJldHVybiByZWRpcmVj
dFVSTDsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChCT09MKXdhc1VzZXJJbml0aWF0
ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tGcmFt
ZVRyZWVOb2RlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0ZyYW1l
VHJlZU5vZGUubW0KaW5kZXggZWM0YzRhN2VlMDJlMjI0N2ZjZWJiMDQ3ZTNiNmU3N2U4ZGQ2NDI3
OC4uNGQzOWUyMTU4MjE2N2JjODUxYjkwZGM0YTE4NTYyNGU2YmYwYzIyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0ZyYW1lVHJlZU5vZGUubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0ZyYW1lVHJlZU5vZGUubW0K
QEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCiAjaW1wb3J0
ICJfV0tGcmFtZUhhbmRsZUludGVybmFsLmgiCiAjaW1wb3J0ICJfV0tGcmFtZVRyZWVOb2RlSW50
ZXJuYWwuaCIKKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiBAaW1wbGVtZW50
YXRpb24gX1dLRnJhbWVUcmVlTm9kZQogCkBAIC02MiwxMSArNjMsOSBAQCAtIChXS1dlYlZpZXcg
Kil3ZWJWaWV3CiAKIC0gKE5TQXJyYXk8X1dLRnJhbWVUcmVlTm9kZSAqPiAqKWNoaWxkRnJhbWVz
CiB7Ci0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBfbm9kZS0+Y2hpbGRGcmFtZXMoKTsKLSAg
ICBOU011dGFibGVBcnJheTxfV0tGcmFtZVRyZWVOb2RlICo+ICphcnJheSA9IFtOU011dGFibGVB
cnJheSBhcnJheVdpdGhDYXBhY2l0eTpjaGlsZHJlbi5zaXplKCldOwotICAgIGZvciAoY29uc3Qg
YXV0byYgY2hpbGQgOiBjaGlsZHJlbikKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDp3cmFwcGVy
KEFQSTo6RnJhbWVUcmVlTm9kZTo6Y3JlYXRlKFdlYktpdDo6RnJhbWVUcmVlTm9kZURhdGEoY2hp
bGQpLCBfbm9kZS0+cGFnZSgpKSldOwotICAgIHJldHVybiBhcnJheTsKKyAgICByZXR1cm4gY3Jl
YXRlTlNBcnJheShfbm9kZS0+Y2hpbGRGcmFtZXMoKSwgWyZdIChhdXRvJiBjaGlsZCkgeworICAg
ICAgICByZXR1cm4gd3JhcHBlcihBUEk6OkZyYW1lVHJlZU5vZGU6OmNyZWF0ZShXZWJLaXQ6OkZy
YW1lVHJlZU5vZGVEYXRhKGNoaWxkKSwgX25vZGUtPnBhZ2UoKSkpOworICAgIH0pLmF1dG9yZWxl
YXNlKCk7CiB9CiAKIC0gKGlkKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmln
dXJhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24ubW0KaW5kZXggYWQzNjViY2IxZjUxYWRiMDZlNzYyNjE2MzNlMTg1
ZDhjMTVjYWVkMC4uYzQzZDQyNzFlNWY1YzM1ZTMzZDY5MTQxZDQ3MjI5MWNhN2FkMjAzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29s
Q29uZmlndXJhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLm1tCkBAIC0xNDMsMTEgKzE0Myw5IEBAIC0gKE5T
QXJyYXk8TlNVUkwgKj4gKilhZGRpdGlvbmFsUmVhZEFjY2Vzc0FsbG93ZWRVUkxzCiAgICAgaWYg
KHBhdGhzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEBbIF07CiAKLSAgICBOU011dGFibGVB
cnJheSAqdXJscyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpwYXRocy5zaXpl
KCldOwotICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6IHBhdGhzKQotICAgICAgICBbdXJscyBh
ZGRPYmplY3Q6W05TVVJMIGZpbGVVUkxXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOnBhdGgu
ZGF0YSgpIGlzRGlyZWN0b3J5Ok5PIHJlbGF0aXZlVG9VUkw6bmlsXV07Ci0KLSAgICByZXR1cm4g
dXJsczsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShwYXRocywgW10gKGF1dG8mIHBhdGgpIHsK
KyAgICAgICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bjpwYXRoLmRhdGEoKSBpc0RpcmVjdG9yeTpOTyByZWxhdGl2ZVRvVVJMOm5pbF07CisgICAgfSku
YXV0b3JlbGVhc2UoKTsKIH0KIAogLSAodm9pZClzZXRBZGRpdGlvbmFsUmVhZEFjY2Vzc0FsbG93
ZWRVUkxzOihOU0FycmF5PE5TVVJMICo+ICopYWRkaXRpb25hbFJlYWRBY2Nlc3NBbGxvd2VkVVJM
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Lm1tCmluZGV4IDUz
ZjlkOWYzNTllZDZhZjU0NTgxNTY1OGIzNTFkM2Y3YjI0NGNjN2UuLmYwNDZiZGRmM2E1ODI5MTVk
YTA3Y2QyMTAyMzllODM4NTI1MDI5ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1RoaXJkUGFydHkubW0KQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIl9XS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5SW50ZXJuYWwuaCIKIAogI2ltcG9ydCAiQVBJQXJyYXku
aCIKKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiBAaW1wbGVtZW50YXRpb24g
X1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHkKIApAQCAtNDMsMTIgKzQ0LDkgQEAg
LSAoTlNTdHJpbmcgKil0aGlyZFBhcnR5RG9tYWluCiAKIC0gKE5TQXJyYXk8X1dLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0ZpcnN0UGFydHkgKj4gKil1bmRlckZpcnN0UGFydGllcwogewotICAgIGF1
dG8gYXBpRmlyc3RQYXJ0aWVzID0gX3RoaXJkUGFydHktPnVuZGVyRmlyc3RQYXJ0aWVzKCk7Ci0g
ICAgTlNNdXRhYmxlQXJyYXk8X1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHkgKj4g
KmFwaVVuZGVyRmlyc3RQYXJ0aWVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5
OmFwaUZpcnN0UGFydGllcy5zaXplKCldOwotICAgIGZvciAoY29uc3QgYXV0byYgdGhpcmRQYXJ0
eURhdGFVbmRlckZpcnN0UGFydHkgOiBhcGlGaXJzdFBhcnRpZXMpCi0gICAgICAgIFthcGlVbmRl
ckZpcnN0UGFydGllcyBhZGRPYmplY3Q6d3JhcHBlcihBUEk6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NGaXJzdFBhcnR5OjpjcmVhdGUodGhpcmRQYXJ0eURhdGFVbmRlckZpcnN0UGFydHkpKV07Ci0K
LSAgICByZXR1cm4gYXBpVW5kZXJGaXJzdFBhcnRpZXM7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJy
YXkoX3RoaXJkUGFydHktPnVuZGVyRmlyc3RQYXJ0aWVzKCksIFtdIChhdXRvJiBkYXRhKSB7Cisg
ICAgICAgIHJldHVybiB3cmFwcGVyKEFQSTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFy
dHk6OmNyZWF0ZShkYXRhKSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoQVBJOjpP
YmplY3QmKV9hcGlPYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9pb3MvV0tXZWJWaWV3SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9X
S1dlYlZpZXdJT1MubW0KaW5kZXggYmEwNmFjZTk2ZGEwNDk2NWE3MmRmZWNmNzI1NTliMmQzNmVl
MjZiMy4uZjRkMDZjNjZkZjJkYWE3N2M3NTE5ZWMyOGNkZGYyYTVlNWIxNmRlOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0KQEAgLTU2LDYg
KzU2LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgogI2ltcG9ydCA8
cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9HcmFw
aGljc1NlcnZpY2VzU1BJLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAog
I2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKICNpbXBvcnQgIldLRGF0YURldGVjdG9yVHlwZXNJ
bnRlcm5hbC5oIgpAQCAtMzA0OSwxMCArMzA1MCw5IEBAIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlS
ZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0aFRleHQ6
CiAgICAgW19jb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlv
bk9mZnNldDpvZmZzZXQgd2l0aFRleHQ6dGV4dCBjb21wbGV0aW9uSGFuZGxlcjpbY2FwdHVyZWRD
b21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChjb25z
dCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mIHNlbGVjdGlvblJlY3RzKSB7CiAgICAg
ICAgIGlmICghY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgYXV0byByZWN0VmFsdWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0V2l0aENhcGFjaXR5OnNlbGVjdGlvblJlY3RzLnNpemUoKV0pOwotICAgICAgICBmb3Ig
KGF1dG8mIHNlbGVjdGlvblJlY3QgOiBzZWxlY3Rpb25SZWN0cykKLSAgICAgICAgICAgIFtyZWN0
VmFsdWVzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6c2VsZWN0aW9uUmVjdC5y
ZWN0KCldXTsKLSAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcihyZWN0VmFsdWVzLmdl
dCgpKTsKKyAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcihjcmVhdGVOU0FycmF5KHNl
bGVjdGlvblJlY3RzLCBbXSAoYXV0byYgc2VsZWN0aW9uUmVjdCkgeworICAgICAgICAgICAgcmV0
dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpzZWxlY3Rpb25SZWN0LnJlY3QoKV07CisgICAg
ICAgIH0pLmdldCgpKTsKICAgICB9XTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCmluZGV4IDViYTg4MjU2NTM4ZWZhODBiMGIwOTgy
ZTI4MTU4YWM2NTBhZWRjMmEuLjhiMzk2ZGEwMDg3NmQwYTU1NmVmYWQ3MmI5ZmQyMmU1YWNlOTZj
YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25T
dGF0ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3Rh
dGUubW0KQEAgLTc4LDYgKzc4LDcgQEAKICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9y
dCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0IDx3
dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmICFQ
TEFURk9STShNQUNDQVRBTFlTVCkKICNpbXBvcnQgPHBhbC9pb3MvTWFuYWdlZENvbmZpZ3VyYXRp
b25Tb2Z0TGluay5oPgpAQCAtNDU5LDEzICs0NjAsMTMgQEAgYm9vbCBOYXZpZ2F0aW9uU3RhdGU6
Ok5hdmlnYXRpb25DbGllbnQ6OmRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXZWJQYWdlUHJveHkm
LAogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBOU011dGFibGVBcnJheTxXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKj4gKnJlbW92ZWRJdGVt
cyA9IG5pbDsKLSAgICBpZiAocmVtb3ZlZC5zaXplKCkpIHsKLSAgICAgICAgcmVtb3ZlZEl0ZW1z
ID0gW1tbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cmVtb3ZlZC5zaXpl
KCldIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgZm9yIChhdXRvJiByZW1vdmVkSXRlbSA6IHJlbW92
ZWQpCi0gICAgICAgICAgICBbcmVtb3ZlZEl0ZW1zIGFkZE9iamVjdDp3cmFwcGVyKHJlbW92ZWRJ
dGVtLmdldCgpKV07CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PFdLQmFja0ZvcndhcmRM
aXN0SXRlbSAqPj4gcmVtb3ZlZEl0ZW1zOworICAgIGlmICghcmVtb3ZlZC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgcmVtb3ZlZEl0ZW1zID0gY3JlYXRlTlNBcnJheShyZW1vdmVkLCBbXSAoYXV0byYg
cmVtb3ZlZEl0ZW0pIHsKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVyKHJlbW92ZWRJdGVtLmdl
dCgpKTsKKyAgICAgICAgfSk7CiAgICAgfQotICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRl
UHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1f
d2ViVmlldyBiYWNrRm9yd2FyZExpc3RJdGVtQWRkZWQ6d3JhcHBlcihhZGRlZCkgcmVtb3ZlZDpy
ZW1vdmVkSXRlbXNdOworICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2
aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBiYWNr
Rm9yd2FyZExpc3RJdGVtQWRkZWQ6d3JhcHBlcihhZGRlZCkgcmVtb3ZlZDpyZW1vdmVkSXRlbXMu
Z2V0KCldOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9y
bWFuY2VEYXRhLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YS5tbQppbmRleCA4MTNiMTgxMjcw
ZjUyMGU5MjRlZjRmNjEyZDgxNTI1ZmQ2ZTYzZjUwLi5lYWVmYjllMWI1MWYyZmM2ZGI2YjM0Yzhk
Mjk5ODE4YmNmZjUzMzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1v
dGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRy
ZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQg
IlJlbW90ZUxheWVyVHJlZUhvc3QuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FMYXllci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9UaWxlQ29udHJvbGxlci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1Zl
Y3RvckNvY29hLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CkBAIC03MiwxNiArNzMsMTMgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJm
b3JtYW5jZURhdGE6OmFwcGVuZEJsYW5rUGl4ZWxDb3VudChCbGFua1BpeGVsQ28KIAogTlNBcnJh
eSAqUmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhOjpkYXRhKCkKIHsKLSAg
ICBOU011dGFibGVBcnJheSogZGF0YUFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENh
cGFjaXR5Om1fYmxhbmtQaXhlbENvdW50cy5zaXplKCldOwotICAgIAotICAgIGZvciAoYXV0byBw
aXhlbERhdGEgOiBtX2JsYW5rUGl4ZWxDb3VudHMpIHsKLSAgICAgICAgW2RhdGFBcnJheSBhZGRP
YmplY3Q6QFsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShtX2JsYW5rUGl4ZWxDb3VudHMsIFtd
IChhdXRvJiBwaXhlbERhdGEpIHsKKyAgICAgICAgcmV0dXJuIEBbCiAgICAgICAgICAgICBAKHBp
eGVsRGF0YS5zdGFydFRpbWUpLAogICAgICAgICAgICAgKHBpeGVsRGF0YS5ldmVudFR5cGUgPT0g
QmxhbmtQaXhlbENvdW50OjpGaWxsZWQpID8gQCJmaWxsZWQiIDogQCJleHBvc2VkIiwKICAgICAg
ICAgICAgIEAocGl4ZWxEYXRhLmJsYW5rUGl4ZWxDb3VudCkKLSAgICAgICAgXV07Ci0gICAgfQot
ICAgIHJldHVybiBkYXRhQXJyYXk7CisgICAgICAgIF07CisgICAgfSkuYXV0b3JlbGVhc2UoKTsK
IH0KIAogc3RhdGljIENBTGF5ZXIgKmZpbmRUaWxlR3JpZENvbnRhaW5lckxheWVyKENBTGF5ZXIg
KmxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL0RyYWdEcm9w
SW50ZXJhY3Rpb25TdGF0ZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJv
cEludGVyYWN0aW9uU3RhdGUubW0KaW5kZXggNTg4ZTgzYzk1MmFjOTFmMzE5ZWRlMWQwY2Y4NTM3
ZmVmYzcxMDc2Ni4uZmY0ZTRmZDE0ZjEyZGNjN2E3MDc1ZjhjM2UyZWUxMDRlYWIwN2ViZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvRHJhZ0Ryb3BJbnRlcmFj
dGlvblN0YXRlLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1w
b3J0IDxXZWJDb3JlL0RyYWdJdGVtLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ltYWdlLmg+CisjaW1w
b3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTUwLDI0ICs1MSwyMiBAQCBzdGF0aWMgUmV0YWluUHRy
PFVJVGFyZ2V0ZWREcmFnUHJldmlldz4gY3JlYXRlVGFyZ2V0ZWREcmFnUHJldmlldyhVSUltYWdl
ICppbWFnZQogICAgIGlmIChmcmFtZUluUm9vdFZpZXdDb29yZGluYXRlcy5pc0VtcHR5KCkgfHwg
IWltYWdlIHx8ICFwcmV2aWV3Q29udGFpbmVyLndpbmRvdykKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBOU011dGFibGVBcnJheSAqY2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3Jk
aW5hdGVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNsaXBwaW5nUmVjdHNJ
bkZyYW1lQ29vcmRpbmF0ZXMuc2l6ZSgpXTsKLQogICAgIEZsb2F0UmVjdCBmcmFtZUluQ29udGFp
bmVyQ29vcmRpbmF0ZXMgPSBbcm9vdFZpZXcgY29udmVydFJlY3Q6ZnJhbWVJblJvb3RWaWV3Q29v
cmRpbmF0ZXMgdG9WaWV3OnByZXZpZXdDb250YWluZXJdOwogICAgIGlmIChmcmFtZUluQ29udGFp
bmVyQ29vcmRpbmF0ZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IEZsb2F0U2l6ZSBzY2FsaW5nUmF0aW8gPSBmcmFtZUluQ29udGFpbmVyQ29vcmRpbmF0ZXMuc2l6
ZSgpIC8gZnJhbWVJblJvb3RWaWV3Q29vcmRpbmF0ZXMuc2l6ZSgpOwotICAgIGZvciAoYXV0byBy
ZWN0IDogY2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcykgeworICAgIGF1dG8gY2xpcHBp
bmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVzID0gY3JlYXRlTlNBcnJheShjbGlwcGluZ1Jl
Y3RzSW5GcmFtZUNvb3JkaW5hdGVzLCBbJl0gKGF1dG8gcmVjdCkgewogICAgICAgICByZWN0LnNj
YWxlKHNjYWxpbmdSYXRpbyk7Ci0gICAgICAgIFtjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29v
cmRpbmF0ZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XV07Ci0gICAg
fQorICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnJlY3RdOworICAgIH0p
OwogCiAgICAgYXV0byBpbWFnZVZpZXcgPSBhZG9wdE5TKFtbVUlJbWFnZVZpZXcgYWxsb2NdIGlu
aXRXaXRoSW1hZ2U6aW1hZ2VdKTsKICAgICBbaW1hZ2VWaWV3IHNldEZyYW1lOmZyYW1lSW5Db250
YWluZXJDb29yZGluYXRlc107CiAKICAgICBSZXRhaW5QdHI8VUlEcmFnUHJldmlld1BhcmFtZXRl
cnM+IHBhcmFtZXRlcnM7Ci0gICAgaWYgKGNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGlu
YXRlcy5jb3VudCkKLSAgICAgICAgcGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSURyYWdQcmV2aWV3
UGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhUZXh0TGluZVJlY3RzOmNsaXBwaW5nUmVjdFZhbHVl
c0luRnJhbWVDb29yZGluYXRlc10pOworICAgIGlmIChbY2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFt
ZUNvb3JkaW5hdGVzIGNvdW50XSkKKyAgICAgICAgcGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSURy
YWdQcmV2aWV3UGFyYW1ldGVycyBhbGxvY10gaW5pdFdpdGhUZXh0TGluZVJlY3RzOmNsaXBwaW5n
UmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcy5nZXQoKV0pOwogICAgIGVsc2UKICAgICAgICAg
cGFyYW1ldGVycyA9IGFkb3B0TlMoW1tVSURyYWdQcmV2aWV3UGFyYW1ldGVycyBhbGxvY10gaW5p
dF0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCBhMTg4ZTI0YWE5ZGUxNDA3YzcyODhlODlmYmJjYjg2
NjYzOTU2ZmU3Li4wNDZlZTgxZGI2YmJhOTgwOTZhNTk5NjZkNTdlMzhiMTBhZGIxYzEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24ubW0KQEAgLTE2NzQsMTcgKzE2NzQsMTQgQEAgLSAodm9pZClfdXBkYXRlVGFwSGln
aGxpZ2h0CiAgICAgaWYgKCFbX2hpZ2hsaWdodFZpZXcgc3VwZXJ2aWV3XSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgewotICAgICAgICBSZXRhaW5QdHI8VUlDb2xvcj4gaGlnaGxpZ2h0VUlLaXRD
b2xvciA9IGFkb3B0TlMoW1tVSUNvbG9yIGFsbG9jXSBpbml0V2l0aENHQ29sb3I6Y2FjaGVkQ0dD
b2xvcihfdGFwSGlnaGxpZ2h0SW5mb3JtYXRpb24uY29sb3IpXSk7Ci0gICAgICAgIFtfaGlnaGxp
Z2h0VmlldyBzZXRDb2xvcjpoaWdobGlnaHRVSUtpdENvbG9yLmdldCgpXTsKLSAgICB9CisgICAg
W19oaWdobGlnaHRWaWV3IHNldENvbG9yOmFkb3B0TlMoW1tVSUNvbG9yIGFsbG9jXSBpbml0V2l0
aENHQ29sb3I6Y2FjaGVkQ0dDb2xvcihfdGFwSGlnaGxpZ2h0SW5mb3JtYXRpb24uY29sb3IpXSku
Z2V0KCldOwogCiAgICAgQ0dGbG9hdCBzZWxmU2NhbGUgPSBzZWxmLmxheWVyLnRyYW5zZm9ybS5t
MTE7CiAgICAgYm9vbCBhbGxIaWdobGlnaHRSZWN0c0FyZVJlY3RpbGluZWFyID0gdHJ1ZTsKICAg
ICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IF9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwog
ICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFF1YWQ+JiBoaWdobGlnaHRlZFF1YWRzID0g
X3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLnF1YWRzOwotICAgIGNvbnN0IHNpemVfdCBxdWFkQ291
bnQgPSBoaWdobGlnaHRlZFF1YWRzLnNpemUoKTsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJy
YXk+IHJlY3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5OnN0YXRpY19jYXN0PGNvbnN0IE5TVUludGVnZXI+KHF1YWRDb3VudCldKTsKKyAgICBOU1VJ
bnRlZ2VyIHF1YWRDb3VudCA9IGhpZ2hsaWdodGVkUXVhZHMuc2l6ZSgpOworICAgIGF1dG8gcmVj
dHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cXVh
ZENvdW50XSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkQ291bnQ7ICsraSkgewog
ICAgICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIHF1YWQgPSBoaWdobGlnaHRlZFF1YWRz
W2ldOwogICAgICAgICBpZiAocXVhZC5pc1JlY3RpbGluZWFyKCkpIHsKQEAgLTE2OTUsNyArMTY5
Miw3IEBAIC0gKHZvaWQpX3VwZGF0ZVRhcEhpZ2hsaWdodAogICAgICAgICAgICAgW3JlY3RzIGFk
ZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6cGl4ZWxBbGlnbmVkUmVjdF1dOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgYWxsSGlnaGxpZ2h0UmVjdHNBcmVSZWN0aWxpbmVh
ciA9IGZhbHNlOwotICAgICAgICAgICAgcmVjdHMuY2xlYXIoKTsKKyAgICAgICAgICAgIHJlY3Rz
ID0gbmlsOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzAzLDcg
KzE3MDAsNyBAQCAtICh2b2lkKV91cGRhdGVUYXBIaWdobGlnaHQKICAgICBpZiAoYWxsSGlnaGxp
Z2h0UmVjdHNBcmVSZWN0aWxpbmVhcikKICAgICAgICAgW19oaWdobGlnaHRWaWV3IHNldEZyYW1l
czpyZWN0cy5nZXQoKSBib3VuZGFyeVJlY3Q6X3BhZ2UtPmV4cG9zZWRDb250ZW50UmVjdCgpXTsK
ICAgICBlbHNlIHsKLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBxdWFkcyA9IGFk
b3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzdGF0aWNfY2Fz
dDxjb25zdCBOU1VJbnRlZ2VyPihxdWFkQ291bnQpXSk7CisgICAgICAgIGF1dG8gcXVhZHMgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cXVhZENvdW50
ICogNF0pOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRDb3VudDsgKytpKSB7
CiAgICAgICAgICAgICBXZWJDb3JlOjpGbG9hdFF1YWQgcXVhZCA9IGhpZ2hsaWdodGVkUXVhZHNb
aV07CiAgICAgICAgICAgICBxdWFkLnNjYWxlKHNlbGZTY2FsZSk7CkBAIC0xNzE3LDExICsxNzE0
LDEyIEBAIC0gKHZvaWQpX3VwZGF0ZVRhcEhpZ2hsaWdodAogICAgIH0KIAogICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gYm9yZGVyUmFkaWkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6NF0pOwotICAgIFtib3JkZXJSYWRpaSBhZGRPYmplY3Q6
bnNTaXplRm9yVGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlv
bi50b3BMZWZ0UmFkaXVzLCBzZWxmU2NhbGUpXTsKLSAgICBbYm9yZGVyUmFkaWkgYWRkT2JqZWN0
Om5zU2l6ZUZvclRhcEhpZ2hsaWdodEJvcmRlclJhZGl1cyhfdGFwSGlnaGxpZ2h0SW5mb3JtYXRp
b24udG9wUmlnaHRSYWRpdXMsIHNlbGZTY2FsZSldOwotICAgIFtib3JkZXJSYWRpaSBhZGRPYmpl
Y3Q6bnNTaXplRm9yVGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1h
dGlvbi5ib3R0b21MZWZ0UmFkaXVzLCBzZWxmU2NhbGUpXTsKLSAgICBbYm9yZGVyUmFkaWkgYWRk
T2JqZWN0Om5zU2l6ZUZvclRhcEhpZ2hsaWdodEJvcmRlclJhZGl1cyhfdGFwSGlnaGxpZ2h0SW5m
b3JtYXRpb24uYm90dG9tUmlnaHRSYWRpdXMsIHNlbGZTY2FsZSldOwotICAgIFtfaGlnaGxpZ2h0
VmlldyBzZXRDb3JuZXJSYWRpaTpib3JkZXJSYWRpaS5nZXQoKV07CisgICAgW19oaWdobGlnaHRW
aWV3IHNldENvcm5lclJhZGlpOkBbCisgICAgICAgIG5zU2l6ZUZvclRhcEhpZ2hsaWdodEJvcmRl
clJhZGl1cyhfdGFwSGlnaGxpZ2h0SW5mb3JtYXRpb24udG9wTGVmdFJhZGl1cywgc2VsZlNjYWxl
KSwKKyAgICAgICAgbnNTaXplRm9yVGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGln
aHRJbmZvcm1hdGlvbi50b3BSaWdodFJhZGl1cywgc2VsZlNjYWxlKSwKKyAgICAgICAgbnNTaXpl
Rm9yVGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi5ib3R0
b21MZWZ0UmFkaXVzLCBzZWxmU2NhbGUpLAorICAgICAgICBuc1NpemVGb3JUYXBIaWdobGlnaHRC
b3JkZXJSYWRpdXMoX3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLmJvdHRvbVJpZ2h0UmFkaXVzLCBz
ZWxmU2NhbGUpLAorICAgIF1dOwogfQogCiAtICh2b2lkKV9zaG93VGFwSGlnaGxpZ2h0CkBAIC0y
NTY0LDE0ICsyNTYyLDExIEBAIC0gKEJPT0wpdGV4dEludGVyYWN0aW9uR2VzdHVyZTooVUlXS0dl
c3R1cmVUeXBlKWdlc3R1cmUgc2hvdWxkQmVnaW5BdFBvaW50OihDR1BvCiAKIC0gKE5TQXJyYXkg
Kil3ZWJTZWxlY3Rpb25SZWN0c0ZvclNlbGVjdGlvblJlY3RzOihjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6U2VsZWN0aW9uUmVjdD4mKXNlbGVjdGlvblJlY3RzCiB7Ci0gICAgdW5zaWduZWQgc2l6ZSA9
IHNlbGVjdGlvblJlY3RzLnNpemUoKTsKLSAgICBpZiAoIXNpemUpCisgICAgaWYgKHNlbGVjdGlv
blJlY3RzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIE5TTXV0YWJsZUFy
cmF5ICp3ZWJSZWN0cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0
IFdlYkNvcmU6OlNlbGVjdGlvblJlY3QmIGNvcmVSZWN0ID0gc2VsZWN0aW9uUmVjdHNbaV07Ci0g
ICAgICAgIFdlYlNlbGVjdGlvblJlY3QgKndlYlJlY3QgPSBbV2ViU2VsZWN0aW9uUmVjdCBzZWxl
Y3Rpb25SZWN0XTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShzZWxlY3Rpb25SZWN0cywgW10g
KGF1dG8mIGNvcmVSZWN0KSB7CisgICAgICAgIGF1dG8gd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25S
ZWN0IHNlbGVjdGlvblJlY3RdOwogICAgICAgICB3ZWJSZWN0LnJlY3QgPSBjb3JlUmVjdC5yZWN0
KCk7CiAgICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGNvcmVSZWN0LmRpcmVjdGlv
bigpID09IFdlYkNvcmU6OlRleHREaXJlY3Rpb246OkxUUiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxl
ZnRUb1JpZ2h0IDogV0tXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAgICAgICAgIHdlYlJl
Y3QuaXNMaW5lQnJlYWsgPSBjb3JlUmVjdC5pc0xpbmVCcmVhaygpOwpAQCAtMjU4MSwxMCArMjU3
Niw4IEBAIC0gKE5TQXJyYXkgKil3ZWJTZWxlY3Rpb25SZWN0c0ZvclNlbGVjdGlvblJlY3RzOihj
b25zdCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uCiAgICAgICAgIHdlYlJlY3QuY29udGFpbnNF
bmQgPSBjb3JlUmVjdC5jb250YWluc0VuZCgpOwogICAgICAgICB3ZWJSZWN0LmlzSW5GaXhlZFBv
c2l0aW9uID0gY29yZVJlY3QuaXNJbkZpeGVkUG9zaXRpb24oKTsKICAgICAgICAgd2ViUmVjdC5p
c0hvcml6b250YWwgPSBjb3JlUmVjdC5pc0hvcml6b250YWwoKTsKLSAgICAgICAgW3dlYlJlY3Rz
IGFkZE9iamVjdDp3ZWJSZWN0XTsKLSAgICB9Ci0KLSAgICByZXR1cm4gd2ViUmVjdHM7CisgICAg
ICAgIHJldHVybiB3ZWJSZWN0OworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TQXJy
YXkgKil3ZWJTZWxlY3Rpb25SZWN0cwpAQCAtNDQ1NywxNCArNDQ1MCwxMSBAQCAtICh2b2lkKXJl
cGxhY2VSYW5nZTooVUlUZXh0UmFuZ2UgKilyYW5nZSB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0
CiB7CiB9CiAKLXN0YXRpYyBOU0FycmF5PFdLVGV4dFNlbGVjdGlvblJlY3QgKj4gKndrVGV4dFNl
bGVjdGlvblJlY3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYgY29yZVJl
Y3RzKQorc3RhdGljIE5TQXJyYXk8V0tUZXh0U2VsZWN0aW9uUmVjdCAqPiAqd2tUZXh0U2VsZWN0
aW9uUmVjdHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiByZWN0cykKIHsK
LSAgICBhdXRvIHJlY3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0
aENhcGFjaXR5OmNvcmVSZWN0cy5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIGNvcmVSZWN0IDog
Y29yZVJlY3RzKSB7Ci0gICAgICAgIGF1dG8gd2tUZXh0U2VsZWN0aW9uUmVjdCA9IGFkb3B0TlMo
W1tXS1RleHRTZWxlY3Rpb25SZWN0IGFsbG9jXSBpbml0V2l0aFNlbGVjdGlvblJlY3Q6Y29yZVJl
Y3RdKTsKLSAgICAgICAgW3JlY3RzIGFkZE9iamVjdDp3a1RleHRTZWxlY3Rpb25SZWN0LmdldCgp
XTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlY3RzLmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNy
ZWF0ZU5TQXJyYXkocmVjdHMsIFtdIChhdXRvJiByZWN0KSB7CisgICAgICAgIHJldHVybiBhZG9w
dE5TKFtbV0tUZXh0U2VsZWN0aW9uUmVjdCBhbGxvY10gaW5pdFdpdGhTZWxlY3Rpb25SZWN0OnJl
Y3RdKTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChVSVRleHRSYW5nZSAqKXNlbGVj
dGVkVGV4dFJhbmdlCkBAIC03NTgyLDE3ICs3NTcyLDE1IEBAIHN0YXRpYyBSZXRhaW5QdHI8VUlU
YXJnZXRlZFByZXZpZXc+IGNyZWF0ZVRhcmdldGVkUHJldmlldyhVSUltYWdlICppbWFnZSwgVUlW
aWV3CiAgICAgaWYgKGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBuaWw7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2NhbGluZ1JhdGlvID0g
ZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzLnNpemUoKSAvIGZyYW1lSW5Sb290Vmlld0Nvb3Jk
aW5hdGVzLnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSAqY2xpcHBpbmdSZWN0VmFsdWVzSW5G
cmFtZUNvb3JkaW5hdGVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNsaXBw
aW5nUmVjdHNJbkZyYW1lQ29vcmRpbmF0ZXMuc2l6ZSgpXTsKLQotICAgIGZvciAoYXV0byByZWN0
IDogY2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcykgeworICAgIGF1dG8gc2NhbGluZ1Jh
dGlvID0gZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzLnNpemUoKSAvIGZyYW1lSW5Sb290Vmll
d0Nvb3JkaW5hdGVzLnNpemUoKTsKKyAgICBhdXRvIGNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVD
b29yZGluYXRlcyA9IGNyZWF0ZU5TQXJyYXkoY2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRl
cywgWyZdIChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkgewogICAgICAgICByZWN0LnNjYWxlKHNj
YWxpbmdSYXRpbyk7Ci0gICAgICAgIFtjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0
ZXMgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XV07Ci0gICAgfQorICAg
ICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnJlY3RdOworICAgIH0pOwogCiAg
ICAgUmV0YWluUHRyPFVJUHJldmlld1BhcmFtZXRlcnM+IHBhcmFtZXRlcnM7Ci0gICAgaWYgKGNs
aXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcy5jb3VudCkKLSAgICAgICAgcGFyYW1l
dGVycyA9IGFkb3B0TlMoW1tVSVByZXZpZXdQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFRleHRM
aW5lUmVjdHM6Y2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVzXSk7CisgICAgaWYg
KFtjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgY291bnRdKQorICAgICAgICBw
YXJhbWV0ZXJzID0gYWRvcHROUyhbW1VJUHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRo
VGV4dExpbmVSZWN0czpjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMuZ2V0KCld
KTsKICAgICBlbHNlCiAgICAgICAgIHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbVUlQcmV2aWV3UGFy
YW1ldGVycyBhbGxvY10gaW5pdF0pOwogCkBAIC05NjMzLDIzICs5NjIxLDE1IEBAIC0gKFVJSW1h
Z2UgKilfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6KFVJUHJl
dmlld0l0ZW1Db250cm9sCiAKIC0gKE5TQXJyYXkgKilfcHJlc2VudGF0aW9uUmVjdHNGb3JQcmV2
aWV3SXRlbUNvbnRyb2xsZXI6KFVJUHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgog
ewotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0KICAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRp
b24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UpIHsKLSAgICAgICAgV2ViQ29yZTo6RmxvYXRQ
b2ludCBvcmlnaW4gPSBfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLnRleHRCb3Vu
ZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICAgICAgZm9yIChX
ZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QgOiBfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNh
dG9yLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKLSAgICAgICAgICAgIENH
UmVjdCBjZ1JlY3QgPSByZWN0OwotICAgICAgICAgICAgY2dSZWN0Lm9yaWdpbi54ICs9IG9yaWdp
bi54KCk7Ci0gICAgICAgICAgICBjZ1JlY3Qub3JpZ2luLnkgKz0gb3JpZ2luLnkoKTsKLSAgICAg
ICAgICAgIFtyZWN0QXJyYXkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpjZ1Jl
Y3RdXTsKLSAgICAgICAgfQorICAgICAgICBhdXRvIG9yaWdpbiA9IF9wb3NpdGlvbkluZm9ybWF0
aW9uLmxpbmtJbmRpY2F0b3IudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5s
b2NhdGlvbigpOworICAgICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShfcG9zaXRpb25JbmZvcm1h
dGlvbi5saW5rSW5kaWNhdG9yLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMsIFsm
XSAoQ0dSZWN0IHJlY3QpIHsKKyAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhD
R1JlY3Q6Q0dSZWN0T2Zmc2V0KHJlY3QsIG9yaWdpbi54KCksIG9yaWdpbi55KCkpXTsKKyAgICAg
ICAgfSkuYXV0b3JlbGVhc2UoKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb25zdCBmbG9hdCBt
YXJnaW5JblB4ID0gNCAqIF9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgICAgICBDR1Jl
Y3QgY2dSZWN0ID0gQ0dSZWN0SW5zZXQoX3Bvc2l0aW9uSW5mb3JtYXRpb24uYm91bmRzLCAtbWFy
Z2luSW5QeCwgLW1hcmdpbkluUHgpOwotICAgICAgICBbcmVjdEFycmF5IGFkZE9iamVjdDpbTlNW
YWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6Y2dSZWN0XV07CisgICAgICAgIGZsb2F0IG1hcmdpbkluUHgg
PSA0ICogX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIHJldHVybiBAW1tOU1Zh
bHVlIHZhbHVlV2l0aENHUmVjdDpDR1JlY3RJbnNldChfcG9zaXRpb25JbmZvcm1hdGlvbi5ib3Vu
ZHMsIC1tYXJnaW5JblB4LCAtbWFyZ2luSW5QeCldXTsKICAgICB9Ci0KLSAgICByZXR1cm4gcmVj
dEFycmF5LmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKHZvaWQpX3ByZXZpZXdJdGVtQ29udHJvbGxl
ckRpZENhbmNlbFByZXZpZXc6KFVJUHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVu
dC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQubW0K
aW5kZXggMzZhYmRmZDI0NjVlNGRmZDUxMDI0M2RmN2Y5YTc4YzEwYjkxYTc4Yi4uYzhhMDZhMWM3
ZjFiODNlMzYyNTk2YzUzN2Y4Y2E4ZjU4ZDJjYzMzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tCkBAIC0yNzYsMTkgKzI3NiwxNyBA
QCAtICh2b2lkKWRpZEZpbmRTdHJpbmdNYXRjaGVzV2l0aFJlY3RzOihjb25zdCBWZWN0b3I8VmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+PiYpcgogICAgIGlmIChfZmluZFJlcGx5Q2FsbGJhY2tzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byByZXBseUNhbGxiYWNrID0gX2Zp
bmRSZXBseUNhbGxiYWNrcy50YWtlRmlyc3QoKTsKLSAgICBhdXRvIG1hdGNoQ291bnQgPSByZWN0
c0Zvck1hdGNoZXMuc2l6ZSgpOwotICAgIGF1dG8gbWF0Y2hPYmplY3RzID0gYWRvcHROUyhbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om1hdGNoQ291bnRdKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJldGFp
blB0cjxOU0FycmF5PiBuc01hdGNoUmVjdHM7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAg
IGF1dG8gbWF0Y2hPYmplY3RzID0gY3JlYXRlTlNBcnJheShyZWN0c0Zvck1hdGNoZXMsIFsmXSAo
YXV0byYgcmVjdHMpIHsKKyAgICAgICAgUmV0YWluUHRyPE5TQXJyYXk+IHJlY3RzQXJyYXk7CiAg
ICAgICAgIGlmIChfdXNlUGxhdGZvcm1GaW5kVUkpCi0gICAgICAgICAgICBuc01hdGNoUmVjdHMg
PSBjcmVhdGVOU0FycmF5KHJlY3RzRm9yTWF0Y2hlc1tpXSk7CisgICAgICAgICAgICByZWN0c0Fy
cmF5ID0gY3JlYXRlTlNBcnJheShyZWN0cyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5z
TWF0Y2hSZWN0cyA9IEBbXTsKLSAgICAgICAgW21hdGNoT2JqZWN0cyBhZGRPYmplY3Q6YWRvcHRO
UyhbW1dLVGV4dEZpbmRlck1hdGNoIGFsbG9jXSBpbml0V2l0aENsaWVudDpzZWxmIHZpZXc6X3Zp
ZXcgaW5kZXg6aSByZWN0czpuc01hdGNoUmVjdHMuZ2V0KCldKS5nZXQoKV07Ci0gICAgfQorICAg
ICAgICAgICAgcmVjdHNBcnJheSA9IEBbXTsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXS1Rl
eHRGaW5kZXJNYXRjaCBhbGxvY10gaW5pdFdpdGhDbGllbnQ6c2VsZiB2aWV3Ol92aWV3IGluZGV4
OmluZGV4KysgcmVjdHM6cmVjdHNBcnJheS5nZXQoKV0pOworICAgIH0pOwogCi0gICAgcmVwbHlD
YWxsYmFjayhtYXRjaE9iamVjdHMuZ2V0KCksIGRpZFdyYXBBcm91bmQpOworICAgIF9maW5kUmVw
bHlDYWxsYmFja3MudGFrZUZpcnN0KCkobWF0Y2hPYmplY3RzLmdldCgpLCBkaWRXcmFwQXJvdW5k
KTsKIH0KIAogLSAodm9pZClkaWRHZXRJbWFnZUZvck1hdGNoUmVzdWx0OihXZWJLaXQ6OldlYklt
YWdlICopaW1hZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1Rl
eHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V0tUZXh0SW5wdXRXaW5kb3dDb250cm9sbGVyLm1tCmluZGV4IGY2NDhmOTQwNzM1ZTY1YWY5OTc3
MTFjNWNhNTkyODI2N2JmNTk3Y2IuLjM1Mjc1ZGY4ZmQ3Y2NjNDA1YzY3MzJkMWM4OGZjMTk0N2Nl
MWE2MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRJbnB1
dFdpbmRvd0NvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dL
VGV4dElucHV0V2luZG93Q29udHJvbGxlci5tbQpAQCAtNDAsMTAgKzQwLDcgQEAgQGltcGxlbWVu
dGF0aW9uIFdLVGV4dElucHV0VmlldwogLSAoTlNBcnJheSAqKXZhbGlkQXR0cmlidXRlc0Zvck1h
cmtlZFRleHQKIHsKICAgICAvLyBMZXQgVFNNIGtub3cgdGhhdCBhIGJvdHRvbSBpbnB1dCB3aW5k
b3cgd291bGQgYmUgY3JlYXRlZCBmb3IgbWFya2VkIHRleHQuCi0gICAgTlNBcnJheSAqcmVndWxh
ckF0dHJpYnV0ZXMgPSBbc3VwZXIgdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dF07Ci0gICAg
TlNNdXRhYmxlQXJyYXkgKmZsb2F0aW5nV2luZG93QXR0cmlidXRlcyA9IFtOU011dGFibGVBcnJh
eSBhcnJheVdpdGhBcnJheTpyZWd1bGFyQXR0cmlidXRlc107Ci0gICAgW2Zsb2F0aW5nV2luZG93
QXR0cmlidXRlcyBhZGRPYmplY3Q6QCJfX05TVXNlc0Zsb2F0aW5nSW5wdXRXaW5kb3ciXTsKLSAg
ICByZXR1cm4gZmxvYXRpbmdXaW5kb3dBdHRyaWJ1dGVzOworICAgIHJldHVybiBbW3N1cGVyIHZh
bGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHRdIGFycmF5QnlBZGRpbmdPYmplY3Q6QCJfX05TVXNl
c0Zsb2F0aW5nSW5wdXRXaW5kb3ciXTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVn
SW5GcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Q29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW0KaW5kZXggYjk2YmI4OWJhMGFiMmZlZDM2
NWE3ZGYwYzcxZTc2ZDUyOTliMDkzNS4uMDNjMjdjNDU1M2RjZjA4MzQxNzQ3MTJjZDczNjM5ZjAw
YzZmODNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5GcmFtZS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJ
bkZyYW1lLm1tCkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ludFBvaW50Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0xpbmtJY29uQ29sbGVjdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0xpbmtJY29uVHlwZS5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIEBp
bXBsZW1lbnRhdGlvbiBXS1dlYlByb2Nlc3NQbHVnSW5GcmFtZSB7CiAgICAgQVBJOjpPYmplY3RT
dG9yYWdlPFdlYktpdDo6V2ViRnJhbWU+IF9mcmFtZTsKQEAgLTExMSwxNiArMTEyLDE0IEBAIC0g
KF9XS0ZyYW1lSGFuZGxlICopaGFuZGxlCiAKIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gY29s
bGVjdEljb25zKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgT3B0aW9uU2V0PFdlYkNvcmU6OkxpbmtJ
Y29uVHlwZT4gaWNvblR5cGVzKQogewotICAgIGF1dG8gcmVzdWx0ID0gYWRvcHROUyhbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgaWYg
KGF1dG8qIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgaWNvbiA6IFdlYkNvcmU6OkxpbmtJY29uQ29sbGVjdG9yKCpkb2N1bWVudCkuaWNvbnNP
ZlR5cGVzKGljb25UeXBlcykpCi0gICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6KE5T
VVJMICopaWNvbi51cmxdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0KTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gQFtdOworICAgIGF1dG8g
ZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAg
ICByZXR1cm4gQFtdOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFdlYkNvcmU6OkxpbmtJY29u
Q29sbGVjdG9yKCpkb2N1bWVudCkuaWNvbnNPZlR5cGVzKGljb25UeXBlcyksIFtdIChhdXRvJiBp
Y29uKSAtPiBOU1VSTCAqIHsKKyAgICAgICAgcmV0dXJuIGljb24udXJsOworICAgIH0pOwogfQog
CiAtIChOU0FycmF5ICopYXBwbGVUb3VjaEljb25VUkxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5C
cm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRy
b2xsZXIubW0KaW5kZXggYjlhYzYxMzA0MDY1ZGI2YjY1MGViNjE0NzAyZjM3MGRjYmM5YzQ2NC4u
MmNmNGFiNWIyN2ZmZTQ0NTkxNGQxZjFmNzhiODY0YzVjNjRmNDcyZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNz
UGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJD
b250ZXh0Q29udHJvbGxlci5tbQpAQCAtNTMyLDkgKzUzMiw5IEBAIC0gKHZvaWQpX3NldEZvcm1E
ZWxlZ2F0ZTooaWQgPFdLV2ViUHJvY2Vzc1BsdWdJbkZvcm1EZWxlZ2F0ZVByaXZhdGU+KWZvcm1E
ZWxlZ2F0CiAgICAgICAgICAgICBpZiAoIVtmb3JtRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjpkaWRB
c3NvY2lhdGVGb3JtQ29udHJvbHM6KV0pCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgICAgICBhdXRvIGNvbnRyb2xzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5OmVsZW1lbnRzLnNpemUoKV0pOwotICAgICAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBlbGVtZW50IDogZWxlbWVudHMpCi0gICAgICAgICAgICAgICAgW2NvbnRyb2xzIGFk
ZE9iamVjdDp3cmFwcGVyKCpXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JD
cmVhdGUoZWxlbWVudC5nZXQoKSkpXTsKKyAgICAgICAgICAgIGF1dG8gY29udHJvbHMgPSBjcmVh
dGVOU0FycmF5KGVsZW1lbnRzLCBbXSAoYXV0byYgZWxlbWVudCkgeworICAgICAgICAgICAgICAg
IHJldHVybiB3cmFwcGVyKCpXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JD
cmVhdGUoZWxlbWVudC5nZXQoKSkpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1
cm4gW2Zvcm1EZWxlZ2F0ZSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxl
cjptX2NvbnRyb2xsZXIgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzOmNvbnRyb2xzLmdldCgpXTsK
ICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbSBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0
aW9uUmVtb3RlLm1tCmluZGV4IDFkZWYwOTQwYjFkMmRmNDdkYWE2NjU2ZDFiMjZlYmZkYjg3ZjQ4
OGUuLjc2MTUzMjBiZTNmYjE0Mjc5M2IyZWM2YWVmMmEyYzA5MTUxOTI5Y2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9y
bUNBQW5pbWF0aW9uUmVtb3RlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCkBAIC0zOCw2
ICszOCw3IEBACiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KICNpbXBv
cnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KIAogc3RhdGljIE1vbm90b25pY1RpbWUgbWVkaWFUaW1lVG9DdXJyZW50VGlt
ZShDRlRpbWVJbnRlcnZhbCB0KQpAQCAtNzEzLDggKzcxNCw3IEBAIHN0YXRpYyB2b2lkIGFkZEFu
aW1hdGlvblRvTGF5ZXIoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVy
VHJlZUhvCiAgICAgUmV0YWluUHRyPENBUHJvcGVydHlBbmltYXRpb24+IGNhQW5pbWF0aW9uOwog
ICAgIHN3aXRjaCAocHJvcGVydGllcy5hbmltYXRpb25UeXBlKSB7CiAgICAgY2FzZSBQbGF0Zm9y
bUNBQW5pbWF0aW9uOjpCYXNpYzogewotICAgICAgICBSZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlv
bj4gYmFzaWNBbmltYXRpb247Ci0gICAgICAgIGJhc2ljQW5pbWF0aW9uID0gW0NBQmFzaWNBbmlt
YXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsKKyAgICAgICAg
YXV0byBiYXNpY0FuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQ
YXRoOnByb3BlcnRpZXMua2V5UGF0aF07CiAgICAgICAgIAogICAgICAgICBpZiAocHJvcGVydGll
cy5rZXlWYWx1ZXMuc2l6ZSgpID4gMSkgewogICAgICAgICAgICAgW2Jhc2ljQW5pbWF0aW9uIHNl
dEZyb21WYWx1ZTphbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKHByb3BlcnRpZXMua2V5
VmFsdWVzWzBdKV07CkBAIC03MjgsMzkgKzcyOCwzMSBAQCBzdGF0aWMgdm9pZCBhZGRBbmltYXRp
b25Ub0xheWVyKENBTGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVI
bwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpL
ZXlmcmFtZTogewotICAgICAgICBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJh
bWVBbmltYXRpb247Ci0gICAgICAgIGtleWZyYW1lQW5pbWF0aW9uID0gW0NBS2V5ZnJhbWVBbmlt
YXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsKKyAgICAgICAg
YXV0byBrZXlmcmFtZUFuaW1hdGlvbiA9IFtDQUtleWZyYW1lQW5pbWF0aW9uIGFuaW1hdGlvbldp
dGhLZXlQYXRoOnByb3BlcnRpZXMua2V5UGF0aF07CiAKICAgICAgICAgaWYgKHByb3BlcnRpZXMu
a2V5VmFsdWVzLnNpemUoKSkgewotICAgICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiBrZXlmcmFtZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2Fw
YWNpdHk6cHJvcGVydGllcy5rZXlWYWx1ZXMuc2l6ZSgpXSk7Ci0gICAgICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIHZhbHVlIDogcHJvcGVydGllcy5rZXlWYWx1ZXMpCi0gICAgICAgICAgICAgICAg
W2tleWZyYW1lcyBhZGRPYmplY3Q6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZSh2YWx1
ZSldOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBba2V5ZnJhbWVBbmltYXRpb24gc2V0VmFs
dWVzOmtleWZyYW1lcy5nZXQoKV07CisgICAgICAgICAgICBba2V5ZnJhbWVBbmltYXRpb24gc2V0
VmFsdWVzOmNyZWF0ZU5TQXJyYXkocHJvcGVydGllcy5rZXlWYWx1ZXMsIFtdIChhdXRvJiB2YWx1
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBhbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZh
bHVlKHZhbHVlKTsKKyAgICAgICAgICAgIH0pLmdldCgpXTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChwcm9wZXJ0aWVzLmtleVRpbWVzLnNpemUoKSkgewotICAgICAgICAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiBrZXlUaW1lcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eTpwcm9wZXJ0aWVzLmtleVRpbWVzLnNpemUoKV0pOwotICAgICAg
ICAgICAgZm9yIChhdXRvIGtleVRpbWUgOiBwcm9wZXJ0aWVzLmtleVRpbWVzKQotICAgICAgICAg
ICAgICAgIFtrZXlUaW1lcyBhZGRPYmplY3Q6QChrZXlUaW1lKV07Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIFtrZXlmcmFtZUFuaW1hdGlvbiBzZXRLZXlUaW1lczprZXlUaW1lcy5nZXQoKV07
CisgICAgICAgICAgICBba2V5ZnJhbWVBbmltYXRpb24gc2V0S2V5VGltZXM6Y3JlYXRlTlNBcnJh
eShwcm9wZXJ0aWVzLmtleVRpbWVzLCBbXSAoYXV0byYgdGltZSkgeworICAgICAgICAgICAgICAg
IHJldHVybiBAKHRpbWUpOworICAgICAgICAgICAgfSkuZ2V0KCldOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKHByb3BlcnRpZXMudGltaW5nRnVuY3Rpb25zLnNpemUoKSkgewotICAgICAgICAg
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB0aW1pbmdGdW5jdGlvbnMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cHJvcGVydGllcy50aW1pbmdG
dW5jdGlvbnMuc2l6ZSgpXSk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRpbWluZ0Z1
bmN0aW9uIDogcHJvcGVydGllcy50aW1pbmdGdW5jdGlvbnMpCi0gICAgICAgICAgICAgICAgW3Rp
bWluZ0Z1bmN0aW9ucyBhZGRPYmplY3Q6dG9DQU1lZGlhVGltaW5nRnVuY3Rpb24odGltaW5nRnVu
Y3Rpb24uZ2V0KCksIHByb3BlcnRpZXMucmV2ZXJzZVRpbWluZ0Z1bmN0aW9ucyldOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBba2V5ZnJhbWVBbmltYXRpb24gc2V0VGltaW5nRnVuY3Rpb25z
OnRpbWluZ0Z1bmN0aW9ucy5nZXQoKV07CisgICAgICAgICAgICBba2V5ZnJhbWVBbmltYXRpb24g
c2V0VGltaW5nRnVuY3Rpb25zOmNyZWF0ZU5TQXJyYXkocHJvcGVydGllcy50aW1pbmdGdW5jdGlv
bnMsIFsmXSAoYXV0byYgZnVuY3Rpb24pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9DQU1l
ZGlhVGltaW5nRnVuY3Rpb24oZnVuY3Rpb24uZ2V0KCksIHByb3BlcnRpZXMucmV2ZXJzZVRpbWlu
Z0Z1bmN0aW9ucyk7CisgICAgICAgICAgICB9KS5nZXQoKV07CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGNhQW5pbWF0aW9uID0ga2V5ZnJhbWVBbmltYXRpb247CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OlNwcmluZzogewotICAgICAg
ICBSZXRhaW5QdHI8Q0FTcHJpbmdBbmltYXRpb24+IHNwcmluZ0FuaW1hdGlvbjsKLSAgICAgICAg
c3ByaW5nQW5pbWF0aW9uID0gW0NBU3ByaW5nQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRo
OnByb3BlcnRpZXMua2V5UGF0aF07CisgICAgICAgIGF1dG8gc3ByaW5nQW5pbWF0aW9uID0gW0NB
U3ByaW5nQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOnByb3BlcnRpZXMua2V5UGF0aF07
CiAgICAgICAgIAogICAgICAgICBpZiAocHJvcGVydGllcy5rZXlWYWx1ZXMuc2l6ZSgpID4gMSkg
ewogICAgICAgICAgICAgW3NwcmluZ0FuaW1hdGlvbiBzZXRGcm9tVmFsdWU6YW5pbWF0aW9uVmFs
dWVGcm9tS2V5ZnJhbWVWYWx1ZShwcm9wZXJ0aWVzLmtleVZhbHVlc1swXSldOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dLQWNjZXNzaWJpbGl0eVdl
YlBhZ2VPYmplY3RNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQppbmRleCBhMDlmZjYxMzdhOThiNDAz
YTUwNjY5OTUzODY2ZDczYzBmNjYyMTM4Li4yNjI3NWQ3YjY3YjU5YWQ5OGViZWZlYmVlYjgwMjA5
MzFkMzg5OThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5t
bQpAQCAtNDcsNiArNDcsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KICNpbXBv
cnQgPFdlYkNvcmUvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaD4KICNpbXBvcnQg
PHBhbC9zcGkvY29jb2EvTlNBY2Nlc3NpYmlsaXR5U1BJLmg+CisjaW1wb3J0IDx3dGYvY29jb2Ev
VmVjdG9yQ29jb2EuaD4KIAogbmFtZXNwYWNlIGF4ID0gV2ViQ29yZTo6QWNjZXNzaWJpbGl0eTsK
IApAQCAtOTcsMTUgKzk4LDE1IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VO
RAogI2VuZGlmCiAKICAgICBpZCBuYW1lcyA9IGF4OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJl
YWQ8UmV0YWluUHRyPGlkPj4oW1BST1RFQ1RFRF9TRUxGXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsK
LSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKm5hbWVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsK
LSAgICAgICAgaWYgKCFwcm90ZWN0ZWRTZWxmLT5tX3BhZ2UpCi0gICAgICAgICAgICByZXR1cm4g
bmFtZXM7CisgICAgICAgIGF1dG8gcGFnZSA9IHByb3RlY3RlZFNlbGYtPm1fcGFnZTsKKyAgICAg
ICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgcmV0dXJuIEBbXTsKIAotICAgICAgICBpZiAoYXV0
byogY29yZVBhZ2UgPSBwcm90ZWN0ZWRTZWxmLT5tX3BhZ2UtPmNvcmVQYWdlKCkpIHsKLSAgICAg
ICAgICAgIGZvciAoYXV0byYgbmFtZSA6IGNvcmVQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIo
KS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyh0cnVlKSkKLSAgICAgICAgICAgICAg
ICBbbmFtZXMgYWRkT2JqZWN0OihOU1N0cmluZyAqKW5hbWVdOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBuYW1lczsKKyAgICAgICAgYXV0byBjb3JlUGFnZSA9IHBhZ2UtPmNvcmVQYWdlKCk7
CisgICAgICAgIGlmICghY29yZVBhZ2UpCisgICAgICAgICAgICByZXR1cm4gQFtdOworCisgICAg
ICAgIHJldHVybiBjcmVhdGVOU0FycmF5KGNvcmVQYWdlLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIo
KS5jb3B5QWNjZXNzaWJpbGl0eUF0dHJpYnV0ZXNOYW1lcyh0cnVlKSk7CiAgICAgfSkuYXV0b3Jl
bGVhc2UoKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1t
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQppbmRl
eCBlODA3YzY3MGQyMGQ5MDQ0NWZlYmQ5NTYyMDMwZTE5ODBmYzJlNzJjLi45NDFhMTliN2E1Yjg3
NTc1MGQ5ZjFmZjUwZjFjZWU0ZGJlZDM0NWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KQEAgLTQ2MSwxNCArNDYxLDEyIEBAIHZv
aWQgV2ViUHJvY2Vzczo6cmVnaXN0ZXJXaXRoU3RhdGVEdW1wZXIoKQogICAgICAgICAgICAgICAg
IFtzdGF0ZURpY3Qgc2V0T2JqZWN0OmpzT2JqZWN0Q291bnRzLmdldCgpIGZvcktleTpAIkphdmFT
Y3JpcHQgT2JqZWN0IENvdW50cyJdOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhdXRv
IHBhZ2VMb2FkVGltZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZU1hcC52YWx1ZXMoKSkgeworICAg
ICAgICAgICAgYXV0byBwYWdlTG9hZFRpbWVzID0gY3JlYXRlTlNBcnJheShtX3BhZ2VNYXAudmFs
dWVzKCksIFtdIChhdXRvJiBwYWdlKSAtPiBpZCB7CiAgICAgICAgICAgICAgICAgaWYgKHBhZ2Ut
PnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgICAgICAgICAgTlNEYXRl
KiBkYXRlID0gW05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDpwYWdlLT5sb2Fk
Q29tbWl0VGltZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpXTsKLSAgICAgICAgICAg
ICAgICBbcGFnZUxvYWRUaW1lcyBhZGRPYmplY3Q6ZGF0ZV07Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIFtOU0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6
cGFnZS0+bG9hZENvbW1pdFRpbWUoKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKV07Cisg
ICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgLy8gQWRkaW5nIGFuIGVtcHR5IGFycmF5IHRv
IHRoZSBwcm9jZXNzIHN0YXRlIG1heSBwcm92aWRlIGFuCiAgICAgICAgICAgICAvLyBpbmRpY2F0
aW9uIG9mIHRoZSBleGlzdGFuY2Ugb2YgcHJpdmF0ZSBzZXNzaW9ucywgd2hpY2ggd2UnZCBsaWtl
CkBAIC02MjksMjAgKzYyNywyMSBAQCBzdGF0aWMgTlNVUkwgKm9yaWdpbihXZWJQYWdlJiBwYWdl
KQogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCisKIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJh
eTxOU1N0cmluZyAqPj4gYWN0aXZlUGFnZXNPcmlnaW5zKGNvbnN0IEhhc2hNYXA8UGFnZUlkZW50
aWZpZXIsIFJlZlB0cjxXZWJQYWdlPj4mIHBhZ2VNYXApCiB7Ci0gICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PE5TU3RyaW5nICo+PiBhY3RpdmVPcmlnaW5zID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBmb3IgKGF1dG8mIHBhZ2UgOiBwYWdlTWFwLnZh
bHVlcygpKSB7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocGFnZU1hcC52YWx1ZXMoKSwgW10g
KGF1dG8mIHBhZ2UpIC0+IE5TU3RyaW5nICogewogICAgICAgICBpZiAocGFnZS0+dXNlc0VwaGVt
ZXJhbFNlc3Npb24oKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJu
IG5pbDsKIAotICAgICAgICBpZiAoTlNVUkwgKm9yaWdpbkFzVVJMID0gb3JpZ2luKCpwYWdlKSkK
LSAgICAgICAgICAgIFthY3RpdmVPcmlnaW5zIGFkZE9iamVjdDpXVEY6OnVzZXJWaXNpYmxlU3Ry
aW5nKG9yaWdpbkFzVVJMKV07Ci0gICAgfQorICAgICAgICBOU1VSTCAqb3JpZ2luQXNVUkwgPSBv
cmlnaW4oKnBhZ2UpOworICAgICAgICBpZiAoIW9yaWdpbkFzVVJMKQorICAgICAgICAgICAgcmV0
dXJuIG5pbDsKIAotICAgIHJldHVybiBhY3RpdmVPcmlnaW5zOworICAgICAgICByZXR1cm4gV1RG
Ojp1c2VyVmlzaWJsZVN0cmluZyhvcmlnaW5Bc1VSTCk7CisgICAgfSk7CiB9CisKICNlbmRpZgog
CiB2b2lkIFdlYlByb2Nlc3M6OnVwZGF0ZUFjdGl2ZVBhZ2VzKGNvbnN0IFN0cmluZyYgb3ZlcnJp
ZGVEaXNwbGF5TmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KaW5kZXggNDYxNzY4ZjcwZDFiZWIyNWNiYmMwMjE0ZDRk
NWMzZDZmNjdhOTMwYS4uZmFlMzRkMTIyZDI2NjMzYTBmZDE3ZGY4ZTlmNjM4MmI2M2E0OGVhNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVJT1MubW0KQEAgLTI3LDYgKzI3LDE2IEBACiAKICNpbXBvcnQgIldlYkZyYW1lSU9TLmgi
CiAKKyNpbXBvcnQgIkRPTS5oIgorI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0
ICJET01SYW5nZS5oIgorI2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9N
VUlLaXRFeHRlbnNpb25zLmgiCisjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCisjaW1wb3J0
ICJXZWJTZWxlY3Rpb25SZWN0LmgiCisjaW1wb3J0ICJXZWJVSUtpdERlbGVnYXRlLmgiCisjaW1w
b3J0ICJXZWJWaWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViVmlzaWJsZVBvc2l0aW9uSW50ZXJu
YWwuaCIKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0VkaXRpbmcuaD4KICNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+CkBAIC00
MCw3ICs1MCw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KICNpbXBvcnQg
PFdlYkNvcmUvUG9zaXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclRleHQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyZWREb2N1bWVudE1hcmtlci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9TZWxlY3Rpb25SZWN0Lmg+CkBAIC00OSwyMCArNTgsOCBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9UZXh0RmxhZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvVmlzaWJsZVBvc2l0aW9uLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1Zpc2libGVVbml0cy5oPgotI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTS5o
PgotI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTVJhbmdlLmg+Ci0jaW1wb3J0IDxXZWJLaXRMZWdh
Y3kvRE9NVUlLaXRFeHRlbnNpb25zLmg+Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvV2ViU2VsZWN0
aW9uUmVjdC5oPgotI2ltcG9ydCA8V2ViS2l0TGVnYWN5L1dlYlZpc2libGVQb3NpdGlvbi5oPgog
I2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgotCi0jaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIK
LSNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwu
aCIKLSNpbXBvcnQgIldlYlVJS2l0RGVsZWdhdGUuaCIKLSNpbXBvcnQgIldlYlZpZXdQcml2YXRl
LmgiCi0jaW1wb3J0ICJXZWJWaXNpYmxlUG9zaXRpb24uaCIKLSNpbXBvcnQgIldlYlZpc2libGVQ
b3NpdGlvbkludGVybmFsLmgiCisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTIxNCwxMyArMjExLDEwIEBAIC0gKE5TQXJy
YXkgKilzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTooUmFuZ2UgKilyYW5nZQogICAgIAogICAg
IFZlY3RvcjxTZWxlY3Rpb25SZWN0PiByZWN0czsKICAgICByYW5nZS0+Y29sbGVjdFNlbGVjdGlv
blJlY3RzKHJlY3RzKTsKLSAgICB1bnNpZ25lZCBzaXplID0gcmVjdHMuc2l6ZSgpOwogICAgIAot
ICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2Fw
YWNpdHk6c2l6ZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewot
ICAgICAgICBTZWxlY3Rpb25SZWN0ICZjb3JlUmVjdCA9IHJlY3RzW2ldOwotICAgICAgICBXZWJT
ZWxlY3Rpb25SZWN0ICp3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVjdF07
Ci0gICAgICAgIHdlYlJlY3QucmVjdCA9IHN0YXRpY19jYXN0PENHUmVjdD4oY29yZVJlY3QucmVj
dCgpKTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShyZWN0cywgW10gKGF1dG8mIGNvcmVSZWN0
KSB7CisgICAgICAgIGF1dG8gd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNlbGVjdGlvblJl
Y3RdOworICAgICAgICB3ZWJSZWN0LnJlY3QgPSBjb3JlUmVjdC5yZWN0KCk7CiAgICAgICAgIHdl
YlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGNvcmVSZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJl
Y3Rpb246OkxUUiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogV0tXcml0aW5nRGly
ZWN0aW9uUmlnaHRUb0xlZnQ7CiAgICAgICAgIHdlYlJlY3QuaXNMaW5lQnJlYWsgPSBjb3JlUmVj
dC5pc0xpbmVCcmVhaygpOwogICAgICAgICB3ZWJSZWN0LmlzRmlyc3RPbkxpbmUgPSBjb3JlUmVj
dC5pc0ZpcnN0T25MaW5lKCk7CkBAIC0yMjksMTAgKzIyMyw4IEBAIC0gKE5TQXJyYXkgKilzZWxl
Y3Rpb25SZWN0c0ZvckNvcmVSYW5nZTooUmFuZ2UgKilyYW5nZQogICAgICAgICB3ZWJSZWN0LmNv
bnRhaW5zRW5kID0gY29yZVJlY3QuY29udGFpbnNFbmQoKTsKICAgICAgICAgd2ViUmVjdC5pc0lu
Rml4ZWRQb3NpdGlvbiA9IGNvcmVSZWN0LmlzSW5GaXhlZFBvc2l0aW9uKCk7CiAgICAgICAgIHdl
YlJlY3QuaXNIb3Jpem9udGFsID0gY29yZVJlY3QuaXNIb3Jpem9udGFsKCk7Ci0gICAgICAgIFty
ZXN1bHQgYWRkT2JqZWN0OndlYlJlY3RdOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0
OyAgICAgICAgCisgICAgICAgIHJldHVybiB3ZWJSZWN0OworICAgIH0pLmF1dG9yZWxlYXNlKCk7
CiB9CiAKIC0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0c0ZvclJhbmdlOihET01SYW5nZSAqKWRv
bVJhbmdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQppbmRleCBkOGFmNjc4ZGFmMDg4ODI4
NGFiZGRjMWNkYjEwYWRlYjE0Yjc2NzRmLi5kZjBiNTIwOTExZmUxODVjYjkzOGZmMWY3Yzk5N2Vh
ZmVhMjcwZjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KQEAgLTE4NywxMyArMTg3
LDkgQEAgc3RhdGljIFdLUXVhZCB3a1F1YWRGcm9tRmxvYXRRdWFkKGNvbnN0IEZsb2F0UXVhZCYg
aW5RdWFkKQogCiBzdGF0aWMgTlNBcnJheSAqa2l0KGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBx
dWFkcykKIHsKLSAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJy
YXlXaXRoQ2FwYWNpdHk6cXVhZHMuc2l6ZSgpXTsKLSAgICBmb3IgKGF1dG8mIHF1YWQgOiBxdWFk
cykgewotICAgICAgICBXS1F1YWRPYmplY3QgKnF1YWRPYmplY3QgPSBbW1dLUXVhZE9iamVjdCBh
bGxvY10gaW5pdFdpdGhRdWFkOndrUXVhZEZyb21GbG9hdFF1YWQocXVhZCldOwotICAgICAgICBb
YXJyYXkgYWRkT2JqZWN0OnF1YWRPYmplY3RdOwotICAgICAgICBbcXVhZE9iamVjdCByZWxlYXNl
XTsKLSAgICB9Ci0gICAgcmV0dXJuIGFycmF5OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHF1
YWRzLCBbXSAoYXV0byYgcXVhZCkgeworICAgICAgICByZXR1cm4gYWRvcHROUyhbW1dLUXVhZE9i
amVjdCBhbGxvY10gaW5pdFdpdGhRdWFkOndrUXVhZEZyb21GbG9hdFF1YWQocXVhZCldKTsKKyAg
ICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIFdLUXVhZCB6ZXJvUXVhZCgp
CkBAIC01NDIsOCArNTM4LDYgQEAgLSAodm9pZClnZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJ
bWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0czooTlNBcnJheSAqKilyZWN0cwogICAgICAgICAgICAg
KmNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAot
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0
YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0KICAgICBpZiAoISpjZ0ltYWdlKSB7CiAgICAgICAg
IGlmIChhdXRvKiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKSkgewogICAgICAgICAgICAgRmxv
YXRSZWN0IGJvdW5kaW5nQm94OwpAQCAtNTUxLDI3ICs1NDUsMTggQEAgLSAodm9pZClnZXRQcmV2
aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0czooTlNBcnJheSAq
KilyZWN0cwogICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94ID0gZG93bmNhc3Q8UmVuZGVySW1h
Z2U+KCpyZW5kZXJlcikuYWJzb2x1dGVDb250ZW50UXVhZCgpLmVuY2xvc2luZ0JvdW5kaW5nQm94
KCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYm91bmRpbmdCb3ggPSByZW5k
ZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKLQogICAgICAgICAgICAgYm91bmRpbmdC
b3guaW5mbGF0ZShtYXJnaW4pOwotCi0gICAgICAgICAgICBDR1JlY3QgY2dSZWN0ID0gbm9kZS5k
b2N1bWVudCgpLmZyYW1lKCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRS
ZWN0KGJvdW5kaW5nQm94KSk7Ci0gICAgICAgICAgICBbcmVjdEFycmF5IGFkZE9iamVjdDpbTlNW
YWx1ZSB2YWx1ZTomY2dSZWN0IHdpdGhPYmpDVHlwZTpAZW5jb2RlKENHUmVjdCldXTsKLQotICAg
ICAgICAgICAgKnJlY3RzID0gcmVjdEFycmF5LmF1dG9yZWxlYXNlKCk7CisgICAgICAgICAgICAq
cmVjdHMgPSBAW21ha2VOU0FycmF5RWxlbWVudChub2RlLmRvY3VtZW50KCkuZnJhbWUoKS0+dmll
dygpLT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdCb3gpKSldOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBGbG9hdFBvaW50IG9yaWdp
biA9IHRleHRJbmRpY2F0b3ItPnRleHRCb3VuZGluZ1JlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMo
KS5sb2NhdGlvbigpOwotICAgIGZvciAoY29uc3QgRmxvYXRSZWN0JiByZWN0IDogdGV4dEluZGlj
YXRvci0+dGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcygpKSB7Ci0gICAgICAgIENH
UmVjdCBjZ1JlY3QgPSByZWN0OwotICAgICAgICBjZ1JlY3Qub3JpZ2luLnggKz0gb3JpZ2luLngo
KTsKLSAgICAgICAgY2dSZWN0Lm9yaWdpbi55ICs9IG9yaWdpbi55KCk7Ci0gICAgICAgIGNnUmVj
dCA9IG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZW5j
bG9zaW5nSW50UmVjdChjZ1JlY3QpKTsKLSAgICAgICAgW3JlY3RBcnJheSBhZGRPYmplY3Q6W05T
VmFsdWUgdmFsdWU6JmNnUmVjdCB3aXRoT2JqQ1R5cGU6QGVuY29kZShDR1JlY3QpXV07Ci0gICAg
fQotCi0gICAgKnJlY3RzID0gcmVjdEFycmF5LmF1dG9yZWxlYXNlKCk7CisgICAgKnJlY3RzID0g
Y3JlYXRlTlNBcnJheSh0ZXh0SW5kaWNhdG9yLT50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3Jk
aW5hdGVzKCksIFsmXSAoQ0dSZWN0IHJlY3QpIHsKKyAgICAgICAgcmVjdC5vcmlnaW4ueCArPSBv
cmlnaW4ueCgpOworICAgICAgICByZWN0Lm9yaWdpbi55ICs9IG9yaWdpbi55KCk7CisgICAgICAg
IHJldHVybiBtYWtlTlNBcnJheUVsZW1lbnQobm9kZS5kb2N1bWVudCgpLmZyYW1lKCktPnZpZXco
KS0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKSk7CisgICAgfSkuYXV0
b3JlbGVhc2UoKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5tbQppbmRleCA4Yjk5NGVkMmQwMDcwNmRkOGU0
ZWQ2YjIyYjZiM2I3ZTk4NDVmNjM5Li5iMDljOGVmNWU0OGRkYTMxZGEzZjNmOGRjMjY2OTZhMDE2
OGVhMTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L1dlYkJh
Y2tGb3J3YXJkTGlzdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L1dl
YkJhY2tGb3J3YXJkTGlzdC5tbQpAQCAtNTAsNiArNTAsNyBAQAogI2ltcG9ydCA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgogI2ltcG9ydCA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIHR5cGVkZWYg
SGFzaE1hcDxCYWNrRm9yd2FyZExpc3QqLCBXZWJCYWNrRm9yd2FyZExpc3QqPiBCYWNrRm9yd2Fy
ZExpc3RNYXA7CiAKQEAgLTE1MSw0OSArMTUyLDM4IEBAIC0gKHZvaWQpcmVtb3ZlSXRlbTooV2Vi
SGlzdG9yeUl0ZW0gKilpdGVtCiAKIC8vIEZJWE1FOiBNb3ZlIGludG8gV2ViQ29yZSB0aGUgY29k
ZSB0aGF0IGRlYWxzIGRpcmVjdGx5IHdpdGggV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0LgogCi0j
ZGVmaW5lIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlFbnRyaWVzS2V5IEAiZW50cmllcyIK
LSNkZWZpbmUgV2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUNhcGFjaXR5S2V5IEAiY2FwYWNp
dHkiCi0jZGVmaW5lIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlDdXJyZW50S2V5IEAiY3Vy
cmVudCIKK2NvbnN0ZXhwciBhdXRvIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlFbnRyaWVz
S2V5ID0gQCJlbnRyaWVzIjsKK2NvbnN0ZXhwciBhdXRvIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rp
b25hcnlDYXBhY2l0eUtleSA9IEAiY2FwYWNpdHkiOworY29uc3RleHByIGF1dG8gV2ViQmFja0Zv
cndhcmRMaXN0RGljdGlvbmFyeUN1cnJlbnRLZXkgPSBAImN1cnJlbnQiOwogCiAtIChOU0RpY3Rp
b25hcnkgKilkaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24KIHsKLSAgICBCYWNrRm9yd2FyZExpc3Qg
KmNvcmVCRkxpc3QgPSBjb3JlKHNlbGYpOwotCi0gICAgYXV0byYgaGlzdG9yeUl0ZW1zID0gY29y
ZUJGTGlzdC0+ZW50cmllcygpOwotICAgIHVuc2lnbmVkIHNpemUgPSBoaXN0b3J5SXRlbXMuc2l6
ZSgpOwotICAgIE5TTXV0YWJsZUFycmF5ICplbnRyaWVzQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnNpemVdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCi0gICAgICAgIFtlbnRyaWVzQXJyYXkgYWRkT2JqZWN0OltraXQoY29u
c3RfY2FzdDxXZWJDb3JlOjpIaXN0b3J5SXRlbSo+KGhpc3RvcnlJdGVtc1tpXS5wdHIoKSkpIGRp
Y3Rpb25hcnlSZXByZXNlbnRhdGlvbkluY2x1ZGluZ0NoaWxkcmVuOk5PXV07Ci0KLSAgICBOU0Rp
Y3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBAewotICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3REaWN0
aW9uYXJ5RW50cmllc0tleTogZW50cmllc0FycmF5LAotICAgICAgICBXZWJCYWNrRm9yd2FyZExp
c3REaWN0aW9uYXJ5Q3VycmVudEtleTogQChjb3JlQkZMaXN0LT5jdXJyZW50KCkpLAotICAgICAg
ICBXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5Q2FwYWNpdHlLZXk6IEAoY29yZUJGTGlzdC0+
Y2FwYWNpdHkoKSksCisgICAgYXV0byYgbGlzdCA9ICpjb3JlKHNlbGYpOworICAgIGF1dG8gZW50
cmllcyA9IGNyZWF0ZU5TQXJyYXkobGlzdC5lbnRyaWVzKCksIFtdIChhdXRvJiBpdGVtKSB7Cisg
ICAgICAgIHJldHVybiBba2l0KGNvbnN0X2Nhc3Q8V2ViQ29yZTo6SGlzdG9yeUl0ZW0qPihpdGVt
LnB0cigpKSkgZGljdGlvbmFyeVJlcHJlc2VudGF0aW9uSW5jbHVkaW5nQ2hpbGRyZW46Tk9dOwor
ICAgIH0pOworICAgIHJldHVybiBAeworICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9u
YXJ5RW50cmllc0tleTogZW50cmllcy5nZXQoKSwKKyAgICAgICAgV2ViQmFja0ZvcndhcmRMaXN0
RGljdGlvbmFyeUN1cnJlbnRLZXk6IEAobGlzdC5jdXJyZW50KCkpLAorICAgICAgICBXZWJCYWNr
Rm9yd2FyZExpc3REaWN0aW9uYXJ5Q2FwYWNpdHlLZXk6IEAobGlzdC5jYXBhY2l0eSgpKSwKICAg
ICB9OwotCi0gICAgW2VudHJpZXNBcnJheSByZWxlYXNlXTsKLQotICAgIHJldHVybiBkaWN0aW9u
YXJ5OwogfQogCiAtICh2b2lkKXNldFRvTWF0Y2hEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb246KE5T
RGljdGlvbmFyeSAqKWRpY3Rpb25hcnkKIHsKLSAgICBCYWNrRm9yd2FyZExpc3QgKmNvcmVCRkxp
c3QgPSBjb3JlKHNlbGYpOwotICAgIAotICAgIGNvcmVCRkxpc3QtPnNldENhcGFjaXR5KFtbZGlj
dGlvbmFyeSBvYmplY3RGb3JLZXk6V2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUNhcGFjaXR5
S2V5XSBpbnRWYWx1ZV0pOwotICAgIAotICAgIGZvciAoTlNEaWN0aW9uYXJ5ICppdGVtRGljdGlv
bmFyeSBpbiBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6V2ViQmFja0ZvcndhcmRMaXN0RGljdGlv
bmFyeUVudHJpZXNLZXldKSB7Ci0gICAgICAgIFdlYkhpc3RvcnlJdGVtICppdGVtID0gW1tXZWJI
aXN0b3J5SXRlbSBhbGxvY10gaW5pdEZyb21EaWN0aW9uYXJ5UmVwcmVzZW50YXRpb246aXRlbURp
Y3Rpb25hcnldOwotICAgICAgICBjb3JlQkZMaXN0LT5hZGRJdGVtKCpjb3JlKGl0ZW0pKTsKLSAg
ICAgICAgW2l0ZW0gcmVsZWFzZV07Ci0gICAgfQorICAgIGF1dG8mIGxpc3QgPSAqY29yZShzZWxm
KTsKKworICAgIGxpc3Quc2V0Q2FwYWNpdHkoW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXZWJC
YWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5Q2FwYWNpdHlLZXldIHVuc2lnbmVkSW50VmFsdWVdKTsK
KyAgICBmb3IgKE5TRGljdGlvbmFyeSAqaXRlbURpY3Rpb25hcnkgaW4gW2RpY3Rpb25hcnkgb2Jq
ZWN0Rm9yS2V5OldlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlFbnRyaWVzS2V5XSkKKyAgICAg
ICAgbGlzdC5hZGRJdGVtKCpjb3JlKGFkb3B0TlMoW1tXZWJIaXN0b3J5SXRlbSBhbGxvY10gaW5p
dEZyb21EaWN0aW9uYXJ5UmVwcmVzZW50YXRpb246aXRlbURpY3Rpb25hcnldKS5nZXQoKSkpOwog
CiAgICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpX
ZWJCYWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5Q3VycmVudEtleV0gdW5zaWduZWRJbnRWYWx1ZV07
Ci0gICAgc2l6ZV90IGxpc3RTaXplID0gY29yZUJGTGlzdC0+ZW50cmllcygpLnNpemUoKTsKKyAg
ICBzaXplX3QgbGlzdFNpemUgPSBsaXN0LmVudHJpZXMoKS5zaXplKCk7CiAgICAgaWYgKGN1cnJl
bnRJbmRleCA+PSBsaXN0U2l6ZSkKICAgICAgICAgY3VycmVudEluZGV4ID0gbGlzdFNpemUgLSAx
OwotICAgIGNvcmVCRkxpc3QtPnNldEN1cnJlbnQoY3VycmVudEluZGV4KTsKKyAgICBsaXN0LnNl
dEN1cnJlbnQoY3VycmVudEluZGV4KTsKIH0KKwogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAKIC0gKEJPT0wpY29udGFpbnNJdGVtOihXZWJIaXN0b3J5SXRlbSAqKWl0ZW0KQEAgLTIz
NSwyMiArMjI1LDExIEBAIC0gKFdlYkhpc3RvcnlJdGVtICopZm9yd2FyZEl0ZW0KICAgICByZXR1
cm4gW1traXQoY29yZShzZWxmKS0+Zm9yd2FyZEl0ZW0oKS5nZXQoKSkgcmV0YWluXSBhdXRvcmVs
ZWFzZV07CiB9CiAKLXN0YXRpYyBOU0FycmF5KiB2ZWN0b3JUb05TQXJyYXkoVmVjdG9yPFJlZjxX
ZWJDb3JlOjpIaXN0b3J5SXRlbT4+JiBsaXN0KQotewotICAgIHVuc2lnbmVkIHNpemUgPSBsaXN0
LnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW1tbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2l6ZV0gYXV0b3JlbGVhc2VdOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0Omtp
dChsaXN0W2ldLnB0cigpKV07Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgYm9v
bCBidW1wZXJDYXJCYWNrRm9yd2FyZEhhY2tOZWVkZWQoKSAKK3N0YXRpYyBib29sIGJ1bXBlckNh
ckJhY2tGb3J3YXJkSGFja05lZWRlZCgpCiB7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgc3RhdGljIGJvb2wgaGFja05lZWRlZCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRs
ZUlkZW50aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5mcmVldmVyc2UuYnVtcGVyY2FyIl0g
JiYgCi0gICAgICAgICFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05f
V0lUSE9VVF9CVU1QRVJDQVJfQkFDS19GT1JXQVJEX1FVSVJLKTsKLQorICAgIHN0YXRpYyBib29s
IGhhY2tOZWVkZWQgPSBbW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSBp
c0VxdWFsVG9TdHJpbmc6QCJjb20uZnJlZXZlcnNlLmJ1bXBlcmNhciJdCisgICAgICAgICYmICFX
ZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9VVF9CVU1QRVJD
QVJfQkFDS19GT1JXQVJEX1FVSVJLKTsKICAgICByZXR1cm4gaGFja05lZWRlZDsKICNlbHNlCiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMjYxLDMwICsyNDAsMjggQEAgLSAoTlNBcnJheSAqKWJhY2tM
aXN0V2l0aExpbWl0OihpbnQpbGltaXQKIHsKICAgICBWZWN0b3I8UmVmPFdlYkNvcmU6Okhpc3Rv
cnlJdGVtPj4gbGlzdDsKICAgICBjb3JlKHNlbGYpLT5iYWNrTGlzdFdpdGhMaW1pdChsaW1pdCwg
bGlzdCk7Ci0gICAgTlNBcnJheSAqcmVzdWx0ID0gdmVjdG9yVG9OU0FycmF5KGxpc3QpOwotICAg
IAorICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTlNBcnJheShsaXN0LCBbXSAoYXV0byYgaXRlbSkg
eworICAgICAgICByZXR1cm4ga2l0KGl0ZW0ucHRyKCkpOworICAgIH0pOwogICAgIGlmIChidW1w
ZXJDYXJCYWNrRm9yd2FyZEhhY2tOZWVkZWQoKSkgewotICAgICAgICBzdGF0aWMgTlNBcnJheSAq
bGFzdEJhY2tMaXN0QXJyYXkgPSBuaWw7Ci0gICAgICAgIFtsYXN0QmFja0xpc3RBcnJheSByZWxl
YXNlXTsKLSAgICAgICAgbGFzdEJhY2tMaXN0QXJyYXkgPSBbcmVzdWx0IHJldGFpbl07CisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8TlNBcnJheT4+IGxhc3RCYWNrTGlz
dEFycmF5OworICAgICAgICBsYXN0QmFja0xpc3RBcnJheS5nZXQoKSA9IHJlc3VsdDsKICAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNl
KCk7CiB9CiAKIC0gKE5TQXJyYXkgKilmb3J3YXJkTGlzdFdpdGhMaW1pdDooaW50KWxpbWl0CiB7
CiAgICAgVmVjdG9yPFJlZjxXZWJDb3JlOjpIaXN0b3J5SXRlbT4+IGxpc3Q7CiAgICAgY29yZShz
ZWxmKS0+Zm9yd2FyZExpc3RXaXRoTGltaXQobGltaXQsIGxpc3QpOwotICAgIE5TQXJyYXkgKnJl
c3VsdCA9IHZlY3RvclRvTlNBcnJheShsaXN0KTsKLSAgICAKKyAgICBhdXRvIHJlc3VsdCA9IGNy
ZWF0ZU5TQXJyYXkobGlzdCwgW10gKGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGtpdChp
dGVtLnB0cigpKTsKKyAgICB9KTsKICAgICBpZiAoYnVtcGVyQ2FyQmFja0ZvcndhcmRIYWNrTmVl
ZGVkKCkpIHsKLSAgICAgICAgc3RhdGljIE5TQXJyYXkgKmxhc3RGb3J3YXJkTGlzdEFycmF5ID0g
bmlsOwotICAgICAgICBbbGFzdEZvcndhcmRMaXN0QXJyYXkgcmVsZWFzZV07Ci0gICAgICAgIGxh
c3RGb3J3YXJkTGlzdEFycmF5ID0gW3Jlc3VsdCByZXRhaW5dOworICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPE5TQXJyYXk+PiBsYXN0Rm9yd2FyZExpc3RBcnJheTsKKyAg
ICAgICAgbGFzdEZvcndhcmRMaXN0QXJyYXkuZ2V0KCkgPSByZXN1bHQ7CiAgICAgfQotICAgIAot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdC5hdXRvcmVsZWFzZSgpOwogfQog
CiAtIChpbnQpY2FwYWNpdHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hp
c3RvcnkvV2ViSGlzdG9yeUl0ZW0ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5
L1dlYkhpc3RvcnlJdGVtLm1tCmluZGV4IGRmYWNiMzdkMTA5Mzg1Y2RhNjI1NzFiM2QwM2YzNWI5
Yjk0ZTY1MjUuLjMxNTU5MTBiZTEzNDUyMjQzYTUxNjJhMjFlOTEyNjIwNzhlYmNhNTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViSGlzdG9yeUl0ZW0ubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbS5tbQpA
QCAtMjU4LDEwICsyNTgsOCBAQCAtIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCiBIaXN0b3J5SXRl
bSogY29yZShXZWJIaXN0b3J5SXRlbSAqaXRlbSkKIHsKICAgICBpZiAoIWl0ZW0pCi0gICAgICAg
IHJldHVybiAwOwotICAgIAorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBBU1NFUlQoaGlz
dG9yeUl0ZW1XcmFwcGVycygpLmdldChjb3JlKGl0ZW0tPl9wcml2YXRlKSkgPT0gaXRlbSk7Ci0K
ICAgICByZXR1cm4gY29yZShpdGVtLT5fcHJpdmF0ZSk7CiB9CiAKQEAgLTI2OSwxMSArMjY3LDgg
QEAgV2ViSGlzdG9yeUl0ZW0gKmtpdChIaXN0b3J5SXRlbSogaXRlbSkKIHsKICAgICBpZiAoIWl0
ZW0pCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAotICAgIFdlYkhpc3RvcnlJdGVtICpr
aXRJdGVtID0gaGlzdG9yeUl0ZW1XcmFwcGVycygpLmdldChpdGVtKTsKLSAgICBpZiAoa2l0SXRl
bSkKKyAgICBpZiAoYXV0byBraXRJdGVtID0gaGlzdG9yeUl0ZW1XcmFwcGVycygpLmdldChpdGVt
KSkKICAgICAgICAgcmV0dXJuIGtpdEl0ZW07Ci0gICAgCiAgICAgcmV0dXJuIFtbW1dlYkhpc3Rv
cnlJdGVtIGFsbG9jXSBpbml0V2l0aFdlYkNvcmVIaXN0b3J5SXRlbToqaXRlbV0gYXV0b3JlbGVh
c2VdOwogfQogCkBAIC0yODUsOSArMjgwLDcgQEAgKyAoV2ViSGlzdG9yeUl0ZW0gKillbnRyeVdp
dGhVUkw6KE5TVVJMICopVVJMCiAtIChpZClpbml0V2l0aFVSTFN0cmluZzooTlNTdHJpbmcgKilV
UkxTdHJpbmcgdGl0bGU6KE5TU3RyaW5nICopdGl0bGUgZGlzcGxheVRpdGxlOihOU1N0cmluZyAq
KWRpc3BsYXlUaXRsZSBsYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDooTlNUaW1lSW50ZXJ2YWwpdGlt
ZQogewogICAgIFdlYkhpc3RvcnlJdGVtICppdGVtID0gW3NlbGYgaW5pdFdpdGhXZWJDb3JlSGlz
dG9yeUl0ZW06SGlzdG9yeUl0ZW06OmNyZWF0ZShVUkxTdHJpbmcsIHRpdGxlLCBkaXNwbGF5VGl0
bGUpXTsKLQogICAgIGl0ZW0tPl9wcml2YXRlLT5fbGFzdFZpc2l0ZWRUaW1lID0gdGltZTsKLQog
ICAgIHJldHVybiBpdGVtOwogfQogCkBAIC0zMDAsNyArMjkzLDcgQEAgLSAoaWQpaW5pdFdpdGhX
ZWJDb3JlSGlzdG9yeUl0ZW06KFJlZjxIaXN0b3J5SXRlbT4mJilpdGVtCiAgICAgLy8gTm90ZTog
V2UgYWxzbyBkbyB0aGlzIGluIFtXZWJGcmFtZVZpZXcgaW5pdFdpdGhGcmFtZTpdIHdoZXJlIHdl
IGRvCiAgICAgLy8gb3RoZXIgImluaXQgYmVmb3JlIFdlYktpdCBpcyB1c2VkIiB0eXBlIHRoaW5n
cwogICAgIFdlYkNvcmU6Om5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCA9IFdLTm90aWZ5SGlzdG9y
eUl0ZW1DaGFuZ2VkOwotICAgIAorCiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTQ4MCwxNyArNDczLDEzIEBAIC0gKHZvaWQpc2V0UlNT
RmVlZFJlZmVycmVyOihOU1N0cmluZyAqKXJlZmVycmVyCiAKIC0gKE5TQXJyYXkgKiljaGlsZHJl
bgogewotICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gY29yZShfcHJpdmF0ZSktPmNoaWxkcmVu
KCk7Ci0gICAgaWYgKCFjaGlsZHJlbi5zaXplKCkpCisgICAgYXV0byYgY2hpbGRyZW4gPSBjb3Jl
KF9wcml2YXRlKS0+Y2hpbGRyZW4oKTsKKyAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gbmlsOwogCi0gICAgdW5zaWduZWQgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsK
LSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW1tbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6c2l6ZV0gYXV0b3JlbGVhc2VdOwotICAgIAotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmtpdChj
b25zdF9jYXN0PEhpc3RvcnlJdGVtKj4oY2hpbGRyZW5baV0ucHRyKCkpKV07Ci0gICAgCi0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShjaGlsZHJlbiwgW10gKGF1
dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGtpdChjb25zdF9jYXN0PEhpc3RvcnlJdGVtKj4o
aXRlbS5wdHIoKSkpOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TVVJMICopVVJM
CkBAIC01MTQsMTYgKzUwMywxMSBAQCAtIChCT09MKWxhc3RWaXNpdFdhc0ZhaWx1cmUKIAogLSAo
TlNBcnJheSAqKV9yZWRpcmVjdFVSTHMKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiogcmVkaXJlY3RV
UkxzID0gX3ByaXZhdGUtPl9yZWRpcmVjdFVSTHMuZ2V0KCk7CisgICAgYXV0byYgcmVkaXJlY3RV
UkxzID0gX3ByaXZhdGUtPl9yZWRpcmVjdFVSTHM7CiAgICAgaWYgKCFyZWRpcmVjdFVSTHMpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBzaXplX3Qgc2l6ZSA9IHJlZGlyZWN0VVJMcy0+c2l6
ZSgpOwotICAgIEFTU0VSVChzaXplKTsKLSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzaXplXTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6KE5T
U3RyaW5nKilyZWRpcmVjdFVSTHMtPmF0KGkpXTsKLSAgICByZXR1cm4gW3Jlc3VsdCBhdXRvcmVs
ZWFzZV07CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoKnJlZGlyZWN0VVJMcykuYXV0b3JlbGVh
c2UoKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQppbmRleCA0YzRmZWM3OGYzYWI5
NWExZGMwNzRhZTdhNDhmOTkwZjJjMTUzNzYwLi5kNTQxYzRjMDRmMmQ3NWQwNmJlZTA4MGViY2Zl
NjZiMGE0NWZiZWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dl
YkNvcmVTdGF0aXN0aWNzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2Vi
Q29yZVN0YXRpc3RpY3MubW0KQEAgLTgwLDM0ICs4MCwyNyBAQCArIChzaXplX3QpamF2YVNjcmlw
dFByb3RlY3RlZEdsb2JhbE9iamVjdHNDb3VudAogICAgIHJldHVybiBjb21tb25WTSgpLmhlYXAu
cHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKTsKIH0KIAorc3RhdGljIFJldGFpblB0cjxOU0Nv
dW50ZWRTZXQ+IGNyZWF0ZU5TQ291bnRlZFNldChjb25zdCBIYXNoQ291bnRlZFNldDxjb25zdCBj
aGFyKj4mIHNldCkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0TlMoW1tOU0NvdW50ZWRTZXQg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2V0LnNpemUoKV0pOworICAgIGZvciAoYXV0byYgZW50
cnkgOiBzZXQpIHsKKyAgICAgICAgYXV0byBrZXkgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhT
dHJpbmc6ZW50cnkua2V5XTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJ5
LnZhbHVlOyArK2kpCisgICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDprZXldOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCiArIChOU0NvdW50ZWRTZXQgKilqYXZhU2NyaXB0UHJv
dGVjdGVkT2JqZWN0VHlwZUNvdW50cwogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKGNvbW1vblZN
KCkpOwotICAgIAotICAgIE5TQ291bnRlZFNldCAqcmVzdWx0ID0gW05TQ291bnRlZFNldCBzZXRd
OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVDb3VudFNldD4gY291bnRzKGNvbW1vblZNKCku
aGVhcC5wcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwotICAgIEhhc2hDb3VudGVkU2V0PGNv
bnN0IGNoYXIqPjo6aXRlcmF0b3IgZW5kID0gY291bnRzLT5lbmQoKTsKLSAgICBmb3IgKEhhc2hD
b3VudGVkU2V0PGNvbnN0IGNoYXIqPjo6aXRlcmF0b3IgaXQgPSBjb3VudHMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LT52YWx1
ZTsgKytpKQotICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TU3RyaW5nIHN0cmluZ1dp
dGhVVEY4U3RyaW5nOml0LT5rZXldXTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBjcmVhdGVOU0NvdW50ZWRTZXQoKmNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRPYmplY3RU
eXBlQ291bnRzKCkpLmF1dG9yZWxlYXNlKCk7CiB9CiAKICsgKE5TQ291bnRlZFNldCAqKWphdmFT
Y3JpcHRPYmplY3RUeXBlQ291bnRzCiB7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0o
KSk7Ci0gICAgCi0gICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBbTlNDb3VudGVkU2V0IHNldF07
Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBjb3VudHMoY29tbW9uVk0oKS5o
ZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7Ci0gICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+
OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwotICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8
Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnZhbHVlOyArK2kpCi0g
ICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJp
bmc6aXQtPmtleV1dOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNyZWF0
ZU5TQ291bnRlZFNldCgqY29tbW9uVk0oKS5oZWFwLm9iamVjdFR5cGVDb3VudHMoKSkuYXV0b3Jl
bGVhc2UoKTsKIH0KIAogKyAodm9pZClnYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYk5TUGFzdGVib2FyZEV4
dHJhcy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNQYXN0ZWJvYXJkRXh0
cmFzLm1tCmluZGV4IGUxYzVlZWIzMjgzZjA2NmQ4MTJjY2IwNTZjNDcwN2YzNTJiMDg3N2QuLmI4
MzYzNjZmMDNmZjYwZGE5ODQxMWQxMDk0YTEwMzg5N2EyMzE4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tCkBAIC0y
OTgsOSArMjk4LDcgQEAgLSAoaWQpX3dlYl9kZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2VGb3JFbGVt
ZW50OihET01FbGVtZW50ICopZWxlbWVudAogICAgICAgICAgICAgZXh0ZW5zaW9uID0gVVJMLnBh
dGhFeHRlbnNpb247CiAgICAgICAgICAgICBbdHlwZXMgYWRkT2JqZWN0c0Zyb21BcnJheTpbTlNQ
YXN0ZWJvYXJkIF93ZWJfZHJhZ1R5cGVzRm9yVVJMXV07CiAgICAgICAgICAgICBbc2VsZiBkZWNs
YXJlVHlwZXM6dHlwZXMuZ2V0KCkgb3duZXI6c291cmNlXTsKLSAgICAgICAgICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gcGF0aHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdKTsKLSAgICAgICAgICAgIFtwYXRocy5nZXQoKSBhZGRPYmplY3Q6dGl0bGVdOwotICAg
ICAgICAgICAgW3NlbGYgc2V0UHJvcGVydHlMaXN0OnBhdGhzLmdldCgpIGZvclR5cGU6bGVnYWN5
RmlsZW5hbWVzUGFzdGVib2FyZFR5cGUoKV07CisgICAgICAgICAgICBbc2VsZiBzZXRQcm9wZXJ0
eUxpc3Q6QFt0aXRsZV0gZm9yVHlwZTpsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgpXTsK
ICAgICAgICAgfQogI2VuZGlmCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbQppbmRleCBlNzI3NWM3NGRkZDc2NzFi
NDUyY2I3ZDdkZGQzMWEzZWIzNDQzYmYzLi5jZDU1MGFmNTE1Yzc4NjQxM2QwNDJlOTFmY2NmYTI0
Yzc4ZmVlZDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dl
YkRhdGFiYXNlTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdl
L1dlYkRhdGFiYXNlTWFuYWdlci5tbQpAQCAtOTIsMTQgKzkyLDkgQEAgLSAoaWQpaW5pdAogCiAt
IChOU0FycmF5ICopb3JpZ2lucwogewotICAgIGF1dG8gY29yZU9yaWdpbnMgPSBEYXRhYmFzZVRy
YWNrZXI6OnNpbmdsZXRvbigpLm9yaWdpbnMoKTsKLSAgICBOU011dGFibGVBcnJheSAqd2ViT3Jp
Z2lucyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29yZU9yaWdp
bnMuc2l6ZSgpXTsKLSAgICBmb3IgKGF1dG8mIGNvcmVPcmlnaW4gOiBjb3JlT3JpZ2lucykgewot
ICAgICAgICBXZWJTZWN1cml0eU9yaWdpbiAqd2ViT3JpZ2luID0gW1tXZWJTZWN1cml0eU9yaWdp
biBhbGxvY10gX2luaXRXaXRoV2ViQ29yZVNlY3VyaXR5T3JpZ2luOmNvcmVPcmlnaW4uc2VjdXJp
dHlPcmlnaW4oKS5wdHIoKV07Ci0gICAgICAgIFt3ZWJPcmlnaW5zIGFkZE9iamVjdDp3ZWJPcmln
aW5dOwotICAgICAgICBbd2ViT3JpZ2luIHJlbGVhc2VdOwotICAgIH0KLSAgICByZXR1cm4gW3dl
Yk9yaWdpbnMgYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KERhdGFiYXNl
VHJhY2tlcjo6c2luZ2xldG9uKCkub3JpZ2lucygpLCBbXSAoYXV0byYgb3JpZ2luKSB7CisgICAg
ICAgIHJldHVybiBhZG9wdE5TKFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdl
YkNvcmVTZWN1cml0eU9yaWdpbjpvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKS5wdHIoKV0pOworICAg
IH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TQXJyYXkgKilkYXRhYmFzZXNXaXRoT3JpZ2lu
OihXZWJTZWN1cml0eU9yaWdpbiAqKW9yaWdpbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0KaW5kZXggNTNjYzJiMTQ1NjI4ZDZm
MzNmNjlkMzgxNTk3MGM4NTY1NTFlMzQ5Yi4uYmJmZmRjNDU0ODA3MDhiZTk5MjE3ZDhkMDQwMjBh
OWE4YmMyNzM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9X
ZWJTdG9yYWdlTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdl
L1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L1BhZ2VHcm91cC5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2ltcG9y
dCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0
b3JDb2NvYS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTksMTcgKzYwLDkg
QEAgLSAoaWQpaW5pdAogCiAtIChOU0FycmF5ICopb3JpZ2lucwogewotICAgIGF1dG8gY29yZU9y
aWdpbnMgPSBXZWJLaXQ6OlN0b3JhZ2VUcmFja2VyOjp0cmFja2VyKCkub3JpZ2lucygpOwotCi0g
ICAgTlNNdXRhYmxlQXJyYXkgKndlYk9yaWdpbnMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5OmNvcmVPcmlnaW5zLnNpemUoKV07Ci0KLSAgICBmb3IgKGF1dG8mIG9y
aWdpbiA6IGNvcmVPcmlnaW5zKSB7Ci0gICAgICAgIFdlYlNlY3VyaXR5T3JpZ2luICp3ZWJPcmln
aW4gPSBbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlP
cmlnaW46b3JpZ2luLnNlY3VyaXR5T3JpZ2luKCkucHRyKCldOwotICAgICAgICBbd2ViT3JpZ2lu
cyBhZGRPYmplY3Q6d2ViT3JpZ2luXTsKLSAgICAgICAgW3dlYk9yaWdpbiByZWxlYXNlXTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gW3dlYk9yaWdpbnMgYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBj
cmVhdGVOU0FycmF5KFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIoKS5vcmlnaW5zKCks
IFtdIChhdXRvJiBvcmlnaW4pIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXZWJTZWN1cml0
eU9yaWdpbiBhbGxvY10gX2luaXRXaXRoV2ViQ29yZVNlY3VyaXR5T3JpZ2luOm9yaWdpbi5zZWN1
cml0eU9yaWdpbigpLnB0cigpXSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAodm9p
ZClkZWxldGVBbGxPcmlnaW5zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlLm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQXBwbGljYXRpb25DYWNoZS5tbQppbmRleCBhMjI3ODFh
ZWZhM2RkOGU2NTk5Zjk5MDQwN2JiZmZiNWJkNjhjZTFmLi41ODE0MmY0YTdiOTYxNWJhNzU4NWJk
ZWVhMzdiMTY2MzcxM2UyM2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUubW0KQEAgLTMxLDYg
KzMxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KICNp
bXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICNpbXBvcnQgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CkBA
IC0xMjEsMTYgKzEyMiw5IEBAICsgKHZvaWQpZGVsZXRlQ2FjaGVGb3JPcmlnaW46KFdlYlNlY3Vy
aXR5T3JpZ2luICopb3JpZ2luCiAKICsgKE5TQXJyYXkgKilvcmlnaW5zV2l0aENhY2hlCiB7Ci0g
ICAgYXV0byBjb3JlT3JpZ2lucyA9IHdlYkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCkub3JpZ2lu
c1dpdGhDYWNoZSgpOwotICAgIAotICAgIE5TTXV0YWJsZUFycmF5ICp3ZWJPcmlnaW5zID0gW1tb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29yZU9yaWdpbnMuc2l6ZSgp
XSBhdXRvcmVsZWFzZV07Ci0gICAgCi0gICAgZm9yIChhdXRvJiBjb3JlT3JpZ2luIDogY29yZU9y
aWdpbnMpIHsKLSAgICAgICAgYXV0byB3ZWJPcmlnaW4gPSBhZG9wdE5TKFtbV2ViU2VjdXJpdHlP
cmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpjb3JlT3JpZ2luLnB0
cigpXSk7Ci0gICAgICAgIFt3ZWJPcmlnaW5zIGFkZE9iamVjdDp3ZWJPcmlnaW4uZ2V0KCldOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gd2ViT3JpZ2luczsKKyAgICByZXR1cm4gY3JlYXRlTlNB
cnJheSh3ZWJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZSgpLm9yaWdpbnNXaXRoQ2FjaGUoKSwgW10g
KGF1dG8mIG9yaWdpbikgeworICAgICAgICByZXR1cm4gYWRvcHROUyhbW1dlYlNlY3VyaXR5T3Jp
Z2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46b3JpZ2luLnB0cigpXSk7
CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCmluZGV4
IDhhNzUzYzU5MDE3MjJhY2FjYjRjMzA1MGEzMWUxYmY3MDhjYjU0ZWEuLjJmYzQ1MjdjNjljNTA2
NDQ3MjA2OGJiYzY1YmM0MmUyY2ViODY0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KQEAgLTEwMzks
MTMgKzEwMzksMTEgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50
OjpjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3IHN0cmkKIAogdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJh
ZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0g
ICAgTlNNdXRhYmxlQXJyYXkgKmNvcnJlY3Rpb25zID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsK
LSAgICBmb3IgKGF1dG8mIGd1ZXNzIDogZ3JhbW1hckRldGFpbC5ndWVzc2VzKQotICAgICAgICBb
Y29ycmVjdGlvbnMgYWRkT2JqZWN0Omd1ZXNzXTsKLSAgICBOU0RpY3Rpb25hcnkgKmRpY3Rpb25h
cnkgPSBAewotICAgICAgICBOU0dyYW1tYXJSYW5nZSA6IFtOU1ZhbHVlIHZhbHVlV2l0aFJhbmdl
OmdyYW1tYXJEZXRhaWwucmFuZ2VdLAotICAgICAgICBOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24g
OiBncmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiwKLSAgICAgICAgTlNHcmFtbWFyQ29ycmVj
dGlvbnMgOiBjb3JyZWN0aW9ucywKKyAgICBhdXRvIGNvcnJlY3Rpb25zID0gY3JlYXRlTlNBcnJh
eShncmFtbWFyRGV0YWlsLmd1ZXNzZXMpOworICAgIGF1dG8gZGljdGlvbmFyeSA9IEB7CisgICAg
ICAgIE5TR3JhbW1hclJhbmdlOiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpncmFtbWFyRGV0YWls
LnJhbmdlXSwKKyAgICAgICAgTlNHcmFtbWFyVXNlckRlc2NyaXB0aW9uOiBncmFtbWFyRGV0YWls
LnVzZXJEZXNjcmlwdGlvbiwKKyAgICAgICAgTlNHcmFtbWFyQ29ycmVjdGlvbnM6IGNvcnJlY3Rp
b25zLmdldCgpLAogICAgIH07CiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNr
ZXJdIHVwZGF0ZVNwZWxsaW5nUGFuZWxXaXRoR3JhbW1hclN0cmluZzpiYWRHcmFtbWFyUGhyYXNl
IGRldGFpbDpkaWN0aW9uYXJ5XTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQppbmRl
eCA2N2RhZTZhN2I3ZmNmZTE5NDc0M2RhOTVjMzZkMDg0M2JjZmI1N2U2Li44MjFhNmZkNGJkNGNk
Mzk4NGMzZDMyODMwYzAwZjQxNTE1MGQ4ZTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50
Lm1tCkBAIC0zNiw2ICszNiw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL05vdGlmaWNhdGlvblBlcm1p
c3Npb25DYWxsYmFjay5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JpcHRFeGVjdXRpb25Db250ZXh0
Lmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL2Nv
Y29hL1ZlY3RvckNvY29hLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC04OCwx
NyArODksMTQgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25DbGllbnQ6OmNsZWFyTm90aWZpY2F0aW9u
cyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIGlmIChpdCA9PSBtX25vdGlm
aWNhdGlvbkNvbnRleHRNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBWZWN0
b3I8UmV0YWluUHRyPFdlYk5vdGlmaWNhdGlvbj4+JiB3ZWJOb3RpZmljYXRpb25zID0gaXQtPnZh
bHVlOwotICAgIE5TTXV0YWJsZUFycmF5ICpuc0lEcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07
Ci0gICAgc2l6ZV90IGNvdW50ID0gd2ViTm90aWZpY2F0aW9ucy5zaXplKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIFdlYk5vdGlmaWNhdGlvbiAq
d2ViTm90aWZpY2F0aW9uID0gd2ViTm90aWZpY2F0aW9uc1tpXS5nZXQoKTsKLSAgICAgICAgW25z
SURzIGFkZE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkTG9uZ0xvbmc6W3dlYk5v
dGlmaWNhdGlvbiBub3RpZmljYXRpb25JRF1dXTsKLSAgICAgICAgY29yZSh3ZWJOb3RpZmljYXRp
b24pLT5maW5hbGl6ZSgpOwotICAgICAgICBtX25vdGlmaWNhdGlvbk1hcC5yZW1vdmUoY29yZSh3
ZWJOb3RpZmljYXRpb24pKTsKLSAgICB9Ci0KLSAgICBbW21fd2ViVmlldyBfbm90aWZpY2F0aW9u
UHJvdmlkZXJdIGNsZWFyTm90aWZpY2F0aW9uczpuc0lEc107CisgICAgYXV0byBmaW5hbGl6ZWRO
b3RpZmljYXRpb25JRHMgPSBjcmVhdGVOU0FycmF5KGl0LT52YWx1ZSwgWyZdIChhdXRvJiBub3Rp
ZmljYXRpb24pIHsKKyAgICAgICAgYXV0byYgY29yZU5vdGlmaWNhdGlvbiA9ICpjb3JlKG5vdGlm
aWNhdGlvbi5nZXQoKSk7CisgICAgICAgIGNvcmVOb3RpZmljYXRpb24uZmluYWxpemUoKTsKKyAg
ICAgICAgbV9ub3RpZmljYXRpb25NYXAucmVtb3ZlKCZjb3JlTm90aWZpY2F0aW9uKTsKKyAgICAg
ICAgcmV0dXJuIEAoW25vdGlmaWNhdGlvbiBub3RpZmljYXRpb25JRF0pOworICAgIH0pOworCisg
ICAgW1ttX3dlYlZpZXcgX25vdGlmaWNhdGlvblByb3ZpZGVyXSBjbGVhck5vdGlmaWNhdGlvbnM6
ZmluYWxpemVkTm90aWZpY2F0aW9uSURzLmdldCgpXTsKICAgICBtX25vdGlmaWNhdGlvbkNvbnRl
eHRNYXAucmVtb3ZlKGl0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJBcmNoaXZlLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJBcmNoaXZlLm1tCmluZGV4IDhlYmZiNTNlOTE0YmZlZWVlNzMzOGU2NjAzNjk3OGVmYmE1
YjJiZDEuLjgxNjJhMzE0ZTlkOGFmODgwODQ2OGQ3YmU1YmZlMWVmOTJhNjlmYjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViQXJjaGl2ZS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkFyY2hpdmUubW0KQEAgLTQwLDYgKzQw
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KICNpbXBvcnQgPHd0
Zi9NYWluVGhyZWFkLmg+CiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgorI2ltcG9ydCA8d3RmL2Nv
Y29hL1ZlY3RvckNvY29hLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0yODAs
MTkgKzI4MSwxMyBAQCAtIChOU0FycmF5ICopc3VicmVzb3VyY2VzCiAgICAgLy8gQ3VycmVudGx5
IGZyb20gV2ViS2l0IEFQSSBwZXJzcGVjdGl2ZSwgV2ViQXJjaGl2ZXMgYXJlIGVudGlyZWx5IGlt
bXV0YWJsZSBvbmNlIGNyZWF0ZWQKICAgICAvLyBJZiB0aGV5IGV2ZXIgYmVjb21lIG11dGFibGUs
IHdlJ2xsIG5lZWQgdG8gcmV0aGluayB0aGlzLiAgICAgCiAgICAgaWYgKCFfcHJpdmF0ZS0+Y2Fj
aGVkU3VicmVzb3VyY2VzKSB7Ci0gICAgICAgIExlZ2FjeVdlYkFyY2hpdmUqIGNvcmVBcmNoaXZl
ID0gW19wcml2YXRlIGNvcmVBcmNoaXZlXTsKKyAgICAgICAgYXV0byBjb3JlQXJjaGl2ZSA9IFtf
cHJpdmF0ZSBjb3JlQXJjaGl2ZV07CiAgICAgICAgIGlmICghY29yZUFyY2hpdmUpCiAgICAgICAg
ICAgICBfcHJpdmF0ZS0+Y2FjaGVkU3VicmVzb3VyY2VzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0
XTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvJiBzdWJyZXNvdXJjZXMgPSBjb3Jl
QXJjaGl2ZS0+c3VicmVzb3VyY2VzKCk7Ci0gICAgICAgICAgICBOU011dGFibGVBcnJheSAqbXV0
YWJsZUFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzdWJy
ZXNvdXJjZXMuc2l6ZSgpXTsKLSAgICAgICAgICAgIF9wcml2YXRlLT5jYWNoZWRTdWJyZXNvdXJj
ZXMgPSBtdXRhYmxlQXJyYXk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHN1YnJlc291cmNlIDog
c3VicmVzb3VyY2VzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFdlYlJlc291cmNlICpyZXNvdXJj
ZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIF9pbml0V2l0aENvcmVSZXNvdXJjZTpzdWJyZXNvdXJj
ZS5nZXQoKV0pIHsKLSAgICAgICAgICAgICAgICAgICAgW211dGFibGVBcnJheSBhZGRPYmplY3Q6
cmVzb3VyY2VdOwotICAgICAgICAgICAgICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgX3ByaXZhdGUtPmNhY2hl
ZFN1YnJlc291cmNlcyA9IGNyZWF0ZU5TQXJyYXkoY29yZUFyY2hpdmUtPnN1YnJlc291cmNlcygp
LCBbXSAoYXV0byYgc3VicmVzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRO
UyhbW1dlYlJlc291cmNlIGFsbG9jXSBfaW5pdFdpdGhDb3JlUmVzb3VyY2U6c3VicmVzb3VyY2Uu
Z2V0KCldKTsKKyAgICAgICAgICAgIH0pLmxlYWtSZWYoKTsKICAgICAgICAgfQogICAgIH0KICAg
ICAvLyBNYWludGFpbiB0aGUgV2ViS2l0IDMgYmVoYXZpb3Igb2YgdGhpcyBBUEksIHdoaWNoIGlz
IGRvY3VtZW50ZWQgYW5kCkBAIC0zMTEsMTQgKzMwNiw5IEBAIC0gKE5TQXJyYXkgKilzdWJmcmFt
ZUFyY2hpdmVzCiAgICAgICAgIGlmICghY29yZUFyY2hpdmUpCiAgICAgICAgICAgICBfcHJpdmF0
ZS0+Y2FjaGVkU3ViZnJhbWVBcmNoaXZlcyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdF07CiAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byYgc3ViZnJhbWVBcmNoaXZlcyA9IGNvcmVBcmNo
aXZlLT5zdWJmcmFtZUFyY2hpdmVzKCk7Ci0gICAgICAgICAgICBhdXRvIG11dGFibGVBcnJheSA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c3ViZnJhbWVBcmNoaXZl
cy5zaXplKCldOwotICAgICAgICAgICAgX3ByaXZhdGUtPmNhY2hlZFN1YmZyYW1lQXJjaGl2ZXMg
PSBtdXRhYmxlQXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Vi
ZnJhbWVBcmNoaXZlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIFdlYkFyY2hpdmUg
KmFyY2hpdmUgPSBbW1dlYkFyY2hpdmUgYWxsb2NdIF9pbml0V2l0aENvcmVMZWdhY3lXZWJBcmNo
aXZlOnN0YXRpY19jYXN0PExlZ2FjeVdlYkFyY2hpdmUqPihzdWJmcmFtZUFyY2hpdmVzW2ldLnB0
cigpKV07Ci0gICAgICAgICAgICAgICAgW211dGFibGVBcnJheSBhZGRPYmplY3Q6YXJjaGl2ZV07
Ci0gICAgICAgICAgICAgICAgW2FyY2hpdmUgcmVsZWFzZV07Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBfcHJpdmF0ZS0+Y2FjaGVkU3ViZnJhbWVBcmNoaXZlcyA9IGNyZWF0ZU5TQXJyYXko
Y29yZUFyY2hpdmUtPnN1YmZyYW1lQXJjaGl2ZXMoKSwgW10gKGF1dG8mIGFyY2hpdmUpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYWRvcHROUyhbW1dlYkFyY2hpdmUgYWxsb2NdIF9pbml0V2l0
aENvcmVMZWdhY3lXZWJBcmNoaXZlOnN0YXRpY19jYXN0PExlZ2FjeVdlYkFyY2hpdmUqPihhcmNo
aXZlLnB0cigpKV0pOworICAgICAgICAgICAgfSkubGVha1JlZigpOwogICAgICAgICB9CiAgICAg
fQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJE
YXRhU291cmNlLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJEYXRhU291
cmNlLm1tCmluZGV4IGJiMDI3NjkzYzI1YTZiYzYzODY0M2QwZWVjMjY0YTQyNTBlNDNiNzkuLjY1
OGRkNGUxMTEzY2ViZjU5NjI4NGJjZDcyMDU2MDlhODdmYThjMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0KQEAgLTU0OCwxMyArNTQ4
LDkgQEAgLSAoV2ViUmVzb3VyY2UgKiltYWluUmVzb3VyY2UKIAogLSAoTlNBcnJheSAqKXN1YnJl
c291cmNlcwogewotICAgIGF1dG8gY29yZVN1YnJlc291cmNlcyA9IHRvUHJpdmF0ZShfcHJpdmF0
ZSktPmxvYWRlci0+c3VicmVzb3VyY2VzKCk7Ci0gICAgYXV0byBzdWJyZXNvdXJjZXMgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29yZVN1YnJlc291
cmNlcy5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIGNvcmVTdWJyZXNvdXJjZSA6IGNvcmVTdWJy
ZXNvdXJjZXMpIHsKLSAgICAgICAgaWYgKGF1dG8gcmVzb3VyY2UgPSBhZG9wdE5TKFtbV2ViUmVz
b3VyY2UgYWxsb2NdIF9pbml0V2l0aENvcmVSZXNvdXJjZTpjb3JlU3VicmVzb3VyY2UuY29weVJl
ZigpXSkpCi0gICAgICAgICAgICBbc3VicmVzb3VyY2VzIGFkZE9iamVjdDpyZXNvdXJjZS5nZXQo
KV07Ci0gICAgfQotICAgIHJldHVybiBzdWJyZXNvdXJjZXMuYXV0b3JlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlTlNBcnJheSh0b1ByaXZhdGUoX3ByaXZhdGUpLT5sb2FkZXItPnN1YnJlc291
cmNlcygpLCBbXSAoYXV0byYgcmVzb3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tX
ZWJSZXNvdXJjZSBhbGxvY10gX2luaXRXaXRoQ29yZVJlc291cmNlOnJlc291cmNlLmNvcHlSZWYo
KV0pOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKFdlYlJlc291cmNlICopc3VicmVz
b3VyY2VGb3JVUkw6KE5TVVJMICopVVJMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQppbmRleCA0M2JmZGVlOTY2ZWQ3YTdhZTY3Njg5N2I5ZWNkOTkyYWQyOWY4
YWFlLi41MzY3M2U5ZTJmNWVkM2JmNGNhNTEyNGM5MmY0MTZjZjNjMzcyZWZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTU3MywxNSArNTczLDYg
QEAgLSAodm9pZClfc2V0SXNDb21taXR0aW5nOihCT09MKXZhbHVlCiAKICNlbmRpZgogCi0tIChO
U0FycmF5ICopX25vZGVzRnJvbUxpc3Q6KFZlY3RvcjxXZWJDb3JlOjpOb2RlKj4gKilub2Rlc1Zl
Y3RvcgotewotICAgIHNpemVfdCBzaXplID0gbm9kZXNWZWN0b3ItPnNpemUoKTsKLSAgICBOU011
dGFibGVBcnJheSAqbm9kZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2l6
ZV07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIFtub2Rl
cyBhZGRPYmplY3Q6a2l0KCgqbm9kZXNWZWN0b3IpW2ldKV07Ci0gICAgcmV0dXJuIG5vZGVzOwot
fQotCiAtIChOU1N0cmluZyAqKV9zZWxlY3RlZFN0cmluZwogewogICAgIHJldHVybiBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKF9wcml2YXRlLT5j
b3JlRnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KaW5kZXgg
MTAzM2M5ZmZkNTY0MWI5MDZkMzczNjc4YjVmYmY0NzZhZjJiN2JmZi4uYWQ3NzFjMTY1MDYyYTM1
ZWU1MjYyYjU4NDAwMTFlMjI5MGE1OWU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KQEAgLTY1LDYgKzY1
LDcgQEAKICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbXBvcnQgPHd0Zi9jb2Nv
YS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTI3NCw3ICsyNzUsNyBAQCAtIChOU0F0dHJpYnV0
ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nRnJvbTooRE9NTm9kZSAqKXN0YXJ0Tm9kZSBzdGFy
dE9mZnNldDooaQogc3RhdGljIEhUTUxGb3JtRWxlbWVudCogZm9ybUVsZW1lbnRGcm9tRE9NRWxl
bWVudChET01FbGVtZW50ICplbGVtZW50KQogewogICAgIEVsZW1lbnQqIG5vZGUgPSBjb3JlKGVs
ZW1lbnQpOwotICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykgPyBz
dGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihub2RlKSA6IDA7CisgICAgcmV0dXJuIG5vZGUg
JiYgbm9kZS0+aGFzVGFnTmFtZShmb3JtVGFnKSA/IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVu
dCo+KG5vZGUpIDogbnVsbHB0cjsKIH0KIAogLSAoRE9NRWxlbWVudCAqKWVsZW1lbnRXaXRoTmFt
ZTooTlNTdHJpbmcgKiluYW1lIGluRm9ybTooRE9NRWxlbWVudCAqKWZvcm0KQEAgLTMxNiw4ICsz
MTcsOCBAQCAtIChCT09MKWVsZW1lbnRJc1Bhc3N3b3JkOihET01FbGVtZW50ICopZWxlbWVudAog
CiAtIChET01FbGVtZW50ICopZm9ybUZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50CiB7
Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtZW50RnJvbURP
TUVsZW1lbnQoZWxlbWVudCk7Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCA/IGtpdChpbnB1dEVs
ZW1lbnQtPmZvcm0oKSkgOiAwOworICAgIGF1dG8gaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtZW50
RnJvbURPTUVsZW1lbnQoZWxlbWVudCk7CisgICAgcmV0dXJuIGlucHV0RWxlbWVudCA/IGtpdChp
bnB1dEVsZW1lbnQtPmZvcm0oKSkgOiBuaWw7CiB9CiAKIC0gKERPTUVsZW1lbnQgKiljdXJyZW50
Rm9ybQpAQCAtMzI3LDIzICszMjgsMTggQEAgLSAoRE9NRWxlbWVudCAqKWN1cnJlbnRGb3JtCiAK
IC0gKE5TQXJyYXkgKiljb250cm9sc0luRm9ybTooRE9NRWxlbWVudCAqKWZvcm0KIHsKLSAgICBI
VE1MRm9ybUVsZW1lbnQqIGZvcm1FbGVtZW50ID0gZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChm
b3JtKTsKKyAgICBhdXRvIGZvcm1FbGVtZW50ID0gZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChm
b3JtKTsKICAgICBpZiAoIWZvcm1FbGVtZW50KQogICAgICAgICByZXR1cm4gbmlsOwotICAgIE5T
TXV0YWJsZUFycmF5ICpyZXN1bHRzID0gbmlsOwogCiAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3Bl
OjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOwotICAgIGZvciAoYXV0byYgd2Vh
a0VsZW1lbnQgOiBmb3JtRWxlbWVudC0+dW5zYWZlQXNzb2NpYXRlZEVsZW1lbnRzKCkpIHsKKyAg
ICBhdXRvIHJlc3VsdCA9IGNyZWF0ZU5TQXJyYXkoZm9ybUVsZW1lbnQtPnVuc2FmZUFzc29jaWF0
ZWRFbGVtZW50cygpLCBbXSAoYXV0byYgd2Vha0VsZW1lbnQpIC0+IERPTUVsZW1lbnQgKiB7CiAg
ICAgICAgIGF1dG8gY29yZUVsZW1lbnQgPSBtYWtlUmVmUHRyKHdlYWtFbGVtZW50LmdldCgpKTsK
LSAgICAgICAgaWYgKGNvcmVFbGVtZW50LT5hc0Zvcm1Bc3NvY2lhdGVkRWxlbWVudCgpLT5pc0Vu
dW1lcmF0YWJsZSgpKSB7IC8vIFNraXAgb3B0aW9uIGVsZW1lbnRzLCBvdGhlciBkdWRzCi0gICAg
ICAgICAgICBET01FbGVtZW50ICplbGVtZW50ID0ga2l0KGNvcmVFbGVtZW50LmdldCgpKTsKLSAg
ICAgICAgICAgIGlmICghcmVzdWx0cykKLSAgICAgICAgICAgICAgICByZXN1bHRzID0gW05TTXV0
YWJsZUFycmF5IGFycmF5V2l0aE9iamVjdDplbGVtZW50XTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBbcmVzdWx0cyBhZGRPYmplY3Q6ZWxlbWVudF07Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIGlmICghY29yZUVsZW1lbnQtPmFzRm9y
bUFzc29jaWF0ZWRFbGVtZW50KCktPmlzRW51bWVyYXRhYmxlKCkpIC8vIFNraXAgb3B0aW9uIGVs
ZW1lbnRzLCBvdGhlciBkdWRzCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1
cm4ga2l0KGNvcmVFbGVtZW50LmdldCgpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gW3Jlc3VsdCBj
b3VudF0gPyByZXN1bHQuYXV0b3JlbGVhc2UoKSA6IG5pbDsKIH0KIAogLy8gRWl0aGVyIGdldCBj
YWNoZWQgcmVnZXhwIG9yIGJ1aWxkIG9uZSB0aGF0IG1hdGNoZXMgYW55IG9mIHRoZSBsYWJlbHMu
CkBAIC00MjMsMTIgKzQxOSwxMiBAQCBzdGF0aWMgTlNTdHJpbmcqIHNlYXJjaEZvckxhYmVsc0Jl
Zm9yZUVsZW1lbnQoRnJhbWUqIGZyYW1lLCBOU0FycmF5KiBsYWJlbHMsIEVsZQogICAgIEFTU0VS
VChlbGVtZW50KTsKICAgICBSZWd1bGFyRXhwcmVzc2lvbiogcmVnRXhwID0gcmVnRXhwRm9yTGFi
ZWxzKGxhYmVscyk7CiAgICAgLy8gV2Ugc3RvcCBzZWFyY2hpbmcgYWZ0ZXIgd2UndmUgc2VlbiB0
aGlzIG1hbnkgY2hhcnMKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgY2hhcnNTZWFyY2hlZFRocmVz
aG9sZCA9IDUwMDsKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgY2hhcnNTZWFyY2hlZFRocmVzaG9s
ZCA9IDUwMDsKICAgICAvLyBUaGlzIGlzIHRoZSBhYnNvbHV0ZSBtYXggd2Ugc2VhcmNoLiAgV2Ug
YWxsb3cgYSBsaXR0bGUgbW9yZSBzbG9wIHRoYW4KICAgICAvLyBjaGFyc1NlYXJjaGVkVGhyZXNo
b2xkLCB0byBtYWtlIGl0IG1vcmUgbGlrZWx5IHRoYXQgd2UnbGwgc2VhcmNoIHdob2xlIG5vZGVz
LgotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhDaGFyc1NlYXJjaGVkID0gNjAwOworICAgIGNv
bnN0ZXhwciB1bnNpZ25lZCBtYXhDaGFyc1NlYXJjaGVkID0gNjAwOwogICAgIC8vIElmIHRoZSBz
dGFydGluZyBlbGVtZW50IGlzIHdpdGhpbiBhIHRhYmxlLCB0aGUgY2VsbCB0aGF0IGNvbnRhaW5z
IGl0Ci0gICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHN0YXJ0aW5nVGFibGVDZWxsID0gMDsKKyAg
ICBIVE1MVGFibGVDZWxsRWxlbWVudCogc3RhcnRpbmdUYWJsZUNlbGwgPSBudWxscHRyOwogICAg
IGJvb2wgc2VhcmNoZWRDZWxsQWJvdmUgPSBmYWxzZTsKICAgICAKICAgICBpZiAocmVzdWx0RGlz
dGFuY2UpCkBAIC00NDcsOCArNDQzLDggQEAgc3RhdGljIE5TU3RyaW5nKiBzZWFyY2hGb3JMYWJl
bHNCZWZvcmVFbGVtZW50KEZyYW1lKiBmcmFtZSwgTlNBcnJheSogbGFiZWxzLCBFbGUKICAgICAg
ICAgaWYgKG4tPmhhc1RhZ05hbWUodGRUYWcpICYmICFzdGFydGluZ1RhYmxlQ2VsbCkgewogICAg
ICAgICAgICAgc3RhcnRpbmdUYWJsZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxl
bWVudCo+KG4pOwogICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUodHJUYWcpICYmIHN0
YXJ0aW5nVGFibGVDZWxsKSB7Ci0gICAgICAgICAgICBOU1N0cmluZyogcmVzdWx0ID0gZnJhbWUt
PnNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbCgqcmVnRXhwLCBzdGFydGluZ1RhYmxlQ2VsbCwgcmVz
dWx0RGlzdGFuY2UpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBbcmVzdWx0IGxlbmd0aF0g
PiAwKSB7CisgICAgICAgICAgICBOU1N0cmluZyAqcmVzdWx0ID0gZnJhbWUtPnNlYXJjaEZvckxh
YmVsc0Fib3ZlQ2VsbCgqcmVnRXhwLCBzdGFydGluZ1RhYmxlQ2VsbCwgcmVzdWx0RGlzdGFuY2Up
OworICAgICAgICAgICAgaWYgKFtyZXN1bHQgbGVuZ3RoXSkgewogICAgICAgICAgICAgICAgIGlm
IChyZXN1bHRJc0luQ2VsbEFib3ZlKQogICAgICAgICAgICAgICAgICAgICAqcmVzdWx0SXNJbkNl
bGxBYm92ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQ3Myw4
ICs0NjksOCBAQCBzdGF0aWMgTlNTdHJpbmcqIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsZW1lbnQo
RnJhbWUqIGZyYW1lLCBOU0FycmF5KiBsYWJlbHMsIEVsZQogICAgIC8vIElmIHdlIHN0YXJ0ZWQg
aW4gYSBjZWxsLCBidXQgYmFpbGVkIGJlY2F1c2Ugd2UgZm91bmQgdGhlIHN0YXJ0IG9mIHRoZSBm
b3JtIG9yIHRoZQogICAgIC8vIHByZXZpb3VzIGVsZW1lbnQsIHdlIHN0aWxsIG1pZ2h0IG5lZWQg
dG8gc2VhcmNoIHRoZSByb3cgYWJvdmUgdXMgZm9yIGEgbGFiZWwuCiAgICAgaWYgKHN0YXJ0aW5n
VGFibGVDZWxsICYmICFzZWFyY2hlZENlbGxBYm92ZSkgewotICAgICAgICBOU1N0cmluZyogcmVz
dWx0ID0gZnJhbWUtPnNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbCgqcmVnRXhwLCBzdGFydGluZ1Rh
YmxlQ2VsbCwgcmVzdWx0RGlzdGFuY2UpOwotICAgICAgICBpZiAocmVzdWx0ICYmIFtyZXN1bHQg
bGVuZ3RoXSA+IDApIHsKKyAgICAgICAgTlNTdHJpbmcgKnJlc3VsdCA9IGZyYW1lLT5zZWFyY2hG
b3JMYWJlbHNBYm92ZUNlbGwoKnJlZ0V4cCwgc3RhcnRpbmdUYWJsZUNlbGwsIHJlc3VsdERpc3Rh
bmNlKTsKKyAgICAgICAgaWYgKFtyZXN1bHQgbGVuZ3RoXSkgewogICAgICAgICAgICAgaWYgKHJl
c3VsdElzSW5DZWxsQWJvdmUpCiAgICAgICAgICAgICAgICAgKnJlc3VsdElzSW5DZWxsQWJvdmUg
PSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTUzNiw3ICs1MzIsNyBAQCBz
dGF0aWMgTlNTdHJpbmcgKm1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lbnQoTlNBcnJheSAqbGFiZWxz
LCBFbGVtZW50KiBlbGVtZW50KQogCiAtIChOU1N0cmluZyAqKXNlYXJjaEZvckxhYmVsczooTlNB
cnJheSAqKWxhYmVscyBiZWZvcmVFbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudAogewotICAg
IHJldHVybiBbc2VsZiBzZWFyY2hGb3JMYWJlbHM6bGFiZWxzIGJlZm9yZUVsZW1lbnQ6ZWxlbWVu
dCByZXN1bHREaXN0YW5jZTowIHJlc3VsdElzSW5DZWxsQWJvdmU6MF07CisgICAgcmV0dXJuIFtz
ZWxmIHNlYXJjaEZvckxhYmVsczpsYWJlbHMgYmVmb3JlRWxlbWVudDplbGVtZW50IHJlc3VsdERp
c3RhbmNlOm51bGxwdHIgcmVzdWx0SXNJbkNlbGxBYm92ZTpudWxscHRyXTsKIH0KIAogLSAoTlNT
dHJpbmcgKilzZWFyY2hGb3JMYWJlbHM6KE5TQXJyYXkgKilsYWJlbHMgYmVmb3JlRWxlbWVudDoo
RE9NRWxlbWVudCAqKWVsZW1lbnQgcmVzdWx0RGlzdGFuY2U6KE5TVUludGVnZXIqKW91dERpc3Rh
bmNlIHJlc3VsdElzSW5DZWxsQWJvdmU6KEJPT0wqKW91dElzSW5DZWxsQWJvdmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDUyMGVhNTY2
NGFmMjg3NTY5YTg1NWM3NGI4MWNlYTU0YzdlOGUyMDIuLjRiNmExMTVmYzkzNjM3ZDM4M2VhZGNk
ZTU4ZGViYzlkNWFmZWQ5YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViSFRNTFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQpAQCAtMzY0MSw3ICszNjQxLDEyIEBAIHN0YXRpYyBSZXRhaW5QdHI8
TlNNZW51SXRlbT4gY3JlYXRlU2hhcmVNZW51SXRlbShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVz
dWx0JiBoCiAgICAgcmV0dXJuIFtOU01lbnVJdGVtIHN0YW5kYXJkU2hhcmVNZW51SXRlbUZvckl0
ZW1zOml0ZW1zLmdldCgpXTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxOU011dGFibGVBcnJheT4g
Y3JlYXRlTWVudUl0ZW1zKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmLCBjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtPiYpOworc3RhdGljIFJldGFpblB0cjxOU011dGFi
bGVBcnJheT4gY3JlYXRlTWVudUl0ZW1zKGNvbnN0IFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQmIGhp
dFRlc3RSZXN1bHQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0+JiBpdGVt
cykKK3sKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShpdGVtcywgWyZdIChhdXRvJiBpdGVtKSB7
CisgICAgICAgIHJldHVybiBjcmVhdGVNZW51SXRlbShoaXRUZXN0UmVzdWx0LCBpdGVtKTsKKyAg
ICB9KTsKK30KIAogc3RhdGljIFJldGFpblB0cjxOU01lbnVJdGVtPiBjcmVhdGVNZW51SXRlbShj
b25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBjb25zdCBXZWJDb3Jl
OjpDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7CkBAIC0zNjY4LDggKzM2NzMsNyBAQCBzdGF0aWMg
UmV0YWluUHRyPE5TTWVudUl0ZW0+IGNyZWF0ZU1lbnVJdGVtKGNvbnN0IFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQmIGhpdFRlcwogICAgIGNhc2UgV2ViQ29yZTo6U3VibWVudVR5cGU6IHsKICAgICAg
ICAgYXV0byBtZW51ID0gYWRvcHROUyhbW05TTWVudSBhbGxvY10gaW5pdF0pOwogCi0gICAgICAg
IGF1dG8gc3VibWVudUl0ZW1zID0gY3JlYXRlTWVudUl0ZW1zKGhpdFRlc3RSZXN1bHQsIGl0ZW0u
c3ViTWVudUl0ZW1zKCkpOwotICAgICAgICBmb3IgKE5TTWVudUl0ZW0gKm1lbnVJdGVtIGluIHN1
Ym1lbnVJdGVtcy5nZXQoKSkKKyAgICAgICAgZm9yIChOU01lbnVJdGVtICptZW51SXRlbSBpbiBj
cmVhdGVNZW51SXRlbXMoaGl0VGVzdFJlc3VsdCwgaXRlbS5zdWJNZW51SXRlbXMoKSkuZ2V0KCkp
CiAgICAgICAgICAgICBbbWVudSBhZGRJdGVtOm1lbnVJdGVtXTsKIAogICAgICAgICBhdXRvIG1l
bnVJdGVtID0gYWRvcHROUyhbW05TTWVudUl0ZW0gYWxsb2NdIGluaXRXaXRoVGl0bGU6aXRlbS50
aXRsZSgpIGFjdGlvbjpudWxscHRyIGtleUVxdWl2YWxlbnQ6QCIiXSk7CkBAIC0zNjg0LDE4ICsz
Njg4LDYgQEAgc3RhdGljIFJldGFpblB0cjxOU01lbnVJdGVtPiBjcmVhdGVNZW51SXRlbShjb25z
dCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXMKICAgICB9CiB9CiAKLXN0YXRpYyBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IGNyZWF0ZU1lbnVJdGVtcyhjb25zdCBXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29udGV4dE1l
bnVJdGVtPiYgaXRlbXMpCi17Ci0gICAgYXV0byBtZW51SXRlbXMgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLQotICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7
Ci0gICAgICAgIGlmIChhdXRvIG1lbnVJdGVtID0gY3JlYXRlTWVudUl0ZW0oaGl0VGVzdFJlc3Vs
dCwgaXRlbSkpCi0gICAgICAgICAgICBbbWVudUl0ZW1zIGFkZE9iamVjdDptZW51SXRlbS5nZXQo
KV07Ci0gICAgfQotCi0gICAgcmV0dXJuIG1lbnVJdGVtczsKLX0KLQogc3RhdGljIFJldGFpblB0
cjxOU0FycmF5PiBjdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyhXZWJWaWV3ICp3ZWJWaWV3LCBj
b25zdCBXZWJDb3JlOjpDb250ZXh0TWVudSYgZGVmYXVsdE1lbnUpCiB7CiAgICAgY29uc3QgYXV0
byYgaGl0VGVzdFJlc3VsdCA9IHdlYlZpZXcucGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCku
aGl0VGVzdFJlc3VsdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCmluZGV4IDUwNTNjZWE0OWEwYmU0MTYzZmUwOTNiMGI2MDljYzE1MjVkMjVmZGIuLjUzODU4
NjdjNTQ3NDEyZDUzOTY1MDVhYTg2YTQ3ODFkZTAyNjBlY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTY5MiwxMSArNjkyLDcgQEAgLSAoV2ViVUlU
ZXh0SW5kaWNhdG9yRGF0YSAqKWluaXRXaXRoSW1hZ2U6KENHSW1hZ2VSZWYpaW1hZ2UgdGV4dElu
ZGljYXRvckRhdGE6KGMKICAgICBfZGF0YUludGVyYWN0aW9uSW1hZ2UgPSBbUEFMOjphbGxvY1VJ
SW1hZ2VJbnN0YW5jZSgpIGluaXRXaXRoQ0dJbWFnZTppbWFnZSBzY2FsZTpzY2FsZSBvcmllbnRh
dGlvbjpVSUltYWdlT3JpZW50YXRpb25Eb3duTWlycm9yZWRdOwogICAgIF9zZWxlY3Rpb25SZWN0
SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gaW5kaWNhdG9yRGF0YS5zZWxlY3Rpb25SZWN0SW5Sb290
Vmlld0Nvb3JkaW5hdGVzOwogICAgIF90ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5h
dGVzID0gaW5kaWNhdG9yRGF0YS50ZXh0Qm91bmRpbmdSZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVz
OwotCi0gICAgTlNNdXRhYmxlQXJyYXkgKnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0
ZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIGZvciAoYXV0byByZWN0IDogaW5kaWNh
dG9yRGF0YS50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKQotICAgICAgICBbdGV4
dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVX
aXRoQ0dSZWN0OnJlY3RdXTsKLSAgICBfdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRl
cyA9IFtbTlNBcnJheSBhcnJheVdpdGhBcnJheTp0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3Jk
aW5hdGVzXSByZXRhaW5dOworICAgIF90ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVz
ID0gY3JlYXRlTlNBcnJheShpbmRpY2F0b3JEYXRhLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29v
cmRpbmF0ZXMpLmxlYWtSZWYoKTsKICAgICBfY29udGVudEltYWdlU2NhbGVGYWN0b3IgPSBpbmRp
Y2F0b3JEYXRhLmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yOwogICAgIGlmIChpbmRpY2F0b3JEYXRh
LmNvbnRlbnRJbWFnZVdpdGhIaWdobGlnaHQpCiAgICAgICAgIF9jb250ZW50SW1hZ2VXaXRoSGln
aGxpZ2h0ID0gW1BBTDo6YWxsb2NVSUltYWdlSW5zdGFuY2UoKSBpbml0V2l0aENHSW1hZ2U6aW5k
aWNhdG9yRGF0YS5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0LmdldCgpLT5uYXRpdmVJbWFnZSgp
LmdldCgpIHNjYWxlOnNjYWxlIG9yaWVudGF0aW9uOlVJSW1hZ2VPcmllbnRhdGlvbkRvd25NaXJy
b3JlZF07CkBAIC00MzUyLDYgKzQzNDgsNyBAQCArICh2b2lkKV9kb05vdFN0YXJ0T2JzZXJ2aW5n
TmV0d29ya1JlYWNoYWJpbGl0eQogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorCiAtIChOU0FycmF5ICopX3RvdWNoRXZlbnRSZWdpb25z
CiB7CiAgICAgYXV0byogZnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CkBAIC00MzY1LDM4
ICs0MzYyLDMzIEBAIC0gKE5TQXJyYXkgKilfdG91Y2hFdmVudFJlZ2lvbnMKICAgICBWZWN0b3I8
V2ViQ29yZTo6SW50UmVjdD4gcmVjdHM7CiAgICAgZG9jdW1lbnQtPmdldFRvdWNoUmVjdHMocmVj
dHMpOwogCi0gICAgaWYgKHJlY3RzLnNpemUoKSA9PSAwKQorICAgIGlmIChyZWN0cy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBOU011dGFibGVBcnJheSAqZXZlbnRSZWdp
b25BcnJheSA9IFtbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnJlY3Rz
LnNpemUoKV0gYXV0b3JlbGVhc2VdOwotCiAgICAgTlNWaWV3IDxXZWJEb2N1bWVudFZpZXc+ICpk
b2N1bWVudFZpZXcgPSBbW1tzZWxmIG1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXdd
OwotICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVj
dHMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gcmVjdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHJlY3QgPSAqaXQ7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXko
cmVjdHMsIFsmXSAoYXV0byYgcmVjdCkgLT4gUmV0YWluUHRyPFdlYkV2ZW50UmVnaW9uPiB7CiAg
ICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKIAogICAgICAgICAvLyBUaGUgdG91Y2ggcmVjdGFuZ2xlcyBhcmUg
aW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBkb2N1bWVudCAoaW5zaWRlIHRoZSBXZWJI
VE1MVmlldyksIHdoaWNoIGlzIG5vdAogICAgICAgICAvLyB0aGUgc2FtZSBhcyB0aGUgY29vcmRp
bmF0ZSBzeXN0ZW0gb2YgdGhlIFdlYlZpZXcuIFVJV2ViVmlldyBjdXJyZW50bHkgZXhwZWN0cyB2
aWV3IGNvb3JkaW5hdGVzLCBzbyB3ZSdsbAogICAgICAgICAvLyBjb252ZXJ0IHRoZW0gaGVyZSBu
b3cuCi0gICAgICAgIFdlYkNvcmU6OkludFJlY3Qgdmlld1JlY3QgPSBXZWJDb3JlOjpJbnRSZWN0
KFtkb2N1bWVudFZpZXcgY29udmVydFJlY3Q6cmVjdCB0b1ZpZXc6c2VsZl0pOworICAgICAgICBh
dXRvIHZpZXdSZWN0ID0gW2RvY3VtZW50VmlldyBjb252ZXJ0UmVjdDpyZWN0IHRvVmlldzpzZWxm
XTsKIAogICAgICAgICAvLyBUaGUgZXZlbnQgcmVnaW9uIHdhbnRzIHRoaXMgcG9pbnRzIGluIHRo
aXMgb3JkZXI6CiAgICAgICAgIC8vICBwMi0tLS0tLXAzCiAgICAgICAgIC8vICB8ICAgICAgIHwK
ICAgICAgICAgLy8gIHAxLS0tLS0tcDQKLSAgICAgICAgLy8KLSAgICAgICAgV2ViRXZlbnRSZWdp
b24gKmV2ZW50UmVnaW9uID0gW1tXZWJFdmVudFJlZ2lvbiBhbGxvY10gaW5pdFdpdGhQb2ludHM6
V2ViQ29yZTo6RmxvYXRQb2ludCh2aWV3UmVjdC54KCksIHZpZXdSZWN0Lm1heFkoKSkKLSAgICAg
ICAgICAgIDogV2ViQ29yZTo6RmxvYXRQb2ludCh2aWV3UmVjdC54KCksIHZpZXdSZWN0LnkoKSkg
OiBXZWJDb3JlOjpGbG9hdFBvaW50KHZpZXdSZWN0Lm1heFgoKSwgdmlld1JlY3QueSgpKSA6IFdl
YkNvcmU6OkZsb2F0UG9pbnQodmlld1JlY3QubWF4WCgpLCB2aWV3UmVjdC5tYXhZKCkpXTsKLSAg
ICAgICAgaWYgKGV2ZW50UmVnaW9uKSB7Ci0gICAgICAgICAgICBbZXZlbnRSZWdpb25BcnJheSBh
ZGRPYmplY3Q6ZXZlbnRSZWdpb25dOwotICAgICAgICAgICAgW2V2ZW50UmVnaW9uIHJlbGVhc2Vd
OwotICAgICAgICB9Ci0gICAgfQogCi0gICAgcmV0dXJuIGV2ZW50UmVnaW9uQXJyYXk7CisgICAg
ICAgIGF1dG8gcDEgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNaW5YKHZpZXdSZWN0KSwgQ0dSZWN0
R2V0TWF4WSh2aWV3UmVjdCkpOworICAgICAgICBhdXRvIHAyID0gQ0dQb2ludE1ha2UoQ0dSZWN0
R2V0TWluWCh2aWV3UmVjdCksIENHUmVjdEdldE1pblkodmlld1JlY3QpKTsKKyAgICAgICAgYXV0
byBwMyA9IENHUG9pbnRNYWtlKENHUmVjdEdldE1heFgodmlld1JlY3QpLCBDR1JlY3RHZXRNaW5Z
KHZpZXdSZWN0KSk7CisgICAgICAgIGF1dG8gcDQgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNYXhY
KHZpZXdSZWN0KSwgQ0dSZWN0R2V0TWF4WSh2aWV3UmVjdCkpOworCisgICAgICAgIHJldHVybiBh
ZG9wdE5TKFtbV2ViRXZlbnRSZWdpb24gYWxsb2NdIGluaXRXaXRoUG9pbnRzOnAxIDpwMiA6cDMg
OnA0XSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KKwogI2VuZGlmIC8vIEVOQUJMRShUT1VD
SF9FVkVOVFMpCiAKIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBXZWJC
YWNrRm9yd2FyZExpc3QgQVBJLCB3ZSBob25vciBib3RoCkBAIC00NTY5LDIwICs0NTYxLDE0IEBA
IC0gKHZvaWQpcmVzZXRUcmFja2VkUmVwYWludHMKICAgICAgICAgdmlldy0+cmVzZXRUcmFja2Vk
UmVwYWludHMoKTsKIH0KIAotLSAoTlNBcnJheSopdHJhY2tlZFJlcGFpbnRSZWN0cworLSAoTlNB
cnJheSAqKXRyYWNrZWRSZXBhaW50UmVjdHMKIHsKLSAgICBhdXRvKiBjb3JlRnJhbWUgPSBbc2Vs
ZiBfbWFpbkNvcmVGcmFtZV07Ci0gICAgYXV0byogdmlldyA9IGNvcmVGcmFtZS0+dmlldygpOwor
ICAgIGF1dG8gdmlldyA9IHNlbGYuX21haW5Db3JlRnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIXZp
ZXcgfHwgIXZpZXctPmlzVHJhY2tpbmdSZXBhaW50cygpKQogICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHJlcGFpbnRSZWN0cyA9IHZp
ZXctPnRyYWNrZWRSZXBhaW50UmVjdHMoKTsKLSAgICBOU011dGFibGVBcnJheSogcmVjdHNBcnJh
eSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6cmVwYWludFJlY3Rz
LnNpemUoKV07Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVwYWludFJlY3RzLnNp
emUoKTsgKytpKQotICAgICAgICBbcmVjdHNBcnJheSBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVX
aXRoUmVjdDpzbmFwcGVkSW50UmVjdChXZWJDb3JlOjpMYXlvdXRSZWN0KHJlcGFpbnRSZWN0c1tp
XSkpXV07Ci0KLSAgICByZXR1cm4gW3JlY3RzQXJyYXkgYXV0b3JlbGVhc2VdOworICAgIHJldHVy
biBjcmVhdGVOU0FycmF5KHZpZXctPnRyYWNrZWRSZXBhaW50UmVjdHMoKSwgW10gKGF1dG8mIHJl
Y3QpIHsKKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6c25hcHBlZEludFJl
Y3QoV2ViQ29yZTo6TGF5b3V0UmVjdCB7IHJlY3QgfSldOworICAgIH0pLmF1dG9yZWxlYXNlKCk7
CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTEwMTk5LDEzICsxMDE4NSw5IEBA
IC0gKE5TQXJyYXk8RE9NRWxlbWVudCAqPiAqKV9lZGl0YWJsZUVsZW1lbnRzSW5SZWN0OihDR1Jl
Y3QpcmVjdAogICAgIGF1dG8qIHBhZ2UgPSBjb3JlKHNlbGYpOwogICAgIGlmICghcGFnZSkKICAg
ICAgICAgcmV0dXJuIEBbXTsKLSAgICBhdXRvIGNvcmVFbGVtZW50cyA9IHBhZ2UtPmVkaXRhYmxl
RWxlbWVudHNJblJlY3QocmVjdCk7Ci0gICAgaWYgKGNvcmVFbGVtZW50cy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBAW107Ci0gICAgYXV0byByZXN1bHQgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29yZUVsZW1lbnRzLnNpemUoKV0pOwotICAg
IGZvciAoYXV0byYgY29yZUVsZW1lbnQgOiBjb3JlRWxlbWVudHMpCi0gICAgICAgIFtyZXN1bHQg
YWRkT2JqZWN0OmtpdChjb3JlRWxlbWVudC5wdHIoKSldOwotICAgIHJldHVybiByZXN1bHQuYXV0
b3JlbGVhc2UoKTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShwYWdlLT5lZGl0YWJsZUVsZW1l
bnRzSW5SZWN0KHJlY3QpLCBbXSAoYXV0byYgY29yZUVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJu
IGtpdChjb3JlRWxlbWVudC5wdHIoKSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAo
dm9pZClyZXZlYWxDdXJyZW50U2VsZWN0aW9uCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWFhZDcyN2E0OGJkZTRiOTlmMjVhYmRhMjA4MTQ0MmY1
ZmVlZTcyMi4uMjYwYWI2ZTQyZDRiZTU3ZjJkNDY0MmMxZWIyZDA1NjBlNjdjMTIxYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEw
IEBACisyMDIwLTA0LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAg
ICBbQ29jb2FdIFVzZSBjcmVhdGVOU0FycmF5IGluIG1hbnkgbW9yZSBwbGFjZXMgdGhhdCBidWls
ZCBOU0FycmF5IG9iamVjdHMgZnJvbSBDKysgY29sbGVjdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDcwMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCiAyMDIwLTA0LTE4ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IGNsaWVudCBjZXJ0aWZpY2F0ZSBh
dXRoZW50aWNhdGlvbiB3aGVuIHVzaW5nIG5vbi1kZWZhdWx0IFdLV2Vic2l0ZURhdGFTdG9yZXMK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCA5OTA2YTlm
N2NmMzM4OTRkM2UxNWUzOWQyYWUxMDY2N2FlOWRiMTc2Li4zMzQ2M2I0NDNkYWRlNThmNDdlN2Nm
ZmFmMjQ5MzcyOTFjZmVlYmI0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tCkBAIC05OSw2ICs5OSw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAj
aW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDx3dGYvVW5pcXVlQXJyYXkuaD4KKyNp
bXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTUwOSwzMyAr
NTEwLDMxIEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlU3lzdGVtQ29yZVdlYkZvbnRzKCkKIAogc3Rh
dGljIHZvaWQgYWN0aXZhdGVUZXN0aW5nRm9udHMoKQogewotICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBmb250RmlsZU5hbWVzW10gPSB7Ci0gICAgICAgICJBSEVNX19fXy5UVEYiLAotICAgICAgICAi
V2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hl
cjIwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjMwMC50dGYiLAotICAgICAg
ICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjQwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0
Y2hlcjUwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjYwMC50dGYiLAotICAg
ICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0
V2F0Y2hlcjgwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYiLAot
ICAgICAgICAiRm9udFdpdGhGZWF0dXJlcy50dGYiLAotICAgICAgICAiRm9udFdpdGhGZWF0dXJl
cy5vdGYiLAotICAgICAgICAwCisgICAgY29uc3RleHByIE5TU3RyaW5nICpmb250RmlsZU5hbWVz
W10gPSB7CisgICAgICAgIEAiQUhFTV9fX18uVFRGIiwKKyAgICAgICAgQCJXZWJLaXRXZWlnaHRX
YXRjaGVyMTAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYiLAor
ICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXIzMDAudHRmIiwKKyAgICAgICAgQCJXZWJLaXRX
ZWlnaHRXYXRjaGVyNDAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjUwMC50
dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI2MDAudHRmIiwKKyAgICAgICAgQCJX
ZWJLaXRXZWlnaHRXYXRjaGVyNzAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0Y2hl
cjgwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmIiwKKyAgICAg
ICAgQCJGb250V2l0aEZlYXR1cmVzLnR0ZiIsCisgICAgICAgIEAiRm9udFdpdGhGZWF0dXJlcy5v
dGYiLAogICAgIH07CiAKLSAgICBOU011dGFibGVBcnJheSAqZm9udFVSTHMgPSBbTlNNdXRhYmxl
QXJyYXkgYXJyYXldOwogICAgIE5TVVJMICpyZXNvdXJjZXNEaXJlY3RvcnkgPSBbTlNVUkwgVVJM
V2l0aFN0cmluZzpAIkR1bXBSZW5kZXJUcmVlLnJlc291cmNlcyIgcmVsYXRpdmVUb1VSTDpbW05T
QnVuZGxlIG1haW5CdW5kbGVdIGV4ZWN1dGFibGVVUkxdXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBmb250RmlsZU5hbWVzW2ldOyArK2kpIHsKLSAgICAgICAgTlNVUkwgKmZvbnRVUkwgPSBb
cmVzb3VyY2VzRGlyZWN0b3J5IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbTlNTdHJpbmcg
c3RyaW5nV2l0aFVURjhTdHJpbmc6Zm9udEZpbGVOYW1lc1tpXV0gaXNEaXJlY3Rvcnk6Tk9dOwot
ICAgICAgICBbZm9udFVSTHMgYWRkT2JqZWN0Oltmb250VVJMIGFic29sdXRlVVJMXV07Ci0gICAg
fQorICAgIGF1dG8gZm9udFVSTHMgPSBjcmVhdGVOU0FycmF5KGZvbnRGaWxlTmFtZXMsIFsmXSAo
TlNTdHJpbmcgKm5hbWUpIHsKKyAgICAgICAgcmV0dXJuIFtyZXNvdXJjZXNEaXJlY3RvcnkgVVJM
QnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50Om5hbWUgaXNEaXJlY3Rvcnk6Tk9dLmFic29sdXRlVVJM
OworICAgIH0pOwogCi0gICAgQ0ZBcnJheVJlZiBlcnJvcnMgPSAwOwotICAgIGlmICghQ1RGb250
TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JVUkxzKChDRkFycmF5UmVmKWZvbnRVUkxzLCBrQ1RGb250
TWFuYWdlclNjb3BlUHJvY2VzcywgJmVycm9ycykpIHsKKyAgICBDRkFycmF5UmVmIGVycm9ycyA9
IG51bGxwdHI7CisgICAgaWYgKCFDVEZvbnRNYW5hZ2VyUmVnaXN0ZXJGb250c0ZvclVSTHMoKENG
QXJyYXlSZWYpZm9udFVSTHMuZ2V0KCksIGtDVEZvbnRNYW5hZ2VyU2NvcGVQcm9jZXNzLCAmZXJy
b3JzKSkgewogICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBhY3RpdmF0ZSBmb250czogJUAiLCBl
cnJvcnMpOwotICAgICAgICBDRlJlbGVhc2UoZXJyb3JzKTsKKyAgICAgICAgaWYgKGVycm9ycykK
KyAgICAgICAgICAgIENGUmVsZWFzZShlcnJvcnMpOwogICAgICAgICBleGl0KDEpOwogICAgIH0K
IH0KQEAgLTU0NSw3ICs1NDQsOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RGb250cygpCiAgICAgYWN0
aXZhdGVTeXN0ZW1Db3JlV2ViRm9udHMoKTsKICAgICBhY3RpdmF0ZVRlc3RpbmdGb250cygpOwog
fQorCiAjZWxzZQorCiBzdGF0aWMgdm9pZCBhY3RpdmF0ZUZvbnRJT1MoY29uc3QgdWludDhfdCog
Zm9udERhdGEsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBzdGQ6OnN0cmluZyBzZWN0aW9uTmFtZSkK
IHsKICAgICBDR0RhdGFQcm92aWRlclJlZiBkYXRhID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRo
RGF0YShudWxscHRyLCBmb250RGF0YSwgbGVuZ3RoLCBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL1VJRGVsZWdhdGUubW0KaW5kZXggZDVmNGE0MmUxNjYzMzZkODljYmRkYzA5ZTU1YjQ1
MjM1ZTUxNzJjYS4uZjY5OTU1NTFlMGNkYTEwZDRiMmI3OWY5MmJhNmRhMzRiZTM1N2I4OCAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0KKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL1VJRGVsZWdhdGUubW0KQEAgLTQ1LDYgKzQ1LDcgQEAKICNp
bXBvcnQgPFdlYktpdC9XZWJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUu
aD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9y
Q29jb2EuaD4KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogRHVtcFJlbmRlclRyZWVEcmFn
Z2luZ0luZm8gKmRyYWdnaW5nSW5mbyA9IG5pbDsKQEAgLTM3NiwyMCArMzc3LDE4IEBAIC0gKHZv
aWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBydW5PcGVuUGFuZWxGb3JGaWxlQnV0dG9uV2l0
aFJlc3VsdExpc3RlbmVyOihpCiAgICAgfQogCiAgICAgTlNVUkwgKmJhc2VVUkwgPSBbTlNVUkwg
VVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6Z1Rlc3RSdW5uZXIt
PnRlc3RVUkwoKS5jX3N0cigpXV07Ci0gICAgYXV0byBmaWxlUGF0aHMgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6b3BlblBhbmVsRmlsZXMuc2l6ZSgp
XSk7Ci0gICAgZm9yIChhdXRvJiBmaWxlUGF0aCA6IG9wZW5QYW5lbEZpbGVzKSB7Ci0gICAgICAg
IE5TVVJMICpmaWxlVVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNTdHJpbmcgc3RyaW5n
V2l0aFVURjhTdHJpbmc6ZmlsZVBhdGguY19zdHIoKV0gcmVsYXRpdmVUb1VSTDpiYXNlVVJMXTsK
LSAgICAgICAgW2ZpbGVQYXRocyBhZGRPYmplY3Q6ZmlsZVVSTC5wYXRoXTsKLSAgICB9CisgICAg
YXV0byBmaWxlUGF0aHMgPSBjcmVhdGVOU0FycmF5KG9wZW5QYW5lbEZpbGVzLCBbJl0gKGNvbnN0
IHN0ZDo6c3RyaW5nJiBmaWxlUGF0aCkgeworICAgICAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxX
aXRoUGF0aDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6ZmlsZVBhdGguY19zdHIoKV0g
cmVsYXRpdmVUb1VSTDpiYXNlVVJMXS5wYXRoOworICAgIH0pOwogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBOU1VSTCAqZmlyc3RVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltO
U1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpvcGVuUGFuZWxGaWxlc1swXS5jX3N0cigpXSBy
ZWxhdGl2ZVRvVVJMOmJhc2VVUkxdOwogICAgIE5TU3RyaW5nICpkaXNwbGF5U3RyaW5nID0gZmly
c3RVUkwubGFzdFBhdGhDb21wb25lbnQ7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y2hhcj4mIGlj
b25EYXRhID0gZ1Rlc3RSdW5uZXItPm9wZW5QYW5lbEZpbGVzTWVkaWFJY29uKCk7CisgICAgYXV0
byYgaWNvbkRhdGEgPSBnVGVzdFJ1bm5lci0+b3BlblBhbmVsRmlsZXNNZWRpYUljb24oKTsKICAg
ICBDR0ltYWdlUmVmIGltYWdlUmVmID0gbnVsbHB0cjsKICAgICBpZiAoIWljb25EYXRhLmVtcHR5
KCkpIHsKLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YVJlZiA9IGFkb3B0Q0YoQ0ZE
YXRhQ3JlYXRlKG51bGxwdHIsICh1bnNpZ25lZCBjaGFyICopaWNvbkRhdGEuZGF0YSgpLCBpY29u
RGF0YS5zaXplKCkpKTsKLSAgICAgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBpbWFn
ZVByb3ZpZGVyUmVmID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEoZGF0
YVJlZi5nZXQoKSkpOworICAgICAgICBhdXRvIGRhdGFSZWYgPSBhZG9wdENGKENGRGF0YUNyZWF0
ZShudWxscHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oaWNvbkRhdGEuZGF0YSgp
KSwgaWNvbkRhdGEuc2l6ZSgpKSk7CisgICAgICAgIGF1dG8gaW1hZ2VQcm92aWRlclJlZiA9IGFk
b3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGRhdGFSZWYuZ2V0KCkpKTsKICAg
ICAgICAgaW1hZ2VSZWYgPSBDR0ltYWdlQ3JlYXRlV2l0aEpQRUdEYXRhUHJvdmlkZXIoaW1hZ2VQ
cm92aWRlclJlZi5nZXQoKSwgbnVsbHB0ciwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVs
dCk7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXJzL2NwcC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
cnMvY3BwLnB5CmluZGV4IGViYTgyZTFhMThiOWRkMzZjOGNkMDQ5ZTliMTI3MDdhN2I5MzU4Y2Mu
LjAyNzdkN2E0NjdmNzhhMWQ0OTQ4MjQzZTJhZTQ5ZDIwYTQ5Mzc4NDEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CkBAIC00OTgsNyArNDk4LDcgQEAg
ZGVmIGNyZWF0ZV9za2VsZXRvbl9wYXJhbWV0ZXJzKGFsbF9wYXJhbWV0ZXJzKToKIAogCiBkZWYg
ZmluZF9wYXJhbWV0ZXJfbmFtZV9pbmRleChza2VsZXRvbl9wYXJhbWV0ZXIpOgotICAgICIiIkRl
dGVybWluZXMgd2hlcmUgdGhlIHBhcmFtZXRlcmUgbmFtZSBzdGFydHMgZ2l2ZW4gdGhlIHNrZWxl
dG9uIHBhcmFtZXRlci4iIiIKKyAgICAiIiJEZXRlcm1pbmVzIHdoZXJlIHRoZSBwYXJhbWV0ZXIg
bmFtZSBzdGFydHMgZ2l2ZW4gdGhlIHNrZWxldG9uIHBhcmFtZXRlci4iIiIKICAgICAjIFRoZSBm
aXJzdCBzcGFjZSBmcm9tIHRoZSByaWdodCBpbiB0aGUgc2ltcGxpZmllZCBwYXJhbWV0ZXIgaXMg
d2hlcmUgdGhlIHBhcmFtZXRlcgogICAgICMgbmFtZSBzdGFydHMgdW5sZXNzIHRoZSBmaXJzdCBz
cGFjZSBpcyBiZWZvcmUgYW55IGNvbnRlbnQgaW4gdGhlIHNpbXBsaWZpZWQgcGFyYW1ldGVyLgog
ICAgIGJlZm9yZV9uYW1lX2luZGV4ID0gc2tlbGV0b25fcGFyYW1ldGVyLnJzdHJpcCgpLnJmaW5k
KCcgJykKQEAgLTE3NzYsNiArMTc3Niw4IEBAIGRlZiBfY2hlY2tfcGFyYW1ldGVyX25hbWVfYWdh
aW5zdF90ZXh0KHBhcmFtZXRlciwgdGV4dCwgZXJyb3IpOgogICAgICMgY2FzZSBpbnNlbnNpdGl2
ZSB3aGlsZSBzdGlsbCByZXRhaW5pbmcgd29yZCBicmVha3MuIChUaGlzIGVuc3VyZXMgdGhhdAog
ICAgICMgJ2VsYXRlJyBkb2Vzbid0IGxvb2sgbGlrZSBpdCBpcyBkdXBsaWNhdGluZyBvZiAnTmF0
ZUxhdGUnLikKICAgICBjYW5vbmljYWxfcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIubG93ZXJf
d2l0aF91bmRlcnNjb3Jlc19uYW1lKCkKKyAgICBpZiBjYW5vbmljYWxfcGFyYW1ldGVyX25hbWUg
PT0gIl0iOgorICAgICAgICByZXR1cm4gVHJ1ZSAgIyBXb3JrIGFyb3VuZCBhIGJ1ZyBwYXJzaW5n
IHNvbWUgT2JqZWN0aXZlLUMgY29kZS4KIAogICAgICMgQXBwZW5kcyAib2JqZWN0IiB0byBhbGwg
dGV4dCB0byBjYXRjaCB2YXJpYWJsZXMgdGhhdCBkaWQgdGhlIHNhbWUgKGJ1dCBvbmx5CiAgICAg
IyBkbyB0aGlzIHdoZW4gdGhlIHBhcmFtZXRlciBuYW1lIGlzIG1vcmUgdGhhbiBhIHNpbmdsZSBj
aGFyYWN0ZXIgdG8gYXZvaWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvY29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KaW5kZXgg
ZGIzYzI4OTMxZDA1ZjU0MjA2YjFiZjVkNTI5ODE0ODQ5OThhYTI0MC4uYjViM2MyMjg2ZDQ5M2Iy
ODM5OWJhNDE3NzdkNWRhNmUwZmRkNjk1NiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29jb2EubW0KKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29j
b2EubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1N0cmluZ0NGLmg+CiAj
aW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
KyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgVVNFKEFQUEtJVCkKICNp
bXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KQEAgLTU0LDEwICs1NSwxMCBAQCBzdGF0aWMgTlNVUkwg
KnJlc291cmNlc0RpcmVjdG9yeVVSTCgpCiAKIC8vIEFjdGl2YXRpbmcgc3lzdGVtIGNvcGllcyBv
ZiB0aGVzZSBmb250cyBvdmVycmlkZXMgYW55IG90aGVycyB0aGF0IGNvdWxkIGJlIHByZWZlcnJl
ZCwgc3VjaCBhcyBvbmVzCiAvLyBpbiAvTGlicmFyeS9Gb250cy9NaWNyb3NvZnQsIGFuZCB3aGlj
aCBkb24ndCBhbHdheXMgaGF2ZSB0aGUgc2FtZSBtZXRyaWNzLgotLy8gRklYTUU6IFN3aXRjaCB0
byBhIHNvbHV0aW9uIGZyb20gPHJkYXI6Ly9wcm9ibGVtLzE5NTUzNTUwPiBvbmNlIGl0J3MgYXZh
aWxhYmxlLgorLy8gRklYTUU6IE5vdyB0aGF0IDxyZGFyOi8vcHJvYmxlbS8xOTU1MzU1MD4gaGFz
IGJlZW4gcmVzb2x2ZWQgd2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgc29sdXRpb24uCiBzdGF0aWMg
dm9pZCBhY3RpdmF0ZVN5c3RlbUNvcmVXZWJGb250cygpCiB7Ci0gICAgTlNBcnJheSAqY29yZVdl
YkZvbnROYW1lcyA9IEBbCisgICAgY29uc3RleHByIE5TU3RyaW5nICpjb3JlV2ViRm9udE5hbWVz
W10gPSB7CiAgICAgICAgIEAiQW5kYWxlIE1vbm8iLAogICAgICAgICBAIkFyaWFsIiwKICAgICAg
ICAgQCJBcmlhbCBCbGFjayIsCkBAIC02OSw3ICs3MCw3IEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRl
U3lzdGVtQ29yZVdlYkZvbnRzKCkKICAgICAgICAgQCJUcmVidWNoZXQgTVMiLAogICAgICAgICBA
IlZlcmRhbmEiLAogICAgICAgICBAIldlYmRpbmdzIgotICAgIF07CisgICAgfTsKIAogICAgIE5T
QXJyYXkgKmZvbnRGaWxlcyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY29udGVu
dHNPZkRpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvTGlicmFyeS9Gb250
cyIgaXNEaXJlY3Rvcnk6WUVTXQogICAgICAgICBpbmNsdWRpbmdQcm9wZXJ0aWVzRm9yS2V5czpA
W05TVVJMRmlsZVJlc291cmNlVHlwZUtleSwgTlNVUkxOYW1lS2V5XSBvcHRpb25zOjAgZXJyb3I6
MF07CkBAIC04NSw3ICs4Niw3IEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlU3lzdGVtQ29yZVdlYkZv
bnRzKCkKIAogICAgICAgICAvLyBBY3RpdmF0ZSBhbGwgZm9udCB2YXJpYXRpb25zLCBzdWNoIGFz
IEFyaWFsIEJvbGQgSXRhbGljLnR0Zi4gVGhpcyBhbGdvcml0aG0gaXMgbm90IDEwMCUgcHJlY2lz
ZSwgYXMgaXQKICAgICAgICAgLy8gYWxzbyBhY3RpdmF0ZXMgZS5nLiBBcmlhbCBVbmljb2RlLCB3
aGljaCBpcyBub3QgYSB2YXJpYXRpb24gb2YgQXJpYWwuCi0gICAgICAgIGZvciAoTlNTdHJpbmcg
KmNvcmVXZWJGb250TmFtZSBpbiBjb3JlV2ViRm9udE5hbWVzKSB7CisgICAgICAgIGZvciAoYXV0
byYgY29yZVdlYkZvbnROYW1lIDogY29yZVdlYkZvbnROYW1lcykgewogICAgICAgICAgICAgaWYg
KFtmaWxlTmFtZSBoYXNQcmVmaXg6Y29yZVdlYkZvbnROYW1lXSkgewogICAgICAgICAgICAgICAg
IENGRXJyb3JSZWYgZXJyb3IgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIGlmICghQ1RGb250
TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JVUkwoKF9fYnJpZGdlIENGVVJMUmVmKWZvbnRVUkwsIGtD
VEZvbnRNYW5hZ2VyU2NvcGVQcm9jZXNzLCAmZXJyb3IpKSB7CkBAIC0xMDIsMzAgKzEwMywyNyBA
QCBzdGF0aWMgdm9pZCBhY3RpdmF0ZVN5c3RlbUNvcmVXZWJGb250cygpCiAKIHZvaWQgYWN0aXZh
dGVGb250cygpCiB7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGaWxlTmFtZXNbXSA9IHsK
LSAgICAgICAgIkFIRU1fX19fLlRURiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyMTAw
LnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiIsCi0gICAgICAgICJX
ZWJLaXRXZWlnaHRXYXRjaGVyMzAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVy
NDAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyNTAwLnR0ZiIsCi0gICAgICAg
ICJXZWJLaXRXZWlnaHRXYXRjaGVyNjAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRj
aGVyNzAwLnR0ZiIsCi0gICAgICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiIsCi0gICAg
ICAgICJXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiIsCi0gICAgICAgICJGb250V2l0aEZlYXR1
cmVzLm90ZiIsCi0gICAgICAgICJGb250V2l0aEZlYXR1cmVzLnR0ZiIsCi0gICAgICAgIDAKKyAg
ICBjb25zdGV4cHIgTlNTdHJpbmcgKmZvbnRGaWxlTmFtZXNbXSA9IHsKKyAgICAgICAgQCJBSEVN
X19fXy5UVEYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmIiwKKyAgICAg
ICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0
V2F0Y2hlcjMwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI0MDAudHRmIiwK
KyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyNTAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0
V2VpZ2h0V2F0Y2hlcjYwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI3MDAu
dHRmIiwKKyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiIsCisgICAgICAgIEAi
V2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYiLAorICAgICAgICBAIkZvbnRXaXRoRmVhdHVyZXMu
b3RmIiwKKyAgICAgICAgQCJGb250V2l0aEZlYXR1cmVzLnR0ZiIsCiAgICAgfTsKIAotICAgIE5T
TXV0YWJsZUFycmF5ICpmb250VVJMcyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgZm9udEZpbGVOYW1lc1tpXTsgKytpKSB7Ci0gICAgICAgIE5TVVJM
ICpmb250VVJMID0gW3Jlc291cmNlc0RpcmVjdG9yeVVSTCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENv
bXBvbmVudDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6Zm9udEZpbGVOYW1lc1tpXV0g
aXNEaXJlY3Rvcnk6Tk9dOwotICAgICAgICBbZm9udFVSTHMgYWRkT2JqZWN0Oltmb250VVJMIGFi
c29sdXRlVVJMXV07Ci0gICAgfQorICAgIGF1dG8gZm9udFVSTHMgPSBjcmVhdGVOU0FycmF5KGZv
bnRGaWxlTmFtZXMsIFtdIChOU1N0cmluZyAqbmFtZSkgeworICAgICAgICByZXR1cm4gW3Jlc291
cmNlc0RpcmVjdG9yeVVSTCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpuYW1lIGlzRGly
ZWN0b3J5Ok5PXS5hYnNvbHV0ZVVSTDsKKyAgICB9KTsKIAogICAgIENGQXJyYXlSZWYgZXJyb3Jz
ID0gbnVsbHB0cjsKLSAgICBpZiAoIUNURm9udE1hbmFnZXJSZWdpc3RlckZvbnRzRm9yVVJMcygo
X19icmlkZ2UgQ0ZBcnJheVJlZilmb250VVJMcywga0NURm9udE1hbmFnZXJTY29wZVByb2Nlc3Ms
ICZlcnJvcnMpKSB7CisgICAgaWYgKCFDVEZvbnRNYW5hZ2VyUmVnaXN0ZXJGb250c0ZvclVSTHMo
KF9fYnJpZGdlIENGQXJyYXlSZWYpZm9udFVSTHMuZ2V0KCksIGtDVEZvbnRNYW5hZ2VyU2NvcGVQ
cm9jZXNzLCAmZXJyb3JzKSkgewogICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBhY3RpdmF0ZSBm
b250czogJUAiLCBlcnJvcnMpOwogICAgICAgICBDRlJlbGVhc2UoZXJyb3JzKTsKICAgICAgICAg
ZXhpdCgxKTsKQEAgLTEzMyw3ICsxMzEsNyBAQCB2b2lkIGFjdGl2YXRlRm9udHMoKQogCiAjaWYg
VVNFKEFQUEtJVCkKICAgICBhY3RpdmF0ZVN5c3RlbUNvcmVXZWJGb250cygpOwotI2VuZGlmIC8v
IFVTRShBUFBLSVQpCisjZW5kaWYKIH0KIAogdm9pZCBpbnN0YWxsRmFrZUhlbHZldGljYShXS1N0
cmluZ1JlZiBjb25maWd1cmF0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396916</attachid>
            <date>2020-04-19 10:10:46 -0700</date>
            <delta_ts>2020-04-20 00:05:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210702-20200419101045.patch</filename>
            <type>text/plain</type>
            <size>203217</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGIwZGE0NDFkNDE2ZTkyYzY0ZDg2OTY3
YzhmZDIwZDkzOTA4MWU4ZjYuLjViNDk3YzIyZTU4NzE1ZWVmNjBlMWE0MzZjZTdkNjZjODRiOTk1
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMDQtMTkgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gVXNlIGNyZWF0ZU5TQXJyYXkgaW4gbWFueSBt
b3JlIHBsYWNlcyB0aGF0IGJ1aWxkIE5TQXJyYXkgb2JqZWN0cyBmcm9tIEMrKyBjb2xsZWN0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNzAy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYv
Y29jb2EvVmVjdG9yQ29jb2EuaDogSW1wcm92ZWQgdGhlIGNyZWF0ZU5TQXJyYXkgZnVuY3Rpb24g
dGVtcGxhdGU6CisgICAgICAgIDEpIFNraXAgbmlsIHZhbHVlcy4gVGhpcyBtYXRjaGVzIHdoYXQg
d2UgZG8gd2l0aCBPcHRpb25hbDw+IGluIG1ha2VWZWN0b3IgYW5kCisgICAgICAgICAgIHdhcyBh
bHdheXMgbXkgaW50ZW50aW9uOyBhcHBhcmVudGx5IGZvcmdvdCB0byBkbyBpdC4KKyAgICAgICAg
MikgSW5zdGVhZCBvZiB0YWtpbmcgYSBjb25zdCByZWZlcmVuY2UgYXJndW1lbnQsIHRha2UgYSBm
b3J3YXJkaW5nIHJlZmVyZW5jZQorICAgICAgICAgICBhbmQgdXNlIGZvcndhcmRpbmcgd2hlbiBw
YXNzaW5nIGNvbGxlY3Rpb24gZWxlbWVudHMgdG8gbWFrZU5TQXJyYXlFbGVtZW50CisgICAgICAg
ICAgIG9yIHRoZSBwYXNzZWQtaW4gZnVuY3Rpb24uIENhbiB0cmFuc2ZlciBvd25lcnNoaXAgb2Yg
Y29sbGVjdGlvbiBlbGVtZW50cworICAgICAgICAgICBhcyB0aGV5IGFyZSB0cmFuc2Zvcm1lZCBp
bnRvIGFycmF5IGVsZW1lbnRzLCB3aGljaCBtYWtlcyBzZW5zZSBpZiB0aGUKKyAgICAgICAgICAg
T2JqZWN0aXZlLUMgb2JqZWN0cyBhcmUgd3JhcHBlcnMgdGhhdCB0YWtlIG93bmVyc2hpcCBvZiB3
aGF0J3Mgd3JhcHBlZC4KKyAgICAgICAgMykgVGFrZSBhbnkgY29sbGVjdGlvbiB0aGF0IHdvcmtz
IHdpdGggc3RkOjpzaXplIGFuZCBhIHJhbmdlLWJhc2VkIGZvciBsb29wLAorICAgICAgICAgICBu
byBsb25nZXIgcmVxdWlyaW5nIGEgc2l6ZSBtZW1iZXIgZnVuY3Rpb24uIEluY2x1ZGVzIGFycmF5
cy4KKyAgICAgICAgNCkgU2luY2UgdGhpcyBub3cgaW50ZW5kZWQgZm9yIHVzZSBvbiBjb2xsZWN0
aW9ucyBvdGhlciB0aGFuIFdURjo6VmVjdG9yLAorICAgICAgICAgICBhZGRlZCAidXNpbmcgV1RG
OjpjcmVhdGVOU0FycmF5IiBzaW5jZSBhcmd1bWVudC1kZXBlbmRlbnQgbG9va3VwIHdvbid0Cisg
ICAgICAgICAgIGZpbmQgdGhlIGZ1bmN0aW9uIHRlbXBsYXRlIGluIHRob3NlIGNhc2VzLgorCiAy
MDIwLTA0LTE4ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CiAKICAgICAg
ICAgU3VwcG9ydCBhbiBpbmxpbmVkIHJlcHJlc2VudGF0aW9uIGluIEpTVmFsdWUgb2Ygc21hbGwg
QmlnSW50cyAoIkJpZ0ludDMyIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjMjM2NmNjNmZlNjg4NGY3OTFiODYz
YjA5Zjc4ZWU5YzRhZDg1NDBiLi41ZDAwMGM1MTU1M2VkMzM4NzhkNGMwNzZkZWUzMGE4MmI4YmM4
NGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkgQEAKKzIwMjAtMDQtMTkgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gVXNlIGNyZWF0ZU5TQXJyYXkg
aW4gbWFueSBtb3JlIHBsYWNlcyB0aGF0IGJ1aWxkIE5TQXJyYXkgb2JqZWN0cyBmcm9tIEMrKyBj
b2xsZWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEwNzAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5t
bToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUZsb3dUb0VsZW1lbnRzXSk6IFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0UmVjdHNGcm9tTWFya2Vyczp3aXRoVGV4dDpdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJlY3RzRm9y
U2VsZWN0aW9uUmVjdHM6XSk6IERlbGV0ZWQuIE1lcmdlZCBpbnRvCisgICAgICAgIHRoZSBtZXRo
b2QgYWJvdmUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckJhc2UuaDogVGFrZSBjb25zdCByZWZlcmVuY2VzCisgICAgICAgIGluc3Rl
YWQgb2YgcmVmZXJlbmNlcyB3aGVuIHBhc3NpbmcgUGF0aCBhbmQgRmxvYXRSZWN0LgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5t
bToKKyAgICAgICAgKGNvbnZlcnRNYXRoUGFpcnNUb05TQXJyYXkpOiBVc2UgY3JlYXRlTlNBcnJh
eS4gQWxzbyB1c2UgYXJyYXlzIG9uIHRoZSBzdGFjaworICAgICAgICB0byBjcmVhdGUgTlNEaWN0
aW9uYXJ5IHJhdGhlciB0aGFuIHVzaW5nIE5TTXV0YWJsZURpY3Rpb25hcnkuCisgICAgICAgIChh
ZGRDaGlsZFRvQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoY29udmVydFRvTlNBcnJheSk6IFVz
ZXMgY3JlYXRlTlNBcnJheS4gUm9sbGVkIGFkZENoaWxkVG9BcnJheSBpbi4KKyAgICAgICAgKC1b
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGNvbnZlcnRQYXRoVG9TY3JlZW5TcGFj
ZTpdKTogVGFrZSBjb25zdAorICAgICAgICByZWZlcmVuY2UgaW5zdGVhZCBvZiByZWZlcmVuY2Uu
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBjb252ZXJ0UmVj
dFRvU3BhY2U6c3BhY2U6XSk6IERpdHRvLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJh
bWV0ZXI6XSk6CisgICAgICAgIFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAqIGVkaXRpbmcv
Y29jb2EvRm9udEF0dHJpYnV0ZXNDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRBdHRy
aWJ1dGVzOjpjcmVhdGVEaWN0aW9uYXJ5IGNvbnN0KTogRGl0dG8uCisgICAgICAgICogcGFnZS9p
b3MvRnJhbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aW50ZXJwcmV0YXRpb25z
Rm9yQ3VycmVudFJvb3QgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9T
ZWFyY2hQb3B1cE1lbnVDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNhdmVSZWNlbnRTZWFy
Y2hlcyk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29h
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVOU0RhdGFBcnJheSBj
b25zdCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVM
aWNlbnNlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW06CisgICAgICAgIChXZWJDb3Jl
OjpDRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6dXBkYXRlKTogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWU3RyZWFt
U2Vzc2lvbi5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246
OnVwZGF0ZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW06CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0
Rm9yVVJMKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFu
aW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0S2V5VGltZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VGltaW5nRnVuY3Rpb25zKTogRGl0dG8u
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVy
c0NvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRl
cnNPbkxheWVyKTogTW92ZWQgYWxtb3N0IHRoZSB3aG9sZQorICAgICAgICBmdW5jdGlvbiBpbnRv
IGEgY2FsbCB0byBjcmVhdGVOU0FycmF5LiBSZW1vdmVkIHRoZSBkZWZhdWx0IGNhc2UgZnJvbQor
ICAgICAgICB0aGUgc3dpdGNoIHNvIHdlIGdldCBhIHdhcm5pbmcgaWYgd2UgbWlzcyBhbnkgZmls
dGVyIG9wZXJhdGlvbiB0eXBlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2Nv
Y29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1D
QUxheWVyQ29jb2E6OnNldFN1YmxheWVycyk6IFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6
bWVkaWFTZWxlY3Rpb25PcHRpb25zKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bs
YXRmb3JtUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVi
b2FyZDo6d3JpdGUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tD
b250cm9sc01hbmFnZXIubW06CisgICAgICAgIChtZWRpYVNlbGVjdGlvbk9wdGlvbnMpOiBEaXR0
by4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRD
b29raWVzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9SZXNvdXJj
ZVJlcXVlc3RDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG9V
cGRhdGVQbGF0Zm9ybVJlcXVlc3QpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oOgorICAgICAgICBVc2UgdGhlIE9iamVjdGl2
ZS1DIHR5cGUgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIGluIHRoZSBfZGF0YVRhc2tzCisg
ICAgICAgIHNldCByYXRoZXIgdGhhbiB1c2luZyBDRlR5cGVSZWYuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW06CisgICAgICAgICgtW1dl
YkNvcmVOU1VSTFNlc3Npb24gZGVhbGxvY10pOiBSZW1vdmUgbm93LXVubmVlZGVkIHR5cGVjYXN0
LgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uIHRhc2tDb21wbGV0ZWQ6XSk6IERpdHRv
LgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uIGZpbmlzaFRhc2tzQW5kSW52YWxpZGF0
ZV0pOiBVc2UgYSBtb3JlIGlkaW9tYXRpYworICAgICAgICBmb3JtIG9mIGNhcHR1cmluZyBzdHJv
bmdTZWxmIGluIGEgbGFtYmRhLgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uIGludmFs
aWRhdGVBbmRDYW5jZWxdKTogVXBkYXRlZCB0aGUgdHlwZSBvbiBhCisgICAgICAgIGxvY2FsIHZh
cmlhYmxlIGFuZCByZW1vdmVkIG5vdy11bm5lZWRlZCB0eXBlY2FzdC4KKyAgICAgICAgKC1bV2Vi
Q29yZU5TVVJMU2Vzc2lvbiBnZXRUYXNrc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpdKTogVXNlIFJl
dGFpblB0cgorICAgICAgICB0byBjdXQgZG93biBvbiBhdXRvcmVsZWFzZS4gVXNlIGNyZWF0ZU5T
QXJyYXksIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlCisgICAgICAgIGZhY3QgdGhhdCBpdCB3b3Jr
cyBvbiBIYXNoU2V0LiBSZW1vdmVkIG5vdy11bm5lZWRlZCB0eXBlY2FzdC4KKyAgICAgICAgKC1b
V2ViQ29yZU5TVVJMU2Vzc2lvbiBnZXRBbGxUYXNrc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb24gZGF0YVRhc2tXaXRoUmVxdWVz
dDpdKTogUmVtb3ZlIG5vdy11bm5lZWRlZCB0eXBlY2FzdC4KKyAgICAgICAgKC1bV2ViQ29yZU5T
VVJMU2Vzc2lvbiBkYXRhVGFza1dpdGhVUkw6XSk6IERpdHRvLgorCiAyMDIwLTA0LTE5ICBFbWls
aW8gQ29ib3Mgw4FsdmFyZXogIDxlbWlsaW9AY3Jpc2FsLmlvPgogCiAgICAgICAgIEZpeCB0aGUg
bG9naWMgdG8gZGVjaWRlIHdoZXRoZXIgYSBwcm9wZXJ0eSBpcyBlbnVtZXJhdGVkIGluIGEgY29t
cHV0ZWQgc3R5bGUgZGVjbGFyYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUxYmI1ZTAwNjVlYjA1MzUwMGI5
YTUzOWVmNGQyNDczYjA5OTBhM2EuLjcxNmI5MmZhNzhkMDEzODE0YjE1ZGI1NDU0ZmNjZTc1ZjU3
OTQ0NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUgQEAKKzIwMjAtMDQtMTkgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gVXNlIGNyZWF0ZU5TQXJyYXkg
aW4gbWFueSBtb3JlIHBsYWNlcyB0aGF0IGJ1aWxkIE5TQXJyYXkgb2JqZWN0cyBmcm9tIEMrKyBj
b2xsZWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEwNzAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybS9jb2NvYS9QYXltZW50QXV0aG9yaXphdGlvblByZXNlbnRlci5tbToKKyAg
ICAgICAgKFdlYktpdDo6dG9OU0Vycm9ycyk6IFVzZSBjcmVhdGVOU0FycmF5IGFuZCByZXR1cm4g
YSBSZXRhaW5QdHIgdG8gY3V0IGRvd24KKyAgICAgICAgb24gYXV0b3JlbGVhc2UuCisgICAgICAg
IChXZWJLaXQ6OnRvUEtTaGlwcGluZ01ldGhvZHMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
UGF5bWVudEF1dGhvcml6YXRpb25QcmVzZW50ZXI6OmNvbXBsZXRlUGF5bWVudFNlc3Npb24pOiBV
cGRhdGVkIGZvciBSZXRhaW5QdHIuCisgICAgICAgIChXZWJLaXQ6OlBheW1lbnRBdXRob3JpemF0
aW9uUHJlc2VudGVyOjpjb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbik6IERpdHRvLgor
CisgICAgICAgICogU2hhcmVkL0FwcGxlUGF5L2NvY29hL1dlYlBheW1lbnRDb29yZGluYXRvclBy
b3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBheW1lbnRDb29yZGluYXRvclByb3h5
OjpwbGF0Zm9ybVBheW1lbnRSZXF1ZXN0KTogVXNlIGNyZWF0ZU5TQXJyYXkuCisgICAgICAgIEFs
c28gcmVtb3ZlZCBjb2RlIHRvIHN1cHBvcnQgcGxhdGZvcm1zIHdpdGhvdXQgLXNldFRodW1ibmFp
bFVSTHM6IHNpbmNlIHdlIGRvbid0CisgICAgICAgIGhhdmUgdGhvc2UgYW55IG1vcmUuCisKKyAg
ICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBw
bGllci5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVy
Ojp1cGRhdGVDaGlsZHJlbik6IFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06CisgICAgICAgIChjb3JlQ29va2llc1Rv
TlNDb29raWVzKTsgRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nl
c3NQb29sLm1tOgorICAgICAgICAoK1tXS1Byb2Nlc3NQb29sIF9hbGxQcm9jZXNzUG9vbHNGb3JU
ZXN0aW5nXSk6IERpdHRvLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhD
b25maWd1cmF0aW9uOmNvbXBsZXRpb246XSk6IEN1dCBkb3duIG9uCisgICAgICAgIHJlcGVhdGVk
IGNvZGUgYnkgYWRkaW5nIGEgbGFtYmRhIHRvIGNyZWF0ZSBhIF9XS1RleHRNYW5pcHVsYXRpb25J
dGVtIGFuZCBieSB1c2luZworICAgICAgICBjcmVhdGVOU0FycmF5LgorICAgICAgICAod2tUZXh0
TWFuaXB1bGF0aW9uRXJyb3JzKTogVXNlIGNyZWF0ZU5TQXJyYXkuIEFsc28gdGlnaHRlbiB1cCB0
aGUgY29kZSB0aGF0IG1hcHMKKyAgICAgICAgV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6Ok1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlIHRvIHRoZQorICAgICAgICBfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbUVycm9yIGNvZGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2VicGFnZVByZWZlcmVuY2VzLm1tOgorICAgICAgICAoLVtXS1dlYnBhZ2VQcmVmZXJlbmNl
cyBfY3VzdG9tSGVhZGVyRmllbGRzXSk6IFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVJlY29yZC5tbToKKyAgICAgICAgKC1bV0tX
ZWJzaXRlRGF0YVJlY29yZCBfb3JpZ2luc1N0cmluZ3NdKTogRGl0dG8uCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW06CisgICAgICAgICgtW1dLV2Vi
c2l0ZURhdGFTdG9yZSBfZ2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5Ol0pOiBE
aXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS0Rvd25sb2FkLm1tOgorICAg
ICAgICAoLVtfV0tEb3dubG9hZCByZWRpcmVjdENoYWluXSk6IERpdHRvLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLRnJhbWVUcmVlTm9kZS5tbToKKyAgICAgICAgKC1bX1dLRnJh
bWVUcmVlTm9kZSBjaGlsZEZyYW1lc10pOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbToKKyAgICAgICAgKC1bX1dLUHJv
Y2Vzc1Bvb2xDb25maWd1cmF0aW9uIGFkZGl0aW9uYWxSZWFkQWNjZXNzQWxsb3dlZFVSTHNdKTog
RGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGhpcmRQYXJ0eS5tbToKKyAgICAgICAgKC1bX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RoaXJkUGFydHkgdW5kZXJGaXJzdFBhcnRpZXNdKTogRGl0dG8uCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2FjY2Vz
c2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6d2l0aFRleHQ6Y29tcGxldGlv
bkhhbmRsZXI6XSk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9u
U3RhdGUubW06CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNs
aWVudDo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KTogRGl0dG8uCisgICAgICAgICogVUlQcm9j
ZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURh
dGEubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1h
bmNlRGF0YTo6ZGF0YSk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvRHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlLm1tOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVUYXJnZXRlZERyYWdQ
cmV2aWV3KTogRGl0dG8uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfdXBkYXRlVGFwSGlnaGxp
Z2h0XSk6IFJlbW92ZWQgdW5lZWRlZCBSZXRhaW5QdHIgbG9jYWwgdmFyaWFibGUuCisgICAgICAg
IFVzZSBjcmVhdGVOU0FycmF5LiBSZWZhY3RvcmVkIHRvIG1ha2UgdGhlICJhbGwgcmVjdGlsaW5l
YXIiIGNhc2UgbW9yZSBwYXJhbGxlbAorICAgICAgICB0byB0aGUgZ2VuZXJhbCBjYXNlLgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IHdlYlNlbGVjdGlvblJlY3RzRm9yU2VsZWN0aW9uUmVjdHM6
XSk6IFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAod2tUZXh0U2VsZWN0aW9uUmVjdHMpOiBE
aXR0by4KKyAgICAgICAgKGNyZWF0ZVRhcmdldGVkUHJldmlldyk6IERpdHRvLgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IF9wcmVzZW50YXRpb25SZWN0c0ZvclByZXZpZXdJdGVtQ29udHJvbGxl
cjpdKTogRGl0dG8uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVu
dC5tbToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyQ2xpZW50IGRpZEZpbmRTdHJpbmdNYXRjaGVz
V2l0aFJlY3RzOmRpZFdyYXBBcm91bmQ6XSk6IFVzZSBjcmVhdGVOU0FycmF5LgorCisgICAgICAg
ICogVUlQcm9jZXNzL21hYy9XS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubW06CisgICAgICAg
ICgtW1dLVGV4dElucHV0VmlldyB2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0XSk6IFVzZSAr
W05TQXJyYXkgYXJyYXlCeUFkZGluZ09iamVjdDpdLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW06CisgICAg
ICAgIChjb2xsZWN0SWNvbnMpOiBVc2UgY3JlYXRlTlNBcnJheS4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29u
dGV4dENvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJD
b250ZXh0Q29udHJvbGxlciBfc2V0Rm9ybURlbGVnYXRlOl0pOiBNYXJrZWQgY2xhc3MgaGVyZQor
ICAgICAgICBhcyBmaW5hbC4gQ3V0IGRvd24gb24gbG9jYWwgdmFyaWFibGVzIGEgYml0LiBVc2Ug
Y3JlYXRlTlNBcnJheS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXll
clRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAgICAgKFdlYktpdDo6YWRk
QW5pbWF0aW9uVG9MYXllcik6IFJlbW92ZWQgdW5uZWNlc3NhcnkgdXNlIG9mIFJldGFpblB0ci4g
VXNlIGNyZWF0ZU5TQXJyYXkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFj
a0ZvcndhcmRMaXN0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExp
c3RQcm94eTo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHkpOiBBZGRkIGEgRklYTUUgYWJvdXQKKyAg
ICAgICAgYSBwcm9ibGVtIEkgbm90aWNlZCwgdW5yZWxhdGVkIHRvIHRoZSByZXN0IG9mIHRoZSBj
aGFuZ2VzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxp
dHlXZWJQYWdlT2JqZWN0TWFjLm1tOgorICAgICAgICAoLVtXS0FjY2Vzc2liaWxpdHlXZWJQYWdl
T2JqZWN0IGFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXNdKTogVXNlIGNy
ZWF0ZU5TQXJyYXkuCisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnJlZ2lzdGVyV2l0aFN0YXRlRHVtcGVy
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OmFjdGl2ZVBhZ2VzT3JpZ2lucyk6IERpdHRvLgor
CiAyMDIwLTA0LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBV
cGRhdGUgaGVhZGVyIHBvc3Rwcm9jZXNzaW5nIHZlcnNpb24gY3V0b2ZmIHRvIGtlZXAgQXBwbGUg
aW50ZXJuYWwgYnVpbGRzIHdvcmtpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
aW9zL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZwppbmRleCA5
MmRkMzc1OWE4MTljYjY1OTMwZDY2YWQ1Y2FlYzYxZTVlOWIzNTFkLi4wNDI4Yzk1ZjA2OTgxMmFk
ZDQ2YzJjNzNmNTBlMzRjN2FmNDA5YmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMjAtMDQtMTkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFtDb2NvYV0gVXNlIGNyZWF0ZU5TQXJyYXkgaW4gbWFueSBtb3JlIHBsYWNl
cyB0aGF0IGJ1aWxkIE5TQXJyYXkgb2JqZWN0cyBmcm9tIEMrKyBjb2xsZWN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNzAyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUlPUy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNGb3JD
b3JlUmFuZ2U6XSk6IFVzZSBjcmVhdGVOU0FycmF5LgorCiAyMDIwLTA0LTE4ICBSb2IgQnVpcyAg
PHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmVkdWNlIHBhcmFtZXRlciBsaXN0IG9mIHRo
ZSBGcmFtZUxvYWRSZXF1ZXN0IGNvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
aW5kZXggYWZkYjA4NWFmOGU5MGFjNzc0NWIwYmRiMTI0Yjk3NzFhODBiMDE3ZS4uMWM0NWVmNzQ0
NWVkMjU1MmIwNTI2YTgyNTQwZGVmZDQ5MDU1ODQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIwLTA0LTE5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIFVzZSBjcmVhdGVOU0FycmF5IGluIG1hbnkgbW9y
ZSBwbGFjZXMgdGhhdCBidWlsZCBOU0FycmF5IG9iamVjdHMgZnJvbSBDKysgY29sbGVjdGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDcwMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RP
TS5tbToKKyAgICAgICAgKGtpdCk6IFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAoLVtET01O
b2RlIGdldFByZXZpZXdTbmFwc2hvdEltYWdlOmFuZFJlY3RzOl0pOiBEaXR0by4gQWxzbyB1c2Ug
bWFrZU5TQXJyYXlFbGVtZW50CisgICAgICAgIHRvIGNvbnZlcnQgRmxvYXRSZWN0IHRvIGFuIE5T
VmFsdWUgY29udGFpbmluZyBhIENHUmVjdCwgYXZvaWRpbmcgdXNlIG9mCisgICAgICAgICtbTlNW
YWx1ZSB2YWx1ZTp3aXRoT2JqQ1R5cGU6XSwgd2hpbGUgd29ya2luZyBvbiBtYWNPUyB3aGVyZSAr
W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0Ol0KKyAgICAgICAgaXMgbm90IHBhcnQgb2YgQVBJLgor
CisgICAgICAgICogSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW06CisgICAgICAgICgtW1dl
YkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5UmVwcmVzZW50YXRpb25dKTogVXNlIGNyZWF0ZU5T
QXJyYXksIGZld2VyIGxvY2FsCisgICAgICAgIHZhcmlhYmxlcywgYW5kIHVzZSBjb25zdGV4cHIg
aW5zdGVhZCBvZiAjZGVmaW5lLgorICAgICAgICAoLVtXZWJCYWNrRm9yd2FyZExpc3Qgc2V0VG9N
YXRjaERpY3Rpb25hcnlSZXByZXNlbnRhdGlvbjpdKTogVXNlIGFkb3B0TlMgaW5zdGVhZAorICAg
ICAgICBvZiBleHBsaWNpdCByZWxlYXNlIGFuZCByZWZlcmVuY2UgaW5zdGVhZCBvZiBwb2ludGVy
LgorICAgICAgICAodmVjdG9yVG9OU0FycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViQmFj
a0ZvcndhcmRMaXN0IGJhY2tMaXN0V2l0aExpbWl0Ol0pOiBVc2UgY3JlYXRlTlNBcnJheS4gQWxz
byB1c2UgUmV0YWluUHRyIGZvcgorICAgICAgICB0aGUgImhhY2siIGhlcmUgcmF0aGVyIHRoYW4g
ZXhwbGljaXQgcmV0YWluL3JlbGVhc2UgY2FsbHMuCisgICAgICAgICgtW1dlYkJhY2tGb3J3YXJk
TGlzdCBmb3J3YXJkTGlzdFdpdGhMaW1pdDpdKTogRGl0dG8uCisKKyAgICAgICAgKiBIaXN0b3J5
L1dlYkhpc3RvcnlJdGVtLm1tOgorICAgICAgICAoa2l0KTogQWRkZWQgYSByZXRhaW4vYXV0b3Jl
bGVhc2UgcGFpciB0aGF0IGlzIGltcG9ydGFudCB0byBoYXZlIHByZWRpY3RhYmxlIGxpZmV0aW1l
LgorICAgICAgICAoLVtXZWJIaXN0b3J5SXRlbSBpbml0V2l0aFVSTFN0cmluZzp0aXRsZTpkaXNw
bGF5VGl0bGU6bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6XSk6CisgICAgICAgIEFkZGVkIGEgbWlz
c2luZyBudWxsIGNoZWNrLgorICAgICAgICAoLVtXZWJIaXN0b3J5SXRlbSBpbml0V2l0aFdlYkNv
cmVIaXN0b3J5SXRlbTpdKTogQWRkZWQgYSBGSVhNRSBhYm91dCBzb21ldGhpbmcgSQorICAgICAg
ICBub3RpY2VkIHRoYXQgaXMgbm90IHJlbGF0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhpcyBwYXRjaC4K
KyAgICAgICAgKC1bV2ViSGlzdG9yeUl0ZW0gY2hpbGRyZW5dKTogVXNlIGNyZWF0ZU5TQXJyYXku
CisgICAgICAgICgtW1dlYkhpc3RvcnlJdGVtIF9yZWRpcmVjdFVSTHNdKTogRGl0dG8uCisKKyAg
ICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAgICAoY3JlYXRlTlNDb3Vu
dGVkU2V0KTogQWRkZWQuIE1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9sZCBjb2RlIGJlY2F1c2Ug
aXQgZG9lc24ndAorICAgICAgICBjcmVhdGUgbWFueSBOU1N0cmluZyBvYmplY3RzIGZvciBlYWNo
IGtleSwgYnV0IGFsc28gc2hhcmVkIGJldHdlZW4gZnVuY3Rpb25zLgorICAgICAgICAoK1tXZWJD
b3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c10pOiBVc2Ug
Y3JlYXRlTlNDb3VudGVkU2V0LgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2Ny
aXB0T2JqZWN0VHlwZUNvdW50c10pOiBEaXR0by4KKworICAgICAgICAqIE1pc2MvV2ViTlNQYXN0
ZWJvYXJkRXh0cmFzLm1tOgorICAgICAgICAoLVtOU1Bhc3RlYm9hcmQgX3dlYl9kZWNsYXJlQW5k
V3JpdGVEcmFnSW1hZ2VGb3JFbGVtZW50OlVSTDp0aXRsZTphcmNoaXZlOnNvdXJjZTpdKToKKyAg
ICAgICAgVXNlIEBbXSBpbnN0ZWFkIG9mIE5TTXV0YWJsZUFycmF5CisKKyAgICAgICAgKiBTdG9y
YWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbToKKyAgICAgICAgKC1bV2ViRGF0YWJhc2VNYW5hZ2Vy
IG9yaWdpbnNdKTogVXNlIGNyZWF0ZU5TQXJyYXkuCisgICAgICAgICogU3RvcmFnZS9XZWJTdG9y
YWdlTWFuYWdlci5tbToKKyAgICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgb3JpZ2luc10pOiBE
aXR0by4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlLm1tOgor
ICAgICAgICAoK1tXZWJBcHBsaWNhdGlvbkNhY2hlIG9yaWdpbnNXaXRoQ2FjaGVdKTogRGl0dG8u
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAo
V2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW06Cisg
ICAgICAgIChXZWJOb3RpZmljYXRpb25DbGllbnQ6OmNsZWFyTm90aWZpY2F0aW9ucyk6IERpdHRv
LgorICAgICAgICAqIFdlYlZpZXcvV2ViQXJjaGl2ZS5tbToKKyAgICAgICAgKC1bV2ViQXJjaGl2
ZSBzdWJyZXNvdXJjZXNdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkFyY2hpdmUgc3ViZnJhbWVB
cmNoaXZlc10pOiBEaXR0by4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkRhdGFTb3VyY2UubW06Cisg
ICAgICAgICgtW1dlYkRhdGFTb3VyY2Ugc3VicmVzb3VyY2VzXSk6IERpdHRvLgorCisgICAgICAg
ICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX25vZGVzRnJvbUxp
c3Q6XSk6IERlbGV0ZWQuIFRoaXMgd2FzIG5vdCBkZWNsYXJlZCBpbiBhbnkgaGVhZGVyIGFuZAor
ICAgICAgICB3YXMgYWxzbyB1bnVzZWQuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lVmll
dy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IGluaXRXaXRoRnJhbWU6XSk6IEFkZGVkIGEg
RklYTUUgYWJvdXQgc29tZXRoaW5nIEkgbm90aWNlZCB0aGF0IGlzCisgICAgICAgIG5vdCByZWxh
dGVkIHRvIHRoZSByZXN0IG9mIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhU
TUxSZXByZXNlbnRhdGlvbi5tbToKKyAgICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGNv
bnRyb2xzSW5Gb3JtOl0pOiBVc2UgY3JlYXRlTlNBcnJheS4KKworICAgICAgICAqIFdlYlZpZXcv
V2ViSFRNTFZpZXcubW06CisgICAgICAgIChjcmVhdGVNZW51SXRlbXMpOiBVc2UgY3JlYXRlTlNB
cnJheS4gQWxzbyBtb3ZlZCB1cCBpbiB0aGUgZmlsZS4KKyAgICAgICAgKGNyZWF0ZU1lbnVJdGVt
KTogUmVtb3ZlZCB1bm5lZWRlZCBsb2NhbCB2YXJpYWJsZS4KKworICAgICAgICAqIFdlYlZpZXcv
V2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVUlUZXh0SW5kaWNhdG9yRGF0YSBpbml0V2l0aElt
YWdlOnRleHRJbmRpY2F0b3JEYXRhOnNjYWxlOl0pOgorICAgICAgICBVc2UgY3JlYXRlTlNBcnJh
eS4KKwogMjAyMC0wNC0xOCAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAg
IFJlZHVjZSBwYXJhbWV0ZXIgbGlzdCBvZiB0aGUgRnJhbWVMb2FkUmVxdWVzdCBjb25zdHJ1Y3Rv
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY29jb2EvVmVjdG9yQ29jb2EuaCBiL1NvdXJj
ZS9XVEYvd3RmL2NvY29hL1ZlY3RvckNvY29hLmgKaW5kZXggYjhjOTU2YTY4YTQzNDMxNTNmMTZh
M2M4OGJhZDYzNTU1YzYzZDdjOC4uNjViNTQ2ZTEyMmJiNmU0OGVjMjQ2YzBhNjNmODRiYjE0MmFk
MWI2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY29jb2EvVmVjdG9yQ29jb2EuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oCkBAIC0zNCw0MSArMzQsNDcgQEAg
bmFtZXNwYWNlIFdURiB7CiAKIC8vIFNwZWNpYWxpemUgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIGZ1
bmN0aW9ucyBieSBvdmVybG9hZGluZyB0aGUgbWFrZU5TQXJyYXlFbGVtZW50CiAvLyBmdW5jdGlv
bnMgYW5kIG1ha2VWZWN0b3JFbGVtZW50IGZ1bmN0aW9ucy4gVGhlIG1ha2VOU0FycmF5RWxlbWVu
dCBmdW5jdGlvbiB0YWtlcwotLy8gYSBjb25zdCYgdG8gYSB2ZWN0b3IgZWxlbWVudCBhbmQgY2Fu
IHJldHVybiBlaXRoZXIgYSBSZXRhaW5QdHI8aWQ+IG9yIGFuIGlkCisvLyBhIGNvbnN0JiB0byBh
IGNvbGxlY3Rpb24gZWxlbWVudCBhbmQgY2FuIHJldHVybiBlaXRoZXIgYSBSZXRhaW5QdHI8aWQ+
IG9yIGFuIGlkCiAvLyBpZiB0aGUgdmFsdWUgaXMgYXV0b3JlbGVhc2VkLiBUaGUgbWFrZVZlY3Rv
ckVsZW1lbnQgZnVuY3Rpb24gdGFrZXMgYW4gaWdub3JlZAogLy8gcG9pbnRlciB0byB0aGUgdmVj
dG9yIGVsZW1lbnQgdHlwZSwgbWFraW5nIGFyZ3VtZW50LWRlcGVuZGVudCBsb29rdXAgd29yaywg
YW5kIGFuCiAvLyBpZCBmb3IgdGhlIGFycmF5IGVsZW1lbnQsIGFuZCByZXR1cm5zIGFuIE9wdGlv
bmFsPFQ+IG9mIHRoZSB0aGUgdmVjdG9yIGVsZW1lbnQsCiAvLyBhbGxvd2luZyB1cyB0byBmaWx0
ZXIgb3V0IGFycmF5IGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBvZiB0aGUgZXhwZWN0ZWQgdHlwZS4K
IC8vCi0vLyAgICBSZXRhaW5QdHI8aWQ+IG1ha2VOU0FycmF5RWxlbWVudChjb25zdCBWZWN0b3JF
bGVtZW50VHlwZSYgdmVjdG9yRWxlbWVudCk7CisvLyAgICBSZXRhaW5QdHI8aWQ+IG1ha2VOU0Fy
cmF5RWxlbWVudChjb25zdCBDb2xsZWN0aW9uRWxlbWVudFR5cGUmIGNvbGxlY3Rpb25FbGVtZW50
KTsKIC8vICAgICAgICAtb3ItCiAvLyAgICBpZCBtYWtlTlNBcnJheUVsZW1lbnQoY29uc3QgVmVj
dG9yRWxlbWVudFR5cGUmIHZlY3RvckVsZW1lbnQpOwogLy8KIC8vICAgIE9wdGlvbmFsPFZlY3Rv
ckVsZW1lbnRUeXBlPiBtYWtlVmVjdG9yRWxlbWVudChjb25zdCBWZWN0b3JFbGVtZW50VHlwZSos
IGlkIGFycmF5RWxlbWVudCk7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+IFJldGFp
blB0cjxOU0FycmF5PiBjcmVhdGVOU0FycmF5KGNvbnN0IFZlY3RvclR5cGUmKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPiBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNBcnJh
eShDb2xsZWN0aW9uVHlwZSYmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvckVsZW1lbnRUeXBl
PiBWZWN0b3I8VmVjdG9yRWxlbWVudFR5cGU+IG1ha2VWZWN0b3IoTlNBcnJheSAqKTsKIAogLy8g
VGhpcyBvdmVybG9hZCBvZiBjcmVhdGVOU0FycmF5IHRha2VzIGEgZnVuY3Rpb24gdG8gbWFwIGVh
Y2ggdmVjdG9yIGVsZW1lbnQgdG8gYW4gT2JqZWN0aXZlLUMgb2JqZWN0LgogLy8gVGhlIG1hcCBm
dW5jdGlvbiBoYXMgdGhlIHNhbWUgaW50ZXJmYWNlIGFzIHRoZSBtYWtlTlNBcnJheUVsZW1lbnQg
ZnVuY3Rpb24gYWJvdmUsIGJ1dCBjYW4gYmUgYW55CiAvLyBmdW5jdGlvbiBpbmNsdWRpbmcgYSBs
YW1iZGEsIGEgZnVuY3Rpb24tbGlrZSBvYmplY3QsIG9yIEZ1bmN0aW9uPD4uCi10ZW1wbGF0ZTx0
eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBlbmFtZSBNYXBGdW5jdGlvblR5cGU+IFJldGFpblB0cjxO
U0FycmF5PiBjcmVhdGVOU0FycmF5KGNvbnN0IFZlY3RvclR5cGUmLCBjb25zdCBNYXBGdW5jdGlv
blR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlLCB0eXBlbmFtZSBNYXBG
dW5jdGlvblR5cGU+IFJldGFpblB0cjxOU0FycmF5PiBjcmVhdGVOU0FycmF5KENvbGxlY3Rpb25U
eXBlJiYsIGNvbnN0IE1hcEZ1bmN0aW9uVHlwZSYpOwogCiAvLyBJbXBsZW1lbnRhdGlvbiBkZXRh
aWxzIG9mIHRoZSBmdW5jdGlvbiB0ZW1wbGF0ZXMgYWJvdmUuCiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFZlY3RvclR5cGU+IFJldGFpblB0cjxOU0FycmF5PiBjcmVhdGVOU0FycmF5KGNvbnN0IFZlY3Rv
clR5cGUmIHZlY3RvcikKK2lubGluZSB2b2lkIGFkZFVubGVzc05pbChOU011dGFibGVBcnJheSAq
YXJyYXksIGlkIHZhbHVlKQogewotICAgIGF1dG8gYXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6dmVjdG9yLnNpemUoKV0pOwotICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpnZXRQdHIo
bWFrZU5TQXJyYXlFbGVtZW50KGVsZW1lbnQpKV07CisgICAgaWYgKHZhbHVlKQorICAgICAgICBb
YXJyYXkgYWRkT2JqZWN0OnZhbHVlXTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlv
blR5cGU+IFJldGFpblB0cjxOU0FycmF5PiBjcmVhdGVOU0FycmF5KENvbGxlY3Rpb25UeXBlJiYg
Y29sbGVjdGlvbikKK3sKKyAgICBhdXRvIGFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnN0ZDo6c2l6ZShjb2xsZWN0aW9uKV0pOworICAgIGZv
ciAoYXV0byYmIGVsZW1lbnQgOiBjb2xsZWN0aW9uKQorICAgICAgICBhZGRVbmxlc3NOaWwoYXJy
YXkuZ2V0KCksIGdldFB0cihtYWtlTlNBcnJheUVsZW1lbnQoc3RkOjpmb3J3YXJkPGRlY2x0eXBl
KGVsZW1lbnQpPihlbGVtZW50KSkpKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIE1hcEZ1bmN0aW9uVHlwZT4gUmV0YWluUHRy
PE5TQXJyYXk+IGNyZWF0ZU5TQXJyYXkoY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yLCBjb25zdCBN
YXBGdW5jdGlvblR5cGUmIGZ1bmN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5
cGUsIHR5cGVuYW1lIE1hcEZ1bmN0aW9uVHlwZT4gUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5T
QXJyYXkoQ29sbGVjdGlvblR5cGUmJiBjb2xsZWN0aW9uLCBjb25zdCBNYXBGdW5jdGlvblR5cGUm
IGZ1bmN0aW9uKQogewotICAgIGF1dG8gYXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6dmVjdG9yLnNpemUoKV0pOwotICAgIGZvciAoYXV0byYg
ZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpnZXRQdHIoZnVuY3Rp
b24oZWxlbWVudCkpXTsKKyAgICBhdXRvIGFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnN0ZDo6c2l6ZShjb2xsZWN0aW9uKV0pOworICAgIGZv
ciAoYXV0byYmIGVsZW1lbnQgOiBjb2xsZWN0aW9uKQorICAgICAgICBhZGRVbmxlc3NOaWwoYXJy
YXkuZ2V0KCksIGdldFB0cihmdW5jdGlvbihzdGQ6OmZvcndhcmQ8ZGVjbHR5cGUoZWxlbWVudCk+
KGVsZW1lbnQpKSkpOwogICAgIHJldHVybiBhcnJheTsKIH0KIApAQCAtODcsNCArOTMsNSBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JFbGVtZW50VHlwZT4gVmVjdG9yPFZlY3RvckVsZW1lbnRU
eXBlPiBtYWtlVmVjdG9yKE5TQXJyYQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAordXNpbmcgV1RG
OjpjcmVhdGVOU0FycmF5OwogdXNpbmcgV1RGOjptYWtlVmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbQppbmRleCBlNGYzOGUxNDMwMjdiYWU5ZGNhMTFkN2MyNzU2
NWRlOGI2NzkyMGUyLi5mZTNlMWY4ZDE2YzY1YzYwMzVhMTUzMzQwY2U1NTBjY2EyMDUyMDU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQpAQCAtNDUsNyArNDUsNiBA
QAogI2ltcG9ydCAiSFRNTElucHV0RWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCiAj
aW1wb3J0ICJJbnRSZWN0LmgiCi0jaW1wb3J0ICJJbnRTaXplLmgiCiAjaW1wb3J0ICJMb2NhbGl6
ZWRTdHJpbmdzLmgiCiAjaW1wb3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJSYW5nZS5oIgpAQCAtNTks
OCArNTgsOCBAQAogI2ltcG9ydCAiV0FLV2luZG93LmgiCiAjaW1wb3J0ICJXZWJDb3JlVGhyZWFk
LmgiCiAjaW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKLQogI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRl
eHQuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiBlbnVtIHsKICAgICBO
U0F0dGFjaG1lbnRDaGFyYWN0ZXIgPSAweGZmZmMgICAgLyogVG8gZGVub3RlIGF0dGFjaG1lbnRz
LiAqLwpAQCAtMTc3MywyMCArMTc3MiwxNyBAQCAtIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUZs
b3dUb0VsZW1lbnRzCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIGNoaWxkcmVuOwogICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhRmxvd1Rv
RWxlbWVudHMoY2hpbGRyZW4pOwogICAgIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNoaWxkcmVu
LnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJy
YXlXaXRoQ2FwYWNpdHk6bGVuZ3RoXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIg
PSBjaGlsZHJlbltpXS0+d3JhcHBlcigpOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KGNoaWxk
cmVuLCBbXSAoYXV0byYgY2hpbGQpIC0+IGlkIHsKKyAgICAgICAgYXV0byB3cmFwcGVyID0gY2hp
bGQtPndyYXBwZXIoKTsKICAgICAgICAgQVNTRVJUKHdyYXBwZXIpOwotICAgICAgICBpZiAoIXdy
YXBwZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoY2hpbGRyZW5baV0t
PmlzQXR0YWNobWVudCgpICYmIFt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XSkKLSAgICAgICAgICAg
IFthcnJheSBhZGRPYmplY3Q6W3dyYXBwZXIgYXR0YWNobWVudFZpZXddXTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDp3cmFwcGVyXTsKLSAgICB9Ci0gICAgcmV0
dXJuIGFycmF5OworICAgICAgICBpZiAoY2hpbGQtPmlzQXR0YWNobWVudCgpKSB7CisgICAgICAg
ICAgICBpZiAoYXV0byBhdHRhY2htZW50VmlldyA9IHdyYXBwZXIuYXR0YWNobWVudFZpZXcpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGF0dGFjaG1lbnRWaWV3OworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHdyYXBwZXI7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoaWQpYWNj
ZXNzaWJpbGl0eUxpbmtlZEVsZW1lbnQKQEAgLTI3MjcsMzEgKzI3MjMsMTggQEAgLSAoTlNBcnJh
eSAqKXRleHRSZWN0c0Zyb21NYXJrZXJzOihOU0FycmF5ICopbWFya2VycyB3aXRoVGV4dDooTlNT
dHJpbmcgKil0ZXh0CiB7CiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxs
XSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
W3NlbGYgcmFuZ2VGcm9tTWFya2VyczptYXJrZXJzIHdpdGhUZXh0OnRleHRdOworCisgICAgYXV0
byByYW5nZSA9IFtzZWxmIHJhbmdlRnJvbU1hcmtlcnM6bWFya2VycyB3aXRoVGV4dDp0ZXh0XTsK
ICAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICAKLSAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gc2VsZWN0aW9uUmVj
dHM7Ci0gICAgcmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9y
TGluZXMoc2VsZWN0aW9uUmVjdHMpOwotICAgIHJldHVybiBbc2VsZiByZWN0c0ZvclNlbGVjdGlv
blJlY3RzOnNlbGVjdGlvblJlY3RzXTsKLX0KIAotLSAoTlNBcnJheSAqKXJlY3RzRm9yU2VsZWN0
aW9uUmVjdHM6KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYpc2VsZWN0aW9u
UmVjdHMKLXsKLSAgICB1bnNpZ25lZCBzaXplID0gc2VsZWN0aW9uUmVjdHMuc2l6ZSgpOwotICAg
IGlmICghc2l6ZSkKKyAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gcmVjdHM7Cisg
ICAgcmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMo
cmVjdHMpOworICAgIGlmIChyZWN0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgCi0gICAgTlNNdXRhYmxlQXJyYXkgKnJlY3RzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0
aENhcGFjaXR5OnNpemVdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKysp
IHsKLSAgICAgICAgY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uUmVjdCYgY29yZVJlY3QgPSBzZWxl
Y3Rpb25SZWN0c1tpXTsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25SZWN0ID0gRmxvYXRSZWN0KGNv
cmVSZWN0LnJlY3QoKSk7Ci0gICAgICAgIENHUmVjdCByZWN0ID0gW3NlbGYgY29udmVydFJlY3RU
b1NwYWNlOnNlbGVjdGlvblJlY3Qgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6
U2NyZWVuXTsKLSAgICAgICAgW3JlY3RzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0
OnJlY3RdXTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlY3RzOworICAgIHJldHVybiBjcmVh
dGVOU0FycmF5KHJlY3RzLCBbJl0gKGF1dG8mIHJlY3QpIHsKKyAgICAgICAgcmV0dXJuIFtOU1Zh
bHVlIHZhbHVlV2l0aFJlY3Q6W3NlbGYgY29udmVydFJlY3RUb1NwYWNlOkZsb2F0UmVjdChyZWN0
LnJlY3QoKSkgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6U2NyZWVuXV07Cisg
ICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIg
Kil0ZXh0TWFya2VyRm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFz
ZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlLmgKaW5kZXggOWUxNjA0YWI4M2ViNWMyYjgyOWFmMmNjZjFjNDFmNjYz
YTQzNDU1Mi4uNjY4NTNmM2Y2Mzc0YzQ1MTFlMzBlMGFmZTkxMzcxMWYzMTA1NGQ1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmgKQEAgLTI2LDkgKzI2LDYgQEAKICAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2VfaAotI2RlZmluZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2VfaAotCiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIgogI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9Db3JlR3JhcGhpY3MuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC04Miw5ICs3
OSw5IEBAIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIC0gKHZvaWQpYWNjZXNzaWJpbGl0eVBvc3Rl
ZE5vdGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmljYXRpb25OYW1lOwogLSAodm9pZClhY2Nl
c3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOihOU1N0cmluZyAqKW5vdGlmaWNhdGlvbk5hbWUg
dXNlckluZm86KE5TRGljdGlvbmFyeSAqKXVzZXJJbmZvOwogCi0tIChDR1BhdGhSZWYpY29udmVy
dFBhdGhUb1NjcmVlblNwYWNlOihXZWJDb3JlOjpQYXRoICYpcGF0aDsKKy0gKENHUGF0aFJlZilj
b252ZXJ0UGF0aFRvU2NyZWVuU3BhY2U6KGNvbnN0IFdlYkNvcmU6OlBhdGgmKXBhdGg7CiAKLS0g
KENHUmVjdCljb252ZXJ0UmVjdFRvU3BhY2U6KFdlYkNvcmU6OkZsb2F0UmVjdCAmKXJlY3Qgc3Bh
Y2U6KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2Upc3BhY2U7CistIChDR1Jl
Y3QpY29udmVydFJlY3RUb1NwYWNlOihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKXJlY3Qgc3Bh
Y2U6KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2Upc3BhY2U7CiAKIC8vIE1h
dGggcmVsYXRlZCBmdW5jdGlvbnMKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5TWF0aFBvc3Rz
Y3JpcHRQYWlyczsKQEAgLTk5LDUgKzk2LDMgQEAgZXh0ZXJuIE5TQXJyYXkgKmNvbnZlcnRUb05T
QXJyYXkoY29uc3QgV2ViQ29yZTo6QVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGQKICNl
bmRpZgogCiBAZW5kCi0KLSNlbmRpZiAvLyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCmluZGV4IDcxODgy
Yjg1YWQzMzllMGI0ZjJhODY3ZDgxYjMxNjUzMWYyY2U0ZmYuLjhjN2Q1Y2MzNDFmZDNiY2YxY2U0
MTU4YjIxN2NiNGVlM2RjZmI3MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UubW0KQEAgLTY4LDEwICs2OCwxMiBAQAogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNv
Y29hLmg+CiAKICNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0ICJXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5oIgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvSElTZXJ2aWNlc1NQSS5oPgog
I2Vsc2UKICNpbXBvcnQgIldBS1ZpZXcuaCIKICNpbXBvcnQgIldBS1dpbmRvdy5oIgorI2ltcG9y
dCAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaCIKICNlbmRpZgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKQEAgLTI0OSwzNSArMjUxLDM0IEBAIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKIHN0YXRpYyBOU0FycmF5ICpjb252ZXJ0TWF0aFBhaXJzVG9OU0FycmF5KGNv
bnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWly
cyYgcGFpcnMsIE5TU3RyaW5nICpzdWJzY3JpcHRLZXksIE5TU3RyaW5nICpzdXBlcnNjcmlwdEtl
eSkKIHsKLSAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlX
aXRoQ2FwYWNpdHk6cGFpcnMuc2l6ZSgpXTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBw
YWlycykgewotICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpwYWlyRGljdGlvbmFyeSA9IFtO
U011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwotICAgICAgICBpZiAocGFpci5maXJzdCAm
JiBwYWlyLmZpcnN0LT53cmFwcGVyKCkgJiYgIXBhaXIuZmlyc3QtPmFjY2Vzc2liaWxpdHlJc0ln
bm9yZWQoKSkKLSAgICAgICAgICAgIFtwYWlyRGljdGlvbmFyeSBzZXRPYmplY3Q6cGFpci5maXJz
dC0+d3JhcHBlcigpIGZvcktleTpzdWJzY3JpcHRLZXldOwotICAgICAgICBpZiAocGFpci5zZWNv
bmQgJiYgcGFpci5zZWNvbmQtPndyYXBwZXIoKSAmJiAhcGFpci5zZWNvbmQtPmFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSkKLSAgICAgICAgICAgIFtwYWlyRGljdGlvbmFyeSBzZXRPYmplY3Q6cGFp
ci5zZWNvbmQtPndyYXBwZXIoKSBmb3JLZXk6c3VwZXJzY3JpcHRLZXldOwotICAgICAgICBbYXJy
YXkgYWRkT2JqZWN0OnBhaXJEaWN0aW9uYXJ5XTsKLSAgICB9Ci0gICAgcmV0dXJuIGFycmF5Owot
fQotCi1zdGF0aWMgdm9pZCBhZGRDaGlsZFRvQXJyYXkoQVhDb3JlT2JqZWN0JiBjaGlsZCwgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhcnJheSkKLXsKLSAgICBXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciAqd3JhcHBlciA9IGNoaWxkLndyYXBwZXIoKTsKLSAgICAvLyBXZSB3YW50IHRv
IHJldHVybiB0aGUgYXR0YWNobWVudCB2aWV3IGluc3RlYWQgb2YgdGhlIG9iamVjdCByZXByZXNl
bnRpbmcgdGhlIGF0dGFjaG1lbnQsCi0gICAgLy8gb3RoZXJ3aXNlLCB3ZSBnZXQgcGFsaW5kcm9t
ZSBlcnJvcnMgaW4gdGhlIEFYIGhpZXJhcmNoeS4KLSAgICBpZiAoY2hpbGQuaXNBdHRhY2htZW50
KCkgJiYgW3dyYXBwZXIgYXR0YWNobWVudFZpZXddKQotICAgICAgICBbYXJyYXkuZ2V0KCkgYWRk
T2JqZWN0Olt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XV07Ci0gICAgZWxzZSBpZiAod3JhcHBlcikK
LSAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDp3cmFwcGVyXTsKKyAgICByZXR1cm4gY3Jl
YXRlTlNBcnJheShwYWlycywgWyZdIChhdXRvJiBwYWlyKSB7CisgICAgICAgIFdlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyICp3cmFwcGVyc1syXTsKKyAgICAgICAgTlNTdHJpbmcgKmtleXNb
Ml07CisgICAgICAgIE5TVUludGVnZXIgY291bnQgPSAwOworICAgICAgICBpZiAocGFpci5maXJz
dCAmJiBwYWlyLmZpcnN0LT53cmFwcGVyKCkgJiYgIXBhaXIuZmlyc3QtPmFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSkgeworICAgICAgICAgICAgd3JhcHBlcnNbMF0gPSBwYWlyLmZpcnN0LT53cmFw
cGVyKCk7CisgICAgICAgICAgICBrZXlzWzBdID0gc3Vic2NyaXB0S2V5OworICAgICAgICAgICAg
Y291bnQgPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChwYWlyLnNlY29uZCAmJiBwYWlyLnNl
Y29uZC0+d3JhcHBlcigpICYmICFwYWlyLnNlY29uZC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgp
KSB7CisgICAgICAgICAgICB3cmFwcGVyc1tjb3VudF0gPSBwYWlyLnNlY29uZC0+d3JhcHBlcigp
OworICAgICAgICAgICAga2V5c1tjb3VudF0gPSBzdXBlcnNjcmlwdEtleTsKKyAgICAgICAgICAg
IGNvdW50ICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tOU0RpY3Rp
b25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czp3cmFwcGVycyBmb3JLZXlzOmtleXMgY291bnQ6
Y291bnRdKTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiBOU0FycmF5ICpjb252ZXJ0VG9O
U0FycmF5KGNvbnN0IFdlYkNvcmU6OkFYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJiBjaGlsZHJlbikKIHsKLSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjaGlsZHJlbi5zaXplKCldOwotICAg
IGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKLSAgICAgICAgYWRkQ2hpbGRUb0Fy
cmF5KCpjaGlsZCwgcmVzdWx0KTsKLSAgICByZXR1cm4gW3Jlc3VsdCBhdXRvcmVsZWFzZV07Cisg
ICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoY2hpbGRyZW4sIFtdIChhdXRvJiBjaGlsZCkgLT4gaWQg
eworICAgICAgICBhdXRvIHdyYXBwZXIgPSBjaGlsZC0+d3JhcHBlcigpOworICAgICAgICAvLyBX
ZSB3YW50IHRvIHJldHVybiB0aGUgYXR0YWNobWVudCB2aWV3IGluc3RlYWQgb2YgdGhlIG9iamVj
dCByZXByZXNlbnRpbmcgdGhlIGF0dGFjaG1lbnQsCisgICAgICAgIC8vIG90aGVyd2lzZSwgd2Ug
Z2V0IHBhbGluZHJvbWUgZXJyb3JzIGluIHRoZSBBWCBoaWVyYXJjaHkuCisgICAgICAgIGlmIChj
aGlsZC0+aXNBdHRhY2htZW50KCkgJiYgd3JhcHBlci5hdHRhY2htZW50VmlldykKKyAgICAgICAg
ICAgIHJldHVybiB3cmFwcGVyLmF0dGFjaG1lbnRWaWV3OworICAgICAgICByZXR1cm4gd3JhcHBl
cjsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiBAaW1wbGVtZW50YXRpb24gV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlCkBAIC00NDYsNyArNDQ3LDcgQEAgc3RhdGljIHZvaWQg
Y29udmVydFBhdGhUb1NjcmVlblNwYWNlRnVuY3Rpb24oUGF0aENvbnZlcnNpb25JbmZvJiBjb252
ZXJzaW9uLCBjb24KICAgICB9CiB9CiAKLS0gKENHUGF0aFJlZiljb252ZXJ0UGF0aFRvU2NyZWVu
U3BhY2U6KFBhdGggJilwYXRoCistIChDR1BhdGhSZWYpY29udmVydFBhdGhUb1NjcmVlblNwYWNl
Oihjb25zdCBQYXRoJilwYXRoCiB7CiAgICAgUGF0aENvbnZlcnNpb25JbmZvIGNvbnZlcnNpb24g
PSB7IHNlbGYsIENHUGF0aENyZWF0ZU11dGFibGUoKSB9OwogICAgIHBhdGguYXBwbHkoWyZjb252
ZXJzaW9uXShjb25zdCBQYXRoRWxlbWVudCYgcGF0aEVsZW1lbnQpIHsKQEAgLTQ2Myw3ICs0NjQs
NyBAQCAtIChpZClfYWNjZXNzaWJpbGl0eVdlYkRvY3VtZW50VmlldwogICAgIHJldHVybiBuaWw7
CiB9CiAKLS0gKENHUmVjdCljb252ZXJ0UmVjdFRvU3BhY2U6KFdlYkNvcmU6OkZsb2F0UmVjdCAm
KXJlY3Qgc3BhY2U6KEFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2Upc3BhY2UKKy0gKENHUmVj
dCljb252ZXJ0UmVjdFRvU3BhY2U6KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpcmVjdCBzcGFj
ZTooQWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZSlzcGFjZQogewogICAgIGlmICghc2VsZi5h
eEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCBkMWZlMjZjMTFkZGQ4MmRhMmQ0YmM1ODcy
YzBhNjFlNDFiZTBhODJjLi45MDJiNmNjZjE4NjQyZDcyY2QwNGVlNDU0NTgzOWFmNjIyZDY4NTQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtMzkzMSwxNiAr
MzkzMSwxMiBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAg
ICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09i
amVjdDsKICAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbmlsOwotCiAgICAgICAgICAgICBhdXRvIHJhbmdlcyA9IGJhY2tpbmdPYmplY3QtPmZp
bmRUZXh0UmFuZ2VzKGNyaXRlcmlhKTsKICAgICAgICAgICAgIGlmIChyYW5nZXMuaXNFbXB0eSgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICBOU011dGFibGVBcnJh
eSAqbWFya2VycyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpyYW5nZXMuc2l6
ZSgpXTsKLSAgICAgICAgICAgIGZvciAoYXV0byByYW5nZSA6IHJhbmdlcykgewotICAgICAgICAg
ICAgICAgIGlmIChpZCBtYXJrZXIgPSBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9t
UmFuZ2U6cmFuZ2VdKQotICAgICAgICAgICAgICAgICAgICBbbWFya2VycyBhZGRPYmplY3Q6bWFy
a2VyXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJzOworICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocmFuZ2VzLCBbJl0gKGF1dG8mIHJhbmdlKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21S
YW5nZTpyYW5nZV07CisgICAgICAgICAgICB9KS5hdXRvcmVsZWFzZSgpOwogICAgICAgICB9KTsK
ICAgICB9CiAKQEAgLTM5NTUsMTAgKzM5NTEsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICAgICAgfSk7CiAgICAgICAgIGlmIChvcGVyYXRpb25SZXN1bHQuaXNF
bXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgTlNNdXRhYmxlQXJyYXkg
KnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpvcGVyYXRpb25SZXN1
bHQuc2l6ZSgpXTsKLSAgICAgICAgZm9yIChhdXRvIHN0ciA6IG9wZXJhdGlvblJlc3VsdCkKLSAg
ICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OnN0cl07Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybiBjcmVhdGVOU0FycmF5KG9wZXJhdGlvblJlc3VsdCkuYXV0b3JlbGVh
c2UoKTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Q291bnRGb3JTZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0
cmlidXRlXSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9Gb250
QXR0cmlidXRlc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9Gb250QXR0
cmlidXRlc0NvY29hLm1tCmluZGV4IGY2ZjkyYTRjOWQ0Zjk2YmFkODM5N2ZhMjNmYmQ1MjBlZGYy
OTMwMjguLmQxODMzMzQyMzBhYzg2ODllOTZjMGQ0ODQ2NGQ4MTVhNzkxZjFhNTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZXNDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVzQ29jb2EubW0K
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiQ29sb3JDb2NvYS5oIgogI2ltcG9ydCA8cGFs
L3NwaS9jb2NvYS9OU0F0dHJpYnV0ZWRTdHJpbmdTUEkuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgPHBhbC9p
b3MvVUlLaXRTb2Z0TGluay5oPgpAQCAtMTI5LDEwICsxMzAsOSBAQCBSZXRhaW5QdHI8TlNEaWN0
aW9uYXJ5PiBGb250QXR0cmlidXRlczo6Y3JlYXRlRGljdGlvbmFyeSgpIGNvbnN0CiAgICAgfQog
CiAgICAgaWYgKCF0ZXh0TGlzdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gdGV4dExpc3RB
cnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTp0
ZXh0TGlzdHMuc2l6ZSgpXSk7Ci0gICAgICAgIGZvciAoYXV0byYgdGV4dExpc3QgOiB0ZXh0TGlz
dHMpCi0gICAgICAgICAgICBbdGV4dExpc3RBcnJheSBhZGRPYmplY3Q6dGV4dExpc3QuY3JlYXRl
VGV4dExpc3QoKS5nZXQoKV07Ci0gICAgICAgIFtzdHlsZSBzZXRUZXh0TGlzdHM6dGV4dExpc3RB
cnJheS5nZXQoKV07CisgICAgICAgIFtzdHlsZSBzZXRUZXh0TGlzdHM6Y3JlYXRlTlNBcnJheSh0
ZXh0TGlzdHMsIFtdIChhdXRvJiB0ZXh0TGlzdCkgeworICAgICAgICAgICAgcmV0dXJuIHRleHRM
aXN0LmNyZWF0ZVRleHRMaXN0KCk7CisgICAgICAgIH0pLmdldCgpXTsKICAgICB9CiAKICAgICBh
dHRyaWJ1dGVzW05TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lXSA9IHN0eWxlLmdldCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCBhMjA3Y2IwOWI4MDYxZTdkMTk0OTk1
NDVmY2QxNWNhZmZkM2Q0MzEwLi4xMmJmNzVlNzk2NTE1YjY3ODIwZWRkY2YwYzQzMGNhNjY5ZjFi
YmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtNjgsNiArNjgsNyBAQAog
I2ltcG9ydCAiV0FLV2luZG93LmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4K
ICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvY29jb2Ev
VmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKQEAgLTc4OSwxMSArNzkwLDkgQEAgTlNBcnJh
eSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKICAgICAgICAg
ICAgIGFwcGVuZChpbnRlcnByZXRhdGlvbiwgdGV4dEFmdGVyTGFzdE1hcmtlcik7CiAgICAgfQog
Ci0gICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0g
ICAgZm9yIChhdXRvJiBpbnRlcnByZXRhdGlvbiA6IGludGVycHJldGF0aW9ucykKLSAgICAgICAg
W3Jlc3VsdCBhZGRPYmplY3Q6YWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJh
Y3RlcnM6cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bmljaGFyKj4oaW50ZXJwcmV0YXRpb24uZGF0
YSgpKSBsZW5ndGg6aW50ZXJwcmV0YXRpb24uc2l6ZSgpXSkuZ2V0KCldOwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShpbnRlcnByZXRhdGlvbnMsIFtdIChh
dXRvJiBpbnRlcnByZXRhdGlvbikgeworICAgICAgICByZXR1cm4gYWRvcHROUyhbW05TU3RyaW5n
IGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnM6cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bmljaGFy
Kj4oaW50ZXJwcmV0YXRpb24uZGF0YSgpKSBsZW5ndGg6aW50ZXJwcmV0YXRpb24uc2l6ZSgpXSk7
CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogdm9pZCBGcmFtZTo6dmlld3BvcnRPZmZzZXRD
aGFuZ2VkKFZpZXdwb3J0T2Zmc2V0Q2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2VhcmNoUG9wdXBNZW51Q29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TZWFyY2hQb3B1cE1lbnVDb2NvYS5tbQppbmRl
eCA1MjkzNzQ5ZjU0N2UzMzE1OWQ3Y2UwYjQ0ZjMwZWNjODllYWNhMTY1Li4zYmRmNDk1OWNiNjAx
YTc2ZTNhMzI5ZGZhYTMyN2M0MjMxMzE5OGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9TZWFyY2hQb3B1cE1lbnVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9TZWFyY2hQb3B1cE1lbnVDb2NvYS5tbQpAQCAtMjYsNiArMjYsOCBA
QAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJTZWFyY2hQb3B1cE1lbnVDb2NvYS5oIgog
CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBkYXRlS2V5ID0gQCJkYXRlIjsKQEAgLTE0Myw2
ICsxNDUsNyBAQCB2b2lkIHNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFZlY3RvcjxSZWNlbnRTZWFyY2g+JiBzZWFyY2hJdAogCiAgICAgUmV0YWluUHRyPE5TRGlj
dGlvbmFyeT4gcmVjZW50U2VhcmNoZXNQbGlzdCA9IHJlYWRTZWFyY2hGaWVsZFJlY2VudFNlYXJj
aGVzUGxpc3QoKTsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gaXRlbXNEaWN0
aW9uYXJ5ID0gW3JlY2VudFNlYXJjaGVzUGxpc3Qgb2JqZWN0Rm9yS2V5Oml0ZW1zS2V5XTsKKwog
ICAgIC8vIFRoZSBOU011dGFibGVEaWN0aW9uYXJ5IG1ldGhvZCB3ZSB1c2UgdG8gcmVhZCB0aGUg
cHJvcGVydHkgbGlzdCBndWFyYW50ZWVzIHdlIGdldCBvbmx5CiAgICAgLy8gbXV0YWJsZSBjb250
YWluZXJzLCBidXQgaXQgZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBmaWxlIGhhcyBhIGRpY3Rpb25h
cnkgYXMgZXhwZWN0ZWQuCiAgICAgaWYgKCFbaXRlbXNEaWN0aW9uYXJ5IGlzS2luZE9mQ2xhc3M6
W05TRGljdGlvbmFyeSBjbGFzc11dKSB7CkBAIC0xNTMsMTAgKzE1Niw5IEBAIHZvaWQgc2F2ZVJl
Y2VudFNlYXJjaGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPFJlY2VudFNlYXJj
aD4mIHNlYXJjaEl0CiAgICAgaWYgKHNlYXJjaEl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgW2l0
ZW1zRGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6bmFtZV07CiAgICAgZWxzZSB7Ci0gICAg
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gaXRlbXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2VhcmNoSXRlbXMuc2l6ZSgpXSk7Ci0gICAg
ICAgIGZvciAoYXV0byYgc2VhcmNoSXRlbSA6IHNlYXJjaEl0ZW1zKQotICAgICAgICAgICAgW2l0
ZW1zIGFkZE9iamVjdDphZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVj
dHNBbmRLZXlzOnNlYXJjaEl0ZW0uc3RyaW5nLCBzZWFyY2hTdHJpbmdLZXksIHRvTlNEYXRlRnJv
bVN5c3RlbUNsb2NrKHNlYXJjaEl0ZW0udGltZSksIGRhdGVLZXksIG5pbF0pLmdldCgpXTsKLQor
ICAgICAgICBhdXRvIGl0ZW1zID0gY3JlYXRlTlNBcnJheShzZWFyY2hJdGVtcywgW10gKGF1dG8m
IGl0ZW0pIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOml0ZW0uc3RyaW5nLCBzZWFyY2hTdHJpbmdLZXksIHRv
TlNEYXRlRnJvbVN5c3RlbUNsb2NrKGl0ZW0udGltZSksIGRhdGVLZXksIG5pbF0pOworICAgICAg
ICB9KTsKICAgICAgICAgW2l0ZW1zRGljdGlvbmFyeSBzZXRPYmplY3Q6YWRvcHROUyhbW05TRGlj
dGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czppdGVtcy5nZXQoKSwgc2VhcmNo
ZXNLZXksIG5pbF0pLmdldCgpIGZvcktleTpuYW1lXTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0KaW5kZXggNGNhZGU1
ZjBmNDQ0YTdjZjRmZjg1NDUyOWY0MzMwNmY4ZmZkODFmYS4uMzQzODk3YWIyNzQyYzljNjI1NjE0
OTZjZWU0ZTRlZGNlMmU0OWFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbXBvcnQgPHN0cmluZy5oPgog
I2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2Nv
YS5oPgogCiBAaW50ZXJmYWNlIFdlYkNvcmVTaGFyZWRCdWZmZXJEYXRhIDogTlNEYXRhCiAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhEYXRhU2VnbWVudDooY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVm
ZmVyOjpEYXRhU2VnbWVudCYpZGF0YVNlZ21lbnQgcG9zaXRpb246KE5TVUludGVnZXIpcG9zaXRp
b247CkBAIC0xMTUsMTAgKzExNiw5IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlRnJvbVJlYWRpbmdGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCiAKIFJldGFp
blB0cjxOU0FycmF5PiBTaGFyZWRCdWZmZXI6OmNyZWF0ZU5TRGF0YUFycmF5KCkgY29uc3QKIHsK
LSAgICBhdXRvIGRhdGFBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhDYXBhY2l0eTptX3NlZ21lbnRzLnNpemUoKV0pOwotICAgIGZvciAoY29uc3QgYXV0byYg
c2VnbWVudCA6IG1fc2VnbWVudHMpCi0gICAgICAgIFtkYXRhQXJyYXkgYWRkT2JqZWN0OnNlZ21l
bnQuc2VnbWVudC0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCldOwotICAgIHJldHVybiBXVEZNb3ZlKGRh
dGFBcnJheSk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkobV9zZWdtZW50cywgW10gKGF1dG8m
IHNlZ21lbnQpIHsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQuc2VnbWVudC0+Y3JlYXRlTlNEYXRh
KCk7CisgICAgfSk7CiB9CiAKIFJldGFpblB0cjxOU0RhdGE+IFNoYXJlZEJ1ZmZlcjo6RGF0YVNl
Z21lbnQ6OmNyZWF0ZU5TRGF0YSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCmluZGV4
IGJmN2YzOGRlYjUwOGRiNmY4YWQ2YWFlYTA1NjY0MGEwNGE3NTM1OGMuLmU2YWFiYzkyYmExOTlk
NTM0N2U2NzlkZjFiNmFhM2VjZDI4ODQwNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCkBA
IC00Myw2ICs0Myw3IEBACiAjaW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgogI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KKyNpbXBvcnQgPHd0
Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CiAjaW1w
b3J0IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTY5MiwxMCArNjkzLDYgQEAgc3RhdGlj
IGJvb2wgaXNFcXVhbChjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBk
YXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4m
JiByZXNwb25zZURhdGEsIExpY2Vuc2VVcGRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAg
IGlmICghbV9leHBpcmVkU2Vzc2lvbnMuaXNFbXB0eSgpICYmIGlzRXF1YWwocmVzcG9uc2VEYXRh
LCAiYWNrbm93bGVkZ2VkIl9zKSkgewotICAgICAgICBhdXRvIGV4cGlyZWRTZXNzaW9ucyA9IGFk
b3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgICAgICBmb3IgKGF1dG8m
IHNlc3Npb24gOiBtX2V4cGlyZWRTZXNzaW9ucykKLSAgICAgICAgICAgIFtleHBpcmVkU2Vzc2lv
bnMgYWRkT2JqZWN0OnNlc3Npb24uZ2V0KCldOwotCiAgICAgICAgIGF1dG8qIGNlcnRpZmljYXRl
ID0gbV9pbnN0YW5jZS0+c2VydmVyQ2VydGlmaWNhdGUoKTsKICAgICAgICAgYXV0byogc3RvcmFn
ZVVSTCA9IG1faW5zdGFuY2UtPnN0b3JhZ2VVUkwoKTsKIApAQCAtNzA2LDcgKzcwMywxMCBAQCB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGlj
ZW5zZShjb25zdCBTdHJpbmcmLCBMaQogICAgICAgICB9CiAKICAgICAgICAgREVCVUdfTE9HX0lG
X1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJcImFja25vd2xlZGdlZFwiLCBTdWNjZWVkZWQsIHJl
bW92aW5nIGV4cGlyZWQgc2Vzc2lvbiByZXBvcnQiKTsKLSAgICAgICAgUmV0YWluUHRyPE5TRGF0
YT4gYXBwSWRlbnRpZmllciA9IGNlcnRpZmljYXRlLT5jcmVhdGVOU0RhdGEoKTsKKyAgICAgICAg
YXV0byBleHBpcmVkU2Vzc2lvbnMgPSBjcmVhdGVOU0FycmF5KG1fZXhwaXJlZFNlc3Npb25zLCBb
XSAoYXV0byYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuZ2V0KCk7CisgICAgICAg
IH0pOworICAgICAgICBhdXRvIGFwcElkZW50aWZpZXIgPSBjZXJ0aWZpY2F0ZS0+Y3JlYXRlTlNE
YXRhKCk7CiAgICAgICAgIFtQQUw6OmdldEFWQ29udGVudEtleVNlc3Npb25DbGFzcygpIHJlbW92
ZVBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHM6ZXhwaXJlZFNlc3Npb25zLmdldCgpIHdpdGhB
cHBJZGVudGlmaWVyOmFwcElkZW50aWZpZXIuZ2V0KCkgc3RvcmFnZURpcmVjdG9yeUF0VVJMOnN0
b3JhZ2VVUkxdOwogICAgICAgICBjYWxsYmFjayhmYWxzZSwgeyB9LCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCwgU3VjY2VlZGVkKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lv
bkFWQ29udGVudEtleVNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbQppbmRl
eCBkNDM2YmU3NzcyM2Y2NGE0YWUxODllMGJjY2ViYjI5Mzc5ZTczNzVmLi4yNjRjNzY0ZGM0NDZm
ODU4ZWU3NTJhY2FjOWE5NGQyNGU1NDllOGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZDb250ZW50S2V5
U2Vzc2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbQpAQCAtNDMsNiArNDMs
NyBAQAogI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29j
b2EvQVZGb3VuZGF0aW9uU1BJLmg+CiAjaW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgorI2ltcG9y
dCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKICNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5k
YXRpb25Tb2Z0TGluay5oPgogCkBAIC0yODIsMTQgKzI4Myw5IEBAIGJvb2wgQ0RNU2Vzc2lvbkFW
Q29udGVudEtleVNlc3Npb246OnVwZGF0ZShVaW50OEFycmF5KiBrZXksIFJlZlB0cjxVaW50OEFy
cmF5PiYKIAogICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBvcHRpb25zOwogICAgICAg
ICBpZiAoIW1fcHJvdG9jb2xWZXJzaW9ucy5pc0VtcHR5KCkgJiYgUEFMOjpjYW5Mb2FkX0FWRm91
bmRhdGlvbl9BVkNvbnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xWZXJzaW9uc0tleSgpKSB7Ci0gICAg
ICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHByb3RvY29sVmVyc2lvbnNPcHRpb24g
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgdmVyc2lvbiA6IG1fcHJvdG9jb2xWZXJzaW9ucykgewotICAgICAgICAgICAgICAg
IGlmICghdmVyc2lvbikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgW3Byb3RvY29sVmVyc2lvbnNPcHRpb24gYWRkT2JqZWN0OkAodmVyc2lvbildOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBvcHRpb25zID0gQHsgQVZDb250ZW50S2V5UmVxdWVz
dFByb3RvY29sVmVyc2lvbnNLZXk6IHByb3RvY29sVmVyc2lvbnNPcHRpb24uZ2V0KCkgfTsKKyAg
ICAgICAgICAgIG9wdGlvbnMgPSBAeyBBVkNvbnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xWZXJzaW9u
c0tleTogY3JlYXRlTlNBcnJheShtX3Byb3RvY29sVmVyc2lvbnMsIFtdIChpbnQgdmVyc2lvbikg
LT4gTlNOdW1iZXIgKiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHZlcnNpb24gPyBAKHZlcnNp
b24pIDogbmlsOworICAgICAgICAgICAgfSkuZ2V0KCkgfTsKICAgICAgICAgfQogCiAgICAgICAg
IGVycm9yQ29kZSA9IE1lZGlhUGxheWVyOjpOb0Vycm9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWU3Ry
ZWFtU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL0NETVNlc3Npb25BVlN0cmVhbVNlc3Npb24ubW0KaW5kZXggMTM4ZTJmZDk0N2U4
MjVmYzA5MzFmOGY3NzRkMjQ0OWVmNDEyNGI5ZC4uODk2YTI0NTIyYjhjNjJmYzM1MjRjMzQzNzg4
ZTQzMzZkMGJkZWZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNz
aW9uQVZTdHJlYW1TZXNzaW9uLm1tCkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0IDxwYWwvc3Bp
L2NvY29hL0FWRm91bmRhdGlvblNQSS5oPgogI2ltcG9ydCA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNp
bXBvcnQgPHd0Zi9VVUlELmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAog
I2ltcG9ydCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CiAKQEAgLTIyNiwxNCAr
MjI3LDkgQEAgYm9vbCBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjp1cGRhdGUoVWludDhBcnJh
eSoga2V5LCBSZWZQdHI8VWludDhBcnJheT4mIG5leHQKIAogICAgICAgICBSZXRhaW5QdHI8TlNE
aWN0aW9uYXJ5PiBvcHRpb25zOwogICAgICAgICBpZiAoIW1fcHJvdG9jb2xWZXJzaW9ucy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcHJvdG9jb2xW
ZXJzaW9uc09wdGlvbiA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwot
ICAgICAgICAgICAgZm9yIChhdXRvJiB2ZXJzaW9uIDogbV9wcm90b2NvbFZlcnNpb25zKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCF2ZXJzaW9uKQotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICBbcHJvdG9jb2xWZXJzaW9uc09wdGlvbiBhZGRPYmplY3Q6QCh2
ZXJzaW9uKV07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG9wdGlvbnMgPSBAeyBBVlN0
cmVhbURhdGFQYXJzZXJDb250ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXk6IHByb3Rv
Y29sVmVyc2lvbnNPcHRpb24uZ2V0KCkgfTsKKyAgICAgICAgICAgIG9wdGlvbnMgPSBAeyBBVlN0
cmVhbURhdGFQYXJzZXJDb250ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXk6IGNyZWF0
ZU5TQXJyYXkobV9wcm90b2NvbFZlcnNpb25zLCBbXSAoaW50IHZlcnNpb24pIC0+IE5TTnVtYmVy
ICogeworICAgICAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uID8gQCh2ZXJzaW9uKSA6IG5pbDsK
KyAgICAgICAgICAgIH0pLmdldCgpIH07CiAgICAgICAgIH0KIAogICAgICAgICBOU0Vycm9yKiBl
cnJvciA9IG5pbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCmluZGV4IGYwMDY5MDhmYzk5NDc2ZTM1
MjFjYjQ0ODRjMGQ4YWM5MDEyMmViNDQuLjA5ZmFjZjI1NTVkMzAyZTMxODQyODE1NjE4YmM3MDkx
MzdkOTVlNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpAQCAtNjcsNiArNjcsMTYgQEAKICNp
bXBvcnQgIldlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCAiV2ViQ29yZUNBTGF5
ZXJFeHRyYXMuaCIKICNpbXBvcnQgIldlYkNvcmVOU1VSTFNlc3Npb24uaCIKKyNpbXBvcnQgPEFW
Rm91bmRhdGlvbi9BVkFzc2V0SW1hZ2VHZW5lcmF0b3IuaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlv
bi9BVkFzc2V0VHJhY2suaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVk1lZGlhU2VsZWN0aW9u
R3JvdXAuaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVk1ldGFkYXRhSXRlbS5oPgorI2ltcG9y
dCA8QVZGb3VuZGF0aW9uL0FWUGxheWVyLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5
ZXJJdGVtLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJJdGVtT3V0cHV0Lmg+Cisj
aW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJJdGVtVHJhY2suaD4KKyNpbXBvcnQgPEFWRm91
bmRhdGlvbi9BVlBsYXllckxheWVyLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+
CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9EYXRhVmlldy5oPgogI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlu
bGluZXMuaD4KQEAgLTg0LDIzICs5NCwxMyBAQAogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAjaW1wb3J0IDx3dGYvT1NPYmplY3RQdHIuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNp
bXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiAjaWYgRU5BQkxFKEFWRl9DQVBUSU9OUykKICNpbmNsdWRlICJUZXh0VHJhY2suaCIK
ICNlbmRpZgogCi0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldEltYWdlR2VuZXJhdG9yLmg+
Ci0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldFRyYWNrLmg+Ci0jaW1wb3J0IDxBVkZvdW5k
YXRpb24vQVZNZWRpYVNlbGVjdGlvbkdyb3VwLmg+Ci0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZN
ZXRhZGF0YUl0ZW0uaD4KLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlBsYXllci5oPgotI2ltcG9y
dCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbS5oPgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FW
UGxheWVySXRlbU91dHB1dC5oPgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbVRy
YWNrLmg+Ci0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJMYXllci5oPgotI2ltcG9ydCA8
QVZGb3VuZGF0aW9uL0FWVGltZS5oPgotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBv
cnQgIldBS0FwcEtpdFN0dWJzLmgiCiAjaW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUltYWdlLmg+CkBA
IC04MjYsMjMgKzgyNiwxOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OmNyZWF0ZUFWQXNzZXRGb3JVUkwoY29uc3QgVVJMJiB1cmwpCiAgICAgfQogCiAjaWYgRU5B
QkxFKEFWRl9DQVBUSU9OUykKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtVGV4dFRy
YWNrPj4mIG91dE9mQmFuZFRyYWNrU291cmNlcyA9IHBsYXllcigpLT5vdXRPZkJhbmRUcmFja1Nv
dXJjZXMoKTsKKyAgICBhdXRvIG91dE9mQmFuZFRyYWNrU291cmNlcyA9IHBsYXllcigpLT5vdXRP
ZkJhbmRUcmFja1NvdXJjZXMoKTsKICAgICBpZiAoIW91dE9mQmFuZFRyYWNrU291cmNlcy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBvdXRPZkJhbmRUcmFj
a3MgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgZm9y
IChhdXRvJiB0cmFja1NvdXJjZSA6IG91dE9mQmFuZFRyYWNrU291cmNlcykgewotICAgICAgICAg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBsYWJlbCA9IHRyYWNrU291cmNlLT5sYWJlbCgpLmNy
ZWF0ZUNGU3RyaW5nKCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxhbmd1
YWdlID0gdHJhY2tTb3VyY2UtPmxhbmd1YWdlKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAg
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdW5pcXVlSUQgPSBTdHJpbmc6Om51bWJlcih0cmFj
a1NvdXJjZS0+dW5pcXVlSWQoKSkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAgICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdXJsID0gdHJhY2tTb3VyY2UtPnVybCgpLmNyZWF0ZUNGU3RyaW5n
KCk7Ci0gICAgICAgICAgICBbb3V0T2ZCYW5kVHJhY2tzLmdldCgpIGFkZE9iamVjdDpAewotICAg
ICAgICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJuYXRlVHJhY2tEaXNwbGF5TmFtZUtleTogKF9f
YnJpZGdlIE5TU3RyaW5nICopbGFiZWwuZ2V0KCksCi0gICAgICAgICAgICAgICAgQVZPdXRPZkJh
bmRBbHRlcm5hdGVUcmFja0V4dGVuZGVkTGFuZ3VhZ2VUYWdLZXk6IChfX2JyaWRnZSBOU1N0cmlu
ZyAqKWxhbmd1YWdlLmdldCgpLAorICAgICAgICBhdXRvIG91dE9mQmFuZFRyYWNrcyA9IGNyZWF0
ZU5TQXJyYXkob3V0T2ZCYW5kVHJhY2tTb3VyY2VzLCBbXSAoYXV0byYgdHJhY2tTb3VyY2UpIHsK
KyAgICAgICAgICAgIHJldHVybiBAeworICAgICAgICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJu
YXRlVHJhY2tEaXNwbGF5TmFtZUtleTogdHJhY2tTb3VyY2UtPmxhYmVsKCksCisgICAgICAgICAg
ICAgICAgQVZPdXRPZkJhbmRBbHRlcm5hdGVUcmFja0V4dGVuZGVkTGFuZ3VhZ2VUYWdLZXk6IHRy
YWNrU291cmNlLT5sYW5ndWFnZSgpLAogICAgICAgICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJu
YXRlVHJhY2tJc0RlZmF1bHRLZXk6IHRyYWNrU291cmNlLT5pc0RlZmF1bHQoKSA/IEBZRVMgOiBA
Tk8sCi0gICAgICAgICAgICAgICAgQVZPdXRPZkJhbmRBbHRlcm5hdGVUcmFja0lkZW50aWZpZXJL
ZXk6IChfX2JyaWRnZSBOU1N0cmluZyAqKXVuaXF1ZUlELmdldCgpLAotICAgICAgICAgICAgICAg
IEFWT3V0T2ZCYW5kQWx0ZXJuYXRlVHJhY2tTb3VyY2VLZXk6IChfX2JyaWRnZSBOU1N0cmluZyAq
KXVybC5nZXQoKSwKKyAgICAgICAgICAgICAgICBBVk91dE9mQmFuZEFsdGVybmF0ZVRyYWNrSWRl
bnRpZmllcktleTogU3RyaW5nOjpudW1iZXIodHJhY2tTb3VyY2UtPnVuaXF1ZUlkKCkpLAorICAg
ICAgICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJuYXRlVHJhY2tTb3VyY2VLZXk6IHRyYWNrU291
cmNlLT51cmwoKSwKICAgICAgICAgICAgICAgICBBVk91dE9mQmFuZEFsdGVybmF0ZVRyYWNrTWVk
aWFDaGFyYWN0ZXJzdGljc0tleTogbWVkaWFEZXNjcmlwdGlvbkZvcktpbmQodHJhY2tTb3VyY2Ut
PmtpbmQoKSksCi0gICAgICAgICAgICB9XTsKLSAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgfSk7CiAKICAgICAgICAgW29wdGlvbnMuZ2V0KCkgc2V0T2JqZWN0Om91dE9mQmFuZFRy
YWNrcy5nZXQoKSBmb3JLZXk6QVZVUkxBc3NldE91dE9mQmFuZEFsdGVybmF0ZVRyYWNrc0tleV07
CiAgICAgfQpAQCAtODU3LDEwICs4NTIsOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JVUkwoY29uc3QgVVJMJiB1cmwpCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICBWZWN0b3I8Q29va2llPiBjb29raWVzOwogICAgIGlmIChw
bGF5ZXIoKS0+Z2V0UmF3Q29va2llcyh1cmwsIGNvb2tpZXMpKSB7Ci0gICAgICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gbnNDb29raWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OmNvb2tpZXMuc2l6ZSgpXSk7Ci0gICAgICAgIGZvciAoYXV0
byYgY29va2llIDogY29va2llcykKLSAgICAgICAgICAgIFtuc0Nvb2tpZXMgYWRkT2JqZWN0OihO
U0hUVFBDb29raWUgKiljb29raWVdOwotCisgICAgICAgIGF1dG8gbnNDb29raWVzID0gY3JlYXRl
TlNBcnJheShjb29raWVzLCBbXSAoYXV0byYgY29va2llKSAtPiBOU0hUVFBDb29raWUgKiB7Cisg
ICAgICAgICAgICByZXR1cm4gY29va2llOworICAgICAgICB9KTsKICAgICAgICAgaWYgKFBBTDo6
Y2FuTG9hZF9BVkZvdW5kYXRpb25fQVZVUkxBc3NldEhUVFBDb29raWVzS2V5KCkpCiAgICAgICAg
ICAgICBbb3B0aW9ucyBzZXRPYmplY3Q6bnNDb29raWVzLmdldCgpIGZvcktleTpBVlVSTEFzc2V0
SFRUUENvb2tpZXNLZXldOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYS5tbQppbmRleCA0ODE2YjAwNGYxNDgxODBmYjkwMTU3OTE5Y2ViZTdiNWVkZGY1NWMwLi44
ZmIyYzEyM2ZiOTgxZWQzZjhiYzliMTg2OTUxMDY1ZjE1YWQzYmE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJU
aW1pbmdGdW5jdGlvbi5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1w
b3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQ2MiwxMCArNDYzLDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkKICAgICBpZiAoYW5p
bWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGFy
cmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnZhbHVlLnNpemUoKV07Ci0g
ICAgZm9yIChhdXRvIG51bWJlciA6IHZhbHVlKQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OkAo
bnVtYmVyKV07Ci0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1h
dGlvbi5nZXQoKSkgc2V0VmFsdWVzOmFycmF5XTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFt
ZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6Y3JlYXRlTlNBcnJheSh2
YWx1ZSwgW10gKGZsb2F0IG51bWJlcikgeworICAgICAgICByZXR1cm4gQChudW1iZXIpOworICAg
IH0pLmdldCgpXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVl
cyhjb25zdCBWZWN0b3I8VHJhbnNmb3JtYXRpb25NYXRyaXg+JiB2YWx1ZSkKQEAgLTQ3MywxMCAr
NDczLDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyhjb25zdCBW
ZWN0b3I8VHJhbnNmb3JtYXRpb25NYXRyaXg+JiB2YWwKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgp
ICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGFycmF5ID0gW05TTXV0
YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnZhbHVlLnNpemUoKV07Ci0gICAgZm9yIChhdXRv
JiBtYXRyaXggOiB2YWx1ZSkKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1
ZVdpdGhDQVRyYW5zZm9ybTNEOm1hdHJpeF1dOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1l
QW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczphcnJheV07CisgICAgW3N0
YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFs
dWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChhdXRvJiBtYXRyaXgpIHsKKyAgICAgICAgcmV0
dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6bWF0cml4XTsKKyAgICB9KS5nZXQo
KV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3Qg
VmVjdG9yPEZsb2F0UG9pbnQzRD4mIHZhbHVlKQpAQCAtNDg0LDEwICs0ODMsOSBAQCB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50
M0Q+JiB2YWx1ZSkKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENh
cGFjaXR5OnZhbHVlLnNpemUoKV07Ci0gICAgZm9yIChhdXRvJiBwb2ludCA6IHZhbHVlKQotICAg
ICAgICBbYXJyYXkgYWRkT2JqZWN0OkBbQChwb2ludC54KCkpLCBAKHBvaW50LnkoKSksIEAocG9p
bnQueigpKV1dOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmlt
YXRpb24uZ2V0KCkpIHNldFZhbHVlczphcnJheV07CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJh
bWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXko
dmFsdWUsIFtdIChhdXRvJiBwb2ludCkgeworICAgICAgICByZXR1cm4gQFtAKHBvaW50LngoKSks
IEAocG9pbnQueSgpKSwgQChwb2ludC56KCkpXTsKKyAgICB9KS5nZXQoKV07CiB9CiAKIHZvaWQg
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPENvbG9yPiYg
dmFsdWUpCkBAIC00OTUsMTAgKzQ5Myw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29h
OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPENvbG9yPiYgdmFsdWUpCiAgICAgaWYgKGFuaW1hdGlv
blR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhcnJheSA9
IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp2YWx1ZS5zaXplKCldOwotICAgIGZv
ciAoYXV0byYgY29sb3IgOiB2YWx1ZSkKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpAW0AoY29s
b3IucmVkKCkpLCBAKGNvbG9yLmdyZWVuKCkpLCBAKGNvbG9yLmJsdWUoKSksIEAoY29sb3IuYWxw
aGEoKSldXTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0
aW9uLmdldCgpKSBzZXRWYWx1ZXM6YXJyYXldOworICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1l
QW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVhdGVOU0FycmF5KHZh
bHVlLCBbXSAoYXV0byYgY29sb3IpIHsKKyAgICAgICAgcmV0dXJuIEBbQChjb2xvci5yZWQoKSks
IEAoY29sb3IuZ3JlZW4oKSksIEAoY29sb3IuYmx1ZSgpKSwgQChjb2xvci5hbHBoYSgpKV07Cisg
ICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFs
dWVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPj4mIHZhbHVlcywgaW50IGlu
dGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKQEAgLTUwNiwxMCArNTAzLDkgQEAgdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRl
ck9wZXJhdGlvbj4+JgogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGF1dG8gYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRo
Q2FwYWNpdHk6dmFsdWVzLnNpemUoKV07Ci0gICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykK
LSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpQbGF0Zm9ybUNBRmlsdGVyczo6ZmlsdGVyVmFsdWVG
b3JPcGVyYXRpb24odmFsdWUuZ2V0KCksIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkuZ2V0
KCldOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24u
Z2V0KCkpIHNldFZhbHVlczphcnJheV07CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmlt
YXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWVz
LCBbJl0gKGF1dG8mIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUNBRmlsdGVyczo6
ZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24odmFsdWUuZ2V0KCksIGludGVybmFsRmlsdGVyUHJvcGVy
dHlJbmRleCk7CisgICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYTo6Y29weVZhbHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCkBA
IC01MjMsMTAgKzUxOSw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjb3B5VmFs
dWVzRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKIAogdm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uQ29jb2E6OnNldEtleVRpbWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVl
KQogewotICAgIGF1dG8gYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6
dmFsdWUuc2l6ZSgpXTsKLSAgICBmb3IgKGF1dG8gdGltZSA6IHZhbHVlKQotICAgICAgICBbYXJy
YXkgYWRkT2JqZWN0OkAodGltZSldOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0
aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEtleVRpbWVzOmFycmF5XTsKKyAgICBbc3RhdGlj
X2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRLZXlUaW1l
czpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoZmxvYXQgdGltZSkgeworICAgICAgICByZXR1cm4g
QCh0aW1lKTsKKyAgICB9KS5nZXQoKV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hOjpjb3B5S2V5VGltZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQpA
QCAtNTM3LDEwICs1MzIsOSBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weUtl
eVRpbWVzRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZQogCiB2b2lkIFBsYXRm
b3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25z
dCBUaW1pbmdGdW5jdGlvbio+JiB2YWx1ZSwgYm9vbCByZXZlcnNlKQogewotICAgIGF1dG8gYXJy
YXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dmFsdWUuc2l6ZSgpXTsKLSAg
ICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogdmFsdWUpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6
dG9DQU1lZGlhVGltaW5nRnVuY3Rpb24oZnVuY3Rpb24sIHJldmVyc2UpXTsKLSAgICBbc3RhdGlj
X2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUaW1pbmdG
dW5jdGlvbnM6YXJyYXldOworICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4o
bV9hbmltYXRpb24uZ2V0KCkpIHNldFRpbWluZ0Z1bmN0aW9uczpjcmVhdGVOU0FycmF5KHZhbHVl
LCBbJl0gKGF1dG8mIGZ1bmN0aW9uKSB7CisgICAgICAgIHJldHVybiB0b0NBTWVkaWFUaW1pbmdG
dW5jdGlvbihmdW5jdGlvbiwgcmV2ZXJzZSk7CisgICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oY29uc3QgUGxh
dGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2Nv
YS5tbQppbmRleCAzYzRkY2UyYWIzYjJlMDkzNTRiOGI3NDRlOTEzYzMwNmY2MDc3NmYzLi4wMWM1
ZTJkYTZkOGI0NTg4OWVhNWFlMzFhZjUzMjYzNTkwZGFlNjYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRm
b3JtQ0FGaWx0ZXJzQ29jb2EubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFF1YXJ0ekNv
cmUvUXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+
CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL2NvY29h
L1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJl
cnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjIsMjEgKzYzLDIyIEBAIHZvaWQgUGxh
dGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBj
b25zdCBGaWx0ZXJPcGVyCiAgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIC8vIEFzc3VtZSBmaWx0ZXJzQ2FuQmVDb21w
b3NpdGVkIHdhcyBjYWxsZWQgYW5kIGl0IHJldHVybmVkIHRydWUuCiAgICAgQVNTRVJUKFBsYXRm
b3JtQ0FMYXllckNvY29hOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGZpbHRlcnMpKTsKLSAgICAK
KwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIAotICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gYXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRdKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIFN0cmluZyBmaWx0ZXJOYW1lID0gbWFrZVN0cmluZygiZmlsdGVyXyIsIGkp
OwotICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiA9ICpmaWx0
ZXJzLmF0KGkpOworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVO
U0FycmF5KGZpbHRlcnMub3BlcmF0aW9ucygpLCBbJl0gKGF1dG8mIG9wZXJhdGlvblB0cikgLT4g
aWQgeworICAgICAgICBTdHJpbmcgZmlsdGVyTmFtZSA9IG1ha2VTdHJpbmcoImZpbHRlcl8iLCBp
KyspOworICAgICAgICBhdXRvJiBmaWx0ZXJPcGVyYXRpb24gPSAqb3BlcmF0aW9uUHRyOwogICAg
ICAgICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi50eXBlKCkpIHsKICAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkRFRkFVTFQ6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZF
UkVOQ0U6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpOT05FOgogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBuaWw7CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewog
ICAgICAgICAgICAgLy8gRklYTUU6IEZvciBub3cgYXNzdW1lIGRyb3Agc2hhZG93IGlzIHRoZSBs
YXN0IGZpbHRlciwgcHV0IGl0IG9uIHRoZSBsYXllci4KICAgICAgICAgICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS8xMDk1OTk2OT4gSGFuZGxlIGNhc2Ugd2hlcmUgZHJvcC1zaGFkb3cgaXMgbm90IHRo
ZSBsYXN0IGZpbHRlci4KQEAgLTg1LDcgKzg3LDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6
c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIK
ICAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dDb2xvcjpjYWNoZWRDR0NvbG9yKGRyb3BTaGFk
b3dPcGVyYXRpb24uY29sb3IoKSldOwogICAgICAgICAgICAgW2xheWVyIHNldFNoYWRvd1JhZGl1
czpkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpXTsKICAgICAgICAgICAgIFtsYXll
ciBzZXRTaGFkb3dPcGFjaXR5OjFdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBy
ZXR1cm4gbmlsOwogICAgICAgICB9CiAjaWYgVVNFX0NBX0ZJTFRFUlMKICAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewpAQCAtOTMsMjQgKzk1LDIxIEBAIHZvaWQgUGxh
dGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBj
b25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVy
IGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTW9ub2Nocm9tZV07CiAgICAgICAgICAgICBb
ZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Y29sb3JNYXRyaXhPcGVy
YXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0QW1vdW50Il07CiAgICAgICAgICAgICBbZmls
dGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2Jq
ZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0
ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7CiAg
ICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3Jt
Q0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKGZpbHRlck9wZXJhdGlvbi50eXBl
KCksICZmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtD
QUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07CiAgICAgICAgICAg
ICBbZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRD
b2xvck1hdHJpeCJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwot
ICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewogICAgICAgICAgICAgY29uc3QgYXV0byYg
Y29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9
IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvclNhdHVyYXRlXTsKICAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xvck1h
dHJpeE9wZXJhdGlvbi5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBbW91bnQiXTsKICAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQo
KSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVF
X1JPVEFURTogewogICAgICAgICAgICAgY29uc3QgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24g
PSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwpAQCAtMTE4LDE2ICsxMTcsMTQgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0Rmls
dGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpkZWcycmFk
KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKV0gZm9yS2V5OkAiaW5wdXRBbmdsZSJdOwog
ICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOkAiaHVlUm90YXRlIl07CiAgICAgICAgICAgICBb
ZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRk
T2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBm
aWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDog
ewogICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0
Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24u
dHlwZSgpLCAmZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIg
PSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwogICAgICAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlu
cHV0Q29sb3JNYXRyaXgiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1l
XTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzoKICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9u
bHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmlsdGVyLgpAQCAtMTM3LDI0ICsxMzQsMjEgQEAgdm9p
ZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5
ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FG
aWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwogICAgICAgICAgICAg
W2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29s
b3JNYXRyaXgiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAg
ICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewogICAgICAgICAgICAgUmV0YWluUHRyPE5T
VmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhW
YWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24udHlwZSgpLCAmZmlsdGVyT3BlcmF0aW9uKTsK
ICAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6
a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xv
ck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29sb3JNYXRyaXgiXTsKICAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQo
KSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09O
VFJBU1Q6IHsKICAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVl
ID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoZmlsdGVyT3Bl
cmF0aW9uLnR5cGUoKSwgJmZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDQUZpbHRlciAq
ZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsK
ICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JL
ZXk6QCJpbnB1dENvbG9yTWF0cml4Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6Zmls
dGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAgICAgICAgICAgIGNvbnN0
IGF1dG8mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwpAQCAtMTY1LDggKzE1OSw3IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6
OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVy
CiAgICAgICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpAWUVTIGZvcktleTpAImlucHV0Tm9y
bWFsaXplRWRnZXMiXTsKICNlbmRpZgogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRl
ck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAj
ZWxzZQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7CkBAIC0xNzYs
OCArMTY5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxh
dGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xvck1hdHJpeE9wZXJhdGlvbi5h
bW91bnQoKV0gZm9yS2V5OkAiaW5wdXRJbnRlbnNpdHkiXTsKICAgICAgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W0NJQ29sb3IgY29sb3JXaXRoUmVkOjAuNjcgZ3JlZW46MC42NyBibHVlOjAuNjdd
IGZvcktleTpAImlucHV0Q29sb3IiXTsgLy8gQ29sb3IgZGVyaXZlZCBlbXBpcmljYWxseSB0byBt
YXRjaCB6ZXJvIHNhdHVyYXRpb24gbGV2ZWxzLgogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1l
OmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJd
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewogICAgICAgICAgICAg
Y29uc3QgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwpAQCAtMTk3LDggKzE4OSw3IEBA
IHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIq
IGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICAgICAgWTpXZWJDb3JlOjpibGVu
ZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1syXVsxXSwgdCkK
ICAgICAgICAgICAgICAgICBaOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1syXVsy
XSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzJdLCB0KSBXOjBdIGZvcktleTpAImlucHV0QlZlY3Rv
ciJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAg
ICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpTQVRVUkFURTogewogICAgICAgICAgICAgY29uc3QgYXV0byYgY29sb3JNYXRy
aXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwpAQCAtMjA2LDggKzE5Nyw3IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRl
cnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJP
cGVyCiAgICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKICAgICAgICAgICAgIFtmaWx0
ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xvck1hdHJpeE9wZXJhdGlv
bi5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRTYXR1cmF0aW9uIl07CiAgICAgICAgICAgICBbZmls
dGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2Jq
ZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0
ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6
IHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNh
c3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKQEAg
LTIxNiw4ICsyMDYsNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXll
cihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogCiAgICAgICAgICAgICBb
ZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZGVnMnJhZChjb2xvck1h
dHJpeE9wZXJhdGlvbi5hbW91bnQoKSldIGZvcktleTpAImlucHV0QW5nbGUiXTsKICAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQo
KSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5W
RVJUOiB7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
biA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7CkBAIC0yMzMsOCArMjIyLDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6
c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIK
ICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTow
IFo6MCBXOjFdIGZvcktleTpAImlucHV0QVZlY3RvciJdOwogICAgICAgICAgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6b3AtPmFtb3VudCgpIFk6b3AtPmFtb3VudCgp
IFo6b3AtPmFtb3VudCgpIFc6MF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CiAgICAgICAg
ICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0
KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQ
UExFX0lOVkVSVF9MSUdIVE5FU1M6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZp
bHRlci4KQEAgLTI1MCw4ICsyMzgsNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0
ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogICAgICAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6
Y29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0QVZlY3Rv
ciJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6
MCBZOjAgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CiAgICAgICAgICAgICBb
ZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRk
T2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBm
aWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5F
U1M6IHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
ID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVy
T3BlcmF0aW9uKTsKQEAgLTI2Myw4ICsyNTAsNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpz
ZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3Blcgog
ICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOmFt
b3VudCBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKICAgICAgICAgICAgIFtmaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6YW1vdW50IFc6MF0gZm9y
S2V5OkAiaW5wdXRCVmVjdG9yIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVy
TmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7CiAgICAgICAgICAgICBjb25z
dCBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CkBAIC0yNzIsOCAr
MjU4LDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZv
cm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0
RGVmYXVsdHNdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVy
V2l0aEZsb2F0OmNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJp
bnB1dENvbnRyYXN0Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07
Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Ig
bm93IHdlIGlnbm9yZSBzdGREZXZpYXRpb25ZLgpAQCAtMjgyLDIxICsyNjcsMTkgQEAgdm9pZCBQ
bGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIs
IGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwogICAg
ICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmZsb2F0
VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCldIGZvcktleTpA
ImlucHV0UmFkaXVzIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07
Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICNlbmRpZgog
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UEFTU1RIUk9VR0g6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVCgwKTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgfQotICAgIH0KKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfSk7
CiAKLSAgICBpZiAoW2FycmF5LmdldCgpIGNvdW50XSA+IDApCisgICAgaWYgKFthcnJheSBjb3Vu
dF0pCiAgICAgICAgIFtsYXllciBzZXRGaWx0ZXJzOmFycmF5LmdldCgpXTsKLSAgICAKKwogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJD
b2NvYS5tbQppbmRleCAzYjEzYTFmM2IyNjVmZjliNDJlNWMyMjJlZjdiNmZhZjgzNGYzNzUwLi40
ZGE5ZmYxM2ZlMWRkMDE1NjU5YmJjMDg3ZWY0NjVkNTQxOTc0ZDRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBTGF5ZXJDb2NvYS5tbQpAQCAtNTEsNiArNTEsNyBAQAogI2ltcG9ydCA8b2JqYy9ydW50
aW1lLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogI2ltcG9ydCAiV2ViR1BVTGF5ZXIuaCIKQEAgLTQ1NiwxMiArNDU3LDkg
QEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2V0U3VibGF5ZXJzKGNvbnN0IFBsYXRmb3Jt
Q0FMYXllckxpc3QmIGxpc3QpCiAgICAgfQogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCi0gICAgTlNNdXRhYmxlQXJyYXkqIHN1YmxheWVycyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRdOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7ICsraSkK
LSAgICAgICAgW3N1YmxheWVycyBhZGRPYmplY3Q6bGlzdFtpXS0+bV9sYXllci5nZXQoKV07Ci0K
LSAgICBbbV9sYXllciBzZXRTdWJsYXllcnM6c3VibGF5ZXJzXTsKLSAgICBbc3VibGF5ZXJzIHJl
bGVhc2VdOworICAgIFttX2xheWVyIHNldFN1YmxheWVyczpjcmVhdGVOU0FycmF5KGxpc3QsIFtd
IChhdXRvJiBsYXllcikgeworICAgICAgICByZXR1cm4gbGF5ZXItPm1fbGF5ZXI7CisgICAgfSku
Z2V0KCldOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KaW5kZXgg
YmFhMjU1NTA4YzM4MDg2YWM2MGM0ZTEwMjkxYTEzYzczNjE1MWQ0MC4uZDJmMzIyMDA0N2Y2ZjM0
MzUzNTZjOTc4NzUxMDM4ZTZiOGIwZjE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCkBAIC02MTUsMTEgKzYxNSw5IEBA
IHN0YXRpYyBSZXRhaW5QdHI8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3Q+IGNy
ZWF0ZUl0ZW1Qcm92aWRlclJlZ2lzdHJhCiAKIGludDY0X3QgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3
cml0ZShjb25zdCBWZWN0b3I8UGFzdGVib2FyZEN1c3RvbURhdGE+JiBpdGVtRGF0YSkKIHsKLSAg
ICBhdXRvIHJlZ2lzdHJhdGlvbkxpc3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0V2l0aENhcGFjaXR5Oml0ZW1EYXRhLnNpemUoKV0pOwotICAgIGZvciAoYXV0byYgZGF0
YSA6IGl0ZW1EYXRhKSB7Ci0gICAgICAgIGlmIChhdXRvIGl0ZW1MaXN0ID0gY3JlYXRlSXRlbVBy
b3ZpZGVyUmVnaXN0cmF0aW9uTGlzdChkYXRhKSkKLSAgICAgICAgICAgIFtyZWdpc3RyYXRpb25M
aXN0cyBhZGRPYmplY3Q6aXRlbUxpc3QuZ2V0KCldOwotICAgIH0KKyAgICBhdXRvIHJlZ2lzdHJh
dGlvbkxpc3RzID0gY3JlYXRlTlNBcnJheShpdGVtRGF0YSwgW10gKGF1dG8mIGRhdGEpIHsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZUl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkxpc3QoZGF0YSk7Cisg
ICAgfSk7CiAgICAgcmVnaXN0ZXJJdGVtc1RvUGFzdGVib2FyZChyZWdpc3RyYXRpb25MaXN0cy5n
ZXQoKSwgbV9wYXN0ZWJvYXJkLmdldCgpKTsKICAgICByZXR1cm4gW21fcGFzdGVib2FyZCBjaGFu
Z2VDb3VudF07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0KaW5kZXggYWE1NTQ5NGUxYWI3NjJi
ZWY0MjY5NzlkNWM1NGVkYjhkYTdhMTFjMC4uZmYwMzlhZDliNDI1MWM2M2E4OGI1OWNmNWRjZTg1
N2Y1ZmRiMGViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbQpAQCAtMzgsNiArMzgsNyBAQAog
I2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9B
VktpdFNQSS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29h
L1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW1wb3J0IDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMTU1LDIwICsxNTYsMTggQEAgdm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNh
blBsYXlGYXN0UmUKICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldENhblNjYW5CYWNrd2FyZDpj
YW5QbGF5RmFzdFJldmVyc2VdOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiYgb3B0aW9ucykKK3N0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRp
b25zKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMpCiB7Ci0gICAg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om9wdGlvbnMuc2l6ZSgpXSk7Ci0gICAgZm9y
IChhdXRvJiBvcHRpb24gOiBvcHRpb25zKSB7Ci0gICAgICAgIFJldGFpblB0cjxXZWJBVk1lZGlh
U2VsZWN0aW9uT3B0aW9uPiB3ZWJPcHRpb24gPSBhZG9wdE5TKFtbV2ViQVZNZWRpYVNlbGVjdGlv
bk9wdGlvbiBhbGxvY10gaW5pdF0pOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KG9wdGlvbnMs
IFtdIChhdXRvJiBvcHRpb24pIHsKKyAgICAgICAgYXV0byB3ZWJPcHRpb24gPSBhZG9wdE5TKFtb
V2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbiBhbGxvY10gaW5pdF0pOwogICAgICAgICBbd2ViT3B0
aW9uIHNldExvY2FsaXplZERpc3BsYXlOYW1lOm9wdGlvbi5kaXNwbGF5TmFtZV07Ci0gICAgICAg
IFt3ZWJPcHRpb25zIGFkZE9iamVjdDp3ZWJPcHRpb24uZ2V0KCldOwotICAgIH0KLSAgICByZXR1
cm4gd2ViT3B0aW9uczsKKyAgICAgICAgcmV0dXJuIHdlYk9wdGlvbjsKKyAgICB9KTsKIH0KIAog
dm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOworICAgIGF1dG8g
d2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKICAgICBbbV9wbGF5
ZXJDb250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0
KCldOwogICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQogICAgICAg
ICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
Olt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0
ZWRJbmRleCldXTsKQEAgLTE3Niw3ICsxNzUsNyBAQCB2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdAog
CiB2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewotICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKKyAgICBh
dXRvIHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7CiAgICAgW21f
cGxheWVyQ29udHJvbGxlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlv
bnMuZ2V0KCldOwogICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQog
ICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2Vy
PihzZWxlY3RlZEluZGV4KV1dOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KaW5kZXggMDc2MjdmMWNiNDI0NzhiZDYzMzE5ZGU2
Y2ZiYTMzZjczNjlkZGExMy4uZmJlYTUzNjFiOWMzZThjMzA3NjhkZTNmYWVlYTM5ZTVhYjljZmQx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVi
b2FyZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0
ZWJvYXJkTWFjLm1tCkBAIC01MDYsMTEgKzUwNiwxMCBAQCBpbnQ2NF90IFBsYXRmb3JtUGFzdGVi
b2FyZDo6d3JpdGUoY29uc3QgVmVjdG9yPFBhc3RlYm9hcmRDdXN0b21EYXRhPiYgaXRlbURhdGEp
CiAgICAgaWYgKGl0ZW1EYXRhLnNpemUoKSA9PSAxKQogICAgICAgICByZXR1cm4gd3JpdGUoaXRl
bURhdGEuZmlyc3QoKSk7CiAKLSAgICBhdXRvIHBsYXRmb3JtSXRlbXMgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6aXRlbURhdGEuc2l6ZSgpXSk7Ci0g
ICAgZm9yIChhdXRvJiBkYXRhIDogaXRlbURhdGEpCi0gICAgICAgIFtwbGF0Zm9ybUl0ZW1zIGFk
ZE9iamVjdDpjcmVhdGVQYXN0ZWJvYXJkSXRlbShkYXRhKS5nZXQoKV07CiAgICAgW21fcGFzdGVi
b2FyZCBjbGVhckNvbnRlbnRzXTsKLSAgICBbbV9wYXN0ZWJvYXJkIHdyaXRlT2JqZWN0czpwbGF0
Zm9ybUl0ZW1zLmdldCgpXTsKKyAgICBbbV9wYXN0ZWJvYXJkIHdyaXRlT2JqZWN0czpjcmVhdGVO
U0FycmF5KGl0ZW1EYXRhLCBbXSAoYXV0byYgZGF0YSkgeworICAgICAgICByZXR1cm4gY3JlYXRl
UGFzdGVib2FyZEl0ZW0oZGF0YSk7CisgICAgfSkuZ2V0KCldOwogICAgIHJldHVybiBbbV9wYXN0
ZWJvYXJkIGNoYW5nZUNvdW50XTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCmluZGV4IGNkYjQ2MjRm
YmNhYWJjZmQ0OGYyZDQzOGI1MzgxYTQyYWNjZGEwZjYuLmQ5NjBmYzgwYTg5NWI4Y2Y5MTMzZGFi
OTY3NWJkYzY1ZTA0OWQ5MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0KQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgogI2ltcG9ydCAiUGxheWJh
Y2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorI2ltcG9ydCA8
d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJudWxsYWJpbGl0eS1jb21wbGV0ZW5lc3MiKQpAQCAt
MjA4LDE5ICsyMDksMTYgQEAgc3RhdGljIEFWVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvblR5
cGUgdG9BVlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25UeXBlKE0KICAgICByZXR1cm4gQVZU
b3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZVJlZ3VsYXI7CiB9CiAKLXN0YXRpYyBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zKQorc3RhdGljIFJldGFpblB0cjxOU0FycmF5
PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiYgb3B0aW9ucykKIHsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6b3B0aW9u
cy5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIG9wdGlvbiA6IG9wdGlvbnMpIHsKLSAgICAgICAg
aWYgKGF1dG8gd2ViT3B0aW9uID0gYWRvcHROUyhbYWxsb2NBVlRvdWNoQmFyTWVkaWFTZWxlY3Rp
b25PcHRpb25JbnN0YW5jZSgpIGluaXRXaXRoVGl0bGU6b3B0aW9uLmRpc3BsYXlOYW1lIHR5cGU6
dG9BVlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25UeXBlKG9wdGlvbi50eXBlKV0pKQotICAg
ICAgICAgICAgW3dlYk9wdGlvbnMgYWRkT2JqZWN0OndlYk9wdGlvbi5nZXQoKV07Ci0gICAgfQot
ICAgIHJldHVybiB3ZWJPcHRpb25zOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KG9wdGlvbnMs
IFtdIChhdXRvJiBvcHRpb24pIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW2FsbG9jQVZUb3Vj
aEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uSW5zdGFuY2UoKSBpbml0V2l0aFRpdGxlOm9wdGlvbi5k
aXNwbGF5TmFtZSB0eXBlOnRvQVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZShvcHRp
b24udHlwZSldKTsKKyAgICB9KTsKIH0KIAogLSAodm9pZClzZXRBdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9uczooY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYpb3B0aW9ucyB3aXRo
U2VsZWN0ZWRJbmRleDooTlNVSW50ZWdlcilzZWxlY3RlZEluZGV4CiB7Ci0gICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlv
bnMpOworICAgIGF1dG8gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25z
KTsKICAgICBbc2VsZiBzZXRBdWRpb1RvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9w
dGlvbnMuZ2V0KCldOwogICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRd
KQogICAgICAgICBbc2VsZiBzZXRDdXJyZW50QXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0
aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c2VsZWN0ZWRJbmRleF1dOwpAQCAtMjI4LDcg
KzIyNiw3IEBAIC0gKHZvaWQpc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6KGNvbnN0IFZl
Y3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mKW9wdGlvCiAKIC0gKHZvaWQpc2V0TGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uczooY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYp
b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDooTlNVSW50ZWdlcilzZWxlY3RlZEluZGV4CiB7Ci0g
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25P
cHRpb25zKG9wdGlvbnMpOworICAgIGF1dG8gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0
aW9ucyhvcHRpb25zKTsKICAgICBbc2VsZiBzZXRMZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlv
bk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07CiAgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2Vi
T3B0aW9ucyBjb3VudF0pCiAgICAgICAgIFtzZWxmIHNldEN1cnJlbnRMZWdpYmxlVG91Y2hCYXJN
ZWRpYVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnNlbGVjdGVkSW5k
ZXhdXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2Ev
TmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCmluZGV4IGM0YmQ1ZWZi
YWNiYWRhMGNlYTJlODBmYzg1NzE4ZDZhMTY3NmUyZjMuLmU2NzU5MDBlNDEwYjM5ZDI3ZTkwODYy
NjZkZTUzZTVmZGU0NmMxZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5t
bQpAQCAtMzYsNiArMzYsNyBAQAogI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAjaW1wb3J0IDx3
dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3Rm
L2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKIEBpbnRlcmZhY2UgTlNVUkwgKCkKQEAgLTY0LDkgKzY1LDkgQEAgdm9pZCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNv
bnN0IFVSTCYKIHsKICAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmls
ZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSB8fCBtX2lzSW5NZW1vcnlDb29raWVTdG9yZSk7CiAK
LSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG5zQ29va2llcyA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb29raWVzLnNpemUoKV0pOwotICAg
IGZvciAoY29uc3QgYXV0byYgY29va2llIDogY29va2llcykKLSAgICAgICAgW25zQ29va2llcyBh
ZGRPYmplY3Q6KE5TSFRUUENvb2tpZSAqKWNvb2tpZV07CisgICAgYXV0byBuc0Nvb2tpZXMgPSBj
cmVhdGVOU0FycmF5KGNvb2tpZXMsIFtdIChhdXRvJiBjb29raWUpIC0+IE5TSFRUUENvb2tpZSAq
IHsKKyAgICAgICAgcmV0dXJuIGNvb2tpZTsKKyAgICB9KTsKIAogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKICAgICBbbnNDb29raWVTdG9yYWdlKCkgc2V0Q29va2llczpuc0Nvb2tp
ZXMuZ2V0KCkgZm9yVVJMOihOU1VSTCAqKXVybCBtYWluRG9jdW1lbnRVUkw6KE5TVVJMICopbWFp
bkRvY3VtZW50VVJMXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL1Jlc291cmNlUmVxdWVzdENvY29hLm1tCmluZGV4IDc2NmVhM2I4MmY1
ODVhZjE2YWZkYWJlMTJhY2E4NzI4NjI0NDBiZDYuLjM2NTM4MmRmODEwMGI4ZTM0ZGFjYTg5NTQ5
MjA3Y2VjMTMzYTQzZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jb2NvYS9SZXNvdXJjZVJlcXVlc3RDb2NvYS5tbQpAQCAtMjAxLDEzICsy
MDEsMTIgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUGxhdGZvcm1SZXF1ZXN0KCkK
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGh0dHBIZWFkZXJGaWVsZHMoKSkKICAgICAg
ICAgW25zUmVxdWVzdCBzZXRWYWx1ZTpoZWFkZXIudmFsdWUgZm9ySFRUUEhlYWRlckZpZWxkOmhl
YWRlci5rZXldOwogCi0gICAgTlNNdXRhYmxlQXJyYXkgKmVuY29kaW5nRmFsbGJhY2tzID0gW05T
TXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVuY29kaW5nTmFtZSA6
IG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkpIHsKLSAg
ICAgICAgQ0ZTdHJpbmdFbmNvZGluZyBuc0VuY29kaW5nID0gQ0ZTdHJpbmdDb252ZXJ0RW5jb2Rp
bmdUb05TU3RyaW5nRW5jb2RpbmcoQ0ZTdHJpbmdDb252ZXJ0SUFOQUNoYXJTZXROYW1lVG9FbmNv
ZGluZyhlbmNvZGluZ05hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwotICAgICAgICBpZiAo
bnNFbmNvZGluZyAhPSBrQ0ZTdHJpbmdFbmNvZGluZ0ludmFsaWRJZCkKLSAgICAgICAgICAgIFtl
bmNvZGluZ0ZhbGxiYWNrcyBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZExv
bmc6bnNFbmNvZGluZ11dOwotICAgIH0KLSAgICBbbnNSZXF1ZXN0IHNldENvbnRlbnREaXNwb3Np
dGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTplbmNvZGluZ0ZhbGxiYWNrc107CisgICAgW25zUmVx
dWVzdCBzZXRDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6Y3JlYXRlTlNB
cnJheShtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LCBb
XSAoYXV0byYgbmFtZSkgLT4gTlNOdW1iZXIgKiB7CisgICAgICAgIGF1dG8gZW5jb2RpbmcgPSBD
RlN0cmluZ0NvbnZlcnRFbmNvZGluZ1RvTlNTdHJpbmdFbmNvZGluZyhDRlN0cmluZ0NvbnZlcnRJ
QU5BQ2hhclNldE5hbWVUb0VuY29kaW5nKG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwor
ICAgICAgICBpZiAoZW5jb2RpbmcgPT0ga0NGU3RyaW5nRW5jb2RpbmdJbnZhbGlkSWQpCisgICAg
ICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gQChlbmNvZGluZyk7CisgICAgfSku
Z2V0KCldOwogCiAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGNhY2hlUGFydGl0aW9uKCk7CiAgICAg
aWYgKCFwYXJ0aXRpb24uaXNOdWxsKCkgJiYgIXBhcnRpdGlvbi5pc0VtcHR5KCkpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJM
U2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3Jl
TlNVUkxTZXNzaW9uLmgKaW5kZXggNmRmOGQ0ODcwMjg3OGYxYWM3OWU5ZjMwYTk1NTg0YjkwZDJl
MWNkZS4uMjI5NGE5ZmQ5NWJjNzVhZjY0ZjI0YmI5MWQyMzYwMmQyZTVlYWJlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNz
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3Jl
TlNVUkxTZXNzaW9uLmgKQEAgLTYyLDcgKzYyLDcgQEAgV0VCQ09SRV9FWFBPUlQgQGludGVyZmFj
ZSBXZWJDb3JlTlNVUkxTZXNzaW9uIDogTlNPYmplY3QgewogICAgIFdlYWtPYmpDUHRyPGlkPE5T
VVJMU2Vzc2lvbkRlbGVnYXRlPj4gX2RlbGVnYXRlOwogICAgIFJldGFpblB0cjxOU09wZXJhdGlv
blF1ZXVlPiBfcXVldWU7CiAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfc2Vzc2lvbkRlc2NyaXB0
aW9uOwotICAgIEhhc2hTZXQ8UmV0YWluUHRyPENGVHlwZVJlZj4+IF9kYXRhVGFza3M7CisgICAg
SGFzaFNldDxSZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrPj4gX2RhdGFUYXNr
czsKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4+IF9vcmlnaW5z
OwogICAgIExvY2sgX2RhdGFUYXNrc0xvY2s7CiAgICAgQk9PTCBfaW52YWxpZGF0ZWQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VS
TFNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNv
cmVOU1VSTFNlc3Npb24ubW0KaW5kZXggNDczODBiMTVjYWFjNjIyMzdlMGQ0NTgwMzIzZjcwMzM4
ZjllODVlNy4uNGI5OGFkYWRiYWEzYzI1MGIyMGY0Y2FlNDZlMDE3NDUwMDBmOTllNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxT
ZXNzaW9uLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2Vi
Q29yZU5TVVJMU2Vzc2lvbi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiU3VicmVzb3Vy
Y2VMb2FkZXIuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL0NvbXBs
ZXRpb25IYW5kbGVyLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTkyLDcgKzkzLDcgQEAgLSAodm9pZClkZWFsbG9j
CiAgICAgewogICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2NrKTsKICAg
ICAgICAgZm9yIChhdXRvJiB0YXNrIDogX2RhdGFUYXNrcykKLSAgICAgICAgICAgICgoX19icmlk
Z2UgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopdGFzay5nZXQoKSkuc2Vzc2lvbiA9IG5p
bDsKKyAgICAgICAgICAgIFt0YXNrIHNldFNlc3Npb246bmlsXTsKICAgICB9CiAKICAgICBjYWxs
T25NYWluVGhyZWFkKFtsb2FkZXIgPSBXVEZNb3ZlKF9sb2FkZXIpXSB7CkBAIC0xMTUsOCArMTE2
LDggQEAgLSAodm9pZCl0YXNrQ29tcGxldGVkOihXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sg
Kil0YXNrCiAgICAgewogICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2Nr
KTsKIAotICAgICAgICBBU1NFUlQoX2RhdGFUYXNrcy5jb250YWlucygoX19icmlkZ2UgQ0ZUeXBl
UmVmKXRhc2spKTsKLSAgICAgICAgX2RhdGFUYXNrcy5yZW1vdmUoKF9fYnJpZGdlIENGVHlwZVJl
Zil0YXNrKTsKKyAgICAgICAgQVNTRVJUKF9kYXRhVGFza3MuY29udGFpbnModGFzaykpOworICAg
ICAgICBfZGF0YVRhc2tzLnJlbW92ZSh0YXNrKTsKICAgICAgICAgaWYgKCFfZGF0YVRhc2tzLmlz
RW1wdHkoKSB8fCAhX2ludmFsaWRhdGVkKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTIxNywyMyArMjE4LDIzIEBAIC0gKHZvaWQpZmluaXNoVGFza3NBbmRJbnZhbGlkYXRlCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmV0YWluUHRyPFdlYkNvcmVOU1VSTFNlc3Np
b24+IHN0cm9uZ1NlbGYgeyBzZWxmIH07Ci0gICAgW3NlbGYgYWRkRGVsZWdhdGVPcGVyYXRpb246
W3N0cm9uZ1NlbGZdIHsKLSAgICAgICAgaWYgKFtzdHJvbmdTZWxmLmdldCgpLmRlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoVVJMU2Vzc2lvbjpkaWRCZWNvbWVJbnZhbGlkV2l0
aEVycm9yOildKQotICAgICAgICAgICAgW3N0cm9uZ1NlbGYuZ2V0KCkuZGVsZWdhdGUgVVJMU2Vz
c2lvbjooTlNVUkxTZXNzaW9uICopc3Ryb25nU2VsZi5nZXQoKSBkaWRCZWNvbWVJbnZhbGlkV2l0
aEVycm9yOm5pbF07CisgICAgW3NlbGYgYWRkRGVsZWdhdGVPcGVyYXRpb246W3N0cm9uZ1NlbGYg
PSByZXRhaW5QdHIoc2VsZildIHsKKyAgICAgICAgYXV0byBkZWxlZ2F0ZSA9IHN0cm9uZ1NlbGYu
Z2V0KCkuZGVsZWdhdGU7CisgICAgICAgIGlmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihVUkxTZXNzaW9uOmRpZEJlY29tZUludmFsaWRXaXRoRXJyb3I6KV0pCisgICAg
ICAgICAgICBbZGVsZWdhdGUgVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc3Ryb25nU2VsZi5n
ZXQoKSBkaWRCZWNvbWVJbnZhbGlkV2l0aEVycm9yOm5pbF07CiAgICAgfV07CiB9CiAKIC0gKHZv
aWQpaW52YWxpZGF0ZUFuZENhbmNlbAogewotICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZUeXBlUmVm
Pj4gdGFza3NDb3B5OworICAgIFZlY3RvcjxSZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRh
dGFUYXNrPj4gdGFza3NDb3B5OwogICAgIHsKICAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihf
ZGF0YVRhc2tzTG9jayk7CiAgICAgICAgIHRhc2tzQ29weSA9IGNvcHlUb1ZlY3RvcihfZGF0YVRh
c2tzKTsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHRhc2sgOiB0YXNrc0NvcHkpCi0gICAgICAg
IFsoX19icmlkZ2UgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopdGFzay5nZXQoKSBjYW5j
ZWxdOworICAgICAgICBbdGFzayBjYW5jZWxdOwogCiAgICAgW3NlbGYgZmluaXNoVGFza3NBbmRJ
bnZhbGlkYXRlXTsKIH0KQEAgLTI1NiwyOSArMjU3LDI5IEBAIC0gKHZvaWQpZmx1c2hXaXRoQ29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiAKIC0gKHZv
aWQpZ2V0VGFza3NXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8TlNVUkxT
ZXNzaW9uRGF0YVRhc2sgKj4gKmRhdGFUYXNrcywgTlNBcnJheTxOU1VSTFNlc3Npb25VcGxvYWRU
YXNrICo+ICp1cGxvYWRUYXNrcywgTlNBcnJheTxOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sgKj4g
KmRvd25sb2FkVGFza3MpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkg
KmFycmF5ID0gbnVsbHB0cjsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gYXJyYXk7CiAgICAgewog
ICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2NrKTsKLSAgICAgICAgYXJy
YXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6X2RhdGFUYXNrcy5zaXplKCld
OwotICAgICAgICBmb3IgKGF1dG8mIHRhc2sgOiBfZGF0YVRhc2tzKQotICAgICAgICAgICAgW2Fy
cmF5IGFkZE9iamVjdDooX19icmlkZ2UgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopdGFz
ay5nZXQoKV07CisgICAgICAgIGFycmF5ID0gY3JlYXRlTlNBcnJheShfZGF0YVRhc2tzLCBbXSAo
YXV0byYgdGFzaykgeworICAgICAgICAgICAgcmV0dXJuIHRhc2suZ2V0KCk7CisgICAgICAgIH0p
OwogICAgIH0KICAgICBbc2VsZiBhZGREZWxlZ2F0ZU9wZXJhdGlvbjpeewotICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihhcnJheSwgbmlsLCBuaWwpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihhcnJheS5nZXQoKSwgbmlsLCBuaWwpOwogICAgIH1dOwogfQogCiAtICh2b2lkKWdldEFsbFRh
c2tzV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PF9fa2luZG9mIE5TVVJM
U2Vzc2lvblRhc2sgKj4gKnRhc2tzKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIE5TTXV0YWJs
ZUFycmF5ICphcnJheSA9IG51bGxwdHI7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IGFycmF5Owog
ICAgIHsKICAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihfZGF0YVRhc2tzTG9jayk7Ci0gICAg
ICAgIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Ol9kYXRhVGFza3Mu
c2l6ZSgpXTsKLSAgICAgICAgZm9yIChhdXRvJiB0YXNrIDogX2RhdGFUYXNrcykKLSAgICAgICAg
ICAgIFthcnJheSBhZGRPYmplY3Q6KF9fYnJpZGdlIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
ayAqKXRhc2suZ2V0KCldOworICAgICAgICBhcnJheSA9IGNyZWF0ZU5TQXJyYXkoX2RhdGFUYXNr
cywgW10gKGF1dG8mIHRhc2spIHsKKyAgICAgICAgICAgIHJldHVybiB0YXNrLmdldCgpOworICAg
ICAgICB9KTsKICAgICB9CiAgICAgW3NlbGYgYWRkRGVsZWdhdGVPcGVyYXRpb246XnsKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoYXJyYXkpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihh
cnJheS5nZXQoKSk7CiAgICAgfV07CiB9CiAKQEAgLTI5MCw3ICsyOTEsNyBAQCAtIChOU1VSTFNl
c3Npb25EYXRhVGFzayAqKWRhdGFUYXNrV2l0aFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVl
c3QKICAgICBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKnRhc2sgPSBbW1dlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFzayBhbGxvY10gaW5pdFdpdGhTZXNzaW9uOnNlbGYgaWRlbnRpZmllcjpf
bmV4dFRhc2tJZGVudGlmaWVyKysgcmVxdWVzdDpyZXF1ZXN0XTsKICAgICB7CiAgICAgICAgIExv
Y2tlcjxMb2NrPiBsb2NrZXIoX2RhdGFUYXNrc0xvY2spOwotICAgICAgICBfZGF0YVRhc2tzLmFk
ZCgoX19icmlkZ2UgQ0ZUeXBlUmVmKXRhc2spOworICAgICAgICBfZGF0YVRhc2tzLmFkZCh0YXNr
KTsKICAgICB9CiAgICAgcmV0dXJuIChOU1VSTFNlc3Npb25EYXRhVGFzayAqKVt0YXNrIGF1dG9y
ZWxlYXNlXTsKIH0KQEAgLTMwMyw3ICszMDQsNyBAQCAtIChOU1VSTFNlc3Npb25EYXRhVGFzayAq
KWRhdGFUYXNrV2l0aFVSTDooTlNVUkwgKil1cmwKICAgICBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0
YVRhc2sgKnRhc2sgPSBbW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBhbGxvY10gaW5pdFdp
dGhTZXNzaW9uOnNlbGYgaWRlbnRpZmllcjpfbmV4dFRhc2tJZGVudGlmaWVyKysgVVJMOnVybF07
CiAgICAgewogICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2NrKTsKLSAg
ICAgICAgX2RhdGFUYXNrcy5hZGQoKF9fYnJpZGdlIENGVHlwZVJlZil0YXNrKTsKKyAgICAgICAg
X2RhdGFUYXNrcy5hZGQodGFzayk7CiAgICAgfQogICAgIHJldHVybiAoTlNVUkxTZXNzaW9uRGF0
YVRhc2sgKilbdGFzayBhdXRvcmVsZWFzZV07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL2NvY29hL1BheW1lbnRBdXRob3JpemF0aW9uUHJlc2VudGVyLm1tIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9jb2NvYS9QYXltZW50QXV0aG9yaXphdGlvblByZXNlbnRlci5tbQpp
bmRleCAyNmI0N2JhY2JiODVhZTFkY2U4NGRjNjg0MGRiMjZlMmQ3NDU5ZTdlLi45YmE4NzIxNDY4
MzlmNzk4YWQwNGQ1YzM1MTFlYjAxY2UyNmI0OWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL2NvY29hL1BheW1lbnRBdXRob3JpemF0aW9uUHJlc2VudGVyLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vY29jb2EvUGF5bWVudEF1dGhvcml6YXRpb25QcmVzZW50ZXIu
bW0KQEAgLTM0LDYgKzM0LDggQEAKICNpbXBvcnQgPFdlYkNvcmUvUGF5bWVudE1lcmNoYW50U2Vz
c2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYXltZW50TWV0aG9kVXBkYXRlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1BheW1lbnRTdW1tYXJ5SXRlbXMuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0
b3JDb2NvYS5oPgorCiAjaW1wb3J0IDxwYWwvY29jb2EvUGFzc0tpdFNvZnRMaW5rLmg+CiAKIFNP
RlRfTElOS19GUkFNRVdPUksoQ29udGFjdHMpOwpAQCAtMTYwLDIyICsxNjIsMTggQEAgc3RhdGlj
IE5TRXJyb3IgKnRvTlNFcnJvcihjb25zdCBXZWJDb3JlOjpQYXltZW50RXJyb3ImIGVycm9yKQog
ICAgIHJldHVybiBbTlNFcnJvciBlcnJvcldpdGhEb21haW46UEFMOjpnZXRfUGFzc0tpdF9QS1Bh
eW1lbnRFcnJvckRvbWFpbigpIGNvZGU6dG9QS1BheW1lbnRFcnJvckNvZGUoZXJyb3IuY29kZSkg
dXNlckluZm86dXNlckluZm8uZ2V0KCldOwogfQogCi1zdGF0aWMgTlNBcnJheSAqdG9OU0Vycm9y
cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6UGF5bWVudEVycm9yPiYgZXJyb3JzKQorc3RhdGljIFJl
dGFpblB0cjxOU0FycmF5PiB0b05TRXJyb3JzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpQYXltZW50
RXJyb3I+JiBlcnJvcnMpCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFi
bGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTplcnJvcnMuc2l6ZSgpXTsKLSAgICBmb3IgKGNvbnN0
IGF1dG8mIGVycm9yIDogZXJyb3JzKSB7Ci0gICAgICAgIGlmIChOU0Vycm9yICpuc0Vycm9yID0g
dG9OU0Vycm9yKGVycm9yKSkKLSAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0Om5zRXJyb3Jd
OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KGVy
cm9ycywgW10gKGF1dG8mIGVycm9yKSB7CisgICAgICAgIHJldHVybiB0b05TRXJyb3IoZXJyb3Ip
OworICAgIH0pOwogfQogCi1zdGF0aWMgTlNBcnJheSAqdG9QS1NoaXBwaW5nTWV0aG9kcyhjb25z
dCBWZWN0b3I8V2ViQ29yZTo6QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5n
TWV0aG9kPiYgc2hpcHBpbmdNZXRob2RzKQorc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiB0b1BL
U2hpcHBpbmdNZXRob2RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXlt
ZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2Q+JiBzaGlwcGluZ01ldGhvZHMpCiB7Ci0gICAgTlNN
dXRhYmxlQXJyYXkgKnBrU2hpcHBpbmdNZXRob2RzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0
aENhcGFjaXR5OnNoaXBwaW5nTWV0aG9kcy5zaXplKCldOwotICAgIGZvciAoYXV0byYgc2hpcHBp
bmdNZXRob2QgOiBzaGlwcGluZ01ldGhvZHMpCi0gICAgICAgIFtwa1NoaXBwaW5nTWV0aG9kcyBh
ZGRPYmplY3Q6dG9QS1NoaXBwaW5nTWV0aG9kKHNoaXBwaW5nTWV0aG9kKV07Ci0gICAgcmV0dXJu
IHBrU2hpcHBpbmdNZXRob2RzOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHNoaXBwaW5nTWV0
aG9kcywgW10gKGF1dG8mIG1ldGhvZCkgeworICAgICAgICByZXR1cm4gdG9QS1NoaXBwaW5nTWV0
aG9kKG1ldGhvZCk7CisgICAgfSk7CiB9CiAKIHZvaWQgUGF5bWVudEF1dGhvcml6YXRpb25QcmVz
ZW50ZXI6OmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGNvbnN0IFdlYkNvcmU6OlBheW1lbnRN
ZXJjaGFudFNlc3Npb24mIG1lcmNoYW50U2Vzc2lvbikKQEAgLTE5OSw4ICsxOTcsOCBAQCB2b2lk
IFBheW1lbnRBdXRob3JpemF0aW9uUHJlc2VudGVyOjpjb21wbGV0ZVBheW1lbnRTZXNzaW9uKGNv
bnN0IE9wdGlvbmFsPFdlYkNvcgogewogICAgIEFTU0VSVChwbGF0Zm9ybURlbGVnYXRlKCkpOwog
ICAgIGF1dG8gc3RhdHVzID0gcmVzdWx0ID8gdG9QS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVz
KHJlc3VsdC0+c3RhdHVzKSA6IFBLUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXNTdWNjZXNzOwot
ICAgIE5TQXJyYXkgKmVycm9ycyA9IHJlc3VsdCA/IHRvTlNFcnJvcnMocmVzdWx0LT5lcnJvcnMp
IDogQFsgXTsKLSAgICBbcGxhdGZvcm1EZWxlZ2F0ZSgpIGNvbXBsZXRlUGF5bWVudFNlc3Npb246
c3RhdHVzIGVycm9yczplcnJvcnMgZGlkUmVhY2hGaW5hbFN0YXRlOldlYkNvcmU6OmlzRmluYWxT
dGF0ZVJlc3VsdChyZXN1bHQpXTsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZXJyb3JzID0gcmVz
dWx0ID8gdG9OU0Vycm9ycyhyZXN1bHQtPmVycm9ycykgOiBAWyBdOworICAgIFtwbGF0Zm9ybURl
bGVnYXRlKCkgY29tcGxldGVQYXltZW50U2Vzc2lvbjpzdGF0dXMgZXJyb3JzOmVycm9ycy5nZXQo
KSBkaWRSZWFjaEZpbmFsU3RhdGU6V2ViQ29yZTo6aXNGaW5hbFN0YXRlUmVzdWx0KHJlc3VsdCld
OwogfQogCiB2b2lkIFBheW1lbnRBdXRob3JpemF0aW9uUHJlc2VudGVyOjpjb21wbGV0ZVNoaXBw
aW5nQ29udGFjdFNlbGVjdGlvbihjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaGlwcGluZ0NvbnRh
Y3RVcGRhdGU+JiB1cGRhdGUpCkBAIC0yMTIsNyArMjEwLDkgQEAgdm9pZCBQYXltZW50QXV0aG9y
aXphdGlvblByZXNlbnRlcjo6Y29tcGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24oY29uc3Qg
T3B0aW8KICAgICB9CiAKICAgICAvLyBGSVhNRTogV2ViQ29yZTo6U2hpcHBpbmdDb250YWN0VXBk
YXRlIHNob3VsZCBrbm93IGhvdyB0byBjb252ZXJ0IGl0c2VsZiB0byBhIFBLUGF5bWVudFJlcXVl
c3RTaGlwcGluZ0NvbnRhY3RVcGRhdGUuCi0gICAgYXV0byBzaGlwcGluZ0NvbnRhY3RVcGRhdGUg
PSBhZG9wdE5TKFtQQUw6OmFsbG9jUEtQYXltZW50UmVxdWVzdFNoaXBwaW5nQ29udGFjdFVwZGF0
ZUluc3RhbmNlKCkgaW5pdFdpdGhFcnJvcnM6dG9OU0Vycm9ycyh1cGRhdGUtPmVycm9ycykgcGF5
bWVudFN1bW1hcnlJdGVtczpXZWJDb3JlOjpwbGF0Zm9ybVN1bW1hcnlJdGVtcyh1cGRhdGUtPm5l
d1RvdGFsQW5kTGluZUl0ZW1zKSBzaGlwcGluZ01ldGhvZHM6dG9QS1NoaXBwaW5nTWV0aG9kcyh1
cGRhdGUtPm5ld1NoaXBwaW5nTWV0aG9kcyldKTsKKyAgICBhdXRvIHNoaXBwaW5nQ29udGFjdFVw
ZGF0ZSA9IGFkb3B0TlMoW1BBTDo6YWxsb2NQS1BheW1lbnRSZXF1ZXN0U2hpcHBpbmdDb250YWN0
VXBkYXRlSW5zdGFuY2UoKSBpbml0V2l0aEVycm9yczp0b05TRXJyb3JzKHVwZGF0ZS0+ZXJyb3Jz
KS5nZXQoKQorICAgICAgICBwYXltZW50U3VtbWFyeUl0ZW1zOldlYkNvcmU6OnBsYXRmb3JtU3Vt
bWFyeUl0ZW1zKHVwZGF0ZS0+bmV3VG90YWxBbmRMaW5lSXRlbXMpCisgICAgICAgIHNoaXBwaW5n
TWV0aG9kczp0b1BLU2hpcHBpbmdNZXRob2RzKHVwZGF0ZS0+bmV3U2hpcHBpbmdNZXRob2RzKS5n
ZXQoKV0pOwogICAgIFtwbGF0Zm9ybURlbGVnYXRlKCkgY29tcGxldGVTaGlwcGluZ0NvbnRhY3RT
ZWxlY3Rpb246c2hpcHBpbmdDb250YWN0VXBkYXRlLmdldCgpXTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvY29jb2EvV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxlUGF5L2NvY29hL1dlYlBh
eW1lbnRDb29yZGluYXRvclByb3h5Q29jb2EubW0KaW5kZXggMzEzMDg4NjY1MjVmNjE4YjhmNjE4
YTZkNTc5ZGI4NzM2MDcwMGU4Ny4uYmE1ZTM5YWU0NzI2ODNlNDk2ZWFmMjY4MTI1M2FlZjJjYWMx
M2MzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvY29jb2EvV2Vi
UGF5bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9BcHBsZVBheS9jb2NvYS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLm1tCkBAIC0x
ODcsMTUgKzE4Nyw3IEBAIFJldGFpblB0cjxQS1BheW1lbnRSZXF1ZXN0PiBXZWJQYXltZW50Q29v
cmRpbmF0b3JQcm94eTo6cGxhdGZvcm1QYXltZW50UmVxdWVzdChjCiAKICAgICBbcmVzdWx0IHNl
dE9yaWdpbmF0aW5nVVJMOm9yaWdpbmF0aW5nVVJMXTsKIAotICAgIC8vIEZJWE1FOiBXZSBkb24n
dCBzdXBwb3J0IGFueSBwbGF0Zm9ybXMgd2l0aG91dCAtc2V0VGh1bWJuYWlsVVJMczosIHNvIHRo
aXMgY2FuIGJlIHNpbXBsaWZpZWQuCi0gICAgaWYgKFtyZXN1bHQgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihzZXRUaHVtYm5haWxVUkxzOildKSB7Ci0gICAgICAgIGF1dG8gdGh1bWJuYWls
VVJMcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgICAgICBm
b3IgKGF1dG8mIGxpbmtJY29uVVJMIDogbGlua0ljb25VUkxzKQotICAgICAgICAgICAgW3RodW1i
bmFpbFVSTHMgYWRkT2JqZWN0OnN0YXRpY19jYXN0PE5TVVJMICo+KGxpbmtJY29uVVJMKV07Ci0K
LSAgICAgICAgW3Jlc3VsdCBzZXRUaHVtYm5haWxVUkxzOnRodW1ibmFpbFVSTHMuZ2V0KCldOwot
ICAgIH0gZWxzZSBpZiAoIWxpbmtJY29uVVJMcy5pc0VtcHR5KCkpCi0gICAgICAgIFtyZXN1bHQg
c2V0VGh1bWJuYWlsVVJMOmxpbmtJY29uVVJMc1swXV07CisgICAgW3Jlc3VsdCBzZXRUaHVtYm5h
aWxVUkxzOmNyZWF0ZU5TQXJyYXkobGlua0ljb25VUkxzKS5nZXQoKV07CiAKICAgICBbcmVzdWx0
IHNldEFQSVR5cGU6dG9BUElUeXBlKHBheW1lbnRSZXF1ZXN0LnJlcXVlc3RlcigpKV07CiAKQEAg
LTIxMSwxMCArMjAzLDkgQEAgUmV0YWluUHRyPFBLUGF5bWVudFJlcXVlc3Q+IFdlYlBheW1lbnRD
b29yZGluYXRvclByb3h5OjpwbGF0Zm9ybVBheW1lbnRSZXF1ZXN0KGMKIAogICAgIFtyZXN1bHQg
c2V0U2hpcHBpbmdUeXBlOnRvUEtTaGlwcGluZ1R5cGUocGF5bWVudFJlcXVlc3Quc2hpcHBpbmdU
eXBlKCkpXTsKIAotICAgIGF1dG8gc2hpcHBpbmdNZXRob2RzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgZm9yIChhdXRvJiBzaGlwcGluZ01ldGhvZCA6IHBh
eW1lbnRSZXF1ZXN0LnNoaXBwaW5nTWV0aG9kcygpKQotICAgICAgICBbc2hpcHBpbmdNZXRob2Rz
IGFkZE9iamVjdDp0b1BLU2hpcHBpbmdNZXRob2Qoc2hpcHBpbmdNZXRob2QpXTsKLSAgICBbcmVz
dWx0IHNldFNoaXBwaW5nTWV0aG9kczpzaGlwcGluZ01ldGhvZHMuZ2V0KCldOworICAgIFtyZXN1
bHQgc2V0U2hpcHBpbmdNZXRob2RzOmNyZWF0ZU5TQXJyYXkocGF5bWVudFJlcXVlc3Quc2hpcHBp
bmdNZXRob2RzKCksIFtdIChhdXRvJiBtZXRob2QpIHsKKyAgICAgICAgcmV0dXJuIHRvUEtTaGlw
cGluZ01ldGhvZChtZXRob2QpOworICAgIH0pLmdldCgpXTsKIAogICAgIFtyZXN1bHQgc2V0UGF5
bWVudFN1bW1hcnlJdGVtczpXZWJDb3JlOjpwbGF0Zm9ybVN1bW1hcnlJdGVtcyhwYXltZW50UmVx
dWVzdC50b3RhbCgpLCBwYXltZW50UmVxdWVzdC5saW5lSXRlbXMoKSldOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlUHJv
cGVydHlBcHBsaWVyLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbQppbmRleCBlNDcwMzVjY2ExZTdhODg5MmQx
ZDkwZWI4YjIxNTIzY2UxNGRhNDFlLi40MzU4ODU3ODQwZmViNjcyZDk1ZjUxNzZmYTUyOGZlMGJk
MGQyNGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUv
UmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW0KQEAg
LTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWVNYWMuaD4KICNp
bXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgogI2ltcG9ydCA8d3RmL0Jsb2Nr
T2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgpAQCAtMzEz
LDM1ICszMTQsMjggQEAgdm9pZCBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXI6OnVwZGF0
ZUNoaWxkcmVuKFJlbW90ZUxheWVyVHJlZU5vZGUmIG5vZGUsIGMKIAogICAgIGlmIChoYXNWaWV3
Q2hpbGRyZW4oKSkgewogICAgICAgICBBU1NFUlQobm9kZS51aVZpZXcoKSk7Ci0KLSAgICAgICAg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBzdWJ2aWV3cyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpwcm9wZXJ0aWVzLmNoaWxkcmVuLnNpemUoKV0p
OwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogcHJvcGVydGllcy5jaGlsZHJlbikgeworICAg
ICAgICBbY29udGVudFZpZXcoKSBfd2ViX3NldFN1YnZpZXdzOmNyZWF0ZU5TQXJyYXkocHJvcGVy
dGllcy5jaGlsZHJlbiwgWyZdIChhdXRvJiBjaGlsZCkgLT4gVUlWaWV3ICogewogICAgICAgICAg
ICAgYXV0byogY2hpbGROb2RlID0gcmVsYXRlZExheWVycy5nZXQoY2hpbGQpOwogICAgICAgICAg
ICAgQVNTRVJUKGNoaWxkTm9kZSk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkTm9kZSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAg
ICAgICAgQVNTRVJUKGNoaWxkTm9kZS0+dWlWaWV3KCkpOwotICAgICAgICAgICAgW3N1YnZpZXdz
IGFkZE9iamVjdDpjaGlsZE5vZGUtPnVpVmlldygpXTsKLSAgICAgICAgfQotCi0gICAgICAgIFtj
b250ZW50VmlldygpIF93ZWJfc2V0U3Vidmlld3M6c3Vidmlld3MuZ2V0KCldOworICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkTm9kZS0+dWlWaWV3KCk7CisgICAgICAgIH0pLmdldCgpXTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiBzdWJsYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2Fw
YWNpdHk6cHJvcGVydGllcy5jaGlsZHJlbi5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIGNoaWxk
IDogcHJvcGVydGllcy5jaGlsZHJlbikgeworICAgIG5vZGUubGF5ZXIoKS5zdWJsYXllcnMgPSBj
cmVhdGVOU0FycmF5KHByb3BlcnRpZXMuY2hpbGRyZW4sIFsmXSAoYXV0byYgY2hpbGQpIC0+IENB
TGF5ZXIgKiB7CiAgICAgICAgIGF1dG8qIGNoaWxkTm9kZSA9IHJlbGF0ZWRMYXllcnMuZ2V0KGNo
aWxkKTsKICAgICAgICAgQVNTRVJUKGNoaWxkTm9kZSk7CiAgICAgICAgIGlmICghY2hpbGROb2Rl
KQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4gbmlsOwogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIEFTU0VSVCghY2hpbGROb2RlLT51aVZpZXcoKSk7
CiAjZW5kaWYKLSAgICAgICAgW3N1YmxheWVycyBhZGRPYmplY3Q6Y2hpbGROb2RlLT5sYXllcigp
XTsKLSAgICB9Ci0KLSAgICBub2RlLmxheWVyKCkuc3VibGF5ZXJzID0gc3VibGF5ZXJzLmdldCgp
OworICAgICAgICByZXR1cm4gY2hpbGROb2RlLT5sYXllcigpOworICAgIH0pLmdldCgpOwogfQog
CiB2b2lkIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllcjo6dXBkYXRlTWFzayhSZW1vdGVM
YXllclRyZWVOb2RlJiBub2RlLCBjb25zdCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5
ZXJQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBjb25zdCBSZWxhdGVkTGF5ZXJNYXAmIHJlbGF0ZWRM
YXllcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tI
VFRQQ29va2llU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tI
VFRQQ29va2llU3RvcmUubW0KaW5kZXggMDg0Y2ZhZTQ3MmVlNzc5YzViY2E2YTFlYjI4OTczNTE2
MGE3YzRhZS4uMDIzYTUyM2ZiMjY2YTY4MzczN2ViMjc0ZWI5ODdkOWEzOGZjMDk5MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLSFRUUENvb2tpZVN0b3Jl
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0hUVFBDb29raWVT
dG9yZS5tbQpAQCAtMzQsMTUgKzM0LDEzIEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAj
aW1wb3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KKyNpbXBvcnQg
PHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiBzdGF0aWMgTlNBcnJheTxOU0hUVFBDb29raWUg
Kj4gKmNvcmVDb29raWVzVG9OU0Nvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
IGNvcmVDb29raWVzKQogewotICAgIE5TTXV0YWJsZUFycmF5PE5TSFRUUENvb2tpZSAqPiAqbnND
b29raWVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNvcmVDb29raWVzLnNp
emUoKV07Ci0KLSAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGNvcmVDb29raWVzKQotICAgICAgICBb
bnNDb29raWVzIGFkZE9iamVjdDooTlNIVFRQQ29va2llICopY29va2llXTsKLQotICAgIHJldHVy
biBuc0Nvb2tpZXM7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoY29yZUNvb2tpZXMsIFtdIChh
dXRvJiBjb29raWUpIC0+IE5TSFRUUENvb2tpZSAqIHsKKyAgICAgICAgcmV0dXJuIGNvb2tpZTsK
KyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiBjbGFzcyBXS0hUVFBDb29raWVTdG9yZU9ic2Vy
dmVyIDogcHVibGljIEFQSTo6SFRUUENvb2tpZVN0b3JlOjpPYnNlcnZlciB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCmluZGV4IGY1
ZWFjZWUwZThjZTNiMzE0OTM0NTQxMGY5YTI2MWQ1MjdlMzkxMTguLjQyZDQ1NmEyMWNiOTZiYzM0
YzhjYzU5OTdhMWIzMTdmOTRiMjk1ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCkBAIC0xNjQsMTEgKzE2NCw5IEBAICsgKFdL
UHJvY2Vzc1Bvb2wgKilfc2hhcmVkUHJvY2Vzc1Bvb2wKIAogKyAoTlNBcnJheTxXS1Byb2Nlc3NQ
b29sICo+ICopX2FsbFByb2Nlc3NQb29sc0ZvclRlc3RpbmcKIHsKLSAgICBhdXRvJiBhbGxQb29s
cyA9IFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpOwotICAgIGF1dG8g
bnNBbGxQb29scyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBh
Y2l0eTphbGxQb29scy5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8qIHBvb2wgOiBhbGxQb29scykK
LSAgICAgICAgW25zQWxsUG9vbHMgYWRkT2JqZWN0OndyYXBwZXIoKnBvb2wpXTsKLSAgICByZXR1
cm4gbnNBbGxQb29scy5hdXRvcmVsZWFzZSgpOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpLCBbXSAoYXV0byYgcG9vbCkg
eworICAgICAgICByZXR1cm4gd3JhcHBlcigqcG9vbCk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsK
IH0KIAogKyAoTlNVUkwgKilfd2Vic2l0ZURhdGFVUkxGb3JDb250YWluZXJXaXRoVVJMOihOU1VS
TCAqKWNvbnRhaW5lclVSTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0KaW5kZXggMDAzNDE1OGJhMjFmZjNhODEwN2ZjZTdkMDdmOGIwNjFkOWI0MjY2
Mi4uODUwM2ViZmYzNTBiMjc3ZTUwODYyYWQyMTgyZmE5ZDdlMjgwNDI0YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0xNjc0LDM3ICsx
Njc0LDIzIEBAIC0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlv
bjooX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpCiAgICAgICAgIGlmICghZGVsZWdhdGUp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKCFbZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW1z
OildKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtUmVmZXJlbmNlcykgewot
ICAgICAgICAgICAgICAgIE5TTXV0YWJsZUFycmF5ICp3a1Rva2VucyA9IFtOU011dGFibGVBcnJh
eSBhcnJheVdpdGhDYXBhY2l0eTppdGVtLnRva2Vucy5zaXplKCldOwotICAgICAgICAgICAgICAg
IGZvciAoYXV0byYgdG9rZW4gOiBpdGVtLnRva2VucykgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIHdrVG9rZW4gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIGFsbG9jXSBp
bml0XSk7Ci0gICAgICAgICAgICAgICAgICAgIFt3a1Rva2VuIHNldElkZW50aWZpZXI6U3RyaW5n
OjpudW1iZXIodG9rZW4uaWRlbnRpZmllci50b1VJbnQ2NCgpKV07Ci0gICAgICAgICAgICAgICAg
ICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6dG9rZW4uY29udGVudF07Ci0gICAgICAgICAgICAgICAg
ICAgIFt3a1Rva2VuIHNldEV4Y2x1ZGVkOnRva2VuLmlzRXhjbHVkZWRdOwotICAgICAgICAgICAg
ICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OndrVG9rZW4uZ2V0KCldOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBhdXRvIHdrSXRlbSA9IGFkb3B0TlMoW1tfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKGl0
ZW0uaWRlbnRpZmllci50b1VJbnQ2NCgpKSB0b2tlbnM6d2tUb2tlbnNdKTsKLSAgICAgICAgICAg
ICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFu
aXB1bGF0aW9uSXRlbTp3a0l0ZW0uZ2V0KCldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKndrSXRlbXMgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6aXRlbVJlZmVyZW5jZXMuc2l6ZSgpXTsK
LSAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbVJlZmVyZW5jZXMpIHsKLSAgICAgICAgICAg
IE5TTXV0YWJsZUFycmF5ICp3a1Rva2VucyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBh
Y2l0eTppdGVtLnRva2Vucy5zaXplKCldOwotICAgICAgICAgICAgZm9yIChhdXRvJiB0b2tlbiA6
IGl0ZW0udG9rZW5zKSB7CisgICAgICAgIGF1dG8gY3JlYXRlV0tJdGVtID0gW10gKGNvbnN0IFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25JdGVtJiBpdGVt
KSB7CisgICAgICAgICAgICBhdXRvIHRva2VucyA9IGNyZWF0ZU5TQXJyYXkoaXRlbS50b2tlbnMs
IFtdIChhdXRvJiB0b2tlbikgewogICAgICAgICAgICAgICAgIGF1dG8gd2tUb2tlbiA9IGFkb3B0
TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gYWxsb2NdIGluaXRdKTsKICAgICAgICAgICAg
ICAgICBbd2tUb2tlbiBzZXRJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKHRva2VuLmlkZW50aWZp
ZXIudG9VSW50NjQoKSldOwogICAgICAgICAgICAgICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6dG9r
ZW4uY29udGVudF07CiAgICAgICAgICAgICAgICAgW3drVG9rZW4gc2V0RXhjbHVkZWQ6dG9rZW4u
aXNFeGNsdWRlZF07Ci0gICAgICAgICAgICAgICAgW3drVG9rZW5zIGFkZE9iamVjdDp3a1Rva2Vu
LmdldCgpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gd2tJdGVtID0gYWRvcHRO
UyhbW19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3Ry
aW5nOjpudW1iZXIoaXRlbS5pZGVudGlmaWVyLnRvVUludDY0KCkpIHRva2Vuczp3a1Rva2Vuc10p
OwotICAgICAgICAgICAgW3drSXRlbXMgYWRkT2JqZWN0OndrSXRlbS5nZXQoKV07CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHdrVG9rZW47CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRl
bnRpZmllcjpTdHJpbmc6Om51bWJlcihpdGVtLmlkZW50aWZpZXIudG9VSW50NjQoKSkgdG9rZW5z
OnRva2Vucy5nZXQoKV0pOworICAgICAgICB9OworCisgICAgICAgIGlmIChbZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpkaWRGaW5kVGV4dE1hbmlwdWxhdGlv
bkl0ZW1zOildKQorICAgICAgICAgICAgW2RlbGVnYXRlIF93ZWJWaWV3OnJldGFpbmVkU2VsZi5n
ZXQoKSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW1zOmNyZWF0ZU5TQXJyYXkoaXRlbVJlZmVy
ZW5jZXMsIGNyZWF0ZVdLSXRlbSkuZ2V0KCldOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgaXRlbSA6IGl0ZW1SZWZlcmVuY2VzKQorICAgICAgICAgICAgICAgIFtkZWxl
Z2F0ZSBfd2ViVmlldzpyZXRhaW5lZFNlbGYuZ2V0KCkgZGlkRmluZFRleHRNYW5pcHVsYXRpb25J
dGVtOmNyZWF0ZVdLSXRlbShpdGVtKS5nZXQoKV07CiAgICAgICAgIH0KLSAgICAgICAgW2RlbGVn
YXRlIF93ZWJWaWV3OnJldGFpbmVkU2VsZi5nZXQoKSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0
ZW1zOndrSXRlbXNdOwotCiAgICAgfSwgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJs
b2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgewogICAgICAgICBjYXB0dXJlZENvbXBsZXRp
b25CbG9jaygpOwogICAgIH0pOwpAQCAtMTc0OSwzNiArMTczNSwzMiBAQCBzdGF0aWMgUmV0YWlu
UHRyPE5TTXV0YWJsZUFycmF5PiBtYWtlRmFpbHVyZVNldEZvckFsbFRleHRNYW5pcHVsYXRpb25J
dGVtcyhOU0FycgogICAgIHJldHVybiB3a0ZhaWx1cmVzOwogfTsKIAotc3RhdGljIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gd2tUZXh0TWFuaXB1bGF0aW9uRXJyb3JzKE5TQXJyYXk8X1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKml0ZW1zLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvbkZhaWx1cmU+JiBmYWlsdXJlcykKK3N0
YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gd2tUZXh0TWFuaXB1bGF0aW9uRXJyb3JzKE5TQXJyYXk8
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKml0ZW1zLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvbkZhaWx1cmU+JiBmYWlsdXJl
cykKIHsKLSAgICB1c2luZyBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZSA9IFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTsKLQogICAgIGlm
IChmYWlsdXJlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBSZXRhaW5QdHI8TlNNdXRhYmxl
QXJyYXk+IHsgbmlsIH07CisgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHdrRmFpbHVyZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6ZmFpbHVyZXMuc2l6ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBjb3Jl
RmFpbHVyZSA6IGZhaWx1cmVzKSB7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoZmFpbHVyZXMs
IFsmXSAoYXV0byYgY29yZUZhaWx1cmUpIC0+IE5TRXJyb3IgKiB7CiAgICAgICAgIEFTU0VSVChj
b3JlRmFpbHVyZS5pbmRleCA8IGl0ZW1zLmNvdW50KTsKICAgICAgICAgaWYgKGNvcmVGYWlsdXJl
LmluZGV4ID49IGl0ZW1zLmNvdW50KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1
dG8qIGl0ZW0gPSBpdGVtc1tjb3JlRmFpbHVyZS5pbmRleF07Ci0gICAgICAgIEFTU0VSVChjb3Jl
VGV4dE1hbmlwdWxhdGlvbkl0ZW1JZGVudGlmaWVyRnJvbVN0cmluZyhpdGVtLmlkZW50aWZpZXIp
ID09IGNvcmVGYWlsdXJlLmlkZW50aWZpZXIpOwotICAgICAgICBhdXRvIGVycm9yQ29kZSA9IChb
JmNvcmVGYWlsdXJlXSgpIHsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIGF1dG8g
ZXJyb3JDb2RlID0gc3RhdGljX2Nhc3Q8TlNJbnRlZ2VyPigoWyZjb3JlRmFpbHVyZV0geworICAg
ICAgICAgICAgdXNpbmcgVHlwZSA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTsKICAgICAgICAgICAgIHN3aXRjaCAoY29yZUZhaWx1
cmUudHlwZSkgewotICAgICAgICAgICAgY2FzZSBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6Q29u
dGVudENoYW5nZWQ6CisgICAgICAgICAgICBjYXNlIFR5cGU6OkNvbnRlbnRDaGFuZ2VkOgogICAg
ICAgICAgICAgICAgIHJldHVybiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbUVycm9yQ29udGVudENo
YW5nZWQ7Ci0gICAgICAgICAgICBjYXNlIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpJbnZhbGlk
SXRlbToKKyAgICAgICAgICAgIGNhc2UgVHlwZTo6SW52YWxpZEl0ZW06CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtRXJyb3JJbnZhbGlkSXRlbTsKLSAgICAg
ICAgICAgIGNhc2UgTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkludmFsaWRUb2tlbjoKKyAgICAg
ICAgICAgIGNhc2UgVHlwZTo6SW52YWxpZFRva2VuOgogICAgICAgICAgICAgICAgIHJldHVybiBf
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbUVycm9ySW52YWxpZFRva2VuOwotICAgICAgICAgICAgY2Fz
ZSBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6RXhjbHVzaW9uVmlvbGF0aW9uOgorICAgICAgICAg
ICAgY2FzZSBUeXBlOjpFeGNsdXNpb25WaW9sYXRpb246CiAgICAgICAgICAgICAgICAgcmV0dXJu
IF9XS1RleHRNYW5pcHVsYXRpb25JdGVtRXJyb3JFeGNsdXNpb25WaW9sYXRpb247CiAgICAgICAg
ICAgICB9Ci0gICAgICAgIH0pKCk7Ci0gICAgICAgIFt3a0ZhaWx1cmVzIGFkZE9iamVjdDpbTlNF
cnJvciBlcnJvcldpdGhEb21haW46X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW1FcnJvckRvbWFpbiBj
b2RlOnN0YXRpY19jYXN0PGludD4oZXJyb3JDb2RlKSB1c2VySW5mbzpAe19XS1RleHRNYW5pcHVs
YXRpb25JdGVtRXJyb3JJdGVtS2V5OiBpdGVtfV1dOwotICAgIH0KLQotICAgIHJldHVybiB3a0Zh
aWx1cmVzOworICAgICAgICB9KSgpKTsKKyAgICAgICAgYXV0byBpdGVtID0gaXRlbXNbY29yZUZh
aWx1cmUuaW5kZXhdOworICAgICAgICBBU1NFUlQoY29yZVRleHRNYW5pcHVsYXRpb25JdGVtSWRl
bnRpZmllckZyb21TdHJpbmcoaXRlbS5pZGVudGlmaWVyKSA9PSBjb3JlRmFpbHVyZS5pZGVudGlm
aWVyKTsKKyAgICAgICAgcmV0dXJuIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbUVycm9yRG9tYWluIGNvZGU6ZXJyb3JDb2RlIHVzZXJJbmZvOkB7X1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW1FcnJvckl0ZW1LZXk6IGl0ZW19XTsKKyAgICB9KTsKIH0KIAogLSAo
dm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6KE5TQXJyYXk8X1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0gKj4gKilpdGVtcyBjb21wbGV0aW9uOih2b2lkKF4pKE5TQXJyYXk8TlNF
cnJvciAqPiAqZXJyb3JzKSljb21wbGV0aW9uSGFuZGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tCmluZGV4
IGE1YTk0MWYxZDdmYjJkYmRiY2RlY2JmMTZkZTNiYmVjZGJlYzk5YTEuLjlhNTMwMzc0ODA0MjY3
ZTU2NWRlMzUxZjAyY2JlN2M4OTNlNmUwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0KQEAgLTI1MSwx
MSArMjUxLDkgQEAgLSAoX1dLV2Vic2l0ZVBvcFVwUG9saWN5KV9wb3BVcFBvbGljeQogCiAtIChO
U0FycmF5PF9XS0N1c3RvbUhlYWRlckZpZWxkcyAqPiAqKV9jdXN0b21IZWFkZXJGaWVsZHMKIHsK
LSAgICBjb25zdCBhdXRvJiBmaWVsZHMgPSBfd2Vic2l0ZVBvbGljaWVzLT5jdXN0b21IZWFkZXJG
aWVsZHMoKTsKLSAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhDYXBhY2l0eTpmaWVsZHMuc2l6ZSgpXSBhdXRvcmVsZWFzZV07Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiBmaWVsZCA6IGZpZWxkcykKLSAgICAgICAgW2FycmF5IGFkZE9iamVj
dDp3cmFwcGVyKEFQSTo6Q3VzdG9tSGVhZGVyRmllbGRzOjpjcmVhdGUoZmllbGQpKV07Ci0gICAg
cmV0dXJuIGFycmF5OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KF93ZWJzaXRlUG9saWNpZXMt
PmN1c3RvbUhlYWRlckZpZWxkcygpLCBbXSAoYXV0byYgZmllbGQpIHsKKyAgICAgICAgcmV0dXJu
IHdyYXBwZXIoQVBJOjpDdXN0b21IZWFkZXJGaWVsZHM6OmNyZWF0ZShmaWVsZCkpOworICAgIH0p
LmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKHZvaWQpX3NldEN1c3RvbUhlYWRlckZpZWxkczooTlNB
cnJheTxfV0tDdXN0b21IZWFkZXJGaWVsZHMgKj4gKilmaWVsZHMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0KaW5k
ZXggNTlkNGRhYWFkMjQzOWIyZDIyOTc0Zjk5ZDg3ODg1MmRlMDI0ZjMzZC4uNDU0MDNkMTY5MzZl
YWE4MjU0Y2Q1MDVmYTg4NGVkZjBkYWZlMDQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0KQEAgLTE1NCwx
MSArMTU0LDkgQEAgLSAoX1dLV2Vic2l0ZURhdGFTaXplICopX2RhdGFTaXplCiAKIC0gKE5TQXJy
YXk8TlNTdHJpbmcgKj4gKilfb3JpZ2luc1N0cmluZ3MKIHsKLSAgICBhdXRvIG9yaWdpbnMgPSBf
d2Vic2l0ZURhdGFSZWNvcmQtPndlYnNpdGVEYXRhUmVjb3JkKCkub3JpZ2luczsKLSAgICBOU011
dGFibGVBcnJheTxOU1N0cmluZyAqPiAqYXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5Om9yaWdpbnMuc2l6ZSgpXTsKLSAgICBmb3IgKGF1dG8mIG9yaWdpbiA6
IG9yaWdpbnMpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nICopb3JpZ2luLnRv
U3RyaW5nKCldOwotICAgIHJldHVybiBbYXJyYXkgYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBj
cmVhdGVOU0FycmF5KF93ZWJzaXRlRGF0YVJlY29yZC0+d2Vic2l0ZURhdGFSZWNvcmQoKS5vcmln
aW5zLCBbXSAoYXV0byYgb3JpZ2luKSAtPiBOU1N0cmluZyAqIHsKKyAgICAgICAgcmV0dXJuIG9y
aWdpbi50b1N0cmluZygpOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIEBlbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3Rv
cmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlLm1tCmluZGV4IGE0OGUxYjYyMDI2Yjc3MTMyZGY0Zjc5OTAyN2I3N2M1NmE5MWNmY2EuLjcz
Yzk4YTM0NjI1ZDhmNTU1MjQxNDM4NGUzY2U2YjhkYjg0MGU4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQpA
QCAtNTQyLDExICs1NDIsOSBAQCAtICh2b2lkKV9nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YVN1bW1hcnk6KHZvaWQgKF4pKE5TQXJyYXk8X1dLUmVzb3VyY2VMb2FkUwogewogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgX3dlYnNpdGVEYXRhU3RvcmUtPmdldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtl
QmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHRoaXJkUGFydHlEb21haW5zKSB7
Ci0gICAgICAgIE5TTXV0YWJsZUFycmF5PF9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBh
cnR5ICo+ICphcGlUaGlyZFBhcnRpZXMgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhDYXBhY2l0eTp0aGlyZFBhcnR5RG9tYWlucy5zaXplKCldIGF1dG9yZWxlYXNlXTsKLSAgICAg
ICAgZm9yIChhdXRvJiB0aGlyZFBhcnR5IDogdGhpcmRQYXJ0eURvbWFpbnMpCi0gICAgICAgICAg
ICBbYXBpVGhpcmRQYXJ0aWVzIGFkZE9iamVjdDp3cmFwcGVyKEFQSTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RoaXJkUGFydHk6OmNyZWF0ZShXVEZNb3ZlKHRoaXJkUGFydHkpKSldOwotCi0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGFwaVRoaXJkUGFydGllcyk7CisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGNyZWF0ZU5TQXJyYXkodGhpcmRQYXJ0eURvbWFpbnMsIFtdIChhdXRvJiYgZG9t
YWluKSB7CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcihBUEk6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NUaGlyZFBhcnR5OjpjcmVhdGUoV1RGTW92ZShkb21haW4pKSk7CisgICAgICAgIH0pLmdl
dCgpKTsKICAgICB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tEb3dubG9hZC5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tEb3dubG9hZC5tbQppbmRleCBk
MWE2ODNkZDJlNjhlOTk2M2RlYzlmMjhmZjY4MGU4YjQxMmNjMzRhLi4zNzc5NTUxMmVmYTAxNzZl
ZDVhOGZmZTM4MTVmZTNlNzg2OTk3YmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLRG93bmxvYWQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS0Rvd25sb2FkLm1tCkBAIC02NywxMSArNjcsNyBAQCAtIChXS1dlYlZp
ZXcgKilvcmlnaW5hdGluZ1dlYlZpZXcKIAogLShOU0FycmF5PE5TVVJMICo+ICopcmVkaXJlY3RD
aGFpbgogewotICAgIGF1dG8mIHJlZGlyZWN0VVJMcyA9IF9kb3dubG9hZC0+cmVkaXJlY3RDaGFp
bigpOwotICAgIE5TTXV0YWJsZUFycmF5PE5TVVJMICo+ICpuc1VSTHMgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXlXaXRoQ2FwYWNpdHk6cmVkaXJlY3RVUkxzLnNpemUoKV07Ci0gICAgZm9yIChjb25z
dCBhdXRvJiByZWRpcmVjdFVSTCA6IHJlZGlyZWN0VVJMcykKLSAgICAgICAgW25zVVJMcyBhZGRP
YmplY3Q6KE5TVVJMICopcmVkaXJlY3RVUkxdOwotICAgIHJldHVybiBuc1VSTHM7CisgICAgcmV0
dXJuIGNyZWF0ZU5TQXJyYXkoX2Rvd25sb2FkLT5yZWRpcmVjdENoYWluKCkpLmF1dG9yZWxlYXNl
KCk7CiB9CiAKIC0gKEJPT0wpd2FzVXNlckluaXRpYXRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0ZyYW1lVHJlZU5vZGUubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLRnJhbWVUcmVlTm9kZS5tbQppbmRleCBlYzRjNGE3
ZWUwMmUyMjQ3ZmNlYmIwNDdlM2I2ZTc3ZThkZDY0Mjc4Li40ZDM5ZTIxNTgyMTY3YmM4NTFiOTBk
YzRhMTg1NjI0ZTZiZjBjMjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLRnJhbWVUcmVlTm9kZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLRnJhbWVUcmVlTm9kZS5tbQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9y
dCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxlSW50ZXJuYWwu
aCIKICNpbXBvcnQgIl9XS0ZyYW1lVHJlZU5vZGVJbnRlcm5hbC5oIgorI2ltcG9ydCA8d3RmL2Nv
Y29hL1ZlY3RvckNvY29hLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBfV0tGcmFtZVRyZWVOb2RlCiAK
QEAgLTYyLDExICs2Myw5IEBAIC0gKFdLV2ViVmlldyAqKXdlYlZpZXcKIAogLSAoTlNBcnJheTxf
V0tGcmFtZVRyZWVOb2RlICo+ICopY2hpbGRGcmFtZXMKIHsKLSAgICBjb25zdCBhdXRvJiBjaGls
ZHJlbiA9IF9ub2RlLT5jaGlsZEZyYW1lcygpOwotICAgIE5TTXV0YWJsZUFycmF5PF9XS0ZyYW1l
VHJlZU5vZGUgKj4gKmFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNo
aWxkcmVuLnNpemUoKV07Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQot
ICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OndyYXBwZXIoQVBJOjpGcmFtZVRyZWVOb2RlOjpjcmVh
dGUoV2ViS2l0OjpGcmFtZVRyZWVOb2RlRGF0YShjaGlsZCksIF9ub2RlLT5wYWdlKCkpKV07Ci0g
ICAgcmV0dXJuIGFycmF5OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KF9ub2RlLT5jaGlsZEZy
YW1lcygpLCBbJl0gKGF1dG8mIGNoaWxkKSB7CisgICAgICAgIHJldHVybiB3cmFwcGVyKEFQSTo6
RnJhbWVUcmVlTm9kZTo6Y3JlYXRlKFdlYktpdDo6RnJhbWVUcmVlTm9kZURhdGEoY2hpbGQpLCBf
bm9kZS0+cGFnZSgpKSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoaWQpY29weVdp
dGhab25lOihOU1pvbmUgKil6b25lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbQppbmRl
eCBhZDM2NWJjYjFmNTFhZGIwNmU3NjI2MTYzM2UxODVkOGMxNWNhZWQwLi5jNDNkNDI3MWU1ZjVj
MzVlMzNkNjkxNDFkNDcyMjkxY2E3YWQyMDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24ubW0KQEAgLTE0MywxMSArMTQzLDkgQEAgLSAoTlNBcnJheTxOU1VSTCAqPiAqKWFkZGl0aW9u
YWxSZWFkQWNjZXNzQWxsb3dlZFVSTHMKICAgICBpZiAocGF0aHMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gQFsgXTsKIAotICAgIE5TTXV0YWJsZUFycmF5ICp1cmxzID0gW05TTXV0YWJsZUFy
cmF5IGFycmF5V2l0aENhcGFjaXR5OnBhdGhzLnNpemUoKV07Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBwYXRoIDogcGF0aHMpCi0gICAgICAgIFt1cmxzIGFkZE9iamVjdDpbTlNVUkwgZmlsZVVSTFdp
dGhGaWxlU3lzdGVtUmVwcmVzZW50YXRpb246cGF0aC5kYXRhKCkgaXNEaXJlY3Rvcnk6Tk8gcmVs
YXRpdmVUb1VSTDpuaWxdXTsKLQotICAgIHJldHVybiB1cmxzOworICAgIHJldHVybiBjcmVhdGVO
U0FycmF5KHBhdGhzLCBbXSAoYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gW05TVVJMIGZp
bGVVUkxXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOnBhdGguZGF0YSgpIGlzRGlyZWN0b3J5
Ok5PIHJlbGF0aXZlVG9VUkw6bmlsXTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtICh2
b2lkKXNldEFkZGl0aW9uYWxSZWFkQWNjZXNzQWxsb3dlZFVSTHM6KE5TQXJyYXk8TlNVUkwgKj4g
KilhZGRpdGlvbmFsUmVhZEFjY2Vzc0FsbG93ZWRVUkxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFy
dHkubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RoaXJkUGFydHkubW0KaW5kZXggNTNmOWQ5ZjM1OWVkNmFmNTQ1ODE1NjU4YjM1
MWQzZjdiMjQ0Y2M3ZS4uZjA0NmJkZGYzYTU4MjkxNWRhMDdjZDIxMDIzOWU4Mzg1MjUwMjlmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eS5tbQpAQCAtMjcs
NiArMjcsNyBAQAogI2ltcG9ydCAiX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlJ
bnRlcm5hbC5oIgogCiAjaW1wb3J0ICJBUElBcnJheS5oIgorI2ltcG9ydCA8d3RmL2NvY29hL1Zl
Y3RvckNvY29hLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGhpcmRQYXJ0eQogCkBAIC00MywxMiArNDQsOSBAQCAtIChOU1N0cmluZyAqKXRoaXJkUGFydHlE
b21haW4KIAogLSAoTlNBcnJheTxfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eSAq
PiAqKXVuZGVyRmlyc3RQYXJ0aWVzCiB7Ci0gICAgYXV0byBhcGlGaXJzdFBhcnRpZXMgPSBfdGhp
cmRQYXJ0eS0+dW5kZXJGaXJzdFBhcnRpZXMoKTsKLSAgICBOU011dGFibGVBcnJheTxfV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eSAqPiAqYXBpVW5kZXJGaXJzdFBhcnRpZXMgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6YXBpRmlyc3RQYXJ0aWVzLnNpemUoKV07
Ci0gICAgZm9yIChjb25zdCBhdXRvJiB0aGlyZFBhcnR5RGF0YVVuZGVyRmlyc3RQYXJ0eSA6IGFw
aUZpcnN0UGFydGllcykKLSAgICAgICAgW2FwaVVuZGVyRmlyc3RQYXJ0aWVzIGFkZE9iamVjdDp3
cmFwcGVyKEFQSTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHk6OmNyZWF0ZSh0aGly
ZFBhcnR5RGF0YVVuZGVyRmlyc3RQYXJ0eSkpXTsKLQotICAgIHJldHVybiBhcGlVbmRlckZpcnN0
UGFydGllczsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShfdGhpcmRQYXJ0eS0+dW5kZXJGaXJz
dFBhcnRpZXMoKSwgW10gKGF1dG8mIGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIoQVBJ
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eTo6Y3JlYXRlKGRhdGEpKTsKKyAgICB9
KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChBUEk6Ok9iamVjdCYpX2FwaU9iamVjdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQppbmRleCBiYTA2
YWNlOTZkYTA0OTY1YTcyZGZlY2Y3MjU1OWIyZDM2ZWUyNmIzLi41YWYxN2U2ZGVhMDUwZTAwMDJm
NzdkMmMzZmIwNjM0N2NjZmYxMGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvaW9zL1dLV2ViVmlld0lPUy5tbQpAQCAtNTYsNiArNTYsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVT
UEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvaW9zL0dyYXBoaWNzU2VydmljZXNTUEkuaD4KKyNpbXBv
cnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9O
KQogI2ltcG9ydCAiV0tEYXRhRGV0ZWN0b3JUeXBlc0ludGVybmFsLmgiCkBAIC0zMDQ5LDEwICsz
MDUwLDkgQEAgLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9m
ZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDoKICAgICBbX2NvbnRlbnRWaWV3IF9hY2Nl
c3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0Om9mZnNldCB3aXRoVGV4dDp0
ZXh0IGNvbXBsZXRpb25IYW5kbGVyOltjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJs
b2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rp
b25SZWN0PiYgc2VsZWN0aW9uUmVjdHMpIHsKICAgICAgICAgaWYgKCFjYXB0dXJlZENvbXBsZXRp
b25IYW5kbGVyKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRvIHJlY3RWYWx1ZXMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2VsZWN0
aW9uUmVjdHMuc2l6ZSgpXSk7Ci0gICAgICAgIGZvciAoYXV0byYgc2VsZWN0aW9uUmVjdCA6IHNl
bGVjdGlvblJlY3RzKQotICAgICAgICAgICAgW3JlY3RWYWx1ZXMgYWRkT2JqZWN0OltOU1ZhbHVl
IHZhbHVlV2l0aENHUmVjdDpzZWxlY3Rpb25SZWN0LnJlY3QoKV1dOwotICAgICAgICBjYXB0dXJl
ZENvbXBsZXRpb25IYW5kbGVyKHJlY3RWYWx1ZXMuZ2V0KCkpOworICAgICAgICBjYXB0dXJlZENv
bXBsZXRpb25IYW5kbGVyKGNyZWF0ZU5TQXJyYXkoc2VsZWN0aW9uUmVjdHMsIFtdIChhdXRvJiBy
ZWN0KSB7CisgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnJlY3Qu
cmVjdCgpXTsKKyAgICAgICAgfSkuZ2V0KCkpOwogICAgIH1dOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KaW5kZXggNWJhODgyNTY1
MzhlZmE4MGIwYjA5ODJlMjgxNThhYzY1MGFlZGMyYS4uNmE2OTkyMGNlNzM0YzQ1YzBhNTkzMThi
N2MwOGQ5YjVlNDEwMzhlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvTmF2aWdhdGlvblN0YXRlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L05hdmlnYXRpb25TdGF0ZS5tbQpAQCAtNzgsNiArNzgsNyBAQAogI2ltcG9ydCA8d3RmL0Jsb2Nr
UHRyLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9VUkwu
aD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogI2ltcG9ydCA8cGFsL2lvcy9NYW5h
Z2VkQ29uZmlndXJhdGlvblNvZnRMaW5rLmg+CkBAIC00NTksMTMgKzQ2MCwxMyBAQCBib29sIE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0
KFdlYlBhZ2VQcm94eSYsCiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIE5TTXV0YWJsZUFycmF5PFdLQmFja0ZvcndhcmRMaXN0SXRlbSAq
PiAqcmVtb3ZlZEl0ZW1zID0gbmlsOwotICAgIGlmIChyZW1vdmVkLnNpemUoKSkgewotICAgICAg
ICByZW1vdmVkSXRlbXMgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0
eTpyZW1vdmVkLnNpemUoKV0gYXV0b3JlbGVhc2VdOwotICAgICAgICBmb3IgKGF1dG8mIHJlbW92
ZWRJdGVtIDogcmVtb3ZlZCkKLSAgICAgICAgICAgIFtyZW1vdmVkSXRlbXMgYWRkT2JqZWN0Ondy
YXBwZXIocmVtb3ZlZEl0ZW0uZ2V0KCkpXTsKKyAgICBSZXRhaW5QdHI8TlNBcnJheTxXS0JhY2tG
b3J3YXJkTGlzdEl0ZW0gKj4+IHJlbW92ZWRJdGVtczsKKyAgICBpZiAoIXJlbW92ZWQuaXNFbXB0
eSgpKSB7CisgICAgICAgIHJlbW92ZWRJdGVtcyA9IGNyZWF0ZU5TQXJyYXkocmVtb3ZlZCwgW10g
KGF1dG8mIHJlbW92ZWRJdGVtKSB7CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcihyZW1vdmVk
SXRlbS5nZXQoKSk7CisgICAgICAgIH0pOwogICAgIH0KLSAgICBbKGlkIDxXS05hdmlnYXRpb25E
ZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25T
dGF0ZS5tX3dlYlZpZXcgYmFja0ZvcndhcmRMaXN0SXRlbUFkZGVkOndyYXBwZXIoYWRkZWQpIHJl
bW92ZWQ6cmVtb3ZlZEl0ZW1zXTsKKyAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZh
dGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZp
ZXcgYmFja0ZvcndhcmRMaXN0SXRlbUFkZGVkOndyYXBwZXIoYWRkZWQpIHJlbW92ZWQ6cmVtb3Zl
ZEl0ZW1zLmdldCgpXTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVNjcm9sbGlu
Z1BlcmZvcm1hbmNlRGF0YS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEubW0KaW5kZXggODEz
YjE4MTI3MGY1MjBlOTI0ZWY0ZjYxMmQ4MTUyNWZkNmU2M2Y1MC4uZWFlZmI5ZTFiNTFmMmZjNmRi
NmIzNGM4ZDI5OTgxOGJjZmY1MzMyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0
YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
TGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLm1tCkBAIC0zMCw2ICszMCw3IEBACiAj
aW1wb3J0ICJSZW1vdGVMYXllclRyZWVIb3N0LmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL0NBTGF5
ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGlsZUNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9j
b2NvYS9WZWN0b3JDb2NvYS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtNzIsMTYgKzczLDEzIEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlU2Nyb2xs
aW5nUGVyZm9ybWFuY2VEYXRhOjphcHBlbmRCbGFua1BpeGVsQ291bnQoQmxhbmtQaXhlbENvCiAK
IE5TQXJyYXkgKlJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YTo6ZGF0YSgp
CiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkqIGRhdGFBcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTptX2JsYW5rUGl4ZWxDb3VudHMuc2l6ZSgpXTsKLSAgICAKLSAgICBmb3Ig
KGF1dG8gcGl4ZWxEYXRhIDogbV9ibGFua1BpeGVsQ291bnRzKSB7Ci0gICAgICAgIFtkYXRhQXJy
YXkgYWRkT2JqZWN0OkBbCisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkobV9ibGFua1BpeGVsQ291
bnRzLCBbXSAoYXV0byYgcGl4ZWxEYXRhKSB7CisgICAgICAgIHJldHVybiBAWwogICAgICAgICAg
ICAgQChwaXhlbERhdGEuc3RhcnRUaW1lKSwKICAgICAgICAgICAgIChwaXhlbERhdGEuZXZlbnRU
eXBlID09IEJsYW5rUGl4ZWxDb3VudDo6RmlsbGVkKSA/IEAiZmlsbGVkIiA6IEAiZXhwb3NlZCIs
CiAgICAgICAgICAgICBAKHBpeGVsRGF0YS5ibGFua1BpeGVsQ291bnQpCi0gICAgICAgIF1dOwot
ICAgIH0KLSAgICByZXR1cm4gZGF0YUFycmF5OworICAgICAgICBdOworICAgIH0pLmF1dG9yZWxl
YXNlKCk7CiB9CiAKIHN0YXRpYyBDQUxheWVyICpmaW5kVGlsZUdyaWRDb250YWluZXJMYXllcihD
QUxheWVyICpsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9E
cmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tCmluZGV4IDU4OGU4M2M5NTJhYzkxZjMxOWVkZTFk
MGNmODUzN2ZlZmM3MTA3NjYuLmZmNGU0ZmQxNGYxMmRjYzdhNzA3NWY4YzNlMmVlMTA0ZWFiMDdl
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJvcEludGVy
YWN0aW9uU3RhdGUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL0RyYWdEcm9w
SW50ZXJhY3Rpb25TdGF0ZS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiTG9nZ2luZy5o
IgogI2ltcG9ydCA8V2ViQ29yZS9EcmFnSXRlbS5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbWFnZS5o
PgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC01MCwyNCArNTEsMjIgQEAgc3RhdGljIFJl
dGFpblB0cjxVSVRhcmdldGVkRHJhZ1ByZXZpZXc+IGNyZWF0ZVRhcmdldGVkRHJhZ1ByZXZpZXco
VUlJbWFnZSAqaW1hZ2UKICAgICBpZiAoZnJhbWVJblJvb3RWaWV3Q29vcmRpbmF0ZXMuaXNFbXB0
eSgpIHx8ICFpbWFnZSB8fCAhcHJldmlld0NvbnRhaW5lci53aW5kb3cpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgTlNNdXRhYmxlQXJyYXkgKmNsaXBwaW5nUmVjdFZhbHVlc0luRnJh
bWVDb29yZGluYXRlcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpjbGlwcGlu
Z1JlY3RzSW5GcmFtZUNvb3JkaW5hdGVzLnNpemUoKV07Ci0KICAgICBGbG9hdFJlY3QgZnJhbWVJ
bkNvbnRhaW5lckNvb3JkaW5hdGVzID0gW3Jvb3RWaWV3IGNvbnZlcnRSZWN0OmZyYW1lSW5Sb290
Vmlld0Nvb3JkaW5hdGVzIHRvVmlldzpwcmV2aWV3Q29udGFpbmVyXTsKICAgICBpZiAoZnJhbWVJ
bkNvbnRhaW5lckNvb3JkaW5hdGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBGbG9hdFNpemUgc2NhbGluZ1JhdGlvID0gZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5h
dGVzLnNpemUoKSAvIGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVzLnNpemUoKTsKLSAgICBmb3Ig
KGF1dG8gcmVjdCA6IGNsaXBwaW5nUmVjdHNJbkZyYW1lQ29vcmRpbmF0ZXMpIHsKKyAgICBhdXRv
IGNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcyA9IGNyZWF0ZU5TQXJyYXkoY2xp
cHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcywgWyZdIChhdXRvIHJlY3QpIHsKICAgICAgICAg
cmVjdC5zY2FsZShzY2FsaW5nUmF0aW8pOwotICAgICAgICBbY2xpcHBpbmdSZWN0VmFsdWVzSW5G
cmFtZUNvb3JkaW5hdGVzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6cmVjdF1d
OwotICAgIH0KKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XTsK
KyAgICB9KTsKIAogICAgIGF1dG8gaW1hZ2VWaWV3ID0gYWRvcHROUyhbW1VJSW1hZ2VWaWV3IGFs
bG9jXSBpbml0V2l0aEltYWdlOmltYWdlXSk7CiAgICAgW2ltYWdlVmlldyBzZXRGcmFtZTpmcmFt
ZUluQ29udGFpbmVyQ29vcmRpbmF0ZXNdOwogCiAgICAgUmV0YWluUHRyPFVJRHJhZ1ByZXZpZXdQ
YXJhbWV0ZXJzPiBwYXJhbWV0ZXJzOwotICAgIGlmIChjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1l
Q29vcmRpbmF0ZXMuY291bnQpCi0gICAgICAgIHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbVUlEcmFn
UHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVGV4dExpbmVSZWN0czpjbGlwcGluZ1Jl
Y3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXNdKTsKKyAgICBpZiAoW2NsaXBwaW5nUmVjdFZhbHVl
c0luRnJhbWVDb29yZGluYXRlcyBjb3VudF0pCisgICAgICAgIHBhcmFtZXRlcnMgPSBhZG9wdE5T
KFtbVUlEcmFnUHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVGV4dExpbmVSZWN0czpj
bGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMuZ2V0KCldKTsKICAgICBlbHNlCiAg
ICAgICAgIHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbVUlEcmFnUHJldmlld1BhcmFtZXRlcnMgYWxs
b2NdIGluaXRdKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggYTE4OGUyNGFhOWRlMTQwN2M3Mjg4ZTg5
ZmJiY2I4NjY2Mzk1NmZlNy4uOWYzNWRhZjE1ZTI3ZDAyMDczMWIwY2FkZDE5MTE1ZDI2NGVmZDEw
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0xNjc0LDQwICsxNjc0LDMyIEBAIC0gKHZvaWQpX3VwZGF0
ZVRhcEhpZ2hsaWdodAogICAgIGlmICghW19oaWdobGlnaHRWaWV3IHN1cGVydmlld10pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHsKLSAgICAgICAgUmV0YWluUHRyPFVJQ29sb3I+IGhpZ2hsaWdo
dFVJS2l0Q29sb3IgPSBhZG9wdE5TKFtbVUlDb2xvciBhbGxvY10gaW5pdFdpdGhDR0NvbG9yOmNh
Y2hlZENHQ29sb3IoX3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLmNvbG9yKV0pOwotICAgICAgICBb
X2hpZ2hsaWdodFZpZXcgc2V0Q29sb3I6aGlnaGxpZ2h0VUlLaXRDb2xvci5nZXQoKV07Ci0gICAg
fQotCi0gICAgQ0dGbG9hdCBzZWxmU2NhbGUgPSBzZWxmLmxheWVyLnRyYW5zZm9ybS5tMTE7Ci0g
ICAgYm9vbCBhbGxIaWdobGlnaHRSZWN0c0FyZVJlY3RpbGluZWFyID0gdHJ1ZTsKLSAgICBmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvciA9IF9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFF1YWQ+JiBoaWdobGlnaHRlZFF1YWRzID0gX3RhcEhp
Z2hsaWdodEluZm9ybWF0aW9uLnF1YWRzOwotICAgIGNvbnN0IHNpemVfdCBxdWFkQ291bnQgPSBo
aWdobGlnaHRlZFF1YWRzLnNpemUoKTsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJl
Y3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnN0
YXRpY19jYXN0PGNvbnN0IE5TVUludGVnZXI+KHF1YWRDb3VudCldKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHF1YWRDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UXVhZCYgcXVhZCA9IGhpZ2hsaWdodGVkUXVhZHNbaV07Ci0gICAgICAgIGlmIChxdWFkLmlz
UmVjdGlsaW5lYXIoKSkgewotICAgICAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kaW5n
Qm94ID0gcXVhZC5ib3VuZGluZ0JveCgpOwotICAgICAgICAgICAgYm91bmRpbmdCb3guc2NhbGUo
c2VsZlNjYWxlKTsKLSAgICAgICAgICAgIGJvdW5kaW5nQm94LmluZmxhdGUobWluaW11bVRhcEhp
Z2hsaWdodFJhZGl1cyk7Ci0gICAgICAgICAgICBDR1JlY3QgcGl4ZWxBbGlnbmVkUmVjdCA9IHN0
YXRpY19jYXN0PENHUmVjdD4oZW5jbG9zZVJlY3RUb0RldmljZVBpeGVscyhib3VuZGluZ0JveCwg
ZGV2aWNlU2NhbGVGYWN0b3IpKTsKLSAgICAgICAgICAgIFtyZWN0cyBhZGRPYmplY3Q6W05TVmFs
dWUgdmFsdWVXaXRoQ0dSZWN0OnBpeGVsQWxpZ25lZFJlY3RdXTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGFsbEhpZ2hsaWdodFJlY3RzQXJlUmVjdGlsaW5lYXIgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHJlY3RzLmNsZWFyKCk7CisgICAgW19oaWdobGlnaHRWaWV3IHNldENvbG9yOmFk
b3B0TlMoW1tVSUNvbG9yIGFsbG9jXSBpbml0V2l0aENHQ29sb3I6Y2FjaGVkQ0dDb2xvcihfdGFw
SGlnaGxpZ2h0SW5mb3JtYXRpb24uY29sb3IpXSkuZ2V0KCldOworCisgICAgYXV0byYgaGlnaGxp
Z2h0ZWRRdWFkcyA9IF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi5xdWFkczsKKyAgICBib29sIGFs
bFJlY3RpbGluZWFyID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIHF1YWQgOiBoaWdobGlnaHRlZFF1
YWRzKSB7CisgICAgICAgIGlmICghcXVhZC5pc1JlY3RpbGluZWFyKCkpIHsKKyAgICAgICAgICAg
IGFsbFJlY3RpbGluZWFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChhbGxIaWdobGlnaHRSZWN0c0FyZVJlY3RpbGluZWFyKQorICAgIGF1
dG8gc2VsZlNjYWxlID0gc2VsZi5sYXllci50cmFuc2Zvcm0ubTExOworICAgIGlmIChhbGxSZWN0
aWxpbmVhcikgeworICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IF9wYWdlLT5kZXZp
Y2VTY2FsZUZhY3RvcigpOworICAgICAgICBhdXRvIHJlY3RzID0gY3JlYXRlTlNBcnJheShoaWdo
bGlnaHRlZFF1YWRzLCBbJl0gKGF1dG8mIHF1YWQpIHsKKyAgICAgICAgICAgIGF1dG8gYm91bmRp
bmdCb3ggPSBxdWFkLmJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICBib3VuZGluZ0JveC5zY2Fs
ZShzZWxmU2NhbGUpOworICAgICAgICAgICAgYm91bmRpbmdCb3guaW5mbGF0ZShtaW5pbXVtVGFw
SGlnaGxpZ2h0UmFkaXVzKTsKKyAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhD
R1JlY3Q6ZW5jbG9zZVJlY3RUb0RldmljZVBpeGVscyhib3VuZGluZ0JveCwgZGV2aWNlU2NhbGVG
YWN0b3IpXTsKKyAgICAgICAgfSk7CiAgICAgICAgIFtfaGlnaGxpZ2h0VmlldyBzZXRGcmFtZXM6
cmVjdHMuZ2V0KCkgYm91bmRhcnlSZWN0Ol9wYWdlLT5leHBvc2VkQ29udGVudFJlY3QoKV07Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcXVhZHMgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c3RhdGljX2Nhc3Q8
Y29uc3QgTlNVSW50ZWdlcj4ocXVhZENvdW50KV0pOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHF1YWRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBXZWJDb3JlOjpGbG9hdFF1YWQg
cXVhZCA9IGhpZ2hsaWdodGVkUXVhZHNbaV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBx
dWFkcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpo
aWdobGlnaHRlZFF1YWRzLnNpemUoKSAqIDRdKTsKKyAgICAgICAgZm9yIChhdXRvIHF1YWQgOiBo
aWdobGlnaHRlZFF1YWRzKSB7CiAgICAgICAgICAgICBxdWFkLnNjYWxlKHNlbGZTY2FsZSk7Ci0g
ICAgICAgICAgICBXZWJDb3JlOjpGbG9hdFF1YWQgZXh0ZW5kZWRRdWFkID0gaW5mbGF0ZVF1YWQo
cXVhZCwgbWluaW11bVRhcEhpZ2hsaWdodFJhZGl1cyk7CisgICAgICAgICAgICBhdXRvIGV4dGVu
ZGVkUXVhZCA9IGluZmxhdGVRdWFkKHF1YWQsIG1pbmltdW1UYXBIaWdobGlnaHRSYWRpdXMpOwog
ICAgICAgICAgICAgW3F1YWRzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1BvaW50OmV4
dGVuZGVkUXVhZC5wMSgpXV07CiAgICAgICAgICAgICBbcXVhZHMgYWRkT2JqZWN0OltOU1ZhbHVl
IHZhbHVlV2l0aENHUG9pbnQ6ZXh0ZW5kZWRRdWFkLnAyKCldXTsKICAgICAgICAgICAgIFtxdWFk
cyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpleHRlbmRlZFF1YWQucDMoKV1d
OwpAQCAtMTcxNiwxMiArMTcwOCwxMiBAQCAtICh2b2lkKV91cGRhdGVUYXBIaWdobGlnaHQKICAg
ICAgICAgW19oaWdobGlnaHRWaWV3IHNldFF1YWRzOnF1YWRzLmdldCgpIGJvdW5kYXJ5UmVjdDpf
cGFnZS0+ZXhwb3NlZENvbnRlbnRSZWN0KCldOwogICAgIH0KIAotICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gYm9yZGVyUmFkaWkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6NF0pOwotICAgIFtib3JkZXJSYWRpaSBhZGRPYmplY3Q6bnNTaXpl
Rm9yVGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi50b3BM
ZWZ0UmFkaXVzLCBzZWxmU2NhbGUpXTsKLSAgICBbYm9yZGVyUmFkaWkgYWRkT2JqZWN0Om5zU2l6
ZUZvclRhcEhpZ2hsaWdodEJvcmRlclJhZGl1cyhfdGFwSGlnaGxpZ2h0SW5mb3JtYXRpb24udG9w
UmlnaHRSYWRpdXMsIHNlbGZTY2FsZSldOwotICAgIFtib3JkZXJSYWRpaSBhZGRPYmplY3Q6bnNT
aXplRm9yVGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi5i
b3R0b21MZWZ0UmFkaXVzLCBzZWxmU2NhbGUpXTsKLSAgICBbYm9yZGVyUmFkaWkgYWRkT2JqZWN0
Om5zU2l6ZUZvclRhcEhpZ2hsaWdodEJvcmRlclJhZGl1cyhfdGFwSGlnaGxpZ2h0SW5mb3JtYXRp
b24uYm90dG9tUmlnaHRSYWRpdXMsIHNlbGZTY2FsZSldOwotICAgIFtfaGlnaGxpZ2h0VmlldyBz
ZXRDb3JuZXJSYWRpaTpib3JkZXJSYWRpaS5nZXQoKV07CisgICAgW19oaWdobGlnaHRWaWV3IHNl
dENvcm5lclJhZGlpOkBbCisgICAgICAgIG5zU2l6ZUZvclRhcEhpZ2hsaWdodEJvcmRlclJhZGl1
cyhfdGFwSGlnaGxpZ2h0SW5mb3JtYXRpb24udG9wTGVmdFJhZGl1cywgc2VsZlNjYWxlKSwKKyAg
ICAgICAgbnNTaXplRm9yVGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZv
cm1hdGlvbi50b3BSaWdodFJhZGl1cywgc2VsZlNjYWxlKSwKKyAgICAgICAgbnNTaXplRm9yVGFw
SGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi5ib3R0b21MZWZ0
UmFkaXVzLCBzZWxmU2NhbGUpLAorICAgICAgICBuc1NpemVGb3JUYXBIaWdobGlnaHRCb3JkZXJS
YWRpdXMoX3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLmJvdHRvbVJpZ2h0UmFkaXVzLCBzZWxmU2Nh
bGUpLAorICAgIF1dOwogfQogCiAtICh2b2lkKV9zaG93VGFwSGlnaGxpZ2h0CkBAIC0yNTY0LDE0
ICsyNTU2LDExIEBAIC0gKEJPT0wpdGV4dEludGVyYWN0aW9uR2VzdHVyZTooVUlXS0dlc3R1cmVU
eXBlKWdlc3R1cmUgc2hvdWxkQmVnaW5BdFBvaW50OihDR1BvCiAKIC0gKE5TQXJyYXkgKil3ZWJT
ZWxlY3Rpb25SZWN0c0ZvclNlbGVjdGlvblJlY3RzOihjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2Vs
ZWN0aW9uUmVjdD4mKXNlbGVjdGlvblJlY3RzCiB7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IHNlbGVj
dGlvblJlY3RzLnNpemUoKTsKLSAgICBpZiAoIXNpemUpCisgICAgaWYgKHNlbGVjdGlvblJlY3Rz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIE5TTXV0YWJsZUFycmF5ICp3
ZWJSZWN0cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFdlYkNv
cmU6OlNlbGVjdGlvblJlY3QmIGNvcmVSZWN0ID0gc2VsZWN0aW9uUmVjdHNbaV07Ci0gICAgICAg
IFdlYlNlbGVjdGlvblJlY3QgKndlYlJlY3QgPSBbV2ViU2VsZWN0aW9uUmVjdCBzZWxlY3Rpb25S
ZWN0XTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShzZWxlY3Rpb25SZWN0cywgW10gKGF1dG8m
IGNvcmVSZWN0KSB7CisgICAgICAgIGF1dG8gd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNl
bGVjdGlvblJlY3RdOwogICAgICAgICB3ZWJSZWN0LnJlY3QgPSBjb3JlUmVjdC5yZWN0KCk7CiAg
ICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGNvcmVSZWN0LmRpcmVjdGlvbigpID09
IFdlYkNvcmU6OlRleHREaXJlY3Rpb246OkxUUiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1Jp
Z2h0IDogV0tXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAgICAgICAgIHdlYlJlY3QuaXNM
aW5lQnJlYWsgPSBjb3JlUmVjdC5pc0xpbmVCcmVhaygpOwpAQCAtMjU4MSwxMCArMjU3MCw4IEBA
IC0gKE5TQXJyYXkgKil3ZWJTZWxlY3Rpb25SZWN0c0ZvclNlbGVjdGlvblJlY3RzOihjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uCiAgICAgICAgIHdlYlJlY3QuY29udGFpbnNFbmQgPSBj
b3JlUmVjdC5jb250YWluc0VuZCgpOwogICAgICAgICB3ZWJSZWN0LmlzSW5GaXhlZFBvc2l0aW9u
ID0gY29yZVJlY3QuaXNJbkZpeGVkUG9zaXRpb24oKTsKICAgICAgICAgd2ViUmVjdC5pc0hvcml6
b250YWwgPSBjb3JlUmVjdC5pc0hvcml6b250YWwoKTsKLSAgICAgICAgW3dlYlJlY3RzIGFkZE9i
amVjdDp3ZWJSZWN0XTsKLSAgICB9Ci0KLSAgICByZXR1cm4gd2ViUmVjdHM7CisgICAgICAgIHJl
dHVybiB3ZWJSZWN0OworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TQXJyYXkgKil3
ZWJTZWxlY3Rpb25SZWN0cwpAQCAtNDQ1NywxNCArNDQ0NCwxMSBAQCAtICh2b2lkKXJlcGxhY2VS
YW5nZTooVUlUZXh0UmFuZ2UgKilyYW5nZSB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7CiB9
CiAKLXN0YXRpYyBOU0FycmF5PFdLVGV4dFNlbGVjdGlvblJlY3QgKj4gKndrVGV4dFNlbGVjdGlv
blJlY3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYgY29yZVJlY3RzKQor
c3RhdGljIE5TQXJyYXk8V0tUZXh0U2VsZWN0aW9uUmVjdCAqPiAqd2tUZXh0U2VsZWN0aW9uUmVj
dHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiByZWN0cykKIHsKLSAgICBh
dXRvIHJlY3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5OmNvcmVSZWN0cy5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIGNvcmVSZWN0IDogY29yZVJl
Y3RzKSB7Ci0gICAgICAgIGF1dG8gd2tUZXh0U2VsZWN0aW9uUmVjdCA9IGFkb3B0TlMoW1tXS1Rl
eHRTZWxlY3Rpb25SZWN0IGFsbG9jXSBpbml0V2l0aFNlbGVjdGlvblJlY3Q6Y29yZVJlY3RdKTsK
LSAgICAgICAgW3JlY3RzIGFkZE9iamVjdDp3a1RleHRTZWxlY3Rpb25SZWN0LmdldCgpXTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHJlY3RzLmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5T
QXJyYXkocmVjdHMsIFtdIChhdXRvJiByZWN0KSB7CisgICAgICAgIHJldHVybiBhZG9wdE5TKFtb
V0tUZXh0U2VsZWN0aW9uUmVjdCBhbGxvY10gaW5pdFdpdGhTZWxlY3Rpb25SZWN0OnJlY3RdKTsK
KyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChVSVRleHRSYW5nZSAqKXNlbGVjdGVkVGV4
dFJhbmdlCkBAIC03NTgyLDE3ICs3NTY2LDE1IEBAIHN0YXRpYyBSZXRhaW5QdHI8VUlUYXJnZXRl
ZFByZXZpZXc+IGNyZWF0ZVRhcmdldGVkUHJldmlldyhVSUltYWdlICppbWFnZSwgVUlWaWV3CiAg
ICAgaWYgKGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2NhbGluZ1JhdGlvID0gZnJhbWVJ
bkNvbnRhaW5lckNvb3JkaW5hdGVzLnNpemUoKSAvIGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVz
LnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSAqY2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNv
b3JkaW5hdGVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNsaXBwaW5nUmVj
dHNJbkZyYW1lQ29vcmRpbmF0ZXMuc2l6ZSgpXTsKLQotICAgIGZvciAoYXV0byByZWN0IDogY2xp
cHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcykgeworICAgIGF1dG8gc2NhbGluZ1JhdGlvID0g
ZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzLnNpemUoKSAvIGZyYW1lSW5Sb290Vmlld0Nvb3Jk
aW5hdGVzLnNpemUoKTsKKyAgICBhdXRvIGNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGlu
YXRlcyA9IGNyZWF0ZU5TQXJyYXkoY2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcywgWyZd
IChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkgewogICAgICAgICByZWN0LnNjYWxlKHNjYWxpbmdS
YXRpbyk7Ci0gICAgICAgIFtjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgYWRk
T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XV07Ci0gICAgfQorICAgICAgICBy
ZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnJlY3RdOworICAgIH0pOwogCiAgICAgUmV0
YWluUHRyPFVJUHJldmlld1BhcmFtZXRlcnM+IHBhcmFtZXRlcnM7Ci0gICAgaWYgKGNsaXBwaW5n
UmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcy5jb3VudCkKLSAgICAgICAgcGFyYW1ldGVycyA9
IGFkb3B0TlMoW1tVSVByZXZpZXdQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFRleHRMaW5lUmVj
dHM6Y2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVzXSk7CisgICAgaWYgKFtjbGlw
cGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgY291bnRdKQorICAgICAgICBwYXJhbWV0
ZXJzID0gYWRvcHROUyhbW1VJUHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVGV4dExp
bmVSZWN0czpjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMuZ2V0KCldKTsKICAg
ICBlbHNlCiAgICAgICAgIHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbVUlQcmV2aWV3UGFyYW1ldGVy
cyBhbGxvY10gaW5pdF0pOwogCkBAIC05NjMzLDIzICs5NjE1LDE1IEBAIC0gKFVJSW1hZ2UgKilf
cHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6KFVJUHJldmlld0l0
ZW1Db250cm9sCiAKIC0gKE5TQXJyYXkgKilfcHJlc2VudGF0aW9uUmVjdHNGb3JQcmV2aWV3SXRl
bUNvbnRyb2xsZXI6KFVJUHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgogewotICAg
IFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0KICAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlu
a0luZGljYXRvci5jb250ZW50SW1hZ2UpIHsKLSAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBv
cmlnaW4gPSBfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLnRleHRCb3VuZGluZ1Jl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICAgICAgZm9yIChXZWJDb3Jl
OjpGbG9hdFJlY3QmIHJlY3QgOiBfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLnRl
eHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKLSAgICAgICAgICAgIENHUmVjdCBj
Z1JlY3QgPSByZWN0OwotICAgICAgICAgICAgY2dSZWN0Lm9yaWdpbi54ICs9IG9yaWdpbi54KCk7
Ci0gICAgICAgICAgICBjZ1JlY3Qub3JpZ2luLnkgKz0gb3JpZ2luLnkoKTsKLSAgICAgICAgICAg
IFtyZWN0QXJyYXkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpjZ1JlY3RdXTsK
LSAgICAgICAgfQorICAgICAgICBhdXRvIG9yaWdpbiA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLmxp
bmtJbmRpY2F0b3IudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5sb2NhdGlv
bigpOworICAgICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShfcG9zaXRpb25JbmZvcm1hdGlvbi5s
aW5rSW5kaWNhdG9yLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMsIFsmXSAoQ0dS
ZWN0IHJlY3QpIHsKKyAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6
Q0dSZWN0T2Zmc2V0KHJlY3QsIG9yaWdpbi54KCksIG9yaWdpbi55KCkpXTsKKyAgICAgICAgfSku
YXV0b3JlbGVhc2UoKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb25zdCBmbG9hdCBtYXJnaW5J
blB4ID0gNCAqIF9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgICAgICBDR1JlY3QgY2dS
ZWN0ID0gQ0dSZWN0SW5zZXQoX3Bvc2l0aW9uSW5mb3JtYXRpb24uYm91bmRzLCAtbWFyZ2luSW5Q
eCwgLW1hcmdpbkluUHgpOwotICAgICAgICBbcmVjdEFycmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2
YWx1ZVdpdGhDR1JlY3Q6Y2dSZWN0XV07CisgICAgICAgIGZsb2F0IG1hcmdpbkluUHggPSA0ICog
X3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIHJldHVybiBAW1tOU1ZhbHVlIHZh
bHVlV2l0aENHUmVjdDpDR1JlY3RJbnNldChfcG9zaXRpb25JbmZvcm1hdGlvbi5ib3VuZHMsIC1t
YXJnaW5JblB4LCAtbWFyZ2luSW5QeCldXTsKICAgICB9Ci0KLSAgICByZXR1cm4gcmVjdEFycmF5
LmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKHZvaWQpX3ByZXZpZXdJdGVtQ29udHJvbGxlckRpZENh
bmNlbFByZXZpZXc6KFVJUHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQubW0KaW5kZXgg
MzZhYmRmZDI0NjVlNGRmZDUxMDI0M2RmN2Y5YTc4YzEwYjkxYTc4Yi4uYzhhMDZhMWM3ZjFiODNl
MzYyNTk2YzUzN2Y4Y2E4ZjU4ZDJjYzMzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tCkBAIC0yNzYsMTkgKzI3NiwxNyBAQCAtICh2
b2lkKWRpZEZpbmRTdHJpbmdNYXRjaGVzV2l0aFJlY3RzOihjb25zdCBWZWN0b3I8VmVjdG9yPFdl
YkNvcmU6OkludFJlY3Q+PiYpcgogICAgIGlmIChfZmluZFJlcGx5Q2FsbGJhY2tzLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byByZXBseUNhbGxiYWNrID0gX2ZpbmRSZXBs
eUNhbGxiYWNrcy50YWtlRmlyc3QoKTsKLSAgICBhdXRvIG1hdGNoQ291bnQgPSByZWN0c0Zvck1h
dGNoZXMuc2l6ZSgpOwotICAgIGF1dG8gbWF0Y2hPYmplY3RzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om1hdGNoQ291bnRdKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJldGFpblB0cjxO
U0FycmF5PiBuc01hdGNoUmVjdHM7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIGF1dG8g
bWF0Y2hPYmplY3RzID0gY3JlYXRlTlNBcnJheShyZWN0c0Zvck1hdGNoZXMsIFsmXSAoYXV0byYg
cmVjdHMpIHsKKyAgICAgICAgUmV0YWluUHRyPE5TQXJyYXk+IHJlY3RzQXJyYXk7CiAgICAgICAg
IGlmIChfdXNlUGxhdGZvcm1GaW5kVUkpCi0gICAgICAgICAgICBuc01hdGNoUmVjdHMgPSBjcmVh
dGVOU0FycmF5KHJlY3RzRm9yTWF0Y2hlc1tpXSk7CisgICAgICAgICAgICByZWN0c0FycmF5ID0g
Y3JlYXRlTlNBcnJheShyZWN0cyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5zTWF0Y2hS
ZWN0cyA9IEBbXTsKLSAgICAgICAgW21hdGNoT2JqZWN0cyBhZGRPYmplY3Q6YWRvcHROUyhbW1dL
VGV4dEZpbmRlck1hdGNoIGFsbG9jXSBpbml0V2l0aENsaWVudDpzZWxmIHZpZXc6X3ZpZXcgaW5k
ZXg6aSByZWN0czpuc01hdGNoUmVjdHMuZ2V0KCldKS5nZXQoKV07Ci0gICAgfQorICAgICAgICAg
ICAgcmVjdHNBcnJheSA9IEBbXTsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXS1RleHRGaW5k
ZXJNYXRjaCBhbGxvY10gaW5pdFdpdGhDbGllbnQ6c2VsZiB2aWV3Ol92aWV3IGluZGV4OmluZGV4
KysgcmVjdHM6cmVjdHNBcnJheS5nZXQoKV0pOworICAgIH0pOwogCi0gICAgcmVwbHlDYWxsYmFj
ayhtYXRjaE9iamVjdHMuZ2V0KCksIGRpZFdyYXBBcm91bmQpOworICAgIF9maW5kUmVwbHlDYWxs
YmFja3MudGFrZUZpcnN0KCkobWF0Y2hPYmplY3RzLmdldCgpLCBkaWRXcmFwQXJvdW5kKTsKIH0K
IAogLSAodm9pZClkaWRHZXRJbWFnZUZvck1hdGNoUmVzdWx0OihXZWJLaXQ6OldlYkltYWdlICop
aW1hZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRJbnB1
dFdpbmRvd0NvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tUZXh0
SW5wdXRXaW5kb3dDb250cm9sbGVyLm1tCmluZGV4IGY2NDhmOTQwNzM1ZTY1YWY5OTc3MTFjNWNh
NTkyODI2N2JmNTk3Y2IuLjM1Mjc1ZGY4ZmQ3Y2NjNDA1YzY3MzJkMWM4OGZjMTk0N2NlMWE2MmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRJbnB1dFdpbmRv
d0NvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dElu
cHV0V2luZG93Q29udHJvbGxlci5tbQpAQCAtNDAsMTAgKzQwLDcgQEAgQGltcGxlbWVudGF0aW9u
IFdLVGV4dElucHV0VmlldwogLSAoTlNBcnJheSAqKXZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRl
eHQKIHsKICAgICAvLyBMZXQgVFNNIGtub3cgdGhhdCBhIGJvdHRvbSBpbnB1dCB3aW5kb3cgd291
bGQgYmUgY3JlYXRlZCBmb3IgbWFya2VkIHRleHQuCi0gICAgTlNBcnJheSAqcmVndWxhckF0dHJp
YnV0ZXMgPSBbc3VwZXIgdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dF07Ci0gICAgTlNNdXRh
YmxlQXJyYXkgKmZsb2F0aW5nV2luZG93QXR0cmlidXRlcyA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhBcnJheTpyZWd1bGFyQXR0cmlidXRlc107Ci0gICAgW2Zsb2F0aW5nV2luZG93QXR0cmli
dXRlcyBhZGRPYmplY3Q6QCJfX05TVXNlc0Zsb2F0aW5nSW5wdXRXaW5kb3ciXTsKLSAgICByZXR1
cm4gZmxvYXRpbmdXaW5kb3dBdHRyaWJ1dGVzOworICAgIHJldHVybiBbW3N1cGVyIHZhbGlkQXR0
cmlidXRlc0Zvck1hcmtlZFRleHRdIGFycmF5QnlBZGRpbmdPYmplY3Q6QCJfX05TVXNlc0Zsb2F0
aW5nSW5wdXRXaW5kb3ciXTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5GcmFt
ZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2Ev
V0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW0KaW5kZXggYjk2YmI4OWJhMGFiMmZlZDM2NWE3ZGYw
YzcxZTc2ZDUyOTliMDkzNS4uMDNjMjdjNDU1M2RjZjA4MzQxNzQ3MTJjZDczNjM5ZjAwYzZmODNm
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5GcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkZyYW1l
Lm1tCkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ludFBvaW50Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0xpbmtJY29uQ29sbGVjdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xpbmtJ
Y29uVHlwZS5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIEBpbXBsZW1l
bnRhdGlvbiBXS1dlYlByb2Nlc3NQbHVnSW5GcmFtZSB7CiAgICAgQVBJOjpPYmplY3RTdG9yYWdl
PFdlYktpdDo6V2ViRnJhbWU+IF9mcmFtZTsKQEAgLTExMSwxNiArMTEyLDE0IEBAIC0gKF9XS0Zy
YW1lSGFuZGxlICopaGFuZGxlCiAKIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gY29sbGVjdElj
b25zKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgT3B0aW9uU2V0PFdlYkNvcmU6OkxpbmtJY29uVHlw
ZT4gaWNvblR5cGVzKQogewotICAgIGF1dG8gcmVzdWx0ID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgaWYgKGF1dG8q
IGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYg
aWNvbiA6IFdlYkNvcmU6OkxpbmtJY29uQ29sbGVjdG9yKCpkb2N1bWVudCkuaWNvbnNPZlR5cGVz
KGljb25UeXBlcykpCi0gICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6KE5TVVJMICop
aWNvbi51cmxdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gQFtdOworICAgIGF1dG8gZG9jdW1l
bnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1
cm4gQFtdOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFdlYkNvcmU6OkxpbmtJY29uQ29sbGVj
dG9yKCpkb2N1bWVudCkuaWNvbnNPZlR5cGVzKGljb25UeXBlcyksIFtdIChhdXRvJiBpY29uKSAt
PiBOU1VSTCAqIHsKKyAgICAgICAgcmV0dXJuIGljb24udXJsOworICAgIH0pOwogfQogCiAtIChO
U0FycmF5ICopYXBwbGVUb3VjaEljb25VUkxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2Vy
Q29udGV4dENvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIu
bW0KaW5kZXggYjlhYzYxMzA0MDY1ZGI2YjY1MGViNjE0NzAyZjM3MGRjYmM5YzQ2NC4uZTc4OGEx
YWNmMzc0ODNjOThiZDBjZDUxYzc1YmJjMzgwNDVlMzNlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0lu
QnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0
Q29udHJvbGxlci5tbQpAQCAtNDI4LDMyICs0MjgsMjcgQEAgLSAodm9pZClfc2V0Rm9ybURlbGVn
YXRlOihpZCA8V0tXZWJQcm9jZXNzUGx1Z0luRm9ybURlbGVnYXRlUHJpdmF0ZT4pZm9ybURlbGVn
YXQKIHsKICAgICBfZm9ybURlbGVnYXRlID0gZm9ybURlbGVnYXRlOwogCi0gICAgY2xhc3MgRm9y
bUNsaWVudCA6IHB1YmxpYyBBUEk6OkluamVjdGVkQnVuZGxlOjpGb3JtQ2xpZW50IHsKKyAgICBj
bGFzcyBGb3JtQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6SW5qZWN0ZWRCdW5kbGU6OkZvcm1D
bGllbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgRm9ybUNsaWVudChXS1dlYlBy
b2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIgKmNvbnRyb2xsZXIpCiAgICAgICAg
ICAgICA6IG1fY29udHJvbGxlcihjb250cm9sbGVyKQogICAgICAgICB7CiAgICAgICAgIH0KIAot
ICAgICAgICB2aXJ0dWFsIH5Gb3JtQ2xpZW50KCkgeyB9Ci0KLSAgICAgICAgdm9pZCBkaWRGb2N1
c1RleHRGaWVsZChXZWJLaXQ6OldlYlBhZ2UqLCBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dEVsZW1lbnQsIFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lKSBvdmVycmlkZQorICAgICAgICB2
b2lkIGRpZEZvY3VzVGV4dEZpZWxkKFdlYktpdDo6V2ViUGFnZSosIFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUpIGZpbmFsCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gZm9ybURlbGVnYXRlID0gbV9jb250cm9sbGVyLT5f
Zm9ybURlbGVnYXRlLmdldCgpOwotCiAgICAgICAgICAgICBpZiAoW2Zvcm1EZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRD
b250cm9sbGVyOmRpZEZvY3VzVGV4dEZpZWxkOmluRnJhbWU6KV0pCiAgICAgICAgICAgICAgICAg
W2Zvcm1EZWxlZ2F0ZSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjpt
X2NvbnRyb2xsZXIgZGlkRm9jdXNUZXh0RmllbGQ6d3JhcHBlcigqV2ViS2l0OjpJbmplY3RlZEJ1
bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKGlucHV0RWxlbWVudCkuZ2V0KCkpIGluRnJhbWU6
d3JhcHBlcigqZnJhbWUpXTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgd2lsbFNlbmRTdWJt
aXRFdmVudChXZWJLaXQ6OldlYlBhZ2UqLCBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGZvcm1F
bGVtZW50LCBXZWJLaXQ6OldlYkZyYW1lKiB0YXJnZXRGcmFtZSwgV2ViS2l0OjpXZWJGcmFtZSog
c291cmNlRnJhbWUsIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgdmFs
dWVzKSBvdmVycmlkZQorICAgICAgICB2b2lkIHdpbGxTZW5kU3VibWl0RXZlbnQoV2ViS2l0OjpX
ZWJQYWdlKiwgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCwgV2ViS2l0OjpX
ZWJGcmFtZSogdGFyZ2V0RnJhbWUsIFdlYktpdDo6V2ViRnJhbWUqIHNvdXJjZUZyYW1lLCBjb25z
dCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4mIHZhbHVlcykgZmluYWwKICAgICAg
ICAgewogICAgICAgICAgICAgYXV0byBmb3JtRGVsZWdhdGUgPSBtX2NvbnRyb2xsZXItPl9mb3Jt
RGVsZWdhdGUuZ2V0KCk7Ci0KICAgICAgICAgICAgIGlmIChbZm9ybURlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRy
b2xsZXI6d2lsbFNlbmRTdWJtaXRFdmVudFRvRm9ybTppbkZyYW1lOnRhcmdldEZyYW1lOnZhbHVl
czopXSkgewogICAgICAgICAgICAgICAgIGF1dG8gdmFsdWVNYXAgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTp2YWx1ZXMuc2l6ZSgpXSk7CiAg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogdmFsdWVzKQogICAgICAgICAg
ICAgICAgICAgICBbdmFsdWVNYXAgc2V0T2JqZWN0OnBhaXIuc2Vjb25kIGZvcktleTpwYWlyLmZp
cnN0XTsKLQogICAgICAgICAgICAgICAgIFtmb3JtRGVsZWdhdGUgX3dlYlByb2Nlc3NQbHVnSW5C
cm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHdpbGxTZW5kU3VibWl0RXZlbnRU
b0Zvcm06d3JhcHBlcigqV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3Jl
YXRlKGZvcm1FbGVtZW50KS5nZXQoKSkKICAgICAgICAgICAgICAgICAgICAgaW5GcmFtZTp3cmFw
cGVyKCpzb3VyY2VGcmFtZSkgdGFyZ2V0RnJhbWU6d3JhcHBlcigqdGFyZ2V0RnJhbWUpIHZhbHVl
czp2YWx1ZU1hcC5nZXQoKV07CiAgICAgICAgICAgICB9CkBAIC00NjMsNyArNDU4LDYgQEAgLSAo
dm9pZClfc2V0Rm9ybURlbGVnYXRlOihpZCA8V0tXZWJQcm9jZXNzUGx1Z0luRm9ybURlbGVnYXRl
UHJpdmF0ZT4pZm9ybURlbGVnYXQKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCF1c2VyT2Jq
ZWN0KQogICAgICAgICAgICAgICAgIHJldHVybjsKLQogICAgICAgICAgICAgYXV0byBhcmNoaXZl
ciA9IGFkb3B0TlMoW1tOU0tleWVkQXJjaGl2ZXIgYWxsb2NdIGluaXRSZXF1aXJpbmdTZWN1cmVD
b2Rpbmc6WUVTXSk7CiAgICAgICAgICAgICBAdHJ5IHsKICAgICAgICAgICAgICAgICBbYXJjaGl2
ZXIgZW5jb2RlT2JqZWN0OnVzZXJPYmplY3QgZm9yS2V5OkAidXNlck9iamVjdCJdOwpAQCAtNDcy
LDcwICs0NjYsNTcgQEAgLSAodm9pZClfc2V0Rm9ybURlbGVnYXRlOihpZCA8V0tXZWJQcm9jZXNz
UGx1Z0luRm9ybURlbGVnYXRlUHJpdmF0ZT4pZm9ybURlbGVnYXQKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBbYXJjaGl2ZXIgZmluaXNoRW5jb2Rp
bmddOwotCiAgICAgICAgICAgICB1c2VyRGF0YSA9IEFQSTo6RGF0YTo6Y3JlYXRlV2l0aG91dENv
cHlpbmcoYXJjaGl2ZXIuZ2V0KCkuZW5jb2RlZERhdGEpOwogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCB3aWxsU3VibWl0Rm9ybShXZWJLaXQ6OldlYlBhZ2UqLCBXZWJDb3JlOjpIVE1MRm9ybUVs
ZW1lbnQqIGZvcm1FbGVtZW50LCBXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgV2ViS2l0OjpXZWJG
cmFtZSogc291cmNlRnJhbWUsIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8V1RGOjpTdHJpbmcsIFdU
Rjo6U3RyaW5nPj4mIHZhbHVlcywgUmVmUHRyPEFQSTo6T2JqZWN0PiYgdXNlckRhdGEpIG92ZXJy
aWRlCisgICAgICAgIHZvaWQgd2lsbFN1Ym1pdEZvcm0oV2ViS2l0OjpXZWJQYWdlKiwgV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCwgV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUs
IFdlYktpdDo6V2ViRnJhbWUqIHNvdXJjZUZyYW1lLCBjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFdU
Rjo6U3RyaW5nLCBXVEY6OlN0cmluZz4+JiB2YWx1ZXMsIFJlZlB0cjxBUEk6Ok9iamVjdD4mIHVz
ZXJEYXRhKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBhdXRvIGZvcm1EZWxlZ2F0ZSA9
IG1fY29udHJvbGxlci0+X2Zvcm1EZWxlZ2F0ZS5nZXQoKTsKLQogICAgICAgICAgICAgaWYgKFtm
b3JtRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViUHJvY2Vzc1BsdWdJ
bkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjp3aWxsU3VibWl0Rm9ybTp0b0ZyYW1lOmZyb21GcmFt
ZTp3aXRoVmFsdWVzOildKSB7CiAgICAgICAgICAgICAgICAgYXV0byB2YWx1ZU1hcCA9IGFkb3B0
TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnZhbHVlcy5z
aXplKCldKTsKICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiB2YWx1ZXMp
CiAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZU1hcCBzZXRPYmplY3Q6cGFpci5zZWNvbmQgZm9y
S2V5OnBhaXIuZmlyc3RdOwotCi0gICAgICAgICAgICAgICAgTlNPYmplY3QgPE5TU2VjdXJlQ29k
aW5nPiAqdXNlck9iamVjdCA9IFtmb3JtRGVsZWdhdGUgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2Vy
Q29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHdpbGxTdWJtaXRGb3JtOndyYXBwZXIoKldl
YktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZShmb3JtRWxlbWVudCku
Z2V0KCkpIHRvRnJhbWU6d3JhcHBlcigqZnJhbWUpIGZyb21GcmFtZTp3cmFwcGVyKCpzb3VyY2VG
cmFtZSkgd2l0aFZhbHVlczp2YWx1ZU1hcC5nZXQoKV07Ci0gICAgICAgICAgICAgICAgZW5jb2Rl
VXNlck9iamVjdCh1c2VyT2JqZWN0LCB1c2VyRGF0YSk7CisgICAgICAgICAgICAgICAgZW5jb2Rl
VXNlck9iamVjdChbZm9ybURlbGVnYXRlIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRD
b250cm9sbGVyOm1fY29udHJvbGxlciB3aWxsU3VibWl0Rm9ybTp3cmFwcGVyKCpXZWJLaXQ6Oklu
amVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoZm9ybUVsZW1lbnQpLmdldCgpKSB0
b0ZyYW1lOndyYXBwZXIoKmZyYW1lKSBmcm9tRnJhbWU6d3JhcHBlcigqc291cmNlRnJhbWUpIHdp
dGhWYWx1ZXM6dmFsdWVNYXAuZ2V0KCldLCB1c2VyRGF0YSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAotICAgICAgICB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRGaWVsZChXZWJLaXQ6Oldl
YlBhZ2UqLCBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIFdlYktpdDo6
V2ViRnJhbWUqIGZyYW1lLCBib29sIGluaXRpYXRlZEJ5VXNlclR5cGluZykgb3ZlcnJpZGUKKyAg
ICAgICAgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoV2ViS2l0OjpXZWJQYWdlKiwgV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBXZWJLaXQ6OldlYkZyYW1lKiBm
cmFtZSwgYm9vbCBpbml0aWF0ZWRCeVVzZXJUeXBpbmcpIGZpbmFsCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGF1dG8gZm9ybURlbGVnYXRlID0gbV9jb250cm9sbGVyLT5fZm9ybURlbGVnYXRlLmdl
dCgpOwotCiAgICAgICAgICAgICBpZiAoW2Zvcm1EZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOnRleHRE
aWRDaGFuZ2VJblRleHRGaWVsZDppbkZyYW1lOmluaXRpYXRlZEJ5VXNlclR5cGluZzopXSkKICAg
ICAgICAgICAgICAgICBbZm9ybURlbGVnYXRlIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRl
eHRDb250cm9sbGVyOm1fY29udHJvbGxlciB0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQ6d3JhcHBl
cigqV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKGlucHV0RWxl
bWVudCkpIGluRnJhbWU6d3JhcHBlcigqZnJhbWUpIGluaXRpYXRlZEJ5VXNlclR5cGluZzppbml0
aWF0ZWRCeVVzZXJUeXBpbmddOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCB3aWxsQmVnaW5J
bnB1dFNlc3Npb24oV2ViS2l0OjpXZWJQYWdlKiwgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwg
V2ViS2l0OjpXZWJGcmFtZSogZnJhbWUsIGJvb2wgdXNlcklzSW50ZXJhY3RpbmcsIFJlZlB0cjxB
UEk6Ok9iamVjdD4mIHVzZXJEYXRhKSBvdmVycmlkZQorICAgICAgICB2b2lkIHdpbGxCZWdpbklu
cHV0U2Vzc2lvbihXZWJLaXQ6OldlYlBhZ2UqLCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LCBX
ZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgYm9vbCB1c2VySXNJbnRlcmFjdGluZywgUmVmUHRyPEFQ
STo6T2JqZWN0PiYgdXNlckRhdGEpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8g
Zm9ybURlbGVnYXRlID0gbV9jb250cm9sbGVyLT5fZm9ybURlbGVnYXRlLmdldCgpOwotCiAgICAg
ICAgICAgICBpZiAoW2Zvcm1EZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93
ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOndpbGxCZWdpbklucHV0U2Vz
c2lvbkZvckVsZW1lbnQ6aW5GcmFtZTp1c2VySXNJbnRlcmFjdGluZzopXSkgewotICAgICAgICAg
ICAgICAgIE5TT2JqZWN0PE5TU2VjdXJlQ29kaW5nPiAqdXNlck9iamVjdCA9IFtmb3JtRGVsZWdh
dGUgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVy
IHdpbGxCZWdpbklucHV0U2Vzc2lvbkZvckVsZW1lbnQ6d3JhcHBlcigqV2ViS2l0OjpJbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKGVsZW1lbnQpKSBpbkZyYW1lOndyYXBwZXIo
KmZyYW1lKSB1c2VySXNJbnRlcmFjdGluZzp1c2VySXNJbnRlcmFjdGluZ107Ci0gICAgICAgICAg
ICAgICAgZW5jb2RlVXNlck9iamVjdCh1c2VyT2JqZWN0LCB1c2VyRGF0YSk7CisgICAgICAgICAg
ICAgICAgZW5jb2RlVXNlck9iamVjdChbZm9ybURlbGVnYXRlIF93ZWJQcm9jZXNzUGx1Z0luQnJv
d3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciB3aWxsQmVnaW5JbnB1dFNlc3Npb25G
b3JFbGVtZW50OndyYXBwZXIoKldlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRP
ckNyZWF0ZShlbGVtZW50KSkgaW5GcmFtZTp3cmFwcGVyKCpmcmFtZSkgdXNlcklzSW50ZXJhY3Rp
bmc6dXNlcklzSW50ZXJhY3RpbmddLCB1c2VyRGF0YSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYg
KHVzZXJJc0ludGVyYWN0aW5nICYmIFtmb3JtRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjp3aWxsQmVn
aW5JbnB1dFNlc3Npb25Gb3JFbGVtZW50OmluRnJhbWU6KV0pIHsKICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV2UgY2hlY2sgdXNlcklzSW50ZXJhY3Rpbmcgc28gdGhhdCB3ZSBkb24ndCBiZWdp
biBhbiBpbnB1dCBzZXNzaW9uIGZvciBhCiAgICAgICAgICAgICAgICAgLy8gcHJvZ3JhbW1hdGlj
IGZvY3VzIHRoYXQgZG9lc24ndCBjYXVzZSB0aGUga2V5Ym9hcmQgdG8gYXBwZWFyLiBCdXQgdGhp
cyBtaXNzZXMgdGhlIGNhc2Ugb2YKICAgICAgICAgICAgICAgICAvLyBhIHByb2dyYW1tYXRpYyBm
b2N1cyBoYXBwZW5pbmcgd2hpbGUgdGhlIGtleWJvYXJkIGlzIGFscmVhZHkgc2hvd24uIE9uY2Ug
d2UgaGF2ZSBhIHdheSB0bwogICAgICAgICAgICAgICAgIC8vIGtub3cgdGhlIGtleWJvYXJkIHN0
YXRlIGluIHRoZSBXZWIgUHJvY2Vzcywgd2Ugc2hvdWxkIHJlZmluZSB0aGUgY29uZGl0aW9uLgot
ICAgICAgICAgICAgICAgIE5TT2JqZWN0PE5TU2VjdXJlQ29kaW5nPiAqdXNlck9iamVjdCA9IFtm
b3JtRGVsZWdhdGUgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9j
b250cm9sbGVyIHdpbGxCZWdpbklucHV0U2Vzc2lvbkZvckVsZW1lbnQ6d3JhcHBlcigqV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKGVsZW1lbnQpKSBpbkZyYW1l
OndyYXBwZXIoKmZyYW1lKV07Ci0gICAgICAgICAgICAgICAgZW5jb2RlVXNlck9iamVjdCh1c2Vy
T2JqZWN0LCB1c2VyRGF0YSk7CisgICAgICAgICAgICAgICAgZW5jb2RlVXNlck9iamVjdChbZm9y
bURlbGVnYXRlIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29u
dHJvbGxlciB3aWxsQmVnaW5JbnB1dFNlc3Npb25Gb3JFbGVtZW50OndyYXBwZXIoKldlYktpdDo6
SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZShlbGVtZW50KSkgaW5GcmFtZTp3
cmFwcGVyKCpmcmFtZSldLCB1c2VyRGF0YSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBib29sIHNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXMoV2ViS2l0OjpXZWJQYWdlKikg
b3ZlcnJpZGUKKyAgICAgICAgYm9vbCBzaG91bGROb3RpZnlPbkZvcm1DaGFuZ2VzKFdlYktpdDo6
V2ViUGFnZSopIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gZm9ybURlbGVnYXRl
ID0gbV9jb250cm9sbGVyLT5fZm9ybURlbGVnYXRlLmdldCgpOwotCiAgICAgICAgICAgICBpZiAo
IVtmb3JtRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViUHJvY2Vzc1Bs
dWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlclNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXM6KV0p
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgICAgICByZXR1cm4gW2Zv
cm1EZWxlZ2F0ZSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlclNob3Vs
ZE5vdGlmeU9uRm9ybUNoYW5nZXM6bV9jb250cm9sbGVyXTsKICAgICAgICAgfQogCi0gICAgICAg
IHZvaWQgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKFdlYktpdDo6V2ViUGFnZSosIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4+JiBlbGVtZW50cywgV2ViS2l0OjpXZWJGcmFt
ZSopIG92ZXJyaWRlCisgICAgICAgIHZvaWQgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKFdlYktp
dDo6V2ViUGFnZSosIGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4+JiBlbGVt
ZW50cywgV2ViS2l0OjpXZWJGcmFtZSopIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1
dG8gZm9ybURlbGVnYXRlID0gbV9jb250cm9sbGVyLT5fZm9ybURlbGVnYXRlLmdldCgpOwotCiAg
ICAgICAgICAgICBpZiAoIVtmb3JtRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjpkaWRBc3NvY2lhdGVG
b3JtQ29udHJvbHM6KV0pCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBh
dXRvIGNvbnRyb2xzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5OmVsZW1lbnRzLnNpemUoKV0pOwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBl
bGVtZW50IDogZWxlbWVudHMpCi0gICAgICAgICAgICAgICAgW2NvbnRyb2xzIGFkZE9iamVjdDp3
cmFwcGVyKCpXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoZWxl
bWVudC5nZXQoKSkpXTsKLSAgICAgICAgICAgIHJldHVybiBbZm9ybURlbGVnYXRlIF93ZWJQcm9j
ZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciBkaWRBc3NvY2lh
dGVGb3JtQ29udHJvbHM6Y29udHJvbHMuZ2V0KCldOworICAgICAgICAgICAgcmV0dXJuIFtmb3Jt
RGVsZWdhdGUgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250
cm9sbGVyIGRpZEFzc29jaWF0ZUZvcm1Db250cm9sczpjcmVhdGVOU0FycmF5KGVsZW1lbnRzLCBb
XSAoYXV0byYgZWxlbWVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyKCpXZWJL
aXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoZWxlbWVudC5nZXQoKSkp
OworICAgICAgICAgICAgfSkuZ2V0KCldOwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVl
L1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQppbmRl
eCAxZGVmMDk0MGIxZDJkZjQ3ZGFhNjY1NmQxYjI2ZWJmZGI4N2Y0ODhlLi43NjE1MzIwYmUzZmIx
NDI3OTNiMmVjNmFlZjJhMmMwOTE1MTkyOWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRy
ZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQpAQCAtMzgsNiArMzgsNyBAQAogI2ltcG9y
dCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpD
RXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2Nv
Y29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIHN0
YXRpYyBNb25vdG9uaWNUaW1lIG1lZGlhVGltZVRvQ3VycmVudFRpbWUoQ0ZUaW1lSW50ZXJ2YWwg
dCkKQEAgLTcxMyw4ICs3MTQsNyBAQCBzdGF0aWMgdm9pZCBhZGRBbmltYXRpb25Ub0xheWVyKENB
TGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIbwogICAgIFJldGFp
blB0cjxDQVByb3BlcnR5QW5pbWF0aW9uPiBjYUFuaW1hdGlvbjsKICAgICBzd2l0Y2ggKHByb3Bl
cnRpZXMuYW5pbWF0aW9uVHlwZSkgewogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6QmFz
aWM6IHsKLSAgICAgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGJhc2ljQW5pbWF0aW9u
OwotICAgICAgICBiYXNpY0FuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldp
dGhLZXlQYXRoOnByb3BlcnRpZXMua2V5UGF0aF07CisgICAgICAgIGF1dG8gYmFzaWNBbmltYXRp
b24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpwcm9wZXJ0aWVzLmtl
eVBhdGhdOwogICAgICAgICAKICAgICAgICAgaWYgKHByb3BlcnRpZXMua2V5VmFsdWVzLnNpemUo
KSA+IDEpIHsKICAgICAgICAgICAgIFtiYXNpY0FuaW1hdGlvbiBzZXRGcm9tVmFsdWU6YW5pbWF0
aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShwcm9wZXJ0aWVzLmtleVZhbHVlc1swXSldOwpAQCAt
NzI4LDM5ICs3MjgsMzEgQEAgc3RhdGljIHZvaWQgYWRkQW5pbWF0aW9uVG9MYXllcihDQUxheWVy
ICpsYXllciwgUmVtb3RlTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG8KICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6S2V5ZnJhbWU6IHsKLSAgICAg
ICAgUmV0YWluUHRyPENBS2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1lQW5pbWF0aW9uOwotICAg
ICAgICBrZXlmcmFtZUFuaW1hdGlvbiA9IFtDQUtleWZyYW1lQW5pbWF0aW9uIGFuaW1hdGlvbldp
dGhLZXlQYXRoOnByb3BlcnRpZXMua2V5UGF0aF07CisgICAgICAgIGF1dG8ga2V5ZnJhbWVBbmlt
YXRpb24gPSBbQ0FLZXlmcmFtZUFuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpwcm9wZXJ0
aWVzLmtleVBhdGhdOwogCiAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmtleVZhbHVlcy5zaXplKCkp
IHsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4ga2V5ZnJhbWVzID0gYWRv
cHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnByb3BlcnRpZXMu
a2V5VmFsdWVzLnNpemUoKV0pOwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6
IHByb3BlcnRpZXMua2V5VmFsdWVzKQotICAgICAgICAgICAgICAgIFtrZXlmcmFtZXMgYWRkT2Jq
ZWN0OmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUodmFsdWUpXTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgW2tleWZyYW1lQW5pbWF0aW9uIHNldFZhbHVlczprZXlmcmFtZXMuZ2V0
KCldOworICAgICAgICAgICAgW2tleWZyYW1lQW5pbWF0aW9uIHNldFZhbHVlczpjcmVhdGVOU0Fy
cmF5KHByb3BlcnRpZXMua2V5VmFsdWVzLCBbXSAoYXV0byYgdmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZSh2YWx1ZSk7CisgICAg
ICAgICAgICB9KS5nZXQoKV07CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocHJvcGVydGllcy5r
ZXlUaW1lcy5zaXplKCkpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4g
a2V5VGltZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNp
dHk6cHJvcGVydGllcy5rZXlUaW1lcy5zaXplKCldKTsKLSAgICAgICAgICAgIGZvciAoYXV0byBr
ZXlUaW1lIDogcHJvcGVydGllcy5rZXlUaW1lcykKLSAgICAgICAgICAgICAgICBba2V5VGltZXMg
YWRkT2JqZWN0OkAoa2V5VGltZSldOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBba2V5ZnJh
bWVBbmltYXRpb24gc2V0S2V5VGltZXM6a2V5VGltZXMuZ2V0KCldOworICAgICAgICAgICAgW2tl
eWZyYW1lQW5pbWF0aW9uIHNldEtleVRpbWVzOmNyZWF0ZU5TQXJyYXkocHJvcGVydGllcy5rZXlU
aW1lcywgW10gKGF1dG8mIHRpbWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQCh0aW1lKTsK
KyAgICAgICAgICAgIH0pLmdldCgpXTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChwcm9wZXJ0
aWVzLnRpbWluZ0Z1bmN0aW9ucy5zaXplKCkpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gdGltaW5nRnVuY3Rpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OnByb3BlcnRpZXMudGltaW5nRnVuY3Rpb25zLnNpemUoKV0p
OwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0aW1pbmdGdW5jdGlvbiA6IHByb3BlcnRp
ZXMudGltaW5nRnVuY3Rpb25zKQotICAgICAgICAgICAgICAgIFt0aW1pbmdGdW5jdGlvbnMgYWRk
T2JqZWN0OnRvQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uLmdldCgpLCBwcm9w
ZXJ0aWVzLnJldmVyc2VUaW1pbmdGdW5jdGlvbnMpXTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgW2tleWZyYW1lQW5pbWF0aW9uIHNldFRpbWluZ0Z1bmN0aW9uczp0aW1pbmdGdW5jdGlvbnMu
Z2V0KCldOworICAgICAgICAgICAgW2tleWZyYW1lQW5pbWF0aW9uIHNldFRpbWluZ0Z1bmN0aW9u
czpjcmVhdGVOU0FycmF5KHByb3BlcnRpZXMudGltaW5nRnVuY3Rpb25zLCBbJl0gKGF1dG8mIGZ1
bmN0aW9uKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvQ0FNZWRpYVRpbWluZ0Z1bmN0aW9u
KGZ1bmN0aW9uLmdldCgpLCBwcm9wZXJ0aWVzLnJldmVyc2VUaW1pbmdGdW5jdGlvbnMpOworICAg
ICAgICAgICAgfSkuZ2V0KCldOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjYUFuaW1h
dGlvbiA9IGtleWZyYW1lQW5pbWF0aW9uOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpTcHJpbmc6IHsKLSAgICAgICAgUmV0YWluUHRyPENBU3By
aW5nQW5pbWF0aW9uPiBzcHJpbmdBbmltYXRpb247Ci0gICAgICAgIHNwcmluZ0FuaW1hdGlvbiA9
IFtDQVNwcmluZ0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpwcm9wZXJ0aWVzLmtleVBh
dGhdOworICAgICAgICBhdXRvIHNwcmluZ0FuaW1hdGlvbiA9IFtDQVNwcmluZ0FuaW1hdGlvbiBh
bmltYXRpb25XaXRoS2V5UGF0aDpwcm9wZXJ0aWVzLmtleVBhdGhdOwogICAgICAgICAKICAgICAg
ICAgaWYgKHByb3BlcnRpZXMua2V5VmFsdWVzLnNpemUoKSA+IDEpIHsKICAgICAgICAgICAgIFtz
cHJpbmdBbmltYXRpb24gc2V0RnJvbVZhbHVlOmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFs
dWUocHJvcGVydGllcy5rZXlWYWx1ZXNbMF0pXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAppbmRl
eCA0ODEwYjIxZTRmODFhYjg3OTc5OTc2OThkYWJiYzU4YmZlNmEzNzE5Li4yMDM4NzFkOGQ2MmU1
MjBlOTllMmQyZTg0YjQ0NmE4ZDU2MmIwYjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCkBA
IC04Niw2ICs4Niw3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0o
Y29uc3QgQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYgaXRlbUlECiBXZWJCYWNrRm9yd2FyZExp
c3RQcm94eTo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHkoV2ViUGFnZSYgcGFnZSkKICAgICA6IG1f
cGFnZSgmcGFnZSkKIHsKKyAgICAvLyBGSVhNRTogVGhpcyBtZWFucyB0aGF0IGlmIHdlIG1peCBs
ZWdhY3kgV2ViS2l0IGFuZCBtb2Rlcm4gV2ViS2l0IGluIHRoZSBzYW1lIHByb2Nlc3MsIHdlIHdv
bid0IGdldCBib3RoIG5vdGlmaWNhdGlvbnMuCiAgICAgV2ViQ29yZTo6bm90aWZ5SGlzdG9yeUl0
ZW1DaGFuZ2VkID0gV0syTm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2Vi
UGFnZU9iamVjdE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
S0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCmluZGV4IGEwOWZmNjEzN2E5OGI0MDNh
NTA2Njk5NTM4NjZkNzNjMGY2NjIxMzguLjI2Mjc1ZDdiNjdiNTlhZDk4ZWJlZmViZWViODAyMDkz
MWQzODk5OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1t
CkBAIC00Nyw2ICs0Nyw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5oPgogI2ltcG9ydCA8
cGFsL3NwaS9jb2NvYS9OU0FjY2Vzc2liaWxpdHlTUEkuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oPgogCiBuYW1lc3BhY2UgYXggPSBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Owog
CkBAIC05NywxNSArOTgsMTUgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5E
CiAjZW5kaWYKIAogICAgIGlkIG5hbWVzID0gYXg6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVh
ZDxSZXRhaW5QdHI8aWQ+PihbUFJPVEVDVEVEX1NFTEZdICgpIC0+IFJldGFpblB0cjxpZD4gewot
ICAgICAgICBOU011dGFibGVBcnJheSAqbmFtZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwot
ICAgICAgICBpZiAoIXByb3RlY3RlZFNlbGYtPm1fcGFnZSkKLSAgICAgICAgICAgIHJldHVybiBu
YW1lczsKKyAgICAgICAgYXV0byBwYWdlID0gcHJvdGVjdGVkU2VsZi0+bV9wYWdlOworICAgICAg
ICBpZiAoIXBhZ2UpCisgICAgICAgICAgICByZXR1cm4gQFtdOwogCi0gICAgICAgIGlmIChhdXRv
KiBjb3JlUGFnZSA9IHByb3RlY3RlZFNlbGYtPm1fcGFnZS0+Y29yZVBhZ2UoKSkgewotICAgICAg
ICAgICAgZm9yIChhdXRvJiBuYW1lIDogY29yZVBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKHRydWUpKQotICAgICAgICAgICAgICAg
IFtuYW1lcyBhZGRPYmplY3Q6KE5TU3RyaW5nICopbmFtZV07Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIG5hbWVzOworICAgICAgICBhdXRvIGNvcmVQYWdlID0gcGFnZS0+Y29yZVBhZ2UoKTsK
KyAgICAgICAgaWYgKCFjb3JlUGFnZSkKKyAgICAgICAgICAgIHJldHVybiBAW107CisKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoY29yZVBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKHRydWUpKTsKICAgICB9KS5hdXRvcmVs
ZWFzZSgpOwogCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCmluZGV4
IDMwNjVkMTcyMjU4NGYyN2VmZWJjOTU5MzRiNmE3MDk0NWQ5YjNkNmUuLjZlYTEyMTM3OTcyMTZi
OWY3ODQwZTYyMmY5MmZkYTk3OWVhNTk3NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQpAQCAtNDYzLDE0ICs0NjMsMTIgQEAgdm9p
ZCBXZWJQcm9jZXNzOjpyZWdpc3RlcldpdGhTdGF0ZUR1bXBlcigpCiAgICAgICAgICAgICAgICAg
W3N0YXRlRGljdCBzZXRPYmplY3Q6anNPYmplY3RDb3VudHMuZ2V0KCkgZm9yS2V5OkAiSmF2YVNj
cmlwdCBPYmplY3QgQ291bnRzIl07CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGF1dG8g
cGFnZUxvYWRUaW1lcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwot
ICAgICAgICAgICAgZm9yIChhdXRvJiBwYWdlIDogbV9wYWdlTWFwLnZhbHVlcygpKSB7CisgICAg
ICAgICAgICBhdXRvIHBhZ2VMb2FkVGltZXMgPSBjcmVhdGVOU0FycmF5KG1fcGFnZU1hcC52YWx1
ZXMoKSwgW10gKGF1dG8mIHBhZ2UpIC0+IGlkIHsKICAgICAgICAgICAgICAgICBpZiAocGFnZS0+
dXNlc0VwaGVtZXJhbFNlc3Npb24oKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICAgICAgICAgICAgICBOU0RhdGUq
IGRhdGUgPSBbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2UxOTcwOnBhZ2UtPmxvYWRD
b21taXRUaW1lKCkuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCldOwotICAgICAgICAgICAg
ICAgIFtwYWdlTG9hZFRpbWVzIGFkZE9iamVjdDpkYXRlXTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gW05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDpw
YWdlLT5sb2FkQ29tbWl0VGltZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpXTsKKyAg
ICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAvLyBBZGRpbmcgYW4gZW1wdHkgYXJyYXkgdG8g
dGhlIHByb2Nlc3Mgc3RhdGUgbWF5IHByb3ZpZGUgYW4KICAgICAgICAgICAgIC8vIGluZGljYXRp
b24gb2YgdGhlIGV4aXN0YW5jZSBvZiBwcml2YXRlIHNlc3Npb25zLCB3aGljaCB3ZSdkIGxpa2UK
QEAgLTYzMSwyMCArNjI5LDIxIEBAIHN0YXRpYyBOU1VSTCAqb3JpZ2luKFdlYlBhZ2UmIHBhZ2Up
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKKwogc3RhdGljIFJldGFpblB0cjxOU0FycmF5
PE5TU3RyaW5nICo+PiBhY3RpdmVQYWdlc09yaWdpbnMoY29uc3QgSGFzaE1hcDxQYWdlSWRlbnRp
ZmllciwgUmVmUHRyPFdlYlBhZ2U+PiYgcGFnZU1hcCkKIHsKLSAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk8TlNTdHJpbmcgKj4+IGFjdGl2ZU9yaWdpbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRdKTsKLQotICAgIGZvciAoYXV0byYgcGFnZSA6IHBhZ2VNYXAudmFs
dWVzKCkpIHsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShwYWdlTWFwLnZhbHVlcygpLCBbXSAo
YXV0byYgcGFnZSkgLT4gTlNTdHJpbmcgKiB7CiAgICAgICAgIGlmIChwYWdlLT51c2VzRXBoZW1l
cmFsU2Vzc2lvbigpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4g
bmlsOwogCi0gICAgICAgIGlmIChOU1VSTCAqb3JpZ2luQXNVUkwgPSBvcmlnaW4oKnBhZ2UpKQot
ICAgICAgICAgICAgW2FjdGl2ZU9yaWdpbnMgYWRkT2JqZWN0OldURjo6dXNlclZpc2libGVTdHJp
bmcob3JpZ2luQXNVUkwpXTsKLSAgICB9CisgICAgICAgIE5TVVJMICpvcmlnaW5Bc1VSTCA9IG9y
aWdpbigqcGFnZSk7CisgICAgICAgIGlmICghb3JpZ2luQXNVUkwpCisgICAgICAgICAgICByZXR1
cm4gbmlsOwogCi0gICAgcmV0dXJuIGFjdGl2ZU9yaWdpbnM7CisgICAgICAgIHJldHVybiBXVEY6
OnVzZXJWaXNpYmxlU3RyaW5nKG9yaWdpbkFzVVJMKTsKKyAgICB9KTsKIH0KKwogI2VuZGlmCiAK
IHZvaWQgV2ViUHJvY2Vzczo6dXBkYXRlQWN0aXZlUGFnZXMoY29uc3QgU3RyaW5nJiBvdmVycmlk
ZURpc3BsYXlOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUlPUy5tbQppbmRleCA0NjE3NjhmNzBkMWJlYjI1Y2JiYzAyMTRkNGQ1
YzNkNmY2N2E5MzBhLi5mYWUzNGQxMjJkMjY2MzNhMGZkMTdkZjhlOWY2MzgyYjYzYTQ4ZWE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUlPUy5tbQpAQCAtMjcsNiArMjcsMTYgQEAKIAogI2ltcG9ydCAiV2ViRnJhbWVJT1MuaCIK
IAorI2ltcG9ydCAiRE9NLmgiCisjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IkRPTVJhbmdlLmgiCisjaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCisjaW1wb3J0ICJET01V
SUtpdEV4dGVuc2lvbnMuaCIKKyNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IldlYlNlbGVjdGlvblJlY3QuaCIKKyNpbXBvcnQgIldlYlVJS2l0RGVsZWdhdGUuaCIKKyNpbXBv
cnQgIldlYlZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJWaXNpYmxlUG9zaXRpb25JbnRlcm5h
bC5oIgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRWRpdGluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4KQEAgLTQw
LDcgKzUwLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Qb3NpdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVGV4dC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1NlbGVjdGlvblJlY3QuaD4KQEAgLTQ5LDIwICs1OCw4IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L1RleHRGbGFncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaXNpYmxlUG9zaXRpb24uaD4KICNpbXBv
cnQgPFdlYkNvcmUvVmlzaWJsZVVuaXRzLmg+Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NLmg+
Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NUmFuZ2UuaD4KLSNpbXBvcnQgPFdlYktpdExlZ2Fj
eS9ET01VSUtpdEV4dGVuc2lvbnMuaD4KLSNpbXBvcnQgPFdlYktpdExlZ2FjeS9XZWJTZWxlY3Rp
b25SZWN0Lmg+Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvV2ViVmlzaWJsZVBvc2l0aW9uLmg+CiAj
aW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+Ci0KLSNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgot
I2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5o
IgotI2ltcG9ydCAiV2ViVUlLaXREZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV2ViVmlld1ByaXZhdGUu
aCIKLSNpbXBvcnQgIldlYlZpc2libGVQb3NpdGlvbi5oIgotI2ltcG9ydCAiV2ViVmlzaWJsZVBv
c2l0aW9uSW50ZXJuYWwuaCIKKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMjE0LDEzICsyMTEsMTAgQEAgLSAoTlNBcnJh
eSAqKXNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOihSYW5nZSAqKXJhbmdlCiAgICAgCiAgICAg
VmVjdG9yPFNlbGVjdGlvblJlY3Q+IHJlY3RzOwogICAgIHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9u
UmVjdHMocmVjdHMpOwotICAgIHVuc2lnbmVkIHNpemUgPSByZWN0cy5zaXplKCk7CiAgICAgCi0g
ICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBh
Y2l0eTpzaXplXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0g
ICAgICAgIFNlbGVjdGlvblJlY3QgJmNvcmVSZWN0ID0gcmVjdHNbaV07Ci0gICAgICAgIFdlYlNl
bGVjdGlvblJlY3QgKndlYlJlY3QgPSBbV2ViU2VsZWN0aW9uUmVjdCBzZWxlY3Rpb25SZWN0XTsK
LSAgICAgICAgd2ViUmVjdC5yZWN0ID0gc3RhdGljX2Nhc3Q8Q0dSZWN0Pihjb3JlUmVjdC5yZWN0
KCkpOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHJlY3RzLCBbXSAoYXV0byYgY29yZVJlY3Qp
IHsKKyAgICAgICAgYXV0byB3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVj
dF07CisgICAgICAgIHdlYlJlY3QucmVjdCA9IGNvcmVSZWN0LnJlY3QoKTsKICAgICAgICAgd2Vi
UmVjdC53cml0aW5nRGlyZWN0aW9uID0gY29yZVJlY3QuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVj
dGlvbjo6TFRSID8gV0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dyaXRpbmdEaXJl
Y3Rpb25SaWdodFRvTGVmdDsKICAgICAgICAgd2ViUmVjdC5pc0xpbmVCcmVhayA9IGNvcmVSZWN0
LmlzTGluZUJyZWFrKCk7CiAgICAgICAgIHdlYlJlY3QuaXNGaXJzdE9uTGluZSA9IGNvcmVSZWN0
LmlzRmlyc3RPbkxpbmUoKTsKQEAgLTIyOSwxMCArMjIzLDggQEAgLSAoTlNBcnJheSAqKXNlbGVj
dGlvblJlY3RzRm9yQ29yZVJhbmdlOihSYW5nZSAqKXJhbmdlCiAgICAgICAgIHdlYlJlY3QuY29u
dGFpbnNFbmQgPSBjb3JlUmVjdC5jb250YWluc0VuZCgpOwogICAgICAgICB3ZWJSZWN0LmlzSW5G
aXhlZFBvc2l0aW9uID0gY29yZVJlY3QuaXNJbkZpeGVkUG9zaXRpb24oKTsKICAgICAgICAgd2Vi
UmVjdC5pc0hvcml6b250YWwgPSBjb3JlUmVjdC5pc0hvcml6b250YWwoKTsKLSAgICAgICAgW3Jl
c3VsdCBhZGRPYmplY3Q6d2ViUmVjdF07Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHdlYlJlY3Q7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsK
IH0KIAogLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6KERPTVJhbmdlICopZG9t
UmFuZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCmluZGV4IGQ4YWY2NzhkYWYwODg4Mjg0
YWJkZGMxY2RiMTBhZGViMTRiNzY3NGYuLmRmMGI1MjA5MTFmZTE4NWNiOTM4ZmYxZjdjOTk3ZWFm
ZWEyNzBmM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQpAQCAtMTg3LDEzICsxODcs
OSBAQCBzdGF0aWMgV0tRdWFkIHdrUXVhZEZyb21GbG9hdFF1YWQoY29uc3QgRmxvYXRRdWFkJiBp
blF1YWQpCiAKIHN0YXRpYyBOU0FycmF5ICpraXQoY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIHF1
YWRzKQogewotICAgIE5TTXV0YWJsZUFycmF5ICphcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTpxdWFkcy5zaXplKCldOwotICAgIGZvciAoYXV0byYgcXVhZCA6IHF1YWRz
KSB7Ci0gICAgICAgIFdLUXVhZE9iamVjdCAqcXVhZE9iamVjdCA9IFtbV0tRdWFkT2JqZWN0IGFs
bG9jXSBpbml0V2l0aFF1YWQ6d2tRdWFkRnJvbUZsb2F0UXVhZChxdWFkKV07Ci0gICAgICAgIFth
cnJheSBhZGRPYmplY3Q6cXVhZE9iamVjdF07Ci0gICAgICAgIFtxdWFkT2JqZWN0IHJlbGVhc2Vd
OwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocXVh
ZHMsIFtdIChhdXRvJiBxdWFkKSB7CisgICAgICAgIHJldHVybiBhZG9wdE5TKFtbV0tRdWFkT2Jq
ZWN0IGFsbG9jXSBpbml0V2l0aFF1YWQ6d2tRdWFkRnJvbUZsb2F0UXVhZChxdWFkKV0pOworICAg
IH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgV0tRdWFkIHplcm9RdWFkKCkK
QEAgLTU0Miw4ICs1MzgsNiBAQCAtICh2b2lkKWdldFByZXZpZXdTbmFwc2hvdEltYWdlOihDR0lt
YWdlUmVmKiljZ0ltYWdlIGFuZFJlY3RzOihOU0FycmF5ICoqKXJlY3RzCiAgICAgICAgICAgICAq
Y2dJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpLmF1dG9yZWxlYXNlKCk7CiAgICAgfQogCi0g
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiByZWN0QXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLQogICAgIGlmICghKmNnSW1hZ2UpIHsKICAgICAgICAg
aWYgKGF1dG8qIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBGbG9h
dFJlY3QgYm91bmRpbmdCb3g7CkBAIC01NTEsMjcgKzU0NSwxOCBAQCAtICh2b2lkKWdldFByZXZp
ZXdTbmFwc2hvdEltYWdlOihDR0ltYWdlUmVmKiljZ0ltYWdlIGFuZFJlY3RzOihOU0FycmF5ICoq
KXJlY3RzCiAgICAgICAgICAgICAgICAgYm91bmRpbmdCb3ggPSBkb3duY2FzdDxSZW5kZXJJbWFn
ZT4oKnJlbmRlcmVyKS5hYnNvbHV0ZUNvbnRlbnRRdWFkKCkuZW5jbG9zaW5nQm91bmRpbmdCb3go
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBib3VuZGluZ0JveCA9IHJlbmRl
cmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwotCiAgICAgICAgICAgICBib3VuZGluZ0Jv
eC5pbmZsYXRlKG1hcmdpbik7Ci0KLSAgICAgICAgICAgIENHUmVjdCBjZ1JlY3QgPSBub2RlLmRv
Y3VtZW50KCkuZnJhbWUoKS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJl
Y3QoYm91bmRpbmdCb3gpKTsKLSAgICAgICAgICAgIFtyZWN0QXJyYXkgYWRkT2JqZWN0OltOU1Zh
bHVlIHZhbHVlOiZjZ1JlY3Qgd2l0aE9iakNUeXBlOkBlbmNvZGUoQ0dSZWN0KV1dOwotCi0gICAg
ICAgICAgICAqcmVjdHMgPSByZWN0QXJyYXkuYXV0b3JlbGVhc2UoKTsKKyAgICAgICAgICAgICpy
ZWN0cyA9IEBbbWFrZU5TQXJyYXlFbGVtZW50KG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpLT52aWV3
KCktPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ0JveCkpKV07CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEZsb2F0UG9pbnQgb3JpZ2lu
ID0gdGV4dEluZGljYXRvci0+dGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygp
LmxvY2F0aW9uKCk7Ci0gICAgZm9yIChjb25zdCBGbG9hdFJlY3QmIHJlY3QgOiB0ZXh0SW5kaWNh
dG9yLT50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCkpIHsKLSAgICAgICAgQ0dS
ZWN0IGNnUmVjdCA9IHJlY3Q7Ci0gICAgICAgIGNnUmVjdC5vcmlnaW4ueCArPSBvcmlnaW4ueCgp
OwotICAgICAgICBjZ1JlY3Qub3JpZ2luLnkgKz0gb3JpZ2luLnkoKTsKLSAgICAgICAgY2dSZWN0
ID0gbm9kZS5kb2N1bWVudCgpLmZyYW1lKCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhlbmNs
b3NpbmdJbnRSZWN0KGNnUmVjdCkpOwotICAgICAgICBbcmVjdEFycmF5IGFkZE9iamVjdDpbTlNW
YWx1ZSB2YWx1ZTomY2dSZWN0IHdpdGhPYmpDVHlwZTpAZW5jb2RlKENHUmVjdCldXTsKLSAgICB9
Ci0KLSAgICAqcmVjdHMgPSByZWN0QXJyYXkuYXV0b3JlbGVhc2UoKTsKKyAgICAqcmVjdHMgPSBj
cmVhdGVOU0FycmF5KHRleHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRp
bmF0ZXMoKSwgWyZdIChDR1JlY3QgcmVjdCkgeworICAgICAgICByZWN0Lm9yaWdpbi54ICs9IG9y
aWdpbi54KCk7CisgICAgICAgIHJlY3Qub3JpZ2luLnkgKz0gb3JpZ2luLnkoKTsKKyAgICAgICAg
cmV0dXJuIG1ha2VOU0FycmF5RWxlbWVudChub2RlLmRvY3VtZW50KCkuZnJhbWUoKS0+dmlldygp
LT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpKTsKKyAgICB9KS5hdXRv
cmVsZWFzZSgpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCmluZGV4IDhiOTk0ZWQyZDAwNzA2ZGQ4ZTRl
ZDZiMjJiNmIzYjdlOTg0NWY2MzkuLmIwOWM4ZWY1ZTQ4ZGRhMzFkYTNmM2Y4ZGMyNjY5NmEwMTY4
ZWExOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViQmFj
a0ZvcndhcmRMaXN0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2Vi
QmFja0ZvcndhcmRMaXN0Lm1tCkBAIC01MCw2ICs1MCw3IEBACiAjaW1wb3J0IDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3dGYvU3RkTGli
RXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogdHlwZWRlZiBI
YXNoTWFwPEJhY2tGb3J3YXJkTGlzdCosIFdlYkJhY2tGb3J3YXJkTGlzdCo+IEJhY2tGb3J3YXJk
TGlzdE1hcDsKIApAQCAtMTUxLDQ5ICsxNTIsMzggQEAgLSAodm9pZClyZW1vdmVJdGVtOihXZWJI
aXN0b3J5SXRlbSAqKWl0ZW0KIAogLy8gRklYTUU6IE1vdmUgaW50byBXZWJDb3JlIHRoZSBjb2Rl
IHRoYXQgZGVhbHMgZGlyZWN0bHkgd2l0aCBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QuCiAKLSNk
ZWZpbmUgV2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUVudHJpZXNLZXkgQCJlbnRyaWVzIgot
I2RlZmluZSBXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5Q2FwYWNpdHlLZXkgQCJjYXBhY2l0
eSIKLSNkZWZpbmUgV2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUN1cnJlbnRLZXkgQCJjdXJy
ZW50IgorY29uc3RleHByIGF1dG8gV2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUVudHJpZXNL
ZXkgPSBAImVudHJpZXMiOworY29uc3RleHByIGF1dG8gV2ViQmFja0ZvcndhcmRMaXN0RGljdGlv
bmFyeUNhcGFjaXR5S2V5ID0gQCJjYXBhY2l0eSI7Citjb25zdGV4cHIgYXV0byBXZWJCYWNrRm9y
d2FyZExpc3REaWN0aW9uYXJ5Q3VycmVudEtleSA9IEAiY3VycmVudCI7CiAKIC0gKE5TRGljdGlv
bmFyeSAqKWRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbgogewotICAgIEJhY2tGb3J3YXJkTGlzdCAq
Y29yZUJGTGlzdCA9IGNvcmUoc2VsZik7Ci0KLSAgICBhdXRvJiBoaXN0b3J5SXRlbXMgPSBjb3Jl
QkZMaXN0LT5lbnRyaWVzKCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGhpc3RvcnlJdGVtcy5zaXpl
KCk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmVudHJpZXNBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2l6ZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7ICsraSkKLSAgICAgICAgW2VudHJpZXNBcnJheSBhZGRPYmplY3Q6W2tpdChjb25z
dF9jYXN0PFdlYkNvcmU6Okhpc3RvcnlJdGVtKj4oaGlzdG9yeUl0ZW1zW2ldLnB0cigpKSkgZGlj
dGlvbmFyeVJlcHJlc2VudGF0aW9uSW5jbHVkaW5nQ2hpbGRyZW46Tk9dXTsKLQotICAgIE5TRGlj
dGlvbmFyeSAqZGljdGlvbmFyeSA9IEB7Ci0gICAgICAgIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rp
b25hcnlFbnRyaWVzS2V5OiBlbnRyaWVzQXJyYXksCi0gICAgICAgIFdlYkJhY2tGb3J3YXJkTGlz
dERpY3Rpb25hcnlDdXJyZW50S2V5OiBAKGNvcmVCRkxpc3QtPmN1cnJlbnQoKSksCi0gICAgICAg
IFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlDYXBhY2l0eUtleTogQChjb3JlQkZMaXN0LT5j
YXBhY2l0eSgpKSwKKyAgICBhdXRvJiBsaXN0ID0gKmNvcmUoc2VsZik7CisgICAgYXV0byBlbnRy
aWVzID0gY3JlYXRlTlNBcnJheShsaXN0LmVudHJpZXMoKSwgW10gKGF1dG8mIGl0ZW0pIHsKKyAg
ICAgICAgcmV0dXJuIFtraXQoY29uc3RfY2FzdDxXZWJDb3JlOjpIaXN0b3J5SXRlbSo+KGl0ZW0u
cHRyKCkpKSBkaWN0aW9uYXJ5UmVwcmVzZW50YXRpb25JbmNsdWRpbmdDaGlsZHJlbjpOT107Cisg
ICAgfSk7CisgICAgcmV0dXJuIEB7CisgICAgICAgIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25h
cnlFbnRyaWVzS2V5OiBlbnRyaWVzLmdldCgpLAorICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RE
aWN0aW9uYXJ5Q3VycmVudEtleTogQChsaXN0LmN1cnJlbnQoKSksCisgICAgICAgIFdlYkJhY2tG
b3J3YXJkTGlzdERpY3Rpb25hcnlDYXBhY2l0eUtleTogQChsaXN0LmNhcGFjaXR5KCkpLAogICAg
IH07Ci0KLSAgICBbZW50cmllc0FycmF5IHJlbGVhc2VdOwotCi0gICAgcmV0dXJuIGRpY3Rpb25h
cnk7CiB9CiAKIC0gKHZvaWQpc2V0VG9NYXRjaERpY3Rpb25hcnlSZXByZXNlbnRhdGlvbjooTlNE
aWN0aW9uYXJ5ICopZGljdGlvbmFyeQogewotICAgIEJhY2tGb3J3YXJkTGlzdCAqY29yZUJGTGlz
dCA9IGNvcmUoc2VsZik7Ci0gICAgCi0gICAgY29yZUJGTGlzdC0+c2V0Q2FwYWNpdHkoW1tkaWN0
aW9uYXJ5IG9iamVjdEZvcktleTpXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5Q2FwYWNpdHlL
ZXldIGludFZhbHVlXSk7Ci0gICAgCi0gICAgZm9yIChOU0RpY3Rpb25hcnkgKml0ZW1EaWN0aW9u
YXJ5IGluIFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9u
YXJ5RW50cmllc0tleV0pIHsKLSAgICAgICAgV2ViSGlzdG9yeUl0ZW0gKml0ZW0gPSBbW1dlYkhp
c3RvcnlJdGVtIGFsbG9jXSBpbml0RnJvbURpY3Rpb25hcnlSZXByZXNlbnRhdGlvbjppdGVtRGlj
dGlvbmFyeV07Ci0gICAgICAgIGNvcmVCRkxpc3QtPmFkZEl0ZW0oKmNvcmUoaXRlbSkpOwotICAg
ICAgICBbaXRlbSByZWxlYXNlXTsKLSAgICB9CisgICAgYXV0byYgbGlzdCA9ICpjb3JlKHNlbGYp
OworCisgICAgbGlzdC5zZXRDYXBhY2l0eShbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYkJh
Y2tGb3J3YXJkTGlzdERpY3Rpb25hcnlDYXBhY2l0eUtleV0gdW5zaWduZWRJbnRWYWx1ZV0pOwor
ICAgIGZvciAoTlNEaWN0aW9uYXJ5ICppdGVtRGljdGlvbmFyeSBpbiBbZGljdGlvbmFyeSBvYmpl
Y3RGb3JLZXk6V2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUVudHJpZXNLZXldKQorICAgICAg
ICBsaXN0LmFkZEl0ZW0oKmNvcmUoYWRvcHROUyhbW1dlYkhpc3RvcnlJdGVtIGFsbG9jXSBpbml0
RnJvbURpY3Rpb25hcnlSZXByZXNlbnRhdGlvbjppdGVtRGljdGlvbmFyeV0pLmdldCgpKSk7CiAK
ICAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Oldl
YkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlDdXJyZW50S2V5XSB1bnNpZ25lZEludFZhbHVlXTsK
LSAgICBzaXplX3QgbGlzdFNpemUgPSBjb3JlQkZMaXN0LT5lbnRyaWVzKCkuc2l6ZSgpOworICAg
IHNpemVfdCBsaXN0U2l6ZSA9IGxpc3QuZW50cmllcygpLnNpemUoKTsKICAgICBpZiAoY3VycmVu
dEluZGV4ID49IGxpc3RTaXplKQogICAgICAgICBjdXJyZW50SW5kZXggPSBsaXN0U2l6ZSAtIDE7
Ci0gICAgY29yZUJGTGlzdC0+c2V0Q3VycmVudChjdXJyZW50SW5kZXgpOworICAgIGxpc3Quc2V0
Q3VycmVudChjdXJyZW50SW5kZXgpOwogfQorCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlM
WSkKIAogLSAoQk9PTCljb250YWluc0l0ZW06KFdlYkhpc3RvcnlJdGVtICopaXRlbQpAQCAtMjM1
LDIyICsyMjUsMTEgQEAgLSAoV2ViSGlzdG9yeUl0ZW0gKilmb3J3YXJkSXRlbQogICAgIHJldHVy
biBbW2tpdChjb3JlKHNlbGYpLT5mb3J3YXJkSXRlbSgpLmdldCgpKSByZXRhaW5dIGF1dG9yZWxl
YXNlXTsKIH0KIAotc3RhdGljIE5TQXJyYXkqIHZlY3RvclRvTlNBcnJheShWZWN0b3I8UmVmPFdl
YkNvcmU6Okhpc3RvcnlJdGVtPj4mIGxpc3QpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGxpc3Qu
c2l6ZSgpOwotICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzaXplXSBhdXRvcmVsZWFzZV07Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6a2l0
KGxpc3RbaV0ucHRyKCkpXTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBib29s
IGJ1bXBlckNhckJhY2tGb3J3YXJkSGFja05lZWRlZCgpIAorc3RhdGljIGJvb2wgYnVtcGVyQ2Fy
QmFja0ZvcndhcmRIYWNrTmVlZGVkKCkKIHsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBzdGF0aWMgYm9vbCBoYWNrTmVlZGVkID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxl
SWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmZyZWV2ZXJzZS5idW1wZXJjYXIiXSAm
JiAKLSAgICAgICAgIVdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9X
SVRIT1VUX0JVTVBFUkNBUl9CQUNLX0ZPUldBUkRfUVVJUkspOwotCisgICAgc3RhdGljIGJvb2wg
aGFja05lZWRlZCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlz
RXF1YWxUb1N0cmluZzpAImNvbS5mcmVldmVyc2UuYnVtcGVyY2FyIl0KKyAgICAgICAgJiYgIVdl
YktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX0JVTVBFUkNB
Ul9CQUNLX0ZPUldBUkRfUVVJUkspOwogICAgIHJldHVybiBoYWNrTmVlZGVkOwogI2Vsc2UKICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0yNjEsMzAgKzI0MCwyOCBAQCAtIChOU0FycmF5ICopYmFja0xp
c3RXaXRoTGltaXQ6KGludClsaW1pdAogewogICAgIFZlY3RvcjxSZWY8V2ViQ29yZTo6SGlzdG9y
eUl0ZW0+PiBsaXN0OwogICAgIGNvcmUoc2VsZiktPmJhY2tMaXN0V2l0aExpbWl0KGxpbWl0LCBs
aXN0KTsKLSAgICBOU0FycmF5ICpyZXN1bHQgPSB2ZWN0b3JUb05TQXJyYXkobGlzdCk7Ci0gICAg
CisgICAgYXV0byByZXN1bHQgPSBjcmVhdGVOU0FycmF5KGxpc3QsIFtdIChhdXRvJiBpdGVtKSB7
CisgICAgICAgIHJldHVybiBraXQoaXRlbS5wdHIoKSk7CisgICAgfSk7CiAgICAgaWYgKGJ1bXBl
ckNhckJhY2tGb3J3YXJkSGFja05lZWRlZCgpKSB7Ci0gICAgICAgIHN0YXRpYyBOU0FycmF5ICps
YXN0QmFja0xpc3RBcnJheSA9IG5pbDsKLSAgICAgICAgW2xhc3RCYWNrTGlzdEFycmF5IHJlbGVh
c2VdOwotICAgICAgICBsYXN0QmFja0xpc3RBcnJheSA9IFtyZXN1bHQgcmV0YWluXTsKKyAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxOU0FycmF5Pj4gbGFzdEJhY2tMaXN0
QXJyYXk7CisgICAgICAgIGxhc3RCYWNrTGlzdEFycmF5LmdldCgpID0gcmVzdWx0OwogICAgIH0K
LSAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQuYXV0b3JlbGVhc2Uo
KTsKIH0KIAogLSAoTlNBcnJheSAqKWZvcndhcmRMaXN0V2l0aExpbWl0OihpbnQpbGltaXQKIHsK
ICAgICBWZWN0b3I8UmVmPFdlYkNvcmU6Okhpc3RvcnlJdGVtPj4gbGlzdDsKICAgICBjb3JlKHNl
bGYpLT5mb3J3YXJkTGlzdFdpdGhMaW1pdChsaW1pdCwgbGlzdCk7Ci0gICAgTlNBcnJheSAqcmVz
dWx0ID0gdmVjdG9yVG9OU0FycmF5KGxpc3QpOwotICAgIAorICAgIGF1dG8gcmVzdWx0ID0gY3Jl
YXRlTlNBcnJheShsaXN0LCBbXSAoYXV0byYgaXRlbSkgeworICAgICAgICByZXR1cm4ga2l0KGl0
ZW0ucHRyKCkpOworICAgIH0pOwogICAgIGlmIChidW1wZXJDYXJCYWNrRm9yd2FyZEhhY2tOZWVk
ZWQoKSkgewotICAgICAgICBzdGF0aWMgTlNBcnJheSAqbGFzdEZvcndhcmRMaXN0QXJyYXkgPSBu
aWw7Ci0gICAgICAgIFtsYXN0Rm9yd2FyZExpc3RBcnJheSByZWxlYXNlXTsKLSAgICAgICAgbGFz
dEZvcndhcmRMaXN0QXJyYXkgPSBbcmVzdWx0IHJldGFpbl07CisgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxSZXRhaW5QdHI8TlNBcnJheT4+IGxhc3RGb3J3YXJkTGlzdEFycmF5OworICAg
ICAgICBsYXN0Rm9yd2FyZExpc3RBcnJheS5nZXQoKSA9IHJlc3VsdDsKICAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7CiB9CiAK
IC0gKGludCljYXBhY2l0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlz
dG9yeS9XZWJIaXN0b3J5SXRlbS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3Rvcnkv
V2ViSGlzdG9yeUl0ZW0ubW0KaW5kZXggZGZhY2IzN2QxMDkzODVjZGE2MjU3MWIzZDAzZjM1Yjli
OTRlNjUyNS4uNjc2NTY4MjgxOWE1OGJiYmNjMmM4YjM2MzJmNGJlMDZhMjExM2JmZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtLm1tCkBA
IC0yNTgsMTAgKzI1OCw4IEBAIC0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KIEhpc3RvcnlJdGVt
KiBjb3JlKFdlYkhpc3RvcnlJdGVtICppdGVtKQogewogICAgIGlmICghaXRlbSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEFTU0VSVChoaXN0
b3J5SXRlbVdyYXBwZXJzKCkuZ2V0KGNvcmUoaXRlbS0+X3ByaXZhdGUpKSA9PSBpdGVtKTsKLQog
ICAgIHJldHVybiBjb3JlKGl0ZW0tPl9wcml2YXRlKTsKIH0KIApAQCAtMjY5LDExICsyNjcsOCBA
QCBXZWJIaXN0b3J5SXRlbSAqa2l0KEhpc3RvcnlJdGVtKiBpdGVtKQogewogICAgIGlmICghaXRl
bSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgCi0gICAgV2ViSGlzdG9yeUl0ZW0gKmtp
dEl0ZW0gPSBoaXN0b3J5SXRlbVdyYXBwZXJzKCkuZ2V0KGl0ZW0pOwotICAgIGlmIChraXRJdGVt
KQotICAgICAgICByZXR1cm4ga2l0SXRlbTsKLSAgICAKKyAgICBpZiAoYXV0byB3cmFwcGVyID0g
aGlzdG9yeUl0ZW1XcmFwcGVycygpLmdldChpdGVtKSkKKyAgICAgICAgcmV0dXJuIFtbd3JhcHBl
ciByZXRhaW5dIGF1dG9yZWxlYXNlXTsKICAgICByZXR1cm4gW1tbV2ViSGlzdG9yeUl0ZW0gYWxs
b2NdIGluaXRXaXRoV2ViQ29yZUhpc3RvcnlJdGVtOippdGVtXSBhdXRvcmVsZWFzZV07CiB9CiAK
QEAgLTI4NCwyMyArMjc5LDI1IEBAICsgKFdlYkhpc3RvcnlJdGVtICopZW50cnlXaXRoVVJMOihO
U1VSTCAqKVVSTAogCiAtIChpZClpbml0V2l0aFVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJp
bmcgdGl0bGU6KE5TU3RyaW5nICopdGl0bGUgZGlzcGxheVRpdGxlOihOU1N0cmluZyAqKWRpc3Bs
YXlUaXRsZSBsYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDooTlNUaW1lSW50ZXJ2YWwpdGltZQogewot
ICAgIFdlYkhpc3RvcnlJdGVtICppdGVtID0gW3NlbGYgaW5pdFdpdGhXZWJDb3JlSGlzdG9yeUl0
ZW06SGlzdG9yeUl0ZW06OmNyZWF0ZShVUkxTdHJpbmcsIHRpdGxlLCBkaXNwbGF5VGl0bGUpXTsK
LQorICAgIGF1dG8gaXRlbSA9IFtzZWxmIGluaXRXaXRoV2ViQ29yZUhpc3RvcnlJdGVtOkhpc3Rv
cnlJdGVtOjpjcmVhdGUoVVJMU3RyaW5nLCB0aXRsZSwgZGlzcGxheVRpdGxlKV07CisgICAgaWYg
KCFpdGVtKQorICAgICAgICByZXR1cm4gbmlsOwogICAgIGl0ZW0tPl9wcml2YXRlLT5fbGFzdFZp
c2l0ZWRUaW1lID0gdGltZTsKLQogICAgIHJldHVybiBpdGVtOwogfQogCiAtIChpZClpbml0V2l0
aFdlYkNvcmVIaXN0b3J5SXRlbTooUmVmPEhpc3RvcnlJdGVtPiYmKWl0ZW0KIHsgICAKICAgICBX
ZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpOworCiAgICAgLy8gTmVlZCB0byB0
ZWxsIFdlYkNvcmUgd2hhdCBmdW5jdGlvbiB0byBjYWxsIGZvciB0aGUgCiAgICAgLy8gIkhpc3Rv
cnkgSXRlbSBoYXMgQ2hhbmdlZCIgbm90aWZpY2F0aW9uIC0gbm8gaGFybSBpbiBkb2luZyB0aGlz
CiAgICAgLy8gZXZlcnl0aW1lIGEgV2ViSGlzdG9yeUl0ZW0gaXMgY3JlYXRlZAogICAgIC8vIE5v
dGU6IFdlIGFsc28gZG8gdGhpcyBpbiBbV2ViRnJhbWVWaWV3IGluaXRXaXRoRnJhbWU6XSB3aGVy
ZSB3ZSBkbwogICAgIC8vIG90aGVyICJpbml0IGJlZm9yZSBXZWJLaXQgaXMgdXNlZCIgdHlwZSB0
aGluZ3MKKyAgICAvLyBGSVhNRTogVGhpcyBtZWFucyB0aGF0IGlmIHdlIG1peCBsZWdhY3kgV2Vi
S2l0IGFuZCBtb2Rlcm4gV2ViS2l0IGluIHRoZSBzYW1lIHByb2Nlc3MsIHdlIHdvbid0IGdldCBi
b3RoIG5vdGlmaWNhdGlvbnMuCiAgICAgV2ViQ29yZTo6bm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2Vk
ID0gV0tOb3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQ7Ci0gICAgCisKICAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtNDgwLDE3ICs0NzcsMTMg
QEAgLSAodm9pZClzZXRSU1NGZWVkUmVmZXJyZXI6KE5TU3RyaW5nICopcmVmZXJyZXIKIAogLSAo
TlNBcnJheSAqKWNoaWxkcmVuCiB7Ci0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBjb3JlKF9w
cml2YXRlKS0+Y2hpbGRyZW4oKTsKLSAgICBpZiAoIWNoaWxkcmVuLnNpemUoKSkKKyAgICBhdXRv
JiBjaGlsZHJlbiA9IGNvcmUoX3ByaXZhdGUpLT5jaGlsZHJlbigpOworICAgIGlmIChjaGlsZHJl
bi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICB1bnNpZ25lZCBzaXplID0g
Y2hpbGRyZW4uc2l6ZSgpOwotICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzaXplXSBhdXRvcmVsZWFzZV07Ci0gICAg
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgW3Jlc3Vs
dCBhZGRPYmplY3Q6a2l0KGNvbnN0X2Nhc3Q8SGlzdG9yeUl0ZW0qPihjaGlsZHJlbltpXS5wdHIo
KSkpXTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5
KGNoaWxkcmVuLCBbXSAoYXV0byYgaXRlbSkgeworICAgICAgICByZXR1cm4ga2l0KGNvbnN0X2Nh
c3Q8SGlzdG9yeUl0ZW0qPihpdGVtLnB0cigpKSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0K
IAogLSAoTlNVUkwgKilVUkwKQEAgLTUxNCwxNiArNTA3LDExIEBAIC0gKEJPT0wpbGFzdFZpc2l0
V2FzRmFpbHVyZQogCiAtIChOU0FycmF5ICopX3JlZGlyZWN0VVJMcwogewotICAgIFZlY3RvcjxT
dHJpbmc+KiByZWRpcmVjdFVSTHMgPSBfcHJpdmF0ZS0+X3JlZGlyZWN0VVJMcy5nZXQoKTsKKyAg
ICBhdXRvJiByZWRpcmVjdFVSTHMgPSBfcHJpdmF0ZS0+X3JlZGlyZWN0VVJMczsKICAgICBpZiAo
IXJlZGlyZWN0VVJMcykKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHNpemVfdCBzaXplID0g
cmVkaXJlY3RVUkxzLT5zaXplKCk7Ci0gICAgQVNTRVJUKHNpemUpOwotICAgIE5TTXV0YWJsZUFy
cmF5ICpyZXN1bHQgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnNp
emVdOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBbcmVz
dWx0IGFkZE9iamVjdDooTlNTdHJpbmcqKXJlZGlyZWN0VVJMcy0+YXQoaSldOwotICAgIHJldHVy
biBbcmVzdWx0IGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheSgqcmVkaXJl
Y3RVUkxzKS5hdXRvcmVsZWFzZSgpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3Mu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCmlu
ZGV4IDRjNGZlYzc4ZjNhYjk1YTFkYzA3NGFlN2E0OGY5OTBmMmMxNTM3NjAuLmQ1NDFjNGMwNGYy
ZDc1ZDA2YmVlMDgwZWJjZmU2NmIwYTQ1ZmJlZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQpAQCAtODAsMzQgKzgwLDI3IEBAICsg
KHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50CiAgICAgcmV0dXJu
IGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwogfQogCitzdGF0
aWMgUmV0YWluUHRyPE5TQ291bnRlZFNldD4gY3JlYXRlTlNDb3VudGVkU2V0KGNvbnN0IEhhc2hD
b3VudGVkU2V0PGNvbnN0IGNoYXIqPiYgc2V0KQoreworICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRO
UyhbW05TQ291bnRlZFNldCBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzZXQuc2l6ZSgpXSk7Cisg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IHNldCkgeworICAgICAgICBhdXRvIGtleSA9IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoVVRGOFN0cmluZzplbnRyeS5rZXldOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZW50cnkudmFsdWU7ICsraSkKKyAgICAgICAgICAgIFtyZXN1bHQgYWRkT2Jq
ZWN0OmtleV07CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKICsgKE5TQ291bnRlZFNl
dCAqKWphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzCiB7CiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soY29tbW9uVk0oKSk7Ci0gICAgCi0gICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBb
TlNDb3VudGVkU2V0IHNldF07Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBj
b3VudHMoY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7Ci0gICAg
SGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgp
OwotICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNv
dW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaXQtPnZhbHVlOyArK2kpCi0gICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpb
TlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmtleV1dOwotICAgIAotICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIGNyZWF0ZU5TQ291bnRlZFNldCgqY29tbW9uVk0oKS5oZWFw
LnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogKyAoTlND
b3VudGVkU2V0ICopamF2YVNjcmlwdE9iamVjdFR5cGVDb3VudHMKIHsKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhjb21tb25WTSgpKTsKLSAgICAKLSAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtO
U0NvdW50ZWRTZXQgc2V0XTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IGNv
dW50cyhjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKLSAgICBIYXNoQ291bnRl
ZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7Ci0gICAgZm9y
IChIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
dC0+dmFsdWU7ICsraSkKLSAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBz
dHJpbmdXaXRoVVRGOFN0cmluZzppdC0+a2V5XV07Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICByZXR1cm4gY3JlYXRlTlNDb3VudGVkU2V0KCpjb21tb25WTSgpLmhlYXAub2JqZWN0VHlw
ZUNvdW50cygpKS5hdXRvcmVsZWFzZSgpOwogfQogCiArICh2b2lkKWdhcmJhZ2VDb2xsZWN0SmF2
YVNjcmlwdE9iamVjdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2Mv
V2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9X
ZWJOU1Bhc3RlYm9hcmRFeHRyYXMubW0KaW5kZXggZTFjNWVlYjMyODNmMDY2ZDgxMmNjYjA1NmM0
NzA3ZjM1MmIwODc3ZC4uYjgzNjM2NmYwM2ZmNjBkYTk4NDExZDEwOTRhMTAzODk3YTIzMThiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1Bhc3RlYm9hcmRF
eHRyYXMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1Bhc3RlYm9h
cmRFeHRyYXMubW0KQEAgLTI5OCw5ICsyOTgsNyBAQCAtIChpZClfd2ViX2RlY2xhcmVBbmRXcml0
ZURyYWdJbWFnZUZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50CiAgICAgICAgICAgICBl
eHRlbnNpb24gPSBVUkwucGF0aEV4dGVuc2lvbjsKICAgICAgICAgICAgIFt0eXBlcyBhZGRPYmpl
Y3RzRnJvbUFycmF5OltOU1Bhc3RlYm9hcmQgX3dlYl9kcmFnVHlwZXNGb3JVUkxdXTsKICAgICAg
ICAgICAgIFtzZWxmIGRlY2xhcmVUeXBlczp0eXBlcy5nZXQoKSBvd25lcjpzb3VyY2VdOwotICAg
ICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBwYXRocyA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgICAgICAgICAgW3BhdGhzLmdldCgpIGFkZE9i
amVjdDp0aXRsZV07Ci0gICAgICAgICAgICBbc2VsZiBzZXRQcm9wZXJ0eUxpc3Q6cGF0aHMuZ2V0
KCkgZm9yVHlwZTpsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgpXTsKKyAgICAgICAgICAg
IFtzZWxmIHNldFByb3BlcnR5TGlzdDpAW3RpdGxlXSBmb3JUeXBlOmxlZ2FjeUZpbGVuYW1lc1Bh
c3RlYm9hcmRUeXBlKCldOwogICAgICAgICB9CiAjZW5kaWYKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyLm1tCmluZGV4
IGU3Mjc1Yzc0ZGRkNzY3MWI0NTJjYjdkN2RkZDMxYTNlYjM0NDNiZjMuLmNkNTUwYWY1MTVjNzg2
NDEzZDA0MmU5MWZjY2ZhMjRjNzhmZWVkMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyLm1tCkBAIC05MiwxNCArOTIsOSBA
QCAtIChpZClpbml0CiAKIC0gKE5TQXJyYXkgKilvcmlnaW5zCiB7Ci0gICAgYXV0byBjb3JlT3Jp
Z2lucyA9IERhdGFiYXNlVHJhY2tlcjo6c2luZ2xldG9uKCkub3JpZ2lucygpOwotICAgIE5TTXV0
YWJsZUFycmF5ICp3ZWJPcmlnaW5zID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTpjb3JlT3JpZ2lucy5zaXplKCldOwotICAgIGZvciAoYXV0byYgY29yZU9yaWdpbiA6
IGNvcmVPcmlnaW5zKSB7Ci0gICAgICAgIFdlYlNlY3VyaXR5T3JpZ2luICp3ZWJPcmlnaW4gPSBb
W1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46
Y29yZU9yaWdpbi5zZWN1cml0eU9yaWdpbigpLnB0cigpXTsKLSAgICAgICAgW3dlYk9yaWdpbnMg
YWRkT2JqZWN0OndlYk9yaWdpbl07Ci0gICAgICAgIFt3ZWJPcmlnaW4gcmVsZWFzZV07Ci0gICAg
fQotICAgIHJldHVybiBbd2ViT3JpZ2lucyBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIGNyZWF0
ZU5TQXJyYXkoRGF0YWJhc2VUcmFja2VyOjpzaW5nbGV0b24oKS5vcmlnaW5zKCksIFtdIChhdXRv
JiBvcmlnaW4pIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXZWJTZWN1cml0eU9yaWdpbiBh
bGxvY10gX2luaXRXaXRoV2ViQ29yZVNlY3VyaXR5T3JpZ2luOm9yaWdpbi5zZWN1cml0eU9yaWdp
bigpLnB0cigpXSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNBcnJheSAqKWRh
dGFiYXNlc1dpdGhPcmlnaW46KFdlYlNlY3VyaXR5T3JpZ2luICopb3JpZ2luCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQppbmRl
eCA1M2NjMmIxNDU2MjhkNmYzM2Y2OWQzODE1OTcwYzg1NjU1MWUzNDliLi5iYmZmZGM0NTQ4MDcw
OGJlOTkyMTdkOGQwNDAyMGE5YThiYzI3MzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0KQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5
T3JpZ2luLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgorI2ltcG9y
dCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CkBAIC01OSwxNyArNjAsOSBAQCAtIChpZClpbml0CiAKIC0gKE5TQXJyYXkgKilvcmlnaW5zCiB7
Ci0gICAgYXV0byBjb3JlT3JpZ2lucyA9IFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIo
KS5vcmlnaW5zKCk7Ci0KLSAgICBOU011dGFibGVBcnJheSAqd2ViT3JpZ2lucyA9IFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29yZU9yaWdpbnMuc2l6ZSgpXTsKLQot
ICAgIGZvciAoYXV0byYgb3JpZ2luIDogY29yZU9yaWdpbnMpIHsKLSAgICAgICAgV2ViU2VjdXJp
dHlPcmlnaW4gKndlYk9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0
aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKS5wdHIoKV07Ci0g
ICAgICAgIFt3ZWJPcmlnaW5zIGFkZE9iamVjdDp3ZWJPcmlnaW5dOwotICAgICAgICBbd2ViT3Jp
Z2luIHJlbGVhc2VdOwotICAgIH0KLQotICAgIHJldHVybiBbd2ViT3JpZ2lucyBhdXRvcmVsZWFz
ZV07CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6dHJh
Y2tlcigpLm9yaWdpbnMoKSwgW10gKGF1dG8mIG9yaWdpbikgeworICAgICAgICByZXR1cm4gYWRv
cHROUyhbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlP
cmlnaW46b3JpZ2luLnNlY3VyaXR5T3JpZ2luKCkucHRyKCldKTsKKyAgICB9KS5hdXRvcmVsZWFz
ZSgpOwogfQogCiAtICh2b2lkKWRlbGV0ZUFsbE9yaWdpbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hl
Lm1tCmluZGV4IGEyMjc4MWFlZmEzZGQ4ZTY1OTlmOTkwNDA3YmJmZmI1YmQ2OGNlMWYuLjU4MTQy
ZjRhN2I5NjE1YmE3NTg1YmRlZWEzN2IxNjYzNzEzZTIzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQXBwbGljYXRpb25D
YWNoZS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCA8V2ViQ29yZS9SdW50aW1lQXBwbGlj
YXRpb25DaGVja3MuaD4KQEAgLTEyMSwxNiArMTIyLDkgQEAgKyAodm9pZClkZWxldGVDYWNoZUZv
ck9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW4KIAogKyAoTlNBcnJheSAqKW9yaWdp
bnNXaXRoQ2FjaGUKIHsKLSAgICBhdXRvIGNvcmVPcmlnaW5zID0gd2ViQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UoKS5vcmlnaW5zV2l0aENhY2hlKCk7Ci0gICAgCi0gICAgTlNNdXRhYmxlQXJyYXkg
KndlYk9yaWdpbnMgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpj
b3JlT3JpZ2lucy5zaXplKCldIGF1dG9yZWxlYXNlXTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGNv
cmVPcmlnaW4gOiBjb3JlT3JpZ2lucykgewotICAgICAgICBhdXRvIHdlYk9yaWdpbiA9IGFkb3B0
TlMoW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gX2luaXRXaXRoV2ViQ29yZVNlY3VyaXR5T3Jp
Z2luOmNvcmVPcmlnaW4ucHRyKCldKTsKLSAgICAgICAgW3dlYk9yaWdpbnMgYWRkT2JqZWN0Ondl
Yk9yaWdpbi5nZXQoKV07Ci0gICAgfQotICAgIAotICAgIHJldHVybiB3ZWJPcmlnaW5zOworICAg
IHJldHVybiBjcmVhdGVOU0FycmF5KHdlYkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCkub3JpZ2lu
c1dpdGhDYWNoZSgpLCBbXSAoYXV0byYgb3JpZ2luKSB7CisgICAgICAgIHJldHVybiBhZG9wdE5T
KFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdp
bjpvcmlnaW4ucHRyKCldKTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiBAZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW0KaW5kZXggOGE3NTNjNTkwMTcyMmFjYWNiNGMzMDUwYTMxZTFiZjcwOGNiNTRl
YS4uYWQ3MGY5ZmM0NTAzYTdlZDdjMmZjOTE4ZTE3ZWUzOWI3MWM5NTVjYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQpAQCAtMTAzOSwxMyArMTAzOSwxMCBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaQog
CiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3Jh
bW1hckRldGFpbCkKIHsKLSAgICBOU011dGFibGVBcnJheSAqY29ycmVjdGlvbnMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXldOwotICAgIGZvciAoYXV0byYgZ3Vlc3MgOiBncmFtbWFyRGV0YWlsLmd1
ZXNzZXMpCi0gICAgICAgIFtjb3JyZWN0aW9ucyBhZGRPYmplY3Q6Z3Vlc3NdOwotICAgIE5TRGlj
dGlvbmFyeSAqZGljdGlvbmFyeSA9IEB7Ci0gICAgICAgIE5TR3JhbW1hclJhbmdlIDogW05TVmFs
dWUgdmFsdWVXaXRoUmFuZ2U6Z3JhbW1hckRldGFpbC5yYW5nZV0sCi0gICAgICAgIE5TR3JhbW1h
clVzZXJEZXNjcmlwdGlvbiA6IGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uLAotICAgICAg
ICBOU0dyYW1tYXJDb3JyZWN0aW9ucyA6IGNvcnJlY3Rpb25zLAorICAgIGF1dG8gZGljdGlvbmFy
eSA9IEB7CisgICAgICAgIE5TR3JhbW1hclJhbmdlOiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpn
cmFtbWFyRGV0YWlsLnJhbmdlXSwKKyAgICAgICAgTlNHcmFtbWFyVXNlckRlc2NyaXB0aW9uOiBn
cmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiwKKyAgICAgICAgTlNHcmFtbWFyQ29ycmVjdGlv
bnM6IGNyZWF0ZU5TQXJyYXkoZ3JhbW1hckRldGFpbC5ndWVzc2VzKS5nZXQoKSwKICAgICB9Owog
ICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSB1cGRhdGVTcGVsbGluZ1Bh
bmVsV2l0aEdyYW1tYXJTdHJpbmc6YmFkR3JhbW1hclBocmFzZSBkZXRhaWw6ZGljdGlvbmFyeV07
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJOb3RpZmljYXRpb25DbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0KaW5kZXggNjdkYWU2YTdiN2ZjZmUxOTQ3
NDNkYTk1YzM2ZDA4NDNiY2ZiNTdlNi4uODIxYTZmZDRiZDRjZDM5ODRjM2QzMjgzMGMwMGY0MTUx
NTBkOGU2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQpAQCAtMzYsNiArMzYsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9Ob3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2suaD4KICNp
bXBvcnQgPFdlYkNvcmUvU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oPgogI2ltcG9ydCA8d3RmL0Js
b2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtODgsMTcgKzg5LDE0IEBAIHZvaWQgV2Vi
Tm90aWZpY2F0aW9uQ2xpZW50OjpjbGVhck5vdGlmaWNhdGlvbnMoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVu
ZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVmVjdG9yPFJldGFpblB0cjxXZWJOb3Rp
ZmljYXRpb24+PiYgd2ViTm90aWZpY2F0aW9ucyA9IGl0LT52YWx1ZTsKLSAgICBOU011dGFibGVB
cnJheSAqbnNJRHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIHNpemVfdCBjb3VudCA9
IHdlYk5vdGlmaWNhdGlvbnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewotICAgICAgICBXZWJOb3RpZmljYXRpb24gKndlYk5vdGlmaWNhdGlvbiA9IHdl
Yk5vdGlmaWNhdGlvbnNbaV0uZ2V0KCk7Ci0gICAgICAgIFtuc0lEcyBhZGRPYmplY3Q6W05TTnVt
YmVyIG51bWJlcldpdGhVbnNpZ25lZExvbmdMb25nOlt3ZWJOb3RpZmljYXRpb24gbm90aWZpY2F0
aW9uSURdXV07Ci0gICAgICAgIGNvcmUod2ViTm90aWZpY2F0aW9uKS0+ZmluYWxpemUoKTsKLSAg
ICAgICAgbV9ub3RpZmljYXRpb25NYXAucmVtb3ZlKGNvcmUod2ViTm90aWZpY2F0aW9uKSk7Ci0g
ICAgfQotCi0gICAgW1ttX3dlYlZpZXcgX25vdGlmaWNhdGlvblByb3ZpZGVyXSBjbGVhck5vdGlm
aWNhdGlvbnM6bnNJRHNdOworICAgIGF1dG8gZmluYWxpemVkTm90aWZpY2F0aW9uSURzID0gY3Jl
YXRlTlNBcnJheShpdC0+dmFsdWUsIFsmXSAoYXV0byYgbm90aWZpY2F0aW9uKSB7CisgICAgICAg
IGF1dG8mIGNvcmVOb3RpZmljYXRpb24gPSAqY29yZShub3RpZmljYXRpb24uZ2V0KCkpOworICAg
ICAgICBjb3JlTm90aWZpY2F0aW9uLmZpbmFsaXplKCk7CisgICAgICAgIG1fbm90aWZpY2F0aW9u
TWFwLnJlbW92ZSgmY29yZU5vdGlmaWNhdGlvbik7CisgICAgICAgIHJldHVybiBAKFtub3RpZmlj
YXRpb24gbm90aWZpY2F0aW9uSURdKTsKKyAgICB9KTsKKworICAgIFtbbV93ZWJWaWV3IF9ub3Rp
ZmljYXRpb25Qcm92aWRlcl0gY2xlYXJOb3RpZmljYXRpb25zOmZpbmFsaXplZE5vdGlmaWNhdGlv
bklEcy5nZXQoKV07CiAgICAgbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLnJlbW92ZShpdCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViQXJjaGl2
ZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViQXJjaGl2ZS5tbQppbmRl
eCA4ZWJmYjUzZTkxNGJmZWVlZTczMzhlNjYwMzY5NzhlZmJhNWIyYmQxLi44MTYyYTMxNGU5ZDhh
Zjg4MDg0NjhkN2JlNWJmZTFlZjkyYTY5ZmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkFyY2hpdmUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJBcmNoaXZlLm1tCkBAIC00MCw2ICs0MCw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2lt
cG9ydCA8d3RmL1J1bkxvb3AuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMjgwLDE5ICsyODEsMTMgQEAgLSAoTlNB
cnJheSAqKXN1YnJlc291cmNlcwogICAgIC8vIEN1cnJlbnRseSBmcm9tIFdlYktpdCBBUEkgcGVy
c3BlY3RpdmUsIFdlYkFyY2hpdmVzIGFyZSBlbnRpcmVseSBpbW11dGFibGUgb25jZSBjcmVhdGVk
CiAgICAgLy8gSWYgdGhleSBldmVyIGJlY29tZSBtdXRhYmxlLCB3ZSdsbCBuZWVkIHRvIHJldGhp
bmsgdGhpcy4gICAgIAogICAgIGlmICghX3ByaXZhdGUtPmNhY2hlZFN1YnJlc291cmNlcykgewot
ICAgICAgICBMZWdhY3lXZWJBcmNoaXZlKiBjb3JlQXJjaGl2ZSA9IFtfcHJpdmF0ZSBjb3JlQXJj
aGl2ZV07CisgICAgICAgIGF1dG8gY29yZUFyY2hpdmUgPSBbX3ByaXZhdGUgY29yZUFyY2hpdmVd
OwogICAgICAgICBpZiAoIWNvcmVBcmNoaXZlKQogICAgICAgICAgICAgX3ByaXZhdGUtPmNhY2hl
ZFN1YnJlc291cmNlcyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdF07CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgYXV0byYgc3VicmVzb3VyY2VzID0gY29yZUFyY2hpdmUtPnN1YnJlc291cmNl
cygpOwotICAgICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKm11dGFibGVBcnJheSA9IFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c3VicmVzb3VyY2VzLnNpemUoKV07Ci0g
ICAgICAgICAgICBfcHJpdmF0ZS0+Y2FjaGVkU3VicmVzb3VyY2VzID0gbXV0YWJsZUFycmF5Owot
ICAgICAgICAgICAgZm9yIChhdXRvJiBzdWJyZXNvdXJjZSA6IHN1YnJlc291cmNlcykgewotICAg
ICAgICAgICAgICAgIGlmIChXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFs
bG9jXSBfaW5pdFdpdGhDb3JlUmVzb3VyY2U6c3VicmVzb3VyY2UuZ2V0KCldKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFttdXRhYmxlQXJyYXkgYWRkT2JqZWN0OnJlc291cmNlXTsKLSAgICAgICAg
ICAgICAgICAgICAgW3Jlc291cmNlIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIF9wcml2YXRlLT5jYWNoZWRTdWJyZXNvdXJjZXMgPSBjcmVh
dGVOU0FycmF5KGNvcmVBcmNoaXZlLT5zdWJyZXNvdXJjZXMoKSwgW10gKGF1dG8mIHN1YnJlc291
cmNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXZWJSZXNvdXJjZSBhbGxv
Y10gX2luaXRXaXRoQ29yZVJlc291cmNlOnN1YnJlc291cmNlLmdldCgpXSk7CisgICAgICAgICAg
ICB9KS5sZWFrUmVmKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gTWFpbnRhaW4gdGhlIFdl
YktpdCAzIGJlaGF2aW9yIG9mIHRoaXMgQVBJLCB3aGljaCBpcyBkb2N1bWVudGVkIGFuZApAQCAt
MzExLDE0ICszMDYsOSBAQCAtIChOU0FycmF5ICopc3ViZnJhbWVBcmNoaXZlcwogICAgICAgICBp
ZiAoIWNvcmVBcmNoaXZlKQogICAgICAgICAgICAgX3ByaXZhdGUtPmNhY2hlZFN1YmZyYW1lQXJj
aGl2ZXMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRdOwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGF1dG8mIHN1YmZyYW1lQXJjaGl2ZXMgPSBjb3JlQXJjaGl2ZS0+c3ViZnJhbWVBcmNoaXZl
cygpOwotICAgICAgICAgICAgYXV0byBtdXRhYmxlQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OnN1YmZyYW1lQXJjaGl2ZXMuc2l6ZSgpXTsKLSAgICAgICAg
ICAgIF9wcml2YXRlLT5jYWNoZWRTdWJmcmFtZUFyY2hpdmVzID0gbXV0YWJsZUFycmF5OwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN1YmZyYW1lQXJjaGl2ZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBXZWJBcmNoaXZlICphcmNoaXZlID0gW1tXZWJBcmNo
aXZlIGFsbG9jXSBfaW5pdFdpdGhDb3JlTGVnYWN5V2ViQXJjaGl2ZTpzdGF0aWNfY2FzdDxMZWdh
Y3lXZWJBcmNoaXZlKj4oc3ViZnJhbWVBcmNoaXZlc1tpXS5wdHIoKSldOwotICAgICAgICAgICAg
ICAgIFttdXRhYmxlQXJyYXkgYWRkT2JqZWN0OmFyY2hpdmVdOwotICAgICAgICAgICAgICAgIFth
cmNoaXZlIHJlbGVhc2VdOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgX3ByaXZhdGUtPmNh
Y2hlZFN1YmZyYW1lQXJjaGl2ZXMgPSBjcmVhdGVOU0FycmF5KGNvcmVBcmNoaXZlLT5zdWJmcmFt
ZUFyY2hpdmVzKCksIFtdIChhdXRvJiBhcmNoaXZlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGFkb3B0TlMoW1tXZWJBcmNoaXZlIGFsbG9jXSBfaW5pdFdpdGhDb3JlTGVnYWN5V2ViQXJjaGl2
ZTpzdGF0aWNfY2FzdDxMZWdhY3lXZWJBcmNoaXZlKj4oYXJjaGl2ZS5wdHIoKSldKTsKKyAgICAg
ICAgICAgIH0pLmxlYWtSZWYoKTsKICAgICAgICAgfQogICAgIH0KICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbQppbmRleCBiYjAyNzY5
M2MyNWE2YmM2Mzg2NDNkMGVlYzI2NGE0MjUwZTQzYjc5Li42NThkZDRlMTExM2NlYmY1OTYyODRi
Y2Q3MjA1NjA5YTg3ZmE4YzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJEYXRhU291cmNlLm1tCkBAIC01NDgsMTMgKzU0OCw5IEBAIC0gKFdlYlJlc291cmNl
ICopbWFpblJlc291cmNlCiAKIC0gKE5TQXJyYXkgKilzdWJyZXNvdXJjZXMKIHsKLSAgICBhdXRv
IGNvcmVTdWJyZXNvdXJjZXMgPSB0b1ByaXZhdGUoX3ByaXZhdGUpLT5sb2FkZXItPnN1YnJlc291
cmNlcygpOwotICAgIGF1dG8gc3VicmVzb3VyY2VzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvcmVTdWJyZXNvdXJjZXMuc2l6ZSgpXSk7Ci0gICAg
Zm9yIChhdXRvJiBjb3JlU3VicmVzb3VyY2UgOiBjb3JlU3VicmVzb3VyY2VzKSB7Ci0gICAgICAg
IGlmIChhdXRvIHJlc291cmNlID0gYWRvcHROUyhbW1dlYlJlc291cmNlIGFsbG9jXSBfaW5pdFdp
dGhDb3JlUmVzb3VyY2U6Y29yZVN1YnJlc291cmNlLmNvcHlSZWYoKV0pKQotICAgICAgICAgICAg
W3N1YnJlc291cmNlcyBhZGRPYmplY3Q6cmVzb3VyY2UuZ2V0KCldOwotICAgIH0KLSAgICByZXR1
cm4gc3VicmVzb3VyY2VzLmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXko
dG9Qcml2YXRlKF9wcml2YXRlKS0+bG9hZGVyLT5zdWJyZXNvdXJjZXMoKSwgW10gKGF1dG8mIHJl
c291cmNlKSB7CisgICAgICAgIHJldHVybiBhZG9wdE5TKFtbV2ViUmVzb3VyY2UgYWxsb2NdIF9p
bml0V2l0aENvcmVSZXNvdXJjZTpyZXNvdXJjZS5jb3B5UmVmKCldKTsKKyAgICB9KS5hdXRvcmVs
ZWFzZSgpOwogfQogCiAtIChXZWJSZXNvdXJjZSAqKXN1YnJlc291cmNlRm9yVVJMOihOU1VSTCAq
KVVSTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXgg
NDNiZmRlZTk2NmVkN2E3YWU2NzY4OTdiOWVjZDk5MmFkMjlmOGFhZS4uNTM2NzNlOWUyZjVlZDNi
ZjRjYTUxMjRjOTJmNDE2Y2YzYzM3MmVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC01NzMsMTUgKzU3Myw2IEBAIC0gKHZvaWQpX3NldElzQ29t
bWl0dGluZzooQk9PTCl2YWx1ZQogCiAjZW5kaWYKIAotLSAoTlNBcnJheSAqKV9ub2Rlc0Zyb21M
aXN0OihWZWN0b3I8V2ViQ29yZTo6Tm9kZSo+ICopbm9kZXNWZWN0b3IKLXsKLSAgICBzaXplX3Qg
c2l6ZSA9IG5vZGVzVmVjdG9yLT5zaXplKCk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKm5vZGVzID0g
W05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnNpemVdOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBbbm9kZXMgYWRkT2JqZWN0OmtpdCgoKm5v
ZGVzVmVjdG9yKVtpXSldOwotICAgIHJldHVybiBub2RlczsKLX0KLQogLSAoTlNTdHJpbmcgKilf
c2VsZWN0ZWRTdHJpbmcKIHsKICAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZGlzcGxh
eVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5z
ZWxlY3RlZFRleHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkZyYW1lVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
RnJhbWVWaWV3Lm1tCmluZGV4IGNlOWM0NTM0YjdmOThkYTkyZjY1NjNjNjExNjk2ODBjMzQ2Nzc0
NGIuLjk5MmE5Zjg5MTY3N2I4MDZlNWEyYzkyOWZiMzdlYWFiY2M3OGVjYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCkBAIC0zNTYsNiAr
MzU2LDcgQEAgLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCiAgICAgICAgIAogICAg
ICAgICAvLyBOZWVkIHRvIHRlbGwgV2ViQ29yZSB3aGF0IGZ1bmN0aW9uIHRvIGNhbGwgZm9yIHRo
ZSAiSGlzdG9yeSBJdGVtIGhhcyBDaGFuZ2VkIiBub3RpZmljYXRpb24uCiAgICAgICAgIC8vIE5v
dGU6IFdlIGFsc28gZG8gdGhpcyBpbiBXZWJIaXN0b3J5SXRlbSdzIGluaXQgbWV0aG9kLgorICAg
ICAgICAvLyBGSVhNRTogVGhpcyBtZWFucyB0aGF0IGlmIHdlIG1peCBsZWdhY3kgV2ViS2l0IGFu
ZCBtb2Rlcm4gV2ViS2l0IGluIHRoZSBzYW1lIHByb2Nlc3MsIHdlIHdvbid0IGdldCBib3RoIG5v
dGlmaWNhdGlvbnMuCiAgICAgICAgIFdlYkNvcmU6Om5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCA9
IFdLTm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkOwogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxSZXBy
ZXNlbnRhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJl
cHJlc2VudGF0aW9uLm1tCmluZGV4IDEwMzNjOWZmZDU2NDFiOTA2ZDM3MzY3OGI1ZmJmNDc2YWYy
YjdiZmYuLmFkNzcxYzE2NTA2MmEzNWVlNTI2MmI1ODQwMDExZTIyOTBhNTllNWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9u
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uLm1tCkBAIC02NSw2ICs2NSw3IEBACiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgog
I2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yNzQsNyAr
Mjc1LDcgQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZ0Zyb206KERP
TU5vZGUgKilzdGFydE5vZGUgc3RhcnRPZmZzZXQ6KGkKIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQq
IGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCkKIHsKICAgICBF
bGVtZW50KiBub2RlID0gY29yZShlbGVtZW50KTsKLSAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5o
YXNUYWdOYW1lKGZvcm1UYWcpID8gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obm9kZSkg
OiAwOworICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykgPyBzdGF0
aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihub2RlKSA6IG51bGxwdHI7CiB9CiAKIC0gKERPTUVs
ZW1lbnQgKillbGVtZW50V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBpbkZvcm06KERPTUVsZW1l
bnQgKilmb3JtCkBAIC0zMTYsOCArMzE3LDggQEAgLSAoQk9PTCllbGVtZW50SXNQYXNzd29yZDoo
RE9NRWxlbWVudCAqKWVsZW1lbnQKIAogLSAoRE9NRWxlbWVudCAqKWZvcm1Gb3JFbGVtZW50OihE
T01FbGVtZW50ICopZWxlbWVudAogewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCA9IGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KGVsZW1lbnQpOwotICAgIHJldHVybiBpbnB1
dEVsZW1lbnQgPyBraXQoaW5wdXRFbGVtZW50LT5mb3JtKCkpIDogMDsKKyAgICBhdXRvIGlucHV0
RWxlbWVudCA9IGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KGVsZW1lbnQpOworICAgIHJldHVy
biBpbnB1dEVsZW1lbnQgPyBraXQoaW5wdXRFbGVtZW50LT5mb3JtKCkpIDogbmlsOwogfQogCiAt
IChET01FbGVtZW50ICopY3VycmVudEZvcm0KQEAgLTMyNywyMyArMzI4LDE4IEBAIC0gKERPTUVs
ZW1lbnQgKiljdXJyZW50Rm9ybQogCiAtIChOU0FycmF5ICopY29udHJvbHNJbkZvcm06KERPTUVs
ZW1lbnQgKilmb3JtCiB7Ci0gICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IGZvcm1F
bGVtZW50RnJvbURPTUVsZW1lbnQoZm9ybSk7CisgICAgYXV0byBmb3JtRWxlbWVudCA9IGZvcm1F
bGVtZW50RnJvbURPTUVsZW1lbnQoZm9ybSk7CiAgICAgaWYgKCFmb3JtRWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0cyA9IG5pbDsKIAogICAg
IFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29w
ZTsKLSAgICBmb3IgKGF1dG8mIHdlYWtFbGVtZW50IDogZm9ybUVsZW1lbnQtPnVuc2FmZUFzc29j
aWF0ZWRFbGVtZW50cygpKSB7CisgICAgYXV0byByZXN1bHQgPSBjcmVhdGVOU0FycmF5KGZvcm1F
bGVtZW50LT51bnNhZmVBc3NvY2lhdGVkRWxlbWVudHMoKSwgW10gKGF1dG8mIHdlYWtFbGVtZW50
KSAtPiBET01FbGVtZW50ICogewogICAgICAgICBhdXRvIGNvcmVFbGVtZW50ID0gbWFrZVJlZlB0
cih3ZWFrRWxlbWVudC5nZXQoKSk7Ci0gICAgICAgIGlmIChjb3JlRWxlbWVudC0+YXNGb3JtQXNz
b2NpYXRlZEVsZW1lbnQoKS0+aXNFbnVtZXJhdGFibGUoKSkgeyAvLyBTa2lwIG9wdGlvbiBlbGVt
ZW50cywgb3RoZXIgZHVkcwotICAgICAgICAgICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IGtpdChj
b3JlRWxlbWVudC5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdHMpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhPYmplY3Q6ZWxlbWVudF07
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgW3Jlc3VsdHMgYWRkT2JqZWN0OmVs
ZW1lbnRdOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHRzOworICAgICAgICBp
ZiAoIWNvcmVFbGVtZW50LT5hc0Zvcm1Bc3NvY2lhdGVkRWxlbWVudCgpLT5pc0VudW1lcmF0YWJs
ZSgpKSAvLyBTa2lwIG9wdGlvbiBlbGVtZW50cywgb3RoZXIgZHVkcworICAgICAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIGtpdChjb3JlRWxlbWVudC5nZXQoKSk7CisgICAgfSk7
CisgICAgcmV0dXJuIFtyZXN1bHQgY291bnRdID8gcmVzdWx0LmF1dG9yZWxlYXNlKCkgOiBuaWw7
CiB9CiAKIC8vIEVpdGhlciBnZXQgY2FjaGVkIHJlZ2V4cCBvciBidWlsZCBvbmUgdGhhdCBtYXRj
aGVzIGFueSBvZiB0aGUgbGFiZWxzLgpAQCAtNDIzLDEyICs0MTksMTIgQEAgc3RhdGljIE5TU3Ry
aW5nKiBzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KEZyYW1lKiBmcmFtZSwgTlNBcnJheSog
bGFiZWxzLCBFbGUKICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgUmVndWxhckV4cHJlc3Npb24q
IHJlZ0V4cCA9IHJlZ0V4cEZvckxhYmVscyhsYWJlbHMpOwogICAgIC8vIFdlIHN0b3Agc2VhcmNo
aW5nIGFmdGVyIHdlJ3ZlIHNlZW4gdGhpcyBtYW55IGNoYXJzCi0gICAgY29uc3QgdW5zaWduZWQg
aW50IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQgPSA1MDA7CisgICAgY29uc3RleHByIHVuc2lnbmVk
IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQgPSA1MDA7CiAgICAgLy8gVGhpcyBpcyB0aGUgYWJzb2x1
dGUgbWF4IHdlIHNlYXJjaC4gIFdlIGFsbG93IGEgbGl0dGxlIG1vcmUgc2xvcCB0aGFuCiAgICAg
Ly8gY2hhcnNTZWFyY2hlZFRocmVzaG9sZCwgdG8gbWFrZSBpdCBtb3JlIGxpa2VseSB0aGF0IHdl
J2xsIHNlYXJjaCB3aG9sZSBub2Rlcy4KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4Q2hhcnNT
ZWFyY2hlZCA9IDYwMDsKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgbWF4Q2hhcnNTZWFyY2hlZCA9
IDYwMDsKICAgICAvLyBJZiB0aGUgc3RhcnRpbmcgZWxlbWVudCBpcyB3aXRoaW4gYSB0YWJsZSwg
dGhlIGNlbGwgdGhhdCBjb250YWlucyBpdAotICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50KiBzdGFy
dGluZ1RhYmxlQ2VsbCA9IDA7CisgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHN0YXJ0aW5nVGFi
bGVDZWxsID0gbnVsbHB0cjsKICAgICBib29sIHNlYXJjaGVkQ2VsbEFib3ZlID0gZmFsc2U7CiAg
ICAgCiAgICAgaWYgKHJlc3VsdERpc3RhbmNlKQpAQCAtNDQ3LDggKzQ0Myw4IEBAIHN0YXRpYyBO
U1N0cmluZyogc2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChGcmFtZSogZnJhbWUsIE5TQXJy
YXkqIGxhYmVscywgRWxlCiAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKHRkVGFnKSAmJiAhc3Rh
cnRpbmdUYWJsZUNlbGwpIHsKICAgICAgICAgICAgIHN0YXJ0aW5nVGFibGVDZWxsID0gc3RhdGlj
X2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihuKTsKICAgICAgICAgfSBlbHNlIGlmIChuLT5o
YXNUYWdOYW1lKHRyVGFnKSAmJiBzdGFydGluZ1RhYmxlQ2VsbCkgewotICAgICAgICAgICAgTlNT
dHJpbmcqIHJlc3VsdCA9IGZyYW1lLT5zZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwoKnJlZ0V4cCwg
c3RhcnRpbmdUYWJsZUNlbGwsIHJlc3VsdERpc3RhbmNlKTsKLSAgICAgICAgICAgIGlmIChyZXN1
bHQgJiYgW3Jlc3VsdCBsZW5ndGhdID4gMCkgeworICAgICAgICAgICAgTlNTdHJpbmcgKnJlc3Vs
dCA9IGZyYW1lLT5zZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwoKnJlZ0V4cCwgc3RhcnRpbmdUYWJs
ZUNlbGwsIHJlc3VsdERpc3RhbmNlKTsKKyAgICAgICAgICAgIGlmIChbcmVzdWx0IGxlbmd0aF0p
IHsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0SXNJbkNlbGxBYm92ZSkKICAgICAgICAgICAg
ICAgICAgICAgKnJlc3VsdElzSW5DZWxsQWJvdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC00NzMsOCArNDY5LDggQEAgc3RhdGljIE5TU3RyaW5nKiBzZWFyY2hG
b3JMYWJlbHNCZWZvcmVFbGVtZW50KEZyYW1lKiBmcmFtZSwgTlNBcnJheSogbGFiZWxzLCBFbGUK
ICAgICAvLyBJZiB3ZSBzdGFydGVkIGluIGEgY2VsbCwgYnV0IGJhaWxlZCBiZWNhdXNlIHdlIGZv
dW5kIHRoZSBzdGFydCBvZiB0aGUgZm9ybSBvciB0aGUKICAgICAvLyBwcmV2aW91cyBlbGVtZW50
LCB3ZSBzdGlsbCBtaWdodCBuZWVkIHRvIHNlYXJjaCB0aGUgcm93IGFib3ZlIHVzIGZvciBhIGxh
YmVsLgogICAgIGlmIChzdGFydGluZ1RhYmxlQ2VsbCAmJiAhc2VhcmNoZWRDZWxsQWJvdmUpIHsK
LSAgICAgICAgTlNTdHJpbmcqIHJlc3VsdCA9IGZyYW1lLT5zZWFyY2hGb3JMYWJlbHNBYm92ZUNl
bGwoKnJlZ0V4cCwgc3RhcnRpbmdUYWJsZUNlbGwsIHJlc3VsdERpc3RhbmNlKTsKLSAgICAgICAg
aWYgKHJlc3VsdCAmJiBbcmVzdWx0IGxlbmd0aF0gPiAwKSB7CisgICAgICAgIE5TU3RyaW5nICpy
ZXN1bHQgPSBmcmFtZS0+c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKCpyZWdFeHAsIHN0YXJ0aW5n
VGFibGVDZWxsLCByZXN1bHREaXN0YW5jZSk7CisgICAgICAgIGlmIChbcmVzdWx0IGxlbmd0aF0p
IHsKICAgICAgICAgICAgIGlmIChyZXN1bHRJc0luQ2VsbEFib3ZlKQogICAgICAgICAgICAgICAg
ICpyZXN1bHRJc0luQ2VsbEFib3ZlID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CkBAIC01MzYsNyArNTMyLDcgQEAgc3RhdGljIE5TU3RyaW5nICptYXRjaExhYmVsc0FnYWluc3RF
bGVtZW50KE5TQXJyYXkgKmxhYmVscywgRWxlbWVudCogZWxlbWVudCkKIAogLSAoTlNTdHJpbmcg
KilzZWFyY2hGb3JMYWJlbHM6KE5TQXJyYXkgKilsYWJlbHMgYmVmb3JlRWxlbWVudDooRE9NRWxl
bWVudCAqKWVsZW1lbnQKIHsKLSAgICByZXR1cm4gW3NlbGYgc2VhcmNoRm9yTGFiZWxzOmxhYmVs
cyBiZWZvcmVFbGVtZW50OmVsZW1lbnQgcmVzdWx0RGlzdGFuY2U6MCByZXN1bHRJc0luQ2VsbEFi
b3ZlOjBdOworICAgIHJldHVybiBbc2VsZiBzZWFyY2hGb3JMYWJlbHM6bGFiZWxzIGJlZm9yZUVs
ZW1lbnQ6ZWxlbWVudCByZXN1bHREaXN0YW5jZTpudWxscHRyIHJlc3VsdElzSW5DZWxsQWJvdmU6
bnVsbHB0cl07CiB9CiAKIC0gKE5TU3RyaW5nICopc2VhcmNoRm9yTGFiZWxzOihOU0FycmF5ICop
bGFiZWxzIGJlZm9yZUVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50IHJlc3VsdERpc3RhbmNl
OihOU1VJbnRlZ2VyKilvdXREaXN0YW5jZSByZXN1bHRJc0luQ2VsbEFib3ZlOihCT09MKilvdXRJ
c0luQ2VsbEFib3ZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1M
Vmlldy5tbQppbmRleCA1MjBlYTU2NjRhZjI4NzU2OWE4NTVjNzRiODFjZWE1NGM3ZThlMjAyLi40
YjZhMTE1ZmM5MzYzN2QzODNlYWRjZGU1OGRlYmM5ZDVhZmVkOWE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTM2NDEsNyArMzY0MSwx
MiBAQCBzdGF0aWMgUmV0YWluUHRyPE5TTWVudUl0ZW0+IGNyZWF0ZVNoYXJlTWVudUl0ZW0oY29u
c3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaAogICAgIHJldHVybiBbTlNNZW51SXRlbSBzdGFu
ZGFyZFNoYXJlTWVudUl0ZW1Gb3JJdGVtczppdGVtcy5nZXQoKV07CiB9CiAKLXN0YXRpYyBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IGNyZWF0ZU1lbnVJdGVtcyhjb25zdCBXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbT4mKTsKK3N0
YXRpYyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGNyZWF0ZU1lbnVJdGVtcyhjb25zdCBXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29udGV4dE1lbnVJdGVtPiYgaXRlbXMpCit7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoaXRl
bXMsIFsmXSAoYXV0byYgaXRlbSkgeworICAgICAgICByZXR1cm4gY3JlYXRlTWVudUl0ZW0oaGl0
VGVzdFJlc3VsdCwgaXRlbSk7CisgICAgfSk7Cit9CiAKIHN0YXRpYyBSZXRhaW5QdHI8TlNNZW51
SXRlbT4gY3JlYXRlTWVudUl0ZW0oY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0VGVz
dFJlc3VsdCwgY29uc3QgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtJiBpdGVtKQogewpAQCAtMzY2
OCw4ICszNjczLDcgQEAgc3RhdGljIFJldGFpblB0cjxOU01lbnVJdGVtPiBjcmVhdGVNZW51SXRl
bShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXMKICAgICBjYXNlIFdlYkNvcmU6
OlN1Ym1lbnVUeXBlOiB7CiAgICAgICAgIGF1dG8gbWVudSA9IGFkb3B0TlMoW1tOU01lbnUgYWxs
b2NdIGluaXRdKTsKIAotICAgICAgICBhdXRvIHN1Ym1lbnVJdGVtcyA9IGNyZWF0ZU1lbnVJdGVt
cyhoaXRUZXN0UmVzdWx0LCBpdGVtLnN1Yk1lbnVJdGVtcygpKTsKLSAgICAgICAgZm9yIChOU01l
bnVJdGVtICptZW51SXRlbSBpbiBzdWJtZW51SXRlbXMuZ2V0KCkpCisgICAgICAgIGZvciAoTlNN
ZW51SXRlbSAqbWVudUl0ZW0gaW4gY3JlYXRlTWVudUl0ZW1zKGhpdFRlc3RSZXN1bHQsIGl0ZW0u
c3ViTWVudUl0ZW1zKCkpLmdldCgpKQogICAgICAgICAgICAgW21lbnUgYWRkSXRlbTptZW51SXRl
bV07CiAKICAgICAgICAgYXV0byBtZW51SXRlbSA9IGFkb3B0TlMoW1tOU01lbnVJdGVtIGFsbG9j
XSBpbml0V2l0aFRpdGxlOml0ZW0udGl0bGUoKSBhY3Rpb246bnVsbHB0ciBrZXlFcXVpdmFsZW50
OkAiIl0pOwpAQCAtMzY4NCwxOCArMzY4OCw2IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNNZW51SXRl
bT4gY3JlYXRlTWVudUl0ZW0oY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0VGVzCiAg
ICAgfQogfQogCi1zdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBjcmVhdGVNZW51SXRl
bXMoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbT4mIGl0ZW1zKQotewotICAgIGF1dG8gbWVudUl0
ZW1zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBmb3Ig
KGF1dG8mIGl0ZW0gOiBpdGVtcykgewotICAgICAgICBpZiAoYXV0byBtZW51SXRlbSA9IGNyZWF0
ZU1lbnVJdGVtKGhpdFRlc3RSZXN1bHQsIGl0ZW0pKQotICAgICAgICAgICAgW21lbnVJdGVtcyBh
ZGRPYmplY3Q6bWVudUl0ZW0uZ2V0KCldOwotICAgIH0KLQotICAgIHJldHVybiBtZW51SXRlbXM7
Ci19Ci0KIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gY3VzdG9tTWVudUZyb21EZWZhdWx0SXRl
bXMoV2ViVmlldyAqd2ViVmlldywgY29uc3QgV2ViQ29yZTo6Q29udGV4dE1lbnUmIGRlZmF1bHRN
ZW51KQogewogICAgIGNvbnN0IGF1dG8mIGhpdFRlc3RSZXN1bHQgPSB3ZWJWaWV3LnBhZ2UtPmNv
bnRleHRNZW51Q29udHJvbGxlcigpLmhpdFRlc3RSZXN1bHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCA1MDUzY2VhNDlhMGJlNDE2M2ZlMDkzYjBi
NjA5Y2MxNTI1ZDI1ZmRiLi41Mzg1ODY3YzU0NzQxMmQ1Mzk2NTA1YWE4NmE0NzgxZGUwMjYwZWNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC02OTIs
MTEgKzY5Miw3IEBAIC0gKFdlYlVJVGV4dEluZGljYXRvckRhdGEgKilpbml0V2l0aEltYWdlOihD
R0ltYWdlUmVmKWltYWdlIHRleHRJbmRpY2F0b3JEYXRhOihjCiAgICAgX2RhdGFJbnRlcmFjdGlv
bkltYWdlID0gW1BBTDo6YWxsb2NVSUltYWdlSW5zdGFuY2UoKSBpbml0V2l0aENHSW1hZ2U6aW1h
Z2Ugc2NhbGU6c2NhbGUgb3JpZW50YXRpb246VUlJbWFnZU9yaWVudGF0aW9uRG93bk1pcnJvcmVk
XTsKICAgICBfc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IGluZGljYXRvckRh
dGEuc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlczsKICAgICBfdGV4dEJvdW5kaW5n
UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IGluZGljYXRvckRhdGEudGV4dEJvdW5kaW5nUmVj
dEluUm9vdFZpZXdDb29yZGluYXRlczsKLQotICAgIE5TTXV0YWJsZUFycmF5ICp0ZXh0UmVjdHNJ
bkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBm
b3IgKGF1dG8gcmVjdCA6IGluZGljYXRvckRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29y
ZGluYXRlcykKLSAgICAgICAgW3RleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgYWRk
T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XV07Ci0gICAgX3RleHRSZWN0c0lu
Qm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBbW05TQXJyYXkgYXJyYXlXaXRoQXJyYXk6dGV4dFJl
Y3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlc10gcmV0YWluXTsKKyAgICBfdGV4dFJlY3RzSW5C
b3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IGNyZWF0ZU5TQXJyYXkoaW5kaWNhdG9yRGF0YS50ZXh0
UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKS5sZWFrUmVmKCk7CiAgICAgX2NvbnRlbnRJ
bWFnZVNjYWxlRmFjdG9yID0gaW5kaWNhdG9yRGF0YS5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcjsK
ICAgICBpZiAoaW5kaWNhdG9yRGF0YS5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KQogICAgICAg
ICBfY29udGVudEltYWdlV2l0aEhpZ2hsaWdodCA9IFtQQUw6OmFsbG9jVUlJbWFnZUluc3RhbmNl
KCkgaW5pdFdpdGhDR0ltYWdlOmluZGljYXRvckRhdGEuY29udGVudEltYWdlV2l0aEhpZ2hsaWdo
dC5nZXQoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSBzY2FsZTpzY2FsZSBvcmllbnRhdGlvbjpVSUlt
YWdlT3JpZW50YXRpb25Eb3duTWlycm9yZWRdOwpAQCAtNDM1Miw2ICs0MzQ4LDcgQEAgKyAodm9p
ZClfZG9Ob3RTdGFydE9ic2VydmluZ05ldHdvcmtSZWFjaGFiaWxpdHkKICNlbmRpZiAvLyBQTEFU
Rk9STShJT1NfRkFNSUxZKQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKwogLSAoTlNBcnJh
eSAqKV90b3VjaEV2ZW50UmVnaW9ucwogewogICAgIGF1dG8qIGZyYW1lID0gW3NlbGYgX21haW5D
b3JlRnJhbWVdOwpAQCAtNDM2NSwzOCArNDM2MiwzMyBAQCAtIChOU0FycmF5ICopX3RvdWNoRXZl
bnRSZWdpb25zCiAgICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHJlY3RzOwogICAgIGRvY3Vt
ZW50LT5nZXRUb3VjaFJlY3RzKHJlY3RzKTsKIAotICAgIGlmIChyZWN0cy5zaXplKCkgPT0gMCkK
KyAgICBpZiAocmVjdHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgTlNN
dXRhYmxlQXJyYXkgKmV2ZW50UmVnaW9uQXJyYXkgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTpyZWN0cy5zaXplKCldIGF1dG9yZWxlYXNlXTsKLQogICAgIE5TVmll
dyA8V2ViRG9jdW1lbnRWaWV3PiAqZG9jdW1lbnRWaWV3ID0gW1tbc2VsZiBtYWluRnJhbWVdIGZy
YW1lVmlld10gZG9jdW1lbnRWaWV3XTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHJlY3RzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0ID0gKml0OworICAg
IHJldHVybiBjcmVhdGVOU0FycmF5KHJlY3RzLCBbJl0gKGF1dG8mIHJlY3QpIC0+IFJldGFpblB0
cjxXZWJFdmVudFJlZ2lvbj4gewogICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICAgICAgLy8gVGhl
IHRvdWNoIHJlY3RhbmdsZXMgYXJlIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgZG9j
dW1lbnQgKGluc2lkZSB0aGUgV2ViSFRNTFZpZXcpLCB3aGljaCBpcyBub3QKICAgICAgICAgLy8g
dGhlIHNhbWUgYXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBXZWJWaWV3LiBVSVdlYlZp
ZXcgY3VycmVudGx5IGV4cGVjdHMgdmlldyBjb29yZGluYXRlcywgc28gd2UnbGwKICAgICAgICAg
Ly8gY29udmVydCB0aGVtIGhlcmUgbm93LgotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHZpZXdS
ZWN0ID0gV2ViQ29yZTo6SW50UmVjdChbZG9jdW1lbnRWaWV3IGNvbnZlcnRSZWN0OnJlY3QgdG9W
aWV3OnNlbGZdKTsKKyAgICAgICAgYXV0byB2aWV3UmVjdCA9IFtkb2N1bWVudFZpZXcgY29udmVy
dFJlY3Q6cmVjdCB0b1ZpZXc6c2VsZl07CiAKICAgICAgICAgLy8gVGhlIGV2ZW50IHJlZ2lvbiB3
YW50cyB0aGlzIHBvaW50cyBpbiB0aGlzIG9yZGVyOgogICAgICAgICAvLyAgcDItLS0tLS1wMwog
ICAgICAgICAvLyAgfCAgICAgICB8CiAgICAgICAgIC8vICBwMS0tLS0tLXA0Ci0gICAgICAgIC8v
Ci0gICAgICAgIFdlYkV2ZW50UmVnaW9uICpldmVudFJlZ2lvbiA9IFtbV2ViRXZlbnRSZWdpb24g
YWxsb2NdIGluaXRXaXRoUG9pbnRzOldlYkNvcmU6OkZsb2F0UG9pbnQodmlld1JlY3QueCgpLCB2
aWV3UmVjdC5tYXhZKCkpCi0gICAgICAgICAgICA6IFdlYkNvcmU6OkZsb2F0UG9pbnQodmlld1Jl
Y3QueCgpLCB2aWV3UmVjdC55KCkpIDogV2ViQ29yZTo6RmxvYXRQb2ludCh2aWV3UmVjdC5tYXhY
KCksIHZpZXdSZWN0LnkoKSkgOiBXZWJDb3JlOjpGbG9hdFBvaW50KHZpZXdSZWN0Lm1heFgoKSwg
dmlld1JlY3QubWF4WSgpKV07Ci0gICAgICAgIGlmIChldmVudFJlZ2lvbikgewotICAgICAgICAg
ICAgW2V2ZW50UmVnaW9uQXJyYXkgYWRkT2JqZWN0OmV2ZW50UmVnaW9uXTsKLSAgICAgICAgICAg
IFtldmVudFJlZ2lvbiByZWxlYXNlXTsKLSAgICAgICAgfQotICAgIH0KIAotICAgIHJldHVybiBl
dmVudFJlZ2lvbkFycmF5OworICAgICAgICBhdXRvIHAxID0gQ0dQb2ludE1ha2UoQ0dSZWN0R2V0
TWluWCh2aWV3UmVjdCksIENHUmVjdEdldE1heFkodmlld1JlY3QpKTsKKyAgICAgICAgYXV0byBw
MiA9IENHUG9pbnRNYWtlKENHUmVjdEdldE1pblgodmlld1JlY3QpLCBDR1JlY3RHZXRNaW5ZKHZp
ZXdSZWN0KSk7CisgICAgICAgIGF1dG8gcDMgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNYXhYKHZp
ZXdSZWN0KSwgQ0dSZWN0R2V0TWluWSh2aWV3UmVjdCkpOworICAgICAgICBhdXRvIHA0ID0gQ0dQ
b2ludE1ha2UoQ0dSZWN0R2V0TWF4WCh2aWV3UmVjdCksIENHUmVjdEdldE1heFkodmlld1JlY3Qp
KTsKKworICAgICAgICByZXR1cm4gYWRvcHROUyhbW1dlYkV2ZW50UmVnaW9uIGFsbG9jXSBpbml0
V2l0aFBvaW50czpwMSA6cDIgOnAzIDpwNF0pOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CisK
ICNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogCiAvLyBGb3IgYmFja3dhcmRzIGNvbXBh
dGliaWxpdHkgd2l0aCB0aGUgV2ViQmFja0ZvcndhcmRMaXN0IEFQSSwgd2UgaG9ub3IgYm90aApA
QCAtNDU2OSwyMCArNDU2MSwxNCBAQCAtICh2b2lkKXJlc2V0VHJhY2tlZFJlcGFpbnRzCiAgICAg
ICAgIHZpZXctPnJlc2V0VHJhY2tlZFJlcGFpbnRzKCk7CiB9CiAKLS0gKE5TQXJyYXkqKXRyYWNr
ZWRSZXBhaW50UmVjdHMKKy0gKE5TQXJyYXkgKil0cmFja2VkUmVwYWludFJlY3RzCiB7Ci0gICAg
YXV0byogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwotICAgIGF1dG8qIHZpZXcg
PSBjb3JlRnJhbWUtPnZpZXcoKTsKKyAgICBhdXRvIHZpZXcgPSBzZWxmLl9tYWluQ29yZUZyYW1l
LT52aWV3KCk7CiAgICAgaWYgKCF2aWV3IHx8ICF2aWV3LT5pc1RyYWNraW5nUmVwYWludHMoKSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJl
Y3Q+JiByZXBhaW50UmVjdHMgPSB2aWV3LT50cmFja2VkUmVwYWludFJlY3RzKCk7Ci0gICAgTlNN
dXRhYmxlQXJyYXkqIHJlY3RzQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0
aENhcGFjaXR5OnJlcGFpbnRSZWN0cy5zaXplKCldOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlcGFpbnRSZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAgW3JlY3RzQXJyYXkgYWRk
T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6c25hcHBlZEludFJlY3QoV2ViQ29yZTo6TGF5
b3V0UmVjdChyZXBhaW50UmVjdHNbaV0pKV1dOwotCi0gICAgcmV0dXJuIFtyZWN0c0FycmF5IGF1
dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheSh2aWV3LT50cmFja2VkUmVwYWlu
dFJlY3RzKCksIFtdIChhdXRvJiByZWN0KSB7CisgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1
ZVdpdGhSZWN0OnNuYXBwZWRJbnRSZWN0KFdlYkNvcmU6OkxheW91dFJlY3QgeyByZWN0IH0pXTsK
KyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCkBA
IC0xMDE5OSwxMyArMTAxODUsOSBAQCAtIChOU0FycmF5PERPTUVsZW1lbnQgKj4gKilfZWRpdGFi
bGVFbGVtZW50c0luUmVjdDooQ0dSZWN0KXJlY3QKICAgICBhdXRvKiBwYWdlID0gY29yZShzZWxm
KTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBAW107Ci0gICAgYXV0byBjb3JlRWxl
bWVudHMgPSBwYWdlLT5lZGl0YWJsZUVsZW1lbnRzSW5SZWN0KHJlY3QpOwotICAgIGlmIChjb3Jl
RWxlbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gQFtdOwotICAgIGF1dG8gcmVzdWx0
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvcmVF
bGVtZW50cy5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIGNvcmVFbGVtZW50IDogY29yZUVsZW1l
bnRzKQotICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpraXQoY29yZUVsZW1lbnQucHRyKCkpXTsK
LSAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJy
YXkocGFnZS0+ZWRpdGFibGVFbGVtZW50c0luUmVjdChyZWN0KSwgW10gKGF1dG8mIGNvcmVFbGVt
ZW50KSB7CisgICAgICAgIHJldHVybiBraXQoY29yZUVsZW1lbnQucHRyKCkpOworICAgIH0pLmF1
dG9yZWxlYXNlKCk7CiB9CiAKIC0gKHZvaWQpcmV2ZWFsQ3VycmVudFNlbGVjdGlvbgpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGM4OGFkNjZiN2Iw
ZWFkM2ZhN2RhNjI2NDAzZjAxMzA0YzY5NGI3YzIuLmJkM2I0ZjFiNTgwNDY1MDliZTgzNjRkMjlj
NzMzODYxZDRlMzBlOWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAyMC0wNC0xOSAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBVc2UgY3JlYXRlTlNBcnJheSBpbiBtYW55
IG1vcmUgcGxhY2VzIHRoYXQgYnVpbGQgTlNBcnJheSBvYmplY3RzIGZyb20gQysrIGNvbGxlY3Rp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA3
MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKGFjdGl2YXRlVGVz
dGluZ0ZvbnRzKTogVXNlIGNvbnN0ZXhwciBhbmQgTlNTdHJpbmcgaW5zdGVhZCBvZiBhIG51bGwt
cG9pbnRlciB0ZXJtaW5hdGVkCisgICAgICAgIGFycmF5IGZvciB0aGUgZm9udCBuYW1lcy4gVXNl
IGNyZWF0ZU5TQXJyYXkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0
ZS5tbToKKyAgICAgICAgKC1bVUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bk9wZW5QYW5lbEZvckZpbGVC
dXR0b25XaXRoUmVzdWx0TGlzdGVuZXI6YWxsb3dNdWx0aXBsZUZpbGVzOl0pOgorICAgICAgICBV
c2UgY3JlYXRlTlNBcnJheS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwLnB5OgorICAgICAgICAoZmluZF9wYXJhbWV0ZXJfbmFtZV9pbmRleCk6IEZpeGVk
IGEgc3BlbGxpbmcgZXJyb3IuCisgICAgICAgIChfY2hlY2tfcGFyYW1ldGVyX25hbWVfYWdhaW5z
dF90ZXh0KTogQWRkZWQgYSBzcGVjaWFsIGNhc2UgdG8gbm90IGNvbXBsYWluIHRoYXQKKyAgICAg
ICAgcGFyYW1ldGVycyBuYW1lZCAiXSIgaGF2ZSByZWR1bmRhbnQgbmFtZXMuIE5vdCBvYnZpb3Vz
IHRvIG1lIGhvdyB0byB3cml0ZSBhIHRlc3QgY2FzZSBmb3IKKyAgICAgICAgdGhpcyBhbmQgaG93
IHRvIGZpeCB0aGlzIGluIGEgbW9yZSBzZW5zaWJsZSB3YXksIGJ1dCBpbW1lZGlhdGVseSBoZWxw
ZnVsIHRvIG5vdCBnZXQgdGhpcworICAgICAgICBzcHVyaW91cyB3YXJuaW5nLgorCisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29j
b2EubW06CisgICAgICAgIChXVFI6OmFjdGl2YXRlU3lzdGVtQ29yZVdlYkZvbnRzKTogVXNlIGNv
bnN0ZXhwciBhcnJheSBpbnN0ZWFkIG9mIE5TQXJyYXkgZm9yIGZvbnQgbmFtZXMuCisgICAgICAg
IChXVFI6OmFjdGl2YXRlRm9udHMpOiBVc2UgY29uc3RleHByIGFuZCBOU1N0cmluZyBpbnN0ZWFk
IG9mIGEgbnVsbC1wb2ludGVyIHRlcm1pbmF0ZWQKKyAgICAgICAgYXJyYXkgZm9yIHRoZSBmb250
IG5hbWVzLiBVc2UgY3JlYXRlTlNBcnJheS4KKwogMjAyMC0wNC0xOCAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIGhlYWRlciBwb3N0cHJvY2Vzc2luZyB2
ZXJzaW9uIGN1dG9mZiB0byBrZWVwIEFwcGxlIGludGVybmFsIGJ1aWxkcyB3b3JraW5nCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0gYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5kZXggOTkwNmE5ZjdjZjMz
ODk0ZDNlMTVlMzlkMmFlMTA2NjdhZTlkYjE3Ni4uOTMxNGFiMTU2Zjc0ZDA2YjNiZGY2ZTU1NWVi
M2NkZTNkZTQ4MDE3NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBS
ZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJl
ZS5tbQpAQCAtOTksNiArOTksNyBAQAogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9y
dCA8d3RmL1RocmVhZGluZy5oPgogI2ltcG9ydCA8d3RmL1VuaXF1ZUFycmF5Lmg+CisjaW1wb3J0
IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01MDksMzEgKzUxMCwy
OCBAQCBzdGF0aWMgdm9pZCBhY3RpdmF0ZVN5c3RlbUNvcmVXZWJGb250cygpCiAKIHN0YXRpYyB2
b2lkIGFjdGl2YXRlVGVzdGluZ0ZvbnRzKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZm9u
dEZpbGVOYW1lc1tdID0gewotICAgICAgICAiQUhFTV9fX18uVFRGIiwKLSAgICAgICAgIldlYktp
dFdlaWdodFdhdGNoZXIxMDAudHRmIiwKLSAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXIyMDAu
dHRmIiwKLSAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXIzMDAudHRmIiwKLSAgICAgICAgIldl
YktpdFdlaWdodFdhdGNoZXI0MDAudHRmIiwKLSAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXI1
MDAudHRmIiwKLSAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXI2MDAudHRmIiwKLSAgICAgICAg
IldlYktpdFdlaWdodFdhdGNoZXI3MDAudHRmIiwKLSAgICAgICAgIldlYktpdFdlaWdodFdhdGNo
ZXI4MDAudHRmIiwKLSAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmIiwKLSAgICAg
ICAgIkZvbnRXaXRoRmVhdHVyZXMudHRmIiwKLSAgICAgICAgIkZvbnRXaXRoRmVhdHVyZXMub3Rm
IiwKLSAgICAgICAgMAorICAgIGNvbnN0ZXhwciBOU1N0cmluZyAqZm9udEZpbGVOYW1lc1tdID0g
eworICAgICAgICBAIkFIRU1fX19fLlRURiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0Y2hl
cjEwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXIyMDAudHRmIiwKKyAgICAg
ICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyMzAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0
V2F0Y2hlcjQwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI1MDAudHRmIiwK
KyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyNjAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0
V2VpZ2h0V2F0Y2hlcjcwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI4MDAu
dHRmIiwKKyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiIsCisgICAgICAgIEAi
Rm9udFdpdGhGZWF0dXJlcy50dGYiLAorICAgICAgICBAIkZvbnRXaXRoRmVhdHVyZXMub3RmIiwK
ICAgICB9OwogCi0gICAgTlNNdXRhYmxlQXJyYXkgKmZvbnRVUkxzID0gW05TTXV0YWJsZUFycmF5
IGFycmF5XTsKICAgICBOU1VSTCAqcmVzb3VyY2VzRGlyZWN0b3J5ID0gW05TVVJMIFVSTFdpdGhT
dHJpbmc6QCJEdW1wUmVuZGVyVHJlZS5yZXNvdXJjZXMiIHJlbGF0aXZlVG9VUkw6W1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBleGVjdXRhYmxlVVJMXV07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
Zm9udEZpbGVOYW1lc1tpXTsgKytpKSB7Ci0gICAgICAgIE5TVVJMICpmb250VVJMID0gW3Jlc291
cmNlc0RpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6W05TU3RyaW5nIHN0cmlu
Z1dpdGhVVEY4U3RyaW5nOmZvbnRGaWxlTmFtZXNbaV1dIGlzRGlyZWN0b3J5Ok5PXTsKLSAgICAg
ICAgW2ZvbnRVUkxzIGFkZE9iamVjdDpbZm9udFVSTCBhYnNvbHV0ZVVSTF1dOwotICAgIH0KKyAg
ICBhdXRvIGZvbnRVUkxzID0gY3JlYXRlTlNBcnJheShmb250RmlsZU5hbWVzLCBbJl0gKE5TU3Ry
aW5nICpuYW1lKSB7CisgICAgICAgIHJldHVybiBbcmVzb3VyY2VzRGlyZWN0b3J5IFVSTEJ5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDpuYW1lIGlzRGlyZWN0b3J5Ok5PXS5hYnNvbHV0ZVVSTDsKKyAg
ICB9KTsKIAotICAgIENGQXJyYXlSZWYgZXJyb3JzID0gMDsKLSAgICBpZiAoIUNURm9udE1hbmFn
ZXJSZWdpc3RlckZvbnRzRm9yVVJMcygoQ0ZBcnJheVJlZilmb250VVJMcywga0NURm9udE1hbmFn
ZXJTY29wZVByb2Nlc3MsICZlcnJvcnMpKSB7CisgICAgQ0ZBcnJheVJlZiBlcnJvcnMgPSBudWxs
cHRyOworICAgIGlmICghQ1RGb250TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JVUkxzKChDRkFycmF5
UmVmKWZvbnRVUkxzLmdldCgpLCBrQ1RGb250TWFuYWdlclNjb3BlUHJvY2VzcywgJmVycm9ycykp
IHsKICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gYWN0aXZhdGUgZm9udHM6ICVAIiwgZXJyb3Jz
KTsKICAgICAgICAgQ0ZSZWxlYXNlKGVycm9ycyk7CiAgICAgICAgIGV4aXQoMSk7CkBAIC01NDUs
NyArNTQzLDkgQEAgc3RhdGljIHZvaWQgYWRqdXN0Rm9udHMoKQogICAgIGFjdGl2YXRlU3lzdGVt
Q29yZVdlYkZvbnRzKCk7CiAgICAgYWN0aXZhdGVUZXN0aW5nRm9udHMoKTsKIH0KKwogI2Vsc2UK
Kwogc3RhdGljIHZvaWQgYWN0aXZhdGVGb250SU9TKGNvbnN0IHVpbnQ4X3QqIGZvbnREYXRhLCB1
bnNpZ25lZCBsb25nIGxlbmd0aCwgc3RkOjpzdHJpbmcgc2VjdGlvbk5hbWUpCiB7CiAgICAgQ0dE
YXRhUHJvdmlkZXJSZWYgZGF0YSA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0
ciwgZm9udERhdGEsIGxlbmd0aCwgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURl
bGVnYXRlLm1tCmluZGV4IGQ1ZjRhNDJlMTY2MzM2ZDg5Y2JkZGMwOWU1NWI0NTIzNWU1MTcyY2Eu
LmY2OTk1NTUxZTBjZGExMGQ0YjJiNzlmOTJiYTZkYTM0YmUzNTdiODggMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCkBAIC00NSw2ICs0NSw3IEBACiAjaW1wb3J0IDxXZWJL
aXQvV2ViVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAK
ICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvICpk
cmFnZ2luZ0luZm8gPSBuaWw7CkBAIC0zNzYsMjAgKzM3NywxOCBAQCAtICh2b2lkKXdlYlZpZXc6
KFdlYlZpZXcgKilzZW5kZXIgcnVuT3BlblBhbmVsRm9yRmlsZUJ1dHRvbldpdGhSZXN1bHRMaXN0
ZW5lcjooaQogICAgIH0KIAogICAgIE5TVVJMICpiYXNlVVJMID0gW05TVVJMIFVSTFdpdGhTdHJp
bmc6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmdUZXN0UnVubmVyLT50ZXN0VVJMKCku
Y19zdHIoKV1dOwotICAgIGF1dG8gZmlsZVBhdGhzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om9wZW5QYW5lbEZpbGVzLnNpemUoKV0pOwotICAgIGZv
ciAoYXV0byYgZmlsZVBhdGggOiBvcGVuUGFuZWxGaWxlcykgewotICAgICAgICBOU1VSTCAqZmls
ZVVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3Ry
aW5nOmZpbGVQYXRoLmNfc3RyKCldIHJlbGF0aXZlVG9VUkw6YmFzZVVSTF07Ci0gICAgICAgIFtm
aWxlUGF0aHMgYWRkT2JqZWN0OmZpbGVVUkwucGF0aF07Ci0gICAgfQorICAgIGF1dG8gZmlsZVBh
dGhzID0gY3JlYXRlTlNBcnJheShvcGVuUGFuZWxGaWxlcywgWyZdIChjb25zdCBzdGQ6OnN0cmlu
ZyYgZmlsZVBhdGgpIHsKKyAgICAgICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmZpbGVQYXRoLmNfc3RyKCldIHJlbGF0aXZlVG9V
Ukw6YmFzZVVSTF0ucGF0aDsKKyAgICB9KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgTlNVUkwgKmZpcnN0VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNTdHJpbmcgc3Ry
aW5nV2l0aFVURjhTdHJpbmc6b3BlblBhbmVsRmlsZXNbMF0uY19zdHIoKV0gcmVsYXRpdmVUb1VS
TDpiYXNlVVJMXTsKICAgICBOU1N0cmluZyAqZGlzcGxheVN0cmluZyA9IGZpcnN0VVJMLmxhc3RQ
YXRoQ29tcG9uZW50OwotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNoYXI+JiBpY29uRGF0YSA9IGdU
ZXN0UnVubmVyLT5vcGVuUGFuZWxGaWxlc01lZGlhSWNvbigpOworICAgIGF1dG8mIGljb25EYXRh
ID0gZ1Rlc3RSdW5uZXItPm9wZW5QYW5lbEZpbGVzTWVkaWFJY29uKCk7CiAgICAgQ0dJbWFnZVJl
ZiBpbWFnZVJlZiA9IG51bGxwdHI7CiAgICAgaWYgKCFpY29uRGF0YS5lbXB0eSgpKSB7Ci0gICAg
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGFSZWYgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShu
dWxscHRyLCAodW5zaWduZWQgY2hhciAqKWljb25EYXRhLmRhdGEoKSwgaWNvbkRhdGEuc2l6ZSgp
KSk7Ci0gICAgICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gaW1hZ2VQcm92aWRlclJl
ZiA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGRhdGFSZWYuZ2V0KCkp
KTsKKyAgICAgICAgYXV0byBkYXRhUmVmID0gYWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGljb25EYXRhLmRhdGEoKSksIGljb25EYXRh
LnNpemUoKSkpOworICAgICAgICBhdXRvIGltYWdlUHJvdmlkZXJSZWYgPSBhZG9wdENGKENHRGF0
YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShkYXRhUmVmLmdldCgpKSk7CiAgICAgICAgIGltYWdl
UmVmID0gQ0dJbWFnZUNyZWF0ZVdpdGhKUEVHRGF0YVByb3ZpZGVyKGltYWdlUHJvdmlkZXJSZWYu
Z2V0KCksIG51bGxwdHIsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwogICAgIH0K
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
cy9jcHAucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQpp
bmRleCBlYmE4MmUxYTE4YjlkZDM2YzhjZDA0OWU5YjEyNzA3YTdiOTM1OGNjLi4wMjc3ZDdhNDY3
Zjc4YTFkNDk0ODI0M2UyYWU0OWQyMGE0OTM3ODQxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQpAQCAtNDk4LDcgKzQ5OCw3IEBAIGRlZiBjcmVhdGVf
c2tlbGV0b25fcGFyYW1ldGVycyhhbGxfcGFyYW1ldGVycyk6CiAKIAogZGVmIGZpbmRfcGFyYW1l
dGVyX25hbWVfaW5kZXgoc2tlbGV0b25fcGFyYW1ldGVyKToKLSAgICAiIiJEZXRlcm1pbmVzIHdo
ZXJlIHRoZSBwYXJhbWV0ZXJlIG5hbWUgc3RhcnRzIGdpdmVuIHRoZSBza2VsZXRvbiBwYXJhbWV0
ZXIuIiIiCisgICAgIiIiRGV0ZXJtaW5lcyB3aGVyZSB0aGUgcGFyYW1ldGVyIG5hbWUgc3RhcnRz
IGdpdmVuIHRoZSBza2VsZXRvbiBwYXJhbWV0ZXIuIiIiCiAgICAgIyBUaGUgZmlyc3Qgc3BhY2Ug
ZnJvbSB0aGUgcmlnaHQgaW4gdGhlIHNpbXBsaWZpZWQgcGFyYW1ldGVyIGlzIHdoZXJlIHRoZSBw
YXJhbWV0ZXIKICAgICAjIG5hbWUgc3RhcnRzIHVubGVzcyB0aGUgZmlyc3Qgc3BhY2UgaXMgYmVm
b3JlIGFueSBjb250ZW50IGluIHRoZSBzaW1wbGlmaWVkIHBhcmFtZXRlci4KICAgICBiZWZvcmVf
bmFtZV9pbmRleCA9IHNrZWxldG9uX3BhcmFtZXRlci5yc3RyaXAoKS5yZmluZCgnICcpCkBAIC0x
Nzc2LDYgKzE3NzYsOCBAQCBkZWYgX2NoZWNrX3BhcmFtZXRlcl9uYW1lX2FnYWluc3RfdGV4dChw
YXJhbWV0ZXIsIHRleHQsIGVycm9yKToKICAgICAjIGNhc2UgaW5zZW5zaXRpdmUgd2hpbGUgc3Rp
bGwgcmV0YWluaW5nIHdvcmQgYnJlYWtzLiAoVGhpcyBlbnN1cmVzIHRoYXQKICAgICAjICdlbGF0
ZScgZG9lc24ndCBsb29rIGxpa2UgaXQgaXMgZHVwbGljYXRpbmcgb2YgJ05hdGVMYXRlJy4pCiAg
ICAgY2Fub25pY2FsX3BhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLmxvd2VyX3dpdGhfdW5kZXJz
Y29yZXNfbmFtZSgpCisgICAgaWYgY2Fub25pY2FsX3BhcmFtZXRlcl9uYW1lID09ICJdIjoKKyAg
ICAgICAgcmV0dXJuIFRydWUgICMgV29yayBhcm91bmQgYSBidWcgcGFyc2luZyBzb21lIE9iamVj
dGl2ZS1DIGNvZGUuCiAKICAgICAjIEFwcGVuZHMgIm9iamVjdCIgdG8gYWxsIHRleHQgdG8gY2F0
Y2ggdmFyaWFibGVzIHRoYXQgZGlkIHRoZSBzYW1lIChidXQgb25seQogICAgICMgZG8gdGhpcyB3
aGVuIHRoZSBwYXJhbWV0ZXIgbmFtZSBpcyBtb3JlIHRoYW4gYSBzaW5nbGUgY2hhcmFjdGVyIHRv
IGF2b2lkCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L2NvY29hL0FjdGl2YXRlRm9udHNDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvY29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tCmluZGV4IGRiM2MyODkzMWQw
NWY1NDIwNmIxYmY1ZDUyOTgxNDg0OTk4YWEyNDAuLmI1YjNjMjI4NmQ0OTNiMjgzOTliYTQxNzc3
ZDVkYTZlMGZkZDY5NTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvY29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tCkBAIC0z
MSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tTdHJpbmdDRi5oPgogI2ltcG9ydCA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3
dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogI2lmIFVTRShBUFBLSVQpCiAjaW1wb3J0IDxBcHBL
aXQvQXBwS2l0Lmg+CkBAIC01NCwxMCArNTUsMTAgQEAgc3RhdGljIE5TVVJMICpyZXNvdXJjZXNE
aXJlY3RvcnlVUkwoKQogCiAvLyBBY3RpdmF0aW5nIHN5c3RlbSBjb3BpZXMgb2YgdGhlc2UgZm9u
dHMgb3ZlcnJpZGVzIGFueSBvdGhlcnMgdGhhdCBjb3VsZCBiZSBwcmVmZXJyZWQsIHN1Y2ggYXMg
b25lcwogLy8gaW4gL0xpYnJhcnkvRm9udHMvTWljcm9zb2Z0LCBhbmQgd2hpY2ggZG9uJ3QgYWx3
YXlzIGhhdmUgdGhlIHNhbWUgbWV0cmljcy4KLS8vIEZJWE1FOiBTd2l0Y2ggdG8gYSBzb2x1dGlv
biBmcm9tIDxyZGFyOi8vcHJvYmxlbS8xOTU1MzU1MD4gb25jZSBpdCdzIGF2YWlsYWJsZS4KKy8v
IEZJWE1FOiBOb3cgdGhhdCA8cmRhcjovL3Byb2JsZW0vMTk1NTM1NTA+IGhhcyBiZWVuIHJlc29s
dmVkIHdlIHNob3VsZCBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uLgogc3RhdGljIHZvaWQgYWN0aXZh
dGVTeXN0ZW1Db3JlV2ViRm9udHMoKQogewotICAgIE5TQXJyYXkgKmNvcmVXZWJGb250TmFtZXMg
PSBAWworICAgIGNvbnN0ZXhwciBOU1N0cmluZyAqY29yZVdlYkZvbnROYW1lc1tdID0gewogICAg
ICAgICBAIkFuZGFsZSBNb25vIiwKICAgICAgICAgQCJBcmlhbCIsCiAgICAgICAgIEAiQXJpYWwg
QmxhY2siLApAQCAtNjksNyArNzAsNyBAQCBzdGF0aWMgdm9pZCBhY3RpdmF0ZVN5c3RlbUNvcmVX
ZWJGb250cygpCiAgICAgICAgIEAiVHJlYnVjaGV0IE1TIiwKICAgICAgICAgQCJWZXJkYW5hIiwK
ICAgICAgICAgQCJXZWJkaW5ncyIKLSAgICBdOworICAgIH07CiAKICAgICBOU0FycmF5ICpmb250
RmlsZXMgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNvbnRlbnRzT2ZEaXJlY3Rv
cnlBdFVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL0xpYnJhcnkvRm9udHMiIGlzRGlyZWN0
b3J5OllFU10KICAgICAgICAgaW5jbHVkaW5nUHJvcGVydGllc0ZvcktleXM6QFtOU1VSTEZpbGVS
ZXNvdXJjZVR5cGVLZXksIE5TVVJMTmFtZUtleV0gb3B0aW9uczowIGVycm9yOjBdOwpAQCAtODUs
NyArODYsNyBAQCBzdGF0aWMgdm9pZCBhY3RpdmF0ZVN5c3RlbUNvcmVXZWJGb250cygpCiAKICAg
ICAgICAgLy8gQWN0aXZhdGUgYWxsIGZvbnQgdmFyaWF0aW9ucywgc3VjaCBhcyBBcmlhbCBCb2xk
IEl0YWxpYy50dGYuIFRoaXMgYWxnb3JpdGhtIGlzIG5vdCAxMDAlIHByZWNpc2UsIGFzIGl0CiAg
ICAgICAgIC8vIGFsc28gYWN0aXZhdGVzIGUuZy4gQXJpYWwgVW5pY29kZSwgd2hpY2ggaXMgbm90
IGEgdmFyaWF0aW9uIG9mIEFyaWFsLgotICAgICAgICBmb3IgKE5TU3RyaW5nICpjb3JlV2ViRm9u
dE5hbWUgaW4gY29yZVdlYkZvbnROYW1lcykgeworICAgICAgICBmb3IgKGF1dG8mIGNvcmVXZWJG
b250TmFtZSA6IGNvcmVXZWJGb250TmFtZXMpIHsKICAgICAgICAgICAgIGlmIChbZmlsZU5hbWUg
aGFzUHJlZml4OmNvcmVXZWJGb250TmFtZV0pIHsKICAgICAgICAgICAgICAgICBDRkVycm9yUmVm
IGVycm9yID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBpZiAoIUNURm9udE1hbmFnZXJSZWdp
c3RlckZvbnRzRm9yVVJMKChfX2JyaWRnZSBDRlVSTFJlZilmb250VVJMLCBrQ1RGb250TWFuYWdl
clNjb3BlUHJvY2VzcywgJmVycm9yKSkgewpAQCAtMTAyLDMwICsxMDMsMjcgQEAgc3RhdGljIHZv
aWQgYWN0aXZhdGVTeXN0ZW1Db3JlV2ViRm9udHMoKQogCiB2b2lkIGFjdGl2YXRlRm9udHMoKQog
ewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmb250RmlsZU5hbWVzW10gPSB7Ci0gICAgICAgICJB
SEVNX19fXy5UVEYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGYiLAotICAg
ICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0
V2F0Y2hlcjMwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjQwMC50dGYiLAot
ICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjUwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjYwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGYi
LAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYiLAotICAgICAgICAiV2ViS2l0
V2VpZ2h0V2F0Y2hlcjkwMC50dGYiLAotICAgICAgICAiRm9udFdpdGhGZWF0dXJlcy5vdGYiLAot
ICAgICAgICAiRm9udFdpdGhGZWF0dXJlcy50dGYiLAotICAgICAgICAwCisgICAgY29uc3RleHBy
IE5TU3RyaW5nICpmb250RmlsZU5hbWVzW10gPSB7CisgICAgICAgIEAiQUhFTV9fX18uVFRGIiwK
KyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0
V2VpZ2h0V2F0Y2hlcjIwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXIzMDAu
dHRmIiwKKyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyNDAwLnR0ZiIsCisgICAgICAgIEAi
V2ViS2l0V2VpZ2h0V2F0Y2hlcjUwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNo
ZXI2MDAudHRmIiwKKyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyNzAwLnR0ZiIsCisgICAg
ICAgIEAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdo
dFdhdGNoZXI5MDAudHRmIiwKKyAgICAgICAgQCJGb250V2l0aEZlYXR1cmVzLm90ZiIsCisgICAg
ICAgIEAiRm9udFdpdGhGZWF0dXJlcy50dGYiLAogICAgIH07CiAKLSAgICBOU011dGFibGVBcnJh
eSAqZm9udFVSTHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGZvbnRGaWxlTmFtZXNbaV07ICsraSkgewotICAgICAgICBOU1VSTCAqZm9udFVSTCA9
IFtyZXNvdXJjZXNEaXJlY3RvcnlVUkwoKSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6W05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmZvbnRGaWxlTmFtZXNbaV1dIGlzRGlyZWN0b3J5
Ok5PXTsKLSAgICAgICAgW2ZvbnRVUkxzIGFkZE9iamVjdDpbZm9udFVSTCBhYnNvbHV0ZVVSTF1d
OwotICAgIH0KKyAgICBhdXRvIGZvbnRVUkxzID0gY3JlYXRlTlNBcnJheShmb250RmlsZU5hbWVz
LCBbXSAoTlNTdHJpbmcgKm5hbWUpIHsKKyAgICAgICAgcmV0dXJuIFtyZXNvdXJjZXNEaXJlY3Rv
cnlVUkwoKSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6bmFtZSBpc0RpcmVjdG9yeTpOT10u
YWJzb2x1dGVVUkw7CisgICAgfSk7CiAKICAgICBDRkFycmF5UmVmIGVycm9ycyA9IG51bGxwdHI7
Ci0gICAgaWYgKCFDVEZvbnRNYW5hZ2VyUmVnaXN0ZXJGb250c0ZvclVSTHMoKF9fYnJpZGdlIENG
QXJyYXlSZWYpZm9udFVSTHMsIGtDVEZvbnRNYW5hZ2VyU2NvcGVQcm9jZXNzLCAmZXJyb3JzKSkg
eworICAgIGlmICghQ1RGb250TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JVUkxzKChfX2JyaWRnZSBD
RkFycmF5UmVmKWZvbnRVUkxzLmdldCgpLCBrQ1RGb250TWFuYWdlclNjb3BlUHJvY2VzcywgJmVy
cm9ycykpIHsKICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gYWN0aXZhdGUgZm9udHM6ICVAIiwg
ZXJyb3JzKTsKICAgICAgICAgQ0ZSZWxlYXNlKGVycm9ycyk7CiAgICAgICAgIGV4aXQoMSk7CkBA
IC0xMzMsNyArMTMxLDcgQEAgdm9pZCBhY3RpdmF0ZUZvbnRzKCkKIAogI2lmIFVTRShBUFBLSVQp
CiAgICAgYWN0aXZhdGVTeXN0ZW1Db3JlV2ViRm9udHMoKTsKLSNlbmRpZiAvLyBVU0UoQVBQS0lU
KQorI2VuZGlmCiB9CiAKIHZvaWQgaW5zdGFsbEZha2VIZWx2ZXRpY2EoV0tTdHJpbmdSZWYgY29u
ZmlndXJhdGlvbikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396953</attachid>
            <date>2020-04-20 00:05:31 -0700</date>
            <delta_ts>2020-04-21 18:30:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210702-20200420000530.patch</filename>
            <type>text/plain</type>
            <size>203214</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiZTIxZDI3ODhjOTg3YzNlNjJmMzJl
MmRlMzUyMjgxZDBhMjBiMDQuLjEyMmUyNDE2N2Q0OTM5YzVjN2M1OWJjZjI3YmNmMDA5OTEzMTNm
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMDQtMTkgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gVXNlIGNyZWF0ZU5TQXJyYXkgaW4gbWFueSBt
b3JlIHBsYWNlcyB0aGF0IGJ1aWxkIE5TQXJyYXkgb2JqZWN0cyBmcm9tIEMrKyBjb2xsZWN0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNzAy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYv
Y29jb2EvVmVjdG9yQ29jb2EuaDogSW1wcm92ZWQgdGhlIGNyZWF0ZU5TQXJyYXkgZnVuY3Rpb24g
dGVtcGxhdGU6CisgICAgICAgIDEpIFNraXAgbmlsIHZhbHVlcy4gVGhpcyBtYXRjaGVzIHdoYXQg
d2UgZG8gd2l0aCBPcHRpb25hbDw+IGluIG1ha2VWZWN0b3IgYW5kCisgICAgICAgICAgIHdhcyBh
bHdheXMgbXkgaW50ZW50aW9uOyBhcHBhcmVudGx5IGZvcmdvdCB0byBkbyBpdC4KKyAgICAgICAg
MikgSW5zdGVhZCBvZiB0YWtpbmcgYSBjb25zdCByZWZlcmVuY2UgYXJndW1lbnQsIHRha2UgYSBm
b3J3YXJkaW5nIHJlZmVyZW5jZQorICAgICAgICAgICBhbmQgdXNlIGZvcndhcmRpbmcgd2hlbiBw
YXNzaW5nIGNvbGxlY3Rpb24gZWxlbWVudHMgdG8gbWFrZU5TQXJyYXlFbGVtZW50CisgICAgICAg
ICAgIG9yIHRoZSBwYXNzZWQtaW4gZnVuY3Rpb24uIENhbiB0cmFuc2ZlciBvd25lcnNoaXAgb2Yg
Y29sbGVjdGlvbiBlbGVtZW50cworICAgICAgICAgICBhcyB0aGV5IGFyZSB0cmFuc2Zvcm1lZCBp
bnRvIGFycmF5IGVsZW1lbnRzLCB3aGljaCBtYWtlcyBzZW5zZSBpZiB0aGUKKyAgICAgICAgICAg
T2JqZWN0aXZlLUMgb2JqZWN0cyBhcmUgd3JhcHBlcnMgdGhhdCB0YWtlIG93bmVyc2hpcCBvZiB3
aGF0J3Mgd3JhcHBlZC4KKyAgICAgICAgMykgVGFrZSBhbnkgY29sbGVjdGlvbiB0aGF0IHdvcmtz
IHdpdGggc3RkOjpzaXplIGFuZCBhIHJhbmdlLWJhc2VkIGZvciBsb29wLAorICAgICAgICAgICBu
byBsb25nZXIgcmVxdWlyaW5nIGEgc2l6ZSBtZW1iZXIgZnVuY3Rpb24uIEluY2x1ZGVzIGFycmF5
cy4KKyAgICAgICAgNCkgU2luY2UgdGhpcyBub3cgaW50ZW5kZWQgZm9yIHVzZSBvbiBjb2xsZWN0
aW9ucyBvdGhlciB0aGFuIFdURjo6VmVjdG9yLAorICAgICAgICAgICBhZGRlZCAidXNpbmcgV1RG
OjpjcmVhdGVOU0FycmF5IiBzaW5jZSBhcmd1bWVudC1kZXBlbmRlbnQgbG9va3VwIHdvbid0Cisg
ICAgICAgICAgIGZpbmQgdGhlIGZ1bmN0aW9uIHRlbXBsYXRlIGluIHRob3NlIGNhc2VzLgorCiAy
MDIwLTA0LTE5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgV0tTY3JpcHRNZXNzYWdlSGFuZGxlciBBUEkgdGhhdCBhc3luY2hyb25vdXNseSByZXNwb25k
cyB3aXRoIGEgcHJvbWlzZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5MmNjYzlkMGFiNGMyZTdhN2U0YmJkNzMz
NTMzZDRkMjI2NTE3ZDEyLi40MTRmYzViZGUzZWIxOWU3ZjVkYTc0N2ZlY2VmM2I2ZDUxZjEyYmJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkgQEAKKzIwMjAtMDQtMTkgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gVXNlIGNyZWF0ZU5TQXJyYXkgaW4g
bWFueSBtb3JlIHBsYWNlcyB0aGF0IGJ1aWxkIE5TQXJyYXkgb2JqZWN0cyBmcm9tIEMrKyBjb2xs
ZWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjEwNzAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUZs
b3dUb0VsZW1lbnRzXSk6IFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0UmVjdHNGcm9tTWFya2Vyczp3aXRoVGV4dDpdKTogRGl0
dG8uCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJlY3RzRm9yU2Vs
ZWN0aW9uUmVjdHM6XSk6IERlbGV0ZWQuIE1lcmdlZCBpbnRvCisgICAgICAgIHRoZSBtZXRob2Qg
YWJvdmUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlckJhc2UuaDogVGFrZSBjb25zdCByZWZlcmVuY2VzCisgICAgICAgIGluc3RlYWQg
b2YgcmVmZXJlbmNlcyB3aGVuIHBhc3NpbmcgUGF0aCBhbmQgRmxvYXRSZWN0LgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbToK
KyAgICAgICAgKGNvbnZlcnRNYXRoUGFpcnNUb05TQXJyYXkpOiBVc2UgY3JlYXRlTlNBcnJheS4g
QWxzbyB1c2UgYXJyYXlzIG9uIHRoZSBzdGFjaworICAgICAgICB0byBjcmVhdGUgTlNEaWN0aW9u
YXJ5IHJhdGhlciB0aGFuIHVzaW5nIE5TTXV0YWJsZURpY3Rpb25hcnkuCisgICAgICAgIChhZGRD
aGlsZFRvQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoY29udmVydFRvTlNBcnJheSk6IFVzZXMg
Y3JlYXRlTlNBcnJheS4gUm9sbGVkIGFkZENoaWxkVG9BcnJheSBpbi4KKyAgICAgICAgKC1bV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlIGNvbnZlcnRQYXRoVG9TY3JlZW5TcGFjZTpd
KTogVGFrZSBjb25zdAorICAgICAgICByZWZlcmVuY2UgaW5zdGVhZCBvZiByZWZlcmVuY2UuCisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZSBjb252ZXJ0UmVjdFRv
U3BhY2U6c3BhY2U6XSk6IERpdHRvLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0
ZXI6XSk6CisgICAgICAgIFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAqIGVkaXRpbmcvY29j
b2EvRm9udEF0dHJpYnV0ZXNDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRBdHRyaWJ1
dGVzOjpjcmVhdGVEaWN0aW9uYXJ5IGNvbnN0KTogRGl0dG8uCisgICAgICAgICogcGFnZS9pb3Mv
RnJhbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aW50ZXJwcmV0YXRpb25zRm9y
Q3VycmVudFJvb3QgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TZWFy
Y2hQb3B1cE1lbnVDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNhdmVSZWNlbnRTZWFyY2hl
cyk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVOU0RhdGFBcnJheSBjb25z
dCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNl
bnNlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQ0RNU2Vzc2lvbkFWQ29udGVudEtleVNlc3Npb24ubW06CisgICAgICAgIChXZWJDb3JlOjpD
RE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbjo6dXBkYXRlKTogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vz
c2lvbi5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25BVlN0cmVhbVNlc3Npb246OnVw
ZGF0ZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW06CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0Rm9y
VVJMKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hOjpzZXRWYWx1ZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYTo6c2V0S2V5VGltZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VGltaW5nRnVuY3Rpb25zKTogRGl0dG8uCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0Nv
Y29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNP
bkxheWVyKTogTW92ZWQgYWxtb3N0IHRoZSB3aG9sZQorICAgICAgICBmdW5jdGlvbiBpbnRvIGEg
Y2FsbCB0byBjcmVhdGVOU0FycmF5LiBSZW1vdmVkIHRoZSBkZWZhdWx0IGNhc2UgZnJvbQorICAg
ICAgICB0aGUgc3dpdGNoIHNvIHdlIGdldCBhIHdhcm5pbmcgaWYgd2UgbWlzcyBhbnkgZmlsdGVy
IG9wZXJhdGlvbiB0eXBlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29h
L1BsYXRmb3JtQ0FMYXllckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxh
eWVyQ29jb2E6OnNldFN1YmxheWVycyk6IFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAqIHBs
YXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybVBhc3RlYm9hcmQ6OndyaXRlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vaW9z
L1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6bWVk
aWFTZWxlY3Rpb25PcHRpb25zKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXRm
b3JtUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2Fy
ZDo6d3JpdGUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIubW06CisgICAgICAgIChtZWRpYVNlbGVjdGlvbk9wdGlvbnMpOiBEaXR0by4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNv
Y29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzZXRDb29r
aWVzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9SZXNvdXJjZVJl
cXVlc3RDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG9VcGRh
dGVQbGF0Zm9ybVJlcXVlc3QpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lvbi5oOgorICAgICAgICBVc2UgdGhlIE9iamVjdGl2ZS1D
IHR5cGUgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIGluIHRoZSBfZGF0YVRhc2tzCisgICAg
ICAgIHNldCByYXRoZXIgdGhhbiB1c2luZyBDRlR5cGVSZWYuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Npb24ubW06CisgICAgICAgICgtW1dlYkNv
cmVOU1VSTFNlc3Npb24gZGVhbGxvY10pOiBSZW1vdmUgbm93LXVubmVlZGVkIHR5cGVjYXN0Lgor
ICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uIHRhc2tDb21wbGV0ZWQ6XSk6IERpdHRvLgor
ICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uIGZpbmlzaFRhc2tzQW5kSW52YWxpZGF0ZV0p
OiBVc2UgYSBtb3JlIGlkaW9tYXRpYworICAgICAgICBmb3JtIG9mIGNhcHR1cmluZyBzdHJvbmdT
ZWxmIGluIGEgbGFtYmRhLgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uIGludmFsaWRh
dGVBbmRDYW5jZWxdKTogVXBkYXRlZCB0aGUgdHlwZSBvbiBhCisgICAgICAgIGxvY2FsIHZhcmlh
YmxlIGFuZCByZW1vdmVkIG5vdy11bm5lZWRlZCB0eXBlY2FzdC4KKyAgICAgICAgKC1bV2ViQ29y
ZU5TVVJMU2Vzc2lvbiBnZXRUYXNrc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpdKTogVXNlIFJldGFp
blB0cgorICAgICAgICB0byBjdXQgZG93biBvbiBhdXRvcmVsZWFzZS4gVXNlIGNyZWF0ZU5TQXJy
YXksIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlCisgICAgICAgIGZhY3QgdGhhdCBpdCB3b3JrcyBv
biBIYXNoU2V0LiBSZW1vdmVkIG5vdy11bm5lZWRlZCB0eXBlY2FzdC4KKyAgICAgICAgKC1bV2Vi
Q29yZU5TVVJMU2Vzc2lvbiBnZXRBbGxUYXNrc1dpdGhDb21wbGV0aW9uSGFuZGxlcjpdKTogRGl0
dG8uCisgICAgICAgICgtW1dlYkNvcmVOU1VSTFNlc3Npb24gZGF0YVRhc2tXaXRoUmVxdWVzdDpd
KTogUmVtb3ZlIG5vdy11bm5lZWRlZCB0eXBlY2FzdC4KKyAgICAgICAgKC1bV2ViQ29yZU5TVVJM
U2Vzc2lvbiBkYXRhVGFza1dpdGhVUkw6XSk6IERpdHRvLgorCiAyMDIwLTA0LTE5ICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBPcHRpb25hbDxG
bG9hdFF1YWQ+IGluIFRyYW5zZm9ybVN0YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU5ZDdiOTZlOGU2OWYzMjg5
YzViOGNhMzg1NTkxY2UyOWM0NmYyNjIuLjYyYzk2YTRhZWU3ZDI5OGJjOWZlZjMxYzNiNTU2MWUz
ZDY4NWFlNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUgQEAKKzIwMjAtMDQtMTkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gVXNlIGNyZWF0ZU5TQXJy
YXkgaW4gbWFueSBtb3JlIHBsYWNlcyB0aGF0IGJ1aWxkIE5TQXJyYXkgb2JqZWN0cyBmcm9tIEMr
KyBjb2xsZWN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjEwNzAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybS9jb2NvYS9QYXltZW50QXV0aG9yaXphdGlvblByZXNlbnRlci5tbToK
KyAgICAgICAgKFdlYktpdDo6dG9OU0Vycm9ycyk6IFVzZSBjcmVhdGVOU0FycmF5IGFuZCByZXR1
cm4gYSBSZXRhaW5QdHIgdG8gY3V0IGRvd24KKyAgICAgICAgb24gYXV0b3JlbGVhc2UuCisgICAg
ICAgIChXZWJLaXQ6OnRvUEtTaGlwcGluZ01ldGhvZHMpOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6UGF5bWVudEF1dGhvcml6YXRpb25QcmVzZW50ZXI6OmNvbXBsZXRlUGF5bWVudFNlc3Npb24p
OiBVcGRhdGVkIGZvciBSZXRhaW5QdHIuCisgICAgICAgIChXZWJLaXQ6OlBheW1lbnRBdXRob3Jp
emF0aW9uUHJlc2VudGVyOjpjb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbik6IERpdHRv
LgorCisgICAgICAgICogU2hhcmVkL0FwcGxlUGF5L2NvY29hL1dlYlBheW1lbnRDb29yZGluYXRv
clByb3h5Q29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBheW1lbnRDb29yZGluYXRvclBy
b3h5OjpwbGF0Zm9ybVBheW1lbnRSZXF1ZXN0KTogVXNlIGNyZWF0ZU5TQXJyYXkuCisgICAgICAg
IEFsc28gcmVtb3ZlZCBjb2RlIHRvIHN1cHBvcnQgcGxhdGZvcm1zIHdpdGhvdXQgLXNldFRodW1i
bmFpbFVSTHM6IHNpbmNlIHdlIGRvbid0CisgICAgICAgIGhhdmUgdGhvc2UgYW55IG1vcmUuCisK
KyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVByb3BlcnR5
QXBwbGllci5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBs
aWVyOjp1cGRhdGVDaGlsZHJlbik6IFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tIVFRQQ29va2llU3RvcmUubW06CisgICAgICAgIChjb3JlQ29va2ll
c1RvTlNDb29raWVzKTsgRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1By
b2Nlc3NQb29sLm1tOgorICAgICAgICAoK1tXS1Byb2Nlc3NQb29sIF9hbGxQcm9jZXNzUG9vbHNG
b3JUZXN0aW5nXSk6IERpdHRvLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dp
dGhDb25maWd1cmF0aW9uOmNvbXBsZXRpb246XSk6IEN1dCBkb3duIG9uCisgICAgICAgIHJlcGVh
dGVkIGNvZGUgYnkgYWRkaW5nIGEgbGFtYmRhIHRvIGNyZWF0ZSBhIF9XS1RleHRNYW5pcHVsYXRp
b25JdGVtIGFuZCBieSB1c2luZworICAgICAgICBjcmVhdGVOU0FycmF5LgorICAgICAgICAod2tU
ZXh0TWFuaXB1bGF0aW9uRXJyb3JzKTogVXNlIGNyZWF0ZU5TQXJyYXkuIEFsc28gdGlnaHRlbiB1
cCB0aGUgY29kZSB0aGF0IG1hcHMKKyAgICAgICAgV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6Ok1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlIHRvIHRoZQorICAgICAgICBfV0tUZXh0
TWFuaXB1bGF0aW9uSXRlbUVycm9yIGNvZGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tOgorICAgICAgICAoLVtXS1dlYnBhZ2VQcmVmZXJl
bmNlcyBfY3VzdG9tSGVhZGVyRmllbGRzXSk6IFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVJlY29yZC5tbToKKyAgICAgICAgKC1b
V0tXZWJzaXRlRGF0YVJlY29yZCBfb3JpZ2luc1N0cmluZ3NdKTogRGl0dG8uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW06CisgICAgICAgICgtW1dL
V2Vic2l0ZURhdGFTdG9yZSBfZ2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5Ol0p
OiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS0Rvd25sb2FkLm1tOgor
ICAgICAgICAoLVtfV0tEb3dubG9hZCByZWRpcmVjdENoYWluXSk6IERpdHRvLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLRnJhbWVUcmVlTm9kZS5tbToKKyAgICAgICAgKC1bX1dL
RnJhbWVUcmVlTm9kZSBjaGlsZEZyYW1lc10pOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbToKKyAgICAgICAgKC1bX1dL
UHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uIGFkZGl0aW9uYWxSZWFkQWNjZXNzQWxsb3dlZFVSTHNd
KTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGhpcmRQYXJ0eS5tbToKKyAgICAgICAgKC1bX1dLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1RoaXJkUGFydHkgdW5kZXJGaXJzdFBhcnRpZXNdKTogRGl0dG8uCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3SU9TLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2Fj
Y2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6d2l0aFRleHQ6Y29tcGxl
dGlvbkhhbmRsZXI6XSk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0
aW9uU3RhdGUubW06CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlv
bkNsaWVudDo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KTogRGl0dG8uCisgICAgICAgICogVUlQ
cm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5j
ZURhdGEubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZv
cm1hbmNlRGF0YTo6ZGF0YSk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvRHJhZ0Ry
b3BJbnRlcmFjdGlvblN0YXRlLm1tOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVUYXJnZXRlZERy
YWdQcmV2aWV3KTogRGl0dG8uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfdXBkYXRlVGFwSGln
aGxpZ2h0XSk6IFJlbW92ZWQgdW5lZWRlZCBSZXRhaW5QdHIgbG9jYWwgdmFyaWFibGUuCisgICAg
ICAgIFVzZSBjcmVhdGVOU0FycmF5LiBSZWZhY3RvcmVkIHRvIG1ha2UgdGhlICJhbGwgcmVjdGls
aW5lYXIiIGNhc2UgbW9yZSBwYXJhbGxlbAorICAgICAgICB0byB0aGUgZ2VuZXJhbCBjYXNlLgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHdlYlNlbGVjdGlvblJlY3RzRm9yU2VsZWN0aW9uUmVj
dHM6XSk6IFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAod2tUZXh0U2VsZWN0aW9uUmVjdHMp
OiBEaXR0by4KKyAgICAgICAgKGNyZWF0ZVRhcmdldGVkUHJldmlldyk6IERpdHRvLgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IF9wcmVzZW50YXRpb25SZWN0c0ZvclByZXZpZXdJdGVtQ29udHJv
bGxlcjpdKTogRGl0dG8uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNs
aWVudC5tbToKKyAgICAgICAgKC1bV0tUZXh0RmluZGVyQ2xpZW50IGRpZEZpbmRTdHJpbmdNYXRj
aGVzV2l0aFJlY3RzOmRpZFdyYXBBcm91bmQ6XSk6IFVzZSBjcmVhdGVOU0FycmF5LgorCisgICAg
ICAgICogVUlQcm9jZXNzL21hYy9XS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIubW06CisgICAg
ICAgICgtW1dLVGV4dElucHV0VmlldyB2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0XSk6IFVz
ZSArW05TQXJyYXkgYXJyYXlCeUFkZGluZ09iamVjdDpdLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW06Cisg
ICAgICAgIChjb2xsZWN0SWNvbnMpOiBVc2UgY3JlYXRlTlNBcnJheS4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2Vy
Q29udGV4dENvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dz
ZXJDb250ZXh0Q29udHJvbGxlciBfc2V0Rm9ybURlbGVnYXRlOl0pOiBNYXJrZWQgY2xhc3MgaGVy
ZQorICAgICAgICBhcyBmaW5hbC4gQ3V0IGRvd24gb24gbG9jYWwgdmFyaWFibGVzIGEgYml0LiBV
c2UgY3JlYXRlTlNBcnJheS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVM
YXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbToKKyAgICAgICAgKFdlYktpdDo6
YWRkQW5pbWF0aW9uVG9MYXllcik6IFJlbW92ZWQgdW5uZWNlc3NhcnkgdXNlIG9mIFJldGFpblB0
ci4gVXNlIGNyZWF0ZU5TQXJyYXkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
QmFja0ZvcndhcmRMaXN0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2Fy
ZExpc3RQcm94eTo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHkpOiBBZGRkIGEgRklYTUUgYWJvdXQK
KyAgICAgICAgYSBwcm9ibGVtIEkgbm90aWNlZCwgdW5yZWxhdGVkIHRvIHRoZSByZXN0IG9mIHRo
ZSBjaGFuZ2VzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2li
aWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tOgorICAgICAgICAoLVtXS0FjY2Vzc2liaWxpdHlXZWJQ
YWdlT2JqZWN0IGFjY2Vzc2liaWxpdHlQYXJhbWV0ZXJpemVkQXR0cmlidXRlTmFtZXNdKTogVXNl
IGNyZWF0ZU5TQXJyYXkuCisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29j
b2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnJlZ2lzdGVyV2l0aFN0YXRlRHVt
cGVyKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OmFjdGl2ZVBhZ2VzT3JpZ2lucyk6IERpdHRv
LgorCiAyMDIwLTA0LTE5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgV0tTY3JpcHRNZXNzYWdlSGFuZGxlciBBUEkgdGhhdCBhc3luY2hyb25vdXNseSBy
ZXNwb25kcyB3aXRoIGEgcHJvbWlzZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
aW9zL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZwppbmRleCA5
MmRkMzc1OWE4MTljYjY1OTMwZDY2YWQ1Y2FlYzYxZTVlOWIzNTFkLi4wNDI4Yzk1ZjA2OTgxMmFk
ZDQ2YzJjNzNmNTBlMzRjN2FmNDA5YmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMjAtMDQtMTkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFtDb2NvYV0gVXNlIGNyZWF0ZU5TQXJyYXkgaW4gbWFueSBtb3JlIHBsYWNl
cyB0aGF0IGJ1aWxkIE5TQXJyYXkgb2JqZWN0cyBmcm9tIEMrKyBjb2xsZWN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNzAyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUlPUy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNGb3JD
b3JlUmFuZ2U6XSk6IFVzZSBjcmVhdGVOU0FycmF5LgorCiAyMDIwLTA0LTE4ICBSb2IgQnVpcyAg
PHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmVkdWNlIHBhcmFtZXRlciBsaXN0IG9mIHRo
ZSBGcmFtZUxvYWRSZXF1ZXN0IGNvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
aW5kZXggYWZkYjA4NWFmOGU5MGFjNzc0NWIwYmRiMTI0Yjk3NzFhODBiMDE3ZS4uMWM0NWVmNzQ0
NWVkMjU1MmIwNTI2YTgyNTQwZGVmZDQ5MDU1ODQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIwLTA0LTE5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIFVzZSBjcmVhdGVOU0FycmF5IGluIG1hbnkgbW9y
ZSBwbGFjZXMgdGhhdCBidWlsZCBOU0FycmF5IG9iamVjdHMgZnJvbSBDKysgY29sbGVjdGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDcwMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RP
TS5tbToKKyAgICAgICAgKGtpdCk6IFVzZSBjcmVhdGVOU0FycmF5LgorICAgICAgICAoLVtET01O
b2RlIGdldFByZXZpZXdTbmFwc2hvdEltYWdlOmFuZFJlY3RzOl0pOiBEaXR0by4gQWxzbyB1c2Ug
bWFrZU5TQXJyYXlFbGVtZW50CisgICAgICAgIHRvIGNvbnZlcnQgRmxvYXRSZWN0IHRvIGFuIE5T
VmFsdWUgY29udGFpbmluZyBhIENHUmVjdCwgYXZvaWRpbmcgdXNlIG9mCisgICAgICAgICtbTlNW
YWx1ZSB2YWx1ZTp3aXRoT2JqQ1R5cGU6XSwgd2hpbGUgd29ya2luZyBvbiBtYWNPUyB3aGVyZSAr
W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0Ol0KKyAgICAgICAgaXMgbm90IHBhcnQgb2YgQVBJLgor
CisgICAgICAgICogSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW06CisgICAgICAgICgtW1dl
YkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5UmVwcmVzZW50YXRpb25dKTogVXNlIGNyZWF0ZU5T
QXJyYXksIGZld2VyIGxvY2FsCisgICAgICAgIHZhcmlhYmxlcywgYW5kIHVzZSBjb25zdGV4cHIg
aW5zdGVhZCBvZiAjZGVmaW5lLgorICAgICAgICAoLVtXZWJCYWNrRm9yd2FyZExpc3Qgc2V0VG9N
YXRjaERpY3Rpb25hcnlSZXByZXNlbnRhdGlvbjpdKTogVXNlIGFkb3B0TlMgaW5zdGVhZAorICAg
ICAgICBvZiBleHBsaWNpdCByZWxlYXNlIGFuZCByZWZlcmVuY2UgaW5zdGVhZCBvZiBwb2ludGVy
LgorICAgICAgICAodmVjdG9yVG9OU0FycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViQmFj
a0ZvcndhcmRMaXN0IGJhY2tMaXN0V2l0aExpbWl0Ol0pOiBVc2UgY3JlYXRlTlNBcnJheS4gQWxz
byB1c2UgUmV0YWluUHRyIGZvcgorICAgICAgICB0aGUgImhhY2siIGhlcmUgcmF0aGVyIHRoYW4g
ZXhwbGljaXQgcmV0YWluL3JlbGVhc2UgY2FsbHMuCisgICAgICAgICgtW1dlYkJhY2tGb3J3YXJk
TGlzdCBmb3J3YXJkTGlzdFdpdGhMaW1pdDpdKTogRGl0dG8uCisKKyAgICAgICAgKiBIaXN0b3J5
L1dlYkhpc3RvcnlJdGVtLm1tOgorICAgICAgICAoa2l0KTogQWRkZWQgYSByZXRhaW4vYXV0b3Jl
bGVhc2UgcGFpciB0aGF0IGlzIGltcG9ydGFudCB0byBoYXZlIHByZWRpY3RhYmxlIGxpZmV0aW1l
LgorICAgICAgICAoLVtXZWJIaXN0b3J5SXRlbSBpbml0V2l0aFVSTFN0cmluZzp0aXRsZTpkaXNw
bGF5VGl0bGU6bGFzdFZpc2l0ZWRUaW1lSW50ZXJ2YWw6XSk6CisgICAgICAgIEFkZGVkIGEgbWlz
c2luZyBudWxsIGNoZWNrLgorICAgICAgICAoLVtXZWJIaXN0b3J5SXRlbSBpbml0V2l0aFdlYkNv
cmVIaXN0b3J5SXRlbTpdKTogQWRkZWQgYSBGSVhNRSBhYm91dCBzb21ldGhpbmcgSQorICAgICAg
ICBub3RpY2VkIHRoYXQgaXMgbm90IHJlbGF0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhpcyBwYXRjaC4K
KyAgICAgICAgKC1bV2ViSGlzdG9yeUl0ZW0gY2hpbGRyZW5dKTogVXNlIGNyZWF0ZU5TQXJyYXku
CisgICAgICAgICgtW1dlYkhpc3RvcnlJdGVtIF9yZWRpcmVjdFVSTHNdKTogRGl0dG8uCisKKyAg
ICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAgICAoY3JlYXRlTlNDb3Vu
dGVkU2V0KTogQWRkZWQuIE1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9sZCBjb2RlIGJlY2F1c2Ug
aXQgZG9lc24ndAorICAgICAgICBjcmVhdGUgbWFueSBOU1N0cmluZyBvYmplY3RzIGZvciBlYWNo
IGtleSwgYnV0IGFsc28gc2hhcmVkIGJldHdlZW4gZnVuY3Rpb25zLgorICAgICAgICAoK1tXZWJD
b3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c10pOiBVc2Ug
Y3JlYXRlTlNDb3VudGVkU2V0LgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2Ny
aXB0T2JqZWN0VHlwZUNvdW50c10pOiBEaXR0by4KKworICAgICAgICAqIE1pc2MvV2ViTlNQYXN0
ZWJvYXJkRXh0cmFzLm1tOgorICAgICAgICAoLVtOU1Bhc3RlYm9hcmQgX3dlYl9kZWNsYXJlQW5k
V3JpdGVEcmFnSW1hZ2VGb3JFbGVtZW50OlVSTDp0aXRsZTphcmNoaXZlOnNvdXJjZTpdKToKKyAg
ICAgICAgVXNlIEBbXSBpbnN0ZWFkIG9mIE5TTXV0YWJsZUFycmF5CisKKyAgICAgICAgKiBTdG9y
YWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbToKKyAgICAgICAgKC1bV2ViRGF0YWJhc2VNYW5hZ2Vy
IG9yaWdpbnNdKTogVXNlIGNyZWF0ZU5TQXJyYXkuCisgICAgICAgICogU3RvcmFnZS9XZWJTdG9y
YWdlTWFuYWdlci5tbToKKyAgICAgICAgKC1bV2ViU3RvcmFnZU1hbmFnZXIgb3JpZ2luc10pOiBE
aXR0by4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hlLm1tOgor
ICAgICAgICAoK1tXZWJBcHBsaWNhdGlvbkNhY2hlIG9yaWdpbnNXaXRoQ2FjaGVdKTogRGl0dG8u
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAo
V2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW06Cisg
ICAgICAgIChXZWJOb3RpZmljYXRpb25DbGllbnQ6OmNsZWFyTm90aWZpY2F0aW9ucyk6IERpdHRv
LgorICAgICAgICAqIFdlYlZpZXcvV2ViQXJjaGl2ZS5tbToKKyAgICAgICAgKC1bV2ViQXJjaGl2
ZSBzdWJyZXNvdXJjZXNdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkFyY2hpdmUgc3ViZnJhbWVB
cmNoaXZlc10pOiBEaXR0by4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkRhdGFTb3VyY2UubW06Cisg
ICAgICAgICgtW1dlYkRhdGFTb3VyY2Ugc3VicmVzb3VyY2VzXSk6IERpdHRvLgorCisgICAgICAg
ICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX25vZGVzRnJvbUxp
c3Q6XSk6IERlbGV0ZWQuIFRoaXMgd2FzIG5vdCBkZWNsYXJlZCBpbiBhbnkgaGVhZGVyIGFuZAor
ICAgICAgICB3YXMgYWxzbyB1bnVzZWQuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lVmll
dy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWVWaWV3IGluaXRXaXRoRnJhbWU6XSk6IEFkZGVkIGEg
RklYTUUgYWJvdXQgc29tZXRoaW5nIEkgbm90aWNlZCB0aGF0IGlzCisgICAgICAgIG5vdCByZWxh
dGVkIHRvIHRoZSByZXN0IG9mIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhU
TUxSZXByZXNlbnRhdGlvbi5tbToKKyAgICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGNv
bnRyb2xzSW5Gb3JtOl0pOiBVc2UgY3JlYXRlTlNBcnJheS4KKworICAgICAgICAqIFdlYlZpZXcv
V2ViSFRNTFZpZXcubW06CisgICAgICAgIChjcmVhdGVNZW51SXRlbXMpOiBVc2UgY3JlYXRlTlNB
cnJheS4gQWxzbyBtb3ZlZCB1cCBpbiB0aGUgZmlsZS4KKyAgICAgICAgKGNyZWF0ZU1lbnVJdGVt
KTogUmVtb3ZlZCB1bm5lZWRlZCBsb2NhbCB2YXJpYWJsZS4KKworICAgICAgICAqIFdlYlZpZXcv
V2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVUlUZXh0SW5kaWNhdG9yRGF0YSBpbml0V2l0aElt
YWdlOnRleHRJbmRpY2F0b3JEYXRhOnNjYWxlOl0pOgorICAgICAgICBVc2UgY3JlYXRlTlNBcnJh
eS4KKwogMjAyMC0wNC0xOCAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAg
IFJlZHVjZSBwYXJhbWV0ZXIgbGlzdCBvZiB0aGUgRnJhbWVMb2FkUmVxdWVzdCBjb25zdHJ1Y3Rv
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY29jb2EvVmVjdG9yQ29jb2EuaCBiL1NvdXJj
ZS9XVEYvd3RmL2NvY29hL1ZlY3RvckNvY29hLmgKaW5kZXggYjhjOTU2YTY4YTQzNDMxNTNmMTZh
M2M4OGJhZDYzNTU1YzYzZDdjOC4uNjViNTQ2ZTEyMmJiNmU0OGVjMjQ2YzBhNjNmODRiYjE0MmFk
MWI2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY29jb2EvVmVjdG9yQ29jb2EuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oCkBAIC0zNCw0MSArMzQsNDcgQEAg
bmFtZXNwYWNlIFdURiB7CiAKIC8vIFNwZWNpYWxpemUgdGhlIGJlaGF2aW9yIG9mIHRoZXNlIGZ1
bmN0aW9ucyBieSBvdmVybG9hZGluZyB0aGUgbWFrZU5TQXJyYXlFbGVtZW50CiAvLyBmdW5jdGlv
bnMgYW5kIG1ha2VWZWN0b3JFbGVtZW50IGZ1bmN0aW9ucy4gVGhlIG1ha2VOU0FycmF5RWxlbWVu
dCBmdW5jdGlvbiB0YWtlcwotLy8gYSBjb25zdCYgdG8gYSB2ZWN0b3IgZWxlbWVudCBhbmQgY2Fu
IHJldHVybiBlaXRoZXIgYSBSZXRhaW5QdHI8aWQ+IG9yIGFuIGlkCisvLyBhIGNvbnN0JiB0byBh
IGNvbGxlY3Rpb24gZWxlbWVudCBhbmQgY2FuIHJldHVybiBlaXRoZXIgYSBSZXRhaW5QdHI8aWQ+
IG9yIGFuIGlkCiAvLyBpZiB0aGUgdmFsdWUgaXMgYXV0b3JlbGVhc2VkLiBUaGUgbWFrZVZlY3Rv
ckVsZW1lbnQgZnVuY3Rpb24gdGFrZXMgYW4gaWdub3JlZAogLy8gcG9pbnRlciB0byB0aGUgdmVj
dG9yIGVsZW1lbnQgdHlwZSwgbWFraW5nIGFyZ3VtZW50LWRlcGVuZGVudCBsb29rdXAgd29yaywg
YW5kIGFuCiAvLyBpZCBmb3IgdGhlIGFycmF5IGVsZW1lbnQsIGFuZCByZXR1cm5zIGFuIE9wdGlv
bmFsPFQ+IG9mIHRoZSB0aGUgdmVjdG9yIGVsZW1lbnQsCiAvLyBhbGxvd2luZyB1cyB0byBmaWx0
ZXIgb3V0IGFycmF5IGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBvZiB0aGUgZXhwZWN0ZWQgdHlwZS4K
IC8vCi0vLyAgICBSZXRhaW5QdHI8aWQ+IG1ha2VOU0FycmF5RWxlbWVudChjb25zdCBWZWN0b3JF
bGVtZW50VHlwZSYgdmVjdG9yRWxlbWVudCk7CisvLyAgICBSZXRhaW5QdHI8aWQ+IG1ha2VOU0Fy
cmF5RWxlbWVudChjb25zdCBDb2xsZWN0aW9uRWxlbWVudFR5cGUmIGNvbGxlY3Rpb25FbGVtZW50
KTsKIC8vICAgICAgICAtb3ItCiAvLyAgICBpZCBtYWtlTlNBcnJheUVsZW1lbnQoY29uc3QgVmVj
dG9yRWxlbWVudFR5cGUmIHZlY3RvckVsZW1lbnQpOwogLy8KIC8vICAgIE9wdGlvbmFsPFZlY3Rv
ckVsZW1lbnRUeXBlPiBtYWtlVmVjdG9yRWxlbWVudChjb25zdCBWZWN0b3JFbGVtZW50VHlwZSos
IGlkIGFycmF5RWxlbWVudCk7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+IFJldGFp
blB0cjxOU0FycmF5PiBjcmVhdGVOU0FycmF5KGNvbnN0IFZlY3RvclR5cGUmKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPiBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNBcnJh
eShDb2xsZWN0aW9uVHlwZSYmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvckVsZW1lbnRUeXBl
PiBWZWN0b3I8VmVjdG9yRWxlbWVudFR5cGU+IG1ha2VWZWN0b3IoTlNBcnJheSAqKTsKIAogLy8g
VGhpcyBvdmVybG9hZCBvZiBjcmVhdGVOU0FycmF5IHRha2VzIGEgZnVuY3Rpb24gdG8gbWFwIGVh
Y2ggdmVjdG9yIGVsZW1lbnQgdG8gYW4gT2JqZWN0aXZlLUMgb2JqZWN0LgogLy8gVGhlIG1hcCBm
dW5jdGlvbiBoYXMgdGhlIHNhbWUgaW50ZXJmYWNlIGFzIHRoZSBtYWtlTlNBcnJheUVsZW1lbnQg
ZnVuY3Rpb24gYWJvdmUsIGJ1dCBjYW4gYmUgYW55CiAvLyBmdW5jdGlvbiBpbmNsdWRpbmcgYSBs
YW1iZGEsIGEgZnVuY3Rpb24tbGlrZSBvYmplY3QsIG9yIEZ1bmN0aW9uPD4uCi10ZW1wbGF0ZTx0
eXBlbmFtZSBWZWN0b3JUeXBlLCB0eXBlbmFtZSBNYXBGdW5jdGlvblR5cGU+IFJldGFpblB0cjxO
U0FycmF5PiBjcmVhdGVOU0FycmF5KGNvbnN0IFZlY3RvclR5cGUmLCBjb25zdCBNYXBGdW5jdGlv
blR5cGUmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlLCB0eXBlbmFtZSBNYXBG
dW5jdGlvblR5cGU+IFJldGFpblB0cjxOU0FycmF5PiBjcmVhdGVOU0FycmF5KENvbGxlY3Rpb25U
eXBlJiYsIGNvbnN0IE1hcEZ1bmN0aW9uVHlwZSYpOwogCiAvLyBJbXBsZW1lbnRhdGlvbiBkZXRh
aWxzIG9mIHRoZSBmdW5jdGlvbiB0ZW1wbGF0ZXMgYWJvdmUuCiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFZlY3RvclR5cGU+IFJldGFpblB0cjxOU0FycmF5PiBjcmVhdGVOU0FycmF5KGNvbnN0IFZlY3Rv
clR5cGUmIHZlY3RvcikKK2lubGluZSB2b2lkIGFkZFVubGVzc05pbChOU011dGFibGVBcnJheSAq
YXJyYXksIGlkIHZhbHVlKQogewotICAgIGF1dG8gYXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6dmVjdG9yLnNpemUoKV0pOwotICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpnZXRQdHIo
bWFrZU5TQXJyYXlFbGVtZW50KGVsZW1lbnQpKV07CisgICAgaWYgKHZhbHVlKQorICAgICAgICBb
YXJyYXkgYWRkT2JqZWN0OnZhbHVlXTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlv
blR5cGU+IFJldGFpblB0cjxOU0FycmF5PiBjcmVhdGVOU0FycmF5KENvbGxlY3Rpb25UeXBlJiYg
Y29sbGVjdGlvbikKK3sKKyAgICBhdXRvIGFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnN0ZDo6c2l6ZShjb2xsZWN0aW9uKV0pOworICAgIGZv
ciAoYXV0byYmIGVsZW1lbnQgOiBjb2xsZWN0aW9uKQorICAgICAgICBhZGRVbmxlc3NOaWwoYXJy
YXkuZ2V0KCksIGdldFB0cihtYWtlTlNBcnJheUVsZW1lbnQoc3RkOjpmb3J3YXJkPGRlY2x0eXBl
KGVsZW1lbnQpPihlbGVtZW50KSkpKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFZlY3RvclR5cGUsIHR5cGVuYW1lIE1hcEZ1bmN0aW9uVHlwZT4gUmV0YWluUHRy
PE5TQXJyYXk+IGNyZWF0ZU5TQXJyYXkoY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yLCBjb25zdCBN
YXBGdW5jdGlvblR5cGUmIGZ1bmN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5
cGUsIHR5cGVuYW1lIE1hcEZ1bmN0aW9uVHlwZT4gUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5T
QXJyYXkoQ29sbGVjdGlvblR5cGUmJiBjb2xsZWN0aW9uLCBjb25zdCBNYXBGdW5jdGlvblR5cGUm
IGZ1bmN0aW9uKQogewotICAgIGF1dG8gYXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6dmVjdG9yLnNpemUoKV0pOwotICAgIGZvciAoYXV0byYg
ZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpnZXRQdHIoZnVuY3Rp
b24oZWxlbWVudCkpXTsKKyAgICBhdXRvIGFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnN0ZDo6c2l6ZShjb2xsZWN0aW9uKV0pOworICAgIGZv
ciAoYXV0byYmIGVsZW1lbnQgOiBjb2xsZWN0aW9uKQorICAgICAgICBhZGRVbmxlc3NOaWwoYXJy
YXkuZ2V0KCksIGdldFB0cihmdW5jdGlvbihzdGQ6OmZvcndhcmQ8ZGVjbHR5cGUoZWxlbWVudCk+
KGVsZW1lbnQpKSkpOwogICAgIHJldHVybiBhcnJheTsKIH0KIApAQCAtODcsNCArOTMsNSBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JFbGVtZW50VHlwZT4gVmVjdG9yPFZlY3RvckVsZW1lbnRU
eXBlPiBtYWtlVmVjdG9yKE5TQXJyYQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAordXNpbmcgV1RG
OjpjcmVhdGVOU0FycmF5OwogdXNpbmcgV1RGOjptYWtlVmVjdG9yOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbQppbmRleCBlNGYzOGUxNDMwMjdiYWU5ZGNhMTFkN2MyNzU2
NWRlOGI2NzkyMGUyLi5mZTNlMWY4ZDE2YzY1YzYwMzVhMTUzMzQwY2U1NTBjY2EyMDUyMDU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQpAQCAtNDUsNyArNDUsNiBA
QAogI2ltcG9ydCAiSFRNTElucHV0RWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCiAj
aW1wb3J0ICJJbnRSZWN0LmgiCi0jaW1wb3J0ICJJbnRTaXplLmgiCiAjaW1wb3J0ICJMb2NhbGl6
ZWRTdHJpbmdzLmgiCiAjaW1wb3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJSYW5nZS5oIgpAQCAtNTks
OCArNTgsOCBAQAogI2ltcG9ydCAiV0FLV2luZG93LmgiCiAjaW1wb3J0ICJXZWJDb3JlVGhyZWFk
LmgiCiAjaW1wb3J0ICJWaXNpYmxlVW5pdHMuaCIKLQogI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRl
eHQuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiBlbnVtIHsKICAgICBO
U0F0dGFjaG1lbnRDaGFyYWN0ZXIgPSAweGZmZmMgICAgLyogVG8gZGVub3RlIGF0dGFjaG1lbnRz
LiAqLwpAQCAtMTc3MywyMCArMTc3MiwxNyBAQCAtIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUZs
b3dUb0VsZW1lbnRzCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIGNoaWxkcmVuOwogICAgIHNlbGYuYXhCYWNraW5nT2JqZWN0LT5hcmlhRmxvd1Rv
RWxlbWVudHMoY2hpbGRyZW4pOwogICAgIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGNoaWxkcmVu
LnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJy
YXlXaXRoQ2FwYWNpdHk6bGVuZ3RoXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIg
PSBjaGlsZHJlbltpXS0+d3JhcHBlcigpOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KGNoaWxk
cmVuLCBbXSAoYXV0byYgY2hpbGQpIC0+IGlkIHsKKyAgICAgICAgYXV0byB3cmFwcGVyID0gY2hp
bGQtPndyYXBwZXIoKTsKICAgICAgICAgQVNTRVJUKHdyYXBwZXIpOwotICAgICAgICBpZiAoIXdy
YXBwZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoY2hpbGRyZW5baV0t
PmlzQXR0YWNobWVudCgpICYmIFt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XSkKLSAgICAgICAgICAg
IFthcnJheSBhZGRPYmplY3Q6W3dyYXBwZXIgYXR0YWNobWVudFZpZXddXTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDp3cmFwcGVyXTsKLSAgICB9Ci0gICAgcmV0
dXJuIGFycmF5OworICAgICAgICBpZiAoY2hpbGQtPmlzQXR0YWNobWVudCgpKSB7CisgICAgICAg
ICAgICBpZiAoYXV0byBhdHRhY2htZW50VmlldyA9IHdyYXBwZXIuYXR0YWNobWVudFZpZXcpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGF0dGFjaG1lbnRWaWV3OworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHdyYXBwZXI7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoaWQpYWNj
ZXNzaWJpbGl0eUxpbmtlZEVsZW1lbnQKQEAgLTI3MjcsMzEgKzI3MjMsMTggQEAgLSAoTlNBcnJh
eSAqKXRleHRSZWN0c0Zyb21NYXJrZXJzOihOU0FycmF5ICopbWFya2VycyB3aXRoVGV4dDooTlNT
dHJpbmcgKil0ZXh0CiB7CiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxs
XSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
W3NlbGYgcmFuZ2VGcm9tTWFya2VyczptYXJrZXJzIHdpdGhUZXh0OnRleHRdOworCisgICAgYXV0
byByYW5nZSA9IFtzZWxmIHJhbmdlRnJvbU1hcmtlcnM6bWFya2VycyB3aXRoVGV4dDp0ZXh0XTsK
ICAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICAKLSAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gc2VsZWN0aW9uUmVj
dHM7Ci0gICAgcmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9y
TGluZXMoc2VsZWN0aW9uUmVjdHMpOwotICAgIHJldHVybiBbc2VsZiByZWN0c0ZvclNlbGVjdGlv
blJlY3RzOnNlbGVjdGlvblJlY3RzXTsKLX0KIAotLSAoTlNBcnJheSAqKXJlY3RzRm9yU2VsZWN0
aW9uUmVjdHM6KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYpc2VsZWN0aW9u
UmVjdHMKLXsKLSAgICB1bnNpZ25lZCBzaXplID0gc2VsZWN0aW9uUmVjdHMuc2l6ZSgpOwotICAg
IGlmICghc2l6ZSkKKyAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gcmVjdHM7Cisg
ICAgcmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMo
cmVjdHMpOworICAgIGlmIChyZWN0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgCi0gICAgTlNNdXRhYmxlQXJyYXkgKnJlY3RzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0
aENhcGFjaXR5OnNpemVdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKysp
IHsKLSAgICAgICAgY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9uUmVjdCYgY29yZVJlY3QgPSBzZWxl
Y3Rpb25SZWN0c1tpXTsKLSAgICAgICAgYXV0byBzZWxlY3Rpb25SZWN0ID0gRmxvYXRSZWN0KGNv
cmVSZWN0LnJlY3QoKSk7Ci0gICAgICAgIENHUmVjdCByZWN0ID0gW3NlbGYgY29udmVydFJlY3RU
b1NwYWNlOnNlbGVjdGlvblJlY3Qgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6
U2NyZWVuXTsKLSAgICAgICAgW3JlY3RzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0
OnJlY3RdXTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlY3RzOworICAgIHJldHVybiBjcmVh
dGVOU0FycmF5KHJlY3RzLCBbJl0gKGF1dG8mIHJlY3QpIHsKKyAgICAgICAgcmV0dXJuIFtOU1Zh
bHVlIHZhbHVlV2l0aFJlY3Q6W3NlbGYgY29udmVydFJlY3RUb1NwYWNlOkZsb2F0UmVjdChyZWN0
LnJlY3QoKSkgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6U2NyZWVuXV07Cisg
ICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIg
Kil0ZXh0TWFya2VyRm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFz
ZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlLmgKaW5kZXggOWUxNjA0YWI4M2ViNWMyYjgyOWFmMmNjZjFjNDFmNjYz
YTQzNDU1Mi4uNjY4NTNmM2Y2Mzc0YzQ1MTFlMzBlMGFmZTkxMzcxMWYzMTA1NGQ1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLmgKQEAgLTI2LDkgKzI2LDYgQEAKICAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2VfaAotI2RlZmluZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2VfaAotCiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIgogI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9Db3JlR3JhcGhpY3MuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC04Miw5ICs3
OSw5IEBAIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIC0gKHZvaWQpYWNjZXNzaWJpbGl0eVBvc3Rl
ZE5vdGlmaWNhdGlvbjooTlNTdHJpbmcgKilub3RpZmljYXRpb25OYW1lOwogLSAodm9pZClhY2Nl
c3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOihOU1N0cmluZyAqKW5vdGlmaWNhdGlvbk5hbWUg
dXNlckluZm86KE5TRGljdGlvbmFyeSAqKXVzZXJJbmZvOwogCi0tIChDR1BhdGhSZWYpY29udmVy
dFBhdGhUb1NjcmVlblNwYWNlOihXZWJDb3JlOjpQYXRoICYpcGF0aDsKKy0gKENHUGF0aFJlZilj
b252ZXJ0UGF0aFRvU2NyZWVuU3BhY2U6KGNvbnN0IFdlYkNvcmU6OlBhdGgmKXBhdGg7CiAKLS0g
KENHUmVjdCljb252ZXJ0UmVjdFRvU3BhY2U6KFdlYkNvcmU6OkZsb2F0UmVjdCAmKXJlY3Qgc3Bh
Y2U6KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2Upc3BhY2U7CistIChDR1Jl
Y3QpY29udmVydFJlY3RUb1NwYWNlOihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKXJlY3Qgc3Bh
Y2U6KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2Upc3BhY2U7CiAKIC8vIE1h
dGggcmVsYXRlZCBmdW5jdGlvbnMKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5TWF0aFBvc3Rz
Y3JpcHRQYWlyczsKQEAgLTk5LDUgKzk2LDMgQEAgZXh0ZXJuIE5TQXJyYXkgKmNvbnZlcnRUb05T
QXJyYXkoY29uc3QgV2ViQ29yZTo6QVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGQKICNl
bmRpZgogCiBAZW5kCi0KLSNlbmRpZiAvLyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJh
c2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlLm1tCmluZGV4IDcxODgy
Yjg1YWQzMzllMGI0ZjJhODY3ZDgxYjMxNjUzMWYyY2U0ZmYuLjhjN2Q1Y2MzNDFmZDNiY2YxY2U0
MTU4YjIxN2NiNGVlM2RjZmI3MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckJhc2UubW0KQEAgLTY4LDEwICs2OCwxMiBAQAogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNv
Y29hLmg+CiAKICNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0ICJXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5oIgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvSElTZXJ2aWNlc1NQSS5oPgog
I2Vsc2UKICNpbXBvcnQgIldBS1ZpZXcuaCIKICNpbXBvcnQgIldBS1dpbmRvdy5oIgorI2ltcG9y
dCAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaCIKICNlbmRpZgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKQEAgLTI0OSwzNSArMjUxLDM0IEBAIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKIHN0YXRpYyBOU0FycmF5ICpjb252ZXJ0TWF0aFBhaXJzVG9OU0FycmF5KGNv
bnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWly
cyYgcGFpcnMsIE5TU3RyaW5nICpzdWJzY3JpcHRLZXksIE5TU3RyaW5nICpzdXBlcnNjcmlwdEtl
eSkKIHsKLSAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlX
aXRoQ2FwYWNpdHk6cGFpcnMuc2l6ZSgpXTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBw
YWlycykgewotICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpwYWlyRGljdGlvbmFyeSA9IFtO
U011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwotICAgICAgICBpZiAocGFpci5maXJzdCAm
JiBwYWlyLmZpcnN0LT53cmFwcGVyKCkgJiYgIXBhaXIuZmlyc3QtPmFjY2Vzc2liaWxpdHlJc0ln
bm9yZWQoKSkKLSAgICAgICAgICAgIFtwYWlyRGljdGlvbmFyeSBzZXRPYmplY3Q6cGFpci5maXJz
dC0+d3JhcHBlcigpIGZvcktleTpzdWJzY3JpcHRLZXldOwotICAgICAgICBpZiAocGFpci5zZWNv
bmQgJiYgcGFpci5zZWNvbmQtPndyYXBwZXIoKSAmJiAhcGFpci5zZWNvbmQtPmFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSkKLSAgICAgICAgICAgIFtwYWlyRGljdGlvbmFyeSBzZXRPYmplY3Q6cGFp
ci5zZWNvbmQtPndyYXBwZXIoKSBmb3JLZXk6c3VwZXJzY3JpcHRLZXldOwotICAgICAgICBbYXJy
YXkgYWRkT2JqZWN0OnBhaXJEaWN0aW9uYXJ5XTsKLSAgICB9Ci0gICAgcmV0dXJuIGFycmF5Owot
fQotCi1zdGF0aWMgdm9pZCBhZGRDaGlsZFRvQXJyYXkoQVhDb3JlT2JqZWN0JiBjaGlsZCwgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5PiBhcnJheSkKLXsKLSAgICBXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciAqd3JhcHBlciA9IGNoaWxkLndyYXBwZXIoKTsKLSAgICAvLyBXZSB3YW50IHRv
IHJldHVybiB0aGUgYXR0YWNobWVudCB2aWV3IGluc3RlYWQgb2YgdGhlIG9iamVjdCByZXByZXNl
bnRpbmcgdGhlIGF0dGFjaG1lbnQsCi0gICAgLy8gb3RoZXJ3aXNlLCB3ZSBnZXQgcGFsaW5kcm9t
ZSBlcnJvcnMgaW4gdGhlIEFYIGhpZXJhcmNoeS4KLSAgICBpZiAoY2hpbGQuaXNBdHRhY2htZW50
KCkgJiYgW3dyYXBwZXIgYXR0YWNobWVudFZpZXddKQotICAgICAgICBbYXJyYXkuZ2V0KCkgYWRk
T2JqZWN0Olt3cmFwcGVyIGF0dGFjaG1lbnRWaWV3XV07Ci0gICAgZWxzZSBpZiAod3JhcHBlcikK
LSAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDp3cmFwcGVyXTsKKyAgICByZXR1cm4gY3Jl
YXRlTlNBcnJheShwYWlycywgWyZdIChhdXRvJiBwYWlyKSB7CisgICAgICAgIFdlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyICp3cmFwcGVyc1syXTsKKyAgICAgICAgTlNTdHJpbmcgKmtleXNb
Ml07CisgICAgICAgIE5TVUludGVnZXIgY291bnQgPSAwOworICAgICAgICBpZiAocGFpci5maXJz
dCAmJiBwYWlyLmZpcnN0LT53cmFwcGVyKCkgJiYgIXBhaXIuZmlyc3QtPmFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSkgeworICAgICAgICAgICAgd3JhcHBlcnNbMF0gPSBwYWlyLmZpcnN0LT53cmFw
cGVyKCk7CisgICAgICAgICAgICBrZXlzWzBdID0gc3Vic2NyaXB0S2V5OworICAgICAgICAgICAg
Y291bnQgPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChwYWlyLnNlY29uZCAmJiBwYWlyLnNl
Y29uZC0+d3JhcHBlcigpICYmICFwYWlyLnNlY29uZC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgp
KSB7CisgICAgICAgICAgICB3cmFwcGVyc1tjb3VudF0gPSBwYWlyLnNlY29uZC0+d3JhcHBlcigp
OworICAgICAgICAgICAga2V5c1tjb3VudF0gPSBzdXBlcnNjcmlwdEtleTsKKyAgICAgICAgICAg
IGNvdW50ICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tOU0RpY3Rp
b25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czp3cmFwcGVycyBmb3JLZXlzOmtleXMgY291bnQ6
Y291bnRdKTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiBOU0FycmF5ICpjb252ZXJ0VG9O
U0FycmF5KGNvbnN0IFdlYkNvcmU6OkFYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJiBjaGlsZHJlbikKIHsKLSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjaGlsZHJlbi5zaXplKCldOwotICAg
IGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKLSAgICAgICAgYWRkQ2hpbGRUb0Fy
cmF5KCpjaGlsZCwgcmVzdWx0KTsKLSAgICByZXR1cm4gW3Jlc3VsdCBhdXRvcmVsZWFzZV07Cisg
ICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoY2hpbGRyZW4sIFtdIChhdXRvJiBjaGlsZCkgLT4gaWQg
eworICAgICAgICBhdXRvIHdyYXBwZXIgPSBjaGlsZC0+d3JhcHBlcigpOworICAgICAgICAvLyBX
ZSB3YW50IHRvIHJldHVybiB0aGUgYXR0YWNobWVudCB2aWV3IGluc3RlYWQgb2YgdGhlIG9iamVj
dCByZXByZXNlbnRpbmcgdGhlIGF0dGFjaG1lbnQsCisgICAgICAgIC8vIG90aGVyd2lzZSwgd2Ug
Z2V0IHBhbGluZHJvbWUgZXJyb3JzIGluIHRoZSBBWCBoaWVyYXJjaHkuCisgICAgICAgIGlmIChj
aGlsZC0+aXNBdHRhY2htZW50KCkgJiYgd3JhcHBlci5hdHRhY2htZW50VmlldykKKyAgICAgICAg
ICAgIHJldHVybiB3cmFwcGVyLmF0dGFjaG1lbnRWaWV3OworICAgICAgICByZXR1cm4gd3JhcHBl
cjsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiBAaW1wbGVtZW50YXRpb24gV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlCkBAIC00NDYsNyArNDQ3LDcgQEAgc3RhdGljIHZvaWQg
Y29udmVydFBhdGhUb1NjcmVlblNwYWNlRnVuY3Rpb24oUGF0aENvbnZlcnNpb25JbmZvJiBjb252
ZXJzaW9uLCBjb24KICAgICB9CiB9CiAKLS0gKENHUGF0aFJlZiljb252ZXJ0UGF0aFRvU2NyZWVu
U3BhY2U6KFBhdGggJilwYXRoCistIChDR1BhdGhSZWYpY29udmVydFBhdGhUb1NjcmVlblNwYWNl
Oihjb25zdCBQYXRoJilwYXRoCiB7CiAgICAgUGF0aENvbnZlcnNpb25JbmZvIGNvbnZlcnNpb24g
PSB7IHNlbGYsIENHUGF0aENyZWF0ZU11dGFibGUoKSB9OwogICAgIHBhdGguYXBwbHkoWyZjb252
ZXJzaW9uXShjb25zdCBQYXRoRWxlbWVudCYgcGF0aEVsZW1lbnQpIHsKQEAgLTQ2Myw3ICs0NjQs
NyBAQCAtIChpZClfYWNjZXNzaWJpbGl0eVdlYkRvY3VtZW50VmlldwogICAgIHJldHVybiBuaWw7
CiB9CiAKLS0gKENHUmVjdCljb252ZXJ0UmVjdFRvU3BhY2U6KFdlYkNvcmU6OkZsb2F0UmVjdCAm
KXJlY3Qgc3BhY2U6KEFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2Upc3BhY2UKKy0gKENHUmVj
dCljb252ZXJ0UmVjdFRvU3BhY2U6KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpcmVjdCBzcGFj
ZTooQWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZSlzcGFjZQogewogICAgIGlmICghc2VsZi5h
eEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCBkMWZlMjZjMTFkZGQ4MmRhMmQ0YmM1ODcy
YzBhNjFlNDFiZTBhODJjLi45MDJiNmNjZjE4NjQyZDcyY2QwNGVlNDU0NTgzOWFmNjIyZDY4NTQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQpAQCAtMzkzMSwxNiAr
MzkzMSwxMiBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAg
ICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09i
amVjdDsKICAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbmlsOwotCiAgICAgICAgICAgICBhdXRvIHJhbmdlcyA9IGJhY2tpbmdPYmplY3QtPmZp
bmRUZXh0UmFuZ2VzKGNyaXRlcmlhKTsKICAgICAgICAgICAgIGlmIChyYW5nZXMuaXNFbXB0eSgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICBOU011dGFibGVBcnJh
eSAqbWFya2VycyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpyYW5nZXMuc2l6
ZSgpXTsKLSAgICAgICAgICAgIGZvciAoYXV0byByYW5nZSA6IHJhbmdlcykgewotICAgICAgICAg
ICAgICAgIGlmIChpZCBtYXJrZXIgPSBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9t
UmFuZ2U6cmFuZ2VdKQotICAgICAgICAgICAgICAgICAgICBbbWFya2VycyBhZGRPYmplY3Q6bWFy
a2VyXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtYXJrZXJzOworICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocmFuZ2VzLCBbJl0gKGF1dG8mIHJhbmdlKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21S
YW5nZTpyYW5nZV07CisgICAgICAgICAgICB9KS5hdXRvcmVsZWFzZSgpOwogICAgICAgICB9KTsK
ICAgICB9CiAKQEAgLTM5NTUsMTAgKzM5NTEsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICAgICAgfSk7CiAgICAgICAgIGlmIChvcGVyYXRpb25SZXN1bHQuaXNF
bXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgTlNNdXRhYmxlQXJyYXkg
KnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpvcGVyYXRpb25SZXN1
bHQuc2l6ZSgpXTsKLSAgICAgICAgZm9yIChhdXRvIHN0ciA6IG9wZXJhdGlvblJlc3VsdCkKLSAg
ICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OnN0cl07Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybiBjcmVhdGVOU0FycmF5KG9wZXJhdGlvblJlc3VsdCkuYXV0b3JlbGVh
c2UoKTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Q291bnRGb3JTZWFyY2hQcmVkaWNhdGVQYXJhbWV0ZXJpemVkQXR0
cmlidXRlXSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9Gb250
QXR0cmlidXRlc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9Gb250QXR0
cmlidXRlc0NvY29hLm1tCmluZGV4IGY2ZjkyYTRjOWQ0Zjk2YmFkODM5N2ZhMjNmYmQ1MjBlZGYy
OTMwMjguLmQxODMzMzQyMzBhYzg2ODllOTZjMGQ0ODQ2NGQ4MTVhNzkxZjFhNTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRm9udEF0dHJpYnV0ZXNDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0ZvbnRBdHRyaWJ1dGVzQ29jb2EubW0K
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiQ29sb3JDb2NvYS5oIgogI2ltcG9ydCA8cGFs
L3NwaS9jb2NvYS9OU0F0dHJpYnV0ZWRTdHJpbmdTUEkuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgPHBhbC9p
b3MvVUlLaXRTb2Z0TGluay5oPgpAQCAtMTI5LDEwICsxMzAsOSBAQCBSZXRhaW5QdHI8TlNEaWN0
aW9uYXJ5PiBGb250QXR0cmlidXRlczo6Y3JlYXRlRGljdGlvbmFyeSgpIGNvbnN0CiAgICAgfQog
CiAgICAgaWYgKCF0ZXh0TGlzdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gdGV4dExpc3RB
cnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTp0
ZXh0TGlzdHMuc2l6ZSgpXSk7Ci0gICAgICAgIGZvciAoYXV0byYgdGV4dExpc3QgOiB0ZXh0TGlz
dHMpCi0gICAgICAgICAgICBbdGV4dExpc3RBcnJheSBhZGRPYmplY3Q6dGV4dExpc3QuY3JlYXRl
VGV4dExpc3QoKS5nZXQoKV07Ci0gICAgICAgIFtzdHlsZSBzZXRUZXh0TGlzdHM6dGV4dExpc3RB
cnJheS5nZXQoKV07CisgICAgICAgIFtzdHlsZSBzZXRUZXh0TGlzdHM6Y3JlYXRlTlNBcnJheSh0
ZXh0TGlzdHMsIFtdIChhdXRvJiB0ZXh0TGlzdCkgeworICAgICAgICAgICAgcmV0dXJuIHRleHRM
aXN0LmNyZWF0ZVRleHRMaXN0KCk7CisgICAgICAgIH0pLmdldCgpXTsKICAgICB9CiAKICAgICBh
dHRyaWJ1dGVzW05TUGFyYWdyYXBoU3R5bGVBdHRyaWJ1dGVOYW1lXSA9IHN0eWxlLmdldCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCBhMjA3Y2IwOWI4MDYxZTdkMTk0OTk1
NDVmY2QxNWNhZmZkM2Q0MzEwLi4xMmJmNzVlNzk2NTE1YjY3ODIwZWRkY2YwYzQzMGNhNjY5ZjFi
YmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtNjgsNiArNjgsNyBAQAog
I2ltcG9ydCAiV0FLV2luZG93LmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4K
ICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvY29jb2Ev
VmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKQEAgLTc4OSwxMSArNzkwLDkgQEAgTlNBcnJh
eSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKICAgICAgICAg
ICAgIGFwcGVuZChpbnRlcnByZXRhdGlvbiwgdGV4dEFmdGVyTGFzdE1hcmtlcik7CiAgICAgfQog
Ci0gICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0g
ICAgZm9yIChhdXRvJiBpbnRlcnByZXRhdGlvbiA6IGludGVycHJldGF0aW9ucykKLSAgICAgICAg
W3Jlc3VsdCBhZGRPYmplY3Q6YWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJh
Y3RlcnM6cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bmljaGFyKj4oaW50ZXJwcmV0YXRpb24uZGF0
YSgpKSBsZW5ndGg6aW50ZXJwcmV0YXRpb24uc2l6ZSgpXSkuZ2V0KCldOwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShpbnRlcnByZXRhdGlvbnMsIFtdIChh
dXRvJiBpbnRlcnByZXRhdGlvbikgeworICAgICAgICByZXR1cm4gYWRvcHROUyhbW05TU3RyaW5n
IGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnM6cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bmljaGFy
Kj4oaW50ZXJwcmV0YXRpb24uZGF0YSgpKSBsZW5ndGg6aW50ZXJwcmV0YXRpb24uc2l6ZSgpXSk7
CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogdm9pZCBGcmFtZTo6dmlld3BvcnRPZmZzZXRD
aGFuZ2VkKFZpZXdwb3J0T2Zmc2V0Q2hhbmdlVHlwZSBjaGFuZ2VUeXBlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2VhcmNoUG9wdXBNZW51Q29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TZWFyY2hQb3B1cE1lbnVDb2NvYS5tbQppbmRl
eCA1MjkzNzQ5ZjU0N2UzMzE1OWQ3Y2UwYjQ0ZjMwZWNjODllYWNhMTY1Li4zYmRmNDk1OWNiNjAx
YTc2ZTNhMzI5ZGZhYTMyN2M0MjMxMzE5OGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9TZWFyY2hQb3B1cE1lbnVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9TZWFyY2hQb3B1cE1lbnVDb2NvYS5tbQpAQCAtMjYsNiArMjYsOCBA
QAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJTZWFyY2hQb3B1cE1lbnVDb2NvYS5oIgog
CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBkYXRlS2V5ID0gQCJkYXRlIjsKQEAgLTE0Myw2
ICsxNDUsNyBAQCB2b2lkIHNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFZlY3RvcjxSZWNlbnRTZWFyY2g+JiBzZWFyY2hJdAogCiAgICAgUmV0YWluUHRyPE5TRGlj
dGlvbmFyeT4gcmVjZW50U2VhcmNoZXNQbGlzdCA9IHJlYWRTZWFyY2hGaWVsZFJlY2VudFNlYXJj
aGVzUGxpc3QoKTsKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gaXRlbXNEaWN0
aW9uYXJ5ID0gW3JlY2VudFNlYXJjaGVzUGxpc3Qgb2JqZWN0Rm9yS2V5Oml0ZW1zS2V5XTsKKwog
ICAgIC8vIFRoZSBOU011dGFibGVEaWN0aW9uYXJ5IG1ldGhvZCB3ZSB1c2UgdG8gcmVhZCB0aGUg
cHJvcGVydHkgbGlzdCBndWFyYW50ZWVzIHdlIGdldCBvbmx5CiAgICAgLy8gbXV0YWJsZSBjb250
YWluZXJzLCBidXQgaXQgZG9lcyBub3QgZ3VhcmFudGVlIHRoZSBmaWxlIGhhcyBhIGRpY3Rpb25h
cnkgYXMgZXhwZWN0ZWQuCiAgICAgaWYgKCFbaXRlbXNEaWN0aW9uYXJ5IGlzS2luZE9mQ2xhc3M6
W05TRGljdGlvbmFyeSBjbGFzc11dKSB7CkBAIC0xNTMsMTAgKzE1Niw5IEBAIHZvaWQgc2F2ZVJl
Y2VudFNlYXJjaGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPFJlY2VudFNlYXJj
aD4mIHNlYXJjaEl0CiAgICAgaWYgKHNlYXJjaEl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgW2l0
ZW1zRGljdGlvbmFyeSByZW1vdmVPYmplY3RGb3JLZXk6bmFtZV07CiAgICAgZWxzZSB7Ci0gICAg
ICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gaXRlbXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2VhcmNoSXRlbXMuc2l6ZSgpXSk7Ci0gICAg
ICAgIGZvciAoYXV0byYgc2VhcmNoSXRlbSA6IHNlYXJjaEl0ZW1zKQotICAgICAgICAgICAgW2l0
ZW1zIGFkZE9iamVjdDphZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVj
dHNBbmRLZXlzOnNlYXJjaEl0ZW0uc3RyaW5nLCBzZWFyY2hTdHJpbmdLZXksIHRvTlNEYXRlRnJv
bVN5c3RlbUNsb2NrKHNlYXJjaEl0ZW0udGltZSksIGRhdGVLZXksIG5pbF0pLmdldCgpXTsKLQor
ICAgICAgICBhdXRvIGl0ZW1zID0gY3JlYXRlTlNBcnJheShzZWFyY2hJdGVtcywgW10gKGF1dG8m
IGl0ZW0pIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdE5TKFtbTlNEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOml0ZW0uc3RyaW5nLCBzZWFyY2hTdHJpbmdLZXksIHRv
TlNEYXRlRnJvbVN5c3RlbUNsb2NrKGl0ZW0udGltZSksIGRhdGVLZXksIG5pbF0pOworICAgICAg
ICB9KTsKICAgICAgICAgW2l0ZW1zRGljdGlvbmFyeSBzZXRPYmplY3Q6YWRvcHROUyhbW05TRGlj
dGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czppdGVtcy5nZXQoKSwgc2VhcmNo
ZXNLZXksIG5pbF0pLmdldCgpIGZvcktleTpuYW1lXTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0KaW5kZXggNGNhZGU1
ZjBmNDQ0YTdjZjRmZjg1NDUyOWY0MzMwNmY4ZmZkODFmYS4uMzQzODk3YWIyNzQyYzljNjI1NjE0
OTZjZWU0ZTRlZGNlMmU0OWFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbXBvcnQgPHN0cmluZy5oPgog
I2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2Nv
YS5oPgogCiBAaW50ZXJmYWNlIFdlYkNvcmVTaGFyZWRCdWZmZXJEYXRhIDogTlNEYXRhCiAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhEYXRhU2VnbWVudDooY29uc3QgV2ViQ29yZTo6U2hhcmVkQnVm
ZmVyOjpEYXRhU2VnbWVudCYpZGF0YVNlZ21lbnQgcG9zaXRpb246KE5TVUludGVnZXIpcG9zaXRp
b247CkBAIC0xMTUsMTAgKzExNiw5IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlRnJvbVJlYWRpbmdGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCiAKIFJldGFp
blB0cjxOU0FycmF5PiBTaGFyZWRCdWZmZXI6OmNyZWF0ZU5TRGF0YUFycmF5KCkgY29uc3QKIHsK
LSAgICBhdXRvIGRhdGFBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhDYXBhY2l0eTptX3NlZ21lbnRzLnNpemUoKV0pOwotICAgIGZvciAoY29uc3QgYXV0byYg
c2VnbWVudCA6IG1fc2VnbWVudHMpCi0gICAgICAgIFtkYXRhQXJyYXkgYWRkT2JqZWN0OnNlZ21l
bnQuc2VnbWVudC0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCldOwotICAgIHJldHVybiBXVEZNb3ZlKGRh
dGFBcnJheSk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkobV9zZWdtZW50cywgW10gKGF1dG8m
IHNlZ21lbnQpIHsKKyAgICAgICAgcmV0dXJuIHNlZ21lbnQuc2VnbWVudC0+Y3JlYXRlTlNEYXRh
KCk7CisgICAgfSk7CiB9CiAKIFJldGFpblB0cjxOU0RhdGE+IFNoYXJlZEJ1ZmZlcjo6RGF0YVNl
Z21lbnQ6OmNyZWF0ZU5TRGF0YSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3Ry
ZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCmluZGV4
IGJmN2YzOGRlYjUwOGRiNmY4YWQ2YWFlYTA1NjY0MGEwNGE3NTM1OGMuLmU2YWFiYzkyYmExOTlk
NTM0N2U2NzlkZjFiNmFhM2VjZDI4ODQwNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCkBA
IC00Myw2ICs0Myw3IEBACiAjaW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgogI2ltcG9ydCA8d3Rm
L0pTT05WYWx1ZXMuaD4KICNpbXBvcnQgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KKyNpbXBvcnQgPHd0
Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CiAjaW1w
b3J0IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKQEAgLTY5MiwxMCArNjkzLDYgQEAgc3RhdGlj
IGJvb2wgaXNFcXVhbChjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBk
YXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBMaWNlbnNlVHlwZSwgUmVmPFNoYXJlZEJ1ZmZlcj4m
JiByZXNwb25zZURhdGEsIExpY2Vuc2VVcGRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAg
IGlmICghbV9leHBpcmVkU2Vzc2lvbnMuaXNFbXB0eSgpICYmIGlzRXF1YWwocmVzcG9uc2VEYXRh
LCAiYWNrbm93bGVkZ2VkIl9zKSkgewotICAgICAgICBhdXRvIGV4cGlyZWRTZXNzaW9ucyA9IGFk
b3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgICAgICBmb3IgKGF1dG8m
IHNlc3Npb24gOiBtX2V4cGlyZWRTZXNzaW9ucykKLSAgICAgICAgICAgIFtleHBpcmVkU2Vzc2lv
bnMgYWRkT2JqZWN0OnNlc3Npb24uZ2V0KCldOwotCiAgICAgICAgIGF1dG8qIGNlcnRpZmljYXRl
ID0gbV9pbnN0YW5jZS0+c2VydmVyQ2VydGlmaWNhdGUoKTsKICAgICAgICAgYXV0byogc3RvcmFn
ZVVSTCA9IG1faW5zdGFuY2UtPnN0b3JhZ2VVUkwoKTsKIApAQCAtNzA2LDcgKzcwMywxMCBAQCB2
b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGlj
ZW5zZShjb25zdCBTdHJpbmcmLCBMaQogICAgICAgICB9CiAKICAgICAgICAgREVCVUdfTE9HX0lG
X1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJcImFja25vd2xlZGdlZFwiLCBTdWNjZWVkZWQsIHJl
bW92aW5nIGV4cGlyZWQgc2Vzc2lvbiByZXBvcnQiKTsKLSAgICAgICAgUmV0YWluUHRyPE5TRGF0
YT4gYXBwSWRlbnRpZmllciA9IGNlcnRpZmljYXRlLT5jcmVhdGVOU0RhdGEoKTsKKyAgICAgICAg
YXV0byBleHBpcmVkU2Vzc2lvbnMgPSBjcmVhdGVOU0FycmF5KG1fZXhwaXJlZFNlc3Npb25zLCBb
XSAoYXV0byYgZGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuZ2V0KCk7CisgICAgICAg
IH0pOworICAgICAgICBhdXRvIGFwcElkZW50aWZpZXIgPSBjZXJ0aWZpY2F0ZS0+Y3JlYXRlTlNE
YXRhKCk7CiAgICAgICAgIFtQQUw6OmdldEFWQ29udGVudEtleVNlc3Npb25DbGFzcygpIHJlbW92
ZVBlbmRpbmdFeHBpcmVkU2Vzc2lvblJlcG9ydHM6ZXhwaXJlZFNlc3Npb25zLmdldCgpIHdpdGhB
cHBJZGVudGlmaWVyOmFwcElkZW50aWZpZXIuZ2V0KCkgc3RvcmFnZURpcmVjdG9yeUF0VVJMOnN0
b3JhZ2VVUkxdOwogICAgICAgICBjYWxsYmFjayhmYWxzZSwgeyB9LCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCwgU3VjY2VlZGVkKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lv
bkFWQ29udGVudEtleVNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbQppbmRl
eCBkNDM2YmU3NzcyM2Y2NGE0YWUxODllMGJjY2ViYjI5Mzc5ZTczNzVmLi4yNjRjNzY0ZGM0NDZm
ODU4ZWU3NTJhY2FjOWE5NGQyNGU1NDllOGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNzaW9uQVZDb250ZW50S2V5
U2Vzc2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9DRE1TZXNzaW9uQVZDb250ZW50S2V5U2Vzc2lvbi5tbQpAQCAtNDMsNiArNDMs
NyBAQAogI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KICNpbXBvcnQgPHBhbC9zcGkvY29j
b2EvQVZGb3VuZGF0aW9uU1BJLmg+CiAjaW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgorI2ltcG9y
dCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKICNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5k
YXRpb25Tb2Z0TGluay5oPgogCkBAIC0yODIsMTQgKzI4Myw5IEBAIGJvb2wgQ0RNU2Vzc2lvbkFW
Q29udGVudEtleVNlc3Npb246OnVwZGF0ZShVaW50OEFycmF5KiBrZXksIFJlZlB0cjxVaW50OEFy
cmF5PiYKIAogICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBvcHRpb25zOwogICAgICAg
ICBpZiAoIW1fcHJvdG9jb2xWZXJzaW9ucy5pc0VtcHR5KCkgJiYgUEFMOjpjYW5Mb2FkX0FWRm91
bmRhdGlvbl9BVkNvbnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xWZXJzaW9uc0tleSgpKSB7Ci0gICAg
ICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHByb3RvY29sVmVyc2lvbnNPcHRpb24g
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgdmVyc2lvbiA6IG1fcHJvdG9jb2xWZXJzaW9ucykgewotICAgICAgICAgICAgICAg
IGlmICghdmVyc2lvbikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgW3Byb3RvY29sVmVyc2lvbnNPcHRpb24gYWRkT2JqZWN0OkAodmVyc2lvbildOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBvcHRpb25zID0gQHsgQVZDb250ZW50S2V5UmVxdWVz
dFByb3RvY29sVmVyc2lvbnNLZXk6IHByb3RvY29sVmVyc2lvbnNPcHRpb24uZ2V0KCkgfTsKKyAg
ICAgICAgICAgIG9wdGlvbnMgPSBAeyBBVkNvbnRlbnRLZXlSZXF1ZXN0UHJvdG9jb2xWZXJzaW9u
c0tleTogY3JlYXRlTlNBcnJheShtX3Byb3RvY29sVmVyc2lvbnMsIFtdIChpbnQgdmVyc2lvbikg
LT4gTlNOdW1iZXIgKiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHZlcnNpb24gPyBAKHZlcnNp
b24pIDogbmlsOworICAgICAgICAgICAgfSkuZ2V0KCkgfTsKICAgICAgICAgfQogCiAgICAgICAg
IGVycm9yQ29kZSA9IE1lZGlhUGxheWVyOjpOb0Vycm9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWU3Ry
ZWFtU2Vzc2lvbi5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL0NETVNlc3Npb25BVlN0cmVhbVNlc3Npb24ubW0KaW5kZXggMTM4ZTJmZDk0N2U4
MjVmYzA5MzFmOGY3NzRkMjQ0OWVmNDEyNGI5ZC4uODk2YTI0NTIyYjhjNjJmYzM1MjRjMzQzNzg4
ZTQzMzZkMGJkZWZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNU2Vzc2lvbkFWU3RyZWFtU2Vzc2lvbi5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1TZXNz
aW9uQVZTdHJlYW1TZXNzaW9uLm1tCkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0IDxwYWwvc3Bp
L2NvY29hL0FWRm91bmRhdGlvblNQSS5oPgogI2ltcG9ydCA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNp
bXBvcnQgPHd0Zi9VVUlELmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAog
I2ltcG9ydCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CiAKQEAgLTIyNiwxNCAr
MjI3LDkgQEAgYm9vbCBDRE1TZXNzaW9uQVZTdHJlYW1TZXNzaW9uOjp1cGRhdGUoVWludDhBcnJh
eSoga2V5LCBSZWZQdHI8VWludDhBcnJheT4mIG5leHQKIAogICAgICAgICBSZXRhaW5QdHI8TlNE
aWN0aW9uYXJ5PiBvcHRpb25zOwogICAgICAgICBpZiAoIW1fcHJvdG9jb2xWZXJzaW9ucy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcHJvdG9jb2xW
ZXJzaW9uc09wdGlvbiA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwot
ICAgICAgICAgICAgZm9yIChhdXRvJiB2ZXJzaW9uIDogbV9wcm90b2NvbFZlcnNpb25zKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCF2ZXJzaW9uKQotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICBbcHJvdG9jb2xWZXJzaW9uc09wdGlvbiBhZGRPYmplY3Q6QCh2
ZXJzaW9uKV07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG9wdGlvbnMgPSBAeyBBVlN0
cmVhbURhdGFQYXJzZXJDb250ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXk6IHByb3Rv
Y29sVmVyc2lvbnNPcHRpb24uZ2V0KCkgfTsKKyAgICAgICAgICAgIG9wdGlvbnMgPSBAeyBBVlN0
cmVhbURhdGFQYXJzZXJDb250ZW50S2V5UmVxdWVzdFByb3RvY29sVmVyc2lvbnNLZXk6IGNyZWF0
ZU5TQXJyYXkobV9wcm90b2NvbFZlcnNpb25zLCBbXSAoaW50IHZlcnNpb24pIC0+IE5TTnVtYmVy
ICogeworICAgICAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uID8gQCh2ZXJzaW9uKSA6IG5pbDsK
KyAgICAgICAgICAgIH0pLmdldCgpIH07CiAgICAgICAgIH0KIAogICAgICAgICBOU0Vycm9yKiBl
cnJvciA9IG5pbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCmluZGV4IGYwMDY5MDhmYzk5NDc2ZTM1
MjFjYjQ0ODRjMGQ4YWM5MDEyMmViNDQuLjA5ZmFjZjI1NTVkMzAyZTMxODQyODE1NjE4YmM3MDkx
MzdkOTVlNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpAQCAtNjcsNiArNjcsMTYgQEAKICNp
bXBvcnQgIldlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCAiV2ViQ29yZUNBTGF5
ZXJFeHRyYXMuaCIKICNpbXBvcnQgIldlYkNvcmVOU1VSTFNlc3Npb24uaCIKKyNpbXBvcnQgPEFW
Rm91bmRhdGlvbi9BVkFzc2V0SW1hZ2VHZW5lcmF0b3IuaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlv
bi9BVkFzc2V0VHJhY2suaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVk1lZGlhU2VsZWN0aW9u
R3JvdXAuaD4KKyNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVk1ldGFkYXRhSXRlbS5oPgorI2ltcG9y
dCA8QVZGb3VuZGF0aW9uL0FWUGxheWVyLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5
ZXJJdGVtLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJJdGVtT3V0cHV0Lmg+Cisj
aW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJJdGVtVHJhY2suaD4KKyNpbXBvcnQgPEFWRm91
bmRhdGlvbi9BVlBsYXllckxheWVyLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZUaW1lLmg+
CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9EYXRhVmlldy5oPgogI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlu
bGluZXMuaD4KQEAgLTg0LDIzICs5NCwxMyBAQAogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAjaW1wb3J0IDx3dGYvT1NPYmplY3RQdHIuaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNp
bXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiAjaWYgRU5BQkxFKEFWRl9DQVBUSU9OUykKICNpbmNsdWRlICJUZXh0VHJhY2suaCIK
ICNlbmRpZgogCi0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldEltYWdlR2VuZXJhdG9yLmg+
Ci0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZBc3NldFRyYWNrLmg+Ci0jaW1wb3J0IDxBVkZvdW5k
YXRpb24vQVZNZWRpYVNlbGVjdGlvbkdyb3VwLmg+Ci0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZN
ZXRhZGF0YUl0ZW0uaD4KLSNpbXBvcnQgPEFWRm91bmRhdGlvbi9BVlBsYXllci5oPgotI2ltcG9y
dCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbS5oPgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FW
UGxheWVySXRlbU91dHB1dC5oPgotI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWUGxheWVySXRlbVRy
YWNrLmg+Ci0jaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZQbGF5ZXJMYXllci5oPgotI2ltcG9ydCA8
QVZGb3VuZGF0aW9uL0FWVGltZS5oPgotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBv
cnQgIldBS0FwcEtpdFN0dWJzLmgiCiAjaW1wb3J0IDxDb3JlSW1hZ2UvQ29yZUltYWdlLmg+CkBA
IC04MjYsMjMgKzgyNiwxOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OmNyZWF0ZUFWQXNzZXRGb3JVUkwoY29uc3QgVVJMJiB1cmwpCiAgICAgfQogCiAjaWYgRU5B
QkxFKEFWRl9DQVBUSU9OUykKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtVGV4dFRy
YWNrPj4mIG91dE9mQmFuZFRyYWNrU291cmNlcyA9IHBsYXllcigpLT5vdXRPZkJhbmRUcmFja1Nv
dXJjZXMoKTsKKyAgICBhdXRvIG91dE9mQmFuZFRyYWNrU291cmNlcyA9IHBsYXllcigpLT5vdXRP
ZkJhbmRUcmFja1NvdXJjZXMoKTsKICAgICBpZiAoIW91dE9mQmFuZFRyYWNrU291cmNlcy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBvdXRPZkJhbmRUcmFj
a3MgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgZm9y
IChhdXRvJiB0cmFja1NvdXJjZSA6IG91dE9mQmFuZFRyYWNrU291cmNlcykgewotICAgICAgICAg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBsYWJlbCA9IHRyYWNrU291cmNlLT5sYWJlbCgpLmNy
ZWF0ZUNGU3RyaW5nKCk7Ci0gICAgICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGxhbmd1
YWdlID0gdHJhY2tTb3VyY2UtPmxhbmd1YWdlKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAg
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdW5pcXVlSUQgPSBTdHJpbmc6Om51bWJlcih0cmFj
a1NvdXJjZS0+dW5pcXVlSWQoKSkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICAgICAgICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdXJsID0gdHJhY2tTb3VyY2UtPnVybCgpLmNyZWF0ZUNGU3RyaW5n
KCk7Ci0gICAgICAgICAgICBbb3V0T2ZCYW5kVHJhY2tzLmdldCgpIGFkZE9iamVjdDpAewotICAg
ICAgICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJuYXRlVHJhY2tEaXNwbGF5TmFtZUtleTogKF9f
YnJpZGdlIE5TU3RyaW5nICopbGFiZWwuZ2V0KCksCi0gICAgICAgICAgICAgICAgQVZPdXRPZkJh
bmRBbHRlcm5hdGVUcmFja0V4dGVuZGVkTGFuZ3VhZ2VUYWdLZXk6IChfX2JyaWRnZSBOU1N0cmlu
ZyAqKWxhbmd1YWdlLmdldCgpLAorICAgICAgICBhdXRvIG91dE9mQmFuZFRyYWNrcyA9IGNyZWF0
ZU5TQXJyYXkob3V0T2ZCYW5kVHJhY2tTb3VyY2VzLCBbXSAoYXV0byYgdHJhY2tTb3VyY2UpIHsK
KyAgICAgICAgICAgIHJldHVybiBAeworICAgICAgICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJu
YXRlVHJhY2tEaXNwbGF5TmFtZUtleTogdHJhY2tTb3VyY2UtPmxhYmVsKCksCisgICAgICAgICAg
ICAgICAgQVZPdXRPZkJhbmRBbHRlcm5hdGVUcmFja0V4dGVuZGVkTGFuZ3VhZ2VUYWdLZXk6IHRy
YWNrU291cmNlLT5sYW5ndWFnZSgpLAogICAgICAgICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJu
YXRlVHJhY2tJc0RlZmF1bHRLZXk6IHRyYWNrU291cmNlLT5pc0RlZmF1bHQoKSA/IEBZRVMgOiBA
Tk8sCi0gICAgICAgICAgICAgICAgQVZPdXRPZkJhbmRBbHRlcm5hdGVUcmFja0lkZW50aWZpZXJL
ZXk6IChfX2JyaWRnZSBOU1N0cmluZyAqKXVuaXF1ZUlELmdldCgpLAotICAgICAgICAgICAgICAg
IEFWT3V0T2ZCYW5kQWx0ZXJuYXRlVHJhY2tTb3VyY2VLZXk6IChfX2JyaWRnZSBOU1N0cmluZyAq
KXVybC5nZXQoKSwKKyAgICAgICAgICAgICAgICBBVk91dE9mQmFuZEFsdGVybmF0ZVRyYWNrSWRl
bnRpZmllcktleTogU3RyaW5nOjpudW1iZXIodHJhY2tTb3VyY2UtPnVuaXF1ZUlkKCkpLAorICAg
ICAgICAgICAgICAgIEFWT3V0T2ZCYW5kQWx0ZXJuYXRlVHJhY2tTb3VyY2VLZXk6IHRyYWNrU291
cmNlLT51cmwoKSwKICAgICAgICAgICAgICAgICBBVk91dE9mQmFuZEFsdGVybmF0ZVRyYWNrTWVk
aWFDaGFyYWN0ZXJzdGljc0tleTogbWVkaWFEZXNjcmlwdGlvbkZvcktpbmQodHJhY2tTb3VyY2Ut
PmtpbmQoKSksCi0gICAgICAgICAgICB9XTsKLSAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgfSk7CiAKICAgICAgICAgW29wdGlvbnMuZ2V0KCkgc2V0T2JqZWN0Om91dE9mQmFuZFRy
YWNrcy5nZXQoKSBmb3JLZXk6QVZVUkxBc3NldE91dE9mQmFuZEFsdGVybmF0ZVRyYWNrc0tleV07
CiAgICAgfQpAQCAtODU3LDEwICs4NTIsOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JVUkwoY29uc3QgVVJMJiB1cmwpCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICBWZWN0b3I8Q29va2llPiBjb29raWVzOwogICAgIGlmIChw
bGF5ZXIoKS0+Z2V0UmF3Q29va2llcyh1cmwsIGNvb2tpZXMpKSB7Ci0gICAgICAgIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gbnNDb29raWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OmNvb2tpZXMuc2l6ZSgpXSk7Ci0gICAgICAgIGZvciAoYXV0
byYgY29va2llIDogY29va2llcykKLSAgICAgICAgICAgIFtuc0Nvb2tpZXMgYWRkT2JqZWN0OihO
U0hUVFBDb29raWUgKiljb29raWVdOwotCisgICAgICAgIGF1dG8gbnNDb29raWVzID0gY3JlYXRl
TlNBcnJheShjb29raWVzLCBbXSAoYXV0byYgY29va2llKSAtPiBOU0hUVFBDb29raWUgKiB7Cisg
ICAgICAgICAgICByZXR1cm4gY29va2llOworICAgICAgICB9KTsKICAgICAgICAgaWYgKFBBTDo6
Y2FuTG9hZF9BVkZvdW5kYXRpb25fQVZVUkxBc3NldEhUVFBDb29raWVzS2V5KCkpCiAgICAgICAg
ICAgICBbb3B0aW9ucyBzZXRPYmplY3Q6bnNDb29raWVzLmdldCgpIGZvcktleTpBVlVSTEFzc2V0
SFRUUENvb2tpZXNLZXldOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYS5tbQppbmRleCA0ODE2YjAwNGYxNDgxODBmYjkwMTU3OTE5Y2ViZTdiNWVkZGY1NWMwLi44
ZmIyYzEyM2ZiOTgxZWQzZjhiYzliMTg2OTUxMDY1ZjE1YWQzYmE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJU
aW1pbmdGdW5jdGlvbi5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1w
b3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVTUEkuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQ2MiwxMCArNDYzLDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkKICAgICBpZiAoYW5p
bWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGFy
cmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnZhbHVlLnNpemUoKV07Ci0g
ICAgZm9yIChhdXRvIG51bWJlciA6IHZhbHVlKQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OkAo
bnVtYmVyKV07Ci0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1h
dGlvbi5nZXQoKSkgc2V0VmFsdWVzOmFycmF5XTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFt
ZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6Y3JlYXRlTlNBcnJheSh2
YWx1ZSwgW10gKGZsb2F0IG51bWJlcikgeworICAgICAgICByZXR1cm4gQChudW1iZXIpOworICAg
IH0pLmdldCgpXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVl
cyhjb25zdCBWZWN0b3I8VHJhbnNmb3JtYXRpb25NYXRyaXg+JiB2YWx1ZSkKQEAgLTQ3MywxMCAr
NDczLDkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyhjb25zdCBW
ZWN0b3I8VHJhbnNmb3JtYXRpb25NYXRyaXg+JiB2YWwKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgp
ICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGFycmF5ID0gW05TTXV0
YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnZhbHVlLnNpemUoKV07Ci0gICAgZm9yIChhdXRv
JiBtYXRyaXggOiB2YWx1ZSkKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1
ZVdpdGhDQVRyYW5zZm9ybTNEOm1hdHJpeF1dOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1l
QW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczphcnJheV07CisgICAgW3N0
YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFs
dWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChhdXRvJiBtYXRyaXgpIHsKKyAgICAgICAgcmV0
dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6bWF0cml4XTsKKyAgICB9KS5nZXQo
KV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3Qg
VmVjdG9yPEZsb2F0UG9pbnQzRD4mIHZhbHVlKQpAQCAtNDg0LDEwICs0ODMsOSBAQCB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50
M0Q+JiB2YWx1ZSkKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENh
cGFjaXR5OnZhbHVlLnNpemUoKV07Ci0gICAgZm9yIChhdXRvJiBwb2ludCA6IHZhbHVlKQotICAg
ICAgICBbYXJyYXkgYWRkT2JqZWN0OkBbQChwb2ludC54KCkpLCBAKHBvaW50LnkoKSksIEAocG9p
bnQueigpKV1dOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmlt
YXRpb24uZ2V0KCkpIHNldFZhbHVlczphcnJheV07CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJh
bWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXko
dmFsdWUsIFtdIChhdXRvJiBwb2ludCkgeworICAgICAgICByZXR1cm4gQFtAKHBvaW50LngoKSks
IEAocG9pbnQueSgpKSwgQChwb2ludC56KCkpXTsKKyAgICB9KS5nZXQoKV07CiB9CiAKIHZvaWQg
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPENvbG9yPiYg
dmFsdWUpCkBAIC00OTUsMTAgKzQ5Myw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29h
OjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPENvbG9yPiYgdmFsdWUpCiAgICAgaWYgKGFuaW1hdGlv
blR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBhcnJheSA9
IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTp2YWx1ZS5zaXplKCldOwotICAgIGZv
ciAoYXV0byYgY29sb3IgOiB2YWx1ZSkKLSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpAW0AoY29s
b3IucmVkKCkpLCBAKGNvbG9yLmdyZWVuKCkpLCBAKGNvbG9yLmJsdWUoKSksIEAoY29sb3IuYWxw
aGEoKSldXTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0
aW9uLmdldCgpKSBzZXRWYWx1ZXM6YXJyYXldOworICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1l
QW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVhdGVOU0FycmF5KHZh
bHVlLCBbXSAoYXV0byYgY29sb3IpIHsKKyAgICAgICAgcmV0dXJuIEBbQChjb2xvci5yZWQoKSks
IEAoY29sb3IuZ3JlZW4oKSksIEAoY29sb3IuYmx1ZSgpKSwgQChjb2xvci5hbHBoYSgpKV07Cisg
ICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFs
dWVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPj4mIHZhbHVlcywgaW50IGlu
dGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKQEAgLTUwNiwxMCArNTAzLDkgQEAgdm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8UmVmUHRyPEZpbHRl
ck9wZXJhdGlvbj4+JgogICAgIGlmIChhbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGF1dG8gYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRo
Q2FwYWNpdHk6dmFsdWVzLnNpemUoKV07Ci0gICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykK
LSAgICAgICAgW2FycmF5IGFkZE9iamVjdDpQbGF0Zm9ybUNBRmlsdGVyczo6ZmlsdGVyVmFsdWVG
b3JPcGVyYXRpb24odmFsdWUuZ2V0KCksIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkuZ2V0
KCldOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24u
Z2V0KCkpIHNldFZhbHVlczphcnJheV07CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmlt
YXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWVz
LCBbJl0gKGF1dG8mIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybUNBRmlsdGVyczo6
ZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24odmFsdWUuZ2V0KCksIGludGVybmFsRmlsdGVyUHJvcGVy
dHlJbmRleCk7CisgICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYTo6Y29weVZhbHVlc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCkBA
IC01MjMsMTAgKzUxOSw5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjb3B5VmFs
dWVzRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKIAogdm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uQ29jb2E6OnNldEtleVRpbWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVl
KQogewotICAgIGF1dG8gYXJyYXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6
dmFsdWUuc2l6ZSgpXTsKLSAgICBmb3IgKGF1dG8gdGltZSA6IHZhbHVlKQotICAgICAgICBbYXJy
YXkgYWRkT2JqZWN0OkAodGltZSldOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0
aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEtleVRpbWVzOmFycmF5XTsKKyAgICBbc3RhdGlj
X2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRLZXlUaW1l
czpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoZmxvYXQgdGltZSkgeworICAgICAgICByZXR1cm4g
QCh0aW1lKTsKKyAgICB9KS5nZXQoKV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hOjpjb3B5S2V5VGltZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQpA
QCAtNTM3LDEwICs1MzIsOSBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weUtl
eVRpbWVzRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZQogCiB2b2lkIFBsYXRm
b3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25z
dCBUaW1pbmdGdW5jdGlvbio+JiB2YWx1ZSwgYm9vbCByZXZlcnNlKQogewotICAgIGF1dG8gYXJy
YXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6dmFsdWUuc2l6ZSgpXTsKLSAg
ICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogdmFsdWUpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6
dG9DQU1lZGlhVGltaW5nRnVuY3Rpb24oZnVuY3Rpb24sIHJldmVyc2UpXTsKLSAgICBbc3RhdGlj
X2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUaW1pbmdG
dW5jdGlvbnM6YXJyYXldOworICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4o
bV9hbmltYXRpb24uZ2V0KCkpIHNldFRpbWluZ0Z1bmN0aW9uczpjcmVhdGVOU0FycmF5KHZhbHVl
LCBbJl0gKGF1dG8mIGZ1bmN0aW9uKSB7CisgICAgICAgIHJldHVybiB0b0NBTWVkaWFUaW1pbmdG
dW5jdGlvbihmdW5jdGlvbiwgcmV2ZXJzZSk7CisgICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oY29uc3QgUGxh
dGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUZpbHRlcnNDb2Nv
YS5tbQppbmRleCAzYzRkY2UyYWIzYjJlMDkzNTRiOGI3NDRlOTEzYzMwNmY2MDc3NmYzLi4wMWM1
ZTJkYTZkOGI0NTg4OWVhNWFlMzFhZjUzMjYzNTkwZGFlNjYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBRmlsdGVyc0NvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRm
b3JtQ0FGaWx0ZXJzQ29jb2EubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgPFF1YXJ0ekNv
cmUvUXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+
CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2ltcG9ydCA8d3RmL2NvY29h
L1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJl
cnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjIsMjEgKzYzLDIyIEBAIHZvaWQgUGxh
dGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBj
b25zdCBGaWx0ZXJPcGVyCiAgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIC8vIEFzc3VtZSBmaWx0ZXJzQ2FuQmVDb21w
b3NpdGVkIHdhcyBjYWxsZWQgYW5kIGl0IHJldHVybmVkIHRydWUuCiAgICAgQVNTRVJUKFBsYXRm
b3JtQ0FMYXllckNvY29hOjpmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGZpbHRlcnMpKTsKLSAgICAK
KwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgIAotICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gYXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRdKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIFN0cmluZyBmaWx0ZXJOYW1lID0gbWFrZVN0cmluZygiZmlsdGVyXyIsIGkp
OwotICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiA9ICpmaWx0
ZXJzLmF0KGkpOworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVO
U0FycmF5KGZpbHRlcnMub3BlcmF0aW9ucygpLCBbJl0gKGF1dG8mIG9wZXJhdGlvblB0cikgLT4g
aWQgeworICAgICAgICBTdHJpbmcgZmlsdGVyTmFtZSA9IG1ha2VTdHJpbmcoImZpbHRlcl8iLCBp
KyspOworICAgICAgICBhdXRvJiBmaWx0ZXJPcGVyYXRpb24gPSAqb3BlcmF0aW9uUHRyOwogICAg
ICAgICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi50eXBlKCkpIHsKICAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkRFRkFVTFQ6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZF
UkVOQ0U6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpOT05FOgogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBuaWw7CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewog
ICAgICAgICAgICAgLy8gRklYTUU6IEZvciBub3cgYXNzdW1lIGRyb3Agc2hhZG93IGlzIHRoZSBs
YXN0IGZpbHRlciwgcHV0IGl0IG9uIHRoZSBsYXllci4KICAgICAgICAgICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS8xMDk1OTk2OT4gSGFuZGxlIGNhc2Ugd2hlcmUgZHJvcC1zaGFkb3cgaXMgbm90IHRo
ZSBsYXN0IGZpbHRlci4KQEAgLTg1LDcgKzg3LDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6
c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIK
ICAgICAgICAgICAgIFtsYXllciBzZXRTaGFkb3dDb2xvcjpjYWNoZWRDR0NvbG9yKGRyb3BTaGFk
b3dPcGVyYXRpb24uY29sb3IoKSldOwogICAgICAgICAgICAgW2xheWVyIHNldFNoYWRvd1JhZGl1
czpkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpXTsKICAgICAgICAgICAgIFtsYXll
ciBzZXRTaGFkb3dPcGFjaXR5OjFdOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBy
ZXR1cm4gbmlsOwogICAgICAgICB9CiAjaWYgVVNFX0NBX0ZJTFRFUlMKICAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewpAQCAtOTMsMjQgKzk1LDIxIEBAIHZvaWQgUGxh
dGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBj
b25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICBDQUZpbHRlciAqZmlsdGVyID0gW0NBRmlsdGVy
IGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTW9ub2Nocm9tZV07CiAgICAgICAgICAgICBb
ZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6Y29sb3JNYXRyaXhPcGVy
YXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0QW1vdW50Il07CiAgICAgICAgICAgICBbZmls
dGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2Jq
ZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0
ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOiB7CiAg
ICAgICAgICAgICBSZXRhaW5QdHI8TlNWYWx1ZT4gY29sb3JNYXRyaXhWYWx1ZSA9IFBsYXRmb3Jt
Q0FGaWx0ZXJzOjpjb2xvck1hdHJpeFZhbHVlRm9yRmlsdGVyKGZpbHRlck9wZXJhdGlvbi50eXBl
KCksICZmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9IFtD
QUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvck1hdHJpeF07CiAgICAgICAgICAg
ICBbZmlsdGVyIHNldFZhbHVlOmNvbG9yTWF0cml4VmFsdWUuZ2V0KCkgZm9yS2V5OkAiaW5wdXRD
b2xvck1hdHJpeCJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwot
ICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewogICAgICAgICAgICAgY29uc3QgYXV0byYg
Y29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgQ0FGaWx0ZXIgKmZpbHRlciA9
IFtDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJDb2xvclNhdHVyYXRlXTsKICAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xvck1h
dHJpeE9wZXJhdGlvbi5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRBbW91bnQiXTsKICAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQo
KSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVF
X1JPVEFURTogewogICAgICAgICAgICAgY29uc3QgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24g
PSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwpAQCAtMTE4LDE2ICsxMTcsMTQgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0Rmls
dGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAg
ICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpkZWcycmFk
KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKV0gZm9yS2V5OkAiaW5wdXRBbmdsZSJdOwog
ICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOkAiaHVlUm90YXRlIl07CiAgICAgICAgICAgICBb
ZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRk
T2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBm
aWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDog
ewogICAgICAgICAgICAgUmV0YWluUHRyPE5TVmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0
Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhWYWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24u
dHlwZSgpLCAmZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIg
PSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwogICAgICAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlu
cHV0Q29sb3JNYXRyaXgiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1l
XTsKLSAgICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzoKICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9u
bHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmlsdGVyLgpAQCAtMTM3LDI0ICsxMzQsMjEgQEAgdm9p
ZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5
ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FG
aWx0ZXIgZmlsdGVyV2l0aFR5cGU6a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwogICAgICAgICAgICAg
W2ZpbHRlciBzZXRWYWx1ZTpjb2xvck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29s
b3JNYXRyaXgiXTsKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAg
ICAgICAgICAgIFthcnJheS5nZXQoKSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgcmV0dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewogICAgICAgICAgICAgUmV0YWluUHRyPE5T
VmFsdWU+IGNvbG9yTWF0cml4VmFsdWUgPSBQbGF0Zm9ybUNBRmlsdGVyczo6Y29sb3JNYXRyaXhW
YWx1ZUZvckZpbHRlcihmaWx0ZXJPcGVyYXRpb24udHlwZSgpLCAmZmlsdGVyT3BlcmF0aW9uKTsK
ICAgICAgICAgICAgIENBRmlsdGVyICpmaWx0ZXIgPSBbQ0FGaWx0ZXIgZmlsdGVyV2l0aFR5cGU6
a0NBRmlsdGVyQ29sb3JNYXRyaXhdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpjb2xv
ck1hdHJpeFZhbHVlLmdldCgpIGZvcktleTpAImlucHV0Q29sb3JNYXRyaXgiXTsKICAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQo
KSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09O
VFJBU1Q6IHsKICAgICAgICAgICAgIFJldGFpblB0cjxOU1ZhbHVlPiBjb2xvck1hdHJpeFZhbHVl
ID0gUGxhdGZvcm1DQUZpbHRlcnM6OmNvbG9yTWF0cml4VmFsdWVGb3JGaWx0ZXIoZmlsdGVyT3Bl
cmF0aW9uLnR5cGUoKSwgJmZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBDQUZpbHRlciAq
ZmlsdGVyID0gW0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlckNvbG9yTWF0cml4XTsK
ICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6Y29sb3JNYXRyaXhWYWx1ZS5nZXQoKSBmb3JL
ZXk6QCJpbnB1dENvbG9yTWF0cml4Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6Zmls
dGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAgICAgICAgICAgIGNvbnN0
IGF1dG8mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0
ZXJPcGVyYXRpb24pOwpAQCAtMTY1LDggKzE1OSw3IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6
OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVy
CiAgICAgICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpAWUVTIGZvcktleTpAImlucHV0Tm9y
bWFsaXplRWRnZXMiXTsKICNlbmRpZgogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRl
ck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAj
ZWxzZQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7CkBAIC0xNzYs
OCArMTY5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxh
dGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xvck1hdHJpeE9wZXJhdGlvbi5h
bW91bnQoKV0gZm9yS2V5OkAiaW5wdXRJbnRlbnNpdHkiXTsKICAgICAgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W0NJQ29sb3IgY29sb3JXaXRoUmVkOjAuNjcgZ3JlZW46MC42NyBibHVlOjAuNjdd
IGZvcktleTpAImlucHV0Q29sb3IiXTsgLy8gQ29sb3IgZGVyaXZlZCBlbXBpcmljYWxseSB0byBt
YXRjaCB6ZXJvIHNhdHVyYXRpb24gbGV2ZWxzLgogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1l
OmZpbHRlck5hbWVdOwotICAgICAgICAgICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJd
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewogICAgICAgICAgICAg
Y29uc3QgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwpAQCAtMTk3LDggKzE4OSw3IEBA
IHZvaWQgUGxhdGZvcm1DQUZpbHRlcnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIq
IGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyCiAgICAgICAgICAgICAgICAgWTpXZWJDb3JlOjpibGVu
ZChzZXBpYU5vbmVDb25zdGFudHNbMl1bMV0sIHNlcGlhRnVsbENvbnN0YW50c1syXVsxXSwgdCkK
ICAgICAgICAgICAgICAgICBaOldlYkNvcmU6OmJsZW5kKHNlcGlhTm9uZUNvbnN0YW50c1syXVsy
XSwgc2VwaWFGdWxsQ29uc3RhbnRzWzJdWzJdLCB0KSBXOjBdIGZvcktleTpAImlucHV0QlZlY3Rv
ciJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXROYW1lOmZpbHRlck5hbWVdOwotICAgICAgICAg
ICAgW2FycmF5LmdldCgpIGFkZE9iamVjdDpmaWx0ZXJdOwotICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICByZXR1cm4gZmlsdGVyOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpTQVRVUkFURTogewogICAgICAgICAgICAgY29uc3QgYXV0byYgY29sb3JNYXRy
aXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihm
aWx0ZXJPcGVyYXRpb24pOwpAQCAtMjA2LDggKzE5Nyw3IEBAIHZvaWQgUGxhdGZvcm1DQUZpbHRl
cnM6OnNldEZpbHRlcnNPbkxheWVyKFBsYXRmb3JtTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJP
cGVyCiAgICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKICAgICAgICAgICAgIFtmaWx0
ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpjb2xvck1hdHJpeE9wZXJhdGlv
bi5hbW91bnQoKV0gZm9yS2V5OkAiaW5wdXRTYXR1cmF0aW9uIl07CiAgICAgICAgICAgICBbZmls
dGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2Jq
ZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0
ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6
IHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNh
c3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKQEAg
LTIxNiw4ICsyMDYsNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0ZXJzT25MYXll
cihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogCiAgICAgICAgICAgICBb
ZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6ZGVnMnJhZChjb2xvck1h
dHJpeE9wZXJhdGlvbi5hbW91bnQoKSldIGZvcktleTpAImlucHV0QW5nbGUiXTsKICAgICAgICAg
ICAgIFtmaWx0ZXIgc2V0TmFtZTpmaWx0ZXJOYW1lXTsKLSAgICAgICAgICAgIFthcnJheS5nZXQo
KSBhZGRPYmplY3Q6ZmlsdGVyXTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0
dXJuIGZpbHRlcjsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5W
RVJUOiB7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlv
biA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRl
ck9wZXJhdGlvbik7CkBAIC0yMzMsOCArMjIyLDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6
c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIK
ICAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTow
IFo6MCBXOjFdIGZvcktleTpAImlucHV0QVZlY3RvciJdOwogICAgICAgICAgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6b3AtPmFtb3VudCgpIFk6b3AtPmFtb3VudCgp
IFo6b3AtPmFtb3VudCgpIFc6MF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CiAgICAgICAg
ICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0
KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQ
UExFX0lOVkVSVF9MSUdIVE5FU1M6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZp
bHRlci4KQEAgLTI1MCw4ICsyMzgsNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpzZXRGaWx0
ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3BlcgogICAgICAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOjAgWjowIFc6
Y29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCldIGZvcktleTpAImlucHV0QVZlY3Rv
ciJdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6
MCBZOjAgWjowIFc6MF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CiAgICAgICAgICAgICBb
ZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRk
T2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBm
aWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5F
U1M6IHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
ID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVy
T3BlcmF0aW9uKTsKQEAgLTI2Myw4ICsyNTAsNyBAQCB2b2lkIFBsYXRmb3JtQ0FGaWx0ZXJzOjpz
ZXRGaWx0ZXJzT25MYXllcihQbGF0Zm9ybUxheWVyKiBsYXllciwgY29uc3QgRmlsdGVyT3Blcgog
ICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6MCBZOmFt
b3VudCBaOjAgVzowXSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKICAgICAgICAgICAgIFtmaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOjAgWTowIFo6YW1vdW50IFc6MF0gZm9y
S2V5OkAiaW5wdXRCVmVjdG9yIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVy
TmFtZV07Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7CiAgICAgICAgICAgICBjb25z
dCBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7CkBAIC0yNzIsOCAr
MjU4LDcgQEAgdm9pZCBQbGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZv
cm1MYXllciogbGF5ZXIsIGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0
RGVmYXVsdHNdOwogICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVy
V2l0aEZsb2F0OmNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpXSBmb3JLZXk6QCJp
bnB1dENvbnRyYXN0Il07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07
Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3Ig
bm93IHdlIGlnbm9yZSBzdGREZXZpYXRpb25ZLgpAQCAtMjgyLDIxICsyNjcsMTkgQEAgdm9pZCBQ
bGF0Zm9ybUNBRmlsdGVyczo6c2V0RmlsdGVyc09uTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIs
IGNvbnN0IEZpbHRlck9wZXIKICAgICAgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwogICAg
ICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmZsb2F0
VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCldIGZvcktleTpA
ImlucHV0UmFkaXVzIl07CiAgICAgICAgICAgICBbZmlsdGVyIHNldE5hbWU6ZmlsdGVyTmFtZV07
Ci0gICAgICAgICAgICBbYXJyYXkuZ2V0KCkgYWRkT2JqZWN0OmZpbHRlcl07Ci0gICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmaWx0ZXI7CiAgICAgICAgIH0KICNlbmRpZgog
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UEFTU1RIUk9VR0g6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVCgwKTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgfQotICAgIH0KKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfSk7
CiAKLSAgICBpZiAoW2FycmF5LmdldCgpIGNvdW50XSA+IDApCisgICAgaWYgKFthcnJheSBjb3Vu
dF0pCiAgICAgICAgIFtsYXllciBzZXRGaWx0ZXJzOmFycmF5LmdldCgpXTsKLSAgICAKKwogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJD
b2NvYS5tbQppbmRleCAzYjEzYTFmM2IyNjVmZjliNDJlNWMyMjJlZjdiNmZhZjgzNGYzNzUwLi40
ZGE5ZmYxM2ZlMWRkMDE1NjU5YmJjMDg3ZWY0NjVkNTQxOTc0ZDRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBTGF5ZXJDb2NvYS5tbQpAQCAtNTEsNiArNTEsNyBAQAogI2ltcG9ydCA8b2JqYy9ydW50
aW1lLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogI2ltcG9ydCAiV2ViR1BVTGF5ZXIuaCIKQEAgLTQ1NiwxMiArNDU3LDkg
QEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6c2V0U3VibGF5ZXJzKGNvbnN0IFBsYXRmb3Jt
Q0FMYXllckxpc3QmIGxpc3QpCiAgICAgfQogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCi0gICAgTlNNdXRhYmxlQXJyYXkqIHN1YmxheWVycyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRdOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7ICsraSkK
LSAgICAgICAgW3N1YmxheWVycyBhZGRPYmplY3Q6bGlzdFtpXS0+bV9sYXllci5nZXQoKV07Ci0K
LSAgICBbbV9sYXllciBzZXRTdWJsYXllcnM6c3VibGF5ZXJzXTsKLSAgICBbc3VibGF5ZXJzIHJl
bGVhc2VdOworICAgIFttX2xheWVyIHNldFN1YmxheWVyczpjcmVhdGVOU0FycmF5KGxpc3QsIFtd
IChhdXRvJiBsYXllcikgeworICAgICAgICByZXR1cm4gbGF5ZXItPm1fbGF5ZXI7CisgICAgfSku
Z2V0KCldOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KaW5kZXgg
YmFhMjU1NTA4YzM4MDg2YWM2MGM0ZTEwMjkxYTEzYzczNjE1MWQ0MC4uZDJmMzIyMDA0N2Y2ZjM0
MzUzNTZjOTc4NzUxMDM4ZTZiOGIwZjE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCkBAIC02MTUsMTEgKzYxNSw5IEBA
IHN0YXRpYyBSZXRhaW5QdHI8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSW5mb0xpc3Q+IGNy
ZWF0ZUl0ZW1Qcm92aWRlclJlZ2lzdHJhCiAKIGludDY0X3QgUGxhdGZvcm1QYXN0ZWJvYXJkOjp3
cml0ZShjb25zdCBWZWN0b3I8UGFzdGVib2FyZEN1c3RvbURhdGE+JiBpdGVtRGF0YSkKIHsKLSAg
ICBhdXRvIHJlZ2lzdHJhdGlvbkxpc3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0V2l0aENhcGFjaXR5Oml0ZW1EYXRhLnNpemUoKV0pOwotICAgIGZvciAoYXV0byYgZGF0
YSA6IGl0ZW1EYXRhKSB7Ci0gICAgICAgIGlmIChhdXRvIGl0ZW1MaXN0ID0gY3JlYXRlSXRlbVBy
b3ZpZGVyUmVnaXN0cmF0aW9uTGlzdChkYXRhKSkKLSAgICAgICAgICAgIFtyZWdpc3RyYXRpb25M
aXN0cyBhZGRPYmplY3Q6aXRlbUxpc3QuZ2V0KCldOwotICAgIH0KKyAgICBhdXRvIHJlZ2lzdHJh
dGlvbkxpc3RzID0gY3JlYXRlTlNBcnJheShpdGVtRGF0YSwgW10gKGF1dG8mIGRhdGEpIHsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZUl0ZW1Qcm92aWRlclJlZ2lzdHJhdGlvbkxpc3QoZGF0YSk7Cisg
ICAgfSk7CiAgICAgcmVnaXN0ZXJJdGVtc1RvUGFzdGVib2FyZChyZWdpc3RyYXRpb25MaXN0cy5n
ZXQoKSwgbV9wYXN0ZWJvYXJkLmdldCgpKTsKICAgICByZXR1cm4gW21fcGFzdGVib2FyZCBjaGFu
Z2VDb3VudF07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQubW0KaW5kZXggYWE1NTQ5NGUxYWI3NjJi
ZWY0MjY5NzlkNWM1NGVkYjhkYTdhMTFjMC4uZmYwMzlhZDliNDI1MWM2M2E4OGI1OWNmNWRjZTg1
N2Y1ZmRiMGViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdC5tbQpAQCAtMzgsNiArMzgsNyBAQAog
I2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9B
VktpdFNQSS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29h
L1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW1wb3J0IDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMTU1LDIwICsxNTYsMTggQEAgdm9pZCBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6Y2FuUGxheUZhc3RSZXZlcnNlQ2hhbmdlZChib29sIGNh
blBsYXlGYXN0UmUKICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldENhblNjYW5CYWNrd2FyZDpj
YW5QbGF5RmFzdFJldmVyc2VdOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiYgb3B0aW9ucykKK3N0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gbWVkaWFTZWxlY3Rpb25PcHRp
b25zKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMpCiB7Ci0gICAg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om9wdGlvbnMuc2l6ZSgpXSk7Ci0gICAgZm9y
IChhdXRvJiBvcHRpb24gOiBvcHRpb25zKSB7Ci0gICAgICAgIFJldGFpblB0cjxXZWJBVk1lZGlh
U2VsZWN0aW9uT3B0aW9uPiB3ZWJPcHRpb24gPSBhZG9wdE5TKFtbV2ViQVZNZWRpYVNlbGVjdGlv
bk9wdGlvbiBhbGxvY10gaW5pdF0pOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KG9wdGlvbnMs
IFtdIChhdXRvJiBvcHRpb24pIHsKKyAgICAgICAgYXV0byB3ZWJPcHRpb24gPSBhZG9wdE5TKFtb
V2ViQVZNZWRpYVNlbGVjdGlvbk9wdGlvbiBhbGxvY10gaW5pdF0pOwogICAgICAgICBbd2ViT3B0
aW9uIHNldExvY2FsaXplZERpc3BsYXlOYW1lOm9wdGlvbi5kaXNwbGF5TmFtZV07Ci0gICAgICAg
IFt3ZWJPcHRpb25zIGFkZE9iamVjdDp3ZWJPcHRpb24uZ2V0KCldOwotICAgIH0KLSAgICByZXR1
cm4gd2ViT3B0aW9uczsKKyAgICAgICAgcmV0dXJuIHdlYk9wdGlvbjsKKyAgICB9KTsKIH0KIAog
dm9pZCBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdDo6YXVkaW9NZWRpYVNlbGVjdGlvbk9w
dGlvbnNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mIG9wdGlvbnMs
IHVpbnQ2NF90IHNlbGVjdGVkSW5kZXgpCiB7Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlvbnMpOworICAgIGF1dG8g
d2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKICAgICBbbV9wbGF5
ZXJDb250cm9sbGVyIHNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0
KCldOwogICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQogICAgICAg
ICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9u
Olt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oc2VsZWN0
ZWRJbmRleCldXTsKQEAgLTE3Niw3ICsxNzUsNyBAQCB2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjphdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uc0NoYW5nZWQoY29uc3QgVmVjdAog
CiB2b2lkIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRp
b25zLCB1aW50NjRfdCBzZWxlY3RlZEluZGV4KQogewotICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKKyAgICBh
dXRvIHdlYk9wdGlvbnMgPSBtZWRpYVNlbGVjdGlvbk9wdGlvbnMob3B0aW9ucyk7CiAgICAgW21f
cGxheWVyQ29udHJvbGxlciBzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlv
bnMuZ2V0KCldOwogICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQog
ICAgICAgICBbbV9wbGF5ZXJDb250cm9sbGVyIHNldEN1cnJlbnRMZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb246W3dlYk9wdGlvbnMgb2JqZWN0QXRJbmRleDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2Vy
PihzZWxlY3RlZEluZGV4KV1dOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KaW5kZXggMDc2MjdmMWNiNDI0NzhiZDYzMzE5ZGU2
Y2ZiYTMzZjczNjlkZGExMy4uZmJlYTUzNjFiOWMzZThjMzA3NjhkZTNmYWVlYTM5ZTVhYjljZmQx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVi
b2FyZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0
ZWJvYXJkTWFjLm1tCkBAIC01MDYsMTEgKzUwNiwxMCBAQCBpbnQ2NF90IFBsYXRmb3JtUGFzdGVi
b2FyZDo6d3JpdGUoY29uc3QgVmVjdG9yPFBhc3RlYm9hcmRDdXN0b21EYXRhPiYgaXRlbURhdGEp
CiAgICAgaWYgKGl0ZW1EYXRhLnNpemUoKSA9PSAxKQogICAgICAgICByZXR1cm4gd3JpdGUoaXRl
bURhdGEuZmlyc3QoKSk7CiAKLSAgICBhdXRvIHBsYXRmb3JtSXRlbXMgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6aXRlbURhdGEuc2l6ZSgpXSk7Ci0g
ICAgZm9yIChhdXRvJiBkYXRhIDogaXRlbURhdGEpCi0gICAgICAgIFtwbGF0Zm9ybUl0ZW1zIGFk
ZE9iamVjdDpjcmVhdGVQYXN0ZWJvYXJkSXRlbShkYXRhKS5nZXQoKV07CiAgICAgW21fcGFzdGVi
b2FyZCBjbGVhckNvbnRlbnRzXTsKLSAgICBbbV9wYXN0ZWJvYXJkIHdyaXRlT2JqZWN0czpwbGF0
Zm9ybUl0ZW1zLmdldCgpXTsKKyAgICBbbV9wYXN0ZWJvYXJkIHdyaXRlT2JqZWN0czpjcmVhdGVO
U0FycmF5KGl0ZW1EYXRhLCBbXSAoYXV0byYgZGF0YSkgeworICAgICAgICByZXR1cm4gY3JlYXRl
UGFzdGVib2FyZEl0ZW0oZGF0YSk7CisgICAgfSkuZ2V0KCldOwogICAgIHJldHVybiBbbV9wYXN0
ZWJvYXJkIGNoYW5nZUNvdW50XTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCmluZGV4IGNkYjQ2MjRm
YmNhYWJjZmQ0OGYyZDQzOGI1MzgxYTQyYWNjZGEwZjYuLmQ5NjBmYzgwYTg5NWI4Y2Y5MTMzZGFi
OTY3NWJkYzY1ZTA0OWQ5MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0KQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbXBvcnQgIlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oIgogI2ltcG9ydCAiUGxheWJh
Y2tTZXNzaW9uTW9kZWwuaCIKICNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgorI2ltcG9ydCA8
d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJudWxsYWJpbGl0eS1jb21wbGV0ZW5lc3MiKQpAQCAt
MjA4LDE5ICsyMDksMTYgQEAgc3RhdGljIEFWVG91Y2hCYXJNZWRpYVNlbGVjdGlvbk9wdGlvblR5
cGUgdG9BVlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25UeXBlKE0KICAgICByZXR1cm4gQVZU
b3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZVJlZ3VsYXI7CiB9CiAKLXN0YXRpYyBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhjb25zdCBWZWN0b3I8
TWVkaWFTZWxlY3Rpb25PcHRpb24+JiBvcHRpb25zKQorc3RhdGljIFJldGFpblB0cjxOU0FycmF5
PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9u
PiYgb3B0aW9ucykKIHsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHdlYk9wdGlvbnMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6b3B0aW9u
cy5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIG9wdGlvbiA6IG9wdGlvbnMpIHsKLSAgICAgICAg
aWYgKGF1dG8gd2ViT3B0aW9uID0gYWRvcHROUyhbYWxsb2NBVlRvdWNoQmFyTWVkaWFTZWxlY3Rp
b25PcHRpb25JbnN0YW5jZSgpIGluaXRXaXRoVGl0bGU6b3B0aW9uLmRpc3BsYXlOYW1lIHR5cGU6
dG9BVlRvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25UeXBlKG9wdGlvbi50eXBlKV0pKQotICAg
ICAgICAgICAgW3dlYk9wdGlvbnMgYWRkT2JqZWN0OndlYk9wdGlvbi5nZXQoKV07Ci0gICAgfQot
ICAgIHJldHVybiB3ZWJPcHRpb25zOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KG9wdGlvbnMs
IFtdIChhdXRvJiBvcHRpb24pIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW2FsbG9jQVZUb3Vj
aEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uSW5zdGFuY2UoKSBpbml0V2l0aFRpdGxlOm9wdGlvbi5k
aXNwbGF5TmFtZSB0eXBlOnRvQVZUb3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZShvcHRp
b24udHlwZSldKTsKKyAgICB9KTsKIH0KIAogLSAodm9pZClzZXRBdWRpb01lZGlhU2VsZWN0aW9u
T3B0aW9uczooY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYpb3B0aW9ucyB3aXRo
U2VsZWN0ZWRJbmRleDooTlNVSW50ZWdlcilzZWxlY3RlZEluZGV4CiB7Ci0gICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlv
bnMpOworICAgIGF1dG8gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25z
KTsKICAgICBbc2VsZiBzZXRBdWRpb1RvdWNoQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9w
dGlvbnMuZ2V0KCldOwogICAgIGlmIChzZWxlY3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRd
KQogICAgICAgICBbc2VsZiBzZXRDdXJyZW50QXVkaW9Ub3VjaEJhck1lZGlhU2VsZWN0aW9uT3B0
aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c2VsZWN0ZWRJbmRleF1dOwpAQCAtMjI4LDcg
KzIyNiw3IEBAIC0gKHZvaWQpc2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6KGNvbnN0IFZl
Y3RvcjxNZWRpYVNlbGVjdGlvbk9wdGlvbj4mKW9wdGlvCiAKIC0gKHZvaWQpc2V0TGVnaWJsZU1l
ZGlhU2VsZWN0aW9uT3B0aW9uczooY29uc3QgVmVjdG9yPE1lZGlhU2VsZWN0aW9uT3B0aW9uPiYp
b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDooTlNVSW50ZWdlcilzZWxlY3RlZEluZGV4CiB7Ci0g
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25P
cHRpb25zKG9wdGlvbnMpOworICAgIGF1dG8gd2ViT3B0aW9ucyA9IG1lZGlhU2VsZWN0aW9uT3B0
aW9ucyhvcHRpb25zKTsKICAgICBbc2VsZiBzZXRMZWdpYmxlVG91Y2hCYXJNZWRpYVNlbGVjdGlv
bk9wdGlvbnM6d2ViT3B0aW9ucy5nZXQoKV07CiAgICAgaWYgKHNlbGVjdGVkSW5kZXggPCBbd2Vi
T3B0aW9ucyBjb3VudF0pCiAgICAgICAgIFtzZWxmIHNldEN1cnJlbnRMZWdpYmxlVG91Y2hCYXJN
ZWRpYVNlbGVjdGlvbk9wdGlvbjpbd2ViT3B0aW9ucyBvYmplY3RBdEluZGV4OnNlbGVjdGVkSW5k
ZXhdXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2Ev
TmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NvY29hL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNvY29hLm1tCmluZGV4IGM0YmQ1ZWZi
YWNiYWRhMGNlYTJlODBmYzg1NzE4ZDZhMTY3NmUyZjMuLmU2NzU5MDBlNDEwYjM5ZDI3ZTkwODYy
NjZkZTUzZTVmZGU0NmMxZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY29jb2EvTmV0d29ya1N0b3JhZ2VTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9OZXR3b3JrU3RvcmFnZVNlc3Npb25Db2NvYS5t
bQpAQCAtMzYsNiArMzYsNyBAQAogI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAjaW1wb3J0IDx3
dGYvUHJvY2Vzc1ByaXZpbGVnZS5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3Rm
L2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKIEBpbnRlcmZhY2UgTlNVUkwgKCkKQEAgLTY0LDkgKzY1LDkgQEAgdm9pZCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OnNldENvb2tpZXMoY29uc3QgVmVjdG9yPENvb2tpZT4mIGNvb2tpZXMsIGNv
bnN0IFVSTCYKIHsKICAgICBBU1NFUlQoaGFzUHJvY2Vzc1ByaXZpbGVnZShQcm9jZXNzUHJpdmls
ZWdlOjpDYW5BY2Nlc3NSYXdDb29raWVzKSB8fCBtX2lzSW5NZW1vcnlDb29raWVTdG9yZSk7CiAK
LSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG5zQ29va2llcyA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb29raWVzLnNpemUoKV0pOwotICAg
IGZvciAoY29uc3QgYXV0byYgY29va2llIDogY29va2llcykKLSAgICAgICAgW25zQ29va2llcyBh
ZGRPYmplY3Q6KE5TSFRUUENvb2tpZSAqKWNvb2tpZV07CisgICAgYXV0byBuc0Nvb2tpZXMgPSBj
cmVhdGVOU0FycmF5KGNvb2tpZXMsIFtdIChhdXRvJiBjb29raWUpIC0+IE5TSFRUUENvb2tpZSAq
IHsKKyAgICAgICAgcmV0dXJuIGNvb2tpZTsKKyAgICB9KTsKIAogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKICAgICBbbnNDb29raWVTdG9yYWdlKCkgc2V0Q29va2llczpuc0Nvb2tp
ZXMuZ2V0KCkgZm9yVVJMOihOU1VSTCAqKXVybCBtYWluRG9jdW1lbnRVUkw6KE5TVVJMICopbWFp
bkRvY3VtZW50VVJMXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NvY29hL1Jlc291cmNlUmVxdWVzdENvY29hLm1tCmluZGV4IDc2NmVhM2I4MmY1
ODVhZjE2YWZkYWJlMTJhY2E4NzI4NjI0NDBiZDYuLjM2NTM4MmRmODEwMGI4ZTM0ZGFjYTg5NTQ5
MjA3Y2VjMTMzYTQzZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY29jb2EvUmVzb3VyY2VSZXF1ZXN0Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jb2NvYS9SZXNvdXJjZVJlcXVlc3RDb2NvYS5tbQpAQCAtMjAxLDEzICsy
MDEsMTIgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3Q6OmRvVXBkYXRlUGxhdGZvcm1SZXF1ZXN0KCkK
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGh0dHBIZWFkZXJGaWVsZHMoKSkKICAgICAg
ICAgW25zUmVxdWVzdCBzZXRWYWx1ZTpoZWFkZXIudmFsdWUgZm9ySFRUUEhlYWRlckZpZWxkOmhl
YWRlci5rZXldOwogCi0gICAgTlNNdXRhYmxlQXJyYXkgKmVuY29kaW5nRmFsbGJhY2tzID0gW05T
TXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVuY29kaW5nTmFtZSA6
IG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkpIHsKLSAg
ICAgICAgQ0ZTdHJpbmdFbmNvZGluZyBuc0VuY29kaW5nID0gQ0ZTdHJpbmdDb252ZXJ0RW5jb2Rp
bmdUb05TU3RyaW5nRW5jb2RpbmcoQ0ZTdHJpbmdDb252ZXJ0SUFOQUNoYXJTZXROYW1lVG9FbmNv
ZGluZyhlbmNvZGluZ05hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwotICAgICAgICBpZiAo
bnNFbmNvZGluZyAhPSBrQ0ZTdHJpbmdFbmNvZGluZ0ludmFsaWRJZCkKLSAgICAgICAgICAgIFtl
bmNvZGluZ0ZhbGxiYWNrcyBhZGRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZExv
bmc6bnNFbmNvZGluZ11dOwotICAgIH0KLSAgICBbbnNSZXF1ZXN0IHNldENvbnRlbnREaXNwb3Np
dGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTplbmNvZGluZ0ZhbGxiYWNrc107CisgICAgW25zUmVx
dWVzdCBzZXRDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6Y3JlYXRlTlNB
cnJheShtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LCBb
XSAoYXV0byYgbmFtZSkgLT4gTlNOdW1iZXIgKiB7CisgICAgICAgIGF1dG8gZW5jb2RpbmcgPSBD
RlN0cmluZ0NvbnZlcnRFbmNvZGluZ1RvTlNTdHJpbmdFbmNvZGluZyhDRlN0cmluZ0NvbnZlcnRJ
QU5BQ2hhclNldE5hbWVUb0VuY29kaW5nKG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwor
ICAgICAgICBpZiAoZW5jb2RpbmcgPT0ga0NGU3RyaW5nRW5jb2RpbmdJbnZhbGlkSWQpCisgICAg
ICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gQChlbmNvZGluZyk7CisgICAgfSku
Z2V0KCldOwogCiAgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGNhY2hlUGFydGl0aW9uKCk7CiAgICAg
aWYgKCFwYXJ0aXRpb24uaXNOdWxsKCkgJiYgIXBhcnRpdGlvbi5pc0VtcHR5KCkpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJM
U2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3Jl
TlNVUkxTZXNzaW9uLmgKaW5kZXggNmRmOGQ0ODcwMjg3OGYxYWM3OWU5ZjMwYTk1NTg0YjkwZDJl
MWNkZS4uMjI5NGE5ZmQ5NWJjNzVhZjY0ZjI0YmI5MWQyMzYwMmQyZTVlYWJlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNz
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3Jl
TlNVUkxTZXNzaW9uLmgKQEAgLTYyLDcgKzYyLDcgQEAgV0VCQ09SRV9FWFBPUlQgQGludGVyZmFj
ZSBXZWJDb3JlTlNVUkxTZXNzaW9uIDogTlNPYmplY3QgewogICAgIFdlYWtPYmpDUHRyPGlkPE5T
VVJMU2Vzc2lvbkRlbGVnYXRlPj4gX2RlbGVnYXRlOwogICAgIFJldGFpblB0cjxOU09wZXJhdGlv
blF1ZXVlPiBfcXVldWU7CiAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfc2Vzc2lvbkRlc2NyaXB0
aW9uOwotICAgIEhhc2hTZXQ8UmV0YWluUHRyPENGVHlwZVJlZj4+IF9kYXRhVGFza3M7CisgICAg
SGFzaFNldDxSZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrPj4gX2RhdGFUYXNr
czsKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4+IF9vcmlnaW5z
OwogICAgIExvY2sgX2RhdGFUYXNrc0xvY2s7CiAgICAgQk9PTCBfaW52YWxpZGF0ZWQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VS
TFNlc3Npb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNv
cmVOU1VSTFNlc3Npb24ubW0KaW5kZXggNDczODBiMTVjYWFjNjIyMzdlMGQ0NTgwMzIzZjcwMzM4
ZjllODVlNy4uNGI5OGFkYWRiYWEzYzI1MGIyMGY0Y2FlNDZlMDE3NDUwMDBmOTllNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxT
ZXNzaW9uLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2Vi
Q29yZU5TVVJMU2Vzc2lvbi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiU3VicmVzb3Vy
Y2VMb2FkZXIuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL0NvbXBs
ZXRpb25IYW5kbGVyLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTkyLDcgKzkzLDcgQEAgLSAodm9pZClkZWFsbG9j
CiAgICAgewogICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2NrKTsKICAg
ICAgICAgZm9yIChhdXRvJiB0YXNrIDogX2RhdGFUYXNrcykKLSAgICAgICAgICAgICgoX19icmlk
Z2UgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopdGFzay5nZXQoKSkuc2Vzc2lvbiA9IG5p
bDsKKyAgICAgICAgICAgIFt0YXNrIHNldFNlc3Npb246bmlsXTsKICAgICB9CiAKICAgICBjYWxs
T25NYWluVGhyZWFkKFtsb2FkZXIgPSBXVEZNb3ZlKF9sb2FkZXIpXSB7CkBAIC0xMTUsOCArMTE2
LDggQEAgLSAodm9pZCl0YXNrQ29tcGxldGVkOihXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sg
Kil0YXNrCiAgICAgewogICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2Nr
KTsKIAotICAgICAgICBBU1NFUlQoX2RhdGFUYXNrcy5jb250YWlucygoX19icmlkZ2UgQ0ZUeXBl
UmVmKXRhc2spKTsKLSAgICAgICAgX2RhdGFUYXNrcy5yZW1vdmUoKF9fYnJpZGdlIENGVHlwZVJl
Zil0YXNrKTsKKyAgICAgICAgQVNTRVJUKF9kYXRhVGFza3MuY29udGFpbnModGFzaykpOworICAg
ICAgICBfZGF0YVRhc2tzLnJlbW92ZSh0YXNrKTsKICAgICAgICAgaWYgKCFfZGF0YVRhc2tzLmlz
RW1wdHkoKSB8fCAhX2ludmFsaWRhdGVkKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTIxNywyMyArMjE4LDIzIEBAIC0gKHZvaWQpZmluaXNoVGFza3NBbmRJbnZhbGlkYXRlCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmV0YWluUHRyPFdlYkNvcmVOU1VSTFNlc3Np
b24+IHN0cm9uZ1NlbGYgeyBzZWxmIH07Ci0gICAgW3NlbGYgYWRkRGVsZWdhdGVPcGVyYXRpb246
W3N0cm9uZ1NlbGZdIHsKLSAgICAgICAgaWYgKFtzdHJvbmdTZWxmLmdldCgpLmRlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoVVJMU2Vzc2lvbjpkaWRCZWNvbWVJbnZhbGlkV2l0
aEVycm9yOildKQotICAgICAgICAgICAgW3N0cm9uZ1NlbGYuZ2V0KCkuZGVsZWdhdGUgVVJMU2Vz
c2lvbjooTlNVUkxTZXNzaW9uICopc3Ryb25nU2VsZi5nZXQoKSBkaWRCZWNvbWVJbnZhbGlkV2l0
aEVycm9yOm5pbF07CisgICAgW3NlbGYgYWRkRGVsZWdhdGVPcGVyYXRpb246W3N0cm9uZ1NlbGYg
PSByZXRhaW5QdHIoc2VsZildIHsKKyAgICAgICAgYXV0byBkZWxlZ2F0ZSA9IHN0cm9uZ1NlbGYu
Z2V0KCkuZGVsZWdhdGU7CisgICAgICAgIGlmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihVUkxTZXNzaW9uOmRpZEJlY29tZUludmFsaWRXaXRoRXJyb3I6KV0pCisgICAg
ICAgICAgICBbZGVsZWdhdGUgVVJMU2Vzc2lvbjooTlNVUkxTZXNzaW9uICopc3Ryb25nU2VsZi5n
ZXQoKSBkaWRCZWNvbWVJbnZhbGlkV2l0aEVycm9yOm5pbF07CiAgICAgfV07CiB9CiAKIC0gKHZv
aWQpaW52YWxpZGF0ZUFuZENhbmNlbAogewotICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZUeXBlUmVm
Pj4gdGFza3NDb3B5OworICAgIFZlY3RvcjxSZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vzc2lvbkRh
dGFUYXNrPj4gdGFza3NDb3B5OwogICAgIHsKICAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihf
ZGF0YVRhc2tzTG9jayk7CiAgICAgICAgIHRhc2tzQ29weSA9IGNvcHlUb1ZlY3RvcihfZGF0YVRh
c2tzKTsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHRhc2sgOiB0YXNrc0NvcHkpCi0gICAgICAg
IFsoX19icmlkZ2UgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopdGFzay5nZXQoKSBjYW5j
ZWxdOworICAgICAgICBbdGFzayBjYW5jZWxdOwogCiAgICAgW3NlbGYgZmluaXNoVGFza3NBbmRJ
bnZhbGlkYXRlXTsKIH0KQEAgLTI1NiwyOSArMjU3LDI5IEBAIC0gKHZvaWQpZmx1c2hXaXRoQ29t
cGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiAKIC0gKHZv
aWQpZ2V0VGFza3NXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8TlNVUkxT
ZXNzaW9uRGF0YVRhc2sgKj4gKmRhdGFUYXNrcywgTlNBcnJheTxOU1VSTFNlc3Npb25VcGxvYWRU
YXNrICo+ICp1cGxvYWRUYXNrcywgTlNBcnJheTxOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sgKj4g
KmRvd25sb2FkVGFza3MpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkg
KmFycmF5ID0gbnVsbHB0cjsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gYXJyYXk7CiAgICAgewog
ICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2NrKTsKLSAgICAgICAgYXJy
YXkgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6X2RhdGFUYXNrcy5zaXplKCld
OwotICAgICAgICBmb3IgKGF1dG8mIHRhc2sgOiBfZGF0YVRhc2tzKQotICAgICAgICAgICAgW2Fy
cmF5IGFkZE9iamVjdDooX19icmlkZ2UgV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrICopdGFz
ay5nZXQoKV07CisgICAgICAgIGFycmF5ID0gY3JlYXRlTlNBcnJheShfZGF0YVRhc2tzLCBbXSAo
YXV0byYgdGFzaykgeworICAgICAgICAgICAgcmV0dXJuIHRhc2suZ2V0KCk7CisgICAgICAgIH0p
OwogICAgIH0KICAgICBbc2VsZiBhZGREZWxlZ2F0ZU9wZXJhdGlvbjpeewotICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihhcnJheSwgbmlsLCBuaWwpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihhcnJheS5nZXQoKSwgbmlsLCBuaWwpOwogICAgIH1dOwogfQogCiAtICh2b2lkKWdldEFsbFRh
c2tzV2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PF9fa2luZG9mIE5TVVJM
U2Vzc2lvblRhc2sgKj4gKnRhc2tzKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIE5TTXV0YWJs
ZUFycmF5ICphcnJheSA9IG51bGxwdHI7CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IGFycmF5Owog
ICAgIHsKICAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihfZGF0YVRhc2tzTG9jayk7Ci0gICAg
ICAgIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Ol9kYXRhVGFza3Mu
c2l6ZSgpXTsKLSAgICAgICAgZm9yIChhdXRvJiB0YXNrIDogX2RhdGFUYXNrcykKLSAgICAgICAg
ICAgIFthcnJheSBhZGRPYmplY3Q6KF9fYnJpZGdlIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFz
ayAqKXRhc2suZ2V0KCldOworICAgICAgICBhcnJheSA9IGNyZWF0ZU5TQXJyYXkoX2RhdGFUYXNr
cywgW10gKGF1dG8mIHRhc2spIHsKKyAgICAgICAgICAgIHJldHVybiB0YXNrLmdldCgpOworICAg
ICAgICB9KTsKICAgICB9CiAgICAgW3NlbGYgYWRkRGVsZWdhdGVPcGVyYXRpb246XnsKLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoYXJyYXkpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihh
cnJheS5nZXQoKSk7CiAgICAgfV07CiB9CiAKQEAgLTI5MCw3ICsyOTEsNyBAQCAtIChOU1VSTFNl
c3Npb25EYXRhVGFzayAqKWRhdGFUYXNrV2l0aFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVl
c3QKICAgICBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2sgKnRhc2sgPSBbW1dlYkNvcmVOU1VS
TFNlc3Npb25EYXRhVGFzayBhbGxvY10gaW5pdFdpdGhTZXNzaW9uOnNlbGYgaWRlbnRpZmllcjpf
bmV4dFRhc2tJZGVudGlmaWVyKysgcmVxdWVzdDpyZXF1ZXN0XTsKICAgICB7CiAgICAgICAgIExv
Y2tlcjxMb2NrPiBsb2NrZXIoX2RhdGFUYXNrc0xvY2spOwotICAgICAgICBfZGF0YVRhc2tzLmFk
ZCgoX19icmlkZ2UgQ0ZUeXBlUmVmKXRhc2spOworICAgICAgICBfZGF0YVRhc2tzLmFkZCh0YXNr
KTsKICAgICB9CiAgICAgcmV0dXJuIChOU1VSTFNlc3Npb25EYXRhVGFzayAqKVt0YXNrIGF1dG9y
ZWxlYXNlXTsKIH0KQEAgLTMwMyw3ICszMDQsNyBAQCAtIChOU1VSTFNlc3Npb25EYXRhVGFzayAq
KWRhdGFUYXNrV2l0aFVSTDooTlNVUkwgKil1cmwKICAgICBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0
YVRhc2sgKnRhc2sgPSBbW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBhbGxvY10gaW5pdFdp
dGhTZXNzaW9uOnNlbGYgaWRlbnRpZmllcjpfbmV4dFRhc2tJZGVudGlmaWVyKysgVVJMOnVybF07
CiAgICAgewogICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKF9kYXRhVGFza3NMb2NrKTsKLSAg
ICAgICAgX2RhdGFUYXNrcy5hZGQoKF9fYnJpZGdlIENGVHlwZVJlZil0YXNrKTsKKyAgICAgICAg
X2RhdGFUYXNrcy5hZGQodGFzayk7CiAgICAgfQogICAgIHJldHVybiAoTlNVUkxTZXNzaW9uRGF0
YVRhc2sgKilbdGFzayBhdXRvcmVsZWFzZV07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL2NvY29hL1BheW1lbnRBdXRob3JpemF0aW9uUHJlc2VudGVyLm1tIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9jb2NvYS9QYXltZW50QXV0aG9yaXphdGlvblByZXNlbnRlci5tbQpp
bmRleCAyNmI0N2JhY2JiODVhZTFkY2U4NGRjNjg0MGRiMjZlMmQ3NDU5ZTdlLi45YmE4NzIxNDY4
MzlmNzk4YWQwNGQ1YzM1MTFlYjAxY2UyNmI0OWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL2NvY29hL1BheW1lbnRBdXRob3JpemF0aW9uUHJlc2VudGVyLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vY29jb2EvUGF5bWVudEF1dGhvcml6YXRpb25QcmVzZW50ZXIu
bW0KQEAgLTM0LDYgKzM0LDggQEAKICNpbXBvcnQgPFdlYkNvcmUvUGF5bWVudE1lcmNoYW50U2Vz
c2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYXltZW50TWV0aG9kVXBkYXRlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1BheW1lbnRTdW1tYXJ5SXRlbXMuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0
b3JDb2NvYS5oPgorCiAjaW1wb3J0IDxwYWwvY29jb2EvUGFzc0tpdFNvZnRMaW5rLmg+CiAKIFNP
RlRfTElOS19GUkFNRVdPUksoQ29udGFjdHMpOwpAQCAtMTYwLDIyICsxNjIsMTggQEAgc3RhdGlj
IE5TRXJyb3IgKnRvTlNFcnJvcihjb25zdCBXZWJDb3JlOjpQYXltZW50RXJyb3ImIGVycm9yKQog
ICAgIHJldHVybiBbTlNFcnJvciBlcnJvcldpdGhEb21haW46UEFMOjpnZXRfUGFzc0tpdF9QS1Bh
eW1lbnRFcnJvckRvbWFpbigpIGNvZGU6dG9QS1BheW1lbnRFcnJvckNvZGUoZXJyb3IuY29kZSkg
dXNlckluZm86dXNlckluZm8uZ2V0KCldOwogfQogCi1zdGF0aWMgTlNBcnJheSAqdG9OU0Vycm9y
cyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6UGF5bWVudEVycm9yPiYgZXJyb3JzKQorc3RhdGljIFJl
dGFpblB0cjxOU0FycmF5PiB0b05TRXJyb3JzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpQYXltZW50
RXJyb3I+JiBlcnJvcnMpCiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFi
bGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTplcnJvcnMuc2l6ZSgpXTsKLSAgICBmb3IgKGNvbnN0
IGF1dG8mIGVycm9yIDogZXJyb3JzKSB7Ci0gICAgICAgIGlmIChOU0Vycm9yICpuc0Vycm9yID0g
dG9OU0Vycm9yKGVycm9yKSkKLSAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0Om5zRXJyb3Jd
OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KGVy
cm9ycywgW10gKGF1dG8mIGVycm9yKSB7CisgICAgICAgIHJldHVybiB0b05TRXJyb3IoZXJyb3Ip
OworICAgIH0pOwogfQogCi1zdGF0aWMgTlNBcnJheSAqdG9QS1NoaXBwaW5nTWV0aG9kcyhjb25z
dCBWZWN0b3I8V2ViQ29yZTo6QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5n
TWV0aG9kPiYgc2hpcHBpbmdNZXRob2RzKQorc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiB0b1BL
U2hpcHBpbmdNZXRob2RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXlt
ZW50UmVxdWVzdDo6U2hpcHBpbmdNZXRob2Q+JiBzaGlwcGluZ01ldGhvZHMpCiB7Ci0gICAgTlNN
dXRhYmxlQXJyYXkgKnBrU2hpcHBpbmdNZXRob2RzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0
aENhcGFjaXR5OnNoaXBwaW5nTWV0aG9kcy5zaXplKCldOwotICAgIGZvciAoYXV0byYgc2hpcHBp
bmdNZXRob2QgOiBzaGlwcGluZ01ldGhvZHMpCi0gICAgICAgIFtwa1NoaXBwaW5nTWV0aG9kcyBh
ZGRPYmplY3Q6dG9QS1NoaXBwaW5nTWV0aG9kKHNoaXBwaW5nTWV0aG9kKV07Ci0gICAgcmV0dXJu
IHBrU2hpcHBpbmdNZXRob2RzOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHNoaXBwaW5nTWV0
aG9kcywgW10gKGF1dG8mIG1ldGhvZCkgeworICAgICAgICByZXR1cm4gdG9QS1NoaXBwaW5nTWV0
aG9kKG1ldGhvZCk7CisgICAgfSk7CiB9CiAKIHZvaWQgUGF5bWVudEF1dGhvcml6YXRpb25QcmVz
ZW50ZXI6OmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGNvbnN0IFdlYkNvcmU6OlBheW1lbnRN
ZXJjaGFudFNlc3Npb24mIG1lcmNoYW50U2Vzc2lvbikKQEAgLTE5OSw4ICsxOTcsOCBAQCB2b2lk
IFBheW1lbnRBdXRob3JpemF0aW9uUHJlc2VudGVyOjpjb21wbGV0ZVBheW1lbnRTZXNzaW9uKGNv
bnN0IE9wdGlvbmFsPFdlYkNvcgogewogICAgIEFTU0VSVChwbGF0Zm9ybURlbGVnYXRlKCkpOwog
ICAgIGF1dG8gc3RhdHVzID0gcmVzdWx0ID8gdG9QS1BheW1lbnRBdXRob3JpemF0aW9uU3RhdHVz
KHJlc3VsdC0+c3RhdHVzKSA6IFBLUGF5bWVudEF1dGhvcml6YXRpb25TdGF0dXNTdWNjZXNzOwot
ICAgIE5TQXJyYXkgKmVycm9ycyA9IHJlc3VsdCA/IHRvTlNFcnJvcnMocmVzdWx0LT5lcnJvcnMp
IDogQFsgXTsKLSAgICBbcGxhdGZvcm1EZWxlZ2F0ZSgpIGNvbXBsZXRlUGF5bWVudFNlc3Npb246
c3RhdHVzIGVycm9yczplcnJvcnMgZGlkUmVhY2hGaW5hbFN0YXRlOldlYkNvcmU6OmlzRmluYWxT
dGF0ZVJlc3VsdChyZXN1bHQpXTsKKyAgICBSZXRhaW5QdHI8TlNBcnJheT4gZXJyb3JzID0gcmVz
dWx0ID8gdG9OU0Vycm9ycyhyZXN1bHQtPmVycm9ycykgOiBAWyBdOworICAgIFtwbGF0Zm9ybURl
bGVnYXRlKCkgY29tcGxldGVQYXltZW50U2Vzc2lvbjpzdGF0dXMgZXJyb3JzOmVycm9ycy5nZXQo
KSBkaWRSZWFjaEZpbmFsU3RhdGU6V2ViQ29yZTo6aXNGaW5hbFN0YXRlUmVzdWx0KHJlc3VsdCld
OwogfQogCiB2b2lkIFBheW1lbnRBdXRob3JpemF0aW9uUHJlc2VudGVyOjpjb21wbGV0ZVNoaXBw
aW5nQ29udGFjdFNlbGVjdGlvbihjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpTaGlwcGluZ0NvbnRh
Y3RVcGRhdGU+JiB1cGRhdGUpCkBAIC0yMTIsNyArMjEwLDkgQEAgdm9pZCBQYXltZW50QXV0aG9y
aXphdGlvblByZXNlbnRlcjo6Y29tcGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24oY29uc3Qg
T3B0aW8KICAgICB9CiAKICAgICAvLyBGSVhNRTogV2ViQ29yZTo6U2hpcHBpbmdDb250YWN0VXBk
YXRlIHNob3VsZCBrbm93IGhvdyB0byBjb252ZXJ0IGl0c2VsZiB0byBhIFBLUGF5bWVudFJlcXVl
c3RTaGlwcGluZ0NvbnRhY3RVcGRhdGUuCi0gICAgYXV0byBzaGlwcGluZ0NvbnRhY3RVcGRhdGUg
PSBhZG9wdE5TKFtQQUw6OmFsbG9jUEtQYXltZW50UmVxdWVzdFNoaXBwaW5nQ29udGFjdFVwZGF0
ZUluc3RhbmNlKCkgaW5pdFdpdGhFcnJvcnM6dG9OU0Vycm9ycyh1cGRhdGUtPmVycm9ycykgcGF5
bWVudFN1bW1hcnlJdGVtczpXZWJDb3JlOjpwbGF0Zm9ybVN1bW1hcnlJdGVtcyh1cGRhdGUtPm5l
d1RvdGFsQW5kTGluZUl0ZW1zKSBzaGlwcGluZ01ldGhvZHM6dG9QS1NoaXBwaW5nTWV0aG9kcyh1
cGRhdGUtPm5ld1NoaXBwaW5nTWV0aG9kcyldKTsKKyAgICBhdXRvIHNoaXBwaW5nQ29udGFjdFVw
ZGF0ZSA9IGFkb3B0TlMoW1BBTDo6YWxsb2NQS1BheW1lbnRSZXF1ZXN0U2hpcHBpbmdDb250YWN0
VXBkYXRlSW5zdGFuY2UoKSBpbml0V2l0aEVycm9yczp0b05TRXJyb3JzKHVwZGF0ZS0+ZXJyb3Jz
KS5nZXQoKQorICAgICAgICBwYXltZW50U3VtbWFyeUl0ZW1zOldlYkNvcmU6OnBsYXRmb3JtU3Vt
bWFyeUl0ZW1zKHVwZGF0ZS0+bmV3VG90YWxBbmRMaW5lSXRlbXMpCisgICAgICAgIHNoaXBwaW5n
TWV0aG9kczp0b1BLU2hpcHBpbmdNZXRob2RzKHVwZGF0ZS0+bmV3U2hpcHBpbmdNZXRob2RzKS5n
ZXQoKV0pOwogICAgIFtwbGF0Zm9ybURlbGVnYXRlKCkgY29tcGxldGVTaGlwcGluZ0NvbnRhY3RT
ZWxlY3Rpb246c2hpcHBpbmdDb250YWN0VXBkYXRlLmdldCgpXTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvY29jb2EvV2ViUGF5bWVudENvb3JkaW5hdG9y
UHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FwcGxlUGF5L2NvY29hL1dlYlBh
eW1lbnRDb29yZGluYXRvclByb3h5Q29jb2EubW0KaW5kZXggMzEzMDg4NjY1MjVmNjE4YjhmNjE4
YTZkNTc5ZGI4NzM2MDcwMGU4Ny4uYmE1ZTM5YWU0NzI2ODNlNDk2ZWFmMjY4MTI1M2FlZjJjYWMx
M2MzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQXBwbGVQYXkvY29jb2EvV2Vi
UGF5bWVudENvb3JkaW5hdG9yUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9BcHBsZVBheS9jb2NvYS9XZWJQYXltZW50Q29vcmRpbmF0b3JQcm94eUNvY29hLm1tCkBAIC0x
ODcsMTUgKzE4Nyw3IEBAIFJldGFpblB0cjxQS1BheW1lbnRSZXF1ZXN0PiBXZWJQYXltZW50Q29v
cmRpbmF0b3JQcm94eTo6cGxhdGZvcm1QYXltZW50UmVxdWVzdChjCiAKICAgICBbcmVzdWx0IHNl
dE9yaWdpbmF0aW5nVVJMOm9yaWdpbmF0aW5nVVJMXTsKIAotICAgIC8vIEZJWE1FOiBXZSBkb24n
dCBzdXBwb3J0IGFueSBwbGF0Zm9ybXMgd2l0aG91dCAtc2V0VGh1bWJuYWlsVVJMczosIHNvIHRo
aXMgY2FuIGJlIHNpbXBsaWZpZWQuCi0gICAgaWYgKFtyZXN1bHQgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihzZXRUaHVtYm5haWxVUkxzOildKSB7Ci0gICAgICAgIGF1dG8gdGh1bWJuYWls
VVJMcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgICAgICBm
b3IgKGF1dG8mIGxpbmtJY29uVVJMIDogbGlua0ljb25VUkxzKQotICAgICAgICAgICAgW3RodW1i
bmFpbFVSTHMgYWRkT2JqZWN0OnN0YXRpY19jYXN0PE5TVVJMICo+KGxpbmtJY29uVVJMKV07Ci0K
LSAgICAgICAgW3Jlc3VsdCBzZXRUaHVtYm5haWxVUkxzOnRodW1ibmFpbFVSTHMuZ2V0KCldOwot
ICAgIH0gZWxzZSBpZiAoIWxpbmtJY29uVVJMcy5pc0VtcHR5KCkpCi0gICAgICAgIFtyZXN1bHQg
c2V0VGh1bWJuYWlsVVJMOmxpbmtJY29uVVJMc1swXV07CisgICAgW3Jlc3VsdCBzZXRUaHVtYm5h
aWxVUkxzOmNyZWF0ZU5TQXJyYXkobGlua0ljb25VUkxzKS5nZXQoKV07CiAKICAgICBbcmVzdWx0
IHNldEFQSVR5cGU6dG9BUElUeXBlKHBheW1lbnRSZXF1ZXN0LnJlcXVlc3RlcigpKV07CiAKQEAg
LTIxMSwxMCArMjAzLDkgQEAgUmV0YWluUHRyPFBLUGF5bWVudFJlcXVlc3Q+IFdlYlBheW1lbnRD
b29yZGluYXRvclByb3h5OjpwbGF0Zm9ybVBheW1lbnRSZXF1ZXN0KGMKIAogICAgIFtyZXN1bHQg
c2V0U2hpcHBpbmdUeXBlOnRvUEtTaGlwcGluZ1R5cGUocGF5bWVudFJlcXVlc3Quc2hpcHBpbmdU
eXBlKCkpXTsKIAotICAgIGF1dG8gc2hpcHBpbmdNZXRob2RzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0gICAgZm9yIChhdXRvJiBzaGlwcGluZ01ldGhvZCA6IHBh
eW1lbnRSZXF1ZXN0LnNoaXBwaW5nTWV0aG9kcygpKQotICAgICAgICBbc2hpcHBpbmdNZXRob2Rz
IGFkZE9iamVjdDp0b1BLU2hpcHBpbmdNZXRob2Qoc2hpcHBpbmdNZXRob2QpXTsKLSAgICBbcmVz
dWx0IHNldFNoaXBwaW5nTWV0aG9kczpzaGlwcGluZ01ldGhvZHMuZ2V0KCldOworICAgIFtyZXN1
bHQgc2V0U2hpcHBpbmdNZXRob2RzOmNyZWF0ZU5TQXJyYXkocGF5bWVudFJlcXVlc3Quc2hpcHBp
bmdNZXRob2RzKCksIFtdIChhdXRvJiBtZXRob2QpIHsKKyAgICAgICAgcmV0dXJuIHRvUEtTaGlw
cGluZ01ldGhvZChtZXRob2QpOworICAgIH0pLmdldCgpXTsKIAogICAgIFtyZXN1bHQgc2V0UGF5
bWVudFN1bW1hcnlJdGVtczpXZWJDb3JlOjpwbGF0Zm9ybVN1bW1hcnlJdGVtcyhwYXltZW50UmVx
dWVzdC50b3RhbCgpLCBwYXltZW50UmVxdWVzdC5saW5lSXRlbXMoKSldOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlUHJv
cGVydHlBcHBsaWVyLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllci5tbQppbmRleCBlNDcwMzVjY2ExZTdhODg5MmQx
ZDkwZWI4YjIxNTIzY2UxNGRhNDFlLi40MzU4ODU3ODQwZmViNjcyZDk1ZjUxNzZmYTUyOGZlMGJk
MGQyNGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUv
UmVtb3RlTGF5ZXJUcmVlUHJvcGVydHlBcHBsaWVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXIubW0KQEAg
LTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWVNYWMuaD4KICNp
bXBvcnQgPHBhbC9zcGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgogI2ltcG9ydCA8d3RmL0Jsb2Nr
T2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgpAQCAtMzEz
LDM1ICszMTQsMjggQEAgdm9pZCBSZW1vdGVMYXllclRyZWVQcm9wZXJ0eUFwcGxpZXI6OnVwZGF0
ZUNoaWxkcmVuKFJlbW90ZUxheWVyVHJlZU5vZGUmIG5vZGUsIGMKIAogICAgIGlmIChoYXNWaWV3
Q2hpbGRyZW4oKSkgewogICAgICAgICBBU1NFUlQobm9kZS51aVZpZXcoKSk7Ci0KLSAgICAgICAg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBzdWJ2aWV3cyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpwcm9wZXJ0aWVzLmNoaWxkcmVuLnNpemUoKV0p
OwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogcHJvcGVydGllcy5jaGlsZHJlbikgeworICAg
ICAgICBbY29udGVudFZpZXcoKSBfd2ViX3NldFN1YnZpZXdzOmNyZWF0ZU5TQXJyYXkocHJvcGVy
dGllcy5jaGlsZHJlbiwgWyZdIChhdXRvJiBjaGlsZCkgLT4gVUlWaWV3ICogewogICAgICAgICAg
ICAgYXV0byogY2hpbGROb2RlID0gcmVsYXRlZExheWVycy5nZXQoY2hpbGQpOwogICAgICAgICAg
ICAgQVNTRVJUKGNoaWxkTm9kZSk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkTm9kZSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAg
ICAgICAgQVNTRVJUKGNoaWxkTm9kZS0+dWlWaWV3KCkpOwotICAgICAgICAgICAgW3N1YnZpZXdz
IGFkZE9iamVjdDpjaGlsZE5vZGUtPnVpVmlldygpXTsKLSAgICAgICAgfQotCi0gICAgICAgIFtj
b250ZW50VmlldygpIF93ZWJfc2V0U3Vidmlld3M6c3Vidmlld3MuZ2V0KCldOworICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkTm9kZS0+dWlWaWV3KCk7CisgICAgICAgIH0pLmdldCgpXTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5
PiBzdWJsYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2Fw
YWNpdHk6cHJvcGVydGllcy5jaGlsZHJlbi5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIGNoaWxk
IDogcHJvcGVydGllcy5jaGlsZHJlbikgeworICAgIG5vZGUubGF5ZXIoKS5zdWJsYXllcnMgPSBj
cmVhdGVOU0FycmF5KHByb3BlcnRpZXMuY2hpbGRyZW4sIFsmXSAoYXV0byYgY2hpbGQpIC0+IENB
TGF5ZXIgKiB7CiAgICAgICAgIGF1dG8qIGNoaWxkTm9kZSA9IHJlbGF0ZWRMYXllcnMuZ2V0KGNo
aWxkKTsKICAgICAgICAgQVNTRVJUKGNoaWxkTm9kZSk7CiAgICAgICAgIGlmICghY2hpbGROb2Rl
KQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4gbmlsOwogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIEFTU0VSVCghY2hpbGROb2RlLT51aVZpZXcoKSk7
CiAjZW5kaWYKLSAgICAgICAgW3N1YmxheWVycyBhZGRPYmplY3Q6Y2hpbGROb2RlLT5sYXllcigp
XTsKLSAgICB9Ci0KLSAgICBub2RlLmxheWVyKCkuc3VibGF5ZXJzID0gc3VibGF5ZXJzLmdldCgp
OworICAgICAgICByZXR1cm4gY2hpbGROb2RlLT5sYXllcigpOworICAgIH0pLmdldCgpOwogfQog
CiB2b2lkIFJlbW90ZUxheWVyVHJlZVByb3BlcnR5QXBwbGllcjo6dXBkYXRlTWFzayhSZW1vdGVM
YXllclRyZWVOb2RlJiBub2RlLCBjb25zdCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5
ZXJQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzLCBjb25zdCBSZWxhdGVkTGF5ZXJNYXAmIHJlbGF0ZWRM
YXllcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tI
VFRQQ29va2llU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tI
VFRQQ29va2llU3RvcmUubW0KaW5kZXggMDg0Y2ZhZTQ3MmVlNzc5YzViY2E2YTFlYjI4OTczNTE2
MGE3YzRhZS4uMDIzYTUyM2ZiMjY2YTY4MzczN2ViMjc0ZWI5ODdkOWEzOGZjMDk5MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLSFRUUENvb2tpZVN0b3Jl
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0hUVFBDb29raWVT
dG9yZS5tbQpAQCAtMzQsMTUgKzM0LDEzIEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAj
aW1wb3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KKyNpbXBvcnQg
PHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiBzdGF0aWMgTlNBcnJheTxOU0hUVFBDb29raWUg
Kj4gKmNvcmVDb29raWVzVG9OU0Nvb2tpZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb2tpZT4m
IGNvcmVDb29raWVzKQogewotICAgIE5TTXV0YWJsZUFycmF5PE5TSFRUUENvb2tpZSAqPiAqbnND
b29raWVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNvcmVDb29raWVzLnNp
emUoKV07Ci0KLSAgICBmb3IgKGF1dG8mIGNvb2tpZSA6IGNvcmVDb29raWVzKQotICAgICAgICBb
bnNDb29raWVzIGFkZE9iamVjdDooTlNIVFRQQ29va2llICopY29va2llXTsKLQotICAgIHJldHVy
biBuc0Nvb2tpZXM7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoY29yZUNvb2tpZXMsIFtdIChh
dXRvJiBjb29raWUpIC0+IE5TSFRUUENvb2tpZSAqIHsKKyAgICAgICAgcmV0dXJuIGNvb2tpZTsK
KyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiBjbGFzcyBXS0hUVFBDb29raWVTdG9yZU9ic2Vy
dmVyIDogcHVibGljIEFQSTo6SFRUUENvb2tpZVN0b3JlOjpPYnNlcnZlciB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCmluZGV4IGY1
ZWFjZWUwZThjZTNiMzE0OTM0NTQxMGY5YTI2MWQ1MjdlMzkxMTguLjQyZDQ1NmEyMWNiOTZiYzM0
YzhjYzU5OTdhMWIzMTdmOTRiMjk1ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCkBAIC0xNjQsMTEgKzE2NCw5IEBAICsgKFdL
UHJvY2Vzc1Bvb2wgKilfc2hhcmVkUHJvY2Vzc1Bvb2wKIAogKyAoTlNBcnJheTxXS1Byb2Nlc3NQ
b29sICo+ICopX2FsbFByb2Nlc3NQb29sc0ZvclRlc3RpbmcKIHsKLSAgICBhdXRvJiBhbGxQb29s
cyA9IFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpOwotICAgIGF1dG8g
bnNBbGxQb29scyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBh
Y2l0eTphbGxQb29scy5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8qIHBvb2wgOiBhbGxQb29scykK
LSAgICAgICAgW25zQWxsUG9vbHMgYWRkT2JqZWN0OndyYXBwZXIoKnBvb2wpXTsKLSAgICByZXR1
cm4gbnNBbGxQb29scy5hdXRvcmVsZWFzZSgpOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpLCBbXSAoYXV0byYgcG9vbCkg
eworICAgICAgICByZXR1cm4gd3JhcHBlcigqcG9vbCk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsK
IH0KIAogKyAoTlNVUkwgKilfd2Vic2l0ZURhdGFVUkxGb3JDb250YWluZXJXaXRoVVJMOihOU1VS
TCAqKWNvbnRhaW5lclVSTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0KaW5kZXggNmIxMWIzODQ0MTVhYWI1MzI3MWI0NjAxNDFiNTU5YTVmOGEzNzYx
NC4uMmNkOTNhYjFjYTM5MmZjYmQ1MmEzNzc3YWJlYWMzZTJlNmMwYTRlNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0xNjcyLDM3ICsx
NjcyLDIzIEBAIC0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlv
bjooX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpCiAgICAgICAgIGlmICghZGVsZWdhdGUp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKCFbZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW1z
OildKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtUmVmZXJlbmNlcykgewot
ICAgICAgICAgICAgICAgIE5TTXV0YWJsZUFycmF5ICp3a1Rva2VucyA9IFtOU011dGFibGVBcnJh
eSBhcnJheVdpdGhDYXBhY2l0eTppdGVtLnRva2Vucy5zaXplKCldOwotICAgICAgICAgICAgICAg
IGZvciAoYXV0byYgdG9rZW4gOiBpdGVtLnRva2VucykgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIHdrVG9rZW4gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIGFsbG9jXSBp
bml0XSk7Ci0gICAgICAgICAgICAgICAgICAgIFt3a1Rva2VuIHNldElkZW50aWZpZXI6U3RyaW5n
OjpudW1iZXIodG9rZW4uaWRlbnRpZmllci50b1VJbnQ2NCgpKV07Ci0gICAgICAgICAgICAgICAg
ICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6dG9rZW4uY29udGVudF07Ci0gICAgICAgICAgICAgICAg
ICAgIFt3a1Rva2VuIHNldEV4Y2x1ZGVkOnRva2VuLmlzRXhjbHVkZWRdOwotICAgICAgICAgICAg
ICAgICAgICBbd2tUb2tlbnMgYWRkT2JqZWN0OndrVG9rZW4uZ2V0KCldOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBhdXRvIHdrSXRlbSA9IGFkb3B0TlMoW1tfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKGl0
ZW0uaWRlbnRpZmllci50b1VJbnQ2NCgpKSB0b2tlbnM6d2tUb2tlbnNdKTsKLSAgICAgICAgICAg
ICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6cmV0YWluZWRTZWxmLmdldCgpIGRpZEZpbmRUZXh0TWFu
aXB1bGF0aW9uSXRlbTp3a0l0ZW0uZ2V0KCldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKndrSXRlbXMgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6aXRlbVJlZmVyZW5jZXMuc2l6ZSgpXTsK
LSAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbVJlZmVyZW5jZXMpIHsKLSAgICAgICAgICAg
IE5TTXV0YWJsZUFycmF5ICp3a1Rva2VucyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBh
Y2l0eTppdGVtLnRva2Vucy5zaXplKCldOwotICAgICAgICAgICAgZm9yIChhdXRvJiB0b2tlbiA6
IGl0ZW0udG9rZW5zKSB7CisgICAgICAgIGF1dG8gY3JlYXRlV0tJdGVtID0gW10gKGNvbnN0IFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25JdGVtJiBpdGVt
KSB7CisgICAgICAgICAgICBhdXRvIHRva2VucyA9IGNyZWF0ZU5TQXJyYXkoaXRlbS50b2tlbnMs
IFtdIChhdXRvJiB0b2tlbikgewogICAgICAgICAgICAgICAgIGF1dG8gd2tUb2tlbiA9IGFkb3B0
TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gYWxsb2NdIGluaXRdKTsKICAgICAgICAgICAg
ICAgICBbd2tUb2tlbiBzZXRJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKHRva2VuLmlkZW50aWZp
ZXIudG9VSW50NjQoKSldOwogICAgICAgICAgICAgICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6dG9r
ZW4uY29udGVudF07CiAgICAgICAgICAgICAgICAgW3drVG9rZW4gc2V0RXhjbHVkZWQ6dG9rZW4u
aXNFeGNsdWRlZF07Ci0gICAgICAgICAgICAgICAgW3drVG9rZW5zIGFkZE9iamVjdDp3a1Rva2Vu
LmdldCgpXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gd2tJdGVtID0gYWRvcHRO
UyhbW19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6U3Ry
aW5nOjpudW1iZXIoaXRlbS5pZGVudGlmaWVyLnRvVUludDY0KCkpIHRva2Vuczp3a1Rva2Vuc10p
OwotICAgICAgICAgICAgW3drSXRlbXMgYWRkT2JqZWN0OndrSXRlbS5nZXQoKV07CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHdrVG9rZW47CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gYWxsb2NdIGluaXRXaXRoSWRl
bnRpZmllcjpTdHJpbmc6Om51bWJlcihpdGVtLmlkZW50aWZpZXIudG9VSW50NjQoKSkgdG9rZW5z
OnRva2Vucy5nZXQoKV0pOworICAgICAgICB9OworCisgICAgICAgIGlmIChbZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpkaWRGaW5kVGV4dE1hbmlwdWxhdGlv
bkl0ZW1zOildKQorICAgICAgICAgICAgW2RlbGVnYXRlIF93ZWJWaWV3OnJldGFpbmVkU2VsZi5n
ZXQoKSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW1zOmNyZWF0ZU5TQXJyYXkoaXRlbVJlZmVy
ZW5jZXMsIGNyZWF0ZVdLSXRlbSkuZ2V0KCldOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgaXRlbSA6IGl0ZW1SZWZlcmVuY2VzKQorICAgICAgICAgICAgICAgIFtkZWxl
Z2F0ZSBfd2ViVmlldzpyZXRhaW5lZFNlbGYuZ2V0KCkgZGlkRmluZFRleHRNYW5pcHVsYXRpb25J
dGVtOmNyZWF0ZVdLSXRlbShpdGVtKS5nZXQoKV07CiAgICAgICAgIH0KLSAgICAgICAgW2RlbGVn
YXRlIF93ZWJWaWV3OnJldGFpbmVkU2VsZi5nZXQoKSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0
ZW1zOndrSXRlbXNdOwotCiAgICAgfSwgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJs
b2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgewogICAgICAgICBjYXB0dXJlZENvbXBsZXRp
b25CbG9jaygpOwogICAgIH0pOwpAQCAtMTc0NywzNiArMTczMywzMiBAQCBzdGF0aWMgUmV0YWlu
UHRyPE5TTXV0YWJsZUFycmF5PiBtYWtlRmFpbHVyZVNldEZvckFsbFRleHRNYW5pcHVsYXRpb25J
dGVtcyhOU0FycgogICAgIHJldHVybiB3a0ZhaWx1cmVzOwogfTsKIAotc3RhdGljIFJldGFpblB0
cjxOU011dGFibGVBcnJheT4gd2tUZXh0TWFuaXB1bGF0aW9uRXJyb3JzKE5TQXJyYXk8X1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKml0ZW1zLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvbkZhaWx1cmU+JiBmYWlsdXJlcykKK3N0
YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gd2tUZXh0TWFuaXB1bGF0aW9uRXJyb3JzKE5TQXJyYXk8
X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKml0ZW1zLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvbkZhaWx1cmU+JiBmYWlsdXJl
cykKIHsKLSAgICB1c2luZyBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZSA9IFdlYkNvcmU6OlRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTsKLQogICAgIGlm
IChmYWlsdXJlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBSZXRhaW5QdHI8TlNNdXRhYmxl
QXJyYXk+IHsgbmlsIH07CisgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHdrRmFpbHVyZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6ZmFpbHVyZXMuc2l6ZSgpXSk7Ci0gICAgZm9yIChhdXRvJiBjb3Jl
RmFpbHVyZSA6IGZhaWx1cmVzKSB7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoZmFpbHVyZXMs
IFsmXSAoYXV0byYgY29yZUZhaWx1cmUpIC0+IE5TRXJyb3IgKiB7CiAgICAgICAgIEFTU0VSVChj
b3JlRmFpbHVyZS5pbmRleCA8IGl0ZW1zLmNvdW50KTsKICAgICAgICAgaWYgKGNvcmVGYWlsdXJl
LmluZGV4ID49IGl0ZW1zLmNvdW50KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1
dG8qIGl0ZW0gPSBpdGVtc1tjb3JlRmFpbHVyZS5pbmRleF07Ci0gICAgICAgIEFTU0VSVChjb3Jl
VGV4dE1hbmlwdWxhdGlvbkl0ZW1JZGVudGlmaWVyRnJvbVN0cmluZyhpdGVtLmlkZW50aWZpZXIp
ID09IGNvcmVGYWlsdXJlLmlkZW50aWZpZXIpOwotICAgICAgICBhdXRvIGVycm9yQ29kZSA9IChb
JmNvcmVGYWlsdXJlXSgpIHsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIGF1dG8g
ZXJyb3JDb2RlID0gc3RhdGljX2Nhc3Q8TlNJbnRlZ2VyPigoWyZjb3JlRmFpbHVyZV0geworICAg
ICAgICAgICAgdXNpbmcgVHlwZSA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTsKICAgICAgICAgICAgIHN3aXRjaCAoY29yZUZhaWx1
cmUudHlwZSkgewotICAgICAgICAgICAgY2FzZSBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6Q29u
dGVudENoYW5nZWQ6CisgICAgICAgICAgICBjYXNlIFR5cGU6OkNvbnRlbnRDaGFuZ2VkOgogICAg
ICAgICAgICAgICAgIHJldHVybiBfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbUVycm9yQ29udGVudENo
YW5nZWQ7Ci0gICAgICAgICAgICBjYXNlIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpJbnZhbGlk
SXRlbToKKyAgICAgICAgICAgIGNhc2UgVHlwZTo6SW52YWxpZEl0ZW06CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIF9XS1RleHRNYW5pcHVsYXRpb25JdGVtRXJyb3JJbnZhbGlkSXRlbTsKLSAgICAg
ICAgICAgIGNhc2UgTWFuaXB1bGF0aW9uRmFpbHVyZVR5cGU6OkludmFsaWRUb2tlbjoKKyAgICAg
ICAgICAgIGNhc2UgVHlwZTo6SW52YWxpZFRva2VuOgogICAgICAgICAgICAgICAgIHJldHVybiBf
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbUVycm9ySW52YWxpZFRva2VuOwotICAgICAgICAgICAgY2Fz
ZSBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6RXhjbHVzaW9uVmlvbGF0aW9uOgorICAgICAgICAg
ICAgY2FzZSBUeXBlOjpFeGNsdXNpb25WaW9sYXRpb246CiAgICAgICAgICAgICAgICAgcmV0dXJu
IF9XS1RleHRNYW5pcHVsYXRpb25JdGVtRXJyb3JFeGNsdXNpb25WaW9sYXRpb247CiAgICAgICAg
ICAgICB9Ci0gICAgICAgIH0pKCk7Ci0gICAgICAgIFt3a0ZhaWx1cmVzIGFkZE9iamVjdDpbTlNF
cnJvciBlcnJvcldpdGhEb21haW46X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW1FcnJvckRvbWFpbiBj
b2RlOnN0YXRpY19jYXN0PGludD4oZXJyb3JDb2RlKSB1c2VySW5mbzpAe19XS1RleHRNYW5pcHVs
YXRpb25JdGVtRXJyb3JJdGVtS2V5OiBpdGVtfV1dOwotICAgIH0KLQotICAgIHJldHVybiB3a0Zh
aWx1cmVzOworICAgICAgICB9KSgpKTsKKyAgICAgICAgYXV0byBpdGVtID0gaXRlbXNbY29yZUZh
aWx1cmUuaW5kZXhdOworICAgICAgICBBU1NFUlQoY29yZVRleHRNYW5pcHVsYXRpb25JdGVtSWRl
bnRpZmllckZyb21TdHJpbmcoaXRlbS5pZGVudGlmaWVyKSA9PSBjb3JlRmFpbHVyZS5pZGVudGlm
aWVyKTsKKyAgICAgICAgcmV0dXJuIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpfV0tUZXh0TWFu
aXB1bGF0aW9uSXRlbUVycm9yRG9tYWluIGNvZGU6ZXJyb3JDb2RlIHVzZXJJbmZvOkB7X1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW1FcnJvckl0ZW1LZXk6IGl0ZW19XTsKKyAgICB9KTsKIH0KIAogLSAo
dm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6KE5TQXJyYXk8X1dLVGV4dE1h
bmlwdWxhdGlvbkl0ZW0gKj4gKilpdGVtcyBjb21wbGV0aW9uOih2b2lkKF4pKE5TQXJyYXk8TlNF
cnJvciAqPiAqZXJyb3JzKSljb21wbGV0aW9uSGFuZGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2VicGFnZVByZWZlcmVuY2VzLm1tCmluZGV4
IGE1YTk0MWYxZDdmYjJkYmRiY2RlY2JmMTZkZTNiYmVjZGJlYzk5YTEuLjlhNTMwMzc0ODA0MjY3
ZTU2NWRlMzUxZjAyY2JlN2M4OTNlNmUwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYnBhZ2VQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0KQEAgLTI1MSwx
MSArMjUxLDkgQEAgLSAoX1dLV2Vic2l0ZVBvcFVwUG9saWN5KV9wb3BVcFBvbGljeQogCiAtIChO
U0FycmF5PF9XS0N1c3RvbUhlYWRlckZpZWxkcyAqPiAqKV9jdXN0b21IZWFkZXJGaWVsZHMKIHsK
LSAgICBjb25zdCBhdXRvJiBmaWVsZHMgPSBfd2Vic2l0ZVBvbGljaWVzLT5jdXN0b21IZWFkZXJG
aWVsZHMoKTsKLSAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhDYXBhY2l0eTpmaWVsZHMuc2l6ZSgpXSBhdXRvcmVsZWFzZV07Ci0gICAg
Zm9yIChjb25zdCBhdXRvJiBmaWVsZCA6IGZpZWxkcykKLSAgICAgICAgW2FycmF5IGFkZE9iamVj
dDp3cmFwcGVyKEFQSTo6Q3VzdG9tSGVhZGVyRmllbGRzOjpjcmVhdGUoZmllbGQpKV07Ci0gICAg
cmV0dXJuIGFycmF5OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KF93ZWJzaXRlUG9saWNpZXMt
PmN1c3RvbUhlYWRlckZpZWxkcygpLCBbXSAoYXV0byYgZmllbGQpIHsKKyAgICAgICAgcmV0dXJu
IHdyYXBwZXIoQVBJOjpDdXN0b21IZWFkZXJGaWVsZHM6OmNyZWF0ZShmaWVsZCkpOworICAgIH0p
LmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKHZvaWQpX3NldEN1c3RvbUhlYWRlckZpZWxkczooTlNB
cnJheTxfV0tDdXN0b21IZWFkZXJGaWVsZHMgKj4gKilmaWVsZHMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhUmVjb3JkLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0KaW5k
ZXggNTlkNGRhYWFkMjQzOWIyZDIyOTc0Zjk5ZDg3ODg1MmRlMDI0ZjMzZC4uNDU0MDNkMTY5MzZl
YWE4MjU0Y2Q1MDVmYTg4NGVkZjBkYWZlMDQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFSZWNvcmQubW0KQEAgLTE1NCwx
MSArMTU0LDkgQEAgLSAoX1dLV2Vic2l0ZURhdGFTaXplICopX2RhdGFTaXplCiAKIC0gKE5TQXJy
YXk8TlNTdHJpbmcgKj4gKilfb3JpZ2luc1N0cmluZ3MKIHsKLSAgICBhdXRvIG9yaWdpbnMgPSBf
d2Vic2l0ZURhdGFSZWNvcmQtPndlYnNpdGVEYXRhUmVjb3JkKCkub3JpZ2luczsKLSAgICBOU011
dGFibGVBcnJheTxOU1N0cmluZyAqPiAqYXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5Om9yaWdpbnMuc2l6ZSgpXTsKLSAgICBmb3IgKGF1dG8mIG9yaWdpbiA6
IG9yaWdpbnMpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6KE5TU3RyaW5nICopb3JpZ2luLnRv
U3RyaW5nKCldOwotICAgIHJldHVybiBbYXJyYXkgYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBj
cmVhdGVOU0FycmF5KF93ZWJzaXRlRGF0YVJlY29yZC0+d2Vic2l0ZURhdGFSZWNvcmQoKS5vcmln
aW5zLCBbXSAoYXV0byYgb3JpZ2luKSAtPiBOU1N0cmluZyAqIHsKKyAgICAgICAgcmV0dXJuIG9y
aWdpbi50b1N0cmluZygpOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIEBlbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3Rv
cmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0
b3JlLm1tCmluZGV4IGE0OGUxYjYyMDI2Yjc3MTMyZGY0Zjc5OTAyN2I3N2M1NmE5MWNmY2EuLjcz
Yzk4YTM0NjI1ZDhmNTU1MjQxNDM4NGUzY2U2YjhkYjg0MGU4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQpA
QCAtNTQyLDExICs1NDIsOSBAQCAtICh2b2lkKV9nZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YVN1bW1hcnk6KHZvaWQgKF4pKE5TQXJyYXk8X1dLUmVzb3VyY2VMb2FkUwogewogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAgX3dlYnNpdGVEYXRhU3RvcmUtPmdldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeShbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtl
QmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHRoaXJkUGFydHlEb21haW5zKSB7
Ci0gICAgICAgIE5TTXV0YWJsZUFycmF5PF9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBh
cnR5ICo+ICphcGlUaGlyZFBhcnRpZXMgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhDYXBhY2l0eTp0aGlyZFBhcnR5RG9tYWlucy5zaXplKCldIGF1dG9yZWxlYXNlXTsKLSAgICAg
ICAgZm9yIChhdXRvJiB0aGlyZFBhcnR5IDogdGhpcmRQYXJ0eURvbWFpbnMpCi0gICAgICAgICAg
ICBbYXBpVGhpcmRQYXJ0aWVzIGFkZE9iamVjdDp3cmFwcGVyKEFQSTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RoaXJkUGFydHk6OmNyZWF0ZShXVEZNb3ZlKHRoaXJkUGFydHkpKSldOwotCi0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGFwaVRoaXJkUGFydGllcyk7CisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGNyZWF0ZU5TQXJyYXkodGhpcmRQYXJ0eURvbWFpbnMsIFtdIChhdXRvJiYgZG9t
YWluKSB7CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcihBUEk6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NUaGlyZFBhcnR5OjpjcmVhdGUoV1RGTW92ZShkb21haW4pKSk7CisgICAgICAgIH0pLmdl
dCgpKTsKICAgICB9KTsKICNlbHNlCiAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tEb3dubG9hZC5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tEb3dubG9hZC5tbQppbmRleCBk
MWE2ODNkZDJlNjhlOTk2M2RlYzlmMjhmZjY4MGU4YjQxMmNjMzRhLi43ZGY5NDgwZDA4YTA3MDli
NzI0NTNlN2RiMjgzOWRkMjQ4Y2VlNDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLRG93bmxvYWQubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS0Rvd25sb2FkLm1tCkBAIC02NywxMSArNjcsOSBAQCAtIChXS1dlYlZp
ZXcgKilvcmlnaW5hdGluZ1dlYlZpZXcKIAogLShOU0FycmF5PE5TVVJMICo+ICopcmVkaXJlY3RD
aGFpbgogewotICAgIGF1dG8mIHJlZGlyZWN0VVJMcyA9IF9kb3dubG9hZC0+cmVkaXJlY3RDaGFp
bigpOwotICAgIE5TTXV0YWJsZUFycmF5PE5TVVJMICo+ICpuc1VSTHMgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXlXaXRoQ2FwYWNpdHk6cmVkaXJlY3RVUkxzLnNpemUoKV07Ci0gICAgZm9yIChjb25z
dCBhdXRvJiByZWRpcmVjdFVSTCA6IHJlZGlyZWN0VVJMcykKLSAgICAgICAgW25zVVJMcyBhZGRP
YmplY3Q6KE5TVVJMICopcmVkaXJlY3RVUkxdOwotICAgIHJldHVybiBuc1VSTHM7CisgICAgcmV0
dXJuIGNyZWF0ZU5TQXJyYXkoX2Rvd25sb2FkLT5yZWRpcmVjdENoYWluKCksIFtdIChhdXRvJiB1
cmwpIC0+IE5TVVJMICogeworICAgICAgICByZXR1cm4gdXJsOworICAgIH0pLmF1dG9yZWxlYXNl
KCk7CiB9CiAKIC0gKEJPT0wpd2FzVXNlckluaXRpYXRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0ZyYW1lVHJlZU5vZGUubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLRnJhbWVUcmVlTm9kZS5tbQppbmRleCBlYzRjNGE3
ZWUwMmUyMjQ3ZmNlYmIwNDdlM2I2ZTc3ZThkZDY0Mjc4Li40ZDM5ZTIxNTgyMTY3YmM4NTFiOTBk
YzRhMTg1NjI0ZTZiZjBjMjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLRnJhbWVUcmVlTm9kZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLRnJhbWVUcmVlTm9kZS5tbQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9y
dCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxlSW50ZXJuYWwu
aCIKICNpbXBvcnQgIl9XS0ZyYW1lVHJlZU5vZGVJbnRlcm5hbC5oIgorI2ltcG9ydCA8d3RmL2Nv
Y29hL1ZlY3RvckNvY29hLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBfV0tGcmFtZVRyZWVOb2RlCiAK
QEAgLTYyLDExICs2Myw5IEBAIC0gKFdLV2ViVmlldyAqKXdlYlZpZXcKIAogLSAoTlNBcnJheTxf
V0tGcmFtZVRyZWVOb2RlICo+ICopY2hpbGRGcmFtZXMKIHsKLSAgICBjb25zdCBhdXRvJiBjaGls
ZHJlbiA9IF9ub2RlLT5jaGlsZEZyYW1lcygpOwotICAgIE5TTXV0YWJsZUFycmF5PF9XS0ZyYW1l
VHJlZU5vZGUgKj4gKmFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNo
aWxkcmVuLnNpemUoKV07Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQot
ICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OndyYXBwZXIoQVBJOjpGcmFtZVRyZWVOb2RlOjpjcmVh
dGUoV2ViS2l0OjpGcmFtZVRyZWVOb2RlRGF0YShjaGlsZCksIF9ub2RlLT5wYWdlKCkpKV07Ci0g
ICAgcmV0dXJuIGFycmF5OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KF9ub2RlLT5jaGlsZEZy
YW1lcygpLCBbJl0gKGF1dG8mIGNoaWxkKSB7CisgICAgICAgIHJldHVybiB3cmFwcGVyKEFQSTo6
RnJhbWVUcmVlTm9kZTo6Y3JlYXRlKFdlYktpdDo6RnJhbWVUcmVlTm9kZURhdGEoY2hpbGQpLCBf
bm9kZS0+cGFnZSgpKSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoaWQpY29weVdp
dGhab25lOihOU1pvbmUgKil6b25lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tbQppbmRl
eCBhZDM2NWJjYjFmNTFhZGIwNmU3NjI2MTYzM2UxODVkOGMxNWNhZWQwLi5jNDNkNDI3MWU1ZjVj
MzVlMzNkNjkxNDFkNDcyMjkxY2E3YWQyMDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b24ubW0KQEAgLTE0MywxMSArMTQzLDkgQEAgLSAoTlNBcnJheTxOU1VSTCAqPiAqKWFkZGl0aW9u
YWxSZWFkQWNjZXNzQWxsb3dlZFVSTHMKICAgICBpZiAocGF0aHMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gQFsgXTsKIAotICAgIE5TTXV0YWJsZUFycmF5ICp1cmxzID0gW05TTXV0YWJsZUFy
cmF5IGFycmF5V2l0aENhcGFjaXR5OnBhdGhzLnNpemUoKV07Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBwYXRoIDogcGF0aHMpCi0gICAgICAgIFt1cmxzIGFkZE9iamVjdDpbTlNVUkwgZmlsZVVSTFdp
dGhGaWxlU3lzdGVtUmVwcmVzZW50YXRpb246cGF0aC5kYXRhKCkgaXNEaXJlY3Rvcnk6Tk8gcmVs
YXRpdmVUb1VSTDpuaWxdXTsKLQotICAgIHJldHVybiB1cmxzOworICAgIHJldHVybiBjcmVhdGVO
U0FycmF5KHBhdGhzLCBbXSAoYXV0byYgcGF0aCkgeworICAgICAgICByZXR1cm4gW05TVVJMIGZp
bGVVUkxXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOnBhdGguZGF0YSgpIGlzRGlyZWN0b3J5
Ok5PIHJlbGF0aXZlVG9VUkw6bmlsXTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtICh2
b2lkKXNldEFkZGl0aW9uYWxSZWFkQWNjZXNzQWxsb3dlZFVSTHM6KE5TQXJyYXk8TlNVUkwgKj4g
KilhZGRpdGlvbmFsUmVhZEFjY2Vzc0FsbG93ZWRVUkxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFy
dHkubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RoaXJkUGFydHkubW0KaW5kZXggNTNmOWQ5ZjM1OWVkNmFmNTQ1ODE1NjU4YjM1
MWQzZjdiMjQ0Y2M3ZS4uZjA0NmJkZGYzYTU4MjkxNWRhMDdjZDIxMDIzOWU4Mzg1MjUwMjlmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eS5tbQpAQCAtMjcs
NiArMjcsNyBAQAogI2ltcG9ydCAiX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHlJ
bnRlcm5hbC5oIgogCiAjaW1wb3J0ICJBUElBcnJheS5oIgorI2ltcG9ydCA8d3RmL2NvY29hL1Zl
Y3RvckNvY29hLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGhpcmRQYXJ0eQogCkBAIC00MywxMiArNDQsOSBAQCAtIChOU1N0cmluZyAqKXRoaXJkUGFydHlE
b21haW4KIAogLSAoTlNBcnJheTxfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eSAq
PiAqKXVuZGVyRmlyc3RQYXJ0aWVzCiB7Ci0gICAgYXV0byBhcGlGaXJzdFBhcnRpZXMgPSBfdGhp
cmRQYXJ0eS0+dW5kZXJGaXJzdFBhcnRpZXMoKTsKLSAgICBOU011dGFibGVBcnJheTxfV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eSAqPiAqYXBpVW5kZXJGaXJzdFBhcnRpZXMgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6YXBpRmlyc3RQYXJ0aWVzLnNpemUoKV07
Ci0gICAgZm9yIChjb25zdCBhdXRvJiB0aGlyZFBhcnR5RGF0YVVuZGVyRmlyc3RQYXJ0eSA6IGFw
aUZpcnN0UGFydGllcykKLSAgICAgICAgW2FwaVVuZGVyRmlyc3RQYXJ0aWVzIGFkZE9iamVjdDp3
cmFwcGVyKEFQSTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHk6OmNyZWF0ZSh0aGly
ZFBhcnR5RGF0YVVuZGVyRmlyc3RQYXJ0eSkpXTsKLQotICAgIHJldHVybiBhcGlVbmRlckZpcnN0
UGFydGllczsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShfdGhpcmRQYXJ0eS0+dW5kZXJGaXJz
dFBhcnRpZXMoKSwgW10gKGF1dG8mIGRhdGEpIHsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIoQVBJ
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eTo6Y3JlYXRlKGRhdGEpKTsKKyAgICB9
KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChBUEk6Ok9iamVjdCYpX2FwaU9iamVjdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdJT1MubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQppbmRleCBiYTA2
YWNlOTZkYTA0OTY1YTcyZGZlY2Y3MjU1OWIyZDM2ZWUyNmIzLi41YWYxN2U2ZGVhMDUwZTAwMDJm
NzdkMmMzZmIwNjM0N2NjZmYxMGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvaW9zL1dLV2ViVmlld0lPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvaW9zL1dLV2ViVmlld0lPUy5tbQpAQCAtNTYsNiArNTYsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL1F1YXJ0ekNvcmVT
UEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvaW9zL0dyYXBoaWNzU2VydmljZXNTUEkuaD4KKyNpbXBv
cnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9O
KQogI2ltcG9ydCAiV0tEYXRhRGV0ZWN0b3JUeXBlc0ludGVybmFsLmgiCkBAIC0zMDQ5LDEwICsz
MDUwLDkgQEAgLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9m
ZnNldDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDoKICAgICBbX2NvbnRlbnRWaWV3IF9hY2Nl
c3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0Om9mZnNldCB3aXRoVGV4dDp0
ZXh0IGNvbXBsZXRpb25IYW5kbGVyOltjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJs
b2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rp
b25SZWN0PiYgc2VsZWN0aW9uUmVjdHMpIHsKICAgICAgICAgaWYgKCFjYXB0dXJlZENvbXBsZXRp
b25IYW5kbGVyKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRvIHJlY3RWYWx1ZXMg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2VsZWN0
aW9uUmVjdHMuc2l6ZSgpXSk7Ci0gICAgICAgIGZvciAoYXV0byYgc2VsZWN0aW9uUmVjdCA6IHNl
bGVjdGlvblJlY3RzKQotICAgICAgICAgICAgW3JlY3RWYWx1ZXMgYWRkT2JqZWN0OltOU1ZhbHVl
IHZhbHVlV2l0aENHUmVjdDpzZWxlY3Rpb25SZWN0LnJlY3QoKV1dOwotICAgICAgICBjYXB0dXJl
ZENvbXBsZXRpb25IYW5kbGVyKHJlY3RWYWx1ZXMuZ2V0KCkpOworICAgICAgICBjYXB0dXJlZENv
bXBsZXRpb25IYW5kbGVyKGNyZWF0ZU5TQXJyYXkoc2VsZWN0aW9uUmVjdHMsIFtdIChhdXRvJiBy
ZWN0KSB7CisgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnJlY3Qu
cmVjdCgpXTsKKyAgICAgICAgfSkuZ2V0KCkpOwogICAgIH1dOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KaW5kZXggNWJhODgyNTY1
MzhlZmE4MGIwYjA5ODJlMjgxNThhYzY1MGFlZGMyYS4uNmE2OTkyMGNlNzM0YzQ1YzBhNTkzMThi
N2MwOGQ5YjVlNDEwMzhlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvTmF2aWdhdGlvblN0YXRlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L05hdmlnYXRpb25TdGF0ZS5tbQpAQCAtNzgsNiArNzgsNyBAQAogI2ltcG9ydCA8d3RmL0Jsb2Nr
UHRyLmg+CiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9VUkwu
aD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkgJiYgIVBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogI2ltcG9ydCA8cGFsL2lvcy9NYW5h
Z2VkQ29uZmlndXJhdGlvblNvZnRMaW5rLmg+CkBAIC00NTksMTMgKzQ2MCwxMyBAQCBib29sIE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0
KFdlYlBhZ2VQcm94eSYsCiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIE5TTXV0YWJsZUFycmF5PFdLQmFja0ZvcndhcmRMaXN0SXRlbSAq
PiAqcmVtb3ZlZEl0ZW1zID0gbmlsOwotICAgIGlmIChyZW1vdmVkLnNpemUoKSkgewotICAgICAg
ICByZW1vdmVkSXRlbXMgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0
eTpyZW1vdmVkLnNpemUoKV0gYXV0b3JlbGVhc2VdOwotICAgICAgICBmb3IgKGF1dG8mIHJlbW92
ZWRJdGVtIDogcmVtb3ZlZCkKLSAgICAgICAgICAgIFtyZW1vdmVkSXRlbXMgYWRkT2JqZWN0Ondy
YXBwZXIocmVtb3ZlZEl0ZW0uZ2V0KCkpXTsKKyAgICBSZXRhaW5QdHI8TlNBcnJheTxXS0JhY2tG
b3J3YXJkTGlzdEl0ZW0gKj4+IHJlbW92ZWRJdGVtczsKKyAgICBpZiAoIXJlbW92ZWQuaXNFbXB0
eSgpKSB7CisgICAgICAgIHJlbW92ZWRJdGVtcyA9IGNyZWF0ZU5TQXJyYXkocmVtb3ZlZCwgW10g
KGF1dG8mIHJlbW92ZWRJdGVtKSB7CisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcihyZW1vdmVk
SXRlbS5nZXQoKSk7CisgICAgICAgIH0pOwogICAgIH0KLSAgICBbKGlkIDxXS05hdmlnYXRpb25E
ZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25T
dGF0ZS5tX3dlYlZpZXcgYmFja0ZvcndhcmRMaXN0SXRlbUFkZGVkOndyYXBwZXIoYWRkZWQpIHJl
bW92ZWQ6cmVtb3ZlZEl0ZW1zXTsKKyAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZh
dGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZp
ZXcgYmFja0ZvcndhcmRMaXN0SXRlbUFkZGVkOndyYXBwZXIoYWRkZWQpIHJlbW92ZWQ6cmVtb3Zl
ZEl0ZW1zLmdldCgpXTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVNjcm9sbGlu
Z1BlcmZvcm1hbmNlRGF0YS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEubW0KaW5kZXggODEz
YjE4MTI3MGY1MjBlOTI0ZWY0ZjYxMmQ4MTUyNWZkNmU2M2Y1MC4uZWFlZmI5ZTFiNTFmMmZjNmRi
NmIzNGM4ZDI5OTgxOGJjZmY1MzMyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0
YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
TGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRhLm1tCkBAIC0zMCw2ICszMCw3IEBACiAj
aW1wb3J0ICJSZW1vdGVMYXllclRyZWVIb3N0LmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL0NBTGF5
ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGlsZUNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPHd0Zi9j
b2NvYS9WZWN0b3JDb2NvYS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtNzIsMTYgKzczLDEzIEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlU2Nyb2xs
aW5nUGVyZm9ybWFuY2VEYXRhOjphcHBlbmRCbGFua1BpeGVsQ291bnQoQmxhbmtQaXhlbENvCiAK
IE5TQXJyYXkgKlJlbW90ZUxheWVyVHJlZVNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YTo6ZGF0YSgp
CiB7Ci0gICAgTlNNdXRhYmxlQXJyYXkqIGRhdGFBcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTptX2JsYW5rUGl4ZWxDb3VudHMuc2l6ZSgpXTsKLSAgICAKLSAgICBmb3Ig
KGF1dG8gcGl4ZWxEYXRhIDogbV9ibGFua1BpeGVsQ291bnRzKSB7Ci0gICAgICAgIFtkYXRhQXJy
YXkgYWRkT2JqZWN0OkBbCisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkobV9ibGFua1BpeGVsQ291
bnRzLCBbXSAoYXV0byYgcGl4ZWxEYXRhKSB7CisgICAgICAgIHJldHVybiBAWwogICAgICAgICAg
ICAgQChwaXhlbERhdGEuc3RhcnRUaW1lKSwKICAgICAgICAgICAgIChwaXhlbERhdGEuZXZlbnRU
eXBlID09IEJsYW5rUGl4ZWxDb3VudDo6RmlsbGVkKSA/IEAiZmlsbGVkIiA6IEAiZXhwb3NlZCIs
CiAgICAgICAgICAgICBAKHBpeGVsRGF0YS5ibGFua1BpeGVsQ291bnQpCi0gICAgICAgIF1dOwot
ICAgIH0KLSAgICByZXR1cm4gZGF0YUFycmF5OworICAgICAgICBdOworICAgIH0pLmF1dG9yZWxl
YXNlKCk7CiB9CiAKIHN0YXRpYyBDQUxheWVyICpmaW5kVGlsZUdyaWRDb250YWluZXJMYXllcihD
QUxheWVyICpsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9E
cmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tCmluZGV4IDU4OGU4M2M5NTJhYzkxZjMxOWVkZTFk
MGNmODUzN2ZlZmM3MTA3NjYuLmZmNGU0ZmQxNGYxMmRjYzdhNzA3NWY4YzNlMmVlMTA0ZWFiMDdl
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9EcmFnRHJvcEludGVy
YWN0aW9uU3RhdGUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL0RyYWdEcm9w
SW50ZXJhY3Rpb25TdGF0ZS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiTG9nZ2luZy5o
IgogI2ltcG9ydCA8V2ViQ29yZS9EcmFnSXRlbS5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbWFnZS5o
PgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC01MCwyNCArNTEsMjIgQEAgc3RhdGljIFJl
dGFpblB0cjxVSVRhcmdldGVkRHJhZ1ByZXZpZXc+IGNyZWF0ZVRhcmdldGVkRHJhZ1ByZXZpZXco
VUlJbWFnZSAqaW1hZ2UKICAgICBpZiAoZnJhbWVJblJvb3RWaWV3Q29vcmRpbmF0ZXMuaXNFbXB0
eSgpIHx8ICFpbWFnZSB8fCAhcHJldmlld0NvbnRhaW5lci53aW5kb3cpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgTlNNdXRhYmxlQXJyYXkgKmNsaXBwaW5nUmVjdFZhbHVlc0luRnJh
bWVDb29yZGluYXRlcyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpjbGlwcGlu
Z1JlY3RzSW5GcmFtZUNvb3JkaW5hdGVzLnNpemUoKV07Ci0KICAgICBGbG9hdFJlY3QgZnJhbWVJ
bkNvbnRhaW5lckNvb3JkaW5hdGVzID0gW3Jvb3RWaWV3IGNvbnZlcnRSZWN0OmZyYW1lSW5Sb290
Vmlld0Nvb3JkaW5hdGVzIHRvVmlldzpwcmV2aWV3Q29udGFpbmVyXTsKICAgICBpZiAoZnJhbWVJ
bkNvbnRhaW5lckNvb3JkaW5hdGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBGbG9hdFNpemUgc2NhbGluZ1JhdGlvID0gZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5h
dGVzLnNpemUoKSAvIGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVzLnNpemUoKTsKLSAgICBmb3Ig
KGF1dG8gcmVjdCA6IGNsaXBwaW5nUmVjdHNJbkZyYW1lQ29vcmRpbmF0ZXMpIHsKKyAgICBhdXRv
IGNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcyA9IGNyZWF0ZU5TQXJyYXkoY2xp
cHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcywgWyZdIChhdXRvIHJlY3QpIHsKICAgICAgICAg
cmVjdC5zY2FsZShzY2FsaW5nUmF0aW8pOwotICAgICAgICBbY2xpcHBpbmdSZWN0VmFsdWVzSW5G
cmFtZUNvb3JkaW5hdGVzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6cmVjdF1d
OwotICAgIH0KKyAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XTsK
KyAgICB9KTsKIAogICAgIGF1dG8gaW1hZ2VWaWV3ID0gYWRvcHROUyhbW1VJSW1hZ2VWaWV3IGFs
bG9jXSBpbml0V2l0aEltYWdlOmltYWdlXSk7CiAgICAgW2ltYWdlVmlldyBzZXRGcmFtZTpmcmFt
ZUluQ29udGFpbmVyQ29vcmRpbmF0ZXNdOwogCiAgICAgUmV0YWluUHRyPFVJRHJhZ1ByZXZpZXdQ
YXJhbWV0ZXJzPiBwYXJhbWV0ZXJzOwotICAgIGlmIChjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1l
Q29vcmRpbmF0ZXMuY291bnQpCi0gICAgICAgIHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbVUlEcmFn
UHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVGV4dExpbmVSZWN0czpjbGlwcGluZ1Jl
Y3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXNdKTsKKyAgICBpZiAoW2NsaXBwaW5nUmVjdFZhbHVl
c0luRnJhbWVDb29yZGluYXRlcyBjb3VudF0pCisgICAgICAgIHBhcmFtZXRlcnMgPSBhZG9wdE5T
KFtbVUlEcmFnUHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVGV4dExpbmVSZWN0czpj
bGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMuZ2V0KCldKTsKICAgICBlbHNlCiAg
ICAgICAgIHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbVUlEcmFnUHJldmlld1BhcmFtZXRlcnMgYWxs
b2NdIGluaXRdKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggYTE4OGUyNGFhOWRlMTQwN2M3Mjg4ZTg5
ZmJiY2I4NjY2Mzk1NmZlNy4uOWYzNWRhZjE1ZTI3ZDAyMDczMWIwY2FkZDE5MTE1ZDI2NGVmZDEw
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tCkBAIC0xNjc0LDQwICsxNjc0LDMyIEBAIC0gKHZvaWQpX3VwZGF0
ZVRhcEhpZ2hsaWdodAogICAgIGlmICghW19oaWdobGlnaHRWaWV3IHN1cGVydmlld10pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHsKLSAgICAgICAgUmV0YWluUHRyPFVJQ29sb3I+IGhpZ2hsaWdo
dFVJS2l0Q29sb3IgPSBhZG9wdE5TKFtbVUlDb2xvciBhbGxvY10gaW5pdFdpdGhDR0NvbG9yOmNh
Y2hlZENHQ29sb3IoX3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLmNvbG9yKV0pOwotICAgICAgICBb
X2hpZ2hsaWdodFZpZXcgc2V0Q29sb3I6aGlnaGxpZ2h0VUlLaXRDb2xvci5nZXQoKV07Ci0gICAg
fQotCi0gICAgQ0dGbG9hdCBzZWxmU2NhbGUgPSBzZWxmLmxheWVyLnRyYW5zZm9ybS5tMTE7Ci0g
ICAgYm9vbCBhbGxIaWdobGlnaHRSZWN0c0FyZVJlY3RpbGluZWFyID0gdHJ1ZTsKLSAgICBmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvciA9IF9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFF1YWQ+JiBoaWdobGlnaHRlZFF1YWRzID0gX3RhcEhp
Z2hsaWdodEluZm9ybWF0aW9uLnF1YWRzOwotICAgIGNvbnN0IHNpemVfdCBxdWFkQ291bnQgPSBo
aWdobGlnaHRlZFF1YWRzLnNpemUoKTsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJl
Y3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnN0
YXRpY19jYXN0PGNvbnN0IE5TVUludGVnZXI+KHF1YWRDb3VudCldKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHF1YWRDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UXVhZCYgcXVhZCA9IGhpZ2hsaWdodGVkUXVhZHNbaV07Ci0gICAgICAgIGlmIChxdWFkLmlz
UmVjdGlsaW5lYXIoKSkgewotICAgICAgICAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGJvdW5kaW5n
Qm94ID0gcXVhZC5ib3VuZGluZ0JveCgpOwotICAgICAgICAgICAgYm91bmRpbmdCb3guc2NhbGUo
c2VsZlNjYWxlKTsKLSAgICAgICAgICAgIGJvdW5kaW5nQm94LmluZmxhdGUobWluaW11bVRhcEhp
Z2hsaWdodFJhZGl1cyk7Ci0gICAgICAgICAgICBDR1JlY3QgcGl4ZWxBbGlnbmVkUmVjdCA9IHN0
YXRpY19jYXN0PENHUmVjdD4oZW5jbG9zZVJlY3RUb0RldmljZVBpeGVscyhib3VuZGluZ0JveCwg
ZGV2aWNlU2NhbGVGYWN0b3IpKTsKLSAgICAgICAgICAgIFtyZWN0cyBhZGRPYmplY3Q6W05TVmFs
dWUgdmFsdWVXaXRoQ0dSZWN0OnBpeGVsQWxpZ25lZFJlY3RdXTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGFsbEhpZ2hsaWdodFJlY3RzQXJlUmVjdGlsaW5lYXIgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHJlY3RzLmNsZWFyKCk7CisgICAgW19oaWdobGlnaHRWaWV3IHNldENvbG9yOmFk
b3B0TlMoW1tVSUNvbG9yIGFsbG9jXSBpbml0V2l0aENHQ29sb3I6Y2FjaGVkQ0dDb2xvcihfdGFw
SGlnaGxpZ2h0SW5mb3JtYXRpb24uY29sb3IpXSkuZ2V0KCldOworCisgICAgYXV0byYgaGlnaGxp
Z2h0ZWRRdWFkcyA9IF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi5xdWFkczsKKyAgICBib29sIGFs
bFJlY3RpbGluZWFyID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIHF1YWQgOiBoaWdobGlnaHRlZFF1
YWRzKSB7CisgICAgICAgIGlmICghcXVhZC5pc1JlY3RpbGluZWFyKCkpIHsKKyAgICAgICAgICAg
IGFsbFJlY3RpbGluZWFyID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChhbGxIaWdobGlnaHRSZWN0c0FyZVJlY3RpbGluZWFyKQorICAgIGF1
dG8gc2VsZlNjYWxlID0gc2VsZi5sYXllci50cmFuc2Zvcm0ubTExOworICAgIGlmIChhbGxSZWN0
aWxpbmVhcikgeworICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IF9wYWdlLT5kZXZp
Y2VTY2FsZUZhY3RvcigpOworICAgICAgICBhdXRvIHJlY3RzID0gY3JlYXRlTlNBcnJheShoaWdo
bGlnaHRlZFF1YWRzLCBbJl0gKGF1dG8mIHF1YWQpIHsKKyAgICAgICAgICAgIGF1dG8gYm91bmRp
bmdCb3ggPSBxdWFkLmJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICBib3VuZGluZ0JveC5zY2Fs
ZShzZWxmU2NhbGUpOworICAgICAgICAgICAgYm91bmRpbmdCb3guaW5mbGF0ZShtaW5pbXVtVGFw
SGlnaGxpZ2h0UmFkaXVzKTsKKyAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhD
R1JlY3Q6ZW5jbG9zZVJlY3RUb0RldmljZVBpeGVscyhib3VuZGluZ0JveCwgZGV2aWNlU2NhbGVG
YWN0b3IpXTsKKyAgICAgICAgfSk7CiAgICAgICAgIFtfaGlnaGxpZ2h0VmlldyBzZXRGcmFtZXM6
cmVjdHMuZ2V0KCkgYm91bmRhcnlSZWN0Ol9wYWdlLT5leHBvc2VkQ29udGVudFJlY3QoKV07Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcXVhZHMgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c3RhdGljX2Nhc3Q8
Y29uc3QgTlNVSW50ZWdlcj4ocXVhZENvdW50KV0pOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHF1YWRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBXZWJDb3JlOjpGbG9hdFF1YWQg
cXVhZCA9IGhpZ2hsaWdodGVkUXVhZHNbaV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBx
dWFkcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpo
aWdobGlnaHRlZFF1YWRzLnNpemUoKSAqIDRdKTsKKyAgICAgICAgZm9yIChhdXRvIHF1YWQgOiBo
aWdobGlnaHRlZFF1YWRzKSB7CiAgICAgICAgICAgICBxdWFkLnNjYWxlKHNlbGZTY2FsZSk7Ci0g
ICAgICAgICAgICBXZWJDb3JlOjpGbG9hdFF1YWQgZXh0ZW5kZWRRdWFkID0gaW5mbGF0ZVF1YWQo
cXVhZCwgbWluaW11bVRhcEhpZ2hsaWdodFJhZGl1cyk7CisgICAgICAgICAgICBhdXRvIGV4dGVu
ZGVkUXVhZCA9IGluZmxhdGVRdWFkKHF1YWQsIG1pbmltdW1UYXBIaWdobGlnaHRSYWRpdXMpOwog
ICAgICAgICAgICAgW3F1YWRzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1BvaW50OmV4
dGVuZGVkUXVhZC5wMSgpXV07CiAgICAgICAgICAgICBbcXVhZHMgYWRkT2JqZWN0OltOU1ZhbHVl
IHZhbHVlV2l0aENHUG9pbnQ6ZXh0ZW5kZWRRdWFkLnAyKCldXTsKICAgICAgICAgICAgIFtxdWFk
cyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpleHRlbmRlZFF1YWQucDMoKV1d
OwpAQCAtMTcxNiwxMiArMTcwOCwxMiBAQCAtICh2b2lkKV91cGRhdGVUYXBIaWdobGlnaHQKICAg
ICAgICAgW19oaWdobGlnaHRWaWV3IHNldFF1YWRzOnF1YWRzLmdldCgpIGJvdW5kYXJ5UmVjdDpf
cGFnZS0+ZXhwb3NlZENvbnRlbnRSZWN0KCldOwogICAgIH0KIAotICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gYm9yZGVyUmFkaWkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoQ2FwYWNpdHk6NF0pOwotICAgIFtib3JkZXJSYWRpaSBhZGRPYmplY3Q6bnNTaXpl
Rm9yVGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi50b3BM
ZWZ0UmFkaXVzLCBzZWxmU2NhbGUpXTsKLSAgICBbYm9yZGVyUmFkaWkgYWRkT2JqZWN0Om5zU2l6
ZUZvclRhcEhpZ2hsaWdodEJvcmRlclJhZGl1cyhfdGFwSGlnaGxpZ2h0SW5mb3JtYXRpb24udG9w
UmlnaHRSYWRpdXMsIHNlbGZTY2FsZSldOwotICAgIFtib3JkZXJSYWRpaSBhZGRPYmplY3Q6bnNT
aXplRm9yVGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi5i
b3R0b21MZWZ0UmFkaXVzLCBzZWxmU2NhbGUpXTsKLSAgICBbYm9yZGVyUmFkaWkgYWRkT2JqZWN0
Om5zU2l6ZUZvclRhcEhpZ2hsaWdodEJvcmRlclJhZGl1cyhfdGFwSGlnaGxpZ2h0SW5mb3JtYXRp
b24uYm90dG9tUmlnaHRSYWRpdXMsIHNlbGZTY2FsZSldOwotICAgIFtfaGlnaGxpZ2h0VmlldyBz
ZXRDb3JuZXJSYWRpaTpib3JkZXJSYWRpaS5nZXQoKV07CisgICAgW19oaWdobGlnaHRWaWV3IHNl
dENvcm5lclJhZGlpOkBbCisgICAgICAgIG5zU2l6ZUZvclRhcEhpZ2hsaWdodEJvcmRlclJhZGl1
cyhfdGFwSGlnaGxpZ2h0SW5mb3JtYXRpb24udG9wTGVmdFJhZGl1cywgc2VsZlNjYWxlKSwKKyAg
ICAgICAgbnNTaXplRm9yVGFwSGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZv
cm1hdGlvbi50b3BSaWdodFJhZGl1cywgc2VsZlNjYWxlKSwKKyAgICAgICAgbnNTaXplRm9yVGFw
SGlnaGxpZ2h0Qm9yZGVyUmFkaXVzKF90YXBIaWdobGlnaHRJbmZvcm1hdGlvbi5ib3R0b21MZWZ0
UmFkaXVzLCBzZWxmU2NhbGUpLAorICAgICAgICBuc1NpemVGb3JUYXBIaWdobGlnaHRCb3JkZXJS
YWRpdXMoX3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLmJvdHRvbVJpZ2h0UmFkaXVzLCBzZWxmU2Nh
bGUpLAorICAgIF1dOwogfQogCiAtICh2b2lkKV9zaG93VGFwSGlnaGxpZ2h0CkBAIC0yNTY0LDE0
ICsyNTU2LDExIEBAIC0gKEJPT0wpdGV4dEludGVyYWN0aW9uR2VzdHVyZTooVUlXS0dlc3R1cmVU
eXBlKWdlc3R1cmUgc2hvdWxkQmVnaW5BdFBvaW50OihDR1BvCiAKIC0gKE5TQXJyYXkgKil3ZWJT
ZWxlY3Rpb25SZWN0c0ZvclNlbGVjdGlvblJlY3RzOihjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2Vs
ZWN0aW9uUmVjdD4mKXNlbGVjdGlvblJlY3RzCiB7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IHNlbGVj
dGlvblJlY3RzLnNpemUoKTsKLSAgICBpZiAoIXNpemUpCisgICAgaWYgKHNlbGVjdGlvblJlY3Rz
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIE5TTXV0YWJsZUFycmF5ICp3
ZWJSZWN0cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFdlYkNv
cmU6OlNlbGVjdGlvblJlY3QmIGNvcmVSZWN0ID0gc2VsZWN0aW9uUmVjdHNbaV07Ci0gICAgICAg
IFdlYlNlbGVjdGlvblJlY3QgKndlYlJlY3QgPSBbV2ViU2VsZWN0aW9uUmVjdCBzZWxlY3Rpb25S
ZWN0XTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShzZWxlY3Rpb25SZWN0cywgW10gKGF1dG8m
IGNvcmVSZWN0KSB7CisgICAgICAgIGF1dG8gd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNl
bGVjdGlvblJlY3RdOwogICAgICAgICB3ZWJSZWN0LnJlY3QgPSBjb3JlUmVjdC5yZWN0KCk7CiAg
ICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGNvcmVSZWN0LmRpcmVjdGlvbigpID09
IFdlYkNvcmU6OlRleHREaXJlY3Rpb246OkxUUiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1Jp
Z2h0IDogV0tXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CiAgICAgICAgIHdlYlJlY3QuaXNM
aW5lQnJlYWsgPSBjb3JlUmVjdC5pc0xpbmVCcmVhaygpOwpAQCAtMjU4MSwxMCArMjU3MCw4IEBA
IC0gKE5TQXJyYXkgKil3ZWJTZWxlY3Rpb25SZWN0c0ZvclNlbGVjdGlvblJlY3RzOihjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uCiAgICAgICAgIHdlYlJlY3QuY29udGFpbnNFbmQgPSBj
b3JlUmVjdC5jb250YWluc0VuZCgpOwogICAgICAgICB3ZWJSZWN0LmlzSW5GaXhlZFBvc2l0aW9u
ID0gY29yZVJlY3QuaXNJbkZpeGVkUG9zaXRpb24oKTsKICAgICAgICAgd2ViUmVjdC5pc0hvcml6
b250YWwgPSBjb3JlUmVjdC5pc0hvcml6b250YWwoKTsKLSAgICAgICAgW3dlYlJlY3RzIGFkZE9i
amVjdDp3ZWJSZWN0XTsKLSAgICB9Ci0KLSAgICByZXR1cm4gd2ViUmVjdHM7CisgICAgICAgIHJl
dHVybiB3ZWJSZWN0OworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TQXJyYXkgKil3
ZWJTZWxlY3Rpb25SZWN0cwpAQCAtNDQ1NywxNCArNDQ0NCwxMSBAQCAtICh2b2lkKXJlcGxhY2VS
YW5nZTooVUlUZXh0UmFuZ2UgKilyYW5nZSB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7CiB9
CiAKLXN0YXRpYyBOU0FycmF5PFdLVGV4dFNlbGVjdGlvblJlY3QgKj4gKndrVGV4dFNlbGVjdGlv
blJlY3RzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYgY29yZVJlY3RzKQor
c3RhdGljIE5TQXJyYXk8V0tUZXh0U2VsZWN0aW9uUmVjdCAqPiAqd2tUZXh0U2VsZWN0aW9uUmVj
dHMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiByZWN0cykKIHsKLSAgICBh
dXRvIHJlY3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5OmNvcmVSZWN0cy5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIGNvcmVSZWN0IDogY29yZVJl
Y3RzKSB7Ci0gICAgICAgIGF1dG8gd2tUZXh0U2VsZWN0aW9uUmVjdCA9IGFkb3B0TlMoW1tXS1Rl
eHRTZWxlY3Rpb25SZWN0IGFsbG9jXSBpbml0V2l0aFNlbGVjdGlvblJlY3Q6Y29yZVJlY3RdKTsK
LSAgICAgICAgW3JlY3RzIGFkZE9iamVjdDp3a1RleHRTZWxlY3Rpb25SZWN0LmdldCgpXTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHJlY3RzLmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5T
QXJyYXkocmVjdHMsIFtdIChhdXRvJiByZWN0KSB7CisgICAgICAgIHJldHVybiBhZG9wdE5TKFtb
V0tUZXh0U2VsZWN0aW9uUmVjdCBhbGxvY10gaW5pdFdpdGhTZWxlY3Rpb25SZWN0OnJlY3RdKTsK
KyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChVSVRleHRSYW5nZSAqKXNlbGVjdGVkVGV4
dFJhbmdlCkBAIC03NTgyLDE3ICs3NTY2LDE1IEBAIHN0YXRpYyBSZXRhaW5QdHI8VUlUYXJnZXRl
ZFByZXZpZXc+IGNyZWF0ZVRhcmdldGVkUHJldmlldyhVSUltYWdlICppbWFnZSwgVUlWaWV3CiAg
ICAgaWYgKGZyYW1lSW5Db250YWluZXJDb29yZGluYXRlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2NhbGluZ1JhdGlvID0gZnJhbWVJ
bkNvbnRhaW5lckNvb3JkaW5hdGVzLnNpemUoKSAvIGZyYW1lSW5Sb290Vmlld0Nvb3JkaW5hdGVz
LnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSAqY2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNv
b3JkaW5hdGVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNsaXBwaW5nUmVj
dHNJbkZyYW1lQ29vcmRpbmF0ZXMuc2l6ZSgpXTsKLQotICAgIGZvciAoYXV0byByZWN0IDogY2xp
cHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcykgeworICAgIGF1dG8gc2NhbGluZ1JhdGlvID0g
ZnJhbWVJbkNvbnRhaW5lckNvb3JkaW5hdGVzLnNpemUoKSAvIGZyYW1lSW5Sb290Vmlld0Nvb3Jk
aW5hdGVzLnNpemUoKTsKKyAgICBhdXRvIGNsaXBwaW5nUmVjdFZhbHVlc0luRnJhbWVDb29yZGlu
YXRlcyA9IGNyZWF0ZU5TQXJyYXkoY2xpcHBpbmdSZWN0c0luRnJhbWVDb29yZGluYXRlcywgWyZd
IChXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCkgewogICAgICAgICByZWN0LnNjYWxlKHNjYWxpbmdS
YXRpbyk7Ci0gICAgICAgIFtjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgYWRk
T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XV07Ci0gICAgfQorICAgICAgICBy
ZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnJlY3RdOworICAgIH0pOwogCiAgICAgUmV0
YWluUHRyPFVJUHJldmlld1BhcmFtZXRlcnM+IHBhcmFtZXRlcnM7Ci0gICAgaWYgKGNsaXBwaW5n
UmVjdFZhbHVlc0luRnJhbWVDb29yZGluYXRlcy5jb3VudCkKLSAgICAgICAgcGFyYW1ldGVycyA9
IGFkb3B0TlMoW1tVSVByZXZpZXdQYXJhbWV0ZXJzIGFsbG9jXSBpbml0V2l0aFRleHRMaW5lUmVj
dHM6Y2xpcHBpbmdSZWN0VmFsdWVzSW5GcmFtZUNvb3JkaW5hdGVzXSk7CisgICAgaWYgKFtjbGlw
cGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMgY291bnRdKQorICAgICAgICBwYXJhbWV0
ZXJzID0gYWRvcHROUyhbW1VJUHJldmlld1BhcmFtZXRlcnMgYWxsb2NdIGluaXRXaXRoVGV4dExp
bmVSZWN0czpjbGlwcGluZ1JlY3RWYWx1ZXNJbkZyYW1lQ29vcmRpbmF0ZXMuZ2V0KCldKTsKICAg
ICBlbHNlCiAgICAgICAgIHBhcmFtZXRlcnMgPSBhZG9wdE5TKFtbVUlQcmV2aWV3UGFyYW1ldGVy
cyBhbGxvY10gaW5pdF0pOwogCkBAIC05NjMzLDIzICs5NjE1LDE1IEBAIC0gKFVJSW1hZ2UgKilf
cHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6KFVJUHJldmlld0l0
ZW1Db250cm9sCiAKIC0gKE5TQXJyYXkgKilfcHJlc2VudGF0aW9uUmVjdHNGb3JQcmV2aWV3SXRl
bUNvbnRyb2xsZXI6KFVJUHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgogewotICAg
IFJldGFpblB0cjxOU011dGFibGVBcnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0KICAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlu
a0luZGljYXRvci5jb250ZW50SW1hZ2UpIHsKLSAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBv
cmlnaW4gPSBfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLnRleHRCb3VuZGluZ1Jl
Y3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMubG9jYXRpb24oKTsKLSAgICAgICAgZm9yIChXZWJDb3Jl
OjpGbG9hdFJlY3QmIHJlY3QgOiBfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLnRl
eHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMpIHsKLSAgICAgICAgICAgIENHUmVjdCBj
Z1JlY3QgPSByZWN0OwotICAgICAgICAgICAgY2dSZWN0Lm9yaWdpbi54ICs9IG9yaWdpbi54KCk7
Ci0gICAgICAgICAgICBjZ1JlY3Qub3JpZ2luLnkgKz0gb3JpZ2luLnkoKTsKLSAgICAgICAgICAg
IFtyZWN0QXJyYXkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpjZ1JlY3RdXTsK
LSAgICAgICAgfQorICAgICAgICBhdXRvIG9yaWdpbiA9IF9wb3NpdGlvbkluZm9ybWF0aW9uLmxp
bmtJbmRpY2F0b3IudGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcy5sb2NhdGlv
bigpOworICAgICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShfcG9zaXRpb25JbmZvcm1hdGlvbi5s
aW5rSW5kaWNhdG9yLnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMsIFsmXSAoQ0dS
ZWN0IHJlY3QpIHsKKyAgICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhDR1JlY3Q6
Q0dSZWN0T2Zmc2V0KHJlY3QsIG9yaWdpbi54KCksIG9yaWdpbi55KCkpXTsKKyAgICAgICAgfSku
YXV0b3JlbGVhc2UoKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb25zdCBmbG9hdCBtYXJnaW5J
blB4ID0gNCAqIF9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgICAgICBDR1JlY3QgY2dS
ZWN0ID0gQ0dSZWN0SW5zZXQoX3Bvc2l0aW9uSW5mb3JtYXRpb24uYm91bmRzLCAtbWFyZ2luSW5Q
eCwgLW1hcmdpbkluUHgpOwotICAgICAgICBbcmVjdEFycmF5IGFkZE9iamVjdDpbTlNWYWx1ZSB2
YWx1ZVdpdGhDR1JlY3Q6Y2dSZWN0XV07CisgICAgICAgIGZsb2F0IG1hcmdpbkluUHggPSA0ICog
X3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIHJldHVybiBAW1tOU1ZhbHVlIHZh
bHVlV2l0aENHUmVjdDpDR1JlY3RJbnNldChfcG9zaXRpb25JbmZvcm1hdGlvbi5ib3VuZHMsIC1t
YXJnaW5JblB4LCAtbWFyZ2luSW5QeCldXTsKICAgICB9Ci0KLSAgICByZXR1cm4gcmVjdEFycmF5
LmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKHZvaWQpX3ByZXZpZXdJdGVtQ29udHJvbGxlckRpZENh
bmNlbFByZXZpZXc6KFVJUHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRGaW5kZXJDbGllbnQubW0KaW5kZXgg
MzZhYmRmZDI0NjVlNGRmZDUxMDI0M2RmN2Y5YTc4YzEwYjkxYTc4Yi4uYzhhMDZhMWM3ZjFiODNl
MzYyNTk2YzUzN2Y4Y2E4ZjU4ZDJjYzMzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1dLVGV4dEZpbmRlckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvV0tUZXh0RmluZGVyQ2xpZW50Lm1tCkBAIC0yNzYsMTkgKzI3NiwxNyBAQCAtICh2
b2lkKWRpZEZpbmRTdHJpbmdNYXRjaGVzV2l0aFJlY3RzOihjb25zdCBWZWN0b3I8VmVjdG9yPFdl
YkNvcmU6OkludFJlY3Q+PiYpcgogICAgIGlmIChfZmluZFJlcGx5Q2FsbGJhY2tzLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byByZXBseUNhbGxiYWNrID0gX2ZpbmRSZXBs
eUNhbGxiYWNrcy50YWtlRmlyc3QoKTsKLSAgICBhdXRvIG1hdGNoQ291bnQgPSByZWN0c0Zvck1h
dGNoZXMuc2l6ZSgpOwotICAgIGF1dG8gbWF0Y2hPYmplY3RzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om1hdGNoQ291bnRdKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hDb3VudDsgaSsrKSB7Ci0gICAgICAgIFJldGFpblB0cjxO
U0FycmF5PiBuc01hdGNoUmVjdHM7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIGF1dG8g
bWF0Y2hPYmplY3RzID0gY3JlYXRlTlNBcnJheShyZWN0c0Zvck1hdGNoZXMsIFsmXSAoYXV0byYg
cmVjdHMpIHsKKyAgICAgICAgUmV0YWluUHRyPE5TQXJyYXk+IHJlY3RzQXJyYXk7CiAgICAgICAg
IGlmIChfdXNlUGxhdGZvcm1GaW5kVUkpCi0gICAgICAgICAgICBuc01hdGNoUmVjdHMgPSBjcmVh
dGVOU0FycmF5KHJlY3RzRm9yTWF0Y2hlc1tpXSk7CisgICAgICAgICAgICByZWN0c0FycmF5ID0g
Y3JlYXRlTlNBcnJheShyZWN0cyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5zTWF0Y2hS
ZWN0cyA9IEBbXTsKLSAgICAgICAgW21hdGNoT2JqZWN0cyBhZGRPYmplY3Q6YWRvcHROUyhbW1dL
VGV4dEZpbmRlck1hdGNoIGFsbG9jXSBpbml0V2l0aENsaWVudDpzZWxmIHZpZXc6X3ZpZXcgaW5k
ZXg6aSByZWN0czpuc01hdGNoUmVjdHMuZ2V0KCldKS5nZXQoKV07Ci0gICAgfQorICAgICAgICAg
ICAgcmVjdHNBcnJheSA9IEBbXTsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXS1RleHRGaW5k
ZXJNYXRjaCBhbGxvY10gaW5pdFdpdGhDbGllbnQ6c2VsZiB2aWV3Ol92aWV3IGluZGV4OmluZGV4
KysgcmVjdHM6cmVjdHNBcnJheS5nZXQoKV0pOworICAgIH0pOwogCi0gICAgcmVwbHlDYWxsYmFj
ayhtYXRjaE9iamVjdHMuZ2V0KCksIGRpZFdyYXBBcm91bmQpOworICAgIF9maW5kUmVwbHlDYWxs
YmFja3MudGFrZUZpcnN0KCkobWF0Y2hPYmplY3RzLmdldCgpLCBkaWRXcmFwQXJvdW5kKTsKIH0K
IAogLSAodm9pZClkaWRHZXRJbWFnZUZvck1hdGNoUmVzdWx0OihXZWJLaXQ6OldlYkltYWdlICop
aW1hZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRJbnB1
dFdpbmRvd0NvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tUZXh0
SW5wdXRXaW5kb3dDb250cm9sbGVyLm1tCmluZGV4IGY2NDhmOTQwNzM1ZTY1YWY5OTc3MTFjNWNh
NTkyODI2N2JmNTk3Y2IuLjM1Mjc1ZGY4ZmQ3Y2NjNDA1YzY3MzJkMWM4OGZjMTk0N2NlMWE2MmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1RleHRJbnB1dFdpbmRv
d0NvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLVGV4dElu
cHV0V2luZG93Q29udHJvbGxlci5tbQpAQCAtNDAsMTAgKzQwLDcgQEAgQGltcGxlbWVudGF0aW9u
IFdLVGV4dElucHV0VmlldwogLSAoTlNBcnJheSAqKXZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRl
eHQKIHsKICAgICAvLyBMZXQgVFNNIGtub3cgdGhhdCBhIGJvdHRvbSBpbnB1dCB3aW5kb3cgd291
bGQgYmUgY3JlYXRlZCBmb3IgbWFya2VkIHRleHQuCi0gICAgTlNBcnJheSAqcmVndWxhckF0dHJp
YnV0ZXMgPSBbc3VwZXIgdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dF07Ci0gICAgTlNNdXRh
YmxlQXJyYXkgKmZsb2F0aW5nV2luZG93QXR0cmlidXRlcyA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhBcnJheTpyZWd1bGFyQXR0cmlidXRlc107Ci0gICAgW2Zsb2F0aW5nV2luZG93QXR0cmli
dXRlcyBhZGRPYmplY3Q6QCJfX05TVXNlc0Zsb2F0aW5nSW5wdXRXaW5kb3ciXTsKLSAgICByZXR1
cm4gZmxvYXRpbmdXaW5kb3dBdHRyaWJ1dGVzOworICAgIHJldHVybiBbW3N1cGVyIHZhbGlkQXR0
cmlidXRlc0Zvck1hcmtlZFRleHRdIGFycmF5QnlBZGRpbmdPYmplY3Q6QCJfX05TVXNlc0Zsb2F0
aW5nSW5wdXRXaW5kb3ciXTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5GcmFt
ZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2Ev
V0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW0KaW5kZXggYjk2YmI4OWJhMGFiMmZlZDM2NWE3ZGYw
YzcxZTc2ZDUyOTliMDkzNS4uMDNjMjdjNDU1M2RjZjA4MzQxNzQ3MTJjZDczNjM5ZjAwYzZmODNm
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5GcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkZyYW1l
Lm1tCkBAIC00MSw2ICs0MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ludFBvaW50Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0xpbmtJY29uQ29sbGVjdG9yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xpbmtJ
Y29uVHlwZS5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIEBpbXBsZW1l
bnRhdGlvbiBXS1dlYlByb2Nlc3NQbHVnSW5GcmFtZSB7CiAgICAgQVBJOjpPYmplY3RTdG9yYWdl
PFdlYktpdDo6V2ViRnJhbWU+IF9mcmFtZTsKQEAgLTExMSwxNiArMTEyLDE0IEBAIC0gKF9XS0Zy
YW1lSGFuZGxlICopaGFuZGxlCiAKIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gY29sbGVjdElj
b25zKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgT3B0aW9uU2V0PFdlYkNvcmU6OkxpbmtJY29uVHlw
ZT4gaWNvblR5cGVzKQogewotICAgIGF1dG8gcmVzdWx0ID0gYWRvcHROUyhbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgaWYgKGF1dG8q
IGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYg
aWNvbiA6IFdlYkNvcmU6OkxpbmtJY29uQ29sbGVjdG9yKCpkb2N1bWVudCkuaWNvbnNPZlR5cGVz
KGljb25UeXBlcykpCi0gICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6KE5TVVJMICop
aWNvbi51cmxdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gQFtdOworICAgIGF1dG8gZG9jdW1l
bnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1
cm4gQFtdOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFdlYkNvcmU6OkxpbmtJY29uQ29sbGVj
dG9yKCpkb2N1bWVudCkuaWNvbnNPZlR5cGVzKGljb25UeXBlcyksIFtdIChhdXRvJiBpY29uKSAt
PiBOU1VSTCAqIHsKKyAgICAgICAgcmV0dXJuIGljb24udXJsOworICAgIH0pOwogfQogCiAtIChO
U0FycmF5ICopYXBwbGVUb3VjaEljb25VUkxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2Vy
Q29udGV4dENvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIu
bW0KaW5kZXggYjlhYzYxMzA0MDY1ZGI2YjY1MGViNjE0NzAyZjM3MGRjYmM5YzQ2NC4uZTc4OGEx
YWNmMzc0ODNjOThiZDBjZDUxYzc1YmJjMzgwNDVlMzNlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0lu
QnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0
Q29udHJvbGxlci5tbQpAQCAtNDI4LDMyICs0MjgsMjcgQEAgLSAodm9pZClfc2V0Rm9ybURlbGVn
YXRlOihpZCA8V0tXZWJQcm9jZXNzUGx1Z0luRm9ybURlbGVnYXRlUHJpdmF0ZT4pZm9ybURlbGVn
YXQKIHsKICAgICBfZm9ybURlbGVnYXRlID0gZm9ybURlbGVnYXRlOwogCi0gICAgY2xhc3MgRm9y
bUNsaWVudCA6IHB1YmxpYyBBUEk6OkluamVjdGVkQnVuZGxlOjpGb3JtQ2xpZW50IHsKKyAgICBj
bGFzcyBGb3JtQ2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6SW5qZWN0ZWRCdW5kbGU6OkZvcm1D
bGllbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgRm9ybUNsaWVudChXS1dlYlBy
b2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIgKmNvbnRyb2xsZXIpCiAgICAgICAg
ICAgICA6IG1fY29udHJvbGxlcihjb250cm9sbGVyKQogICAgICAgICB7CiAgICAgICAgIH0KIAot
ICAgICAgICB2aXJ0dWFsIH5Gb3JtQ2xpZW50KCkgeyB9Ci0KLSAgICAgICAgdm9pZCBkaWRGb2N1
c1RleHRGaWVsZChXZWJLaXQ6OldlYlBhZ2UqLCBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dEVsZW1lbnQsIFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lKSBvdmVycmlkZQorICAgICAgICB2
b2lkIGRpZEZvY3VzVGV4dEZpZWxkKFdlYktpdDo6V2ViUGFnZSosIFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUpIGZpbmFsCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gZm9ybURlbGVnYXRlID0gbV9jb250cm9sbGVyLT5f
Zm9ybURlbGVnYXRlLmdldCgpOwotCiAgICAgICAgICAgICBpZiAoW2Zvcm1EZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRD
b250cm9sbGVyOmRpZEZvY3VzVGV4dEZpZWxkOmluRnJhbWU6KV0pCiAgICAgICAgICAgICAgICAg
W2Zvcm1EZWxlZ2F0ZSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjpt
X2NvbnRyb2xsZXIgZGlkRm9jdXNUZXh0RmllbGQ6d3JhcHBlcigqV2ViS2l0OjpJbmplY3RlZEJ1
bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKGlucHV0RWxlbWVudCkuZ2V0KCkpIGluRnJhbWU6
d3JhcHBlcigqZnJhbWUpXTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgd2lsbFNlbmRTdWJt
aXRFdmVudChXZWJLaXQ6OldlYlBhZ2UqLCBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQqIGZvcm1F
bGVtZW50LCBXZWJLaXQ6OldlYkZyYW1lKiB0YXJnZXRGcmFtZSwgV2ViS2l0OjpXZWJGcmFtZSog
c291cmNlRnJhbWUsIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgdmFs
dWVzKSBvdmVycmlkZQorICAgICAgICB2b2lkIHdpbGxTZW5kU3VibWl0RXZlbnQoV2ViS2l0OjpX
ZWJQYWdlKiwgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCwgV2ViS2l0OjpX
ZWJGcmFtZSogdGFyZ2V0RnJhbWUsIFdlYktpdDo6V2ViRnJhbWUqIHNvdXJjZUZyYW1lLCBjb25z
dCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4mIHZhbHVlcykgZmluYWwKICAgICAg
ICAgewogICAgICAgICAgICAgYXV0byBmb3JtRGVsZWdhdGUgPSBtX2NvbnRyb2xsZXItPl9mb3Jt
RGVsZWdhdGUuZ2V0KCk7Ci0KICAgICAgICAgICAgIGlmIChbZm9ybURlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRy
b2xsZXI6d2lsbFNlbmRTdWJtaXRFdmVudFRvRm9ybTppbkZyYW1lOnRhcmdldEZyYW1lOnZhbHVl
czopXSkgewogICAgICAgICAgICAgICAgIGF1dG8gdmFsdWVNYXAgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTp2YWx1ZXMuc2l6ZSgpXSk7CiAg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogdmFsdWVzKQogICAgICAgICAg
ICAgICAgICAgICBbdmFsdWVNYXAgc2V0T2JqZWN0OnBhaXIuc2Vjb25kIGZvcktleTpwYWlyLmZp
cnN0XTsKLQogICAgICAgICAgICAgICAgIFtmb3JtRGVsZWdhdGUgX3dlYlByb2Nlc3NQbHVnSW5C
cm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHdpbGxTZW5kU3VibWl0RXZlbnRU
b0Zvcm06d3JhcHBlcigqV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3Jl
YXRlKGZvcm1FbGVtZW50KS5nZXQoKSkKICAgICAgICAgICAgICAgICAgICAgaW5GcmFtZTp3cmFw
cGVyKCpzb3VyY2VGcmFtZSkgdGFyZ2V0RnJhbWU6d3JhcHBlcigqdGFyZ2V0RnJhbWUpIHZhbHVl
czp2YWx1ZU1hcC5nZXQoKV07CiAgICAgICAgICAgICB9CkBAIC00NjMsNyArNDU4LDYgQEAgLSAo
dm9pZClfc2V0Rm9ybURlbGVnYXRlOihpZCA8V0tXZWJQcm9jZXNzUGx1Z0luRm9ybURlbGVnYXRl
UHJpdmF0ZT4pZm9ybURlbGVnYXQKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCF1c2VyT2Jq
ZWN0KQogICAgICAgICAgICAgICAgIHJldHVybjsKLQogICAgICAgICAgICAgYXV0byBhcmNoaXZl
ciA9IGFkb3B0TlMoW1tOU0tleWVkQXJjaGl2ZXIgYWxsb2NdIGluaXRSZXF1aXJpbmdTZWN1cmVD
b2Rpbmc6WUVTXSk7CiAgICAgICAgICAgICBAdHJ5IHsKICAgICAgICAgICAgICAgICBbYXJjaGl2
ZXIgZW5jb2RlT2JqZWN0OnVzZXJPYmplY3QgZm9yS2V5OkAidXNlck9iamVjdCJdOwpAQCAtNDcy
LDcwICs0NjYsNTcgQEAgLSAodm9pZClfc2V0Rm9ybURlbGVnYXRlOihpZCA8V0tXZWJQcm9jZXNz
UGx1Z0luRm9ybURlbGVnYXRlUHJpdmF0ZT4pZm9ybURlbGVnYXQKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBbYXJjaGl2ZXIgZmluaXNoRW5jb2Rp
bmddOwotCiAgICAgICAgICAgICB1c2VyRGF0YSA9IEFQSTo6RGF0YTo6Y3JlYXRlV2l0aG91dENv
cHlpbmcoYXJjaGl2ZXIuZ2V0KCkuZW5jb2RlZERhdGEpOwogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCB3aWxsU3VibWl0Rm9ybShXZWJLaXQ6OldlYlBhZ2UqLCBXZWJDb3JlOjpIVE1MRm9ybUVs
ZW1lbnQqIGZvcm1FbGVtZW50LCBXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgV2ViS2l0OjpXZWJG
cmFtZSogc291cmNlRnJhbWUsIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8V1RGOjpTdHJpbmcsIFdU
Rjo6U3RyaW5nPj4mIHZhbHVlcywgUmVmUHRyPEFQSTo6T2JqZWN0PiYgdXNlckRhdGEpIG92ZXJy
aWRlCisgICAgICAgIHZvaWQgd2lsbFN1Ym1pdEZvcm0oV2ViS2l0OjpXZWJQYWdlKiwgV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCwgV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUs
IFdlYktpdDo6V2ViRnJhbWUqIHNvdXJjZUZyYW1lLCBjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFdU
Rjo6U3RyaW5nLCBXVEY6OlN0cmluZz4+JiB2YWx1ZXMsIFJlZlB0cjxBUEk6Ok9iamVjdD4mIHVz
ZXJEYXRhKSBmaW5hbAogICAgICAgICB7CiAgICAgICAgICAgICBhdXRvIGZvcm1EZWxlZ2F0ZSA9
IG1fY29udHJvbGxlci0+X2Zvcm1EZWxlZ2F0ZS5nZXQoKTsKLQogICAgICAgICAgICAgaWYgKFtm
b3JtRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViUHJvY2Vzc1BsdWdJ
bkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjp3aWxsU3VibWl0Rm9ybTp0b0ZyYW1lOmZyb21GcmFt
ZTp3aXRoVmFsdWVzOildKSB7CiAgICAgICAgICAgICAgICAgYXV0byB2YWx1ZU1hcCA9IGFkb3B0
TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnZhbHVlcy5z
aXplKCldKTsKICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiB2YWx1ZXMp
CiAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZU1hcCBzZXRPYmplY3Q6cGFpci5zZWNvbmQgZm9y
S2V5OnBhaXIuZmlyc3RdOwotCi0gICAgICAgICAgICAgICAgTlNPYmplY3QgPE5TU2VjdXJlQ29k
aW5nPiAqdXNlck9iamVjdCA9IFtmb3JtRGVsZWdhdGUgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2Vy
Q29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVyIHdpbGxTdWJtaXRGb3JtOndyYXBwZXIoKldl
YktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZShmb3JtRWxlbWVudCku
Z2V0KCkpIHRvRnJhbWU6d3JhcHBlcigqZnJhbWUpIGZyb21GcmFtZTp3cmFwcGVyKCpzb3VyY2VG
cmFtZSkgd2l0aFZhbHVlczp2YWx1ZU1hcC5nZXQoKV07Ci0gICAgICAgICAgICAgICAgZW5jb2Rl
VXNlck9iamVjdCh1c2VyT2JqZWN0LCB1c2VyRGF0YSk7CisgICAgICAgICAgICAgICAgZW5jb2Rl
VXNlck9iamVjdChbZm9ybURlbGVnYXRlIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRD
b250cm9sbGVyOm1fY29udHJvbGxlciB3aWxsU3VibWl0Rm9ybTp3cmFwcGVyKCpXZWJLaXQ6Oklu
amVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoZm9ybUVsZW1lbnQpLmdldCgpKSB0
b0ZyYW1lOndyYXBwZXIoKmZyYW1lKSBmcm9tRnJhbWU6d3JhcHBlcigqc291cmNlRnJhbWUpIHdp
dGhWYWx1ZXM6dmFsdWVNYXAuZ2V0KCldLCB1c2VyRGF0YSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAotICAgICAgICB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRGaWVsZChXZWJLaXQ6Oldl
YlBhZ2UqLCBXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIFdlYktpdDo6
V2ViRnJhbWUqIGZyYW1lLCBib29sIGluaXRpYXRlZEJ5VXNlclR5cGluZykgb3ZlcnJpZGUKKyAg
ICAgICAgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoV2ViS2l0OjpXZWJQYWdlKiwgV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBXZWJLaXQ6OldlYkZyYW1lKiBm
cmFtZSwgYm9vbCBpbml0aWF0ZWRCeVVzZXJUeXBpbmcpIGZpbmFsCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGF1dG8gZm9ybURlbGVnYXRlID0gbV9jb250cm9sbGVyLT5fZm9ybURlbGVnYXRlLmdl
dCgpOwotCiAgICAgICAgICAgICBpZiAoW2Zvcm1EZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOnRleHRE
aWRDaGFuZ2VJblRleHRGaWVsZDppbkZyYW1lOmluaXRpYXRlZEJ5VXNlclR5cGluZzopXSkKICAg
ICAgICAgICAgICAgICBbZm9ybURlbGVnYXRlIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRl
eHRDb250cm9sbGVyOm1fY29udHJvbGxlciB0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQ6d3JhcHBl
cigqV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKGlucHV0RWxl
bWVudCkpIGluRnJhbWU6d3JhcHBlcigqZnJhbWUpIGluaXRpYXRlZEJ5VXNlclR5cGluZzppbml0
aWF0ZWRCeVVzZXJUeXBpbmddOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCB3aWxsQmVnaW5J
bnB1dFNlc3Npb24oV2ViS2l0OjpXZWJQYWdlKiwgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwg
V2ViS2l0OjpXZWJGcmFtZSogZnJhbWUsIGJvb2wgdXNlcklzSW50ZXJhY3RpbmcsIFJlZlB0cjxB
UEk6Ok9iamVjdD4mIHVzZXJEYXRhKSBvdmVycmlkZQorICAgICAgICB2b2lkIHdpbGxCZWdpbklu
cHV0U2Vzc2lvbihXZWJLaXQ6OldlYlBhZ2UqLCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LCBX
ZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgYm9vbCB1c2VySXNJbnRlcmFjdGluZywgUmVmUHRyPEFQ
STo6T2JqZWN0PiYgdXNlckRhdGEpIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8g
Zm9ybURlbGVnYXRlID0gbV9jb250cm9sbGVyLT5fZm9ybURlbGVnYXRlLmdldCgpOwotCiAgICAg
ICAgICAgICBpZiAoW2Zvcm1EZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93
ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOndpbGxCZWdpbklucHV0U2Vz
c2lvbkZvckVsZW1lbnQ6aW5GcmFtZTp1c2VySXNJbnRlcmFjdGluZzopXSkgewotICAgICAgICAg
ICAgICAgIE5TT2JqZWN0PE5TU2VjdXJlQ29kaW5nPiAqdXNlck9iamVjdCA9IFtmb3JtRGVsZWdh
dGUgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250cm9sbGVy
IHdpbGxCZWdpbklucHV0U2Vzc2lvbkZvckVsZW1lbnQ6d3JhcHBlcigqV2ViS2l0OjpJbmplY3Rl
ZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKGVsZW1lbnQpKSBpbkZyYW1lOndyYXBwZXIo
KmZyYW1lKSB1c2VySXNJbnRlcmFjdGluZzp1c2VySXNJbnRlcmFjdGluZ107Ci0gICAgICAgICAg
ICAgICAgZW5jb2RlVXNlck9iamVjdCh1c2VyT2JqZWN0LCB1c2VyRGF0YSk7CisgICAgICAgICAg
ICAgICAgZW5jb2RlVXNlck9iamVjdChbZm9ybURlbGVnYXRlIF93ZWJQcm9jZXNzUGx1Z0luQnJv
d3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciB3aWxsQmVnaW5JbnB1dFNlc3Npb25G
b3JFbGVtZW50OndyYXBwZXIoKldlYktpdDo6SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRP
ckNyZWF0ZShlbGVtZW50KSkgaW5GcmFtZTp3cmFwcGVyKCpmcmFtZSkgdXNlcklzSW50ZXJhY3Rp
bmc6dXNlcklzSW50ZXJhY3RpbmddLCB1c2VyRGF0YSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYg
KHVzZXJJc0ludGVyYWN0aW5nICYmIFtmb3JtRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3Rvcihfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjp3aWxsQmVn
aW5JbnB1dFNlc3Npb25Gb3JFbGVtZW50OmluRnJhbWU6KV0pIHsKICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV2UgY2hlY2sgdXNlcklzSW50ZXJhY3Rpbmcgc28gdGhhdCB3ZSBkb24ndCBiZWdp
biBhbiBpbnB1dCBzZXNzaW9uIGZvciBhCiAgICAgICAgICAgICAgICAgLy8gcHJvZ3JhbW1hdGlj
IGZvY3VzIHRoYXQgZG9lc24ndCBjYXVzZSB0aGUga2V5Ym9hcmQgdG8gYXBwZWFyLiBCdXQgdGhp
cyBtaXNzZXMgdGhlIGNhc2Ugb2YKICAgICAgICAgICAgICAgICAvLyBhIHByb2dyYW1tYXRpYyBm
b2N1cyBoYXBwZW5pbmcgd2hpbGUgdGhlIGtleWJvYXJkIGlzIGFscmVhZHkgc2hvd24uIE9uY2Ug
d2UgaGF2ZSBhIHdheSB0bwogICAgICAgICAgICAgICAgIC8vIGtub3cgdGhlIGtleWJvYXJkIHN0
YXRlIGluIHRoZSBXZWIgUHJvY2Vzcywgd2Ugc2hvdWxkIHJlZmluZSB0aGUgY29uZGl0aW9uLgot
ICAgICAgICAgICAgICAgIE5TT2JqZWN0PE5TU2VjdXJlQ29kaW5nPiAqdXNlck9iamVjdCA9IFtm
b3JtRGVsZWdhdGUgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9j
b250cm9sbGVyIHdpbGxCZWdpbklucHV0U2Vzc2lvbkZvckVsZW1lbnQ6d3JhcHBlcigqV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OmdldE9yQ3JlYXRlKGVsZW1lbnQpKSBpbkZyYW1l
OndyYXBwZXIoKmZyYW1lKV07Ci0gICAgICAgICAgICAgICAgZW5jb2RlVXNlck9iamVjdCh1c2Vy
T2JqZWN0LCB1c2VyRGF0YSk7CisgICAgICAgICAgICAgICAgZW5jb2RlVXNlck9iamVjdChbZm9y
bURlbGVnYXRlIF93ZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29u
dHJvbGxlciB3aWxsQmVnaW5JbnB1dFNlc3Npb25Gb3JFbGVtZW50OndyYXBwZXIoKldlYktpdDo6
SW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpnZXRPckNyZWF0ZShlbGVtZW50KSkgaW5GcmFtZTp3
cmFwcGVyKCpmcmFtZSldLCB1c2VyRGF0YSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBib29sIHNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXMoV2ViS2l0OjpXZWJQYWdlKikg
b3ZlcnJpZGUKKyAgICAgICAgYm9vbCBzaG91bGROb3RpZnlPbkZvcm1DaGFuZ2VzKFdlYktpdDo6
V2ViUGFnZSopIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gZm9ybURlbGVnYXRl
ID0gbV9jb250cm9sbGVyLT5fZm9ybURlbGVnYXRlLmdldCgpOwotCiAgICAgICAgICAgICBpZiAo
IVtmb3JtRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViUHJvY2Vzc1Bs
dWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlclNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXM6KV0p
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgICAgICAgICByZXR1cm4gW2Zv
cm1EZWxlZ2F0ZSBfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlclNob3Vs
ZE5vdGlmeU9uRm9ybUNoYW5nZXM6bV9jb250cm9sbGVyXTsKICAgICAgICAgfQogCi0gICAgICAg
IHZvaWQgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKFdlYktpdDo6V2ViUGFnZSosIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4+JiBlbGVtZW50cywgV2ViS2l0OjpXZWJGcmFt
ZSopIG92ZXJyaWRlCisgICAgICAgIHZvaWQgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKFdlYktp
dDo6V2ViUGFnZSosIGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4+JiBlbGVt
ZW50cywgV2ViS2l0OjpXZWJGcmFtZSopIGZpbmFsCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1
dG8gZm9ybURlbGVnYXRlID0gbV9jb250cm9sbGVyLT5fZm9ybURlbGVnYXRlLmdldCgpOwotCiAg
ICAgICAgICAgICBpZiAoIVtmb3JtRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihfd2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlcjpkaWRBc3NvY2lhdGVG
b3JtQ29udHJvbHM6KV0pCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBh
dXRvIGNvbnRyb2xzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5OmVsZW1lbnRzLnNpemUoKV0pOwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBl
bGVtZW50IDogZWxlbWVudHMpCi0gICAgICAgICAgICAgICAgW2NvbnRyb2xzIGFkZE9iamVjdDp3
cmFwcGVyKCpXZWJLaXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoZWxl
bWVudC5nZXQoKSkpXTsKLSAgICAgICAgICAgIHJldHVybiBbZm9ybURlbGVnYXRlIF93ZWJQcm9j
ZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyOm1fY29udHJvbGxlciBkaWRBc3NvY2lh
dGVGb3JtQ29udHJvbHM6Y29udHJvbHMuZ2V0KCldOworICAgICAgICAgICAgcmV0dXJuIFtmb3Jt
RGVsZWdhdGUgX3dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXI6bV9jb250
cm9sbGVyIGRpZEFzc29jaWF0ZUZvcm1Db250cm9sczpjcmVhdGVOU0FycmF5KGVsZW1lbnRzLCBb
XSAoYXV0byYgZWxlbWVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyKCpXZWJL
aXQ6OkluamVjdGVkQnVuZGxlTm9kZUhhbmRsZTo6Z2V0T3JDcmVhdGUoZWxlbWVudC5nZXQoKSkp
OworICAgICAgICAgICAgfSkuZ2V0KCldOwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVl
L1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQppbmRl
eCAxZGVmMDk0MGIxZDJkZjQ3ZGFhNjY1NmQxYjI2ZWJmZGI4N2Y0ODhlLi43NjE1MzIwYmUzZmIx
NDI3OTNiMmVjNmFlZjJhMmMwOTE1MTkyOWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRy
ZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQpAQCAtMzgsNiArMzgsNyBAQAogI2ltcG9y
dCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpD
RXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2Nv
Y29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIHN0
YXRpYyBNb25vdG9uaWNUaW1lIG1lZGlhVGltZVRvQ3VycmVudFRpbWUoQ0ZUaW1lSW50ZXJ2YWwg
dCkKQEAgLTcxMyw4ICs3MTQsNyBAQCBzdGF0aWMgdm9pZCBhZGRBbmltYXRpb25Ub0xheWVyKENB
TGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIbwogICAgIFJldGFp
blB0cjxDQVByb3BlcnR5QW5pbWF0aW9uPiBjYUFuaW1hdGlvbjsKICAgICBzd2l0Y2ggKHByb3Bl
cnRpZXMuYW5pbWF0aW9uVHlwZSkgewogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6QmFz
aWM6IHsKLSAgICAgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGJhc2ljQW5pbWF0aW9u
OwotICAgICAgICBiYXNpY0FuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldp
dGhLZXlQYXRoOnByb3BlcnRpZXMua2V5UGF0aF07CisgICAgICAgIGF1dG8gYmFzaWNBbmltYXRp
b24gPSBbQ0FCYXNpY0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpwcm9wZXJ0aWVzLmtl
eVBhdGhdOwogICAgICAgICAKICAgICAgICAgaWYgKHByb3BlcnRpZXMua2V5VmFsdWVzLnNpemUo
KSA+IDEpIHsKICAgICAgICAgICAgIFtiYXNpY0FuaW1hdGlvbiBzZXRGcm9tVmFsdWU6YW5pbWF0
aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShwcm9wZXJ0aWVzLmtleVZhbHVlc1swXSldOwpAQCAt
NzI4LDM5ICs3MjgsMzEgQEAgc3RhdGljIHZvaWQgYWRkQW5pbWF0aW9uVG9MYXllcihDQUxheWVy
ICpsYXllciwgUmVtb3RlTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG8KICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6S2V5ZnJhbWU6IHsKLSAgICAg
ICAgUmV0YWluUHRyPENBS2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1lQW5pbWF0aW9uOwotICAg
ICAgICBrZXlmcmFtZUFuaW1hdGlvbiA9IFtDQUtleWZyYW1lQW5pbWF0aW9uIGFuaW1hdGlvbldp
dGhLZXlQYXRoOnByb3BlcnRpZXMua2V5UGF0aF07CisgICAgICAgIGF1dG8ga2V5ZnJhbWVBbmlt
YXRpb24gPSBbQ0FLZXlmcmFtZUFuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpwcm9wZXJ0
aWVzLmtleVBhdGhdOwogCiAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmtleVZhbHVlcy5zaXplKCkp
IHsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4ga2V5ZnJhbWVzID0gYWRv
cHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnByb3BlcnRpZXMu
a2V5VmFsdWVzLnNpemUoKV0pOwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6
IHByb3BlcnRpZXMua2V5VmFsdWVzKQotICAgICAgICAgICAgICAgIFtrZXlmcmFtZXMgYWRkT2Jq
ZWN0OmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUodmFsdWUpXTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgW2tleWZyYW1lQW5pbWF0aW9uIHNldFZhbHVlczprZXlmcmFtZXMuZ2V0
KCldOworICAgICAgICAgICAgW2tleWZyYW1lQW5pbWF0aW9uIHNldFZhbHVlczpjcmVhdGVOU0Fy
cmF5KHByb3BlcnRpZXMua2V5VmFsdWVzLCBbXSAoYXV0byYgdmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZSh2YWx1ZSk7CisgICAg
ICAgICAgICB9KS5nZXQoKV07CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocHJvcGVydGllcy5r
ZXlUaW1lcy5zaXplKCkpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4g
a2V5VGltZXMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNp
dHk6cHJvcGVydGllcy5rZXlUaW1lcy5zaXplKCldKTsKLSAgICAgICAgICAgIGZvciAoYXV0byBr
ZXlUaW1lIDogcHJvcGVydGllcy5rZXlUaW1lcykKLSAgICAgICAgICAgICAgICBba2V5VGltZXMg
YWRkT2JqZWN0OkAoa2V5VGltZSldOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBba2V5ZnJh
bWVBbmltYXRpb24gc2V0S2V5VGltZXM6a2V5VGltZXMuZ2V0KCldOworICAgICAgICAgICAgW2tl
eWZyYW1lQW5pbWF0aW9uIHNldEtleVRpbWVzOmNyZWF0ZU5TQXJyYXkocHJvcGVydGllcy5rZXlU
aW1lcywgW10gKGF1dG8mIHRpbWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQCh0aW1lKTsK
KyAgICAgICAgICAgIH0pLmdldCgpXTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChwcm9wZXJ0
aWVzLnRpbWluZ0Z1bmN0aW9ucy5zaXplKCkpIHsKLSAgICAgICAgICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gdGltaW5nRnVuY3Rpb25zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OnByb3BlcnRpZXMudGltaW5nRnVuY3Rpb25zLnNpemUoKV0p
OwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0aW1pbmdGdW5jdGlvbiA6IHByb3BlcnRp
ZXMudGltaW5nRnVuY3Rpb25zKQotICAgICAgICAgICAgICAgIFt0aW1pbmdGdW5jdGlvbnMgYWRk
T2JqZWN0OnRvQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uLmdldCgpLCBwcm9w
ZXJ0aWVzLnJldmVyc2VUaW1pbmdGdW5jdGlvbnMpXTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgW2tleWZyYW1lQW5pbWF0aW9uIHNldFRpbWluZ0Z1bmN0aW9uczp0aW1pbmdGdW5jdGlvbnMu
Z2V0KCldOworICAgICAgICAgICAgW2tleWZyYW1lQW5pbWF0aW9uIHNldFRpbWluZ0Z1bmN0aW9u
czpjcmVhdGVOU0FycmF5KHByb3BlcnRpZXMudGltaW5nRnVuY3Rpb25zLCBbJl0gKGF1dG8mIGZ1
bmN0aW9uKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvQ0FNZWRpYVRpbWluZ0Z1bmN0aW9u
KGZ1bmN0aW9uLmdldCgpLCBwcm9wZXJ0aWVzLnJldmVyc2VUaW1pbmdGdW5jdGlvbnMpOworICAg
ICAgICAgICAgfSkuZ2V0KCldOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjYUFuaW1h
dGlvbiA9IGtleWZyYW1lQW5pbWF0aW9uOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpTcHJpbmc6IHsKLSAgICAgICAgUmV0YWluUHRyPENBU3By
aW5nQW5pbWF0aW9uPiBzcHJpbmdBbmltYXRpb247Ci0gICAgICAgIHNwcmluZ0FuaW1hdGlvbiA9
IFtDQVNwcmluZ0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpwcm9wZXJ0aWVzLmtleVBh
dGhdOworICAgICAgICBhdXRvIHNwcmluZ0FuaW1hdGlvbiA9IFtDQVNwcmluZ0FuaW1hdGlvbiBh
bmltYXRpb25XaXRoS2V5UGF0aDpwcm9wZXJ0aWVzLmtleVBhdGhdOwogICAgICAgICAKICAgICAg
ICAgaWYgKHByb3BlcnRpZXMua2V5VmFsdWVzLnNpemUoKSA+IDEpIHsKICAgICAgICAgICAgIFtz
cHJpbmdBbmltYXRpb24gc2V0RnJvbVZhbHVlOmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFs
dWUocHJvcGVydGllcy5rZXlWYWx1ZXNbMF0pXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAppbmRl
eCA0ODEwYjIxZTRmODFhYjg3OTc5OTc2OThkYWJiYzU4YmZlNmEzNzE5Li4yMDM4NzFkOGQ2MmU1
MjBlOTllMmQyZTg0YjQ0NmE4ZDU2MmIwYjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCkBA
IC04Niw2ICs4Niw3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0o
Y29uc3QgQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYgaXRlbUlECiBXZWJCYWNrRm9yd2FyZExp
c3RQcm94eTo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHkoV2ViUGFnZSYgcGFnZSkKICAgICA6IG1f
cGFnZSgmcGFnZSkKIHsKKyAgICAvLyBGSVhNRTogVGhpcyBtZWFucyB0aGF0IGlmIHdlIG1peCBs
ZWdhY3kgV2ViS2l0IGFuZCBtb2Rlcm4gV2ViS2l0IGluIHRoZSBzYW1lIHByb2Nlc3MsIHdlIHdv
bid0IGdldCBib3RoIG5vdGlmaWNhdGlvbnMuCiAgICAgV2ViQ29yZTo6bm90aWZ5SGlzdG9yeUl0
ZW1DaGFuZ2VkID0gV0syTm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV0tBY2Nlc3NpYmlsaXR5V2Vi
UGFnZU9iamVjdE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
S0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCmluZGV4IGEwOWZmNjEzN2E5OGI0MDNh
NTA2Njk5NTM4NjZkNzNjMGY2NjIxMzguLjI2Mjc1ZDdiNjdiNTlhZDk4ZWJlZmViZWViODAyMDkz
MWQzODk5OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFjLm1t
CkBAIC00Nyw2ICs0Nyw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5oPgogI2ltcG9ydCA8
cGFsL3NwaS9jb2NvYS9OU0FjY2Vzc2liaWxpdHlTUEkuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9W
ZWN0b3JDb2NvYS5oPgogCiBuYW1lc3BhY2UgYXggPSBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Owog
CkBAIC05NywxNSArOTgsMTUgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5E
CiAjZW5kaWYKIAogICAgIGlkIG5hbWVzID0gYXg6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVh
ZDxSZXRhaW5QdHI8aWQ+PihbUFJPVEVDVEVEX1NFTEZdICgpIC0+IFJldGFpblB0cjxpZD4gewot
ICAgICAgICBOU011dGFibGVBcnJheSAqbmFtZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwot
ICAgICAgICBpZiAoIXByb3RlY3RlZFNlbGYtPm1fcGFnZSkKLSAgICAgICAgICAgIHJldHVybiBu
YW1lczsKKyAgICAgICAgYXV0byBwYWdlID0gcHJvdGVjdGVkU2VsZi0+bV9wYWdlOworICAgICAg
ICBpZiAoIXBhZ2UpCisgICAgICAgICAgICByZXR1cm4gQFtdOwogCi0gICAgICAgIGlmIChhdXRv
KiBjb3JlUGFnZSA9IHByb3RlY3RlZFNlbGYtPm1fcGFnZS0+Y29yZVBhZ2UoKSkgewotICAgICAg
ICAgICAgZm9yIChhdXRvJiBuYW1lIDogY29yZVBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKHRydWUpKQotICAgICAgICAgICAgICAg
IFtuYW1lcyBhZGRPYmplY3Q6KE5TU3RyaW5nICopbmFtZV07Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIG5hbWVzOworICAgICAgICBhdXRvIGNvcmVQYWdlID0gcGFnZS0+Y29yZVBhZ2UoKTsK
KyAgICAgICAgaWYgKCFjb3JlUGFnZSkKKyAgICAgICAgICAgIHJldHVybiBAW107CisKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoY29yZVBhZ2UtPnBhZ2VPdmVybGF5Q29udHJvbGxlcigp
LmNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlc05hbWVzKHRydWUpKTsKICAgICB9KS5hdXRvcmVs
ZWFzZSgpOwogCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCmluZGV4
IDMwNjVkMTcyMjU4NGYyN2VmZWJjOTU5MzRiNmE3MDk0NWQ5YjNkNmUuLjZlYTEyMTM3OTcyMTZi
OWY3ODQwZTYyMmY5MmZkYTk3OWVhNTk3NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQpAQCAtNDYzLDE0ICs0NjMsMTIgQEAgdm9p
ZCBXZWJQcm9jZXNzOjpyZWdpc3RlcldpdGhTdGF0ZUR1bXBlcigpCiAgICAgICAgICAgICAgICAg
W3N0YXRlRGljdCBzZXRPYmplY3Q6anNPYmplY3RDb3VudHMuZ2V0KCkgZm9yS2V5OkAiSmF2YVNj
cmlwdCBPYmplY3QgQ291bnRzIl07CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGF1dG8g
cGFnZUxvYWRUaW1lcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwot
ICAgICAgICAgICAgZm9yIChhdXRvJiBwYWdlIDogbV9wYWdlTWFwLnZhbHVlcygpKSB7CisgICAg
ICAgICAgICBhdXRvIHBhZ2VMb2FkVGltZXMgPSBjcmVhdGVOU0FycmF5KG1fcGFnZU1hcC52YWx1
ZXMoKSwgW10gKGF1dG8mIHBhZ2UpIC0+IGlkIHsKICAgICAgICAgICAgICAgICBpZiAocGFnZS0+
dXNlc0VwaGVtZXJhbFNlc3Npb24oKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICAgICAgICAgICAgICBOU0RhdGUq
IGRhdGUgPSBbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2UxOTcwOnBhZ2UtPmxvYWRD
b21taXRUaW1lKCkuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCldOwotICAgICAgICAgICAg
ICAgIFtwYWdlTG9hZFRpbWVzIGFkZE9iamVjdDpkYXRlXTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gW05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDpw
YWdlLT5sb2FkQ29tbWl0VGltZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpXTsKKyAg
ICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICAvLyBBZGRpbmcgYW4gZW1wdHkgYXJyYXkgdG8g
dGhlIHByb2Nlc3Mgc3RhdGUgbWF5IHByb3ZpZGUgYW4KICAgICAgICAgICAgIC8vIGluZGljYXRp
b24gb2YgdGhlIGV4aXN0YW5jZSBvZiBwcml2YXRlIHNlc3Npb25zLCB3aGljaCB3ZSdkIGxpa2UK
QEAgLTYzMSwyMCArNjI5LDIxIEBAIHN0YXRpYyBOU1VSTCAqb3JpZ2luKFdlYlBhZ2UmIHBhZ2Up
CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKKwogc3RhdGljIFJldGFpblB0cjxOU0FycmF5
PE5TU3RyaW5nICo+PiBhY3RpdmVQYWdlc09yaWdpbnMoY29uc3QgSGFzaE1hcDxQYWdlSWRlbnRp
ZmllciwgUmVmUHRyPFdlYlBhZ2U+PiYgcGFnZU1hcCkKIHsKLSAgICBSZXRhaW5QdHI8TlNNdXRh
YmxlQXJyYXk8TlNTdHJpbmcgKj4+IGFjdGl2ZU9yaWdpbnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRdKTsKLQotICAgIGZvciAoYXV0byYgcGFnZSA6IHBhZ2VNYXAudmFs
dWVzKCkpIHsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShwYWdlTWFwLnZhbHVlcygpLCBbXSAo
YXV0byYgcGFnZSkgLT4gTlNTdHJpbmcgKiB7CiAgICAgICAgIGlmIChwYWdlLT51c2VzRXBoZW1l
cmFsU2Vzc2lvbigpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4g
bmlsOwogCi0gICAgICAgIGlmIChOU1VSTCAqb3JpZ2luQXNVUkwgPSBvcmlnaW4oKnBhZ2UpKQot
ICAgICAgICAgICAgW2FjdGl2ZU9yaWdpbnMgYWRkT2JqZWN0OldURjo6dXNlclZpc2libGVTdHJp
bmcob3JpZ2luQXNVUkwpXTsKLSAgICB9CisgICAgICAgIE5TVVJMICpvcmlnaW5Bc1VSTCA9IG9y
aWdpbigqcGFnZSk7CisgICAgICAgIGlmICghb3JpZ2luQXNVUkwpCisgICAgICAgICAgICByZXR1
cm4gbmlsOwogCi0gICAgcmV0dXJuIGFjdGl2ZU9yaWdpbnM7CisgICAgICAgIHJldHVybiBXVEY6
OnVzZXJWaXNpYmxlU3RyaW5nKG9yaWdpbkFzVVJMKTsKKyAgICB9KTsKIH0KKwogI2VuZGlmCiAK
IHZvaWQgV2ViUHJvY2Vzczo6dXBkYXRlQWN0aXZlUGFnZXMoY29uc3QgU3RyaW5nJiBvdmVycmlk
ZURpc3BsYXlOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUlPUy5tbQppbmRleCA0NjE3NjhmNzBkMWJlYjI1Y2JiYzAyMTRkNGQ1
YzNkNmY2N2E5MzBhLi5mYWUzNGQxMjJkMjY2MzNhMGZkMTdkZjhlOWY2MzgyYjYzYTQ4ZWE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUlPUy5tbQpAQCAtMjcsNiArMjcsMTYgQEAKIAogI2ltcG9ydCAiV2ViRnJhbWVJT1MuaCIK
IAorI2ltcG9ydCAiRE9NLmgiCisjaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IkRPTVJhbmdlLmgiCisjaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCisjaW1wb3J0ICJET01V
SUtpdEV4dGVuc2lvbnMuaCIKKyNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKKyNpbXBvcnQg
IldlYlNlbGVjdGlvblJlY3QuaCIKKyNpbXBvcnQgIldlYlVJS2l0RGVsZWdhdGUuaCIKKyNpbXBv
cnQgIldlYlZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJWaXNpYmxlUG9zaXRpb25JbnRlcm5h
bC5oIgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRWRpdGluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4KQEAgLTQw
LDcgKzUwLDYgQEAKICNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Qb3NpdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVGV4dC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1NlbGVjdGlvblJlY3QuaD4KQEAgLTQ5LDIwICs1OCw4IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L1RleHRGbGFncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaXNpYmxlUG9zaXRpb24uaD4KICNpbXBv
cnQgPFdlYkNvcmUvVmlzaWJsZVVuaXRzLmg+Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NLmg+
Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NUmFuZ2UuaD4KLSNpbXBvcnQgPFdlYktpdExlZ2Fj
eS9ET01VSUtpdEV4dGVuc2lvbnMuaD4KLSNpbXBvcnQgPFdlYktpdExlZ2FjeS9XZWJTZWxlY3Rp
b25SZWN0Lmg+Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvV2ViVmlzaWJsZVBvc2l0aW9uLmg+CiAj
aW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+Ci0KLSNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgot
I2ltcG9ydCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5o
IgotI2ltcG9ydCAiV2ViVUlLaXREZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV2ViVmlld1ByaXZhdGUu
aCIKLSNpbXBvcnQgIldlYlZpc2libGVQb3NpdGlvbi5oIgotI2ltcG9ydCAiV2ViVmlzaWJsZVBv
c2l0aW9uSW50ZXJuYWwuaCIKKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMjE0LDEzICsyMTEsMTAgQEAgLSAoTlNBcnJh
eSAqKXNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOihSYW5nZSAqKXJhbmdlCiAgICAgCiAgICAg
VmVjdG9yPFNlbGVjdGlvblJlY3Q+IHJlY3RzOwogICAgIHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9u
UmVjdHMocmVjdHMpOwotICAgIHVuc2lnbmVkIHNpemUgPSByZWN0cy5zaXplKCk7CiAgICAgCi0g
ICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBh
Y2l0eTpzaXplXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0g
ICAgICAgIFNlbGVjdGlvblJlY3QgJmNvcmVSZWN0ID0gcmVjdHNbaV07Ci0gICAgICAgIFdlYlNl
bGVjdGlvblJlY3QgKndlYlJlY3QgPSBbV2ViU2VsZWN0aW9uUmVjdCBzZWxlY3Rpb25SZWN0XTsK
LSAgICAgICAgd2ViUmVjdC5yZWN0ID0gc3RhdGljX2Nhc3Q8Q0dSZWN0Pihjb3JlUmVjdC5yZWN0
KCkpOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHJlY3RzLCBbXSAoYXV0byYgY29yZVJlY3Qp
IHsKKyAgICAgICAgYXV0byB3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVj
dF07CisgICAgICAgIHdlYlJlY3QucmVjdCA9IGNvcmVSZWN0LnJlY3QoKTsKICAgICAgICAgd2Vi
UmVjdC53cml0aW5nRGlyZWN0aW9uID0gY29yZVJlY3QuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVj
dGlvbjo6TFRSID8gV0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dyaXRpbmdEaXJl
Y3Rpb25SaWdodFRvTGVmdDsKICAgICAgICAgd2ViUmVjdC5pc0xpbmVCcmVhayA9IGNvcmVSZWN0
LmlzTGluZUJyZWFrKCk7CiAgICAgICAgIHdlYlJlY3QuaXNGaXJzdE9uTGluZSA9IGNvcmVSZWN0
LmlzRmlyc3RPbkxpbmUoKTsKQEAgLTIyOSwxMCArMjIzLDggQEAgLSAoTlNBcnJheSAqKXNlbGVj
dGlvblJlY3RzRm9yQ29yZVJhbmdlOihSYW5nZSAqKXJhbmdlCiAgICAgICAgIHdlYlJlY3QuY29u
dGFpbnNFbmQgPSBjb3JlUmVjdC5jb250YWluc0VuZCgpOwogICAgICAgICB3ZWJSZWN0LmlzSW5G
aXhlZFBvc2l0aW9uID0gY29yZVJlY3QuaXNJbkZpeGVkUG9zaXRpb24oKTsKICAgICAgICAgd2Vi
UmVjdC5pc0hvcml6b250YWwgPSBjb3JlUmVjdC5pc0hvcml6b250YWwoKTsKLSAgICAgICAgW3Jl
c3VsdCBhZGRPYmplY3Q6d2ViUmVjdF07Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHdlYlJlY3Q7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsK
IH0KIAogLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6KERPTVJhbmdlICopZG9t
UmFuZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCmluZGV4IGQ4YWY2NzhkYWYwODg4Mjg0
YWJkZGMxY2RiMTBhZGViMTRiNzY3NGYuLmRmMGI1MjA5MTFmZTE4NWNiOTM4ZmYxZjdjOTk3ZWFm
ZWEyNzBmM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQpAQCAtMTg3LDEzICsxODcs
OSBAQCBzdGF0aWMgV0tRdWFkIHdrUXVhZEZyb21GbG9hdFF1YWQoY29uc3QgRmxvYXRRdWFkJiBp
blF1YWQpCiAKIHN0YXRpYyBOU0FycmF5ICpraXQoY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIHF1
YWRzKQogewotICAgIE5TTXV0YWJsZUFycmF5ICphcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTpxdWFkcy5zaXplKCldOwotICAgIGZvciAoYXV0byYgcXVhZCA6IHF1YWRz
KSB7Ci0gICAgICAgIFdLUXVhZE9iamVjdCAqcXVhZE9iamVjdCA9IFtbV0tRdWFkT2JqZWN0IGFs
bG9jXSBpbml0V2l0aFF1YWQ6d2tRdWFkRnJvbUZsb2F0UXVhZChxdWFkKV07Ci0gICAgICAgIFth
cnJheSBhZGRPYmplY3Q6cXVhZE9iamVjdF07Ci0gICAgICAgIFtxdWFkT2JqZWN0IHJlbGVhc2Vd
OwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocXVh
ZHMsIFtdIChhdXRvJiBxdWFkKSB7CisgICAgICAgIHJldHVybiBhZG9wdE5TKFtbV0tRdWFkT2Jq
ZWN0IGFsbG9jXSBpbml0V2l0aFF1YWQ6d2tRdWFkRnJvbUZsb2F0UXVhZChxdWFkKV0pOworICAg
IH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgV0tRdWFkIHplcm9RdWFkKCkK
QEAgLTU0Miw4ICs1MzgsNiBAQCAtICh2b2lkKWdldFByZXZpZXdTbmFwc2hvdEltYWdlOihDR0lt
YWdlUmVmKiljZ0ltYWdlIGFuZFJlY3RzOihOU0FycmF5ICoqKXJlY3RzCiAgICAgICAgICAgICAq
Y2dJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpLmF1dG9yZWxlYXNlKCk7CiAgICAgfQogCi0g
ICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiByZWN0QXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLQogICAgIGlmICghKmNnSW1hZ2UpIHsKICAgICAgICAg
aWYgKGF1dG8qIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBGbG9h
dFJlY3QgYm91bmRpbmdCb3g7CkBAIC01NTEsMjcgKzU0NSwxOCBAQCAtICh2b2lkKWdldFByZXZp
ZXdTbmFwc2hvdEltYWdlOihDR0ltYWdlUmVmKiljZ0ltYWdlIGFuZFJlY3RzOihOU0FycmF5ICoq
KXJlY3RzCiAgICAgICAgICAgICAgICAgYm91bmRpbmdCb3ggPSBkb3duY2FzdDxSZW5kZXJJbWFn
ZT4oKnJlbmRlcmVyKS5hYnNvbHV0ZUNvbnRlbnRRdWFkKCkuZW5jbG9zaW5nQm91bmRpbmdCb3go
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBib3VuZGluZ0JveCA9IHJlbmRl
cmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwotCiAgICAgICAgICAgICBib3VuZGluZ0Jv
eC5pbmZsYXRlKG1hcmdpbik7Ci0KLSAgICAgICAgICAgIENHUmVjdCBjZ1JlY3QgPSBub2RlLmRv
Y3VtZW50KCkuZnJhbWUoKS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJl
Y3QoYm91bmRpbmdCb3gpKTsKLSAgICAgICAgICAgIFtyZWN0QXJyYXkgYWRkT2JqZWN0OltOU1Zh
bHVlIHZhbHVlOiZjZ1JlY3Qgd2l0aE9iakNUeXBlOkBlbmNvZGUoQ0dSZWN0KV1dOwotCi0gICAg
ICAgICAgICAqcmVjdHMgPSByZWN0QXJyYXkuYXV0b3JlbGVhc2UoKTsKKyAgICAgICAgICAgICpy
ZWN0cyA9IEBbbWFrZU5TQXJyYXlFbGVtZW50KG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpLT52aWV3
KCktPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ0JveCkpKV07CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEZsb2F0UG9pbnQgb3JpZ2lu
ID0gdGV4dEluZGljYXRvci0+dGV4dEJvdW5kaW5nUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcygp
LmxvY2F0aW9uKCk7Ci0gICAgZm9yIChjb25zdCBGbG9hdFJlY3QmIHJlY3QgOiB0ZXh0SW5kaWNh
dG9yLT50ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCkpIHsKLSAgICAgICAgQ0dS
ZWN0IGNnUmVjdCA9IHJlY3Q7Ci0gICAgICAgIGNnUmVjdC5vcmlnaW4ueCArPSBvcmlnaW4ueCgp
OwotICAgICAgICBjZ1JlY3Qub3JpZ2luLnkgKz0gb3JpZ2luLnkoKTsKLSAgICAgICAgY2dSZWN0
ID0gbm9kZS5kb2N1bWVudCgpLmZyYW1lKCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhlbmNs
b3NpbmdJbnRSZWN0KGNnUmVjdCkpOwotICAgICAgICBbcmVjdEFycmF5IGFkZE9iamVjdDpbTlNW
YWx1ZSB2YWx1ZTomY2dSZWN0IHdpdGhPYmpDVHlwZTpAZW5jb2RlKENHUmVjdCldXTsKLSAgICB9
Ci0KLSAgICAqcmVjdHMgPSByZWN0QXJyYXkuYXV0b3JlbGVhc2UoKTsKKyAgICAqcmVjdHMgPSBj
cmVhdGVOU0FycmF5KHRleHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRp
bmF0ZXMoKSwgWyZdIChDR1JlY3QgcmVjdCkgeworICAgICAgICByZWN0Lm9yaWdpbi54ICs9IG9y
aWdpbi54KCk7CisgICAgICAgIHJlY3Qub3JpZ2luLnkgKz0gb3JpZ2luLnkoKTsKKyAgICAgICAg
cmV0dXJuIG1ha2VOU0FycmF5RWxlbWVudChub2RlLmRvY3VtZW50KCkuZnJhbWUoKS0+dmlldygp
LT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpKTsKKyAgICB9KS5hdXRv
cmVsZWFzZSgpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCmluZGV4IDhiOTk0ZWQyZDAwNzA2ZGQ4ZTRl
ZDZiMjJiNmIzYjdlOTg0NWY2MzkuLmIwOWM4ZWY1ZTQ4ZGRhMzFkYTNmM2Y4ZGMyNjY5NmEwMTY4
ZWExOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2ViQmFj
a0ZvcndhcmRMaXN0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3RvcnkvV2Vi
QmFja0ZvcndhcmRMaXN0Lm1tCkBAIC01MCw2ICs1MCw3IEBACiAjaW1wb3J0IDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAjaW1wb3J0IDx3dGYvU3RkTGli
RXh0cmFzLmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KIAogdHlwZWRlZiBI
YXNoTWFwPEJhY2tGb3J3YXJkTGlzdCosIFdlYkJhY2tGb3J3YXJkTGlzdCo+IEJhY2tGb3J3YXJk
TGlzdE1hcDsKIApAQCAtMTUxLDQ5ICsxNTIsMzggQEAgLSAodm9pZClyZW1vdmVJdGVtOihXZWJI
aXN0b3J5SXRlbSAqKWl0ZW0KIAogLy8gRklYTUU6IE1vdmUgaW50byBXZWJDb3JlIHRoZSBjb2Rl
IHRoYXQgZGVhbHMgZGlyZWN0bHkgd2l0aCBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QuCiAKLSNk
ZWZpbmUgV2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUVudHJpZXNLZXkgQCJlbnRyaWVzIgot
I2RlZmluZSBXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5Q2FwYWNpdHlLZXkgQCJjYXBhY2l0
eSIKLSNkZWZpbmUgV2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUN1cnJlbnRLZXkgQCJjdXJy
ZW50IgorY29uc3RleHByIGF1dG8gV2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUVudHJpZXNL
ZXkgPSBAImVudHJpZXMiOworY29uc3RleHByIGF1dG8gV2ViQmFja0ZvcndhcmRMaXN0RGljdGlv
bmFyeUNhcGFjaXR5S2V5ID0gQCJjYXBhY2l0eSI7Citjb25zdGV4cHIgYXV0byBXZWJCYWNrRm9y
d2FyZExpc3REaWN0aW9uYXJ5Q3VycmVudEtleSA9IEAiY3VycmVudCI7CiAKIC0gKE5TRGljdGlv
bmFyeSAqKWRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbgogewotICAgIEJhY2tGb3J3YXJkTGlzdCAq
Y29yZUJGTGlzdCA9IGNvcmUoc2VsZik7Ci0KLSAgICBhdXRvJiBoaXN0b3J5SXRlbXMgPSBjb3Jl
QkZMaXN0LT5lbnRyaWVzKCk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGhpc3RvcnlJdGVtcy5zaXpl
KCk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmVudHJpZXNBcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2l6ZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7ICsraSkKLSAgICAgICAgW2VudHJpZXNBcnJheSBhZGRPYmplY3Q6W2tpdChjb25z
dF9jYXN0PFdlYkNvcmU6Okhpc3RvcnlJdGVtKj4oaGlzdG9yeUl0ZW1zW2ldLnB0cigpKSkgZGlj
dGlvbmFyeVJlcHJlc2VudGF0aW9uSW5jbHVkaW5nQ2hpbGRyZW46Tk9dXTsKLQotICAgIE5TRGlj
dGlvbmFyeSAqZGljdGlvbmFyeSA9IEB7Ci0gICAgICAgIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rp
b25hcnlFbnRyaWVzS2V5OiBlbnRyaWVzQXJyYXksCi0gICAgICAgIFdlYkJhY2tGb3J3YXJkTGlz
dERpY3Rpb25hcnlDdXJyZW50S2V5OiBAKGNvcmVCRkxpc3QtPmN1cnJlbnQoKSksCi0gICAgICAg
IFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlDYXBhY2l0eUtleTogQChjb3JlQkZMaXN0LT5j
YXBhY2l0eSgpKSwKKyAgICBhdXRvJiBsaXN0ID0gKmNvcmUoc2VsZik7CisgICAgYXV0byBlbnRy
aWVzID0gY3JlYXRlTlNBcnJheShsaXN0LmVudHJpZXMoKSwgW10gKGF1dG8mIGl0ZW0pIHsKKyAg
ICAgICAgcmV0dXJuIFtraXQoY29uc3RfY2FzdDxXZWJDb3JlOjpIaXN0b3J5SXRlbSo+KGl0ZW0u
cHRyKCkpKSBkaWN0aW9uYXJ5UmVwcmVzZW50YXRpb25JbmNsdWRpbmdDaGlsZHJlbjpOT107Cisg
ICAgfSk7CisgICAgcmV0dXJuIEB7CisgICAgICAgIFdlYkJhY2tGb3J3YXJkTGlzdERpY3Rpb25h
cnlFbnRyaWVzS2V5OiBlbnRyaWVzLmdldCgpLAorICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RE
aWN0aW9uYXJ5Q3VycmVudEtleTogQChsaXN0LmN1cnJlbnQoKSksCisgICAgICAgIFdlYkJhY2tG
b3J3YXJkTGlzdERpY3Rpb25hcnlDYXBhY2l0eUtleTogQChsaXN0LmNhcGFjaXR5KCkpLAogICAg
IH07Ci0KLSAgICBbZW50cmllc0FycmF5IHJlbGVhc2VdOwotCi0gICAgcmV0dXJuIGRpY3Rpb25h
cnk7CiB9CiAKIC0gKHZvaWQpc2V0VG9NYXRjaERpY3Rpb25hcnlSZXByZXNlbnRhdGlvbjooTlNE
aWN0aW9uYXJ5ICopZGljdGlvbmFyeQogewotICAgIEJhY2tGb3J3YXJkTGlzdCAqY29yZUJGTGlz
dCA9IGNvcmUoc2VsZik7Ci0gICAgCi0gICAgY29yZUJGTGlzdC0+c2V0Q2FwYWNpdHkoW1tkaWN0
aW9uYXJ5IG9iamVjdEZvcktleTpXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9uYXJ5Q2FwYWNpdHlL
ZXldIGludFZhbHVlXSk7Ci0gICAgCi0gICAgZm9yIChOU0RpY3Rpb25hcnkgKml0ZW1EaWN0aW9u
YXJ5IGluIFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXZWJCYWNrRm9yd2FyZExpc3REaWN0aW9u
YXJ5RW50cmllc0tleV0pIHsKLSAgICAgICAgV2ViSGlzdG9yeUl0ZW0gKml0ZW0gPSBbW1dlYkhp
c3RvcnlJdGVtIGFsbG9jXSBpbml0RnJvbURpY3Rpb25hcnlSZXByZXNlbnRhdGlvbjppdGVtRGlj
dGlvbmFyeV07Ci0gICAgICAgIGNvcmVCRkxpc3QtPmFkZEl0ZW0oKmNvcmUoaXRlbSkpOwotICAg
ICAgICBbaXRlbSByZWxlYXNlXTsKLSAgICB9CisgICAgYXV0byYgbGlzdCA9ICpjb3JlKHNlbGYp
OworCisgICAgbGlzdC5zZXRDYXBhY2l0eShbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYkJh
Y2tGb3J3YXJkTGlzdERpY3Rpb25hcnlDYXBhY2l0eUtleV0gdW5zaWduZWRJbnRWYWx1ZV0pOwor
ICAgIGZvciAoTlNEaWN0aW9uYXJ5ICppdGVtRGljdGlvbmFyeSBpbiBbZGljdGlvbmFyeSBvYmpl
Y3RGb3JLZXk6V2ViQmFja0ZvcndhcmRMaXN0RGljdGlvbmFyeUVudHJpZXNLZXldKQorICAgICAg
ICBsaXN0LmFkZEl0ZW0oKmNvcmUoYWRvcHROUyhbW1dlYkhpc3RvcnlJdGVtIGFsbG9jXSBpbml0
RnJvbURpY3Rpb25hcnlSZXByZXNlbnRhdGlvbjppdGVtRGljdGlvbmFyeV0pLmdldCgpKSk7CiAK
ICAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Oldl
YkJhY2tGb3J3YXJkTGlzdERpY3Rpb25hcnlDdXJyZW50S2V5XSB1bnNpZ25lZEludFZhbHVlXTsK
LSAgICBzaXplX3QgbGlzdFNpemUgPSBjb3JlQkZMaXN0LT5lbnRyaWVzKCkuc2l6ZSgpOworICAg
IHNpemVfdCBsaXN0U2l6ZSA9IGxpc3QuZW50cmllcygpLnNpemUoKTsKICAgICBpZiAoY3VycmVu
dEluZGV4ID49IGxpc3RTaXplKQogICAgICAgICBjdXJyZW50SW5kZXggPSBsaXN0U2l6ZSAtIDE7
Ci0gICAgY29yZUJGTGlzdC0+c2V0Q3VycmVudChjdXJyZW50SW5kZXgpOworICAgIGxpc3Quc2V0
Q3VycmVudChjdXJyZW50SW5kZXgpOwogfQorCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlM
WSkKIAogLSAoQk9PTCljb250YWluc0l0ZW06KFdlYkhpc3RvcnlJdGVtICopaXRlbQpAQCAtMjM1
LDIyICsyMjUsMTEgQEAgLSAoV2ViSGlzdG9yeUl0ZW0gKilmb3J3YXJkSXRlbQogICAgIHJldHVy
biBbW2tpdChjb3JlKHNlbGYpLT5mb3J3YXJkSXRlbSgpLmdldCgpKSByZXRhaW5dIGF1dG9yZWxl
YXNlXTsKIH0KIAotc3RhdGljIE5TQXJyYXkqIHZlY3RvclRvTlNBcnJheShWZWN0b3I8UmVmPFdl
YkNvcmU6Okhpc3RvcnlJdGVtPj4mIGxpc3QpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGxpc3Qu
c2l6ZSgpOwotICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzaXplXSBhdXRvcmVsZWFzZV07Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6a2l0
KGxpc3RbaV0ucHRyKCkpXTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBib29s
IGJ1bXBlckNhckJhY2tGb3J3YXJkSGFja05lZWRlZCgpIAorc3RhdGljIGJvb2wgYnVtcGVyQ2Fy
QmFja0ZvcndhcmRIYWNrTmVlZGVkKCkKIHsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBzdGF0aWMgYm9vbCBoYWNrTmVlZGVkID0gW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxl
SWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmZyZWV2ZXJzZS5idW1wZXJjYXIiXSAm
JiAKLSAgICAgICAgIVdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9X
SVRIT1VUX0JVTVBFUkNBUl9CQUNLX0ZPUldBUkRfUVVJUkspOwotCisgICAgc3RhdGljIGJvb2wg
aGFja05lZWRlZCA9IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdIGlz
RXF1YWxUb1N0cmluZzpAImNvbS5mcmVldmVyc2UuYnVtcGVyY2FyIl0KKyAgICAgICAgJiYgIVdl
YktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX0JVTVBFUkNB
Ul9CQUNLX0ZPUldBUkRfUVVJUkspOwogICAgIHJldHVybiBoYWNrTmVlZGVkOwogI2Vsc2UKICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0yNjEsMzAgKzI0MCwyOCBAQCAtIChOU0FycmF5ICopYmFja0xp
c3RXaXRoTGltaXQ6KGludClsaW1pdAogewogICAgIFZlY3RvcjxSZWY8V2ViQ29yZTo6SGlzdG9y
eUl0ZW0+PiBsaXN0OwogICAgIGNvcmUoc2VsZiktPmJhY2tMaXN0V2l0aExpbWl0KGxpbWl0LCBs
aXN0KTsKLSAgICBOU0FycmF5ICpyZXN1bHQgPSB2ZWN0b3JUb05TQXJyYXkobGlzdCk7Ci0gICAg
CisgICAgYXV0byByZXN1bHQgPSBjcmVhdGVOU0FycmF5KGxpc3QsIFtdIChhdXRvJiBpdGVtKSB7
CisgICAgICAgIHJldHVybiBraXQoaXRlbS5wdHIoKSk7CisgICAgfSk7CiAgICAgaWYgKGJ1bXBl
ckNhckJhY2tGb3J3YXJkSGFja05lZWRlZCgpKSB7Ci0gICAgICAgIHN0YXRpYyBOU0FycmF5ICps
YXN0QmFja0xpc3RBcnJheSA9IG5pbDsKLSAgICAgICAgW2xhc3RCYWNrTGlzdEFycmF5IHJlbGVh
c2VdOwotICAgICAgICBsYXN0QmFja0xpc3RBcnJheSA9IFtyZXN1bHQgcmV0YWluXTsKKyAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxOU0FycmF5Pj4gbGFzdEJhY2tMaXN0
QXJyYXk7CisgICAgICAgIGxhc3RCYWNrTGlzdEFycmF5LmdldCgpID0gcmVzdWx0OwogICAgIH0K
LSAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQuYXV0b3JlbGVhc2Uo
KTsKIH0KIAogLSAoTlNBcnJheSAqKWZvcndhcmRMaXN0V2l0aExpbWl0OihpbnQpbGltaXQKIHsK
ICAgICBWZWN0b3I8UmVmPFdlYkNvcmU6Okhpc3RvcnlJdGVtPj4gbGlzdDsKICAgICBjb3JlKHNl
bGYpLT5mb3J3YXJkTGlzdFdpdGhMaW1pdChsaW1pdCwgbGlzdCk7Ci0gICAgTlNBcnJheSAqcmVz
dWx0ID0gdmVjdG9yVG9OU0FycmF5KGxpc3QpOwotICAgIAorICAgIGF1dG8gcmVzdWx0ID0gY3Jl
YXRlTlNBcnJheShsaXN0LCBbXSAoYXV0byYgaXRlbSkgeworICAgICAgICByZXR1cm4ga2l0KGl0
ZW0ucHRyKCkpOworICAgIH0pOwogICAgIGlmIChidW1wZXJDYXJCYWNrRm9yd2FyZEhhY2tOZWVk
ZWQoKSkgewotICAgICAgICBzdGF0aWMgTlNBcnJheSAqbGFzdEZvcndhcmRMaXN0QXJyYXkgPSBu
aWw7Ci0gICAgICAgIFtsYXN0Rm9yd2FyZExpc3RBcnJheSByZWxlYXNlXTsKLSAgICAgICAgbGFz
dEZvcndhcmRMaXN0QXJyYXkgPSBbcmVzdWx0IHJldGFpbl07CisgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxSZXRhaW5QdHI8TlNBcnJheT4+IGxhc3RGb3J3YXJkTGlzdEFycmF5OworICAg
ICAgICBsYXN0Rm9yd2FyZExpc3RBcnJheS5nZXQoKSA9IHJlc3VsdDsKICAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7CiB9CiAK
IC0gKGludCljYXBhY2l0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlz
dG9yeS9XZWJIaXN0b3J5SXRlbS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0hpc3Rvcnkv
V2ViSGlzdG9yeUl0ZW0ubW0KaW5kZXggZGZhY2IzN2QxMDkzODVjZGE2MjU3MWIzZDAzZjM1Yjli
OTRlNjUyNS4uNjc2NTY4MjgxOWE1OGJiYmNjMmM4YjM2MzJmNGJlMDZhMjExM2JmZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvSGlzdG9yeS9XZWJIaXN0b3J5SXRlbS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtLm1tCkBA
IC0yNTgsMTAgKzI1OCw4IEBAIC0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KIEhpc3RvcnlJdGVt
KiBjb3JlKFdlYkhpc3RvcnlJdGVtICppdGVtKQogewogICAgIGlmICghaXRlbSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEFTU0VSVChoaXN0
b3J5SXRlbVdyYXBwZXJzKCkuZ2V0KGNvcmUoaXRlbS0+X3ByaXZhdGUpKSA9PSBpdGVtKTsKLQog
ICAgIHJldHVybiBjb3JlKGl0ZW0tPl9wcml2YXRlKTsKIH0KIApAQCAtMjY5LDExICsyNjcsOCBA
QCBXZWJIaXN0b3J5SXRlbSAqa2l0KEhpc3RvcnlJdGVtKiBpdGVtKQogewogICAgIGlmICghaXRl
bSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgCi0gICAgV2ViSGlzdG9yeUl0ZW0gKmtp
dEl0ZW0gPSBoaXN0b3J5SXRlbVdyYXBwZXJzKCkuZ2V0KGl0ZW0pOwotICAgIGlmIChraXRJdGVt
KQotICAgICAgICByZXR1cm4ga2l0SXRlbTsKLSAgICAKKyAgICBpZiAoYXV0byB3cmFwcGVyID0g
aGlzdG9yeUl0ZW1XcmFwcGVycygpLmdldChpdGVtKSkKKyAgICAgICAgcmV0dXJuIFtbd3JhcHBl
ciByZXRhaW5dIGF1dG9yZWxlYXNlXTsKICAgICByZXR1cm4gW1tbV2ViSGlzdG9yeUl0ZW0gYWxs
b2NdIGluaXRXaXRoV2ViQ29yZUhpc3RvcnlJdGVtOippdGVtXSBhdXRvcmVsZWFzZV07CiB9CiAK
QEAgLTI4NCwyMyArMjc5LDI1IEBAICsgKFdlYkhpc3RvcnlJdGVtICopZW50cnlXaXRoVVJMOihO
U1VSTCAqKVVSTAogCiAtIChpZClpbml0V2l0aFVSTFN0cmluZzooTlNTdHJpbmcgKilVUkxTdHJp
bmcgdGl0bGU6KE5TU3RyaW5nICopdGl0bGUgZGlzcGxheVRpdGxlOihOU1N0cmluZyAqKWRpc3Bs
YXlUaXRsZSBsYXN0VmlzaXRlZFRpbWVJbnRlcnZhbDooTlNUaW1lSW50ZXJ2YWwpdGltZQogewot
ICAgIFdlYkhpc3RvcnlJdGVtICppdGVtID0gW3NlbGYgaW5pdFdpdGhXZWJDb3JlSGlzdG9yeUl0
ZW06SGlzdG9yeUl0ZW06OmNyZWF0ZShVUkxTdHJpbmcsIHRpdGxlLCBkaXNwbGF5VGl0bGUpXTsK
LQorICAgIGF1dG8gaXRlbSA9IFtzZWxmIGluaXRXaXRoV2ViQ29yZUhpc3RvcnlJdGVtOkhpc3Rv
cnlJdGVtOjpjcmVhdGUoVVJMU3RyaW5nLCB0aXRsZSwgZGlzcGxheVRpdGxlKV07CisgICAgaWYg
KCFpdGVtKQorICAgICAgICByZXR1cm4gbmlsOwogICAgIGl0ZW0tPl9wcml2YXRlLT5fbGFzdFZp
c2l0ZWRUaW1lID0gdGltZTsKLQogICAgIHJldHVybiBpdGVtOwogfQogCiAtIChpZClpbml0V2l0
aFdlYkNvcmVIaXN0b3J5SXRlbTooUmVmPEhpc3RvcnlJdGVtPiYmKWl0ZW0KIHsgICAKICAgICBX
ZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9uZSgpOworCiAgICAgLy8gTmVlZCB0byB0
ZWxsIFdlYkNvcmUgd2hhdCBmdW5jdGlvbiB0byBjYWxsIGZvciB0aGUgCiAgICAgLy8gIkhpc3Rv
cnkgSXRlbSBoYXMgQ2hhbmdlZCIgbm90aWZpY2F0aW9uIC0gbm8gaGFybSBpbiBkb2luZyB0aGlz
CiAgICAgLy8gZXZlcnl0aW1lIGEgV2ViSGlzdG9yeUl0ZW0gaXMgY3JlYXRlZAogICAgIC8vIE5v
dGU6IFdlIGFsc28gZG8gdGhpcyBpbiBbV2ViRnJhbWVWaWV3IGluaXRXaXRoRnJhbWU6XSB3aGVy
ZSB3ZSBkbwogICAgIC8vIG90aGVyICJpbml0IGJlZm9yZSBXZWJLaXQgaXMgdXNlZCIgdHlwZSB0
aGluZ3MKKyAgICAvLyBGSVhNRTogVGhpcyBtZWFucyB0aGF0IGlmIHdlIG1peCBsZWdhY3kgV2Vi
S2l0IGFuZCBtb2Rlcm4gV2ViS2l0IGluIHRoZSBzYW1lIHByb2Nlc3MsIHdlIHdvbid0IGdldCBi
b3RoIG5vdGlmaWNhdGlvbnMuCiAgICAgV2ViQ29yZTo6bm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2Vk
ID0gV0tOb3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQ7Ci0gICAgCisKICAgICBpZiAoIShzZWxmID0g
W3N1cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtNDgwLDE3ICs0NzcsMTMg
QEAgLSAodm9pZClzZXRSU1NGZWVkUmVmZXJyZXI6KE5TU3RyaW5nICopcmVmZXJyZXIKIAogLSAo
TlNBcnJheSAqKWNoaWxkcmVuCiB7Ci0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBjb3JlKF9w
cml2YXRlKS0+Y2hpbGRyZW4oKTsKLSAgICBpZiAoIWNoaWxkcmVuLnNpemUoKSkKKyAgICBhdXRv
JiBjaGlsZHJlbiA9IGNvcmUoX3ByaXZhdGUpLT5jaGlsZHJlbigpOworICAgIGlmIChjaGlsZHJl
bi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICB1bnNpZ25lZCBzaXplID0g
Y2hpbGRyZW4uc2l6ZSgpOwotICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzaXplXSBhdXRvcmVsZWFzZV07Ci0gICAg
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgW3Jlc3Vs
dCBhZGRPYmplY3Q6a2l0KGNvbnN0X2Nhc3Q8SGlzdG9yeUl0ZW0qPihjaGlsZHJlbltpXS5wdHIo
KSkpXTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjcmVhdGVOU0FycmF5
KGNoaWxkcmVuLCBbXSAoYXV0byYgaXRlbSkgeworICAgICAgICByZXR1cm4ga2l0KGNvbnN0X2Nh
c3Q8SGlzdG9yeUl0ZW0qPihpdGVtLnB0cigpKSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0K
IAogLSAoTlNVUkwgKilVUkwKQEAgLTUxNCwxNiArNTA3LDExIEBAIC0gKEJPT0wpbGFzdFZpc2l0
V2FzRmFpbHVyZQogCiAtIChOU0FycmF5ICopX3JlZGlyZWN0VVJMcwogewotICAgIFZlY3RvcjxT
dHJpbmc+KiByZWRpcmVjdFVSTHMgPSBfcHJpdmF0ZS0+X3JlZGlyZWN0VVJMcy5nZXQoKTsKKyAg
ICBhdXRvJiByZWRpcmVjdFVSTHMgPSBfcHJpdmF0ZS0+X3JlZGlyZWN0VVJMczsKICAgICBpZiAo
IXJlZGlyZWN0VVJMcykKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHNpemVfdCBzaXplID0g
cmVkaXJlY3RVUkxzLT5zaXplKCk7Ci0gICAgQVNTRVJUKHNpemUpOwotICAgIE5TTXV0YWJsZUFy
cmF5ICpyZXN1bHQgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnNp
emVdOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBbcmVz
dWx0IGFkZE9iamVjdDooTlNTdHJpbmcqKXJlZGlyZWN0VVJMcy0+YXQoaSldOwotICAgIHJldHVy
biBbcmVzdWx0IGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheSgqcmVkaXJl
Y3RVUkxzKS5hdXRvcmVsZWFzZSgpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3Mu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCmlu
ZGV4IDRjNGZlYzc4ZjNhYjk1YTFkYzA3NGFlN2E0OGY5OTBmMmMxNTM3NjAuLmQ1NDFjNGMwNGYy
ZDc1ZDA2YmVlMDgwZWJjZmU2NmIwYTQ1ZmJlZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQpAQCAtODAsMzQgKzgwLDI3IEBAICsg
KHNpemVfdClqYXZhU2NyaXB0UHJvdGVjdGVkR2xvYmFsT2JqZWN0c0NvdW50CiAgICAgcmV0dXJu
IGNvbW1vblZNKCkuaGVhcC5wcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwogfQogCitzdGF0
aWMgUmV0YWluUHRyPE5TQ291bnRlZFNldD4gY3JlYXRlTlNDb3VudGVkU2V0KGNvbnN0IEhhc2hD
b3VudGVkU2V0PGNvbnN0IGNoYXIqPiYgc2V0KQoreworICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRO
UyhbW05TQ291bnRlZFNldCBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzZXQuc2l6ZSgpXSk7Cisg
ICAgZm9yIChhdXRvJiBlbnRyeSA6IHNldCkgeworICAgICAgICBhdXRvIGtleSA9IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoVVRGOFN0cmluZzplbnRyeS5rZXldOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZW50cnkudmFsdWU7ICsraSkKKyAgICAgICAgICAgIFtyZXN1bHQgYWRkT2Jq
ZWN0OmtleV07CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKICsgKE5TQ291bnRlZFNl
dCAqKWphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzCiB7CiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2soY29tbW9uVk0oKSk7Ci0gICAgCi0gICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBb
TlNDb3VudGVkU2V0IHNldF07Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZUNvdW50U2V0PiBj
b3VudHMoY29tbW9uVk0oKS5oZWFwLnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSk7Ci0gICAg
SGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgp
OwotICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNv
dW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaXQtPnZhbHVlOyArK2kpCi0gICAgICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpb
TlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6aXQtPmtleV1dOwotICAgIAotICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIGNyZWF0ZU5TQ291bnRlZFNldCgqY29tbW9uVk0oKS5oZWFw
LnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogKyAoTlND
b3VudGVkU2V0ICopamF2YVNjcmlwdE9iamVjdFR5cGVDb3VudHMKIHsKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhjb21tb25WTSgpKTsKLSAgICAKLSAgICBOU0NvdW50ZWRTZXQgKnJlc3VsdCA9IFtO
U0NvdW50ZWRTZXQgc2V0XTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlQ291bnRTZXQ+IGNv
dW50cyhjb21tb25WTSgpLmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKLSAgICBIYXNoQ291bnRl
ZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGVuZCA9IGNvdW50cy0+ZW5kKCk7Ci0gICAgZm9y
IChIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
dC0+dmFsdWU7ICsraSkKLSAgICAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1N0cmluZyBz
dHJpbmdXaXRoVVRGOFN0cmluZzppdC0+a2V5XV07Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICByZXR1cm4gY3JlYXRlTlNDb3VudGVkU2V0KCpjb21tb25WTSgpLmhlYXAub2JqZWN0VHlw
ZUNvdW50cygpKS5hdXRvcmVsZWFzZSgpOwogfQogCiArICh2b2lkKWdhcmJhZ2VDb2xsZWN0SmF2
YVNjcmlwdE9iamVjdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2Mv
V2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9X
ZWJOU1Bhc3RlYm9hcmRFeHRyYXMubW0KaW5kZXggZTFjNWVlYjMyODNmMDY2ZDgxMmNjYjA1NmM0
NzA3ZjM1MmIwODc3ZC4uYjgzNjM2NmYwM2ZmNjBkYTk4NDExZDEwOTRhMTAzODk3YTIzMThiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1Bhc3RlYm9hcmRF
eHRyYXMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJOU1Bhc3RlYm9h
cmRFeHRyYXMubW0KQEAgLTI5OCw5ICsyOTgsNyBAQCAtIChpZClfd2ViX2RlY2xhcmVBbmRXcml0
ZURyYWdJbWFnZUZvckVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50CiAgICAgICAgICAgICBl
eHRlbnNpb24gPSBVUkwucGF0aEV4dGVuc2lvbjsKICAgICAgICAgICAgIFt0eXBlcyBhZGRPYmpl
Y3RzRnJvbUFycmF5OltOU1Bhc3RlYm9hcmQgX3dlYl9kcmFnVHlwZXNGb3JVUkxdXTsKICAgICAg
ICAgICAgIFtzZWxmIGRlY2xhcmVUeXBlczp0eXBlcy5nZXQoKSBvd25lcjpzb3VyY2VdOwotICAg
ICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBwYXRocyA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwotICAgICAgICAgICAgW3BhdGhzLmdldCgpIGFkZE9i
amVjdDp0aXRsZV07Ci0gICAgICAgICAgICBbc2VsZiBzZXRQcm9wZXJ0eUxpc3Q6cGF0aHMuZ2V0
KCkgZm9yVHlwZTpsZWdhY3lGaWxlbmFtZXNQYXN0ZWJvYXJkVHlwZSgpXTsKKyAgICAgICAgICAg
IFtzZWxmIHNldFByb3BlcnR5TGlzdDpAW3RpdGxlXSBmb3JUeXBlOmxlZ2FjeUZpbGVuYW1lc1Bh
c3RlYm9hcmRUeXBlKCldOwogICAgICAgICB9CiAjZW5kaWYKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyLm1tCmluZGV4
IGU3Mjc1Yzc0ZGRkNzY3MWI0NTJjYjdkN2RkZDMxYTNlYjM0NDNiZjMuLmNkNTUwYWY1MTVjNzg2
NDEzZDA0MmU5MWZjY2ZhMjRjNzhmZWVkMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyLm1tCkBAIC05MiwxNCArOTIsOSBA
QCAtIChpZClpbml0CiAKIC0gKE5TQXJyYXkgKilvcmlnaW5zCiB7Ci0gICAgYXV0byBjb3JlT3Jp
Z2lucyA9IERhdGFiYXNlVHJhY2tlcjo6c2luZ2xldG9uKCkub3JpZ2lucygpOwotICAgIE5TTXV0
YWJsZUFycmF5ICp3ZWJPcmlnaW5zID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTpjb3JlT3JpZ2lucy5zaXplKCldOwotICAgIGZvciAoYXV0byYgY29yZU9yaWdpbiA6
IGNvcmVPcmlnaW5zKSB7Ci0gICAgICAgIFdlYlNlY3VyaXR5T3JpZ2luICp3ZWJPcmlnaW4gPSBb
W1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlPcmlnaW46
Y29yZU9yaWdpbi5zZWN1cml0eU9yaWdpbigpLnB0cigpXTsKLSAgICAgICAgW3dlYk9yaWdpbnMg
YWRkT2JqZWN0OndlYk9yaWdpbl07Ci0gICAgICAgIFt3ZWJPcmlnaW4gcmVsZWFzZV07Ci0gICAg
fQotICAgIHJldHVybiBbd2ViT3JpZ2lucyBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIGNyZWF0
ZU5TQXJyYXkoRGF0YWJhc2VUcmFja2VyOjpzaW5nbGV0b24oKS5vcmlnaW5zKCksIFtdIChhdXRv
JiBvcmlnaW4pIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXZWJTZWN1cml0eU9yaWdpbiBh
bGxvY10gX2luaXRXaXRoV2ViQ29yZVNlY3VyaXR5T3JpZ2luOm9yaWdpbi5zZWN1cml0eU9yaWdp
bigpLnB0cigpXSk7CisgICAgfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNBcnJheSAqKWRh
dGFiYXNlc1dpdGhPcmlnaW46KFdlYlNlY3VyaXR5T3JpZ2luICopb3JpZ2luCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJTdG9yYWdlTWFuYWdlci5tbQppbmRl
eCA1M2NjMmIxNDU2MjhkNmYzM2Y2OWQzODE1OTcwYzg1NjU1MWUzNDliLi5iYmZmZGM0NTQ4MDcw
OGJlOTkyMTdkOGQwNDAyMGE5YThiYzI3MzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9TdG9yYWdlL1dlYlN0b3JhZ2VNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1N0b3JhZ2UvV2ViU3RvcmFnZU1hbmFnZXIubW0KQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5
T3JpZ2luLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgorI2ltcG9y
dCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CkBAIC01OSwxNyArNjAsOSBAQCAtIChpZClpbml0CiAKIC0gKE5TQXJyYXkgKilvcmlnaW5zCiB7
Ci0gICAgYXV0byBjb3JlT3JpZ2lucyA9IFdlYktpdDo6U3RvcmFnZVRyYWNrZXI6OnRyYWNrZXIo
KS5vcmlnaW5zKCk7Ci0KLSAgICBOU011dGFibGVBcnJheSAqd2ViT3JpZ2lucyA9IFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y29yZU9yaWdpbnMuc2l6ZSgpXTsKLQot
ICAgIGZvciAoYXV0byYgb3JpZ2luIDogY29yZU9yaWdpbnMpIHsKLSAgICAgICAgV2ViU2VjdXJp
dHlPcmlnaW4gKndlYk9yaWdpbiA9IFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0
aFdlYkNvcmVTZWN1cml0eU9yaWdpbjpvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKS5wdHIoKV07Ci0g
ICAgICAgIFt3ZWJPcmlnaW5zIGFkZE9iamVjdDp3ZWJPcmlnaW5dOwotICAgICAgICBbd2ViT3Jp
Z2luIHJlbGVhc2VdOwotICAgIH0KLQotICAgIHJldHVybiBbd2ViT3JpZ2lucyBhdXRvcmVsZWFz
ZV07CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoV2ViS2l0OjpTdG9yYWdlVHJhY2tlcjo6dHJh
Y2tlcigpLm9yaWdpbnMoKSwgW10gKGF1dG8mIG9yaWdpbikgeworICAgICAgICByZXR1cm4gYWRv
cHROUyhbW1dlYlNlY3VyaXR5T3JpZ2luIGFsbG9jXSBfaW5pdFdpdGhXZWJDb3JlU2VjdXJpdHlP
cmlnaW46b3JpZ2luLnNlY3VyaXR5T3JpZ2luKCkucHRyKCldKTsKKyAgICB9KS5hdXRvcmVsZWFz
ZSgpOwogfQogCiAtICh2b2lkKWRlbGV0ZUFsbE9yaWdpbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJBcHBsaWNhdGlvbkNhY2hl
Lm1tCmluZGV4IGEyMjc4MWFlZmEzZGQ4ZTY1OTlmOTkwNDA3YmJmZmI1YmQ2OGNlMWYuLjU4MTQy
ZjRhN2I5NjE1YmE3NTg1YmRlZWEzN2IxNjYzNzEzZTIzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkFwcGxpY2F0aW9uQ2FjaGUubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQXBwbGljYXRpb25D
YWNoZS5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNh
Y2hlU3RvcmFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCA8V2ViQ29yZS9SdW50aW1lQXBwbGlj
YXRpb25DaGVja3MuaD4KQEAgLTEyMSwxNiArMTIyLDkgQEAgKyAodm9pZClkZWxldGVDYWNoZUZv
ck9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW4KIAogKyAoTlNBcnJheSAqKW9yaWdp
bnNXaXRoQ2FjaGUKIHsKLSAgICBhdXRvIGNvcmVPcmlnaW5zID0gd2ViQXBwbGljYXRpb25DYWNo
ZVN0b3JhZ2UoKS5vcmlnaW5zV2l0aENhY2hlKCk7Ci0gICAgCi0gICAgTlNNdXRhYmxlQXJyYXkg
KndlYk9yaWdpbnMgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpj
b3JlT3JpZ2lucy5zaXplKCldIGF1dG9yZWxlYXNlXTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGNv
cmVPcmlnaW4gOiBjb3JlT3JpZ2lucykgewotICAgICAgICBhdXRvIHdlYk9yaWdpbiA9IGFkb3B0
TlMoW1tXZWJTZWN1cml0eU9yaWdpbiBhbGxvY10gX2luaXRXaXRoV2ViQ29yZVNlY3VyaXR5T3Jp
Z2luOmNvcmVPcmlnaW4ucHRyKCldKTsKLSAgICAgICAgW3dlYk9yaWdpbnMgYWRkT2JqZWN0Ondl
Yk9yaWdpbi5nZXQoKV07Ci0gICAgfQotICAgIAotICAgIHJldHVybiB3ZWJPcmlnaW5zOworICAg
IHJldHVybiBjcmVhdGVOU0FycmF5KHdlYkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlKCkub3JpZ2lu
c1dpdGhDYWNoZSgpLCBbXSAoYXV0byYgb3JpZ2luKSB7CisgICAgICAgIHJldHVybiBhZG9wdE5T
KFtbV2ViU2VjdXJpdHlPcmlnaW4gYWxsb2NdIF9pbml0V2l0aFdlYkNvcmVTZWN1cml0eU9yaWdp
bjpvcmlnaW4ucHRyKCldKTsKKyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiBAZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW0KaW5kZXggOGE3NTNjNTkwMTcyMmFjYWNiNGMzMDUwYTMxZTFiZjcwOGNiNTRl
YS4uYWQ3MGY5ZmM0NTAzYTdlZDdjMmZjOTE4ZTE3ZWUzOWI3MWM5NTVjYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQpAQCAtMTAzOSwxMyArMTAzOSwxMCBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmluZ1ZpZXcgc3RyaQog
CiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3Jh
bW1hckRldGFpbCkKIHsKLSAgICBOU011dGFibGVBcnJheSAqY29ycmVjdGlvbnMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXldOwotICAgIGZvciAoYXV0byYgZ3Vlc3MgOiBncmFtbWFyRGV0YWlsLmd1
ZXNzZXMpCi0gICAgICAgIFtjb3JyZWN0aW9ucyBhZGRPYmplY3Q6Z3Vlc3NdOwotICAgIE5TRGlj
dGlvbmFyeSAqZGljdGlvbmFyeSA9IEB7Ci0gICAgICAgIE5TR3JhbW1hclJhbmdlIDogW05TVmFs
dWUgdmFsdWVXaXRoUmFuZ2U6Z3JhbW1hckRldGFpbC5yYW5nZV0sCi0gICAgICAgIE5TR3JhbW1h
clVzZXJEZXNjcmlwdGlvbiA6IGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uLAotICAgICAg
ICBOU0dyYW1tYXJDb3JyZWN0aW9ucyA6IGNvcnJlY3Rpb25zLAorICAgIGF1dG8gZGljdGlvbmFy
eSA9IEB7CisgICAgICAgIE5TR3JhbW1hclJhbmdlOiBbTlNWYWx1ZSB2YWx1ZVdpdGhSYW5nZTpn
cmFtbWFyRGV0YWlsLnJhbmdlXSwKKyAgICAgICAgTlNHcmFtbWFyVXNlckRlc2NyaXB0aW9uOiBn
cmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiwKKyAgICAgICAgTlNHcmFtbWFyQ29ycmVjdGlv
bnM6IGNyZWF0ZU5TQXJyYXkoZ3JhbW1hckRldGFpbC5ndWVzc2VzKS5nZXQoKSwKICAgICB9Owog
ICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSB1cGRhdGVTcGVsbGluZ1Bh
bmVsV2l0aEdyYW1tYXJTdHJpbmc6YmFkR3JhbW1hclBocmFzZSBkZXRhaWw6ZGljdGlvbmFyeV07
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJOb3RpZmljYXRpb25DbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQubW0KaW5kZXggNjdkYWU2YTdiN2ZjZmUxOTQ3
NDNkYTk1YzM2ZDA4NDNiY2ZiNTdlNi4uODIxYTZmZDRiZDRjZDM5ODRjM2QzMjgzMGMwMGY0MTUx
NTBkOGU2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5tbQpAQCAtMzYsNiArMzYsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9Ob3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2suaD4KICNp
bXBvcnQgPFdlYkNvcmUvU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oPgogI2ltcG9ydCA8d3RmL0Js
b2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtODgsMTcgKzg5LDE0IEBAIHZvaWQgV2Vi
Tm90aWZpY2F0aW9uQ2xpZW50OjpjbGVhck5vdGlmaWNhdGlvbnMoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKICAgICBpZiAoaXQgPT0gbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLmVu
ZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgVmVjdG9yPFJldGFpblB0cjxXZWJOb3Rp
ZmljYXRpb24+PiYgd2ViTm90aWZpY2F0aW9ucyA9IGl0LT52YWx1ZTsKLSAgICBOU011dGFibGVB
cnJheSAqbnNJRHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIHNpemVfdCBjb3VudCA9
IHdlYk5vdGlmaWNhdGlvbnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewotICAgICAgICBXZWJOb3RpZmljYXRpb24gKndlYk5vdGlmaWNhdGlvbiA9IHdl
Yk5vdGlmaWNhdGlvbnNbaV0uZ2V0KCk7Ci0gICAgICAgIFtuc0lEcyBhZGRPYmplY3Q6W05TTnVt
YmVyIG51bWJlcldpdGhVbnNpZ25lZExvbmdMb25nOlt3ZWJOb3RpZmljYXRpb24gbm90aWZpY2F0
aW9uSURdXV07Ci0gICAgICAgIGNvcmUod2ViTm90aWZpY2F0aW9uKS0+ZmluYWxpemUoKTsKLSAg
ICAgICAgbV9ub3RpZmljYXRpb25NYXAucmVtb3ZlKGNvcmUod2ViTm90aWZpY2F0aW9uKSk7Ci0g
ICAgfQotCi0gICAgW1ttX3dlYlZpZXcgX25vdGlmaWNhdGlvblByb3ZpZGVyXSBjbGVhck5vdGlm
aWNhdGlvbnM6bnNJRHNdOworICAgIGF1dG8gZmluYWxpemVkTm90aWZpY2F0aW9uSURzID0gY3Jl
YXRlTlNBcnJheShpdC0+dmFsdWUsIFsmXSAoYXV0byYgbm90aWZpY2F0aW9uKSB7CisgICAgICAg
IGF1dG8mIGNvcmVOb3RpZmljYXRpb24gPSAqY29yZShub3RpZmljYXRpb24uZ2V0KCkpOworICAg
ICAgICBjb3JlTm90aWZpY2F0aW9uLmZpbmFsaXplKCk7CisgICAgICAgIG1fbm90aWZpY2F0aW9u
TWFwLnJlbW92ZSgmY29yZU5vdGlmaWNhdGlvbik7CisgICAgICAgIHJldHVybiBAKFtub3RpZmlj
YXRpb24gbm90aWZpY2F0aW9uSURdKTsKKyAgICB9KTsKKworICAgIFtbbV93ZWJWaWV3IF9ub3Rp
ZmljYXRpb25Qcm92aWRlcl0gY2xlYXJOb3RpZmljYXRpb25zOmZpbmFsaXplZE5vdGlmaWNhdGlv
bklEcy5nZXQoKV07CiAgICAgbV9ub3RpZmljYXRpb25Db250ZXh0TWFwLnJlbW92ZShpdCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViQXJjaGl2
ZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViQXJjaGl2ZS5tbQppbmRl
eCA4ZWJmYjUzZTkxNGJmZWVlZTczMzhlNjYwMzY5NzhlZmJhNWIyYmQxLi44MTYyYTMxNGU5ZDhh
Zjg4MDg0NjhkN2JlNWJmZTFlZjkyYTY5ZmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkFyY2hpdmUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJBcmNoaXZlLm1tCkBAIC00MCw2ICs0MCw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2lt
cG9ydCA8d3RmL1J1bkxvb3AuaD4KKyNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMjgwLDE5ICsyODEsMTMgQEAgLSAoTlNB
cnJheSAqKXN1YnJlc291cmNlcwogICAgIC8vIEN1cnJlbnRseSBmcm9tIFdlYktpdCBBUEkgcGVy
c3BlY3RpdmUsIFdlYkFyY2hpdmVzIGFyZSBlbnRpcmVseSBpbW11dGFibGUgb25jZSBjcmVhdGVk
CiAgICAgLy8gSWYgdGhleSBldmVyIGJlY29tZSBtdXRhYmxlLCB3ZSdsbCBuZWVkIHRvIHJldGhp
bmsgdGhpcy4gICAgIAogICAgIGlmICghX3ByaXZhdGUtPmNhY2hlZFN1YnJlc291cmNlcykgewot
ICAgICAgICBMZWdhY3lXZWJBcmNoaXZlKiBjb3JlQXJjaGl2ZSA9IFtfcHJpdmF0ZSBjb3JlQXJj
aGl2ZV07CisgICAgICAgIGF1dG8gY29yZUFyY2hpdmUgPSBbX3ByaXZhdGUgY29yZUFyY2hpdmVd
OwogICAgICAgICBpZiAoIWNvcmVBcmNoaXZlKQogICAgICAgICAgICAgX3ByaXZhdGUtPmNhY2hl
ZFN1YnJlc291cmNlcyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdF07CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgYXV0byYgc3VicmVzb3VyY2VzID0gY29yZUFyY2hpdmUtPnN1YnJlc291cmNl
cygpOwotICAgICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKm11dGFibGVBcnJheSA9IFtbTlNNdXRh
YmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c3VicmVzb3VyY2VzLnNpemUoKV07Ci0g
ICAgICAgICAgICBfcHJpdmF0ZS0+Y2FjaGVkU3VicmVzb3VyY2VzID0gbXV0YWJsZUFycmF5Owot
ICAgICAgICAgICAgZm9yIChhdXRvJiBzdWJyZXNvdXJjZSA6IHN1YnJlc291cmNlcykgewotICAg
ICAgICAgICAgICAgIGlmIChXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFs
bG9jXSBfaW5pdFdpdGhDb3JlUmVzb3VyY2U6c3VicmVzb3VyY2UuZ2V0KCldKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFttdXRhYmxlQXJyYXkgYWRkT2JqZWN0OnJlc291cmNlXTsKLSAgICAgICAg
ICAgICAgICAgICAgW3Jlc291cmNlIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIF9wcml2YXRlLT5jYWNoZWRTdWJyZXNvdXJjZXMgPSBjcmVh
dGVOU0FycmF5KGNvcmVBcmNoaXZlLT5zdWJyZXNvdXJjZXMoKSwgW10gKGF1dG8mIHN1YnJlc291
cmNlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0TlMoW1tXZWJSZXNvdXJjZSBhbGxv
Y10gX2luaXRXaXRoQ29yZVJlc291cmNlOnN1YnJlc291cmNlLmdldCgpXSk7CisgICAgICAgICAg
ICB9KS5sZWFrUmVmKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gTWFpbnRhaW4gdGhlIFdl
YktpdCAzIGJlaGF2aW9yIG9mIHRoaXMgQVBJLCB3aGljaCBpcyBkb2N1bWVudGVkIGFuZApAQCAt
MzExLDE0ICszMDYsOSBAQCAtIChOU0FycmF5ICopc3ViZnJhbWVBcmNoaXZlcwogICAgICAgICBp
ZiAoIWNvcmVBcmNoaXZlKQogICAgICAgICAgICAgX3ByaXZhdGUtPmNhY2hlZFN1YmZyYW1lQXJj
aGl2ZXMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRdOwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGF1dG8mIHN1YmZyYW1lQXJjaGl2ZXMgPSBjb3JlQXJjaGl2ZS0+c3ViZnJhbWVBcmNoaXZl
cygpOwotICAgICAgICAgICAgYXV0byBtdXRhYmxlQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OnN1YmZyYW1lQXJjaGl2ZXMuc2l6ZSgpXTsKLSAgICAgICAg
ICAgIF9wcml2YXRlLT5jYWNoZWRTdWJmcmFtZUFyY2hpdmVzID0gbXV0YWJsZUFycmF5OwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN1YmZyYW1lQXJjaGl2ZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBXZWJBcmNoaXZlICphcmNoaXZlID0gW1tXZWJBcmNo
aXZlIGFsbG9jXSBfaW5pdFdpdGhDb3JlTGVnYWN5V2ViQXJjaGl2ZTpzdGF0aWNfY2FzdDxMZWdh
Y3lXZWJBcmNoaXZlKj4oc3ViZnJhbWVBcmNoaXZlc1tpXS5wdHIoKSldOwotICAgICAgICAgICAg
ICAgIFttdXRhYmxlQXJyYXkgYWRkT2JqZWN0OmFyY2hpdmVdOwotICAgICAgICAgICAgICAgIFth
cmNoaXZlIHJlbGVhc2VdOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgX3ByaXZhdGUtPmNh
Y2hlZFN1YmZyYW1lQXJjaGl2ZXMgPSBjcmVhdGVOU0FycmF5KGNvcmVBcmNoaXZlLT5zdWJmcmFt
ZUFyY2hpdmVzKCksIFtdIChhdXRvJiBhcmNoaXZlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGFkb3B0TlMoW1tXZWJBcmNoaXZlIGFsbG9jXSBfaW5pdFdpdGhDb3JlTGVnYWN5V2ViQXJjaGl2
ZTpzdGF0aWNfY2FzdDxMZWdhY3lXZWJBcmNoaXZlKj4oYXJjaGl2ZS5wdHIoKSldKTsKKyAgICAg
ICAgICAgIH0pLmxlYWtSZWYoKTsKICAgICAgICAgfQogICAgIH0KICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbQppbmRleCBiYjAyNzY5
M2MyNWE2YmM2Mzg2NDNkMGVlYzI2NGE0MjUwZTQzYjc5Li42NThkZDRlMTExM2NlYmY1OTYyODRi
Y2Q3MjA1NjA5YTg3ZmE4YzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkRhdGFTb3VyY2UubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJEYXRhU291cmNlLm1tCkBAIC01NDgsMTMgKzU0OCw5IEBAIC0gKFdlYlJlc291cmNl
ICopbWFpblJlc291cmNlCiAKIC0gKE5TQXJyYXkgKilzdWJyZXNvdXJjZXMKIHsKLSAgICBhdXRv
IGNvcmVTdWJyZXNvdXJjZXMgPSB0b1ByaXZhdGUoX3ByaXZhdGUpLT5sb2FkZXItPnN1YnJlc291
cmNlcygpOwotICAgIGF1dG8gc3VicmVzb3VyY2VzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvcmVTdWJyZXNvdXJjZXMuc2l6ZSgpXSk7Ci0gICAg
Zm9yIChhdXRvJiBjb3JlU3VicmVzb3VyY2UgOiBjb3JlU3VicmVzb3VyY2VzKSB7Ci0gICAgICAg
IGlmIChhdXRvIHJlc291cmNlID0gYWRvcHROUyhbW1dlYlJlc291cmNlIGFsbG9jXSBfaW5pdFdp
dGhDb3JlUmVzb3VyY2U6Y29yZVN1YnJlc291cmNlLmNvcHlSZWYoKV0pKQotICAgICAgICAgICAg
W3N1YnJlc291cmNlcyBhZGRPYmplY3Q6cmVzb3VyY2UuZ2V0KCldOwotICAgIH0KLSAgICByZXR1
cm4gc3VicmVzb3VyY2VzLmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXko
dG9Qcml2YXRlKF9wcml2YXRlKS0+bG9hZGVyLT5zdWJyZXNvdXJjZXMoKSwgW10gKGF1dG8mIHJl
c291cmNlKSB7CisgICAgICAgIHJldHVybiBhZG9wdE5TKFtbV2ViUmVzb3VyY2UgYWxsb2NdIF9p
bml0V2l0aENvcmVSZXNvdXJjZTpyZXNvdXJjZS5jb3B5UmVmKCldKTsKKyAgICB9KS5hdXRvcmVs
ZWFzZSgpOwogfQogCiAtIChXZWJSZXNvdXJjZSAqKXN1YnJlc291cmNlRm9yVVJMOihOU1VSTCAq
KVVSTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXgg
NDNiZmRlZTk2NmVkN2E3YWU2NzY4OTdiOWVjZDk5MmFkMjlmOGFhZS4uNTM2NzNlOWUyZjVlZDNi
ZjRjYTUxMjRjOTJmNDE2Y2YzYzM3MmVmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC01NzMsMTUgKzU3Myw2IEBAIC0gKHZvaWQpX3NldElzQ29t
bWl0dGluZzooQk9PTCl2YWx1ZQogCiAjZW5kaWYKIAotLSAoTlNBcnJheSAqKV9ub2Rlc0Zyb21M
aXN0OihWZWN0b3I8V2ViQ29yZTo6Tm9kZSo+ICopbm9kZXNWZWN0b3IKLXsKLSAgICBzaXplX3Qg
c2l6ZSA9IG5vZGVzVmVjdG9yLT5zaXplKCk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKm5vZGVzID0g
W05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnNpemVdOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBbbm9kZXMgYWRkT2JqZWN0OmtpdCgoKm5v
ZGVzVmVjdG9yKVtpXSldOwotICAgIHJldHVybiBub2RlczsKLX0KLQogLSAoTlNTdHJpbmcgKilf
c2VsZWN0ZWRTdHJpbmcKIHsKICAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZGlzcGxh
eVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5z
ZWxlY3RlZFRleHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkZyYW1lVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
RnJhbWVWaWV3Lm1tCmluZGV4IGNlOWM0NTM0YjdmOThkYTkyZjY1NjNjNjExNjk2ODBjMzQ2Nzc0
NGIuLjk5MmE5Zjg5MTY3N2I4MDZlNWEyYzkyOWZiMzdlYWFiY2M3OGVjYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVWaWV3Lm1tCkBAIC0zNTYsNiAr
MzU2LDcgQEAgLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCiAgICAgICAgIAogICAg
ICAgICAvLyBOZWVkIHRvIHRlbGwgV2ViQ29yZSB3aGF0IGZ1bmN0aW9uIHRvIGNhbGwgZm9yIHRo
ZSAiSGlzdG9yeSBJdGVtIGhhcyBDaGFuZ2VkIiBub3RpZmljYXRpb24uCiAgICAgICAgIC8vIE5v
dGU6IFdlIGFsc28gZG8gdGhpcyBpbiBXZWJIaXN0b3J5SXRlbSdzIGluaXQgbWV0aG9kLgorICAg
ICAgICAvLyBGSVhNRTogVGhpcyBtZWFucyB0aGF0IGlmIHdlIG1peCBsZWdhY3kgV2ViS2l0IGFu
ZCBtb2Rlcm4gV2ViS2l0IGluIHRoZSBzYW1lIHByb2Nlc3MsIHdlIHdvbid0IGdldCBib3RoIG5v
dGlmaWNhdGlvbnMuCiAgICAgICAgIFdlYkNvcmU6Om5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCA9
IFdLTm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkOwogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxSZXBy
ZXNlbnRhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJl
cHJlc2VudGF0aW9uLm1tCmluZGV4IDEwMzNjOWZmZDU2NDFiOTA2ZDM3MzY3OGI1ZmJmNDc2YWYy
YjdiZmYuLmFkNzcxYzE2NTA2MmEzNWVlNTI2MmI1ODQwMDExZTIyOTBhNTllNWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9u
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uLm1tCkBAIC02NSw2ICs2NSw3IEBACiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgog
I2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yNzQsNyAr
Mjc1LDcgQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZ0Zyb206KERP
TU5vZGUgKilzdGFydE5vZGUgc3RhcnRPZmZzZXQ6KGkKIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQq
IGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCkKIHsKICAgICBF
bGVtZW50KiBub2RlID0gY29yZShlbGVtZW50KTsKLSAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5o
YXNUYWdOYW1lKGZvcm1UYWcpID8gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obm9kZSkg
OiAwOworICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykgPyBzdGF0
aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihub2RlKSA6IG51bGxwdHI7CiB9CiAKIC0gKERPTUVs
ZW1lbnQgKillbGVtZW50V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBpbkZvcm06KERPTUVsZW1l
bnQgKilmb3JtCkBAIC0zMTYsOCArMzE3LDggQEAgLSAoQk9PTCllbGVtZW50SXNQYXNzd29yZDoo
RE9NRWxlbWVudCAqKWVsZW1lbnQKIAogLSAoRE9NRWxlbWVudCAqKWZvcm1Gb3JFbGVtZW50OihE
T01FbGVtZW50ICopZWxlbWVudAogewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCA9IGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KGVsZW1lbnQpOwotICAgIHJldHVybiBpbnB1
dEVsZW1lbnQgPyBraXQoaW5wdXRFbGVtZW50LT5mb3JtKCkpIDogMDsKKyAgICBhdXRvIGlucHV0
RWxlbWVudCA9IGlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KGVsZW1lbnQpOworICAgIHJldHVy
biBpbnB1dEVsZW1lbnQgPyBraXQoaW5wdXRFbGVtZW50LT5mb3JtKCkpIDogbmlsOwogfQogCiAt
IChET01FbGVtZW50ICopY3VycmVudEZvcm0KQEAgLTMyNywyMyArMzI4LDE4IEBAIC0gKERPTUVs
ZW1lbnQgKiljdXJyZW50Rm9ybQogCiAtIChOU0FycmF5ICopY29udHJvbHNJbkZvcm06KERPTUVs
ZW1lbnQgKilmb3JtCiB7Ci0gICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudCA9IGZvcm1F
bGVtZW50RnJvbURPTUVsZW1lbnQoZm9ybSk7CisgICAgYXV0byBmb3JtRWxlbWVudCA9IGZvcm1F
bGVtZW50RnJvbURPTUVsZW1lbnQoZm9ybSk7CiAgICAgaWYgKCFmb3JtRWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0cyA9IG5pbDsKIAogICAg
IFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29w
ZTsKLSAgICBmb3IgKGF1dG8mIHdlYWtFbGVtZW50IDogZm9ybUVsZW1lbnQtPnVuc2FmZUFzc29j
aWF0ZWRFbGVtZW50cygpKSB7CisgICAgYXV0byByZXN1bHQgPSBjcmVhdGVOU0FycmF5KGZvcm1F
bGVtZW50LT51bnNhZmVBc3NvY2lhdGVkRWxlbWVudHMoKSwgW10gKGF1dG8mIHdlYWtFbGVtZW50
KSAtPiBET01FbGVtZW50ICogewogICAgICAgICBhdXRvIGNvcmVFbGVtZW50ID0gbWFrZVJlZlB0
cih3ZWFrRWxlbWVudC5nZXQoKSk7Ci0gICAgICAgIGlmIChjb3JlRWxlbWVudC0+YXNGb3JtQXNz
b2NpYXRlZEVsZW1lbnQoKS0+aXNFbnVtZXJhdGFibGUoKSkgeyAvLyBTa2lwIG9wdGlvbiBlbGVt
ZW50cywgb3RoZXIgZHVkcwotICAgICAgICAgICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IGtpdChj
b3JlRWxlbWVudC5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdHMpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0cyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhPYmplY3Q6ZWxlbWVudF07
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgW3Jlc3VsdHMgYWRkT2JqZWN0OmVs
ZW1lbnRdOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHRzOworICAgICAgICBp
ZiAoIWNvcmVFbGVtZW50LT5hc0Zvcm1Bc3NvY2lhdGVkRWxlbWVudCgpLT5pc0VudW1lcmF0YWJs
ZSgpKSAvLyBTa2lwIG9wdGlvbiBlbGVtZW50cywgb3RoZXIgZHVkcworICAgICAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIGtpdChjb3JlRWxlbWVudC5nZXQoKSk7CisgICAgfSk7
CisgICAgcmV0dXJuIFtyZXN1bHQgY291bnRdID8gcmVzdWx0LmF1dG9yZWxlYXNlKCkgOiBuaWw7
CiB9CiAKIC8vIEVpdGhlciBnZXQgY2FjaGVkIHJlZ2V4cCBvciBidWlsZCBvbmUgdGhhdCBtYXRj
aGVzIGFueSBvZiB0aGUgbGFiZWxzLgpAQCAtNDIzLDEyICs0MTksMTIgQEAgc3RhdGljIE5TU3Ry
aW5nKiBzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KEZyYW1lKiBmcmFtZSwgTlNBcnJheSog
bGFiZWxzLCBFbGUKICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgUmVndWxhckV4cHJlc3Npb24q
IHJlZ0V4cCA9IHJlZ0V4cEZvckxhYmVscyhsYWJlbHMpOwogICAgIC8vIFdlIHN0b3Agc2VhcmNo
aW5nIGFmdGVyIHdlJ3ZlIHNlZW4gdGhpcyBtYW55IGNoYXJzCi0gICAgY29uc3QgdW5zaWduZWQg
aW50IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQgPSA1MDA7CisgICAgY29uc3RleHByIHVuc2lnbmVk
IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQgPSA1MDA7CiAgICAgLy8gVGhpcyBpcyB0aGUgYWJzb2x1
dGUgbWF4IHdlIHNlYXJjaC4gIFdlIGFsbG93IGEgbGl0dGxlIG1vcmUgc2xvcCB0aGFuCiAgICAg
Ly8gY2hhcnNTZWFyY2hlZFRocmVzaG9sZCwgdG8gbWFrZSBpdCBtb3JlIGxpa2VseSB0aGF0IHdl
J2xsIHNlYXJjaCB3aG9sZSBub2Rlcy4KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4Q2hhcnNT
ZWFyY2hlZCA9IDYwMDsKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgbWF4Q2hhcnNTZWFyY2hlZCA9
IDYwMDsKICAgICAvLyBJZiB0aGUgc3RhcnRpbmcgZWxlbWVudCBpcyB3aXRoaW4gYSB0YWJsZSwg
dGhlIGNlbGwgdGhhdCBjb250YWlucyBpdAotICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50KiBzdGFy
dGluZ1RhYmxlQ2VsbCA9IDA7CisgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIHN0YXJ0aW5nVGFi
bGVDZWxsID0gbnVsbHB0cjsKICAgICBib29sIHNlYXJjaGVkQ2VsbEFib3ZlID0gZmFsc2U7CiAg
ICAgCiAgICAgaWYgKHJlc3VsdERpc3RhbmNlKQpAQCAtNDQ3LDggKzQ0Myw4IEBAIHN0YXRpYyBO
U1N0cmluZyogc2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChGcmFtZSogZnJhbWUsIE5TQXJy
YXkqIGxhYmVscywgRWxlCiAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKHRkVGFnKSAmJiAhc3Rh
cnRpbmdUYWJsZUNlbGwpIHsKICAgICAgICAgICAgIHN0YXJ0aW5nVGFibGVDZWxsID0gc3RhdGlj
X2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihuKTsKICAgICAgICAgfSBlbHNlIGlmIChuLT5o
YXNUYWdOYW1lKHRyVGFnKSAmJiBzdGFydGluZ1RhYmxlQ2VsbCkgewotICAgICAgICAgICAgTlNT
dHJpbmcqIHJlc3VsdCA9IGZyYW1lLT5zZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwoKnJlZ0V4cCwg
c3RhcnRpbmdUYWJsZUNlbGwsIHJlc3VsdERpc3RhbmNlKTsKLSAgICAgICAgICAgIGlmIChyZXN1
bHQgJiYgW3Jlc3VsdCBsZW5ndGhdID4gMCkgeworICAgICAgICAgICAgTlNTdHJpbmcgKnJlc3Vs
dCA9IGZyYW1lLT5zZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwoKnJlZ0V4cCwgc3RhcnRpbmdUYWJs
ZUNlbGwsIHJlc3VsdERpc3RhbmNlKTsKKyAgICAgICAgICAgIGlmIChbcmVzdWx0IGxlbmd0aF0p
IHsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0SXNJbkNlbGxBYm92ZSkKICAgICAgICAgICAg
ICAgICAgICAgKnJlc3VsdElzSW5DZWxsQWJvdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC00NzMsOCArNDY5LDggQEAgc3RhdGljIE5TU3RyaW5nKiBzZWFyY2hG
b3JMYWJlbHNCZWZvcmVFbGVtZW50KEZyYW1lKiBmcmFtZSwgTlNBcnJheSogbGFiZWxzLCBFbGUK
ICAgICAvLyBJZiB3ZSBzdGFydGVkIGluIGEgY2VsbCwgYnV0IGJhaWxlZCBiZWNhdXNlIHdlIGZv
dW5kIHRoZSBzdGFydCBvZiB0aGUgZm9ybSBvciB0aGUKICAgICAvLyBwcmV2aW91cyBlbGVtZW50
LCB3ZSBzdGlsbCBtaWdodCBuZWVkIHRvIHNlYXJjaCB0aGUgcm93IGFib3ZlIHVzIGZvciBhIGxh
YmVsLgogICAgIGlmIChzdGFydGluZ1RhYmxlQ2VsbCAmJiAhc2VhcmNoZWRDZWxsQWJvdmUpIHsK
LSAgICAgICAgTlNTdHJpbmcqIHJlc3VsdCA9IGZyYW1lLT5zZWFyY2hGb3JMYWJlbHNBYm92ZUNl
bGwoKnJlZ0V4cCwgc3RhcnRpbmdUYWJsZUNlbGwsIHJlc3VsdERpc3RhbmNlKTsKLSAgICAgICAg
aWYgKHJlc3VsdCAmJiBbcmVzdWx0IGxlbmd0aF0gPiAwKSB7CisgICAgICAgIE5TU3RyaW5nICpy
ZXN1bHQgPSBmcmFtZS0+c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKCpyZWdFeHAsIHN0YXJ0aW5n
VGFibGVDZWxsLCByZXN1bHREaXN0YW5jZSk7CisgICAgICAgIGlmIChbcmVzdWx0IGxlbmd0aF0p
IHsKICAgICAgICAgICAgIGlmIChyZXN1bHRJc0luQ2VsbEFib3ZlKQogICAgICAgICAgICAgICAg
ICpyZXN1bHRJc0luQ2VsbEFib3ZlID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CkBAIC01MzYsNyArNTMyLDcgQEAgc3RhdGljIE5TU3RyaW5nICptYXRjaExhYmVsc0FnYWluc3RF
bGVtZW50KE5TQXJyYXkgKmxhYmVscywgRWxlbWVudCogZWxlbWVudCkKIAogLSAoTlNTdHJpbmcg
KilzZWFyY2hGb3JMYWJlbHM6KE5TQXJyYXkgKilsYWJlbHMgYmVmb3JlRWxlbWVudDooRE9NRWxl
bWVudCAqKWVsZW1lbnQKIHsKLSAgICByZXR1cm4gW3NlbGYgc2VhcmNoRm9yTGFiZWxzOmxhYmVs
cyBiZWZvcmVFbGVtZW50OmVsZW1lbnQgcmVzdWx0RGlzdGFuY2U6MCByZXN1bHRJc0luQ2VsbEFi
b3ZlOjBdOworICAgIHJldHVybiBbc2VsZiBzZWFyY2hGb3JMYWJlbHM6bGFiZWxzIGJlZm9yZUVs
ZW1lbnQ6ZWxlbWVudCByZXN1bHREaXN0YW5jZTpudWxscHRyIHJlc3VsdElzSW5DZWxsQWJvdmU6
bnVsbHB0cl07CiB9CiAKIC0gKE5TU3RyaW5nICopc2VhcmNoRm9yTGFiZWxzOihOU0FycmF5ICop
bGFiZWxzIGJlZm9yZUVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50IHJlc3VsdERpc3RhbmNl
OihOU1VJbnRlZ2VyKilvdXREaXN0YW5jZSByZXN1bHRJc0luQ2VsbEFib3ZlOihCT09MKilvdXRJ
c0luQ2VsbEFib3ZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1M
Vmlldy5tbQppbmRleCA1MjBlYTU2NjRhZjI4NzU2OWE4NTVjNzRiODFjZWE1NGM3ZThlMjAyLi40
YjZhMTE1ZmM5MzYzN2QzODNlYWRjZGU1OGRlYmM5ZDVhZmVkOWE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTM2NDEsNyArMzY0MSwx
MiBAQCBzdGF0aWMgUmV0YWluUHRyPE5TTWVudUl0ZW0+IGNyZWF0ZVNoYXJlTWVudUl0ZW0oY29u
c3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaAogICAgIHJldHVybiBbTlNNZW51SXRlbSBzdGFu
ZGFyZFNoYXJlTWVudUl0ZW1Gb3JJdGVtczppdGVtcy5nZXQoKV07CiB9CiAKLXN0YXRpYyBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IGNyZWF0ZU1lbnVJdGVtcyhjb25zdCBXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbT4mKTsKK3N0
YXRpYyBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGNyZWF0ZU1lbnVJdGVtcyhjb25zdCBXZWJD
b3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29udGV4dE1lbnVJdGVtPiYgaXRlbXMpCit7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoaXRl
bXMsIFsmXSAoYXV0byYgaXRlbSkgeworICAgICAgICByZXR1cm4gY3JlYXRlTWVudUl0ZW0oaGl0
VGVzdFJlc3VsdCwgaXRlbSk7CisgICAgfSk7Cit9CiAKIHN0YXRpYyBSZXRhaW5QdHI8TlNNZW51
SXRlbT4gY3JlYXRlTWVudUl0ZW0oY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0VGVz
dFJlc3VsdCwgY29uc3QgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtJiBpdGVtKQogewpAQCAtMzY2
OCw4ICszNjczLDcgQEAgc3RhdGljIFJldGFpblB0cjxOU01lbnVJdGVtPiBjcmVhdGVNZW51SXRl
bShjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0JiBoaXRUZXMKICAgICBjYXNlIFdlYkNvcmU6
OlN1Ym1lbnVUeXBlOiB7CiAgICAgICAgIGF1dG8gbWVudSA9IGFkb3B0TlMoW1tOU01lbnUgYWxs
b2NdIGluaXRdKTsKIAotICAgICAgICBhdXRvIHN1Ym1lbnVJdGVtcyA9IGNyZWF0ZU1lbnVJdGVt
cyhoaXRUZXN0UmVzdWx0LCBpdGVtLnN1Yk1lbnVJdGVtcygpKTsKLSAgICAgICAgZm9yIChOU01l
bnVJdGVtICptZW51SXRlbSBpbiBzdWJtZW51SXRlbXMuZ2V0KCkpCisgICAgICAgIGZvciAoTlNN
ZW51SXRlbSAqbWVudUl0ZW0gaW4gY3JlYXRlTWVudUl0ZW1zKGhpdFRlc3RSZXN1bHQsIGl0ZW0u
c3ViTWVudUl0ZW1zKCkpLmdldCgpKQogICAgICAgICAgICAgW21lbnUgYWRkSXRlbTptZW51SXRl
bV07CiAKICAgICAgICAgYXV0byBtZW51SXRlbSA9IGFkb3B0TlMoW1tOU01lbnVJdGVtIGFsbG9j
XSBpbml0V2l0aFRpdGxlOml0ZW0udGl0bGUoKSBhY3Rpb246bnVsbHB0ciBrZXlFcXVpdmFsZW50
OkAiIl0pOwpAQCAtMzY4NCwxOCArMzY4OCw2IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNNZW51SXRl
bT4gY3JlYXRlTWVudUl0ZW0oY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0VGVzCiAg
ICAgfQogfQogCi1zdGF0aWMgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBjcmVhdGVNZW51SXRl
bXMoY29uc3QgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbT4mIGl0ZW1zKQotewotICAgIGF1dG8gbWVudUl0
ZW1zID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7Ci0KLSAgICBmb3Ig
KGF1dG8mIGl0ZW0gOiBpdGVtcykgewotICAgICAgICBpZiAoYXV0byBtZW51SXRlbSA9IGNyZWF0
ZU1lbnVJdGVtKGhpdFRlc3RSZXN1bHQsIGl0ZW0pKQotICAgICAgICAgICAgW21lbnVJdGVtcyBh
ZGRPYmplY3Q6bWVudUl0ZW0uZ2V0KCldOwotICAgIH0KLQotICAgIHJldHVybiBtZW51SXRlbXM7
Ci19Ci0KIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gY3VzdG9tTWVudUZyb21EZWZhdWx0SXRl
bXMoV2ViVmlldyAqd2ViVmlldywgY29uc3QgV2ViQ29yZTo6Q29udGV4dE1lbnUmIGRlZmF1bHRN
ZW51KQogewogICAgIGNvbnN0IGF1dG8mIGhpdFRlc3RSZXN1bHQgPSB3ZWJWaWV3LnBhZ2UtPmNv
bnRleHRNZW51Q29udHJvbGxlcigpLmhpdFRlc3RSZXN1bHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCA1MDUzY2VhNDlhMGJlNDE2M2ZlMDkzYjBi
NjA5Y2MxNTI1ZDI1ZmRiLi41Mzg1ODY3YzU0NzQxMmQ1Mzk2NTA1YWE4NmE0NzgxZGUwMjYwZWNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC02OTIs
MTEgKzY5Miw3IEBAIC0gKFdlYlVJVGV4dEluZGljYXRvckRhdGEgKilpbml0V2l0aEltYWdlOihD
R0ltYWdlUmVmKWltYWdlIHRleHRJbmRpY2F0b3JEYXRhOihjCiAgICAgX2RhdGFJbnRlcmFjdGlv
bkltYWdlID0gW1BBTDo6YWxsb2NVSUltYWdlSW5zdGFuY2UoKSBpbml0V2l0aENHSW1hZ2U6aW1h
Z2Ugc2NhbGU6c2NhbGUgb3JpZW50YXRpb246VUlJbWFnZU9yaWVudGF0aW9uRG93bk1pcnJvcmVk
XTsKICAgICBfc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IGluZGljYXRvckRh
dGEuc2VsZWN0aW9uUmVjdEluUm9vdFZpZXdDb29yZGluYXRlczsKICAgICBfdGV4dEJvdW5kaW5n
UmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IGluZGljYXRvckRhdGEudGV4dEJvdW5kaW5nUmVj
dEluUm9vdFZpZXdDb29yZGluYXRlczsKLQotICAgIE5TTXV0YWJsZUFycmF5ICp0ZXh0UmVjdHNJ
bkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBm
b3IgKGF1dG8gcmVjdCA6IGluZGljYXRvckRhdGEudGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29y
ZGluYXRlcykKLSAgICAgICAgW3RleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgYWRk
T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XV07Ci0gICAgX3RleHRSZWN0c0lu
Qm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBbW05TQXJyYXkgYXJyYXlXaXRoQXJyYXk6dGV4dFJl
Y3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlc10gcmV0YWluXTsKKyAgICBfdGV4dFJlY3RzSW5C
b3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IGNyZWF0ZU5TQXJyYXkoaW5kaWNhdG9yRGF0YS50ZXh0
UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKS5sZWFrUmVmKCk7CiAgICAgX2NvbnRlbnRJ
bWFnZVNjYWxlRmFjdG9yID0gaW5kaWNhdG9yRGF0YS5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcjsK
ICAgICBpZiAoaW5kaWNhdG9yRGF0YS5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KQogICAgICAg
ICBfY29udGVudEltYWdlV2l0aEhpZ2hsaWdodCA9IFtQQUw6OmFsbG9jVUlJbWFnZUluc3RhbmNl
KCkgaW5pdFdpdGhDR0ltYWdlOmluZGljYXRvckRhdGEuY29udGVudEltYWdlV2l0aEhpZ2hsaWdo
dC5nZXQoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSBzY2FsZTpzY2FsZSBvcmllbnRhdGlvbjpVSUlt
YWdlT3JpZW50YXRpb25Eb3duTWlycm9yZWRdOwpAQCAtNDM1Miw2ICs0MzQ4LDcgQEAgKyAodm9p
ZClfZG9Ob3RTdGFydE9ic2VydmluZ05ldHdvcmtSZWFjaGFiaWxpdHkKICNlbmRpZiAvLyBQTEFU
Rk9STShJT1NfRkFNSUxZKQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKwogLSAoTlNBcnJh
eSAqKV90b3VjaEV2ZW50UmVnaW9ucwogewogICAgIGF1dG8qIGZyYW1lID0gW3NlbGYgX21haW5D
b3JlRnJhbWVdOwpAQCAtNDM2NSwzOCArNDM2MiwzMyBAQCAtIChOU0FycmF5ICopX3RvdWNoRXZl
bnRSZWdpb25zCiAgICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHJlY3RzOwogICAgIGRvY3Vt
ZW50LT5nZXRUb3VjaFJlY3RzKHJlY3RzKTsKIAotICAgIGlmIChyZWN0cy5zaXplKCkgPT0gMCkK
KyAgICBpZiAocmVjdHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgTlNN
dXRhYmxlQXJyYXkgKmV2ZW50UmVnaW9uQXJyYXkgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTpyZWN0cy5zaXplKCldIGF1dG9yZWxlYXNlXTsKLQogICAgIE5TVmll
dyA8V2ViRG9jdW1lbnRWaWV3PiAqZG9jdW1lbnRWaWV3ID0gW1tbc2VsZiBtYWluRnJhbWVdIGZy
YW1lVmlld10gZG9jdW1lbnRWaWV3XTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHJlY3RzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlY3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0ID0gKml0OworICAg
IHJldHVybiBjcmVhdGVOU0FycmF5KHJlY3RzLCBbJl0gKGF1dG8mIHJlY3QpIC0+IFJldGFpblB0
cjxXZWJFdmVudFJlZ2lvbj4gewogICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICAgICAgLy8gVGhl
IHRvdWNoIHJlY3RhbmdsZXMgYXJlIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgZG9j
dW1lbnQgKGluc2lkZSB0aGUgV2ViSFRNTFZpZXcpLCB3aGljaCBpcyBub3QKICAgICAgICAgLy8g
dGhlIHNhbWUgYXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBXZWJWaWV3LiBVSVdlYlZp
ZXcgY3VycmVudGx5IGV4cGVjdHMgdmlldyBjb29yZGluYXRlcywgc28gd2UnbGwKICAgICAgICAg
Ly8gY29udmVydCB0aGVtIGhlcmUgbm93LgotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHZpZXdS
ZWN0ID0gV2ViQ29yZTo6SW50UmVjdChbZG9jdW1lbnRWaWV3IGNvbnZlcnRSZWN0OnJlY3QgdG9W
aWV3OnNlbGZdKTsKKyAgICAgICAgYXV0byB2aWV3UmVjdCA9IFtkb2N1bWVudFZpZXcgY29udmVy
dFJlY3Q6cmVjdCB0b1ZpZXc6c2VsZl07CiAKICAgICAgICAgLy8gVGhlIGV2ZW50IHJlZ2lvbiB3
YW50cyB0aGlzIHBvaW50cyBpbiB0aGlzIG9yZGVyOgogICAgICAgICAvLyAgcDItLS0tLS1wMwog
ICAgICAgICAvLyAgfCAgICAgICB8CiAgICAgICAgIC8vICBwMS0tLS0tLXA0Ci0gICAgICAgIC8v
Ci0gICAgICAgIFdlYkV2ZW50UmVnaW9uICpldmVudFJlZ2lvbiA9IFtbV2ViRXZlbnRSZWdpb24g
YWxsb2NdIGluaXRXaXRoUG9pbnRzOldlYkNvcmU6OkZsb2F0UG9pbnQodmlld1JlY3QueCgpLCB2
aWV3UmVjdC5tYXhZKCkpCi0gICAgICAgICAgICA6IFdlYkNvcmU6OkZsb2F0UG9pbnQodmlld1Jl
Y3QueCgpLCB2aWV3UmVjdC55KCkpIDogV2ViQ29yZTo6RmxvYXRQb2ludCh2aWV3UmVjdC5tYXhY
KCksIHZpZXdSZWN0LnkoKSkgOiBXZWJDb3JlOjpGbG9hdFBvaW50KHZpZXdSZWN0Lm1heFgoKSwg
dmlld1JlY3QubWF4WSgpKV07Ci0gICAgICAgIGlmIChldmVudFJlZ2lvbikgewotICAgICAgICAg
ICAgW2V2ZW50UmVnaW9uQXJyYXkgYWRkT2JqZWN0OmV2ZW50UmVnaW9uXTsKLSAgICAgICAgICAg
IFtldmVudFJlZ2lvbiByZWxlYXNlXTsKLSAgICAgICAgfQotICAgIH0KIAotICAgIHJldHVybiBl
dmVudFJlZ2lvbkFycmF5OworICAgICAgICBhdXRvIHAxID0gQ0dQb2ludE1ha2UoQ0dSZWN0R2V0
TWluWCh2aWV3UmVjdCksIENHUmVjdEdldE1heFkodmlld1JlY3QpKTsKKyAgICAgICAgYXV0byBw
MiA9IENHUG9pbnRNYWtlKENHUmVjdEdldE1pblgodmlld1JlY3QpLCBDR1JlY3RHZXRNaW5ZKHZp
ZXdSZWN0KSk7CisgICAgICAgIGF1dG8gcDMgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNYXhYKHZp
ZXdSZWN0KSwgQ0dSZWN0R2V0TWluWSh2aWV3UmVjdCkpOworICAgICAgICBhdXRvIHA0ID0gQ0dQ
b2ludE1ha2UoQ0dSZWN0R2V0TWF4WCh2aWV3UmVjdCksIENHUmVjdEdldE1heFkodmlld1JlY3Qp
KTsKKworICAgICAgICByZXR1cm4gYWRvcHROUyhbW1dlYkV2ZW50UmVnaW9uIGFsbG9jXSBpbml0
V2l0aFBvaW50czpwMSA6cDIgOnAzIDpwNF0pOworICAgIH0pLmF1dG9yZWxlYXNlKCk7CiB9CisK
ICNlbmRpZiAvLyBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogCiAvLyBGb3IgYmFja3dhcmRzIGNvbXBh
dGliaWxpdHkgd2l0aCB0aGUgV2ViQmFja0ZvcndhcmRMaXN0IEFQSSwgd2UgaG9ub3IgYm90aApA
QCAtNDU2OSwyMCArNDU2MSwxNCBAQCAtICh2b2lkKXJlc2V0VHJhY2tlZFJlcGFpbnRzCiAgICAg
ICAgIHZpZXctPnJlc2V0VHJhY2tlZFJlcGFpbnRzKCk7CiB9CiAKLS0gKE5TQXJyYXkqKXRyYWNr
ZWRSZXBhaW50UmVjdHMKKy0gKE5TQXJyYXkgKil0cmFja2VkUmVwYWludFJlY3RzCiB7Ci0gICAg
YXV0byogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwotICAgIGF1dG8qIHZpZXcg
PSBjb3JlRnJhbWUtPnZpZXcoKTsKKyAgICBhdXRvIHZpZXcgPSBzZWxmLl9tYWluQ29yZUZyYW1l
LT52aWV3KCk7CiAgICAgaWYgKCF2aWV3IHx8ICF2aWV3LT5pc1RyYWNraW5nUmVwYWludHMoKSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJl
Y3Q+JiByZXBhaW50UmVjdHMgPSB2aWV3LT50cmFja2VkUmVwYWludFJlY3RzKCk7Ci0gICAgTlNN
dXRhYmxlQXJyYXkqIHJlY3RzQXJyYXkgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0
aENhcGFjaXR5OnJlcGFpbnRSZWN0cy5zaXplKCldOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHJlcGFpbnRSZWN0cy5zaXplKCk7ICsraSkKLSAgICAgICAgW3JlY3RzQXJyYXkgYWRk
T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6c25hcHBlZEludFJlY3QoV2ViQ29yZTo6TGF5
b3V0UmVjdChyZXBhaW50UmVjdHNbaV0pKV1dOwotCi0gICAgcmV0dXJuIFtyZWN0c0FycmF5IGF1
dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheSh2aWV3LT50cmFja2VkUmVwYWlu
dFJlY3RzKCksIFtdIChhdXRvJiByZWN0KSB7CisgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1
ZVdpdGhSZWN0OnNuYXBwZWRJbnRSZWN0KFdlYkNvcmU6OkxheW91dFJlY3QgeyByZWN0IH0pXTsK
KyAgICB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCkBA
IC0xMDE5OSwxMyArMTAxODUsOSBAQCAtIChOU0FycmF5PERPTUVsZW1lbnQgKj4gKilfZWRpdGFi
bGVFbGVtZW50c0luUmVjdDooQ0dSZWN0KXJlY3QKICAgICBhdXRvKiBwYWdlID0gY29yZShzZWxm
KTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBAW107Ci0gICAgYXV0byBjb3JlRWxl
bWVudHMgPSBwYWdlLT5lZGl0YWJsZUVsZW1lbnRzSW5SZWN0KHJlY3QpOwotICAgIGlmIChjb3Jl
RWxlbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gQFtdOwotICAgIGF1dG8gcmVzdWx0
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvcmVF
bGVtZW50cy5zaXplKCldKTsKLSAgICBmb3IgKGF1dG8mIGNvcmVFbGVtZW50IDogY29yZUVsZW1l
bnRzKQotICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpraXQoY29yZUVsZW1lbnQucHRyKCkpXTsK
LSAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJy
YXkocGFnZS0+ZWRpdGFibGVFbGVtZW50c0luUmVjdChyZWN0KSwgW10gKGF1dG8mIGNvcmVFbGVt
ZW50KSB7CisgICAgICAgIHJldHVybiBraXQoY29yZUVsZW1lbnQucHRyKCkpOworICAgIH0pLmF1
dG9yZWxlYXNlKCk7CiB9CiAKIC0gKHZvaWQpcmV2ZWFsQ3VycmVudFNlbGVjdGlvbgpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGFiYzZhMTYzMDhk
YTQ2M2RhOThmMGU1NzUwZjEyNWJkZjZiYjIwYzEuLjJmNzJjZDQ3OTJiZDgzZjI4MDFjNjgyMDQy
NTM1NTcxYzFiNWEzNTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAyMC0wNC0xOSAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBVc2UgY3JlYXRlTlNBcnJheSBpbiBtYW55
IG1vcmUgcGxhY2VzIHRoYXQgYnVpbGQgTlNBcnJheSBvYmplY3RzIGZyb20gQysrIGNvbGxlY3Rp
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA3
MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKGFjdGl2YXRlVGVz
dGluZ0ZvbnRzKTogVXNlIGNvbnN0ZXhwciBhbmQgTlNTdHJpbmcgaW5zdGVhZCBvZiBhIG51bGwt
cG9pbnRlciB0ZXJtaW5hdGVkCisgICAgICAgIGFycmF5IGZvciB0aGUgZm9udCBuYW1lcy4gVXNl
IGNyZWF0ZU5TQXJyYXkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvVUlEZWxlZ2F0
ZS5tbToKKyAgICAgICAgKC1bVUlEZWxlZ2F0ZSB3ZWJWaWV3OnJ1bk9wZW5QYW5lbEZvckZpbGVC
dXR0b25XaXRoUmVzdWx0TGlzdGVuZXI6YWxsb3dNdWx0aXBsZUZpbGVzOl0pOgorICAgICAgICBV
c2UgY3JlYXRlTlNBcnJheS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwLnB5OgorICAgICAgICAoZmluZF9wYXJhbWV0ZXJfbmFtZV9pbmRleCk6IEZpeGVk
IGEgc3BlbGxpbmcgZXJyb3IuCisgICAgICAgIChfY2hlY2tfcGFyYW1ldGVyX25hbWVfYWdhaW5z
dF90ZXh0KTogQWRkZWQgYSBzcGVjaWFsIGNhc2UgdG8gbm90IGNvbXBsYWluIHRoYXQKKyAgICAg
ICAgcGFyYW1ldGVycyBuYW1lZCAiXSIgaGF2ZSByZWR1bmRhbnQgbmFtZXMuIE5vdCBvYnZpb3Vz
IHRvIG1lIGhvdyB0byB3cml0ZSBhIHRlc3QgY2FzZSBmb3IKKyAgICAgICAgdGhpcyBhbmQgaG93
IHRvIGZpeCB0aGlzIGluIGEgbW9yZSBzZW5zaWJsZSB3YXksIGJ1dCBpbW1lZGlhdGVseSBoZWxw
ZnVsIHRvIG5vdCBnZXQgdGhpcworICAgICAgICBzcHVyaW91cyB3YXJuaW5nLgorCisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9BY3RpdmF0ZUZvbnRzQ29j
b2EubW06CisgICAgICAgIChXVFI6OmFjdGl2YXRlU3lzdGVtQ29yZVdlYkZvbnRzKTogVXNlIGNv
bnN0ZXhwciBhcnJheSBpbnN0ZWFkIG9mIE5TQXJyYXkgZm9yIGZvbnQgbmFtZXMuCisgICAgICAg
IChXVFI6OmFjdGl2YXRlRm9udHMpOiBVc2UgY29uc3RleHByIGFuZCBOU1N0cmluZyBpbnN0ZWFk
IG9mIGEgbnVsbC1wb2ludGVyIHRlcm1pbmF0ZWQKKyAgICAgICAgYXJyYXkgZm9yIHRoZSBmb250
IG5hbWVzLiBVc2UgY3JlYXRlTlNBcnJheS4KKwogMjAyMC0wNC0xOSAgQnJhZHkgRWlkc29uICA8
YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFdLU2NyaXB0TWVzc2FnZUhhbmRsZXIg
QVBJIHRoYXQgYXN5bmNocm9ub3VzbHkgcmVzcG9uZHMgd2l0aCBhIHByb21pc2UuCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0gYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5kZXggOTkwNmE5ZjdjZjMzODk0
ZDNlMTVlMzlkMmFlMTA2NjdhZTlkYjE3Ni4uOTMxNGFiMTU2Zjc0ZDA2YjNiZGY2ZTU1NWViM2Nk
ZTNkZTQ4MDE3NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bQpAQCAtOTksNiArOTksNyBAQAogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8
d3RmL1RocmVhZGluZy5oPgogI2ltcG9ydCA8d3RmL1VuaXF1ZUFycmF5Lmg+CisjaW1wb3J0IDx3
dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01MDksMzEgKzUxMCwyOCBA
QCBzdGF0aWMgdm9pZCBhY3RpdmF0ZVN5c3RlbUNvcmVXZWJGb250cygpCiAKIHN0YXRpYyB2b2lk
IGFjdGl2YXRlVGVzdGluZ0ZvbnRzKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZm9udEZp
bGVOYW1lc1tdID0gewotICAgICAgICAiQUhFTV9fX18uVFRGIiwKLSAgICAgICAgIldlYktpdFdl
aWdodFdhdGNoZXIxMDAudHRmIiwKLSAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXIyMDAudHRm
IiwKLSAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXIzMDAudHRmIiwKLSAgICAgICAgIldlYktp
dFdlaWdodFdhdGNoZXI0MDAudHRmIiwKLSAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXI1MDAu
dHRmIiwKLSAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXI2MDAudHRmIiwKLSAgICAgICAgIldl
YktpdFdlaWdodFdhdGNoZXI3MDAudHRmIiwKLSAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXI4
MDAudHRmIiwKLSAgICAgICAgIldlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmIiwKLSAgICAgICAg
IkZvbnRXaXRoRmVhdHVyZXMudHRmIiwKLSAgICAgICAgIkZvbnRXaXRoRmVhdHVyZXMub3RmIiwK
LSAgICAgICAgMAorICAgIGNvbnN0ZXhwciBOU1N0cmluZyAqZm9udEZpbGVOYW1lc1tdID0gewor
ICAgICAgICBAIkFIRU1fX19fLlRURiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjEw
MC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXIyMDAudHRmIiwKKyAgICAgICAg
QCJXZWJLaXRXZWlnaHRXYXRjaGVyMzAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2VpZ2h0V2F0
Y2hlcjQwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI1MDAudHRmIiwKKyAg
ICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyNjAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjcwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI4MDAudHRm
IiwKKyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiIsCisgICAgICAgIEAiRm9u
dFdpdGhGZWF0dXJlcy50dGYiLAorICAgICAgICBAIkZvbnRXaXRoRmVhdHVyZXMub3RmIiwKICAg
ICB9OwogCi0gICAgTlNNdXRhYmxlQXJyYXkgKmZvbnRVUkxzID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5XTsKICAgICBOU1VSTCAqcmVzb3VyY2VzRGlyZWN0b3J5ID0gW05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJEdW1wUmVuZGVyVHJlZS5yZXNvdXJjZXMiIHJlbGF0aXZlVG9VUkw6W1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBleGVjdXRhYmxlVVJMXV07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgZm9u
dEZpbGVOYW1lc1tpXTsgKytpKSB7Ci0gICAgICAgIE5TVVJMICpmb250VVJMID0gW3Jlc291cmNl
c0RpcmVjdG9yeSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6W05TU3RyaW5nIHN0cmluZ1dp
dGhVVEY4U3RyaW5nOmZvbnRGaWxlTmFtZXNbaV1dIGlzRGlyZWN0b3J5Ok5PXTsKLSAgICAgICAg
W2ZvbnRVUkxzIGFkZE9iamVjdDpbZm9udFVSTCBhYnNvbHV0ZVVSTF1dOwotICAgIH0KKyAgICBh
dXRvIGZvbnRVUkxzID0gY3JlYXRlTlNBcnJheShmb250RmlsZU5hbWVzLCBbJl0gKE5TU3RyaW5n
ICpuYW1lKSB7CisgICAgICAgIHJldHVybiBbcmVzb3VyY2VzRGlyZWN0b3J5IFVSTEJ5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDpuYW1lIGlzRGlyZWN0b3J5Ok5PXS5hYnNvbHV0ZVVSTDsKKyAgICB9
KTsKIAotICAgIENGQXJyYXlSZWYgZXJyb3JzID0gMDsKLSAgICBpZiAoIUNURm9udE1hbmFnZXJS
ZWdpc3RlckZvbnRzRm9yVVJMcygoQ0ZBcnJheVJlZilmb250VVJMcywga0NURm9udE1hbmFnZXJT
Y29wZVByb2Nlc3MsICZlcnJvcnMpKSB7CisgICAgQ0ZBcnJheVJlZiBlcnJvcnMgPSBudWxscHRy
OworICAgIGlmICghQ1RGb250TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JVUkxzKChDRkFycmF5UmVm
KWZvbnRVUkxzLmdldCgpLCBrQ1RGb250TWFuYWdlclNjb3BlUHJvY2VzcywgJmVycm9ycykpIHsK
ICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gYWN0aXZhdGUgZm9udHM6ICVAIiwgZXJyb3JzKTsK
ICAgICAgICAgQ0ZSZWxlYXNlKGVycm9ycyk7CiAgICAgICAgIGV4aXQoMSk7CkBAIC01NDUsNyAr
NTQzLDkgQEAgc3RhdGljIHZvaWQgYWRqdXN0Rm9udHMoKQogICAgIGFjdGl2YXRlU3lzdGVtQ29y
ZVdlYkZvbnRzKCk7CiAgICAgYWN0aXZhdGVUZXN0aW5nRm9udHMoKTsKIH0KKwogI2Vsc2UKKwog
c3RhdGljIHZvaWQgYWN0aXZhdGVGb250SU9TKGNvbnN0IHVpbnQ4X3QqIGZvbnREYXRhLCB1bnNp
Z25lZCBsb25nIGxlbmd0aCwgc3RkOjpzdHJpbmcgc2VjdGlvbk5hbWUpCiB7CiAgICAgQ0dEYXRh
UHJvdmlkZXJSZWYgZGF0YSA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwg
Zm9udERhdGEsIGxlbmd0aCwgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvVUlEZWxlZ2F0ZS5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVn
YXRlLm1tCmluZGV4IGQ1ZjRhNDJlMTY2MzM2ZDg5Y2JkZGMwOWU1NWI0NTIzNWU1MTcyY2EuLmY2
OTk1NTUxZTBjZGExMGQ0YjJiNzlmOTJiYTZkYTM0YmUzNTdiODggMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9VSURlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9VSURlbGVnYXRlLm1tCkBAIC00NSw2ICs0NSw3IEBACiAjaW1wb3J0IDxXZWJLaXQv
V2ViVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAKICNp
ZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIER1bXBSZW5kZXJUcmVlRHJhZ2dpbmdJbmZvICpkcmFn
Z2luZ0luZm8gPSBuaWw7CkBAIC0zNzYsMjAgKzM3NywxOCBAQCAtICh2b2lkKXdlYlZpZXc6KFdl
YlZpZXcgKilzZW5kZXIgcnVuT3BlblBhbmVsRm9yRmlsZUJ1dHRvbldpdGhSZXN1bHRMaXN0ZW5l
cjooaQogICAgIH0KIAogICAgIE5TVVJMICpiYXNlVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6
W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmdUZXN0UnVubmVyLT50ZXN0VVJMKCkuY19z
dHIoKV1dOwotICAgIGF1dG8gZmlsZVBhdGhzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5Om9wZW5QYW5lbEZpbGVzLnNpemUoKV0pOwotICAgIGZvciAo
YXV0byYgZmlsZVBhdGggOiBvcGVuUGFuZWxGaWxlcykgewotICAgICAgICBOU1VSTCAqZmlsZVVS
TCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5n
OmZpbGVQYXRoLmNfc3RyKCldIHJlbGF0aXZlVG9VUkw6YmFzZVVSTF07Ci0gICAgICAgIFtmaWxl
UGF0aHMgYWRkT2JqZWN0OmZpbGVVUkwucGF0aF07Ci0gICAgfQorICAgIGF1dG8gZmlsZVBhdGhz
ID0gY3JlYXRlTlNBcnJheShvcGVuUGFuZWxGaWxlcywgWyZdIChjb25zdCBzdGQ6OnN0cmluZyYg
ZmlsZVBhdGgpIHsKKyAgICAgICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TU3Ry
aW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmZpbGVQYXRoLmNfc3RyKCldIHJlbGF0aXZlVG9VUkw6
YmFzZVVSTF0ucGF0aDsKKyAgICB9KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAg
TlNVUkwgKmZpcnN0VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNTdHJpbmcgc3RyaW5n
V2l0aFVURjhTdHJpbmc6b3BlblBhbmVsRmlsZXNbMF0uY19zdHIoKV0gcmVsYXRpdmVUb1VSTDpi
YXNlVVJMXTsKICAgICBOU1N0cmluZyAqZGlzcGxheVN0cmluZyA9IGZpcnN0VVJMLmxhc3RQYXRo
Q29tcG9uZW50OwotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNoYXI+JiBpY29uRGF0YSA9IGdUZXN0
UnVubmVyLT5vcGVuUGFuZWxGaWxlc01lZGlhSWNvbigpOworICAgIGF1dG8mIGljb25EYXRhID0g
Z1Rlc3RSdW5uZXItPm9wZW5QYW5lbEZpbGVzTWVkaWFJY29uKCk7CiAgICAgQ0dJbWFnZVJlZiBp
bWFnZVJlZiA9IG51bGxwdHI7CiAgICAgaWYgKCFpY29uRGF0YS5lbXB0eSgpKSB7Ci0gICAgICAg
IFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGFSZWYgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxs
cHRyLCAodW5zaWduZWQgY2hhciAqKWljb25EYXRhLmRhdGEoKSwgaWNvbkRhdGEuc2l6ZSgpKSk7
Ci0gICAgICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gaW1hZ2VQcm92aWRlclJlZiA9
IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGRhdGFSZWYuZ2V0KCkpKTsK
KyAgICAgICAgYXV0byBkYXRhUmVmID0gYWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGljb25EYXRhLmRhdGEoKSksIGljb25EYXRhLnNp
emUoKSkpOworICAgICAgICBhdXRvIGltYWdlUHJvdmlkZXJSZWYgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShkYXRhUmVmLmdldCgpKSk7CiAgICAgICAgIGltYWdlUmVm
ID0gQ0dJbWFnZUNyZWF0ZVdpdGhKUEVHRGF0YVByb3ZpZGVyKGltYWdlUHJvdmlkZXJSZWYuZ2V0
KCksIG51bGxwdHIsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwogICAgIH0KICNl
bmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9j
cHAucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQppbmRl
eCBlYmE4MmUxYTE4YjlkZDM2YzhjZDA0OWU5YjEyNzA3YTdiOTM1OGNjLi4wMjc3ZDdhNDY3Zjc4
YTFkNDk0ODI0M2UyYWU0OWQyMGE0OTM3ODQxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXJzL2NwcC5weQpAQCAtNDk4LDcgKzQ5OCw3IEBAIGRlZiBjcmVhdGVfc2tl
bGV0b25fcGFyYW1ldGVycyhhbGxfcGFyYW1ldGVycyk6CiAKIAogZGVmIGZpbmRfcGFyYW1ldGVy
X25hbWVfaW5kZXgoc2tlbGV0b25fcGFyYW1ldGVyKToKLSAgICAiIiJEZXRlcm1pbmVzIHdoZXJl
IHRoZSBwYXJhbWV0ZXJlIG5hbWUgc3RhcnRzIGdpdmVuIHRoZSBza2VsZXRvbiBwYXJhbWV0ZXIu
IiIiCisgICAgIiIiRGV0ZXJtaW5lcyB3aGVyZSB0aGUgcGFyYW1ldGVyIG5hbWUgc3RhcnRzIGdp
dmVuIHRoZSBza2VsZXRvbiBwYXJhbWV0ZXIuIiIiCiAgICAgIyBUaGUgZmlyc3Qgc3BhY2UgZnJv
bSB0aGUgcmlnaHQgaW4gdGhlIHNpbXBsaWZpZWQgcGFyYW1ldGVyIGlzIHdoZXJlIHRoZSBwYXJh
bWV0ZXIKICAgICAjIG5hbWUgc3RhcnRzIHVubGVzcyB0aGUgZmlyc3Qgc3BhY2UgaXMgYmVmb3Jl
IGFueSBjb250ZW50IGluIHRoZSBzaW1wbGlmaWVkIHBhcmFtZXRlci4KICAgICBiZWZvcmVfbmFt
ZV9pbmRleCA9IHNrZWxldG9uX3BhcmFtZXRlci5yc3RyaXAoKS5yZmluZCgnICcpCkBAIC0xNzc2
LDYgKzE3NzYsOCBAQCBkZWYgX2NoZWNrX3BhcmFtZXRlcl9uYW1lX2FnYWluc3RfdGV4dChwYXJh
bWV0ZXIsIHRleHQsIGVycm9yKToKICAgICAjIGNhc2UgaW5zZW5zaXRpdmUgd2hpbGUgc3RpbGwg
cmV0YWluaW5nIHdvcmQgYnJlYWtzLiAoVGhpcyBlbnN1cmVzIHRoYXQKICAgICAjICdlbGF0ZScg
ZG9lc24ndCBsb29rIGxpa2UgaXQgaXMgZHVwbGljYXRpbmcgb2YgJ05hdGVMYXRlJy4pCiAgICAg
Y2Fub25pY2FsX3BhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLmxvd2VyX3dpdGhfdW5kZXJzY29y
ZXNfbmFtZSgpCisgICAgaWYgY2Fub25pY2FsX3BhcmFtZXRlcl9uYW1lID09ICJdIjoKKyAgICAg
ICAgcmV0dXJuIFRydWUgICMgV29yayBhcm91bmQgYSBidWcgcGFyc2luZyBzb21lIE9iamVjdGl2
ZS1DIGNvZGUuCiAKICAgICAjIEFwcGVuZHMgIm9iamVjdCIgdG8gYWxsIHRleHQgdG8gY2F0Y2gg
dmFyaWFibGVzIHRoYXQgZGlkIHRoZSBzYW1lIChidXQgb25seQogICAgICMgZG8gdGhpcyB3aGVu
IHRoZSBwYXJhbWV0ZXIgbmFtZSBpcyBtb3JlIHRoYW4gYSBzaW5nbGUgY2hhcmFjdGVyIHRvIGF2
b2lkCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2Nv
Y29hL0FjdGl2YXRlRm9udHNDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvY29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tCmluZGV4IGRiM2MyODkzMWQwNWY1
NDIwNmIxYmY1ZDUyOTgxNDg0OTk4YWEyNDAuLmI1YjNjMjI4NmQ0OTNiMjgzOTliYTQxNzc3ZDVk
YTZlMGZkZDY5NTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvY29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvQWN0aXZhdGVGb250c0NvY29hLm1tCkBAIC0zMSw2
ICszMSw3IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tTdHJpbmdDRi5oPgogI2ltcG9ydCA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYv
Y29jb2EvVmVjdG9yQ29jb2EuaD4KIAogI2lmIFVTRShBUFBLSVQpCiAjaW1wb3J0IDxBcHBLaXQv
QXBwS2l0Lmg+CkBAIC01NCwxMCArNTUsMTAgQEAgc3RhdGljIE5TVVJMICpyZXNvdXJjZXNEaXJl
Y3RvcnlVUkwoKQogCiAvLyBBY3RpdmF0aW5nIHN5c3RlbSBjb3BpZXMgb2YgdGhlc2UgZm9udHMg
b3ZlcnJpZGVzIGFueSBvdGhlcnMgdGhhdCBjb3VsZCBiZSBwcmVmZXJyZWQsIHN1Y2ggYXMgb25l
cwogLy8gaW4gL0xpYnJhcnkvRm9udHMvTWljcm9zb2Z0LCBhbmQgd2hpY2ggZG9uJ3QgYWx3YXlz
IGhhdmUgdGhlIHNhbWUgbWV0cmljcy4KLS8vIEZJWE1FOiBTd2l0Y2ggdG8gYSBzb2x1dGlvbiBm
cm9tIDxyZGFyOi8vcHJvYmxlbS8xOTU1MzU1MD4gb25jZSBpdCdzIGF2YWlsYWJsZS4KKy8vIEZJ
WE1FOiBOb3cgdGhhdCA8cmRhcjovL3Byb2JsZW0vMTk1NTM1NTA+IGhhcyBiZWVuIHJlc29sdmVk
IHdlIHNob3VsZCBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uLgogc3RhdGljIHZvaWQgYWN0aXZhdGVT
eXN0ZW1Db3JlV2ViRm9udHMoKQogewotICAgIE5TQXJyYXkgKmNvcmVXZWJGb250TmFtZXMgPSBA
WworICAgIGNvbnN0ZXhwciBOU1N0cmluZyAqY29yZVdlYkZvbnROYW1lc1tdID0gewogICAgICAg
ICBAIkFuZGFsZSBNb25vIiwKICAgICAgICAgQCJBcmlhbCIsCiAgICAgICAgIEAiQXJpYWwgQmxh
Y2siLApAQCAtNjksNyArNzAsNyBAQCBzdGF0aWMgdm9pZCBhY3RpdmF0ZVN5c3RlbUNvcmVXZWJG
b250cygpCiAgICAgICAgIEAiVHJlYnVjaGV0IE1TIiwKICAgICAgICAgQCJWZXJkYW5hIiwKICAg
ICAgICAgQCJXZWJkaW5ncyIKLSAgICBdOworICAgIH07CiAKICAgICBOU0FycmF5ICpmb250Rmls
ZXMgPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNvbnRlbnRzT2ZEaXJlY3RvcnlB
dFVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL0xpYnJhcnkvRm9udHMiIGlzRGlyZWN0b3J5
OllFU10KICAgICAgICAgaW5jbHVkaW5nUHJvcGVydGllc0ZvcktleXM6QFtOU1VSTEZpbGVSZXNv
dXJjZVR5cGVLZXksIE5TVVJMTmFtZUtleV0gb3B0aW9uczowIGVycm9yOjBdOwpAQCAtODUsNyAr
ODYsNyBAQCBzdGF0aWMgdm9pZCBhY3RpdmF0ZVN5c3RlbUNvcmVXZWJGb250cygpCiAKICAgICAg
ICAgLy8gQWN0aXZhdGUgYWxsIGZvbnQgdmFyaWF0aW9ucywgc3VjaCBhcyBBcmlhbCBCb2xkIEl0
YWxpYy50dGYuIFRoaXMgYWxnb3JpdGhtIGlzIG5vdCAxMDAlIHByZWNpc2UsIGFzIGl0CiAgICAg
ICAgIC8vIGFsc28gYWN0aXZhdGVzIGUuZy4gQXJpYWwgVW5pY29kZSwgd2hpY2ggaXMgbm90IGEg
dmFyaWF0aW9uIG9mIEFyaWFsLgotICAgICAgICBmb3IgKE5TU3RyaW5nICpjb3JlV2ViRm9udE5h
bWUgaW4gY29yZVdlYkZvbnROYW1lcykgeworICAgICAgICBmb3IgKGF1dG8mIGNvcmVXZWJGb250
TmFtZSA6IGNvcmVXZWJGb250TmFtZXMpIHsKICAgICAgICAgICAgIGlmIChbZmlsZU5hbWUgaGFz
UHJlZml4OmNvcmVXZWJGb250TmFtZV0pIHsKICAgICAgICAgICAgICAgICBDRkVycm9yUmVmIGVy
cm9yID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBpZiAoIUNURm9udE1hbmFnZXJSZWdpc3Rl
ckZvbnRzRm9yVVJMKChfX2JyaWRnZSBDRlVSTFJlZilmb250VVJMLCBrQ1RGb250TWFuYWdlclNj
b3BlUHJvY2VzcywgJmVycm9yKSkgewpAQCAtMTAyLDMwICsxMDMsMjcgQEAgc3RhdGljIHZvaWQg
YWN0aXZhdGVTeXN0ZW1Db3JlV2ViRm9udHMoKQogCiB2b2lkIGFjdGl2YXRlRm9udHMoKQogewot
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmb250RmlsZU5hbWVzW10gPSB7Ci0gICAgICAgICJBSEVN
X19fXy5UVEYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGYiLAotICAgICAg
ICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0
Y2hlcjMwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjQwMC50dGYiLAotICAg
ICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjUwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0
V2F0Y2hlcjYwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjcwMC50dGYiLAot
ICAgICAgICAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYiLAotICAgICAgICAiV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjkwMC50dGYiLAotICAgICAgICAiRm9udFdpdGhGZWF0dXJlcy5vdGYiLAotICAg
ICAgICAiRm9udFdpdGhGZWF0dXJlcy50dGYiLAotICAgICAgICAwCisgICAgY29uc3RleHByIE5T
U3RyaW5nICpmb250RmlsZU5hbWVzW10gPSB7CisgICAgICAgIEAiQUhFTV9fX18uVFRGIiwKKyAg
ICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0ZiIsCisgICAgICAgIEAiV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjIwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXIzMDAudHRm
IiwKKyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyNDAwLnR0ZiIsCisgICAgICAgIEAiV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjUwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdhdGNoZXI2
MDAudHRmIiwKKyAgICAgICAgQCJXZWJLaXRXZWlnaHRXYXRjaGVyNzAwLnR0ZiIsCisgICAgICAg
IEAiV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYiLAorICAgICAgICBAIldlYktpdFdlaWdodFdh
dGNoZXI5MDAudHRmIiwKKyAgICAgICAgQCJGb250V2l0aEZlYXR1cmVzLm90ZiIsCisgICAgICAg
IEAiRm9udFdpdGhGZWF0dXJlcy50dGYiLAogICAgIH07CiAKLSAgICBOU011dGFibGVBcnJheSAq
Zm9udFVSTHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGZvbnRGaWxlTmFtZXNbaV07ICsraSkgewotICAgICAgICBOU1VSTCAqZm9udFVSTCA9IFty
ZXNvdXJjZXNEaXJlY3RvcnlVUkwoKSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6W05TU3Ry
aW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmZvbnRGaWxlTmFtZXNbaV1dIGlzRGlyZWN0b3J5Ok5P
XTsKLSAgICAgICAgW2ZvbnRVUkxzIGFkZE9iamVjdDpbZm9udFVSTCBhYnNvbHV0ZVVSTF1dOwot
ICAgIH0KKyAgICBhdXRvIGZvbnRVUkxzID0gY3JlYXRlTlNBcnJheShmb250RmlsZU5hbWVzLCBb
XSAoTlNTdHJpbmcgKm5hbWUpIHsKKyAgICAgICAgcmV0dXJuIFtyZXNvdXJjZXNEaXJlY3RvcnlV
UkwoKSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6bmFtZSBpc0RpcmVjdG9yeTpOT10uYWJz
b2x1dGVVUkw7CisgICAgfSk7CiAKICAgICBDRkFycmF5UmVmIGVycm9ycyA9IG51bGxwdHI7Ci0g
ICAgaWYgKCFDVEZvbnRNYW5hZ2VyUmVnaXN0ZXJGb250c0ZvclVSTHMoKF9fYnJpZGdlIENGQXJy
YXlSZWYpZm9udFVSTHMsIGtDVEZvbnRNYW5hZ2VyU2NvcGVQcm9jZXNzLCAmZXJyb3JzKSkgewor
ICAgIGlmICghQ1RGb250TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JVUkxzKChfX2JyaWRnZSBDRkFy
cmF5UmVmKWZvbnRVUkxzLmdldCgpLCBrQ1RGb250TWFuYWdlclNjb3BlUHJvY2VzcywgJmVycm9y
cykpIHsKICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gYWN0aXZhdGUgZm9udHM6ICVAIiwgZXJy
b3JzKTsKICAgICAgICAgQ0ZSZWxlYXNlKGVycm9ycyk7CiAgICAgICAgIGV4aXQoMSk7CkBAIC0x
MzMsNyArMTMxLDcgQEAgdm9pZCBhY3RpdmF0ZUZvbnRzKCkKIAogI2lmIFVTRShBUFBLSVQpCiAg
ICAgYWN0aXZhdGVTeXN0ZW1Db3JlV2ViRm9udHMoKTsKLSNlbmRpZiAvLyBVU0UoQVBQS0lUKQor
I2VuZGlmCiB9CiAKIHZvaWQgaW5zdGFsbEZha2VIZWx2ZXRpY2EoV0tTdHJpbmdSZWYgY29uZmln
dXJhdGlvbikK
</data>
<flag name="review"
          id="412374"
          type_id="1"
          status="+"
          setter="achristensen"
    />
    <flag name="commit-queue"
          id="412575"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>