<?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>219491</bug_id>
          
          <creation_ts>2020-12-03 08:07:36 -0800</creation_ts>
          <short_desc>Prelininary refactoring of TextMarker and TextMarkerRange.</short_desc>
          <delta_ts>2020-12-07 08:23:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andres Gonzalez">andresg_22</reporter>
          <assigned_to name="Andres Gonzalez">andresg_22</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>samuel_white</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1711676</commentid>
    <comment_count>0</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-12-03 08:07:36 -0800</bug_when>
    <thetext>Prelininary refactoring of TextMarker and TextMarkerRange.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711683</commentid>
    <comment_count>1</comment_count>
      <attachid>415303</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-12-03 08:35:44 -0800</bug_when>
    <thetext>Created attachment 415303
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711718</commentid>
    <comment_count>2</comment_count>
      <attachid>415303</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2020-12-03 10:37:49 -0800</bug_when>
    <thetext>Comment on attachment 415303
Patch

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

&gt; Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:613
&gt; +static id AXTextMarkerRangeStart(id textMarkerRange)

should these methods return the actual types rather than id (since we&apos;re refactoring anyway)

&gt; Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:627
&gt; +static bool getBytesFromAXTextMarker(CFTypeRef textMarker, void* bytes, size_t length)

I think we can use a 
TextMarkerData*

instead of a void* and then avoid the size parameter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712061</commentid>
    <comment_count>3</comment_count>
      <attachid>415430</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-12-04 10:52:42 -0800</bug_when>
    <thetext>Created attachment 415430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712065</commentid>
    <comment_count>4</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-12-04 10:56:21 -0800</bug_when>
    <thetext>(In reply to chris fleizach from comment #2)
&gt; Comment on attachment 415303 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=415303&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:613
&gt; &gt; +static id AXTextMarkerRangeStart(id textMarkerRange)
&gt; 
&gt; should these methods return the actual types rather than id (since we&apos;re
&gt; refactoring anyway)

Done. More work than I anticipated, but done and tested now.
&gt; 
&gt; &gt; Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:627
&gt; &gt; +static bool getBytesFromAXTextMarker(CFTypeRef textMarker, void* bytes, size_t length)
&gt; 
&gt; I think we can use a 
&gt; TextMarkerData*
&gt; 
&gt; instead of a void* and then avoid the size parameter

Done, good catch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712259</commentid>
    <comment_count>5</comment_count>
      <attachid>415491</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-12-05 10:59:50 -0800</bug_when>
    <thetext>Created attachment 415491
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712272</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-12-05 13:25:57 -0800</bug_when>
    <thetext>Committed r270476: &lt;https://trac.webkit.org/changeset/270476&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 415491.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712273</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-05 13:26:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/72012226&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712291</commentid>
    <comment_count>8</comment_count>
      <attachid>415491</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-12-05 20:06:31 -0800</bug_when>
    <thetext>Comment on attachment 415491
Patch

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

&gt; Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:637
&gt; +    memcpy(&amp;data, AXTextMarkerGetBytePtr(textMarker), sizeof(data));

How do we know that the binary layout of the result of AXTextMarkerGetBytePtr matches TextMarkerData?

&gt; Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:704
&gt; +AXTextMarkerRef textMarkerForCharacterOffset(AXObjectCache* cache, const CharacterOffset&amp; characterOffset)

Should functions like this return RetainPtr&lt;AXTextMarkerRef&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712459</commentid>
    <comment_count>9</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2020-12-07 08:23:11 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #8)
&gt; Comment on attachment 415491 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=415491&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:637
&gt; &gt; +    memcpy(&amp;data, AXTextMarkerGetBytePtr(textMarker), sizeof(data));
&gt; 
&gt; How do we know that the binary layout of the result of
&gt; AXTextMarkerGetBytePtr matches TextMarkerData?

Please, see https://bugs.webkit.org/show_bug.cgi?id=219601. Added a size check. We should eventually make the definition of TextMarkerData common to both the system APIs and Webkit, but in the meantime this check has served us well for a few years already.
&gt; 
&gt; &gt; Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:704
&gt; &gt; +AXTextMarkerRef textMarkerForCharacterOffset(AXObjectCache* cache, const CharacterOffset&amp; characterOffset)
&gt; 
&gt; Should functions like this return RetainPtr&lt;AXTextMarkerRef&gt;?

The idea is to add a class AXTextMarker that wraps and retains the system AXTextMarkerRef. This class will expose the conversions to the WebCore types, VisiblePosition, CharacterOffset, etc. For now, I don&apos;t see any downside in keeping the return values to be the raw AXTextMarkerRefs as before.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415303</attachid>
            <date>2020-12-03 08:35:44 -0800</date>
            <delta_ts>2020-12-04 10:52:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219491-20201203113543.patch</filename>
            <type>text/plain</type>
            <size>32730</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODVkZDYxYmIyMDlhZjM4
ZWY3ZWI3ZGE2ZDlkOTBjZjM1NjhlZjVhZS4uMWI1ZmVmMWI4MDA3OGU2ZGM2ZWVlZGFjNWMxYWNh
YzYzODVjNGYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDIwLTEyLTAzICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVsaW5pbmFy
eSByZWZhY3RvcmluZyBvZiBUZXh0TWFya2VyIGFuZCBUZXh0TWFya2VyUmFuZ2UuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk0OTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLgorCisgICAgICAgIFRleHRNYXJrZXIgYW5kIFRleHRNYXJrZXJSYW5nZSBzaG91
bGQgYmVjb21lIGNsYXNzZXMgb24gdGhlaXIgb3duIHJpZ2h0LgorICAgICAgICBBcyBhIGZpcnN0
IHN0ZXAgaW4gdGhhdCBkaXJlY3Rpb24sIHRoaXMgcGF0Y2ggbW92ZXMgYWxsIHRoZSBzdGF0aWMK
KyAgICAgICAgZnVuY3Rpb25zIGluIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
IHRvIG1ha2UgY29udmVyc2lvbnMKKyAgICAgICAgYmV0d2VlbiBUZXh0TWFya2VycyBhbmQgVGV4
dE1hcmtlclJhbmdlcyB0byBhbmQgZnJvbSBvdGhlciB0eXBlcyB0bworICAgICAgICBBWE9iamVj
dENhY2hlTWFjLm1tLgorICAgICAgICBJbiBhZGRpdGlvbiwgcmVtb3ZlZCBhbGwgT2JqZWN0aXZl
QyB3cmFwcGVycyB0byB0aGVzZSBmdW5jdGlvbnMgYW5kCisgICAgICAgIGluc3RlYWQgY2FsbCB0
aGUgZnVuY3Rpb25zIGRpcmVjdGx5IHdoZXJlIG5lZWRlZC4gVGhpcyBpcyByZWxldmFudCBub3cK
KyAgICAgICAgd2l0aCB0aGUgYXJyaXZhbCBvZiBpc29sYXRlZCB0cmVlIG1vZGUgYmVjYXVzZSBp
dCBzYXZlcyBhIG5vbi10cml2aWFsCisgICAgICAgIGNhbGwgdG8gdGhlIHdyYXBwZXIncyBheEJh
Y2tpbmdPYmplY3QgZ2V0dGVyLiBGdXJ0aGVybW9yZSwgYWxsIHRoZQorICAgICAgICBjb252ZXJz
aW9uIGZ1bmN0aW9ucyBhcmUgZG9pbmcgbm93IHRoZSBhcHByb3ByaWF0ZSB0aHJlYWQgY2hlY2ss
IHNpbmNlCisgICAgICAgIHRoZXkgYWxsIG5lZWQgdG8gcnVuIG9uIHRoZSBtYWluIHRocmVhZC4K
KyAgICAgICAgRml4ZWQgdGhlIGhhbmRsaW5nIG9mIHRoZSBOU0FjY2Vzc2liaWxpdHlNaXNzcGVs
bGluZ1RleHRNYXJrZXJSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUKKyAgICAgICAgcmVxdWVz
dCB0aGF0IHdhcyBjYWxsaW5nIGFjY2Vzc2liaWxpdHlNaXNzcGVsbGluZ1NlYXJjaENyaXRlcmlh
Rm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZQorICAgICAgICBvZmYgb2YgdGhlIG1haW4gdGhyZWFk
LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYVGV4dE1hcmtlclJhbmdlU3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhUZXh0TWFya2VyUmFuZ2VFbmQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Qnl0ZXNGcm9t
QVhUZXh0TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzVGV4dE1hcmtlcklnbm9yZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6YWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6dGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjp2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OnZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6cmFu
Z2VGb3JUZXh0TWFya2VyUmFuZ2UpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgIChhY2Nlc3Np
YmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
YWNjZXNzaWJpbGl0eU1pc3NwZWxsaW5nU2VhcmNoQ3JpdGVyaWFGb3JQYXJhbWV0ZXJpemVkQXR0
cmlidXRlKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZG9BWEF0
dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6c3BlbGxDaGVjazpdKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZh
bHVlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfaW5kZXhG
b3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBkZWJ1Z0Rlc2NyaXB0aW9uRm9yVGV4dE1hcmtlcjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgc2hvd05vZGVGb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzaG93Tm9kZVRyZWVGb3JUZXh0TWFya2Vy
Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFyYW1ldGVyOl0pOgorICAgICAgICAoQVhUZXh0TWFya2Vy
UmFuZ2VTdGFydCk6IE1vdmVkIHRvIEFYT2JqZWN0Q2FjaGVNYWMubW0uCisgICAgICAgIChBWFRl
eHRNYXJrZXJSYW5nZUVuZCk6IE1vdmVkIHRvIEFYT2JqZWN0Q2FjaGVNYWMubW0uCisgICAgICAg
IChnZXRCeXRlc0Zyb21BWFRleHRNYXJrZXIpOiBNb3ZlZCB0byBBWE9iamVjdENhY2hlTWFjLm1t
LgorICAgICAgICAoaXNUZXh0TWFya2VySWdub3JlZCk6IE1vdmVkIHRvIEFYT2JqZWN0Q2FjaGVN
YWMubW0uCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlPYmplY3RGb3JUZXh0TWFya2VyOl0pOiBEZWxldGVkLgorICAgICAgICAoYWNjZXNzaWJp
bGl0eU9iamVjdEZvclRleHRNYXJrZXIpOiBNb3ZlZCB0byBBWE9iamVjdENhY2hlTWFjLm1tLgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciByYW5nZUZvclRleHRNYXJr
ZXJSYW5nZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJr
ZXIpOiBNb3ZlZCB0byBBWE9iamVjdENhY2hlTWFjLm1tLgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOl0pOiBEZWxl
dGVkLgorICAgICAgICAodmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcik6IE1vdmVkIHRvIEFY
T2JqZWN0Q2FjaGVNYWMubW0uCisgICAgICAgICh2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRN
YXJrZXJSYW5nZSk6IE1vdmVkIHRvIEFYT2JqZWN0Q2FjaGVNYWMubW0uCisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6
XSk6IERlbGV0ZWQuCisKIDIwMjAtMTItMDMgIEFuZHJlcyBHb256YWxleiAgPGFuZHJlc2dfMjJA
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBmb3IgY3Jhc2ggaGFuZGxpbmcgTlNBY2Nlc3NpYmls
aXR5SW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyQXR0cmlidXRlIGZvciB0ZXh0IGZpZWxkcyBpbiBp
c29sYXRlZCB0cmVlIG1vZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbQppbmRleCA2YWRlMDMzM2U0ZTJiN2M5OTdhZTZjNDBm
NDJlNjIzMDhjM2UyODgyLi4xYzU4N2M5YTU2NmQ4ZTIwZGY4MzA5ZjExYTJhYWJlODRkNjMyYWY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENh
Y2hlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0
Q2FjaGVNYWMubW0KQEAgLTU5MCw3ICs1OTAsOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBsYXRm
b3JtUGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUoKQogewogfQogCi0vLyBUZXh0TWFya2VyIHV0
aWxpdHkgZnVuY3Rpb25zLgorLy8gVGV4dE1hcmtlciBhbmQgVGV4dE1hcmtlclJhbmdlIGZ1bmNz
dGlvbnMuCisvLyBGSVhNRTogVGV4dE1hcmtlciBhbmQgVGV4dE1hcmtlclJhbmdlIHNob3VsZCBi
ZWNvbWUgY2xhc3NlcyB3cmFwcGluZyB0aGUgc3lzdGVtIG9iamVjdHMuCiAKIHN0YXRpYyBpZCBB
WFRleHRNYXJrZXJSYW5nZShpZCBzdGFydE1hcmtlciwgaWQgZW5kTWFya2VyKQogewpAQCAtNjA5
LDEwICs2MTAsNjggQEAgc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21NYXJrZXJzKGlkIHRl
eHRNYXJrZXIxLCBpZCB0ZXh0TWFya2VyMikKICAgICByZXR1cm4gQVhUZXh0TWFya2VyUmFuZ2Uo
dGV4dE1hcmtlcjEsIHRleHRNYXJrZXIyKTsKIH0KIAorc3RhdGljIGlkIEFYVGV4dE1hcmtlclJh
bmdlU3RhcnQoaWQgdGV4dE1hcmtlclJhbmdlKQoreworICAgIEFTU0VSVCh0ZXh0TWFya2VyUmFu
Z2UpOworICAgIEFTU0VSVChDRkdldFR5cGVJRCgoX19icmlkZ2UgQ0ZUeXBlUmVmKXRleHRNYXJr
ZXJSYW5nZSkgPT0gQVhUZXh0TWFya2VyUmFuZ2VHZXRUeXBlSUQoKSk7CisgICAgcmV0dXJuIENG
QnJpZGdpbmdSZWxlYXNlKEFYVGV4dE1hcmtlclJhbmdlQ29weVN0YXJ0TWFya2VyKChBWFRleHRN
YXJrZXJSYW5nZVJlZil0ZXh0TWFya2VyUmFuZ2UpKTsKK30KKworc3RhdGljIGlkIEFYVGV4dE1h
cmtlclJhbmdlRW5kKGlkIHRleHRNYXJrZXJSYW5nZSkKK3sKKyAgICBBU1NFUlQodGV4dE1hcmtl
clJhbmdlKTsKKyAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQoKF9fYnJpZGdlIENGVHlwZVJlZil0ZXh0
TWFya2VyUmFuZ2UpID09IEFYVGV4dE1hcmtlclJhbmdlR2V0VHlwZUlEKCkpOworICAgIHJldHVy
biBDRkJyaWRnaW5nUmVsZWFzZShBWFRleHRNYXJrZXJSYW5nZUNvcHlFbmRNYXJrZXIoKEFYVGV4
dE1hcmtlclJhbmdlUmVmKXRleHRNYXJrZXJSYW5nZSkpOworfQorCitzdGF0aWMgYm9vbCBnZXRC
eXRlc0Zyb21BWFRleHRNYXJrZXIoQ0ZUeXBlUmVmIHRleHRNYXJrZXIsIHZvaWQqIGJ5dGVzLCBz
aXplX3QgbGVuZ3RoKQoreworICAgIGlmICghdGV4dE1hcmtlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgQVhUZXh0TWFya2VyUmVmIHJlZiA9IChBWFRleHRNYXJrZXJSZWYpdGV4dE1h
cmtlcjsKKyAgICBBU1NFUlQoQ0ZHZXRUeXBlSUQocmVmKSA9PSBBWFRleHRNYXJrZXJHZXRUeXBl
SUQoKSk7CisgICAgaWYgKENGR2V0VHlwZUlEKHJlZikgIT0gQVhUZXh0TWFya2VyR2V0VHlwZUlE
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENGSW5kZXggZXhwZWN0ZWRMZW5ndGgg
PSBsZW5ndGg7CisgICAgaWYgKEFYVGV4dE1hcmtlckdldExlbmd0aChyZWYpICE9IGV4cGVjdGVk
TGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtZW1jcHkoYnl0ZXMsIEFYVGV4
dE1hcmtlckdldEJ5dGVQdHIocmVmKSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
c3RhdGljIGJvb2wgaXNUZXh0TWFya2VySWdub3JlZChpZCB0ZXh0TWFya2VyKQoreworICAgIGlm
ICghdGV4dE1hcmtlcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBUZXh0TWFya2VyRGF0
YSB0ZXh0TWFya2VyRGF0YTsKKyAgICBpZiAoIWdldEJ5dGVzRnJvbUFYVGV4dE1hcmtlcigoX19i
cmlkZ2UgQ0ZUeXBlUmVmKXRleHRNYXJrZXIsICZ0ZXh0TWFya2VyRGF0YSwgc2l6ZW9mKHRleHRN
YXJrZXJEYXRhKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0ZXh0TWFy
a2VyRGF0YS5pZ25vcmVkOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5
T2JqZWN0Rm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hlKiBjYWNoZSwgaWQgdGV4dE1hcmtlcikK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghY2FjaGUgfHwgaXNUZXh0
TWFya2VySWdub3JlZCh0ZXh0TWFya2VyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKKyAgICBpZiAoIWdldEJ5dGVzRnJvbUFY
VGV4dE1hcmtlcigoX19icmlkZ2UgQ0ZUeXBlUmVmKXRleHRNYXJrZXIsICZ0ZXh0TWFya2VyRGF0
YSwgc2l6ZW9mKHRleHRNYXJrZXJEYXRhKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgcmV0dXJuIGNhY2hlLT5hY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlckRhdGEodGV4
dE1hcmtlckRhdGEpOworfQorCisvLyBUZXh0TWFya2VyIDwtPiBWaXNpYmxlUG9zaXRpb24gY29u
dmVyc2lvbi4KKwogaWQgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihBWE9iamVjdENhY2hl
KiBjYWNoZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKGNhY2hlKTsKICAgICBpZiAoIWNhY2hlKQog
ICAgICAgICByZXR1cm4gbmlsOwogCkBAIC02MjMsNiArNjgyLDIxIEBAIGlkIHRleHRNYXJrZXJG
b3JWaXNpYmxlUG9zaXRpb24oQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzCiAgICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKEFYVGV4dE1hcmtlckNyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoY29uc3QgVUludDgqKSZ0ZXh0TWFya2VyRGF0YS52YWx1
ZSgpLCBzaXplb2YodGV4dE1hcmtlckRhdGEudmFsdWUoKSkpKTsKIH0KIAorVmlzaWJsZVBvc2l0
aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaGUsIENG
VHlwZVJlZiB0ZXh0TWFya2VyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
aWYgKCFjYWNoZSB8fCAhdGV4dE1hcmtlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFRl
eHRNYXJrZXJEYXRhIHRleHRNYXJrZXJEYXRhOworICAgIGlmICghZ2V0Qnl0ZXNGcm9tQVhUZXh0
TWFya2VyKHRleHRNYXJrZXIsICZ0ZXh0TWFya2VyRGF0YSwgc2l6ZW9mKHRleHRNYXJrZXJEYXRh
KSkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gY2FjaGUtPnZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXJEYXRhKHRleHRNYXJrZXJEYXRhKTsKK30KKworLy8gVGV4dE1hcmtl
clJhbmdlIDwtPiBWaXNpYmxlUG9zaXRpb25SYW5nZSBjb252ZXJzaW9uLgorCiBpZCB0ZXh0TWFy
a2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBzdGFydFBvc2l0aW9uLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVu
ZFBvc2l0aW9uKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC02MzQsNiArNzA4
LDMzIEBAIGlkIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlLCBjb25zdCBWaXNpYmxlUG9zaXRpCiAgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5n
ZUZyb21NYXJrZXJzKHN0YXJ0VGV4dE1hcmtlciwgZW5kVGV4dE1hcmtlcik7CiB9CiAKK1Zpc2li
bGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlKEFY
T2JqZWN0Q2FjaGUqIGNhY2hlLCBpZCB0ZXh0TWFya2VyUmFuZ2UpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKworICAgIHJldHVybiB7CisgICAgICAgIHZpc2libGVQb3NpdGlvbkZv
clRleHRNYXJrZXIoY2FjaGUsIChfX2JyaWRnZSBDRlR5cGVSZWYpQVhUZXh0TWFya2VyUmFuZ2VT
dGFydCh0ZXh0TWFya2VyUmFuZ2UpKSwKKyAgICAgICAgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlcihjYWNoZSwgKF9fYnJpZGdlIENGVHlwZVJlZilBWFRleHRNYXJrZXJSYW5nZUVuZCh0ZXh0
TWFya2VyUmFuZ2UpKQorICAgIH07Cit9CisKKy8vIFRleHRNYXJrZXIgPC0+IENoYXJhY3Rlck9m
ZnNldCBjb252ZXJzaW9uLgorCitDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4
dE1hcmtlcihBWE9iamVjdENhY2hlKiBjYWNoZSwgQ0ZUeXBlUmVmIHRleHRNYXJrZXIpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIWNhY2hlIHx8ICF0ZXh0TWFya2Vy
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRh
dGE7CisgICAgaWYgKCFnZXRCeXRlc0Zyb21BWFRleHRNYXJrZXIodGV4dE1hcmtlciwgJnRleHRN
YXJrZXJEYXRhLCBzaXplb2YodGV4dE1hcmtlckRhdGEpKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIHJldHVybiBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlckRhdGEodGV4
dE1hcmtlckRhdGEpOworfQorCisvLyBUZXh0TWFya2VyUmFuZ2UgPC0+IFNpbXBsZVJhbmdlIGNv
bnZlcnNpb24uCisKIGlkIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2UoQVhPYmplY3RDYWNo
ZSogY2FjaGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIGJvb2wgaXNTdGFy
dCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtNjU5LDYgKzc2MCwyMiBAQCBp
ZCB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYgcgogICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tTWFy
a2VycyhzdGFydFRleHRNYXJrZXIsIGVuZFRleHRNYXJrZXIpOwogfQogCitPcHRpb25hbDxTaW1w
bGVSYW5nZT4gcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGlk
IHRleHRNYXJrZXJSYW5nZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlm
ICghY2FjaGUgfHwgIXRleHRNYXJrZXJSYW5nZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIGlkIHN0YXJ0VGV4dE1hcmtlciA9IEFYVGV4dE1hcmtlclJhbmdlU3RhcnQodGV4
dE1hcmtlclJhbmdlKTsKKyAgICBpZCBlbmRUZXh0TWFya2VyID0gQVhUZXh0TWFya2VyUmFuZ2VF
bmQodGV4dE1hcmtlclJhbmdlKTsKKyAgICBpZiAoIXN0YXJ0VGV4dE1hcmtlciB8fCAhZW5kVGV4
dE1hcmtlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIENoYXJhY3Rlck9m
ZnNldCBzdGFydENoYXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIo
Y2FjaGUsIHN0YXJ0VGV4dE1hcmtlcik7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZENoYXJhY3Rl
ck9mZnNldCA9IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIoY2FjaGUsIGVuZFRleHRNYXJr
ZXIpOworICAgIHJldHVybiBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRz
KHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0LCBlbmRDaGFyYWN0ZXJPZmZzZXQpOworfQorCiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgKaW5kZXggODk2NjI2YWQ4OWRiNDliNDFkYzlmZmEw
OTdmMTRlOGYzODY3YzNkZC4uZDc4NjAwZDY3NDMzNWVmMDQzN2E3ZTVkYTZhZDc1MGI5NDk5NGE1
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5oCkBAIC00OSw5ICs0OSwy
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3Q7
CitzdHJ1Y3QgQ2hhcmFjdGVyT2Zmc2V0OworCisvLyBUZXh0TWFya2VyIGFuZCBUZXh0TWFya2Vy
UmFuZ2UgcHVibGljIGZ1bmNzdGlvbnMuCisvLyBGSVhNRTogVGV4dE1hcmtlciBhbmQgVGV4dE1h
cmtlclJhbmdlIHNob3VsZCBiZWNvbWUgY2xhc3NlcyBvbiB0aGVpciBvd24gcmlnaHQsIHdyYXBw
aW5nIHRoZSBzeXN0ZW0gb2JqZWN0cy4KKworQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJp
bGl0eU9iamVjdEZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSosIGlkIHRleHRNYXJrZXIpOwor
CisvLyBUZXh0TWFya2VyIDwtPiBWaXNpYmxlUG9zaXRpb24gY29udmVyc2lvbi4KIGlkIHRleHRN
YXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oQVhPYmplY3RDYWNoZSosIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpOworVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoQVhP
YmplY3RDYWNoZSosIENGVHlwZVJlZiB0ZXh0TWFya2VyKTsKKworLy8gVGV4dE1hcmtlclJhbmdl
IDwtPiBWaXNpYmxlUG9zaXRpb25SYW5nZSBjb252ZXJzaW9uLgogaWQgdGV4dE1hcmtlclJhbmdl
RnJvbVZpc2libGVQb3NpdGlvbnMoQVhPYmplY3RDYWNoZSosIGNvbnN0IFZpc2libGVQb3NpdGlv
biYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJs
ZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2UoQVhPYmplY3RDYWNoZSosIGlkIHRleHRN
YXJrZXJSYW5nZSk7CisKKy8vIFRleHRNYXJrZXIgPC0+IENoYXJhY3Rlck9mZnNldCBjb252ZXJz
aW9uLgorQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIoQVhPYmpl
Y3RDYWNoZSosIENGVHlwZVJlZiB0ZXh0TWFya2VyKTsKKworLy8gVGV4dE1hcmtlclJhbmdlIDwt
PiBTaW1wbGVSYW5nZSBjb252ZXJzaW9uLgogaWQgc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5n
ZShBWE9iamVjdENhY2hlKiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgYm9vbCBpc1N0
YXJ0KTsKIGlkIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZShBWE9iamVjdENhY2hlKiwgY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jik7CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JU
ZXh0TWFya2VyUmFuZ2UoQVhPYmplY3RDYWNoZSosIGlkIHRleHRNYXJrZXJSYW5nZSk7CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggZDhkNWNmMjFmNWQw
ODNmNzVmZGEzZGFkOWE5NWQ1MTAyMjIyYjg2Mi4uYjMwNzZlYzA3OTUwYmFiZjQxNTE1OTZiMTA0
YTBlY2NiYzJlMWQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0K
QEAgLTU4MCwyMCArNTgwLDYgQEAgc3RhdGljIGlubGluZSBCT09MIEFYT2JqZWN0SXNUZXh0TWFy
a2VyUmFuZ2UoaWQgb2JqZWN0KQogICAgIHJldHVybiBvYmplY3QgJiYgQ0ZHZXRUeXBlSUQoKF9f
YnJpZGdlIENGVHlwZVJlZilvYmplY3QpID09IEFYVGV4dE1hcmtlclJhbmdlR2V0VHlwZUlEKCk7
CiB9CiAKLXN0YXRpYyBpZCBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KGlkIHJhbmdlKQotewotICAg
IEFTU0VSVChyYW5nZSAhPSBuaWwpOwotICAgIEFTU0VSVChDRkdldFR5cGVJRCgoX19icmlkZ2Ug
Q0ZUeXBlUmVmKXJhbmdlKSA9PSBBWFRleHRNYXJrZXJSYW5nZUdldFR5cGVJRCgpKTsKLSAgICBy
ZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2UoQVhUZXh0TWFya2VyUmFuZ2VDb3B5U3RhcnRNYXJrZXIo
KEFYVGV4dE1hcmtlclJhbmdlUmVmKXJhbmdlKSk7Ci19Ci0KLXN0YXRpYyBpZCBBWFRleHRNYXJr
ZXJSYW5nZUVuZChpZCByYW5nZSkKLXsKLSAgICBBU1NFUlQocmFuZ2UgIT0gbmlsKTsKLSAgICBB
U1NFUlQoQ0ZHZXRUeXBlSUQoKF9fYnJpZGdlIENGVHlwZVJlZilyYW5nZSkgPT0gQVhUZXh0TWFy
a2VyUmFuZ2VHZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKEFYVGV4
dE1hcmtlclJhbmdlQ29weUVuZE1hcmtlcigoQVhUZXh0TWFya2VyUmFuZ2VSZWYpcmFuZ2UpKTsK
LX0KLQogI3ByYWdtYSBtYXJrIE90aGVyIGhlbHBlcnMKIAogLSAoSW50UmVjdClzY3JlZW5Ub0Nv
bnRlbnRzOihjb25zdCBJbnRSZWN0JilyZWN0CkBAIC02ODQsNyArNjcwLDcgQEAgc3RhdGljIEFj
Y2Vzc2liaWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWEgYWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0
ZXJpYUZvclBhcmFtZXQKICAgICByZXR1cm4gY3JpdGVyaWE7CiB9CiAKLXN0YXRpYyBBY2Nlc3Np
YmlsaXR5VGV4dE9wZXJhdGlvbiBhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGUoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKndyYXBwZXIsIGNv
bnN0IE5TRGljdGlvbmFyeSAqcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSkKK3N0YXRpYyBBY2Nlc3Np
YmlsaXR5VGV4dE9wZXJhdGlvbiBhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGUoQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSwgY29uc3QgTlNEaWN0
aW9uYXJ5ICpwYXJhbWV0ZXJpemVkQXR0cmlidXRlKQogewogICAgIEFjY2Vzc2liaWxpdHlUZXh0
T3BlcmF0aW9uIG9wZXJhdGlvbjsKIApAQCAtNjkzLDggKzY3OSw4IEBAIHN0YXRpYyBBY2Nlc3Np
YmlsaXR5VGV4dE9wZXJhdGlvbiBhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRl
cml6ZWRBdHRyCiAgICAgTlNTdHJpbmcgKnJlcGxhY2VtZW50U3RyaW5nID0gW3BhcmFtZXRlcml6
ZWRBdHRyaWJ1dGUgb2JqZWN0Rm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb25SZXBs
YWNlbWVudFN0cmluZ107CiAKICAgICBpZiAoW21hcmtlclJhbmdlcyBpc0tpbmRPZkNsYXNzOltO
U0FycmF5IGNsYXNzXV0pIHsKLSAgICAgICAgb3BlcmF0aW9uLnRleHRSYW5nZXMgPSBtYWtlVmVj
dG9yKG1hcmtlclJhbmdlcywgW3dyYXBwZXJdIChpZCBtYXJrZXJSYW5nZSkgewotICAgICAgICAg
ICAgcmV0dXJuIFt3cmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOm1hcmtlclJhbmdlXTsK
KyAgICAgICAgb3BlcmF0aW9uLnRleHRSYW5nZXMgPSBtYWtlVmVjdG9yKG1hcmtlclJhbmdlcywg
WyZheE9iamVjdENhY2hlXSAoaWQgbWFya2VyUmFuZ2UpIHsKKyAgICAgICAgICAgIHJldHVybiBy
YW5nZUZvclRleHRNYXJrZXJSYW5nZShheE9iamVjdENhY2hlLCBtYXJrZXJSYW5nZSk7CiAgICAg
ICAgIH0pOwogICAgIH0KIApAQCAtNzE1LDExICs3MDEsMTIgQEAgc3RhdGljIEFjY2Vzc2liaWxp
dHlUZXh0T3BlcmF0aW9uIGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uRm9yUGFyYW1ldGVyaXpl
ZEF0dHIKICAgICByZXR1cm4gb3BlcmF0aW9uOwogfQogCi1zdGF0aWMgc3RkOjpwYWlyPE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbj4gYWNjZXNzaWJp
bGl0eU1pc3NwZWxsaW5nU2VhcmNoQ3JpdGVyaWFGb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKFdl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICpvYmplY3QsIGNvbnN0IE5TRGljdGlvbmFyeSAq
cGFyYW1zKQorc3RhdGljIHN0ZDo6cGFpcjxPcHRpb25hbDxTaW1wbGVSYW5nZT4sIEFjY2Vzc2li
aWxpdHlTZWFyY2hEaXJlY3Rpb24+IGFjY2Vzc2liaWxpdHlNaXNzcGVsbGluZ1NlYXJjaENyaXRl
cmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hl
LCBjb25zdCBOU0RpY3Rpb25hcnkgKnBhcmFtcykKIHsKLSAgICBzdGQ6OnBhaXI8T3B0aW9uYWw8
U2ltcGxlUmFuZ2U+LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uPiBjcml0ZXJpYTsKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgY3JpdGVyaWEuZmlyc3QgPSBbb2JqZWN0
IHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOltwYXJhbXMgb2JqZWN0Rm9yS2V5OkAiQVhTdGFydFRl
eHRNYXJrZXJSYW5nZSJdXTsKKyAgICBzdGQ6OnBhaXI8T3B0aW9uYWw8U2ltcGxlUmFuZ2U+LCBB
Y2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uPiBjcml0ZXJpYTsKKyAgICBjcml0ZXJpYS5maXJz
dCA9IHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlKGF4T2JqZWN0Q2FjaGUsIFtwYXJhbXMgb2JqZWN0
Rm9yS2V5OkAiQVhTdGFydFRleHRNYXJrZXJSYW5nZSJdKTsKIAogICAgIE5TTnVtYmVyICpmb3J3
YXJkID0gW3BhcmFtcyBvYmplY3RGb3JLZXk6TlNBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVj
dGlvbl07CiAgICAgaWYgKFtmb3J3YXJkIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0p
CkBAIC03MzIsNTIgKzcxOSw2IEBAIHN0YXRpYyBzdGQ6OnBhaXI8T3B0aW9uYWw8U2ltcGxlUmFu
Z2U+LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uPiBhY2Nlc3NpYmlsCiAKICNwcmFnbWEg
bWFyayBUZXh0IE1hcmtlciBoZWxwZXJzCiAKLXN0YXRpYyBCT09MIGdldEJ5dGVzRnJvbUFYVGV4
dE1hcmtlcihDRlR5cGVSZWYgdGV4dE1hcmtlciwgdm9pZCogYnl0ZXMsIHNpemVfdCBsZW5ndGgp
Ci17Ci0gICAgaWYgKCF0ZXh0TWFya2VyKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICBBWFRl
eHRNYXJrZXJSZWYgcmVmID0gKEFYVGV4dE1hcmtlclJlZil0ZXh0TWFya2VyOwotICAgIEFTU0VS
VChDRkdldFR5cGVJRChyZWYpID09IEFYVGV4dE1hcmtlckdldFR5cGVJRCgpKTsKLSAgICBpZiAo
Q0ZHZXRUeXBlSUQocmVmKSAhPSBBWFRleHRNYXJrZXJHZXRUeXBlSUQoKSkKLSAgICAgICAgcmV0
dXJuIE5POwotCi0gICAgQ0ZJbmRleCBleHBlY3RlZExlbmd0aCA9IGxlbmd0aDsKLSAgICBpZiAo
QVhUZXh0TWFya2VyR2V0TGVuZ3RoKHJlZikgIT0gZXhwZWN0ZWRMZW5ndGgpCi0gICAgICAgIHJl
dHVybiBOTzsKLQotICAgIG1lbWNweShieXRlcywgQVhUZXh0TWFya2VyR2V0Qnl0ZVB0cihyZWYp
LCBsZW5ndGgpOwotICAgIHJldHVybiBZRVM7Ci19Ci0KLXN0YXRpYyBib29sIGlzVGV4dE1hcmtl
cklnbm9yZWQoaWQgdGV4dE1hcmtlcikKLXsKLSAgICBpZiAoIXRleHRNYXJrZXIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsK
LSAgICBpZiAoIWdldEJ5dGVzRnJvbUFYVGV4dE1hcmtlcigoX19icmlkZ2UgQ0ZUeXBlUmVmKXRl
eHRNYXJrZXIsICZ0ZXh0TWFya2VyRGF0YSwgc2l6ZW9mKHRleHRNYXJrZXJEYXRhKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gdGV4dE1hcmtlckRhdGEuaWdub3Jl
ZDsKLX0KLQotLSAoQWNjZXNzaWJpbGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9iamVjdEZvclRl
eHRNYXJrZXI6KGlkKXRleHRNYXJrZXIKLXsKLSAgICByZXR1cm4gYWNjZXNzaWJpbGl0eU9iamVj
dEZvclRleHRNYXJrZXIoc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4
dE1hcmtlcik7Ci19Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5
T2JqZWN0Rm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hlKiBjYWNoZSwgaWQgdGV4dE1hcmtlcikK
LXsKLSAgICBpZiAoIXRleHRNYXJrZXIgfHwgIWNhY2hlIHx8IGlzVGV4dE1hcmtlcklnbm9yZWQo
dGV4dE1hcmtlcikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIFRleHRNYXJr
ZXJEYXRhIHRleHRNYXJrZXJEYXRhOwotICAgIGlmICghZ2V0Qnl0ZXNGcm9tQVhUZXh0TWFya2Vy
KChfX2JyaWRnZSBDRlR5cGVSZWYpdGV4dE1hcmtlciwgJnRleHRNYXJrZXJEYXRhLCBzaXplb2Yo
dGV4dE1hcmtlckRhdGEpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGNh
Y2hlLT5hY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlckRhdGEodGV4dE1hcmtlckRhdGEp
OwotfQotCiBzdGF0aWMgaWQgbmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoQVhPYmpl
Y3RDYWNoZSogY2FjaGUsIENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQogewogICAg
IGlmICghY2FjaGUpCkBAIC04MzAsNDQgKzc3MSw2IEBAIHN0YXRpYyBpZCB0ZXh0TWFya2VyRm9y
Q2hhcmFjdGVyT2Zmc2V0KEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBDaGFyYWN0ZXJPZmZz
CiAgICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKEFYVGV4dE1hcmtlckNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCAoY29uc3QgVUludDgqKSZ0ZXh0TWFya2VyRGF0YSwgc2l6ZW9mKHRleHRN
YXJrZXJEYXRhKSkpOwogfQogCi0tIChPcHRpb25hbDxTaW1wbGVSYW5nZT4pcmFuZ2VGb3JUZXh0
TWFya2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJSYW5nZQotewotICAgIGlmICghdGV4dE1hcmtlclJh
bmdlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIAotICAgIGlkIHN0YXJ0VGV4
dE1hcmtlciA9IEFYVGV4dE1hcmtlclJhbmdlU3RhcnQodGV4dE1hcmtlclJhbmdlKTsKLSAgICBp
ZCBlbmRUZXh0TWFya2VyID0gQVhUZXh0TWFya2VyUmFuZ2VFbmQodGV4dE1hcmtlclJhbmdlKTsK
LSAgICAKLSAgICBpZiAoIXN0YXJ0VGV4dE1hcmtlciB8fCAhZW5kVGV4dE1hcmtlcikKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAKLSAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7Ci0gICAgaWYgKCFjYWNoZSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAKLSAgICBDaGFyYWN0ZXJPZmZzZXQg
c3RhcnRDaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2Vy
OnN0YXJ0VGV4dE1hcmtlcl07Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZENoYXJhY3Rlck9mZnNl
dCA9IFtzZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6ZW5kVGV4dE1hcmtlcl07Ci0g
ICAgcmV0dXJuIGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnRD
aGFyYWN0ZXJPZmZzZXQsIGVuZENoYXJhY3Rlck9mZnNldCk7Ci19Ci0KLXN0YXRpYyBDaGFyYWN0
ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hlKiBjYWNo
ZSwgQ0ZUeXBlUmVmIHRleHRNYXJrZXIpCi17Ci0gICAgaWYgKCFjYWNoZSB8fCAhdGV4dE1hcmtl
cikKLSAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwotICAgIAotICAgIFRleHRNYXJr
ZXJEYXRhIHRleHRNYXJrZXJEYXRhOwotICAgIGlmICghZ2V0Qnl0ZXNGcm9tQVhUZXh0TWFya2Vy
KHRleHRNYXJrZXIsICZ0ZXh0TWFya2VyRGF0YSwgc2l6ZW9mKHRleHRNYXJrZXJEYXRhKSkpCi0g
ICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKLSAgICAKLSAgICByZXR1cm4gY2FjaGUt
PmNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXJEYXRhKHRleHRNYXJrZXJEYXRhKTsKLX0KLQot
LSAoQ2hhcmFjdGVyT2Zmc2V0KWNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6KGlkKXRleHRN
YXJrZXIKLXsKLSAgICBhdXRvICpiYWNraW5nT2JqZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3Q7
Ci0gICAgcmV0dXJuIGJhY2tpbmdPYmplY3QgPyBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2Vy
KGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgKF9fYnJpZGdlIENGVHlwZVJlZil0ZXh0
TWFya2VyKSA6IG5pbDsKLX0KLQogLSAoaWQpdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjoo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJilwb3NpdGlvbgogewogICAgIGF1dG8gKmJhY2tpbmdPYmpl
Y3QgPSBzZWxmLmF4QmFja2luZ09iamVjdDsKQEAgLTg4NywzMCArNzkwLDYgQEAgc3RhdGljIENo
YXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2FjaGUq
IGNhY2hlLCBDRlR5cGUKICAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2UoQVhUZXh0TWFya2Vy
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBVSW50OCopJnRleHRNYXJrZXJEYXRh
LnZhbHVlKCksIHNpemVvZih0ZXh0TWFya2VyRGF0YS52YWx1ZSgpKSkpOwogfQogCi1zdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNo
ZSogY2FjaGUsIENGVHlwZVJlZiB0ZXh0TWFya2VyKQotewotICAgIEFTU0VSVChjYWNoZSk7Ci0g
ICAgaWYgKCF0ZXh0TWFya2VyKQotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7Ci0g
ICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7Ci0gICAgaWYgKCFnZXRCeXRlc0Zyb21B
WFRleHRNYXJrZXIodGV4dE1hcmtlciwgJnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4dE1hcmtl
ckRhdGEpKSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwotICAgIHJldHVybiBj
YWNoZS0+dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEodGV4dE1hcmtlckRhdGEpOwot
fQotCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JU
ZXh0TWFya2VyUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGlkIHRleHRNYXJrZXJSYW5nZSkK
LXsKLSAgICByZXR1cm4gewotICAgICAgICB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGNh
Y2hlLCAoX19icmlkZ2UgQ0ZUeXBlUmVmKUFYVGV4dE1hcmtlclJhbmdlU3RhcnQodGV4dE1hcmtl
clJhbmdlKSksCi0gICAgICAgIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIChf
X2JyaWRnZSBDRlR5cGVSZWYpQVhUZXh0TWFya2VyUmFuZ2VFbmQodGV4dE1hcmtlclJhbmdlKSkK
LSAgICB9OwotfQotCi0tIChWaXNpYmxlUG9zaXRpb24pdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1h
cmtlcjooaWQpdGV4dE1hcmtlcgotewotICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0
TWFya2VyKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIChfX2JyaWRnZSBD
RlR5cGVSZWYpdGV4dE1hcmtlcik7Ci19Ci0KIC8vIFdoZW4gbW9kaWZ5aW5nIGF0dHJpYnV0ZWQg
c3RyaW5ncywgdGhlIHJhbmdlIGNhbiBjb21lIGZyb20gYSBzb3VyY2Ugd2hpY2ggbWF5IHByb3Zp
ZGUgZmF1bHR5IGluZm9ybWF0aW9uIChlLmcuIHRoZSBzcGVsbCBjaGVja2VyKS4KIC8vIFRvIHBy
b3RlY3QgYWdhaW5zdCBzdWNoIGNhc2VzIHRoZSByYW5nZSBzaG91bGQgYmUgdmFsaWRhdGVkIGJl
Zm9yZSBhZGRpbmcgb3IgcmVtb3ZpbmcgYXR0cmlidXRlcy4KIHN0YXRpYyBCT09MIEFYQXR0cmli
dXRlZFN0cmluZ1JhbmdlSXNWYWxpZChOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcsIE5T
UmFuZ2UgcmFuZ2UpCkBAIC0xMjA4LDcgKzEwODcsNyBAQCBzdGF0aWMgTlNTdHJpbmcqIG5zU3Ry
aW5nRm9yUmVwbGFjZWROb2RlKE5vZGUqIHJlcGxhY2VkTm9kZSkKICAgICAgICAgaWYgKCFiYWNr
aW5nT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICBhdXRvIHJhbmdl
ID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdl
XTsKKyAgICAgICAgYXV0byByYW5nZSA9IHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlKGJhY2tpbmdP
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlclJhbmdlKTsKICAgICAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIGF1dG8gYXR0clN0cmluZyA9
IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XSk7CkBAIC0y
NDAyLDcgKzIyODEsOCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAg
ICAgICAgLy8gVE9ETzogR2V0IGFjdHVhbCB2aXNpYmxlIHJhbmdlLiA8cmRhcjovL3Byb2JsZW0v
NDcxMjEwMT4KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRlXSkKICAgICAgICAgICAg
IHJldHVybiBiYWNraW5nT2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSA/IG5pbCA6IFtOU1ZhbHVl
IHZhbHVlV2l0aFJhbmdlOiBOU01ha2VSYW5nZSgwLCBiYWNraW5nT2JqZWN0LT50ZXh0TGVuZ3Ro
KCkpXTsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nl
c3NpYmlsaXR5SW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyQXR0cmlidXRlXSkgeworCisgICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5zZXJ0
aW9uUG9pbnRMaW5lTnVtYmVyQXR0cmlidXRlXSkgewogICAgICAgICAgICAgLy8gaWYgc2VsZWN0
aW9uRW5kID4gMCwgdGhlbiB0aGVyZSBpcyBzZWxlY3RlZCB0ZXh0IGFuZCB0aGlzIHF1ZXN0aW9u
IHNob3VsZCBub3QgYmUgYW5zd2VyZWQKICAgICAgICAgICAgIGlmIChiYWNraW5nT2JqZWN0LT5p
c1Bhc3N3b3JkRmllbGQoKSB8fCBiYWNraW5nT2JqZWN0LT5zZWxlY3Rpb25FbmQoKSA+IDApCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTM2MjksNyArMzUwOSw3IEBAIEFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsK
ICAgICAKICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBzZWxmLmF4QmFja2luZ09iamVj
dC0+YXhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJP
ZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOm1hcmtlcl07CisgICAg
ICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBjaGFyYWN0ZXJPZmZzZXRGb3JU
ZXh0TWFya2VyKGNhY2hlLCBtYXJrZXIpOwogICAgICAgICBhdXRvIHJhbmdlID0gY2FjaGUtPnJh
bmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rl
ck9mZnNldCk7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gTlNOb3RG
b3VuZDsKQEAgLTM2NzAsOCArMzU1MCw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKIC0gKE5TU3RyaW5nICopZGVidWdE
ZXNjcmlwdGlvbkZvclRleHRNYXJrZXI6KGlkKXRleHRNYXJrZXIKIHsKLSAgICByZXR1cm4gW3Nl
bGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXS5kZWJ1Z0Rlc2NyaXB0
aW9uKCk7Ci0KKyAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihzZWxmLmF4
QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyKS5kZWJ1Z0Rlc2NyaXB0
aW9uKCk7CiB9CiAKIC0gKE5TU3RyaW5nICopZGVidWdEZXNjcmlwdGlvbkZvclRleHRNYXJrZXJS
YW5nZTooaWQpdGV4dE1hcmtlclJhbmdlCkBAIC0zNjg3LDcgKzM1NjYsNyBAQCBBTExPV19ERVBS
RUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogLSAodm9pZClzaG93Tm9kZUZvclRleHRNYXJr
ZXI6KGlkKXRleHRNYXJrZXIKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9u
ID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKKyAgICBh
dXRvIHZpc2libGVQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoc2VsZi5h
eEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlcik7CiAgICAgTm9kZSog
bm9kZSA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CkBAIC0zNjk3LDcgKzM1NzYsNyBAQCBB
TExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogLSAodm9pZClzaG93Tm9kZVRy
ZWVGb3JUZXh0TWFya2VyOihpZCl0ZXh0TWFya2VyCiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3NpdGlvbiA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6dGV4dE1h
cmtlcl07CisgICAgYXV0byB2aXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0
TWFya2VyKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXIp
OwogICAgIE5vZGUqIG5vZGUgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXBy
ZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzk0NCw3
ICszODIzLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAg
ICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxT
dHJpbmc+KCk7CiAKLSAgICAgICAgICAgIGF1dG8gdGV4dE9wZXJhdGlvbiA9IGFjY2Vzc2liaWxp
dHlUZXh0T3BlcmF0aW9uRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShwcm90ZWN0ZWRTZWxmLmdl
dCgpLCBkaWN0aW9uYXJ5KTsKKyAgICAgICAgICAgIGF1dG8gdGV4dE9wZXJhdGlvbiA9IGFjY2Vz
c2liaWxpdHlUZXh0T3BlcmF0aW9uRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShiYWNraW5nT2Jq
ZWN0LT5heE9iamVjdENhY2hlKCksIGRpY3Rpb25hcnkpOwogICAgICAgICAgICAgcmV0dXJuIGJh
Y2tpbmdPYmplY3QtPnBlcmZvcm1UZXh0T3BlcmF0aW9uKHRleHRPcGVyYXRpb24pOwogICAgICAg
ICB9KTsKICAgICAgICAgaWYgKG9wZXJhdGlvblJlc3VsdC5pc0VtcHR5KCkpCkBAIC00MDAyLDIz
ICszODgxLDMxIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAg
ICByZXR1cm4gW3NlbGYgbGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXI6dGV4dE1hcmtl
ciBmb3JVbml0OlRleHRVbml0OjpMaW5lXTsKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxU
b1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNaXNzcGVsbGluZ1RleHRNYXJrZXJSYW5nZVBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGF1dG8gY3JpdGVyaWEgPSBhY2Nlc3NpYmlsaXR5
TWlzc3BlbGxpbmdTZWFyY2hDcml0ZXJpYUZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUoc2VsZiwg
ZGljdGlvbmFyeSk7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9y
ZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmY3JpdGVyaWEsIHByb3RlY3RlZFNlbGYg
PSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4geworICAgICAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlk
PihbJmRpY3Rpb25hcnksIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJl
dGFpblB0cjxpZD4gewogICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3Rl
ZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OwogICAgICAgICAgICAgaWYgKCFiYWNraW5nT2Jq
ZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKKyAgICAgICAgICAgIGF1dG8qIGNh
Y2hlID0gYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgICAgICAgICAgaWYgKCFj
YWNoZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICAgICBhdXRvIGNy
aXRlcmlhID0gYWNjZXNzaWJpbGl0eU1pc3NwZWxsaW5nU2VhcmNoQ3JpdGVyaWFGb3JQYXJhbWV0
ZXJpemVkQXR0cmlidXRlKGNhY2hlLCBkaWN0aW9uYXJ5KTsKICAgICAgICAgICAgIGlmIChhdXRv
IG1pc3NwZWxsaW5nUmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5taXNzcGVsbGluZ1JhbmdlKCpjcml0
ZXJpYS5maXJzdCwgY3JpdGVyaWEuc2Vjb25kKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGV4
dE1hcmtlclJhbmdlRnJvbVJhbmdlKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgKm1p
c3NwZWxsaW5nUmFuZ2UpOworICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VG
cm9tUmFuZ2UoY2FjaGUsICptaXNzcGVsbGluZ1JhbmdlKTsKICAgICAgICAgICAgIHJldHVybiBu
aWw7CiAgICAgICAgIH0pOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VySXNWYWxpZFBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGVdKSB7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1
ZUZyb21NYWluVGhyZWFkPGJvb2w+KFsmdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IHJldGFp
blB0cihzZWxmKV0gKCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9z
ID0gW3Byb3RlY3RlZFNlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2Vy
XTsKLSAgICAgICAgICAgIHJldHVybiAhcG9zLmlzTnVsbCgpOworICAgICAgICAgICAgYXV0byog
YmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OworICAg
ICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAgICAgcmV0dXJuICF2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGJh
Y2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlcikuaXNOdWxsKCk7CiAgICAg
ICAgIH0pOworCiAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6cmVzdWx0
XTsKICAgICB9CiAKQEAgLTQwMzYsMTMgKzM5MjMsMTggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBM
RU1FTlRBVElPTlNfRU5ECiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhVSUVsZW1lbnRGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgLy8gRklYTUU6IHdl
IG5lZWQgdG8gcmV0dXJuIGFuIElzb2xhdGVkT2JqZWN0IGlmIHRoaXMgaXMgY2FsbGVkIG9uIHRo
ZSBBWCB0aHJlYWQuCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9y
ZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmdGV4dE1hcmtlciwgcHJvdGVjdGVkU2Vs
ZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Ci0gICAgICAgICAgICBh
dXRvKiBheE9iamVjdCA9IFtwcm90ZWN0ZWRTZWxmIGFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0
TWFya2VyOnRleHRNYXJrZXJdOworICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHBy
b3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OworICAgICAgICAgICAgaWYgKCFiYWNr
aW5nT2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgICAgIGF1
dG8qIGF4T2JqZWN0ID0gYWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXIoYmFja2luZ09i
amVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyKTsKICAgICAgICAgICAgIGlmICghYXhP
YmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKwogICAgICAgICAgICAgaWYgKGF4
T2JqZWN0LT5pc0F0dGFjaG1lbnQoKSAmJiBbYXhPYmplY3QtPndyYXBwZXIoKSBhdHRhY2htZW50
Vmlld10pCiAgICAgICAgICAgICAgICAgcmV0dXJuIFtheE9iamVjdC0+d3JhcHBlcigpIGF0dGFj
aG1lbnRWaWV3XTsKKwogICAgICAgICAgICAgcmV0dXJuIGF4T2JqZWN0LT53cmFwcGVyKCk7CiAg
ICAgICAgIH0pOwogICAgIH0KQEAgLTQwNTksNyArMzk1MSw3IEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAg
ICAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3MgPSBbcHJvdGVjdGVkU2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOnRl
eHRNYXJrZXJdOworICAgICAgICAgICAgYXV0byB2aXNpYmxlUG9zID0gdmlzaWJsZVBvc2l0aW9u
Rm9yVGV4dE1hcmtlcihiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXIp
OwogICAgICAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPmxpbmVGb3JQb3NpdGlvbih2aXNp
YmxlUG9zKTsKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiBAKHJlc3VsdCk7CkBAIC00MDgw
LDkgKzM5NzIsMTIgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0cmluZ0ZvclRleHRNYXJrZXJS
YW5nZSJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJv
bU1haW5UaHJlYWQ8U3RyaW5nPihbJnRleHRNYXJrZXJSYW5nZSwgcHJvdGVjdGVkU2VsZiA9IHJl
dGFpblB0cihzZWxmKV0gKCkgLT4gU3RyaW5nIHsKLSAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBb
cHJvdGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwog
ICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhC
YWNraW5nT2JqZWN0OwotICAgICAgICAgICAgcmV0dXJuIChyYW5nZSAmJiBiYWNraW5nT2JqZWN0
KSA/IGJhY2tpbmdPYmplY3QtPnN0cmluZ0ZvclJhbmdlKCpyYW5nZSkgOiBTdHJpbmcoKTsKKyAg
ICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKKyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvclRleHRNYXJrZXJSYW5n
ZShiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJSYW5nZSk7CisgICAg
ICAgICAgICByZXR1cm4gcmFuZ2UgPyBiYWNraW5nT2JqZWN0LT5zdHJpbmdGb3JSYW5nZSgqcmFu
Z2UpIDogU3RyaW5nKCk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtNDExMCw5ICs0MDA1LDEx
IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgYXV0
byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0Owog
ICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiBD
R1JlY3RaZXJvOwotICAgICAgICAgICAgYXV0byByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisKKyAgICAgICAgICAgIGF1dG8g
cmFuZ2UgPSByYW5nZUZvclRleHRNYXJrZXJSYW5nZShiYWNraW5nT2JqZWN0LT5heE9iamVjdENh
Y2hlKCksIHRleHRNYXJrZXJSYW5nZSk7CiAgICAgICAgICAgICBpZiAoIXJhbmdlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOworCiAgICAgICAgICAgICBhdXRvIGJvdW5kcyA9
IEZsb2F0UmVjdChiYWNraW5nT2JqZWN0LT5ib3VuZHNGb3JSYW5nZSgqcmFuZ2UpKTsKICAgICAg
ICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiBjb252ZXJ0UmVjdFRvU3BhY2U6Ym91bmRzIHNw
YWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2U6OlNjcmVlbl07CiAgICAgICAgIH0pOwpA
QCAtNDE5OCw4ICs0MDk1LDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5E
CiAgICAgICAgICAgICBpZiAoIWNhY2hlKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAK
LSAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQxID0gW3Byb3RlY3Rl
ZFNlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyMV07Ci0gICAgICAg
ICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0MiA9IFtwcm90ZWN0ZWRTZWxmIGNo
YXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcjJdOworICAgICAgICAgICAgQ2hh
cmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldDEgPSBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFy
a2VyKGNhY2hlLCB0ZXh0TWFya2VyMSk7CisgICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hh
cmFjdGVyT2Zmc2V0MiA9IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIoY2FjaGUsIHRleHRN
YXJrZXIyKTsKICAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVy
ZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldDEsIGNoYXJhY3Rlck9mZnNldDIpOwog
ICAgICAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZShjYWNoZSwgcmFuZ2Up
OwogICAgICAgICB9KTsKQEAgLTQyMDcsMTQgKzQxMDQsMzAgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWE5leHRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsm
dGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWlu
UHRyPGlkPiB7Ci0gICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0g
W3Byb3RlY3RlZFNlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsK
KyAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4
QmFja2luZ09iamVjdDsKKyAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IGJhY2tpbmdP
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgICAgIGlmICghY2FjaGUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldCA9IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIoY2FjaGUsIHRleHRNYXJr
ZXIpOwogICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIG5leHRUZXh0TWFya2VyRm9y
Q2hhcmFjdGVyT2Zmc2V0OmNoYXJhY3Rlck9mZnNldF07CiAgICAgICAgIH0pOwogICAgIH0KIAog
ICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNUZXh0TWFya2Vy
Rm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2
ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmdGV4dE1hcmtlciwgcHJvdGVj
dGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Ci0gICAgICAg
ICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW3Byb3RlY3RlZFNlbGYgY2hh
cmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKKyAgICAgICAgICAgIGF1dG8q
IGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKKyAg
ICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmls
OworCisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2Fj
aGUoKTsKKyAgICAgICAgICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IGNoYXJh
Y3Rlck9mZnNldEZvclRleHRNYXJrZXIoY2FjaGUsIHRleHRNYXJrZXIpOwogICAgICAgICAgICAg
cmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHByZXZpb3VzVGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNl
dDpjaGFyYWN0ZXJPZmZzZXRdOwogICAgICAgICB9KTsKICAgICB9CkBAIC00MjgzLDcgKzQxOTYs
NyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIGlm
ICghYmFja2luZ09iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAg
ICAgYXV0byByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRl
eHRNYXJrZXJSYW5nZV07CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gcmFuZ2VGb3JUZXh0TWFy
a2VyUmFuZ2UoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyUmFuZ2Up
OwogICAgICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgICAgIHJldHVybiBBWE9iamVjdENhY2hlOjpsZW5ndGhGb3JSYW5nZShTaW1wbGVSYW5n
ZSB7ICpyYW5nZSB9KTsKQEAgLTQyOTUsMTUgKzQyMDgsMjMgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICAvLyBVc2VkIG9ubHkgYnkgRHVtcFJlbmRlclRyZWUg
KHNvIGZhcikuCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdGFydFRl
eHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewotICAgICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnRleHRN
YXJrZXJSYW5nZSwgJmJhY2tpbmdPYmplY3QsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2Vs
ZildICgpIC0+IFJldGFpblB0cjxpZD4gewotICAgICAgICAgICAgYXV0byByYW5nZSA9IFtwcm90
ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisgICAg
ICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1h
aW5UaHJlYWQ8aWQ+KFsmdGV4dE1hcmtlclJhbmdlLCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRy
KHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKKyAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdP
YmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKKyAgICAgICAgICAg
IGlmICghYmFja2luZ09iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAg
ICAgICAgICBhdXRvIHJhbmdlID0gcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2UoYmFja2luZ09iamVj
dC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyUmFuZ2UpOwogICAgICAgICAgICAgcmV0dXJu
IHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2UoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNo
ZSgpLCByYW5nZSwgdHJ1ZSk7CiAgICAgICAgIH0pOwogICAgIH0KIAogICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSJd
KSB7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZh
bHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmdGV4dE1hcmtlclJhbmdlLCAmYmFja2luZ09iamVjdCwg
cHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Ci0g
ICAgICAgICAgICBhdXRvIHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JUZXh0TWFya2Vy
UmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJl
dHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ0ZXh0TWFya2VyUmFu
Z2UsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4g
eworICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCku
YXhCYWNraW5nT2JqZWN0OworICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZv
clRleHRNYXJrZXJSYW5nZShiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJr
ZXJSYW5nZSk7CiAgICAgICAgICAgICByZXR1cm4gc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5n
ZShiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHJhbmdlLCBmYWxzZSk7CiAgICAgICAg
IH0pOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415430</attachid>
            <date>2020-12-04 10:52:42 -0800</date>
            <delta_ts>2020-12-05 10:59:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219491-20201204135241.patch</filename>
            <type>text/plain</type>
            <size>63566</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODVkZDYxYmIyMDlhZjM4
ZWY3ZWI3ZGE2ZDlkOTBjZjM1NjhlZjVhZS4uMjZmYjIzMjA2ZjdiN2NiOGZlYzU3Y2Y1YTE5NmI2
ZGViODk3YWU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIwLTEyLTA0ICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVsaW5pbmFy
eSByZWZhY3RvcmluZyBvZiBUZXh0TWFya2VyIGFuZCBUZXh0TWFya2VyUmFuZ2UuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk0OTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBDaHJpcyBGbGVpemFjaC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLgorCisgICAgICAgIFRleHRNYXJrZXIgYW5kIFRleHRNYXJrZXJSYW5nZSBzaG91
bGQgYmVjb21lIGNsYXNzZXMgb24gdGhlaXIgb3duIHJpZ2h0LgorICAgICAgICBBcyBhIGZpcnN0
IHN0ZXAgaW4gdGhhdCBkaXJlY3Rpb24sIHRoaXMgcGF0Y2ggbW92ZXMgYWxsIHRoZSBzdGF0aWMK
KyAgICAgICAgZnVuY3Rpb25zIGluIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
IHRvIG1ha2UgY29udmVyc2lvbnMKKyAgICAgICAgYmV0d2VlbiBUZXh0TWFya2VycyBhbmQgVGV4
dE1hcmtlclJhbmdlcyB0byBhbmQgZnJvbSBvdGhlciB0eXBlcyB0bworICAgICAgICBBWE9iamVj
dENhY2hlTWFjLm1tLgorICAgICAgICBJbiBhZGRpdGlvbiwgcmVtb3ZlZCBhbGwgT2JqZWN0aXZl
QyB3cmFwcGVycyB0byB0aGVzZSBmdW5jdGlvbnMgYW5kCisgICAgICAgIGluc3RlYWQgY2FsbCB0
aGUgZnVuY3Rpb25zIGRpcmVjdGx5IHdoZXJlIG5lZWRlZC4gVGhpcyBpcyByZWxldmFudCBub3cK
KyAgICAgICAgd2l0aCB0aGUgYXJyaXZhbCBvZiBpc29sYXRlZCB0cmVlIG1vZGUgYmVjYXVzZSBp
dCBzYXZlcyBhIG5vbi10cml2aWFsCisgICAgICAgIGNhbGwgdG8gdGhlIHdyYXBwZXIncyBheEJh
Y2tpbmdPYmplY3QgZ2V0dGVyLiBGdXJ0aGVybW9yZSwgYWxsIHRoZQorICAgICAgICBjb252ZXJz
aW9uIGZ1bmN0aW9ucyBhcmUgZG9pbmcgbm93IHRoZSBhcHByb3ByaWF0ZSB0aHJlYWQgY2hlY2ss
IHNpbmNlCisgICAgICAgIHRoZXkgYWxsIG5lZWQgdG8gcnVuIG9uIHRoZSBtYWluIHRocmVhZC4K
KyAgICAgICAgRml4ZWQgdGhlIGhhbmRsaW5nIG9mIHRoZSBOU0FjY2Vzc2liaWxpdHlNaXNzcGVs
bGluZ1RleHRNYXJrZXJSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUKKyAgICAgICAgcmVxdWVz
dCB0aGF0IHdhcyBjYWxsaW5nIGFjY2Vzc2liaWxpdHlNaXNzcGVsbGluZ1NlYXJjaENyaXRlcmlh
Rm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZQorICAgICAgICBvZmYgb2YgdGhlIG1haW4gdGhyZWFk
LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFuZ2VQbGF0Zm9y
bU5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBWFRleHRNYXJrZXJSYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjp0ZXh0TWFya2VyUmFuZ2VGcm9tTWFya2Vycyk6CisgICAgICAgIChX
ZWJDb3JlOjpBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYVGV4
dE1hcmtlclJhbmdlRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEJ5dGVzRnJvbUFYVGV4dE1h
cmtlcik6CisgICAgICAgIChXZWJDb3JlOjphY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtl
cik6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIpOgorICAgICAgICAo
V2ViQ29yZTo6dGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6dGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldCk6CisgICAgICAgIChXZWJD
b3JlOjpjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0
YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dE1hcmtl
clJhbmdlRnJvbVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlRm9yVGV4dE1hcmtlclJh
bmdlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoYWNjZXNzaWJpbGl0eVRleHRPcGVyYXRp
b25Gb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKToKKyAgICAgICAgKGFjY2Vzc2liaWxpdHlNaXNz
cGVsbGluZ1NlYXJjaENyaXRlcmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9z
aXRpb246XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRN
YXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29udHJvbDpdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2Vy
UmFuZ2U6c3BlbGxDaGVjazpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6ZW5kUG9zaXRpb246XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJSYW5n
ZUZvclNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5U2V0VmFsdWU6Zm9yQXR0cmlidXRlOl0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfaW5kZXhGb3JUZXh0
TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfdGV4
dE1hcmtlckZvckluZGV4Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBkZWJ1Z0Rlc2NyaXB0aW9uRm9yVGV4dE1hcmtlcjpdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZGVidWdEZXNjcmlwdGlvbkZvclRleHRNYXJrZXJSYW5n
ZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc2hvd05vZGVG
b3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBzaG93Tm9kZVRyZWVGb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VBdFRleHRNYXJrZXI6Zm9yVW5pdDpdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgbGluZVRleHRNYXJrZXJS
YW5nZUZvclRleHRNYXJrZXI6Zm9yVW5pdDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlckZvclRleHRNYXJrZXI6YXRVbml0Ol0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWU6Zm9yUGFyYW1ldGVyOl0pOgorICAgICAgICAoQVhUZXh0TWFya2VyUmFuZ2VTdGFydCk6
IE1PdmVkIHRvIEFYT2JqZWN0Q2FjaGVNYWMubW0uCisgICAgICAgIChBWFRleHRNYXJrZXJSYW5n
ZUVuZCk6IE1PdmVkIHRvIEFYT2JqZWN0Q2FjaGVNYWMubW0uCisgICAgICAgIChnZXRCeXRlc0Zy
b21BWFRleHRNYXJrZXIpOiBNT3ZlZCB0byBBWE9iamVjdENhY2hlTWFjLm1tLgorICAgICAgICAo
aXNUZXh0TWFya2VySWdub3JlZCk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0TWFya2VyOl0pOiBEZWxl
dGVkLgorICAgICAgICAoYWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXIpOiBNT3ZlZCB0
byBBWE9iamVjdENhY2hlTWFjLm1tLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0Ol0pOiBEZWxldGVkLgorICAgICAg
ICAodGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldCk6IE1PdmVkIHRvIEFYT2JqZWN0Q2FjaGVN
YWMubW0uCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJhbmdlRm9y
VGV4dE1hcmtlclJhbmdlOl0pOiBEZWxldGVkLgorICAgICAgICAoY2hhcmFjdGVyT2Zmc2V0Rm9y
VGV4dE1hcmtlcik6IE1PdmVkIHRvIEFYT2JqZWN0Q2FjaGVNYWMubW0uCisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6
XSk6IERlbGV0ZWQuCisgICAgICAgICh2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKTogTU92
ZWQgdG8gQVhPYmplY3RDYWNoZU1hYy5tbS4KKyAgICAgICAgKHZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlKTogTU92ZWQgdG8gQVhPYmplY3RDYWNoZU1hYy5tbS4KKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdmlzaWJsZVBvc2l0aW9uRm9yVGV4
dE1hcmtlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6XSk6IERlbGV0ZWQu
CisKIDIwMjAtMTItMDMgIEFuZHJlcyBHb256YWxleiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgog
CiAgICAgICAgIEZpeCBmb3IgY3Jhc2ggaGFuZGxpbmcgTlNBY2Nlc3NpYmlsaXR5SW5zZXJ0aW9u
UG9pbnRMaW5lTnVtYmVyQXR0cmlidXRlIGZvciB0ZXh0IGZpZWxkcyBpbiBpc29sYXRlZCB0cmVl
IG1vZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9i
amVjdENhY2hlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmpl
Y3RDYWNoZU1hYy5tbQppbmRleCA2YWRlMDMzM2U0ZTJiN2M5OTdhZTZjNDBmNDJlNjIzMDhjM2Uy
ODgyLi43ZWRhOGYxYzY2NjNkZTcxZGQ5ODA0ZDVmNjkwZjVkNTk3YWU3YWJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0K
QEAgLTQ0NCw4ICs0NDQsOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBWENvcmVPYmplY3QqIG9iamVjdAogICAgICAgICB9CiAg
ICAgfQogICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7Ci0gICAgICAgIGlmIChpZCB0ZXh0
TWFya2VyUmFuZ2UgPSB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyh0aGlzLCBz
ZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKQotICAgICAg
ICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDp0ZXh0TWFya2VyUmFuZ2UgZm9yS2V5Ok5TQWNjZXNz
aWJpbGl0eVNlbGVjdGVkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRlXTsKKyAgICAgICAgaWYgKGF1
dG8gdGV4dE1hcmtlclJhbmdlID0gdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMo
dGhpcywgc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSkK
KyAgICAgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6KGlkKXRleHRNYXJrZXJSYW5nZSBmb3JL
ZXk6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGVdOwogICAg
IH0KIAogICAgIGlmIChpZCB3cmFwcGVyID0gb2JqZWN0LT53cmFwcGVyKCkpCkBAIC01OTAsMTgg
KzU5MCwxOSBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBsYXRmb3JtUGVyZm9ybURlZmVycmVkQ2Fj
aGVVcGRhdGUoKQogewogfQogCi0vLyBUZXh0TWFya2VyIHV0aWxpdHkgZnVuY3Rpb25zLgorLy8g
VGV4dE1hcmtlciBhbmQgVGV4dE1hcmtlclJhbmdlIGZ1bmNzdGlvbnMuCisvLyBGSVhNRTogVGV4
dE1hcmtlciBhbmQgVGV4dE1hcmtlclJhbmdlIHNob3VsZCBiZWNvbWUgY2xhc3NlcyB3cmFwcGlu
ZyB0aGUgc3lzdGVtIG9iamVjdHMuCiAKLXN0YXRpYyBpZCBBWFRleHRNYXJrZXJSYW5nZShpZCBz
dGFydE1hcmtlciwgaWQgZW5kTWFya2VyKQorc3RhdGljIEFYVGV4dE1hcmtlclJhbmdlUmVmIEFY
VGV4dE1hcmtlclJhbmdlKEFYVGV4dE1hcmtlclJlZiBzdGFydE1hcmtlciwgQVhUZXh0TWFya2Vy
UmVmIGVuZE1hcmtlcikKIHsKICAgICBBU1NFUlQoc3RhcnRNYXJrZXIpOwogICAgIEFTU0VSVChl
bmRNYXJrZXIpOwogICAgIEFTU0VSVChDRkdldFR5cGVJRCgoX19icmlkZ2UgQ0ZUeXBlUmVmKXN0
YXJ0TWFya2VyKSA9PSBBWFRleHRNYXJrZXJHZXRUeXBlSUQoKSk7CiAgICAgQVNTRVJUKENGR2V0
VHlwZUlEKChfX2JyaWRnZSBDRlR5cGVSZWYpZW5kTWFya2VyKSA9PSBBWFRleHRNYXJrZXJHZXRU
eXBlSUQoKSk7Ci0gICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKEFYVGV4dE1hcmtlclJhbmdl
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChBWFRleHRNYXJrZXJSZWYpc3RhcnRNYXJrZXIs
IChBWFRleHRNYXJrZXJSZWYpZW5kTWFya2VyKSk7CisgICAgcmV0dXJuIChBWFRleHRNYXJrZXJS
YW5nZVJlZilDRkJyaWRnaW5nUmVsZWFzZShBWFRleHRNYXJrZXJSYW5nZUNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBzdGFydE1hcmtlciwgZW5kTWFya2VyKSk7CiB9CiAKLXN0YXRpYyBpZCB0
ZXh0TWFya2VyUmFuZ2VGcm9tTWFya2VycyhpZCB0ZXh0TWFya2VyMSwgaWQgdGV4dE1hcmtlcjIp
CitzdGF0aWMgQVhUZXh0TWFya2VyUmFuZ2VSZWYgdGV4dE1hcmtlclJhbmdlRnJvbU1hcmtlcnMo
QVhUZXh0TWFya2VyUmVmIHRleHRNYXJrZXIxLCBBWFRleHRNYXJrZXJSZWYgdGV4dE1hcmtlcjIp
CiB7CiAgICAgaWYgKCF0ZXh0TWFya2VyMSB8fCAhdGV4dE1hcmtlcjIpCiAgICAgICAgIHJldHVy
biBuaWw7CkBAIC02MDksMTAgKzYxMCw1MiBAQCBzdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJv
bU1hcmtlcnMoaWQgdGV4dE1hcmtlcjEsIGlkIHRleHRNYXJrZXIyKQogICAgIHJldHVybiBBWFRl
eHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyMSwgdGV4dE1hcmtlcjIpOwogfQogCi1pZCB0ZXh0TWFy
a2VyRm9yVmlzaWJsZVBvc2l0aW9uKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3MpCitzdGF0aWMgQVhUZXh0TWFya2VyUmVmIEFYVGV4dE1hcmtl
clJhbmdlU3RhcnQoQVhUZXh0TWFya2VyUmFuZ2VSZWYgdGV4dE1hcmtlclJhbmdlKQoreworICAg
IEFTU0VSVCh0ZXh0TWFya2VyUmFuZ2UpOworICAgIEFTU0VSVChDRkdldFR5cGVJRCgoX19icmlk
Z2UgQ0ZUeXBlUmVmKXRleHRNYXJrZXJSYW5nZSkgPT0gQVhUZXh0TWFya2VyUmFuZ2VHZXRUeXBl
SUQoKSk7CisgICAgcmV0dXJuIChBWFRleHRNYXJrZXJSZWYpQ0ZCcmlkZ2luZ1JlbGVhc2UoQVhU
ZXh0TWFya2VyUmFuZ2VDb3B5U3RhcnRNYXJrZXIodGV4dE1hcmtlclJhbmdlKSk7Cit9CisKK3N0
YXRpYyBBWFRleHRNYXJrZXJSZWYgQVhUZXh0TWFya2VyUmFuZ2VFbmQoQVhUZXh0TWFya2VyUmFu
Z2VSZWYgdGV4dE1hcmtlclJhbmdlKQoreworICAgIEFTU0VSVCh0ZXh0TWFya2VyUmFuZ2UpOwor
ICAgIEFTU0VSVChDRkdldFR5cGVJRCgoX19icmlkZ2UgQ0ZUeXBlUmVmKXRleHRNYXJrZXJSYW5n
ZSkgPT0gQVhUZXh0TWFya2VyUmFuZ2VHZXRUeXBlSUQoKSk7CisgICAgcmV0dXJuIChBWFRleHRN
YXJrZXJSZWYpQ0ZCcmlkZ2luZ1JlbGVhc2UoQVhUZXh0TWFya2VyUmFuZ2VDb3B5RW5kTWFya2Vy
KHRleHRNYXJrZXJSYW5nZSkpOworfQorCitzdGF0aWMgVGV4dE1hcmtlckRhdGEgZ2V0Qnl0ZXNG
cm9tQVhUZXh0TWFya2VyKEFYVGV4dE1hcmtlclJlZiB0ZXh0TWFya2VyKQoreworICAgIFRleHRN
YXJrZXJEYXRhIGRhdGE7CisgICAgaWYgKCF0ZXh0TWFya2VyKQorICAgICAgICByZXR1cm4gZGF0
YTsKKworICAgIEFTU0VSVChDRkdldFR5cGVJRCh0ZXh0TWFya2VyKSA9PSBBWFRleHRNYXJrZXJH
ZXRUeXBlSUQoKSk7CisgICAgaWYgKENGR2V0VHlwZUlEKHRleHRNYXJrZXIpICE9IEFYVGV4dE1h
cmtlckdldFR5cGVJRCgpKQorICAgICAgICByZXR1cm4gZGF0YTsKKworICAgIG1lbWNweSgmZGF0
YSwgQVhUZXh0TWFya2VyR2V0Qnl0ZVB0cih0ZXh0TWFya2VyKSwgc2l6ZW9mKGRhdGEpKTsKKyAg
ICByZXR1cm4gZGF0YTsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eU9i
amVjdEZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaGUsIEFYVGV4dE1hcmtlclJlZiB0
ZXh0TWFya2VyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFjYWNo
ZSB8fCAhdGV4dE1hcmtlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHRl
eHRNYXJrZXJEYXRhID0gZ2V0Qnl0ZXNGcm9tQVhUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAg
IGlmICh0ZXh0TWFya2VyRGF0YS5pZ25vcmVkKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIHJldHVybiBjYWNoZS0+YWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXJEYXRhKHRl
eHRNYXJrZXJEYXRhKTsKK30KKworLy8gVGV4dE1hcmtlciA8LT4gVmlzaWJsZVBvc2l0aW9uIGNv
bnZlcnNpb24uCisKK0FYVGV4dE1hcmtlclJlZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9u
KEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Mp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoY2FjaGUpOwogICAg
IGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTYyMCwyMSArNjYzLDcyIEBA
IGlkIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oQVhPYmplY3RDYWNoZSogY2FjaGUsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzCiAgICAgaWYgKCF0ZXh0TWFya2VyRGF0YSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVybiBDRkJyaWRnaW5nUmVsZWFzZShBWFRleHRNYXJr
ZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4KikmdGV4dE1hcmtlckRh
dGEudmFsdWUoKSwgc2l6ZW9mKHRleHRNYXJrZXJEYXRhLnZhbHVlKCkpKSk7CisgICAgcmV0dXJu
IChBWFRleHRNYXJrZXJSZWYpQ0ZCcmlkZ2luZ1JlbGVhc2UoQVhUZXh0TWFya2VyQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBVSW50OCopJnRleHRNYXJrZXJEYXRhLnZhbHVlKCks
IHNpemVvZih0ZXh0TWFya2VyRGF0YS52YWx1ZSgpKSkpOwogfQogCi1pZCB0ZXh0TWFya2VyUmFu
Z2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBzdGFydFBvc2l0aW9uLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZFBvc2l0
aW9uKQorVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoQVhPYmpl
Y3RDYWNoZSogY2FjaGUsIEFYVGV4dE1hcmtlclJlZiB0ZXh0TWFya2VyKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFjYWNoZSB8fCAhdGV4dE1hcmtlcikKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gdGV4dE1hcmtlckRhdGEgPSBnZXRCeXRlc0Zyb21B
WFRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgcmV0dXJuIGNhY2hlLT52aXNpYmxlUG9zaXRp
b25Gb3JUZXh0TWFya2VyRGF0YSh0ZXh0TWFya2VyRGF0YSk7Cit9CisKKy8vIFRleHRNYXJrZXJS
YW5nZSA8LT4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UgY29udmVyc2lvbi4KKworQVhUZXh0TWFya2Vy
UmFuZ2VSZWYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMoQVhPYmplY3RDYWNo
ZSogY2FjaGUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbiwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBlbmRQb3NpdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBpZCBzdGFydFRl
eHRNYXJrZXIgPSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGNhY2hlLCBzdGFydFBvc2l0
aW9uKTsKLSAgICBpZCBlbmRUZXh0TWFya2VyID0gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlv
bihjYWNoZSwgZW5kUG9zaXRpb24pOworICAgIGF1dG8gc3RhcnRUZXh0TWFya2VyID0gdGV4dE1h
cmtlckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgc3RhcnRQb3NpdGlvbik7CisgICAgYXV0byBl
bmRUZXh0TWFya2VyID0gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgZW5kUG9z
aXRpb24pOwogICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tTWFya2VycyhzdGFydFRleHRN
YXJrZXIsIGVuZFRleHRNYXJrZXIpOwogfQogCi1pZCBzdGFydE9yRW5kVGV4dE1hcmtlckZvclJh
bmdlKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJh
bmdlLCBib29sIGlzU3RhcnQpCitWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25S
YW5nZUZvclRleHRNYXJrZXJSYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgQVhUZXh0TWFya2Vy
UmFuZ2VSZWYgdGV4dE1hcmtlclJhbmdlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICByZXR1cm4geworICAgICAgICB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGNh
Y2hlLCBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KHRleHRNYXJrZXJSYW5nZSkpLAorICAgICAgICB2
aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZUVuZCh0
ZXh0TWFya2VyUmFuZ2UpKQorICAgIH07Cit9CisKKy8vIFRleHRNYXJrZXIgPC0+IENoYXJhY3Rl
ck9mZnNldCBjb252ZXJzaW9uLgorCitBWFRleHRNYXJrZXJSZWYgdGV4dE1hcmtlckZvckNoYXJh
Y3Rlck9mZnNldChBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBj
aGFyYWN0ZXJPZmZzZXQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlm
ICghY2FjaGUpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUZXh0TWFya2VyRGF0YSB0ZXh0
TWFya2VyRGF0YTsKKyAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQo
dGV4dE1hcmtlckRhdGEsIGNoYXJhY3Rlck9mZnNldCk7CisgICAgaWYgKCF0ZXh0TWFya2VyRGF0
YS5heElEIHx8IHRleHRNYXJrZXJEYXRhLmlnbm9yZWQpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICByZXR1cm4gKEFYVGV4dE1hcmtlclJlZilDRkJyaWRnaW5nUmVsZWFzZShBWFRleHRNYXJr
ZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4KikmdGV4dE1hcmtlckRh
dGEsIHNpemVvZih0ZXh0TWFya2VyRGF0YSkpKTsKK30KKworQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldEZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaGUsIEFYVGV4dE1hcmtl
clJlZiB0ZXh0TWFya2VyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYg
KCFjYWNoZSB8fCAhdGV4dE1hcmtlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8g
dGV4dE1hcmtlckRhdGEgPSBnZXRCeXRlc0Zyb21BWFRleHRNYXJrZXIodGV4dE1hcmtlcik7Cisg
ICAgcmV0dXJuIGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyRGF0YSh0ZXh0TWFy
a2VyRGF0YSk7Cit9CisKKy8vIFRleHRNYXJrZXJSYW5nZSA8LT4gU2ltcGxlUmFuZ2UgY29udmVy
c2lvbi4KKworQVhUZXh0TWFya2VyUmVmIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2UoQVhP
YmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIGJv
b2wgaXNTdGFydCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghY2Fj
aGUgfHwgIXJhbmdlKQpAQCAtNjQ1LDIwICs3MzksMzYgQEAgaWQgc3RhcnRPckVuZFRleHRNYXJr
ZXJGb3JSYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2UKICAgICBpZiAoIXRleHRNYXJrZXJEYXRhLmF4SUQpCiAgICAgICAgIHJldHVybiBuaWw7CiAK
LSAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2UoQVhUZXh0TWFya2VyQ3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIChjb25zdCBVSW50OCopJnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4dE1h
cmtlckRhdGEpKSk7CisgICAgcmV0dXJuIChBWFRleHRNYXJrZXJSZWYpQ0ZCcmlkZ2luZ1JlbGVh
c2UoQVhUZXh0TWFya2VyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBVSW50OCop
JnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4dE1hcmtlckRhdGEpKSk7CiB9CiAKLWlkIHRleHRN
YXJrZXJSYW5nZUZyb21SYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiByYW5nZSkKK0FYVGV4dE1hcmtlclJhbmdlUmVmIHRleHRNYXJrZXJSYW5n
ZUZyb21SYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiByYW5nZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghY2Fj
aGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBpZCBzdGFydFRleHRNYXJrZXIgPSBzdGFy
dE9yRW5kVGV4dE1hcmtlckZvclJhbmdlKGNhY2hlLCByYW5nZSwgdHJ1ZSk7Ci0gICAgaWQgZW5k
VGV4dE1hcmtlciA9IHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2UoY2FjaGUsIHJhbmdlLCBm
YWxzZSk7CisgICAgYXV0byBzdGFydFRleHRNYXJrZXIgPSBzdGFydE9yRW5kVGV4dE1hcmtlckZv
clJhbmdlKGNhY2hlLCByYW5nZSwgdHJ1ZSk7CisgICAgYXV0byBlbmRUZXh0TWFya2VyID0gc3Rh
cnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZShjYWNoZSwgcmFuZ2UsIGZhbHNlKTsKICAgICByZXR1
cm4gdGV4dE1hcmtlclJhbmdlRnJvbU1hcmtlcnMoc3RhcnRUZXh0TWFya2VyLCBlbmRUZXh0TWFy
a2VyKTsKIH0KIAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yVGV4dE1hcmtlclJhbmdl
KEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZVJlZiB0ZXh0TWFya2VyUmFu
Z2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIWNhY2hlIHx8ICF0
ZXh0TWFya2VyUmFuZ2UpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRv
IHN0YXJ0VGV4dE1hcmtlciA9IEFYVGV4dE1hcmtlclJhbmdlU3RhcnQodGV4dE1hcmtlclJhbmdl
KTsKKyAgICBhdXRvIGVuZFRleHRNYXJrZXIgPSBBWFRleHRNYXJrZXJSYW5nZUVuZCh0ZXh0TWFy
a2VyUmFuZ2UpOworICAgIGlmICghc3RhcnRUZXh0TWFya2VyIHx8ICFlbmRUZXh0TWFya2VyKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0
Q2hhcmFjdGVyT2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcihjYWNoZSwgc3Rh
cnRUZXh0TWFya2VyKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kQ2hhcmFjdGVyT2Zmc2V0ID0g
Y2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcihjYWNoZSwgZW5kVGV4dE1hcmtlcik7CisgICAg
cmV0dXJuIGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnRDaGFy
YWN0ZXJPZmZzZXQsIGVuZENoYXJhY3Rlck9mZnNldCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
Yy5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMuaAppbmRleCA4OTY2MjZhZDg5ZGI0OWI0MWRjOWZmYTA5N2YxNGU4ZjM4
NjdjM2RkLi5hN2UyYzgxMDIxYmQzMDA2ZGNjNGNmYmZjMTA2Y2MwOTJmOGI1ZjEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgKQEAgLTI3LDYgKzI3LDcgQEAKICAqLwog
CiAjaW1wb3J0ICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaCIKKyNpbXBvcnQg
PHBhbC9zcGkvbWFjL0hJU2VydmljZXNTUEkuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKIApAQCAt
MzYsNiArMzcsOCBAQAogCiBAaW50ZXJmYWNlIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IDogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlCiAKKy8vIEZJWE1FOiBSZW1vdmUg
dGhlc2UgbWV0aG9kcyBzaW5jZSBjbGllbnRzIHNob3VsZCBub3QgbmVlZCB0byBjYWxsIHRoZW0g
YW5kIGhlbmNlIHNob3VsZCBub3QgYmUgZXhwb3NlZCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4K
Ky8vIEluc2lkZSBXZWJDb3JlLCB1c2UgdGhlIFdlYkNvcmUgaG9tb255bW91cyBkZWNsYXJlZCBi
ZWxvdyBpbnN0ZWFkLgogLSAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6
KGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYpc3RhcnRQb3NpdGlvbiBlbmRQb3NpdGlv
bjooY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJillbmRQb3NpdGlvbjsKIC0gKGlkKXRl
eHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlv
biYpdmlzaWJsZVBvczsKIC0gKGlkKXRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29u
dHJvbDooV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQmKXRleHRDb250cm9sOwpA
QCAtNDksOSArNTIsMjkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1pZCB0ZXh0TWFya2Vy
Rm9yVmlzaWJsZVBvc2l0aW9uKEFYT2JqZWN0Q2FjaGUqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
KTsKLWlkIHRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKEFYT2JqZWN0Q2FjaGUq
LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKLWlkIHN0
YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2UoQVhPYmplY3RDYWNoZSosIGNvbnN0IE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiYsIGJvb2wgaXNTdGFydCk7Ci1pZCB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFu
Z2UoQVhPYmplY3RDYWNoZSosIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpOworY2xhc3Mg
QWNjZXNzaWJpbGl0eU9iamVjdDsKK3N0cnVjdCBDaGFyYWN0ZXJPZmZzZXQ7CisKKy8vIFRleHRN
YXJrZXIgYW5kIFRleHRNYXJrZXJSYW5nZSBwdWJsaWMgZnVuY3N0aW9ucy4KKy8vIEZJWE1FOiBU
ZXh0TWFya2VyIGFuZCBUZXh0TWFya2VyUmFuZ2Ugc2hvdWxkIGJlY29tZSBjbGFzc2VzIG9uIHRo
ZWlyIG93biByaWdodCwgd3JhcHBpbmcgdGhlIHN5c3RlbSBvYmplY3RzLgorCitBY2Nlc3NpYmls
aXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hl
KiwgQVhUZXh0TWFya2VyUmVmKTsKKworLy8gVGV4dE1hcmtlciA8LT4gVmlzaWJsZVBvc2l0aW9u
IGNvbnZlcnNpb24uCitBWFRleHRNYXJrZXJSZWYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlv
bihBWE9iamVjdENhY2hlKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hlKiwgQVhUZXh0TWFy
a2VyUmVmKTsKKworLy8gVGV4dE1hcmtlclJhbmdlIDwtPiBWaXNpYmxlUG9zaXRpb25SYW5nZSBj
b252ZXJzaW9uLgorQVhUZXh0TWFya2VyUmFuZ2VSZWYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2li
bGVQb3NpdGlvbnMoQVhPYmplY3RDYWNoZSosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpOworVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2UoQVhPYmplY3RDYWNoZSosIEFYVGV4dE1hcmtlclJhbmdl
UmVmKTsKKworLy8gVGV4dE1hcmtlciA8LT4gQ2hhcmFjdGVyT2Zmc2V0IGNvbnZlcnNpb24uCitB
WFRleHRNYXJrZXJSZWYgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldChBWE9iamVjdENhY2hl
KiwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CitDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zm
c2V0Rm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hlKiwgQVhUZXh0TWFya2VyUmVmKTsKKworLy8g
VGV4dE1hcmtlclJhbmdlIDwtPiBTaW1wbGVSYW5nZSBjb252ZXJzaW9uLgorQVhUZXh0TWFya2Vy
UmVmIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2UoQVhPYmplY3RDYWNoZSosIGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiYsIGJvb2wgaXNTdGFydCk7CitBWFRleHRNYXJrZXJSYW5nZVJl
ZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UoQVhPYmplY3RDYWNoZSosIGNvbnN0IE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiYpOworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yVGV4dE1hcmtl
clJhbmdlKEFYT2JqZWN0Q2FjaGUqLCBBWFRleHRNYXJrZXJSYW5nZVJlZik7CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggZDhkNWNmMjFmNWQwODNmNzVm
ZGEzZGFkOWE5NWQ1MTAyMjIyYjg2Mi4uODNmNTE3OWFjNzI3MmQ4NDU4MjI4ZjJjMjA3Y2IxMmEy
YjAxZGVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTU4
MCwyMCArNTgwLDYgQEAgc3RhdGljIGlubGluZSBCT09MIEFYT2JqZWN0SXNUZXh0TWFya2VyUmFu
Z2UoaWQgb2JqZWN0KQogICAgIHJldHVybiBvYmplY3QgJiYgQ0ZHZXRUeXBlSUQoKF9fYnJpZGdl
IENGVHlwZVJlZilvYmplY3QpID09IEFYVGV4dE1hcmtlclJhbmdlR2V0VHlwZUlEKCk7CiB9CiAK
LXN0YXRpYyBpZCBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KGlkIHJhbmdlKQotewotICAgIEFTU0VS
VChyYW5nZSAhPSBuaWwpOwotICAgIEFTU0VSVChDRkdldFR5cGVJRCgoX19icmlkZ2UgQ0ZUeXBl
UmVmKXJhbmdlKSA9PSBBWFRleHRNYXJrZXJSYW5nZUdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4g
Q0ZCcmlkZ2luZ1JlbGVhc2UoQVhUZXh0TWFya2VyUmFuZ2VDb3B5U3RhcnRNYXJrZXIoKEFYVGV4
dE1hcmtlclJhbmdlUmVmKXJhbmdlKSk7Ci19Ci0KLXN0YXRpYyBpZCBBWFRleHRNYXJrZXJSYW5n
ZUVuZChpZCByYW5nZSkKLXsKLSAgICBBU1NFUlQocmFuZ2UgIT0gbmlsKTsKLSAgICBBU1NFUlQo
Q0ZHZXRUeXBlSUQoKF9fYnJpZGdlIENGVHlwZVJlZilyYW5nZSkgPT0gQVhUZXh0TWFya2VyUmFu
Z2VHZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKEFYVGV4dE1hcmtl
clJhbmdlQ29weUVuZE1hcmtlcigoQVhUZXh0TWFya2VyUmFuZ2VSZWYpcmFuZ2UpKTsKLX0KLQog
I3ByYWdtYSBtYXJrIE90aGVyIGhlbHBlcnMKIAogLSAoSW50UmVjdClzY3JlZW5Ub0NvbnRlbnRz
Oihjb25zdCBJbnRSZWN0JilyZWN0CkBAIC02ODQsNyArNjcwLDcgQEAgc3RhdGljIEFjY2Vzc2li
aWxpdHlTZWFyY2hUZXh0Q3JpdGVyaWEgYWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYUZv
clBhcmFtZXQKICAgICByZXR1cm4gY3JpdGVyaWE7CiB9CiAKLXN0YXRpYyBBY2Nlc3NpYmlsaXR5
VGV4dE9wZXJhdGlvbiBhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6ZWRB
dHRyaWJ1dGUoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKndyYXBwZXIsIGNvbnN0IE5T
RGljdGlvbmFyeSAqcGFyYW1ldGVyaXplZEF0dHJpYnV0ZSkKK3N0YXRpYyBBY2Nlc3NpYmlsaXR5
VGV4dE9wZXJhdGlvbiBhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6ZWRB
dHRyaWJ1dGUoQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSwgY29uc3QgTlNEaWN0aW9uYXJ5
ICpwYXJhbWV0ZXJpemVkQXR0cmlidXRlKQogewogICAgIEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0
aW9uIG9wZXJhdGlvbjsKIApAQCAtNjkzLDggKzY3OSw5IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5
VGV4dE9wZXJhdGlvbiBhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6ZWRB
dHRyCiAgICAgTlNTdHJpbmcgKnJlcGxhY2VtZW50U3RyaW5nID0gW3BhcmFtZXRlcml6ZWRBdHRy
aWJ1dGUgb2JqZWN0Rm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb25SZXBsYWNlbWVu
dFN0cmluZ107CiAKICAgICBpZiAoW21hcmtlclJhbmdlcyBpc0tpbmRPZkNsYXNzOltOU0FycmF5
IGNsYXNzXV0pIHsKLSAgICAgICAgb3BlcmF0aW9uLnRleHRSYW5nZXMgPSBtYWtlVmVjdG9yKG1h
cmtlclJhbmdlcywgW3dyYXBwZXJdIChpZCBtYXJrZXJSYW5nZSkgewotICAgICAgICAgICAgcmV0
dXJuIFt3cmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOm1hcmtlclJhbmdlXTsKKyAgICAg
ICAgb3BlcmF0aW9uLnRleHRSYW5nZXMgPSBtYWtlVmVjdG9yKG1hcmtlclJhbmdlcywgWyZheE9i
amVjdENhY2hlXSAoaWQgbWFya2VyUmFuZ2UpIHsKKyAgICAgICAgICAgIEFTU0VSVChBWE9iamVj
dElzVGV4dE1hcmtlclJhbmdlKG1hcmtlclJhbmdlKSk7CisgICAgICAgICAgICByZXR1cm4gcmFu
Z2VGb3JUZXh0TWFya2VyUmFuZ2UoYXhPYmplY3RDYWNoZSwgKEFYVGV4dE1hcmtlclJhbmdlUmVm
KW1hcmtlclJhbmdlKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC03MTUsMTEgKzcwMiwxNCBA
QCBzdGF0aWMgQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gYWNjZXNzaWJpbGl0eVRleHRPcGVy
YXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cgogICAgIHJldHVybiBvcGVyYXRpb247CiB9CiAKLXN0
YXRpYyBzdGQ6OnBhaXI8T3B0aW9uYWw8U2ltcGxlUmFuZ2U+LCBBY2Nlc3NpYmlsaXR5U2VhcmNo
RGlyZWN0aW9uPiBhY2Nlc3NpYmlsaXR5TWlzc3BlbGxpbmdTZWFyY2hDcml0ZXJpYUZvclBhcmFt
ZXRlcml6ZWRBdHRyaWJ1dGUoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKm9iamVjdCwg
Y29uc3QgTlNEaWN0aW9uYXJ5ICpwYXJhbXMpCitzdGF0aWMgc3RkOjpwYWlyPE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbj4gYWNjZXNzaWJpbGl0eU1p
c3NwZWxsaW5nU2VhcmNoQ3JpdGVyaWFGb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKEFYT2JqZWN0
Q2FjaGUqIGF4T2JqZWN0Q2FjaGUsIGNvbnN0IE5TRGljdGlvbmFyeSAqcGFyYW1zKQogeworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAgICBzdGQ6OnBhaXI8T3B0aW9uYWw8U2ltcGxl
UmFuZ2U+LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uPiBjcml0ZXJpYTsKIAotICAgIGNy
aXRlcmlhLmZpcnN0ID0gW29iamVjdCByYW5nZUZvclRleHRNYXJrZXJSYW5nZTpbcGFyYW1zIG9i
amVjdEZvcktleTpAIkFYU3RhcnRUZXh0TWFya2VyUmFuZ2UiXV07CisgICAgQVNTRVJUKEFYT2Jq
ZWN0SXNUZXh0TWFya2VyUmFuZ2UoW3BhcmFtcyBvYmplY3RGb3JLZXk6QCJBWFN0YXJ0VGV4dE1h
cmtlclJhbmdlIl0pKTsKKyAgICBjcml0ZXJpYS5maXJzdCA9IHJhbmdlRm9yVGV4dE1hcmtlclJh
bmdlKGF4T2JqZWN0Q2FjaGUsIChBWFRleHRNYXJrZXJSYW5nZVJlZilbcGFyYW1zIG9iamVjdEZv
cktleTpAIkFYU3RhcnRUZXh0TWFya2VyUmFuZ2UiXSk7CiAKICAgICBOU051bWJlciAqZm9yd2Fy
ZCA9IFtwYXJhbXMgb2JqZWN0Rm9yS2V5Ok5TQWNjZXNzaWJpbGl0eVNlYXJjaFRleHREaXJlY3Rp
b25dOwogICAgIGlmIChbZm9yd2FyZCBpc0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKQpA
QCAtNzMyLDUyICs3MjIsNiBAQCBzdGF0aWMgc3RkOjpwYWlyPE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbj4gYWNjZXNzaWJpbAogCiAjcHJhZ21hIG1h
cmsgVGV4dCBNYXJrZXIgaGVscGVycwogCi1zdGF0aWMgQk9PTCBnZXRCeXRlc0Zyb21BWFRleHRN
YXJrZXIoQ0ZUeXBlUmVmIHRleHRNYXJrZXIsIHZvaWQqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoKQot
ewotICAgIGlmICghdGV4dE1hcmtlcikKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgQVhUZXh0
TWFya2VyUmVmIHJlZiA9IChBWFRleHRNYXJrZXJSZWYpdGV4dE1hcmtlcjsKLSAgICBBU1NFUlQo
Q0ZHZXRUeXBlSUQocmVmKSA9PSBBWFRleHRNYXJrZXJHZXRUeXBlSUQoKSk7Ci0gICAgaWYgKENG
R2V0VHlwZUlEKHJlZikgIT0gQVhUZXh0TWFya2VyR2V0VHlwZUlEKCkpCi0gICAgICAgIHJldHVy
biBOTzsKLQotICAgIENGSW5kZXggZXhwZWN0ZWRMZW5ndGggPSBsZW5ndGg7Ci0gICAgaWYgKEFY
VGV4dE1hcmtlckdldExlbmd0aChyZWYpICE9IGV4cGVjdGVkTGVuZ3RoKQotICAgICAgICByZXR1
cm4gTk87Ci0KLSAgICBtZW1jcHkoYnl0ZXMsIEFYVGV4dE1hcmtlckdldEJ5dGVQdHIocmVmKSwg
bGVuZ3RoKTsKLSAgICByZXR1cm4gWUVTOwotfQotCi1zdGF0aWMgYm9vbCBpc1RleHRNYXJrZXJJ
Z25vcmVkKGlkIHRleHRNYXJrZXIpCi17Ci0gICAgaWYgKCF0ZXh0TWFya2VyKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7Ci0g
ICAgaWYgKCFnZXRCeXRlc0Zyb21BWFRleHRNYXJrZXIoKF9fYnJpZGdlIENGVHlwZVJlZil0ZXh0
TWFya2VyLCAmdGV4dE1hcmtlckRhdGEsIHNpemVvZih0ZXh0TWFya2VyRGF0YSkpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIHRleHRNYXJrZXJEYXRhLmlnbm9yZWQ7
Ci19Ci0KLS0gKEFjY2Vzc2liaWxpdHlPYmplY3QqKWFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0
TWFya2VyOihpZCl0ZXh0TWFya2VyCi17Ci0gICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlPYmplY3RG
b3JUZXh0TWFya2VyKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRN
YXJrZXIpOwotfQotCi1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eU9i
amVjdEZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaGUsIGlkIHRleHRNYXJrZXIpCi17
Ci0gICAgaWYgKCF0ZXh0TWFya2VyIHx8ICFjYWNoZSB8fCBpc1RleHRNYXJrZXJJZ25vcmVkKHRl
eHRNYXJrZXIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBUZXh0TWFya2Vy
RGF0YSB0ZXh0TWFya2VyRGF0YTsKLSAgICBpZiAoIWdldEJ5dGVzRnJvbUFYVGV4dE1hcmtlcigo
X19icmlkZ2UgQ0ZUeXBlUmVmKXRleHRNYXJrZXIsICZ0ZXh0TWFya2VyRGF0YSwgc2l6ZW9mKHRl
eHRNYXJrZXJEYXRhKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBjYWNo
ZS0+YWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXJEYXRhKHRleHRNYXJrZXJEYXRhKTsK
LX0KLQogc3RhdGljIGlkIG5leHRUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KEFYT2JqZWN0
Q2FjaGUqIGNhY2hlLCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKIHsKICAgICBp
ZiAoIWNhY2hlKQpAQCAtODEyLDcxICs3NTYsMjQgQEAgc3RhdGljIGlkIHByZXZpb3VzVGV4dE1h
cmtlckZvckNoYXJhY3Rlck9mZnNldChBWE9iamVjdENhY2hlKiBjYWNoZSwgQ2hhcmFjdGVyT2YK
ICAgICByZXR1cm4gcHJldmlvdXNUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KHNlbGYuYXhC
YWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIGNoYXJhY3Rlck9mZnNldCk7CiB9CiAKLS0g
KGlkKXRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6KENoYXJhY3Rlck9mZnNldCYpY2hhcmFj
dGVyT2Zmc2V0Ci17Ci0gICAgcmV0dXJuIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgY2hhcmFjdGVyT2Zmc2V0KTsKLX0K
LQotc3RhdGljIGlkIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoQVhPYmplY3RDYWNoZSog
Y2FjaGUsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQotewotICAgIGlm
ICghY2FjaGUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgVGV4dE1hcmtlckRhdGEg
dGV4dE1hcmtlckRhdGE7Ci0gICAgY2FjaGUtPnRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zm
c2V0KHRleHRNYXJrZXJEYXRhLCBjaGFyYWN0ZXJPZmZzZXQpOwotICAgIGlmICghdGV4dE1hcmtl
ckRhdGEuYXhJRCAmJiAhdGV4dE1hcmtlckRhdGEuaWdub3JlZCkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICAKLSAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2UoQVhUZXh0TWFya2VyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBVSW50OCopJnRleHRNYXJrZXJEYXRhLCBzaXpl
b2YodGV4dE1hcmtlckRhdGEpKSk7Ci19Ci0KLS0gKE9wdGlvbmFsPFNpbXBsZVJhbmdlPilyYW5n
ZUZvclRleHRNYXJrZXJSYW5nZTooaWQpdGV4dE1hcmtlclJhbmdlCi17Ci0gICAgaWYgKCF0ZXh0
TWFya2VyUmFuZ2UpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgCi0gICAgaWQg
c3RhcnRUZXh0TWFya2VyID0gQVhUZXh0TWFya2VyUmFuZ2VTdGFydCh0ZXh0TWFya2VyUmFuZ2Up
OwotICAgIGlkIGVuZFRleHRNYXJrZXIgPSBBWFRleHRNYXJrZXJSYW5nZUVuZCh0ZXh0TWFya2Vy
UmFuZ2UpOwotICAgIAotICAgIGlmICghc3RhcnRUZXh0TWFya2VyIHx8ICFlbmRUZXh0TWFya2Vy
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIAotICAgIEFYT2JqZWN0Q2FjaGUq
IGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKLSAgICBpZiAo
IWNhY2hlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIAotICAgIENoYXJhY3Rl
ck9mZnNldCBzdGFydENoYXJhY3Rlck9mZnNldCA9IFtzZWxmIGNoYXJhY3Rlck9mZnNldEZvclRl
eHRNYXJrZXI6c3RhcnRUZXh0TWFya2VyXTsKLSAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kQ2hhcmFj
dGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjplbmRUZXh0TWFy
a2VyXTsKLSAgICByZXR1cm4gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0
cyhzdGFydENoYXJhY3Rlck9mZnNldCwgZW5kQ2hhcmFjdGVyT2Zmc2V0KTsKLX0KLQotc3RhdGlj
IENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlLCBDRlR5cGVSZWYgdGV4dE1hcmtlcikKLXsKLSAgICBpZiAoIWNhY2hlIHx8ICF0
ZXh0TWFya2VyKQotICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7Ci0gICAgCi0gICAg
VGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7Ci0gICAgaWYgKCFnZXRCeXRlc0Zyb21BWFRl
eHRNYXJrZXIodGV4dE1hcmtlciwgJnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4dE1hcmtlckRh
dGEpKSkKLSAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwotICAgIAotICAgIHJldHVy
biBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlckRhdGEodGV4dE1hcmtlckRhdGEp
OwotfQotCi0tIChDaGFyYWN0ZXJPZmZzZXQpY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjoo
aWQpdGV4dE1hcmtlcgotewotICAgIGF1dG8gKmJhY2tpbmdPYmplY3QgPSBzZWxmLmF4QmFja2lu
Z09iamVjdDsKLSAgICByZXR1cm4gYmFja2luZ09iamVjdCA/IGNoYXJhY3Rlck9mZnNldEZvclRl
eHRNYXJrZXIoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCAoX19icmlkZ2UgQ0ZUeXBl
UmVmKXRleHRNYXJrZXIpIDogbmlsOwotfQotCisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgbWV0aG9k
IHNpbmNlIGNsaWVudHMgc2hvdWxkIG5vdCBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QgYW5kIHNo
b3VsZCBub3QgYmUgZXhwb3NlZCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4KKy8vIEluc2lkZSBX
ZWJDb3JlLCB1c2UgV2ViQ29yZTo6dGV4dE1hcmtlckZyb21WaXNpYmxlUG9zaXRpb24gaW5zdGVh
ZC4KIC0gKGlkKXRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpcG9zaXRpb24KIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGF1dG8g
KmJhY2tpbmdPYmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdDsKLSAgICByZXR1cm4gYmFja2lu
Z09iamVjdCA/IHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oYmFja2luZ09iamVjdC0+YXhP
YmplY3RDYWNoZSgpLCBwb3NpdGlvbikgOiBuaWw7CisgICAgcmV0dXJuIGJhY2tpbmdPYmplY3Qg
PyAoaWQpdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihiYWNraW5nT2JqZWN0LT5heE9iamVj
dENhY2hlKCksIHBvc2l0aW9uKSA6IG5pbDsKIH0KIAogLSAoaWQpdGV4dE1hcmtlckZvckZpcnN0
UG9zaXRpb25JblRleHRDb250cm9sOihIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCAmKXRleHRD
b250cm9sCiB7Ci0gICAgYXV0byAqY2FjaGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBhdXRvKiBiYWNr
aW5nT2JqZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3Q7CisgICAgaWYgKCFiYWNraW5nT2JqZWN0
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgYXV0byogY2FjaGUgPSBiYWNraW5nT2JqZWN0
LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsK
IApAQCAtODg3LDMwICs3ODQsNiBAQCBzdGF0aWMgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9m
ZnNldEZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaGUsIENGVHlwZQogICAgIHJldHVy
biBDRkJyaWRnaW5nUmVsZWFzZShBWFRleHRNYXJrZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgKGNvbnN0IFVJbnQ4KikmdGV4dE1hcmtlckRhdGEudmFsdWUoKSwgc2l6ZW9mKHRleHRNYXJr
ZXJEYXRhLnZhbHVlKCkpKSk7CiB9CiAKLXN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBv
c2l0aW9uRm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hlKiBjYWNoZSwgQ0ZUeXBlUmVmIHRleHRN
YXJrZXIpCi17Ci0gICAgQVNTRVJUKGNhY2hlKTsKLSAgICBpZiAoIXRleHRNYXJrZXIpCi0gICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKLSAgICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFy
a2VyRGF0YTsKLSAgICBpZiAoIWdldEJ5dGVzRnJvbUFYVGV4dE1hcmtlcih0ZXh0TWFya2VyLCAm
dGV4dE1hcmtlckRhdGEsIHNpemVvZih0ZXh0TWFya2VyRGF0YSkpKQotICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIGNhY2hlLT52aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyRGF0YSh0ZXh0TWFya2VyRGF0YSk7Ci19Ci0KLXN0YXRpYyBWaXNpYmxlUG9zaXRp
b25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZShBWE9iamVjdENh
Y2hlKiBjYWNoZSwgaWQgdGV4dE1hcmtlclJhbmdlKQotewotICAgIHJldHVybiB7Ci0gICAgICAg
IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoY2FjaGUsIChfX2JyaWRnZSBDRlR5cGVSZWYp
QVhUZXh0TWFya2VyUmFuZ2VTdGFydCh0ZXh0TWFya2VyUmFuZ2UpKSwKLSAgICAgICAgdmlzaWJs
ZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihjYWNoZSwgKF9fYnJpZGdlIENGVHlwZVJlZilBWFRleHRN
YXJrZXJSYW5nZUVuZCh0ZXh0TWFya2VyUmFuZ2UpKQotICAgIH07Ci19Ci0KLS0gKFZpc2libGVQ
b3NpdGlvbil2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOihpZCl0ZXh0TWFya2VyCi17Ci0g
ICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoc2VsZi5heEJhY2tpbmdPYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKSwgKF9fYnJpZGdlIENGVHlwZVJlZil0ZXh0TWFya2VyKTsKLX0K
LQogLy8gV2hlbiBtb2RpZnlpbmcgYXR0cmlidXRlZCBzdHJpbmdzLCB0aGUgcmFuZ2UgY2FuIGNv
bWUgZnJvbSBhIHNvdXJjZSB3aGljaCBtYXkgcHJvdmlkZSBmYXVsdHkgaW5mb3JtYXRpb24gKGUu
Zy4gdGhlIHNwZWxsIGNoZWNrZXIpLgogLy8gVG8gcHJvdGVjdCBhZ2FpbnN0IHN1Y2ggY2FzZXMg
dGhlIHJhbmdlIHNob3VsZCBiZSB2YWxpZGF0ZWQgYmVmb3JlIGFkZGluZyBvciByZW1vdmluZyBh
dHRyaWJ1dGVzLgogc3RhdGljIEJPT0wgQVhBdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc1ZhbGlkKE5T
QXR0cmlidXRlZFN0cmluZyAqYXR0clN0cmluZywgTlNSYW5nZSByYW5nZSkKQEAgLTEyMDEsMTQg
KzEwNzQsMTQgQEAgc3RhdGljIE5TU3RyaW5nKiBuc1N0cmluZ0ZvclJlcGxhY2VkTm9kZShOb2Rl
KiByZXBsYWNlZE5vZGUpCiAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVy
czomYXR0YWNobWVudENoYXIgbGVuZ3RoOjFdOwogfQogCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcg
Kilkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTooaWQpdGV4dE1hcmtlclJh
bmdlIHNwZWxsQ2hlY2s6KEJPT0wpc3BlbGxDaGVjaworLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICop
ZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6KEFYVGV4dE1hcmtlclJhbmdl
UmVmKXRleHRNYXJrZXJSYW5nZSBzcGVsbENoZWNrOihCT09MKXNwZWxsQ2hlY2sKIHsKICAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhy
ZWFkPE5TQXR0cmlidXRlZFN0cmluZyAqPihbJnRleHRNYXJrZXJSYW5nZSwgJnNwZWxsQ2hlY2ss
IHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxOU0F0dHJp
YnV0ZWRTdHJpbmc+IHsKICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNl
bGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OwogICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAg
ICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgIGF1dG8gcmFuZ2UgPSBbcHJvdGVjdGVk
U2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAgICBh
dXRvIHJhbmdlID0gcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2UoYmFja2luZ09iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpLCB0ZXh0TWFya2VyUmFuZ2UpOwogICAgICAgICBpZiAoIXJhbmdlKQogICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgYXV0byBhdHRyU3RyaW5nID0gYWRvcHROUyhbW05T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdKTsKQEAgLTEyNDcsNiArMTEyMCw4
IEBAIHN0YXRpYyBOU1N0cmluZyogbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFj
ZWROb2RlKQogICAgIH0pOwogfQogCisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgbWV0aG9kIHNpbmNl
IGNsaWVudHMgc2hvdWxkIG5vdCBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QgYW5kIHNob3VsZCBu
b3QgYmUgZXhwb3NlZCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4KKy8vIEluc2lkZSBXZWJDb3Jl
LCB1c2UgV2ViQ29yZTo6dGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMgaW5zdGVh
ZC4KIC0gKGlkKXRleHRNYXJrZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOihjb25zdCBWaXNp
YmxlUG9zaXRpb24mKXN0YXJ0UG9zaXRpb24gZW5kUG9zaXRpb246KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpZW5kUG9zaXRpb24KIHsKICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVB
dXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnN0YXJ0UG9zaXRpb24sICZlbmRQ
b3NpdGlvbiwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRy
PGlkPiB7CkBAIC0xMjU0LDcgKzExMjksNyBAQCBzdGF0aWMgTlNTdHJpbmcqIG5zU3RyaW5nRm9y
UmVwbGFjZWROb2RlKE5vZGUqIHJlcGxhY2VkTm9kZSkKICAgICAgICAgaWYgKCFiYWNraW5nT2Jq
ZWN0KQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICByZXR1cm4gdGV4dE1hcmtl
clJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgp
LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgICAgIHJldHVybiAoaWQpdGV4dE1h
cmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNo
ZSgpLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiAgICAgfSk7CiB9CiAKQEAgLTE4MTMs
MTEgKzE2ODgsNiBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBy
ZXR1cm4gb2JqZWN0QXR0cmlidXRlczsKIH0KIAotLSAoVmlzaWJsZVBvc2l0aW9uUmFuZ2Updmlz
aWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJSYW5nZQot
ewotICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZShzZWxm
LmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyUmFuZ2UpOwotfQot
CiAtIChOU0FycmF5KilyZW5kZXJXaWRnZXRDaGlsZHJlbgogewogICAgIGF1dG8qIGJhY2tpbmdP
YmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdDsKQEAgLTE4NDYsOSArMTcxNiw5IEBAIHN0YXRp
YyB2b2lkIGNvbnZlcnRUb1ZlY3RvcihOU0FycmF5KiBhcnJheSwgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoCiAgICAgfQogfQogCi0tIChpZCl0ZXh0TWFya2VyUmFuZ2VGb3JT
ZWxlY3Rpb24KKy0gKEFYVGV4dE1hcmtlclJhbmdlUmVmKXRleHRNYXJrZXJSYW5nZUZvclNlbGVj
dGlvbgogewotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZh
bHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFtwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAo
KSAtPiBSZXRhaW5QdHI8aWQ+IHsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVB
dXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPEFYVGV4dE1hcmtlclJhbmdlUmVmPihbcHJv
dGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPEFYVGV4dE1hcmtl
clJhbmdlUmVmPiB7CiAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxm
LmdldCgpLmF4QmFja2luZ09iamVjdDsKICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTE4NTYsNiArMTcyNiw3IEBAIHN0YXRpYyB2b2lkIGNv
bnZlcnRUb1ZlY3RvcihOU0FycmF5KiBhcnJheSwgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoCiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gYmFja2luZ09i
amVjdC0+c2VsZWN0aW9uKCk7CiAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCiAgICAg
ICAgICAgICByZXR1cm4gbmlsOworCiAgICAgICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9t
VmlzaWJsZVBvc2l0aW9ucyhiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHNlbGVjdGlv
bi52aXNpYmxlU3RhcnQoKSwgc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CiAgICAgfSk7CiB9CkBA
IC0yNDAyLDcgKzIyNzMsOCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQK
ICAgICAgICAgLy8gVE9ETzogR2V0IGFjdHVhbCB2aXNpYmxlIHJhbmdlLiA8cmRhcjovL3Byb2Js
ZW0vNDcxMjEwMT4KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzog
TlNBY2Nlc3NpYmlsaXR5VmlzaWJsZUNoYXJhY3RlclJhbmdlQXR0cmlidXRlXSkKICAgICAgICAg
ICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSA/IG5pbCA6IFtOU1Zh
bHVlIHZhbHVlV2l0aFJhbmdlOiBOU01ha2VSYW5nZSgwLCBiYWNraW5nT2JqZWN0LT50ZXh0TGVu
Z3RoKCkpXTsKLSAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5SW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyQXR0cmlidXRlXSkgeworCisgICAg
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5z
ZXJ0aW9uUG9pbnRMaW5lTnVtYmVyQXR0cmlidXRlXSkgewogICAgICAgICAgICAgLy8gaWYgc2Vs
ZWN0aW9uRW5kID4gMCwgdGhlbiB0aGVyZSBpcyBzZWxlY3RlZCB0ZXh0IGFuZCB0aGlzIHF1ZXN0
aW9uIHNob3VsZCBub3QgYmUgYW5zd2VyZWQKICAgICAgICAgICAgIGlmIChiYWNraW5nT2JqZWN0
LT5pc1Bhc3N3b3JkRmllbGQoKSB8fCBiYWNraW5nT2JqZWN0LT5zZWxlY3Rpb25FbmQoKSA+IDAp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTI3ODIsMjEgKzI2NTQsMjUgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIHJldHVybiBOU0FjY2Vz
c2liaWxpdHlWZXJ0aWNhbE9yaWVudGF0aW9uVmFsdWU7CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTZWxlY3RlZFRleHRNYXJrZXJSYW5nZSJdKQotICAgICAg
ICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uXTsKKyAgICAgICAgcmV0
dXJuIChpZClbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dOwogCiAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpAIkFYU3RhcnRUZXh0TWFya2VyIl0pIHsKICAg
ICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9t
TWFpblRocmVhZDxpZD4oW3Byb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJl
dGFpblB0cjxpZD4gewotICAgICAgICAgICAgaWYgKGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90
ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
W3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpzdGFydE9mRG9jdW1l
bnQoYmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSldOwotICAgICAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4
QmFja2luZ09iamVjdDsKKyAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICAgICByZXR1cm4gKGlkKXRleHRNYXJrZXJG
b3JWaXNpYmxlUG9zaXRpb24oYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBzdGFydE9m
RG9jdW1lbnQoYmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSkpOwogICAgICAgICB9KTsKICAgICB9
CiAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhFbmRUZXh0TWFy
a2VyIl0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVh
c2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3Byb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2Vs
ZildICgpIC0+IFJldGFpblB0cjxpZD4gewotICAgICAgICAgICAgaWYgKGF1dG8qIGJhY2tpbmdP
YmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpl
bmRPZkRvY3VtZW50KGJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCkpXTsKLSAgICAgICAgICAgIHJl
dHVybiBuaWw7CisgICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2Vs
Zi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CisgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3Qp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICAgICAgcmV0dXJuIChpZCl0
ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUo
KSwgZW5kT2ZEb2N1bWVudChiYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpKSk7CiAgICAgICAgIH0p
OwogICAgIH0KIApAQCAtMzQ5MCw3ICszMzY2LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECiAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZCB0ZXh0TWFya2VyUmFuZ2UgPSBuaWw7CisgICAgQVhUZXh0TWFya2VyUmFuZ2VSZWYg
dGV4dE1hcmtlclJhbmdlID0gbmlsOwogICAgIE5TTnVtYmVyKiAgICAgICAgICAgICAgIG51bWJl
ciA9IG5pbDsKICAgICBOU1N0cmluZyogICAgICAgICAgICAgICBzdHJpbmcgPSBuaWw7CiAgICAg
TlNSYW5nZSAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7MCwgMH07CkBAIC0zNDk4LDcgKzMzNzQs
NyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgIC8vIGRlY29k
ZSB0aGUgcGFyYW1ldGVyCiAgICAgaWYgKEFYT2JqZWN0SXNUZXh0TWFya2VyUmFuZ2UodmFsdWUp
KQotICAgICAgICB0ZXh0TWFya2VyUmFuZ2UgPSB2YWx1ZTsKKyAgICAgICAgdGV4dE1hcmtlclJh
bmdlID0gKEFYVGV4dE1hcmtlclJhbmdlUmVmKXZhbHVlOwogICAgIGVsc2UgaWYgKFt2YWx1ZSBp
c0tpbmRPZkNsYXNzOltOU051bWJlciBjbGFzc11dKQogICAgICAgICBudW1iZXIgPSB2YWx1ZTsK
ICAgICBlbHNlIGlmIChbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKQEAg
LTM1MTMsNyArMzM4OSw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgICAgICBBU1NFUlQodGV4dE1hcmtlclJhbmdlKTsKICAgICAgICAgQWNjZXNzaWJpbGl0eTo6
cGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFsmdGV4dE1hcmtlclJhbmdlLCBwcm90ZWN0ZWRT
ZWxmID0gcmV0YWluUHRyKHNlbGYpXSB7CiAgICAgICAgICAgICBpZiAoYXV0byogYmFja2luZ09i
amVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0KQotICAgICAgICAgICAg
ICAgIGJhY2tpbmdPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoW3Byb3Rl
Y3RlZFNlbGYgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtl
clJhbmdlXSk7CisgICAgICAgICAgICAgICAgYmFja2luZ09iamVjdC0+c2V0U2VsZWN0ZWRWaXNp
YmxlUG9zaXRpb25SYW5nZSh2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZShi
YWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJSYW5nZSkpOwogICAgICAg
ICB9KTsKICAgICB9IGVsc2UgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNB
Y2Nlc3NpYmlsaXR5Rm9jdXNlZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgW3NlbGYgYmFzZUFjY2Vz
c2liaWxpdHlTZXRGb2N1czpbbnVtYmVyIGJvb2xWYWx1ZV1dOwpAQCAtMzYyMyw0MCArMzQ5OSw1
MyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICByZXR1cm4gY2hh
cmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmRvY3VtZW50
RWxlbWVudCksIHJhbmdlKTsKIH0KIAotLSAoTlNJbnRlZ2VyKV9pbmRleEZvclRleHRNYXJrZXI6
KGlkKW1hcmtlcgorLSAoTlNJbnRlZ2VyKV9pbmRleEZvclRleHRNYXJrZXI6KEFYVGV4dE1hcmtl
clJlZiltYXJrZXIKIHsKICAgICBpZiAoIW1hcmtlcikKICAgICAgICAgcmV0dXJuIE5TTm90Rm91
bmQ7Ci0gICAgCi0gICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdP
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKSkgewotICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFj
dGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjptYXJrZXJdOwot
ICAgICAgICBhdXRvIHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zm
c2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7Ci0gICAgICAgIGlmICghcmFu
Z2UpCisKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhy
ZWFkPE5TSW50ZWdlcj4oWyZtYXJrZXIsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZild
ICgpIC0+IE5TSW50ZWdlciB7CisgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0
ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKKyAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0
KQogICAgICAgICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7Ci0gICAgICAgIHJldHVybiBbc2VsZiBf
Y29udmVydFRvTlNSYW5nZToqcmFuZ2VdLmxvY2F0aW9uOwotICAgIH0KLSAgICByZXR1cm4gTlNO
b3RGb3VuZDsKKworICAgICAgICBpZiAoYXV0byogY2FjaGUgPSBiYWNraW5nT2JqZWN0LT5heE9i
amVjdENhY2hlKCkpIHsKKyAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZz
ZXQgPSBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyKGNhY2hlLCBtYXJrZXIpOworICAgICAg
ICAgICAgYXV0byByYW5nZSA9IGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNl
dHMoY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJPZmZzZXQpOworICAgICAgICAgICAgaWYgKCFy
YW5nZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKKworICAgICAgICAgICAg
cmV0dXJuIFtwcm90ZWN0ZWRTZWxmIF9jb252ZXJ0VG9OU1JhbmdlOipyYW5nZV0ubG9jYXRpb247
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKKyAgICB9KTsKIH0KIAot
LSAoaWQpX3RleHRNYXJrZXJGb3JJbmRleDooTlNJbnRlZ2VyKXRleHRJbmRleAorLSAoQVhUZXh0
TWFya2VyUmVmKV90ZXh0TWFya2VyRm9ySW5kZXg6KE5TSW50ZWdlcil0ZXh0SW5kZXgKIHsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRy
aWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8QVhUZXh0TWFya2VyUmVmPihbJnRl
eHRJbmRleCwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRy
PEFYVGV4dE1hcmtlclJlZj4geworICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVj
dGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CisgICAgICAgIGlmICghYmFja2luZ09iamVj
dCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBhdXRvKiBkb2N1bWVudCA9IHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
IHJldHVybiBuaWw7CisgICAgICAgIGF1dG8qIGNhY2hlID0gYmFja2luZ09iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpOworICAgICAgICBpZiAoIWNhY2hlKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsK
IAotICAgIGF1dG8qIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQo
KTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gbmlsOworICAgICAgICBhdXRv
KiBkb2N1bWVudCA9IGJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCk7CisgICAgICAgIGlmICghZG9j
dW1lbnQpCisgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgYXV0byogY2FjaGUgPSBzZWxm
LmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwotICAgIGlmICghY2FjaGUpCi0gICAg
ICAgIHJldHVybiBuaWw7CisgICAgICAgIGF1dG8qIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50
LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpCisgICAg
ICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgYXV0byBib3VuZGFyeSA9IHJlc29sdmVDaGFyYWN0
ZXJMb2NhdGlvbihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmRvY3VtZW50RWxlbWVu
dCksIHRleHRJbmRleCk7Ci0gICAgYXV0byBjaGFyYWN0ZXJPZmZzZXQgPSBjYWNoZS0+c3RhcnRP
ckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKG1ha2VTaW1wbGVSYW5nZShib3VuZGFyeSksIHRy
dWUpOwotICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OmNoYXJh
Y3Rlck9mZnNldF07CisgICAgICAgIGF1dG8gYm91bmRhcnkgPSByZXNvbHZlQ2hhcmFjdGVyTG9j
YXRpb24obWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpLCB0
ZXh0SW5kZXgpOworICAgICAgICBhdXRvIGNoYXJhY3Rlck9mZnNldCA9IGNhY2hlLT5zdGFydE9y
RW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UobWFrZVNpbXBsZVJhbmdlKGJvdW5kYXJ5KSwgdHJ1
ZSk7CisKKyAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoY2FjaGUs
IGNoYXJhY3Rlck9mZnNldCk7CisgICAgfSk7CiB9CiAKIC8vIFRoZSBSVEYgcmVwcmVzZW50YXRp
b24gb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWNjZXNzaWJpbGl0eSBvYmplY3Qg
dGhhdCBpcwpAQCAtMzY2OCwyNiArMzU1NywzMCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKIH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKLS0gKE5TU3RyaW5n
ICopZGVidWdEZXNjcmlwdGlvbkZvclRleHRNYXJrZXI6KGlkKXRleHRNYXJrZXIKKy0gKE5TU3Ry
aW5nICopZGVidWdEZXNjcmlwdGlvbkZvclRleHRNYXJrZXI6KEFYVGV4dE1hcmtlclJlZil0ZXh0
TWFya2VyCiB7Ci0gICAgcmV0dXJuIFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6
dGV4dE1hcmtlcl0uZGVidWdEZXNjcmlwdGlvbigpOwotCisgICAgcmV0dXJuIHZpc2libGVQb3Np
dGlvbkZvclRleHRNYXJrZXIoc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwg
dGV4dE1hcmtlcikuZGVidWdEZXNjcmlwdGlvbigpOwogfQogCi0tIChOU1N0cmluZyAqKWRlYnVn
RGVzY3JpcHRpb25Gb3JUZXh0TWFya2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJSYW5nZQorLSAoTlNT
dHJpbmcgKilkZWJ1Z0Rlc2NyaXB0aW9uRm9yVGV4dE1hcmtlclJhbmdlOihBWFRleHRNYXJrZXJS
YW5nZVJlZil0ZXh0TWFya2VyUmFuZ2UKIHsKLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNp
YmxlUG9zaXRpb25SYW5nZSA9IFtzZWxmIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtl
clJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisgICAgYXV0byogYmFja2luZ09iamVjdCA9IHNlbGYu
YXhCYWNraW5nT2JqZWN0OworICAgIGlmICghYmFja2luZ09iamVjdCkKKyAgICAgICAgcmV0dXJu
IEAiPG51bGw+IjsKKworICAgIGF1dG8gdmlzaWJsZVBvc2l0aW9uUmFuZ2UgPSB2aXNpYmxlUG9z
aXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZShiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hl
KCksIHRleHRNYXJrZXJSYW5nZSk7CiAgICAgaWYgKHZpc2libGVQb3NpdGlvblJhbmdlLmlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gQCI8bnVsbD4iOworCiAgICAgY2hhciBkZXNjcmlwdGlvblsy
MDQ4XTsKICAgICBmb3JtYXRGb3JEZWJ1Z2dlcih2aXNpYmxlUG9zaXRpb25SYW5nZSwgZGVzY3Jp
cHRpb24sIHNpemVvZihkZXNjcmlwdGlvbikpOwotICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5n
V2l0aFVURjhTdHJpbmc6ZGVzY3JpcHRpb25dOwogCisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJp
bmdXaXRoVVRGOFN0cmluZzpkZXNjcmlwdGlvbl07CiB9CiAKLS0gKHZvaWQpc2hvd05vZGVGb3JU
ZXh0TWFya2VyOihpZCl0ZXh0TWFya2VyCistICh2b2lkKXNob3dOb2RlRm9yVGV4dE1hcmtlcjoo
QVhUZXh0TWFya2VyUmVmKXRleHRNYXJrZXIKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvc2l0aW9uID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2Vy
XTsKKyAgICBhdXRvIHZpc2libGVQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJr
ZXIoc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlcik7CiAg
ICAgTm9kZSogbm9kZSA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CkBAIC0zNjk1LDkgKzM1
ODgsOSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBub2RlLT5z
aG93Tm9kZVBhdGhGb3JUaGlzKCk7CiB9CiAKLS0gKHZvaWQpc2hvd05vZGVUcmVlRm9yVGV4dE1h
cmtlcjooaWQpdGV4dE1hcmtlcgorLSAodm9pZClzaG93Tm9kZVRyZWVGb3JUZXh0TWFya2VyOihB
WFRleHRNYXJrZXJSZWYpdGV4dE1hcmtlcgogewotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zaXRpb24gPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOnRleHRNYXJrZXJd
OworICAgIGF1dG8gdmlzaWJsZVBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtl
cihzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyKTsKICAg
ICBOb2RlKiBub2RlID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRl
ZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKQEAgLTM3MzUsOSArMzYy
OCw5IEBAIGVudW0gY2xhc3MgVGV4dFVuaXQgewogICAgIFByZXZpb3VzTGluZVN0YXJ0LAogfTsK
IAotLSAoaWQpdGV4dE1hcmtlclJhbmdlQXRUZXh0TWFya2VyOihpZCl0ZXh0TWFya2VyIGZvclVu
aXQ6KFRleHRVbml0KXRleHRVbml0CistIChBWFRleHRNYXJrZXJSYW5nZVJlZil0ZXh0TWFya2Vy
UmFuZ2VBdFRleHRNYXJrZXI6KEFYVGV4dE1hcmtlclJlZil0ZXh0TWFya2VyIGZvclVuaXQ6KFRl
eHRVbml0KXRleHRVbml0CiB7Ci0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0
b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ0ZXh0TWFya2VyLCAmdGV4dFVuaXQs
IHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewor
ICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1h
aW5UaHJlYWQ8QVhUZXh0TWFya2VyUmFuZ2VSZWY+KFsmdGV4dE1hcmtlciwgJnRleHRVbml0LCBw
cm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8QVhUZXh0TWFy
a2VyUmFuZ2VSZWY+IHsKICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNl
bGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OwogICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAg
ICAgICAgICAgICByZXR1cm4gbmlsOwpAQCAtMzc3MCw5ICszNjYzLDkgQEAgZW51bSBjbGFzcyBU
ZXh0VW5pdCB7CiAgICAgfSk7CiB9CiAKLS0gKGlkKWxpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0
TWFya2VyOihpZCl0ZXh0TWFya2VyIGZvclVuaXQ6KFRleHRVbml0KXRleHRVbml0CistIChBWFRl
eHRNYXJrZXJSYW5nZVJlZilsaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcjooQVhUZXh0
TWFya2VyUmVmKXRleHRNYXJrZXIgZm9yVW5pdDooVGV4dFVuaXQpdGV4dFVuaXQKIHsKLSAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhy
ZWFkPGlkPihbJnRleHRNYXJrZXIsICZ0ZXh0VW5pdCwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0
cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6
OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxBWFRleHRNYXJrZXJSYW5n
ZVJlZj4oWyZ0ZXh0TWFya2VyLCAmdGV4dFVuaXQsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIo
c2VsZildICgpIC0+IFJldGFpblB0cjxBWFRleHRNYXJrZXJSYW5nZVJlZj4gewogICAgICAgICBh
dXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7
CiAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAgICAgIHJldHVybiBuaWw7CkBA
IC0zODAyLDkgKzM2OTUsOSBAQCBlbnVtIGNsYXNzIFRleHRVbml0IHsKICAgICB9KTsKIH0KIAot
LSAoaWQpdGV4dE1hcmtlckZvclRleHRNYXJrZXI6KGlkKXRleHRNYXJrZXIgYXRVbml0OihUZXh0
VW5pdCl0ZXh0VW5pdAorLSAoQVhUZXh0TWFya2VyUmVmKXRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
OihBWFRleHRNYXJrZXJSZWYpdGV4dE1hcmtlciBhdFVuaXQ6KFRleHRVbml0KXRleHRVbml0CiB7
Ci0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9t
TWFpblRocmVhZDxpZD4oWyZ0ZXh0TWFya2VyLCAmdGV4dFVuaXQsIHByb3RlY3RlZFNlbGYgPSBy
ZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4geworICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8QVhUZXh0TWFy
a2VyUmVmPihbJnRleHRNYXJrZXIsICZ0ZXh0VW5pdCwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0
cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPEFYVGV4dE1hcmtlclJlZj4gewogICAgICAgICBhdXRv
KiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CiAg
ICAgICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAgICAgIHJldHVybiBuaWw7CkBAIC0z
ODY0LDggKzM3NTcsOCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAg
ICBpZiAoIWF0dHJpYnV0ZSB8fCAhcGFyYW1ldGVyKQogICAgICAgICByZXR1cm4gbmlsOwogCi0g
ICAgaWQgdGV4dE1hcmtlciA9IG5pbDsKLSAgICBpZCB0ZXh0TWFya2VyUmFuZ2UgPSBuaWw7Cisg
ICAgQVhUZXh0TWFya2VyUmVmIHRleHRNYXJrZXIgPSBuaWw7CisgICAgQVhUZXh0TWFya2VyUmFu
Z2VSZWYgdGV4dE1hcmtlclJhbmdlID0gbmlsOwogICAgIE5TTnVtYmVyKiBudW1iZXIgPSBuaWw7
CiAgICAgTlNBcnJheSogYXJyYXkgPSBuaWw7CiAgICAgTlNEaWN0aW9uYXJ5KiBkaWN0aW9uYXJ5
ID0gbmlsOwpAQCAtMzg4MCw5ICszNzczLDkgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfRU5ECiAgICAgLy8gTk9URTogVGhpcyBhc3N1bWVzIG5pbCBpcyBub3QgYSB2YWxpZCBw
YXJhbWV0ZXIsIGJlY2F1c2UgaXQgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbQogICAgIC8vIGEg
cGFyYW1ldGVyIG9mIHRoZSB3cm9uZyB0eXBlLgogICAgIGlmIChBWE9iamVjdElzVGV4dE1hcmtl
cihwYXJhbWV0ZXIpKQotICAgICAgICB0ZXh0TWFya2VyID0gcGFyYW1ldGVyOworICAgICAgICB0
ZXh0TWFya2VyID0gKEFYVGV4dE1hcmtlclJlZilwYXJhbWV0ZXI7CiAgICAgZWxzZSBpZiAoQVhP
YmplY3RJc1RleHRNYXJrZXJSYW5nZShwYXJhbWV0ZXIpKQotICAgICAgICB0ZXh0TWFya2VyUmFu
Z2UgPSBwYXJhbWV0ZXI7CisgICAgICAgIHRleHRNYXJrZXJSYW5nZSA9IChBWFRleHRNYXJrZXJS
YW5nZVJlZilwYXJhbWV0ZXI7CiAgICAgZWxzZSBpZiAoW3BhcmFtZXRlciBpc0tpbmRPZkNsYXNz
OltXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBjbGFzc11dKQogICAgICAgICB1aUVsZW1l
bnQgPSBbKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilwYXJhbWV0ZXIgYXhCYWNraW5n
T2JqZWN0XTsKICAgICBlbHNlIGlmIChbcGFyYW1ldGVyIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVy
IGNsYXNzXV0pCkBAIC0zOTMzLDcgKzM4MjYsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICAgICAgICAgIGlmIChyYW5nZXMuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShyYW5n
ZXMsIFsmXSAoYXV0byYgcmFuZ2UpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGV4dE1hcmtl
clJhbmdlRnJvbVJhbmdlKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFuZ2UpOwor
ICAgICAgICAgICAgICAgIHJldHVybiAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKGJhY2tp
bmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFuZ2UpOwogICAgICAgICAgICAgfSkuYXV0b3Jl
bGVhc2UoKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtMzk0NCw3ICszODM3LDcgQEAgQUxMT1df
REVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBpZiAoIWJhY2tpbmdP
YmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKLSAgICAg
ICAgICAgIGF1dG8gdGV4dE9wZXJhdGlvbiA9IGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uRm9y
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZShwcm90ZWN0ZWRTZWxmLmdldCgpLCBkaWN0aW9uYXJ5KTsK
KyAgICAgICAgICAgIGF1dG8gdGV4dE9wZXJhdGlvbiA9IGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0
aW9uRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hl
KCksIGRpY3Rpb25hcnkpOwogICAgICAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPnBlcmZv
cm1UZXh0T3BlcmF0aW9uKHRleHRPcGVyYXRpb24pOwogICAgICAgICB9KTsKICAgICAgICAgaWYg
KG9wZXJhdGlvblJlc3VsdC5pc0VtcHR5KCkpCkBAIC0zOTc4LDcgKzM4NzEsOCBAQCBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgICAgICAgICAgSW50UmVjdCB3ZWJD
b3JlUmVjdCA9IFtwcm90ZWN0ZWRTZWxmIHNjcmVlblRvQ29udGVudHM6ZW5jbG9zaW5nSW50UmVj
dChyZWN0KV07CiAgICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0g
Y2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvckJvdW5kcyh3ZWJDb3JlUmVjdCwgZmFsc2UpOwotICAg
ICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZz
ZXQ6Y2hhcmFjdGVyT2Zmc2V0XTsKKworICAgICAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2Vy
Rm9yQ2hhcmFjdGVyT2Zmc2V0KGNhY2hlLCBjaGFyYWN0ZXJPZmZzZXQpOwogICAgICAgICB9KTsK
ICAgICB9CiAKQEAgLTM5OTQsNjIgKzM4ODgsNzAgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECiAKICAgICAgICAgICAgIEludFJlY3Qgd2ViQ29yZVJlY3QgPSBbcHJvdGVj
dGVkU2VsZiBzY3JlZW5Ub0NvbnRlbnRzOmVuY2xvc2luZ0ludFJlY3QocmVjdCldOwogICAgICAg
ICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IGNhY2hlLT5jaGFyYWN0ZXJP
ZmZzZXRGb3JCb3VuZHMod2ViQ29yZVJlY3QsIHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIFtw
cm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0
XTsKKworICAgICAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0
KGNhY2hlLCBjaGFyYWN0ZXJPZmZzZXQpOwogICAgICAgICB9KTsKICAgICB9CiAKICAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5TGluZVRleHRNYXJrZXJS
YW5nZUZvclRleHRNYXJrZXJQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJu
IFtzZWxmIGxpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIgZm9yVW5p
dDpUZXh0VW5pdDo6TGluZV07CisgICAgICAgIHJldHVybiAoaWQpW3NlbGYgbGluZVRleHRNYXJr
ZXJSYW5nZUZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBmb3JVbml0OlRleHRVbml0OjpMaW5lXTsK
IAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlNaXNz
cGVsbGluZ1RleHRNYXJrZXJSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAg
IGF1dG8gY3JpdGVyaWEgPSBhY2Nlc3NpYmlsaXR5TWlzc3BlbGxpbmdTZWFyY2hDcml0ZXJpYUZv
clBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUoc2VsZiwgZGljdGlvbmFyeSk7Ci0gICAgICAgIHJldHVy
biBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8
aWQ+KFsmY3JpdGVyaWEsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJl
dGFpblB0cjxpZD4geworICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRv
cmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJmRpY3Rpb25hcnksIHByb3RlY3RlZFNl
bGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewogICAgICAgICAgICAg
YXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0
OwogICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVy
biBuaWw7CiAKKyAgICAgICAgICAgIGF1dG8qIGNhY2hlID0gYmFja2luZ09iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpOworICAgICAgICAgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbmlsOworCisgICAgICAgICAgICBhdXRvIGNyaXRlcmlhID0gYWNjZXNzaWJpbGl0eU1pc3Nw
ZWxsaW5nU2VhcmNoQ3JpdGVyaWFGb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKGNhY2hlLCBkaWN0
aW9uYXJ5KTsKICAgICAgICAgICAgIGlmIChhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBiYWNraW5n
T2JqZWN0LT5taXNzcGVsbGluZ1JhbmdlKCpjcml0ZXJpYS5maXJzdCwgY3JpdGVyaWEuc2Vjb25k
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKGJhY2tp
bmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgKm1pc3NwZWxsaW5nUmFuZ2UpOworICAgICAgICAg
ICAgICAgIHJldHVybiAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKGNhY2hlLCAqbWlzc3Bl
bGxpbmdSYW5nZSk7CisKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIH0pOwogICAg
IH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlU
ZXh0TWFya2VySXNWYWxpZFBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CiAgICAgICAgIGJvb2wg
cmVzdWx0ID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGJvb2w+
KFsmdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gYm9v
bCB7Ci0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zID0gW3Byb3RlY3RlZFNlbGYgdmlz
aWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKLSAgICAgICAgICAgIHJldHVy
biAhcG9zLmlzTnVsbCgpOworICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3Rl
Y3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OworICAgICAgICAgICAgaWYgKCFiYWNraW5n
T2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgcmV0
dXJuICF2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKSwgdGV4dE1hcmtlcikuaXNOdWxsKCk7CiAgICAgICAgIH0pOworCiAgICAgICAgIHJl
dHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6cmVzdWx0XTsKICAgICB9CiAKLSAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhGb3JUZXh0TWFy
a2VyUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBBY2Nl
c3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8TlNJbnRlZ2VyPihbJnRleHRN
YXJrZXIsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IE5TSW50ZWdlciB7
Ci0gICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgX2luZGV4Rm9yVGV4dE1hcmtlcjp0
ZXh0TWFya2VyXTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEludGVnZXI6cmVzdWx0XTsKLSAgICB9CisgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUluZGV4Rm9yVGV4dE1hcmtlclBhcmFtZXRlcml6ZWRBdHRy
aWJ1dGVdKQorICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOltzZWxm
IF9pbmRleEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl1dOwogCi0gICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJGb3JJbmRleFBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2
ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmbnVtYmVyLCBwcm90ZWN0ZWRT
ZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKLSAgICAgICAgICAg
IHJldHVybiBbcHJvdGVjdGVkU2VsZiBfdGV4dE1hcmtlckZvckluZGV4OltudW1iZXIgaW50ZWdl
clZhbHVlXV07Ci0gICAgICAgIH0pOwotICAgIH0KKyAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlckZvckluZGV4UGFyYW1ldGVyaXplZEF0
dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiAoaWQpW3NlbGYgX3RleHRNYXJrZXJGb3JJbmRleDpb
bnVtYmVyIGludGVnZXJWYWx1ZV1dOwogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhVSUVsZW1lbnRGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgLy8gRklYTUU6IHdl
IG5lZWQgdG8gcmV0dXJuIGFuIElzb2xhdGVkT2JqZWN0IGlmIHRoaXMgaXMgY2FsbGVkIG9uIHRo
ZSBBWCB0aHJlYWQuCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9y
ZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmdGV4dE1hcmtlciwgcHJvdGVjdGVkU2Vs
ZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Ci0gICAgICAgICAgICBh
dXRvKiBheE9iamVjdCA9IFtwcm90ZWN0ZWRTZWxmIGFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0
TWFya2VyOnRleHRNYXJrZXJdOworICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHBy
b3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OworICAgICAgICAgICAgaWYgKCFiYWNr
aW5nT2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgICAgIGF1
dG8qIGF4T2JqZWN0ID0gYWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXIoYmFja2luZ09i
amVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyKTsKICAgICAgICAgICAgIGlmICghYXhP
YmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKwogICAgICAgICAgICAgaWYgKGF4
T2JqZWN0LT5pc0F0dGFjaG1lbnQoKSAmJiBbYXhPYmplY3QtPndyYXBwZXIoKSBhdHRhY2htZW50
Vmlld10pCiAgICAgICAgICAgICAgICAgcmV0dXJuIFtheE9iamVjdC0+d3JhcHBlcigpIGF0dGFj
aG1lbnRWaWV3XTsKKwogICAgICAgICAgICAgcmV0dXJuIGF4T2JqZWN0LT53cmFwcGVyKCk7CiAg
ICAgICAgIH0pOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpA
IkFYVGV4dE1hcmtlclJhbmdlRm9yVUlFbGVtZW50Il0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ1
aUVsZW1lbnRdICgpIC0+IFJldGFpblB0cjxpZD4gewotICAgICAgICAgICAgcmV0dXJuIHRleHRN
YXJrZXJSYW5nZUZyb21SYW5nZSh1aUVsZW1lbnQuZ2V0KCktPmF4T2JqZWN0Q2FjaGUoKSwgdWlF
bGVtZW50LmdldCgpLT5lbGVtZW50UmFuZ2UoKSk7CisgICAgICAgICAgICByZXR1cm4gKGlkKXRl
eHRNYXJrZXJSYW5nZUZyb21SYW5nZSh1aUVsZW1lbnQuZ2V0KCktPmF4T2JqZWN0Q2FjaGUoKSwg
dWlFbGVtZW50LmdldCgpLT5lbGVtZW50UmFuZ2UoKSk7CiAgICAgICAgIH0pOwogICAgIH0KIApA
QCAtNDA1OSw3ICszOTYxLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5E
CiAgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IC0xOwogCi0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFtwcm90ZWN0
ZWRTZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CisgICAgICAg
ICAgICBhdXRvIHZpc2libGVQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGJhY2tp
bmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlcik7CiAgICAgICAgICAgICByZXR1
cm4gYmFja2luZ09iamVjdC0+bGluZUZvclBvc2l0aW9uKHZpc2libGVQb3MpOwogICAgICAgICB9
KTsKICAgICAgICAgcmV0dXJuIEAocmVzdWx0KTsKQEAgLTQwNzQsMjIgKzM5NzYsMjYgQEAgQUxM
T1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBWaXNpYmxlUG9z
aXRpb25SYW5nZSB2cFJhbmdlOwogICAgICAgICAgICAgaWYgKFtudW1iZXIgdW5zaWduZWRJbnRl
Z2VyVmFsdWVdICE9IE5TTm90Rm91bmQpCiAgICAgICAgICAgICAgICAgdnBSYW5nZSA9IGJhY2tp
bmdPYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZShbbnVtYmVyIHVuc2lnbmVkSW50
VmFsdWVdKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBv
c2l0aW9ucyhiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHZwUmFuZ2Uuc3RhcnQsIHZw
UmFuZ2UuZW5kKTsKKworICAgICAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9t
VmlzaWJsZVBvc2l0aW9ucyhiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHZwUmFuZ2Uu
c3RhcnQsIHZwUmFuZ2UuZW5kKTsKICAgICAgICAgfSk7CiAgICAgfQogCiAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewog
ICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFk
PFN0cmluZz4oWyZ0ZXh0TWFya2VyUmFuZ2UsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2Vs
ZildICgpIC0+IFN0cmluZyB7Ci0gICAgICAgICAgICBhdXRvIHJhbmdlID0gW3Byb3RlY3RlZFNl
bGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKICAgICAgICAgICAg
IGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVj
dDsKLSAgICAgICAgICAgIHJldHVybiAocmFuZ2UgJiYgYmFja2luZ09iamVjdCkgPyBiYWNraW5n
T2JqZWN0LT5zdHJpbmdGb3JSYW5nZSgqcmFuZ2UpIDogU3RyaW5nKCk7CisgICAgICAgICAgICBp
ZiAoIWJhY2tpbmdPYmplY3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisg
ICAgICAgICAgICBhdXRvIHJhbmdlID0gcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2UoYmFja2luZ09i
amVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyUmFuZ2UpOworICAgICAgICAgICAgcmV0
dXJuIHJhbmdlID8gYmFja2luZ09iamVjdC0+c3RyaW5nRm9yUmFuZ2UoKnJhbmdlKSA6IFN0cmlu
ZygpOwogICAgICAgICB9KTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWFRleHRNYXJrZXJGb3JQb3NpdGlvbiJdKSB7Ci0gICAgICAgIEludFBvaW50IHdl
YkNvcmVQb2ludCA9IEludFBvaW50KHBvaW50KTsKICAgICAgICAgaWYgKCFwb2ludFNldCkKICAg
ICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIEludFBvaW50IHdlYkNvcmVQb2ludCA9IElu
dFBvaW50KHBvaW50KTsKIAogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVB
dXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJndlYkNvcmVQb2ludCwgcHJvdGVj
dGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7CiAgICAgICAg
ICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdP
YmplY3Q7CkBAIC00MTAxLDcgKzQwMDcsOCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19FTkQKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgICAgICAgICBDaGFy
YWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvclBv
aW50KHdlYkNvcmVQb2ludCwgYmFja2luZ09iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gW3By
b3RlY3RlZFNlbGYgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRd
OworCisgICAgICAgICAgICByZXR1cm4gKGlkKXRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQo
Y2FjaGUsIGNoYXJhY3Rlck9mZnNldCk7CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtNDExMCw5
ICs0MDE3LDExIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAg
ICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5n
T2JqZWN0OwogICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAg
IHJldHVybiBDR1JlY3RaZXJvOwotICAgICAgICAgICAgYXV0byByYW5nZSA9IFtwcm90ZWN0ZWRT
ZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisKKyAgICAgICAg
ICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvclRleHRNYXJrZXJSYW5nZShiYWNraW5nT2JqZWN0LT5h
eE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJSYW5nZSk7CiAgICAgICAgICAgICBpZiAoIXJhbmdl
KQogICAgICAgICAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOworCiAgICAgICAgICAgICBhdXRv
IGJvdW5kcyA9IEZsb2F0UmVjdChiYWNraW5nT2JqZWN0LT5ib3VuZHNGb3JSYW5nZSgqcmFuZ2Up
KTsKICAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiBjb252ZXJ0UmVjdFRvU3BhY2U6
Ym91bmRzIHNwYWNlOkFjY2Vzc2liaWxpdHlDb252ZXJzaW9uU3BhY2U6OlNjcmVlbl07CiAgICAg
ICAgIH0pOwpAQCAtNDE2NiwxNyArNDA3NSwyMSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEF0dHJp
YnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2VXaXRoT3B0aW9ucyJdKSB7CiAgICAgICAgIGlm
ICh0ZXh0TWFya2VyUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gW3NlbGYgZG9BWEF0dHJpYnV0
ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlIHNwZWxsQ2hlY2s6Tk9d
OworCiAgICAgICAgIGlmIChkaWN0aW9uYXJ5KSB7Ci0gICAgICAgICAgICBpZCB0ZXh0TWFya2Vy
UmFuZ2UgPSBuaWw7CisgICAgICAgICAgICBBWFRleHRNYXJrZXJSYW5nZVJlZiB0ZXh0TWFya2Vy
UmFuZ2UgPSBuaWw7CiAgICAgICAgICAgICBpZCBwYXJhbWV0ZXIgPSBbZGljdGlvbmFyeSBvYmpl
Y3RGb3JLZXk6QCJBWFRleHRNYXJrZXJSYW5nZSJdOwogICAgICAgICAgICAgaWYgKEFYT2JqZWN0
SXNUZXh0TWFya2VyUmFuZ2UocGFyYW1ldGVyKSkKLSAgICAgICAgICAgICAgICB0ZXh0TWFya2Vy
UmFuZ2UgPSBwYXJhbWV0ZXI7CisgICAgICAgICAgICAgICAgdGV4dE1hcmtlclJhbmdlID0gKEFY
VGV4dE1hcmtlclJhbmdlUmVmKXBhcmFtZXRlcjsKKwogICAgICAgICAgICAgQk9PTCBzcGVsbENo
ZWNrID0gTk87CiAgICAgICAgICAgICBwYXJhbWV0ZXIgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JL
ZXk6QCJBWFNwZWxsQ2hlY2siXTsKICAgICAgICAgICAgIGlmIChbcGFyYW1ldGVyIGlzS2luZE9m
Q2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pCiAgICAgICAgICAgICAgICAgc3BlbGxDaGVjayA9IFtw
YXJhbWV0ZXIgYm9vbFZhbHVlXTsKKwogICAgICAgICAgICAgcmV0dXJuIFtzZWxmIGRvQVhBdHRy
aWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZSBzcGVsbENoZWNr
OnNwZWxsQ2hlY2tdOwogICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAK
QEAgLTQxODQsMTEgKzQwOTcsMTIgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
RU5ECiAgICAgICAgIGlmIChbYXJyYXkgY291bnRdIDwgMikKICAgICAgICAgICAgIHJldHVybiBu
aWw7CiAKLSAgICAgICAgaWQgdGV4dE1hcmtlcjEgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDowXTsK
LSAgICAgICAgaWQgdGV4dE1hcmtlcjIgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDoxXTsKLSAgICAg
ICAgaWYgKCFBWE9iamVjdElzVGV4dE1hcmtlcih0ZXh0TWFya2VyMSkgfHwgIUFYT2JqZWN0SXNU
ZXh0TWFya2VyKHRleHRNYXJrZXIyKSkKKyAgICAgICAgaWYgKCFBWE9iamVjdElzVGV4dE1hcmtl
cihbYXJyYXkgb2JqZWN0QXRJbmRleDowXSkgfHwgIUFYT2JqZWN0SXNUZXh0TWFya2VyKFthcnJh
eSBvYmplY3RBdEluZGV4OjBdKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKKyAgICAgICAg
QVhUZXh0TWFya2VyUmVmIHRleHRNYXJrZXIxID0gKEFYVGV4dE1hcmtlclJlZilbYXJyYXkgb2Jq
ZWN0QXRJbmRleDowXTsKKyAgICAgICAgQVhUZXh0TWFya2VyUmVmIHRleHRNYXJrZXIyID0gKEFY
VGV4dE1hcmtlclJlZilbYXJyYXkgb2JqZWN0QXRJbmRleDoxXTsKKwogICAgICAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlk
PihbJnRleHRNYXJrZXIxLCAmdGV4dE1hcmtlcjIsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIo
c2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewogICAgICAgICAgICAgYXV0byogYmFja2luZ09i
amVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OwogICAgICAgICAgICAg
aWYgKCFiYWNraW5nT2JqZWN0KQpAQCAtNDE5OCw2OCArNDExMiw4NSBAQCBBTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIGlmICghY2FjaGUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldDEgPSBbcHJvdGVjdGVkU2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2Vy
OnRleHRNYXJrZXIxXTsKLSAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZz
ZXQyID0gW3Byb3RlY3RlZFNlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFy
a2VyMl07CisgICAgICAgICAgICBhdXRvIGNoYXJhY3Rlck9mZnNldDEgPSBjaGFyYWN0ZXJPZmZz
ZXRGb3JUZXh0TWFya2VyKGNhY2hlLCB0ZXh0TWFya2VyMSk7CisgICAgICAgICAgICBhdXRvIGNo
YXJhY3Rlck9mZnNldDIgPSBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyKGNhY2hlLCB0ZXh0
TWFya2VyMik7CiAgICAgICAgICAgICBhdXRvIHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRl
cmVkQ2hhcmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQxLCBjaGFyYWN0ZXJPZmZzZXQyKTsK
LSAgICAgICAgICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UoY2FjaGUsIHJhbmdl
KTsKKworICAgICAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UoY2Fj
aGUsIHJhbmdlKTsKICAgICAgICAgfSk7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOkAiQVhOZXh0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewogICAgICAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWlu
VGhyZWFkPGlkPihbJnRleHRNYXJrZXIsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZild
ICgpIC0+IFJldGFpblB0cjxpZD4gewotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldCA9IFtwcm90ZWN0ZWRTZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6
dGV4dE1hcmtlcl07CisgICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVk
U2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CisgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmpl
Y3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICAgICAgYXV0byogY2Fj
aGUgPSBiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgICAgICBpZiAoIWNh
Y2hlKQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgICAgIENoYXJhY3Rl
ck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyKGNh
Y2hlLCB0ZXh0TWFya2VyKTsKICAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiBuZXh0
VGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOwogICAgICAgICB9
KTsKICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZp
b3VzVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnRleHRN
YXJrZXIsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxp
ZD4gewotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IFtwcm90
ZWN0ZWRTZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CisgICAg
ICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tp
bmdPYmplY3Q7CisgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgICAgICAgICAgYXV0byogY2FjaGUgPSBiYWNraW5nT2JqZWN0
LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgICAgICBpZiAoIWNhY2hlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJP
ZmZzZXQgPSBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyKGNhY2hlLCB0ZXh0TWFya2VyKTsK
ICAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiBwcmV2aW91c1RleHRNYXJrZXJGb3JD
aGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0XTsKICAgICAgICAgfSk7CiAgICAgfQogCiAg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhMZWZ0V29yZFRleHRNYXJrZXJS
YW5nZUZvclRleHRNYXJrZXIiXSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5n
ZUF0VGV4dE1hcmtlcjp0ZXh0TWFya2VyIGZvclVuaXQ6VGV4dFVuaXQ6OkxlZnRXb3JkXTsKKyAg
ICAgICAgcmV0dXJuIChpZClbc2VsZiB0ZXh0TWFya2VyUmFuZ2VBdFRleHRNYXJrZXI6dGV4dE1h
cmtlciBmb3JVbml0OlRleHRVbml0OjpMZWZ0V29yZF07CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6QCJBWFJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIi
XSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUF0VGV4dE1hcmtlcjp0ZXh0
TWFya2VyIGZvclVuaXQ6VGV4dFVuaXQ6OlJpZ2h0V29yZF07CisgICAgICAgIHJldHVybiAoaWQp
W3NlbGYgdGV4dE1hcmtlclJhbmdlQXRUZXh0TWFya2VyOnRleHRNYXJrZXIgZm9yVW5pdDpUZXh0
VW5pdDo6UmlnaHRXb3JkXTsKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpA
IkFYTGVmdExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pCi0gICAgICAgIHJldHVy
biBbc2VsZiBsaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGZvclVu
aXQ6VGV4dFVuaXQ6OkxlZnRMaW5lXTsKKyAgICAgICAgcmV0dXJuIChpZClbc2VsZiBsaW5lVGV4
dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGZvclVuaXQ6VGV4dFVuaXQ6Okxl
ZnRMaW5lXTsKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUmlnaHRM
aW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKQotICAgICAgICByZXR1cm4gW3NlbGYg
bGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBmb3JVbml0OlRleHRV
bml0OjpSaWdodExpbmVdOworICAgICAgICByZXR1cm4gKGlkKVtzZWxmIGxpbmVUZXh0TWFya2Vy
UmFuZ2VGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIgZm9yVW5pdDpUZXh0VW5pdDo6UmlnaHRMaW5l
XTsKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU2VudGVuY2VUZXh0
TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pCi0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFy
a2VyUmFuZ2VBdFRleHRNYXJrZXI6dGV4dE1hcmtlciBmb3JVbml0OlRleHRVbml0OjpTZW50ZW5j
ZV07CisgICAgICAgIHJldHVybiAoaWQpW3NlbGYgdGV4dE1hcmtlclJhbmdlQXRUZXh0TWFya2Vy
OnRleHRNYXJrZXIgZm9yVW5pdDpUZXh0VW5pdDo6U2VudGVuY2VdOwogCiAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0
TWFya2VyIl0pCi0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VBdFRleHRNYXJr
ZXI6dGV4dE1hcmtlciBmb3JVbml0OlRleHRVbml0OjpQYXJhZ3JhcGhdOworICAgICAgICByZXR1
cm4gKGlkKVtzZWxmIHRleHRNYXJrZXJSYW5nZUF0VGV4dE1hcmtlcjp0ZXh0TWFya2VyIGZvclVu
aXQ6VGV4dFVuaXQ6OlBhcmFncmFwaF07CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWE5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkKLSAgICAgICAg
cmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIgYXRVbml0OlRl
eHRVbml0OjpOZXh0V29yZEVuZF07CisgICAgICAgIHJldHVybiAoaWQpW3NlbGYgdGV4dE1hcmtl
ckZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBhdFVuaXQ6VGV4dFVuaXQ6Ok5leHRXb3JkRW5kXTsK
IAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNXb3JkU3Rh
cnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKQotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1h
cmtlckZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBhdFVuaXQ6VGV4dFVuaXQ6OlByZXZpb3VzV29y
ZFN0YXJ0XTsKKyAgICAgICAgcmV0dXJuIChpZClbc2VsZiB0ZXh0TWFya2VyRm9yVGV4dE1hcmtl
cjp0ZXh0TWFya2VyIGF0VW5pdDpUZXh0VW5pdDo6UHJldmlvdXNXb3JkU3RhcnRdOwogCiAgICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0TGluZUVuZFRleHRNYXJrZXJG
b3JUZXh0TWFya2VyIl0pCi0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVGV4dE1h
cmtlcjp0ZXh0TWFya2VyIGF0VW5pdDpUZXh0VW5pdDo6TmV4dExpbmVFbmRdOworICAgICAgICBy
ZXR1cm4gKGlkKVtzZWxmIHRleHRNYXJrZXJGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIgYXRVbml0
OlRleHRVbml0OjpOZXh0TGluZUVuZF07CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWFByZXZpb3VzTGluZVN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkKLSAg
ICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIgYXRV
bml0OlRleHRVbml0OjpQcmV2aW91c0xpbmVTdGFydF07CisgICAgICAgIHJldHVybiAoaWQpW3Nl
bGYgdGV4dE1hcmtlckZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBhdFVuaXQ6VGV4dFVuaXQ6OlBy
ZXZpb3VzTGluZVN0YXJ0XTsKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpA
IkFYTmV4dFNlbnRlbmNlRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkKLSAgICAgICAgcmV0
dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIgYXRVbml0OlRleHRV
bml0OjpOZXh0U2VudGVuY2VFbmRdOworICAgICAgICByZXR1cm4gKGlkKVtzZWxmIHRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIgYXRVbml0OlRleHRVbml0OjpOZXh0U2VudGVuY2VF
bmRdOwogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91c1Nl
bnRlbmNlU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKQotICAgICAgICByZXR1cm4gW3Nl
bGYgdGV4dE1hcmtlckZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBhdFVuaXQ6VGV4dFVuaXQ6OlBy
ZXZpb3VzU2VudGVuY2VTdGFydF07CisgICAgICAgIHJldHVybiAoaWQpW3NlbGYgdGV4dE1hcmtl
ckZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBhdFVuaXQ6VGV4dFVuaXQ6OlByZXZpb3VzU2VudGVu
Y2VTdGFydF07CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRQ
YXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKQotICAgICAgICByZXR1cm4gW3Nl
bGYgdGV4dE1hcmtlckZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBhdFVuaXQ6VGV4dFVuaXQ6Ok5l
eHRQYXJhZ3JhcGhFbmRdOworICAgICAgICByZXR1cm4gKGlkKVtzZWxmIHRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyOnRleHRNYXJrZXIgYXRVbml0OlRleHRVbml0OjpOZXh0UGFyYWdyYXBoRW5kXTsK
IAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNQYXJhZ3Jh
cGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pCi0gICAgICAgIHJldHVybiBbc2VsZiB0
ZXh0TWFya2VyRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGF0VW5pdDpUZXh0VW5pdDo6UHJldmlv
dXNQYXJhZ3JhcGhTdGFydF07CisgICAgICAgIHJldHVybiAoaWQpW3NlbGYgdGV4dE1hcmtlckZv
clRleHRNYXJrZXI6dGV4dE1hcmtlciBhdFVuaXQ6VGV4dFVuaXQ6OlByZXZpb3VzUGFyYWdyYXBo
U3RhcnRdOwogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdHlsZVRl
eHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnRleHRN
YXJrZXIsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxp
ZD4gewpAQCAtNDI3Myw3ICs0MjA0LDggQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElP
TlNfRU5ECiAKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gdmlzaWJs
ZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihjYWNoZSwgdGV4dE1hcmtlcik7CiAgICAgICAgICAgICBW
aXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gYmFja2luZ09iamVjdC0+c3R5bGVSYW5nZUZv
clBvc2l0aW9uKHZpc2libGVQb3MpOwotICAgICAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5n
ZUZyb21WaXNpYmxlUG9zaXRpb25zKGNhY2hlLCB2cFJhbmdlLnN0YXJ0LCB2cFJhbmdlLmVuZCk7
CisKKyAgICAgICAgICAgIHJldHVybiAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3Np
dGlvbnMoY2FjaGUsIHZwUmFuZ2Uuc3RhcnQsIHZwUmFuZ2UuZW5kKTsKICAgICAgICAgfSk7CiAg
ICAgfQogCkBAIC00MjgzLDcgKzQyMTUsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19FTkQKICAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKIAotICAgICAgICAgICAgYXV0byByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJh
bmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisgICAgICAgICAgICBhdXRv
IHJhbmdlID0gcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2UoYmFja2luZ09iamVjdC0+YXhPYmplY3RD
YWNoZSgpLCB0ZXh0TWFya2VyUmFuZ2UpOwogICAgICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHJldHVybiBBWE9iamVjdENhY2hlOjps
ZW5ndGhGb3JSYW5nZShTaW1wbGVSYW5nZSB7ICpyYW5nZSB9KTsKQEAgLTQyOTUsMTYgKzQyMjcs
MjUgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICAvLyBVc2Vk
IG9ubHkgYnkgRHVtcFJlbmRlclRyZWUgKHNvIGZhcikuCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOkAiQVhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewot
ICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZy
b21NYWluVGhyZWFkPGlkPihbJnRleHRNYXJrZXJSYW5nZSwgJmJhY2tpbmdPYmplY3QsIHByb3Rl
Y3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewotICAgICAg
ICAgICAgYXV0byByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdl
OnRleHRNYXJrZXJSYW5nZV07Ci0gICAgICAgICAgICByZXR1cm4gc3RhcnRPckVuZFRleHRNYXJr
ZXJGb3JSYW5nZShiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHJhbmdlLCB0cnVlKTsK
KyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVG
cm9tTWFpblRocmVhZDxpZD4oWyZ0ZXh0TWFya2VyUmFuZ2UsIHByb3RlY3RlZFNlbGYgPSByZXRh
aW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4geworICAgICAgICAgICAgYXV0byogYmFj
a2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OworICAgICAg
ICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvclRleHRNYXJrZXJSYW5nZShiYWNraW5n
T2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJSYW5nZSk7CisKKyAgICAgICAgICAg
IHJldHVybiAoaWQpc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZShiYWNraW5nT2JqZWN0LT5h
eE9iamVjdENhY2hlKCksIHJhbmdlLCB0cnVlKTsKICAgICAgICAgfSk7CiAgICAgfQogCiAgICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhFbmRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlclJhbmdlIl0pIHsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0
b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ0ZXh0TWFya2VyUmFuZ2UsICZiYWNr
aW5nT2JqZWN0LCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5Q
dHI8aWQ+IHsKLSAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBbcHJvdGVjdGVkU2VsZiByYW5nZUZv
clRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwotICAgICAgICAgICAgcmV0dXJuIHN0
YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2UoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgp
LCByYW5nZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVB
dXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnRleHRNYXJrZXJSYW5nZSwgcHJv
dGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7CisgICAg
ICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tp
bmdPYmplY3Q7CisgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgICAgICAgICAgYXV0byByYW5nZSA9IHJhbmdlRm9yVGV4dE1h
cmtlclJhbmdlKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlclJhbmdl
KTsKKyAgICAgICAgICAgIHJldHVybiAoaWQpc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZShi
YWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHJhbmdlLCBmYWxzZSk7CiAgICAgICAgIH0p
OwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415491</attachid>
            <date>2020-12-05 10:59:50 -0800</date>
            <delta_ts>2020-12-05 13:25:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219491-20201205135949.patch</filename>
            <type>text/plain</type>
            <size>63805</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODVkZDYxYmIyMDlhZjM4
ZWY3ZWI3ZGE2ZDlkOTBjZjM1NjhlZjVhZS4uMjZmYjIzMjA2ZjdiN2NiOGZlYzU3Y2Y1YTE5NmI2
ZGViODk3YWU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIwLTEyLTA0ICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVsaW5pbmFy
eSByZWZhY3RvcmluZyBvZiBUZXh0TWFya2VyIGFuZCBUZXh0TWFya2VyUmFuZ2UuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk0OTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBDaHJpcyBGbGVpemFjaC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLgorCisgICAgICAgIFRleHRNYXJrZXIgYW5kIFRleHRNYXJrZXJSYW5nZSBzaG91
bGQgYmVjb21lIGNsYXNzZXMgb24gdGhlaXIgb3duIHJpZ2h0LgorICAgICAgICBBcyBhIGZpcnN0
IHN0ZXAgaW4gdGhhdCBkaXJlY3Rpb24sIHRoaXMgcGF0Y2ggbW92ZXMgYWxsIHRoZSBzdGF0aWMK
KyAgICAgICAgZnVuY3Rpb25zIGluIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
IHRvIG1ha2UgY29udmVyc2lvbnMKKyAgICAgICAgYmV0d2VlbiBUZXh0TWFya2VycyBhbmQgVGV4
dE1hcmtlclJhbmdlcyB0byBhbmQgZnJvbSBvdGhlciB0eXBlcyB0bworICAgICAgICBBWE9iamVj
dENhY2hlTWFjLm1tLgorICAgICAgICBJbiBhZGRpdGlvbiwgcmVtb3ZlZCBhbGwgT2JqZWN0aXZl
QyB3cmFwcGVycyB0byB0aGVzZSBmdW5jdGlvbnMgYW5kCisgICAgICAgIGluc3RlYWQgY2FsbCB0
aGUgZnVuY3Rpb25zIGRpcmVjdGx5IHdoZXJlIG5lZWRlZC4gVGhpcyBpcyByZWxldmFudCBub3cK
KyAgICAgICAgd2l0aCB0aGUgYXJyaXZhbCBvZiBpc29sYXRlZCB0cmVlIG1vZGUgYmVjYXVzZSBp
dCBzYXZlcyBhIG5vbi10cml2aWFsCisgICAgICAgIGNhbGwgdG8gdGhlIHdyYXBwZXIncyBheEJh
Y2tpbmdPYmplY3QgZ2V0dGVyLiBGdXJ0aGVybW9yZSwgYWxsIHRoZQorICAgICAgICBjb252ZXJz
aW9uIGZ1bmN0aW9ucyBhcmUgZG9pbmcgbm93IHRoZSBhcHByb3ByaWF0ZSB0aHJlYWQgY2hlY2ss
IHNpbmNlCisgICAgICAgIHRoZXkgYWxsIG5lZWQgdG8gcnVuIG9uIHRoZSBtYWluIHRocmVhZC4K
KyAgICAgICAgRml4ZWQgdGhlIGhhbmRsaW5nIG9mIHRoZSBOU0FjY2Vzc2liaWxpdHlNaXNzcGVs
bGluZ1RleHRNYXJrZXJSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUKKyAgICAgICAgcmVxdWVz
dCB0aGF0IHdhcyBjYWxsaW5nIGFjY2Vzc2liaWxpdHlNaXNzcGVsbGluZ1NlYXJjaENyaXRlcmlh
Rm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZQorICAgICAgICBvZmYgb2YgdGhlIG1haW4gdGhyZWFk
LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmplY3RDYWNoZU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFuZ2VQbGF0Zm9y
bU5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBWFRleHRNYXJrZXJSYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjp0ZXh0TWFya2VyUmFuZ2VGcm9tTWFya2Vycyk6CisgICAgICAgIChX
ZWJDb3JlOjpBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYVGV4
dE1hcmtlclJhbmdlRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEJ5dGVzRnJvbUFYVGV4dE1h
cmtlcik6CisgICAgICAgIChXZWJDb3JlOjphY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtl
cik6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OnZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIpOgorICAgICAgICAo
V2ViQ29yZTo6dGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6dGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldCk6CisgICAgICAgIChXZWJD
b3JlOjpjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0
YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6dGV4dE1hcmtl
clJhbmdlRnJvbVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlRm9yVGV4dE1hcmtlclJh
bmdlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlck1hYy5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoYWNjZXNzaWJpbGl0eVRleHRPcGVyYXRp
b25Gb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKToKKyAgICAgICAgKGFjY2Vzc2liaWxpdHlNaXNz
cGVsbGluZ1NlYXJjaENyaXRlcmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9z
aXRpb246XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRN
YXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29udHJvbDpdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2Vy
UmFuZ2U6c3BlbGxDaGVjazpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6ZW5kUG9zaXRpb246XSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJSYW5n
ZUZvclNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIF9hY2Nlc3NpYmlsaXR5U2V0VmFsdWU6Zm9yQXR0cmlidXRlOl0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfaW5kZXhGb3JUZXh0
TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfdGV4
dE1hcmtlckZvckluZGV4Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBkZWJ1Z0Rlc2NyaXB0aW9uRm9yVGV4dE1hcmtlcjpdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZGVidWdEZXNjcmlwdGlvbkZvclRleHRNYXJrZXJSYW5n
ZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc2hvd05vZGVG
b3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBzaG93Tm9kZVRyZWVGb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VBdFRleHRNYXJrZXI6Zm9yVW5pdDpdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgbGluZVRleHRNYXJrZXJS
YW5nZUZvclRleHRNYXJrZXI6Zm9yVW5pdDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlckZvclRleHRNYXJrZXI6YXRVbml0Ol0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWU6Zm9yUGFyYW1ldGVyOl0pOgorICAgICAgICAoQVhUZXh0TWFya2VyUmFuZ2VTdGFydCk6
IE1PdmVkIHRvIEFYT2JqZWN0Q2FjaGVNYWMubW0uCisgICAgICAgIChBWFRleHRNYXJrZXJSYW5n
ZUVuZCk6IE1PdmVkIHRvIEFYT2JqZWN0Q2FjaGVNYWMubW0uCisgICAgICAgIChnZXRCeXRlc0Zy
b21BWFRleHRNYXJrZXIpOiBNT3ZlZCB0byBBWE9iamVjdENhY2hlTWFjLm1tLgorICAgICAgICAo
aXNUZXh0TWFya2VySWdub3JlZCk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0TWFya2VyOl0pOiBEZWxl
dGVkLgorICAgICAgICAoYWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXIpOiBNT3ZlZCB0
byBBWE9iamVjdENhY2hlTWFjLm1tLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlciB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0Ol0pOiBEZWxldGVkLgorICAgICAg
ICAodGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldCk6IE1PdmVkIHRvIEFYT2JqZWN0Q2FjaGVN
YWMubW0uCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJhbmdlRm9y
VGV4dE1hcmtlclJhbmdlOl0pOiBEZWxldGVkLgorICAgICAgICAoY2hhcmFjdGVyT2Zmc2V0Rm9y
VGV4dE1hcmtlcik6IE1PdmVkIHRvIEFYT2JqZWN0Q2FjaGVNYWMubW0uCisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6
XSk6IERlbGV0ZWQuCisgICAgICAgICh2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKTogTU92
ZWQgdG8gQVhPYmplY3RDYWNoZU1hYy5tbS4KKyAgICAgICAgKHZpc2libGVQb3NpdGlvblJhbmdl
Rm9yVGV4dE1hcmtlclJhbmdlKTogTU92ZWQgdG8gQVhPYmplY3RDYWNoZU1hYy5tbS4KKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdmlzaWJsZVBvc2l0aW9uRm9yVGV4
dE1hcmtlcjpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6XSk6IERlbGV0ZWQu
CisKIDIwMjAtMTItMDMgIEFuZHJlcyBHb256YWxleiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgog
CiAgICAgICAgIEZpeCBmb3IgY3Jhc2ggaGFuZGxpbmcgTlNBY2Nlc3NpYmlsaXR5SW5zZXJ0aW9u
UG9pbnRMaW5lTnVtYmVyQXR0cmlidXRlIGZvciB0ZXh0IGZpZWxkcyBpbiBpc29sYXRlZCB0cmVl
IG1vZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9i
amVjdENhY2hlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQVhPYmpl
Y3RDYWNoZU1hYy5tbQppbmRleCA2YWRlMDMzM2U0ZTJiN2M5OTdhZTZjNDBmNDJlNjIzMDhjM2Uy
ODgyLi43ZWRhOGYxYzY2NjNkZTcxZGQ5ODA0ZDVmNjkwZjVkNTk3YWU3YWJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BWE9iamVjdENhY2hlTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0FYT2JqZWN0Q2FjaGVNYWMubW0K
QEAgLTQ0NCw4ICs0NDQsOCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBWENvcmVPYmplY3QqIG9iamVjdAogICAgICAgICB9CiAg
ICAgfQogICAgIGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKSB7Ci0gICAgICAgIGlmIChpZCB0ZXh0
TWFya2VyUmFuZ2UgPSB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyh0aGlzLCBz
ZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKQotICAgICAg
ICAgICAgW3VzZXJJbmZvIHNldE9iamVjdDp0ZXh0TWFya2VyUmFuZ2UgZm9yS2V5Ok5TQWNjZXNz
aWJpbGl0eVNlbGVjdGVkVGV4dE1hcmtlclJhbmdlQXR0cmlidXRlXTsKKyAgICAgICAgaWYgKGF1
dG8gdGV4dE1hcmtlclJhbmdlID0gdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMo
dGhpcywgc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSkK
KyAgICAgICAgICAgIFt1c2VySW5mbyBzZXRPYmplY3Q6KGlkKXRleHRNYXJrZXJSYW5nZSBmb3JL
ZXk6TlNBY2Nlc3NpYmlsaXR5U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2VBdHRyaWJ1dGVdOwogICAg
IH0KIAogICAgIGlmIChpZCB3cmFwcGVyID0gb2JqZWN0LT53cmFwcGVyKCkpCkBAIC01OTAsMTgg
KzU5MCwxOSBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBsYXRmb3JtUGVyZm9ybURlZmVycmVkQ2Fj
aGVVcGRhdGUoKQogewogfQogCi0vLyBUZXh0TWFya2VyIHV0aWxpdHkgZnVuY3Rpb25zLgorLy8g
VGV4dE1hcmtlciBhbmQgVGV4dE1hcmtlclJhbmdlIGZ1bmNzdGlvbnMuCisvLyBGSVhNRTogVGV4
dE1hcmtlciBhbmQgVGV4dE1hcmtlclJhbmdlIHNob3VsZCBiZWNvbWUgY2xhc3NlcyB3cmFwcGlu
ZyB0aGUgc3lzdGVtIG9iamVjdHMuCiAKLXN0YXRpYyBpZCBBWFRleHRNYXJrZXJSYW5nZShpZCBz
dGFydE1hcmtlciwgaWQgZW5kTWFya2VyKQorc3RhdGljIEFYVGV4dE1hcmtlclJhbmdlUmVmIEFY
VGV4dE1hcmtlclJhbmdlKEFYVGV4dE1hcmtlclJlZiBzdGFydE1hcmtlciwgQVhUZXh0TWFya2Vy
UmVmIGVuZE1hcmtlcikKIHsKICAgICBBU1NFUlQoc3RhcnRNYXJrZXIpOwogICAgIEFTU0VSVChl
bmRNYXJrZXIpOwogICAgIEFTU0VSVChDRkdldFR5cGVJRCgoX19icmlkZ2UgQ0ZUeXBlUmVmKXN0
YXJ0TWFya2VyKSA9PSBBWFRleHRNYXJrZXJHZXRUeXBlSUQoKSk7CiAgICAgQVNTRVJUKENGR2V0
VHlwZUlEKChfX2JyaWRnZSBDRlR5cGVSZWYpZW5kTWFya2VyKSA9PSBBWFRleHRNYXJrZXJHZXRU
eXBlSUQoKSk7Ci0gICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKEFYVGV4dE1hcmtlclJhbmdl
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChBWFRleHRNYXJrZXJSZWYpc3RhcnRNYXJrZXIs
IChBWFRleHRNYXJrZXJSZWYpZW5kTWFya2VyKSk7CisgICAgcmV0dXJuIChBWFRleHRNYXJrZXJS
YW5nZVJlZilDRkJyaWRnaW5nUmVsZWFzZShBWFRleHRNYXJrZXJSYW5nZUNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBzdGFydE1hcmtlciwgZW5kTWFya2VyKSk7CiB9CiAKLXN0YXRpYyBpZCB0
ZXh0TWFya2VyUmFuZ2VGcm9tTWFya2VycyhpZCB0ZXh0TWFya2VyMSwgaWQgdGV4dE1hcmtlcjIp
CitzdGF0aWMgQVhUZXh0TWFya2VyUmFuZ2VSZWYgdGV4dE1hcmtlclJhbmdlRnJvbU1hcmtlcnMo
QVhUZXh0TWFya2VyUmVmIHRleHRNYXJrZXIxLCBBWFRleHRNYXJrZXJSZWYgdGV4dE1hcmtlcjIp
CiB7CiAgICAgaWYgKCF0ZXh0TWFya2VyMSB8fCAhdGV4dE1hcmtlcjIpCiAgICAgICAgIHJldHVy
biBuaWw7CkBAIC02MDksMTAgKzYxMCw1MiBAQCBzdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJv
bU1hcmtlcnMoaWQgdGV4dE1hcmtlcjEsIGlkIHRleHRNYXJrZXIyKQogICAgIHJldHVybiBBWFRl
eHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyMSwgdGV4dE1hcmtlcjIpOwogfQogCi1pZCB0ZXh0TWFy
a2VyRm9yVmlzaWJsZVBvc2l0aW9uKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHZpc2libGVQb3MpCitzdGF0aWMgQVhUZXh0TWFya2VyUmVmIEFYVGV4dE1hcmtl
clJhbmdlU3RhcnQoQVhUZXh0TWFya2VyUmFuZ2VSZWYgdGV4dE1hcmtlclJhbmdlKQoreworICAg
IEFTU0VSVCh0ZXh0TWFya2VyUmFuZ2UpOworICAgIEFTU0VSVChDRkdldFR5cGVJRCgoX19icmlk
Z2UgQ0ZUeXBlUmVmKXRleHRNYXJrZXJSYW5nZSkgPT0gQVhUZXh0TWFya2VyUmFuZ2VHZXRUeXBl
SUQoKSk7CisgICAgcmV0dXJuIChBWFRleHRNYXJrZXJSZWYpQ0ZCcmlkZ2luZ1JlbGVhc2UoQVhU
ZXh0TWFya2VyUmFuZ2VDb3B5U3RhcnRNYXJrZXIodGV4dE1hcmtlclJhbmdlKSk7Cit9CisKK3N0
YXRpYyBBWFRleHRNYXJrZXJSZWYgQVhUZXh0TWFya2VyUmFuZ2VFbmQoQVhUZXh0TWFya2VyUmFu
Z2VSZWYgdGV4dE1hcmtlclJhbmdlKQoreworICAgIEFTU0VSVCh0ZXh0TWFya2VyUmFuZ2UpOwor
ICAgIEFTU0VSVChDRkdldFR5cGVJRCgoX19icmlkZ2UgQ0ZUeXBlUmVmKXRleHRNYXJrZXJSYW5n
ZSkgPT0gQVhUZXh0TWFya2VyUmFuZ2VHZXRUeXBlSUQoKSk7CisgICAgcmV0dXJuIChBWFRleHRN
YXJrZXJSZWYpQ0ZCcmlkZ2luZ1JlbGVhc2UoQVhUZXh0TWFya2VyUmFuZ2VDb3B5RW5kTWFya2Vy
KHRleHRNYXJrZXJSYW5nZSkpOworfQorCitzdGF0aWMgVGV4dE1hcmtlckRhdGEgZ2V0Qnl0ZXNG
cm9tQVhUZXh0TWFya2VyKEFYVGV4dE1hcmtlclJlZiB0ZXh0TWFya2VyKQoreworICAgIFRleHRN
YXJrZXJEYXRhIGRhdGE7CisgICAgaWYgKCF0ZXh0TWFya2VyKQorICAgICAgICByZXR1cm4gZGF0
YTsKKworICAgIEFTU0VSVChDRkdldFR5cGVJRCh0ZXh0TWFya2VyKSA9PSBBWFRleHRNYXJrZXJH
ZXRUeXBlSUQoKSk7CisgICAgaWYgKENGR2V0VHlwZUlEKHRleHRNYXJrZXIpICE9IEFYVGV4dE1h
cmtlckdldFR5cGVJRCgpKQorICAgICAgICByZXR1cm4gZGF0YTsKKworICAgIG1lbWNweSgmZGF0
YSwgQVhUZXh0TWFya2VyR2V0Qnl0ZVB0cih0ZXh0TWFya2VyKSwgc2l6ZW9mKGRhdGEpKTsKKyAg
ICByZXR1cm4gZGF0YTsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eU9i
amVjdEZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaGUsIEFYVGV4dE1hcmtlclJlZiB0
ZXh0TWFya2VyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFjYWNo
ZSB8fCAhdGV4dE1hcmtlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHRl
eHRNYXJrZXJEYXRhID0gZ2V0Qnl0ZXNGcm9tQVhUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAg
IGlmICh0ZXh0TWFya2VyRGF0YS5pZ25vcmVkKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIHJldHVybiBjYWNoZS0+YWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXJEYXRhKHRl
eHRNYXJrZXJEYXRhKTsKK30KKworLy8gVGV4dE1hcmtlciA8LT4gVmlzaWJsZVBvc2l0aW9uIGNv
bnZlcnNpb24uCisKK0FYVGV4dE1hcmtlclJlZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9u
KEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3Mp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoY2FjaGUpOwogICAg
IGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKQEAgLTYyMCwyMSArNjYzLDcyIEBA
IGlkIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oQVhPYmplY3RDYWNoZSogY2FjaGUsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzCiAgICAgaWYgKCF0ZXh0TWFya2VyRGF0YSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVybiBDRkJyaWRnaW5nUmVsZWFzZShBWFRleHRNYXJr
ZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4KikmdGV4dE1hcmtlckRh
dGEudmFsdWUoKSwgc2l6ZW9mKHRleHRNYXJrZXJEYXRhLnZhbHVlKCkpKSk7CisgICAgcmV0dXJu
IChBWFRleHRNYXJrZXJSZWYpQ0ZCcmlkZ2luZ1JlbGVhc2UoQVhUZXh0TWFya2VyQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBVSW50OCopJnRleHRNYXJrZXJEYXRhLnZhbHVlKCks
IHNpemVvZih0ZXh0TWFya2VyRGF0YS52YWx1ZSgpKSkpOwogfQogCi1pZCB0ZXh0TWFya2VyUmFu
Z2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBzdGFydFBvc2l0aW9uLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGVuZFBvc2l0
aW9uKQorVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoQVhPYmpl
Y3RDYWNoZSogY2FjaGUsIEFYVGV4dE1hcmtlclJlZiB0ZXh0TWFya2VyKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFjYWNoZSB8fCAhdGV4dE1hcmtlcikKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gdGV4dE1hcmtlckRhdGEgPSBnZXRCeXRlc0Zyb21B
WFRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgcmV0dXJuIGNhY2hlLT52aXNpYmxlUG9zaXRp
b25Gb3JUZXh0TWFya2VyRGF0YSh0ZXh0TWFya2VyRGF0YSk7Cit9CisKKy8vIFRleHRNYXJrZXJS
YW5nZSA8LT4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UgY29udmVyc2lvbi4KKworQVhUZXh0TWFya2Vy
UmFuZ2VSZWYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMoQVhPYmplY3RDYWNo
ZSogY2FjaGUsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbiwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBlbmRQb3NpdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBpZCBzdGFydFRl
eHRNYXJrZXIgPSB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGNhY2hlLCBzdGFydFBvc2l0
aW9uKTsKLSAgICBpZCBlbmRUZXh0TWFya2VyID0gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlv
bihjYWNoZSwgZW5kUG9zaXRpb24pOworICAgIGF1dG8gc3RhcnRUZXh0TWFya2VyID0gdGV4dE1h
cmtlckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgc3RhcnRQb3NpdGlvbik7CisgICAgYXV0byBl
bmRUZXh0TWFya2VyID0gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihjYWNoZSwgZW5kUG9z
aXRpb24pOwogICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tTWFya2VycyhzdGFydFRleHRN
YXJrZXIsIGVuZFRleHRNYXJrZXIpOwogfQogCi1pZCBzdGFydE9yRW5kVGV4dE1hcmtlckZvclJh
bmdlKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJh
bmdlLCBib29sIGlzU3RhcnQpCitWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25S
YW5nZUZvclRleHRNYXJrZXJSYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgQVhUZXh0TWFya2Vy
UmFuZ2VSZWYgdGV4dE1hcmtlclJhbmdlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICByZXR1cm4geworICAgICAgICB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGNh
Y2hlLCBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KHRleHRNYXJrZXJSYW5nZSkpLAorICAgICAgICB2
aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZUVuZCh0
ZXh0TWFya2VyUmFuZ2UpKQorICAgIH07Cit9CisKKy8vIFRleHRNYXJrZXIgPC0+IENoYXJhY3Rl
ck9mZnNldCBjb252ZXJzaW9uLgorCitBWFRleHRNYXJrZXJSZWYgdGV4dE1hcmtlckZvckNoYXJh
Y3Rlck9mZnNldChBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBj
aGFyYWN0ZXJPZmZzZXQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlm
ICghY2FjaGUpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBUZXh0TWFya2VyRGF0YSB0ZXh0
TWFya2VyRGF0YTsKKyAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQo
dGV4dE1hcmtlckRhdGEsIGNoYXJhY3Rlck9mZnNldCk7CisgICAgaWYgKCF0ZXh0TWFya2VyRGF0
YS5heElEIHx8IHRleHRNYXJrZXJEYXRhLmlnbm9yZWQpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICByZXR1cm4gKEFYVGV4dE1hcmtlclJlZilDRkJyaWRnaW5nUmVsZWFzZShBWFRleHRNYXJr
ZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4KikmdGV4dE1hcmtlckRh
dGEsIHNpemVvZih0ZXh0TWFya2VyRGF0YSkpKTsKK30KKworQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldEZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaGUsIEFYVGV4dE1hcmtl
clJlZiB0ZXh0TWFya2VyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYg
KCFjYWNoZSB8fCAhdGV4dE1hcmtlcikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8g
dGV4dE1hcmtlckRhdGEgPSBnZXRCeXRlc0Zyb21BWFRleHRNYXJrZXIodGV4dE1hcmtlcik7Cisg
ICAgcmV0dXJuIGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyRGF0YSh0ZXh0TWFy
a2VyRGF0YSk7Cit9CisKKy8vIFRleHRNYXJrZXJSYW5nZSA8LT4gU2ltcGxlUmFuZ2UgY29udmVy
c2lvbi4KKworQVhUZXh0TWFya2VyUmVmIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2UoQVhP
YmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIGJv
b2wgaXNTdGFydCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghY2Fj
aGUgfHwgIXJhbmdlKQpAQCAtNjQ1LDIwICs3MzksMzYgQEAgaWQgc3RhcnRPckVuZFRleHRNYXJr
ZXJGb3JSYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2UKICAgICBpZiAoIXRleHRNYXJrZXJEYXRhLmF4SUQpCiAgICAgICAgIHJldHVybiBuaWw7CiAK
LSAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2UoQVhUZXh0TWFya2VyQ3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIChjb25zdCBVSW50OCopJnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4dE1h
cmtlckRhdGEpKSk7CisgICAgcmV0dXJuIChBWFRleHRNYXJrZXJSZWYpQ0ZCcmlkZ2luZ1JlbGVh
c2UoQVhUZXh0TWFya2VyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBVSW50OCop
JnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4dE1hcmtlckRhdGEpKSk7CiB9CiAKLWlkIHRleHRN
YXJrZXJSYW5nZUZyb21SYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiByYW5nZSkKK0FYVGV4dE1hcmtlclJhbmdlUmVmIHRleHRNYXJrZXJSYW5n
ZUZyb21SYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JiByYW5nZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghY2Fj
aGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBpZCBzdGFydFRleHRNYXJrZXIgPSBzdGFy
dE9yRW5kVGV4dE1hcmtlckZvclJhbmdlKGNhY2hlLCByYW5nZSwgdHJ1ZSk7Ci0gICAgaWQgZW5k
VGV4dE1hcmtlciA9IHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2UoY2FjaGUsIHJhbmdlLCBm
YWxzZSk7CisgICAgYXV0byBzdGFydFRleHRNYXJrZXIgPSBzdGFydE9yRW5kVGV4dE1hcmtlckZv
clJhbmdlKGNhY2hlLCByYW5nZSwgdHJ1ZSk7CisgICAgYXV0byBlbmRUZXh0TWFya2VyID0gc3Rh
cnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZShjYWNoZSwgcmFuZ2UsIGZhbHNlKTsKICAgICByZXR1
cm4gdGV4dE1hcmtlclJhbmdlRnJvbU1hcmtlcnMoc3RhcnRUZXh0TWFya2VyLCBlbmRUZXh0TWFy
a2VyKTsKIH0KIAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yVGV4dE1hcmtlclJhbmdl
KEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBBWFRleHRNYXJrZXJSYW5nZVJlZiB0ZXh0TWFya2VyUmFu
Z2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIWNhY2hlIHx8ICF0
ZXh0TWFya2VyUmFuZ2UpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRv
IHN0YXJ0VGV4dE1hcmtlciA9IEFYVGV4dE1hcmtlclJhbmdlU3RhcnQodGV4dE1hcmtlclJhbmdl
KTsKKyAgICBhdXRvIGVuZFRleHRNYXJrZXIgPSBBWFRleHRNYXJrZXJSYW5nZUVuZCh0ZXh0TWFy
a2VyUmFuZ2UpOworICAgIGlmICghc3RhcnRUZXh0TWFya2VyIHx8ICFlbmRUZXh0TWFya2VyKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0
Q2hhcmFjdGVyT2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcihjYWNoZSwgc3Rh
cnRUZXh0TWFya2VyKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kQ2hhcmFjdGVyT2Zmc2V0ID0g
Y2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcihjYWNoZSwgZW5kVGV4dE1hcmtlcik7CisgICAg
cmV0dXJuIGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnRDaGFy
YWN0ZXJPZmZzZXQsIGVuZENoYXJhY3Rlck9mZnNldCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
Yy5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMuaAppbmRleCA4OTY2MjZhZDg5ZGI0OWI0MWRjOWZmYTA5N2YxNGU4ZjM4
NjdjM2RkLi4wN2JiOGU1MWVjMTJjOGJlYjJhMzhmYmI2MDBmMTY1N2RjNTU3NzlkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLmgKQEAgLTMwLDEyICszMCwxNiBAQAogCiAj
aWYgUExBVEZPUk0oTUFDKQogCisjaW1wb3J0IDxwYWwvc3BpL21hYy9ISVNlcnZpY2VzU1BJLmg+
CisKICNpZm5kZWYgTlNBY2Nlc3NpYmlsaXR5UHJpbWFyeVNjcmVlbkhlaWdodEF0dHJpYnV0ZQog
I2RlZmluZSBOU0FjY2Vzc2liaWxpdHlQcmltYXJ5U2NyZWVuSGVpZ2h0QXR0cmlidXRlIEAiX0FY
UHJpbWFyeVNjcmVlbkhlaWdodCIKICNlbmRpZgogCiBAaW50ZXJmYWNlIFdlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIDogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJCYXNlCiAKKy8v
IEZJWE1FOiBSZW1vdmUgdGhlc2UgbWV0aG9kcyBzaW5jZSBjbGllbnRzIHNob3VsZCBub3QgbmVl
ZCB0byBjYWxsIHRoZW0gYW5kIGhlbmNlIHNob3VsZCBub3QgYmUgZXhwb3NlZCBpbiB0aGUgcHVi
bGljIGludGVyZmFjZS4KKy8vIEluc2lkZSBXZWJDb3JlLCB1c2UgdGhlIFdlYkNvcmUgaG9tb255
bW91cyBkZWNsYXJlZCBiZWxvdyBpbnN0ZWFkLgogLSAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVZp
c2libGVQb3NpdGlvbnM6KGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYpc3RhcnRQb3Np
dGlvbiBlbmRQb3NpdGlvbjooY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJillbmRQb3Np
dGlvbjsKIC0gKGlkKXRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnN0IFdlYkNvcmU6
OlZpc2libGVQb3NpdGlvbiYpdmlzaWJsZVBvczsKIC0gKGlkKXRleHRNYXJrZXJGb3JGaXJzdFBv
c2l0aW9uSW5UZXh0Q29udHJvbDooV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQm
KXRleHRDb250cm9sOwpAQCAtNDUsMTMgKzQ5LDM4IEBACiAKIEBlbmQKIAorI2Vsc2UKKwordHlw
ZWRlZiBjb25zdCBzdHJ1Y3QgX19BWFRleHRNYXJrZXIqIEFYVGV4dE1hcmtlclJlZjsKK3R5cGVk
ZWYgY29uc3Qgc3RydWN0IF9fQVhUZXh0TWFya2VyUmFuZ2UqIEFYVGV4dE1hcmtlclJhbmdlUmVm
OworCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlk
IHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oQVhPYmplY3RDYWNoZSosIGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpOwotaWQgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMoQVhP
YmplY3RDYWNoZSosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlv
biYpOwotaWQgc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZShBWE9iamVjdENhY2hlKiwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgYm9vbCBpc1N0YXJ0KTsKLWlkIHRleHRNYXJrZXJS
YW5nZUZyb21SYW5nZShBWE9iamVjdENhY2hlKiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
Jik7CitjbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0Oworc3RydWN0IENoYXJhY3Rlck9mZnNldDsK
KworLy8gVGV4dE1hcmtlciBhbmQgVGV4dE1hcmtlclJhbmdlIHB1YmxpYyBmdW5jc3Rpb25zLgor
Ly8gRklYTUU6IFRleHRNYXJrZXIgYW5kIFRleHRNYXJrZXJSYW5nZSBzaG91bGQgYmVjb21lIGNs
YXNzZXMgb24gdGhlaXIgb3duIHJpZ2h0LCB3cmFwcGluZyB0aGUgc3lzdGVtIG9iamVjdHMuCisK
K0FjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0TWFya2VyKEFY
T2JqZWN0Q2FjaGUqLCBBWFRleHRNYXJrZXJSZWYpOworCisvLyBUZXh0TWFya2VyIDwtPiBWaXNp
YmxlUG9zaXRpb24gY29udmVyc2lvbi4KK0FYVGV4dE1hcmtlclJlZiB0ZXh0TWFya2VyRm9yVmlz
aWJsZVBvc2l0aW9uKEFYT2JqZWN0Q2FjaGUqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK1Zp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2FjaGUq
LCBBWFRleHRNYXJrZXJSZWYpOworCisvLyBUZXh0TWFya2VyUmFuZ2UgPC0+IFZpc2libGVQb3Np
dGlvblJhbmdlIGNvbnZlcnNpb24uCitBWFRleHRNYXJrZXJSYW5nZVJlZiB0ZXh0TWFya2VyUmFu
Z2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhBWE9iamVjdENhY2hlKiwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNp
YmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZShBWE9iamVjdENhY2hlKiwgQVhUZXh0
TWFya2VyUmFuZ2VSZWYpOworCisvLyBUZXh0TWFya2VyIDwtPiBDaGFyYWN0ZXJPZmZzZXQgY29u
dmVyc2lvbi4KK0FYVGV4dE1hcmtlclJlZiB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KEFY
T2JqZWN0Q2FjaGUqLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKK0NoYXJhY3Rlck9mZnNldCBj
aGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2FjaGUqLCBBWFRleHRNYXJrZXJS
ZWYpOworCisvLyBUZXh0TWFya2VyUmFuZ2UgPC0+IFNpbXBsZVJhbmdlIGNvbnZlcnNpb24uCitB
WFRleHRNYXJrZXJSZWYgc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZShBWE9iamVjdENhY2hl
KiwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiwgYm9vbCBpc1N0YXJ0KTsKK0FYVGV4dE1h
cmtlclJhbmdlUmVmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZShBWE9iamVjdENhY2hlKiwgY29u
c3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+Jik7CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VG
b3JUZXh0TWFya2VyUmFuZ2UoQVhPYmplY3RDYWNoZSosIEFYVGV4dE1hcmtlclJhbmdlUmVmKTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCBkOGQ1Y2Yy
MWY1ZDA4M2Y3NWZkYTNkYWQ5YTk1ZDUxMDIyMjJiODYyLi44M2Y1MTc5YWM3MjcyZDg0NTgyMjhm
MmMyMDdjYjEyYTJiMDFkZWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
Yy5tbQpAQCAtNTgwLDIwICs1ODAsNiBAQCBzdGF0aWMgaW5saW5lIEJPT0wgQVhPYmplY3RJc1Rl
eHRNYXJrZXJSYW5nZShpZCBvYmplY3QpCiAgICAgcmV0dXJuIG9iamVjdCAmJiBDRkdldFR5cGVJ
RCgoX19icmlkZ2UgQ0ZUeXBlUmVmKW9iamVjdCkgPT0gQVhUZXh0TWFya2VyUmFuZ2VHZXRUeXBl
SUQoKTsKIH0KIAotc3RhdGljIGlkIEFYVGV4dE1hcmtlclJhbmdlU3RhcnQoaWQgcmFuZ2UpCi17
Ci0gICAgQVNTRVJUKHJhbmdlICE9IG5pbCk7Ci0gICAgQVNTRVJUKENGR2V0VHlwZUlEKChfX2Jy
aWRnZSBDRlR5cGVSZWYpcmFuZ2UpID09IEFYVGV4dE1hcmtlclJhbmdlR2V0VHlwZUlEKCkpOwot
ICAgIHJldHVybiBDRkJyaWRnaW5nUmVsZWFzZShBWFRleHRNYXJrZXJSYW5nZUNvcHlTdGFydE1h
cmtlcigoQVhUZXh0TWFya2VyUmFuZ2VSZWYpcmFuZ2UpKTsKLX0KLQotc3RhdGljIGlkIEFYVGV4
dE1hcmtlclJhbmdlRW5kKGlkIHJhbmdlKQotewotICAgIEFTU0VSVChyYW5nZSAhPSBuaWwpOwot
ICAgIEFTU0VSVChDRkdldFR5cGVJRCgoX19icmlkZ2UgQ0ZUeXBlUmVmKXJhbmdlKSA9PSBBWFRl
eHRNYXJrZXJSYW5nZUdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2Uo
QVhUZXh0TWFya2VyUmFuZ2VDb3B5RW5kTWFya2VyKChBWFRleHRNYXJrZXJSYW5nZVJlZilyYW5n
ZSkpOwotfQotCiAjcHJhZ21hIG1hcmsgT3RoZXIgaGVscGVycwogCiAtIChJbnRSZWN0KXNjcmVl
blRvQ29udGVudHM6KGNvbnN0IEludFJlY3QmKXJlY3QKQEAgLTY4NCw3ICs2NzAsNyBAQCBzdGF0
aWMgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRDcml0ZXJpYSBhY2Nlc3NpYmlsaXR5U2VhcmNoVGV4
dENyaXRlcmlhRm9yUGFyYW1ldAogICAgIHJldHVybiBjcml0ZXJpYTsKIH0KIAotc3RhdGljIEFj
Y2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uRm9yUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZShXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqd3JhcHBl
ciwgY29uc3QgTlNEaWN0aW9uYXJ5ICpwYXJhbWV0ZXJpemVkQXR0cmlidXRlKQorc3RhdGljIEFj
Y2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uRm9yUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZShBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlLCBjb25zdCBO
U0RpY3Rpb25hcnkgKnBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUpCiB7CiAgICAgQWNjZXNzaWJpbGl0
eVRleHRPcGVyYXRpb24gb3BlcmF0aW9uOwogCkBAIC02OTMsOCArNjc5LDkgQEAgc3RhdGljIEFj
Y2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uRm9yUGFy
YW1ldGVyaXplZEF0dHIKICAgICBOU1N0cmluZyAqcmVwbGFjZW1lbnRTdHJpbmcgPSBbcGFyYW1l
dGVyaXplZEF0dHJpYnV0ZSBvYmplY3RGb3JLZXk6TlNBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlv
blJlcGxhY2VtZW50U3RyaW5nXTsKIAogICAgIGlmIChbbWFya2VyUmFuZ2VzIGlzS2luZE9mQ2xh
c3M6W05TQXJyYXkgY2xhc3NdXSkgewotICAgICAgICBvcGVyYXRpb24udGV4dFJhbmdlcyA9IG1h
a2VWZWN0b3IobWFya2VyUmFuZ2VzLCBbd3JhcHBlcl0gKGlkIG1hcmtlclJhbmdlKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gW3dyYXBwZXIgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFu
Z2VdOworICAgICAgICBvcGVyYXRpb24udGV4dFJhbmdlcyA9IG1ha2VWZWN0b3IobWFya2VyUmFu
Z2VzLCBbJmF4T2JqZWN0Q2FjaGVdIChpZCBtYXJrZXJSYW5nZSkgeworICAgICAgICAgICAgQVNT
RVJUKEFYT2JqZWN0SXNUZXh0TWFya2VyUmFuZ2UobWFya2VyUmFuZ2UpKTsKKyAgICAgICAgICAg
IHJldHVybiByYW5nZUZvclRleHRNYXJrZXJSYW5nZShheE9iamVjdENhY2hlLCAoQVhUZXh0TWFy
a2VyUmFuZ2VSZWYpbWFya2VyUmFuZ2UpOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTcxNSwx
MSArNzAyLDE0IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbiBhY2Nlc3NpYmls
aXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6ZWRBdHRyCiAgICAgcmV0dXJuIG9wZXJhdGlv
bjsKIH0KIAotc3RhdGljIHN0ZDo6cGFpcjxPcHRpb25hbDxTaW1wbGVSYW5nZT4sIEFjY2Vzc2li
aWxpdHlTZWFyY2hEaXJlY3Rpb24+IGFjY2Vzc2liaWxpdHlNaXNzcGVsbGluZ1NlYXJjaENyaXRl
cmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciAqb2JqZWN0LCBjb25zdCBOU0RpY3Rpb25hcnkgKnBhcmFtcykKK3N0YXRpYyBzdGQ6OnBhaXI8
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uPiBhY2Nl
c3NpYmlsaXR5TWlzc3BlbGxpbmdTZWFyY2hDcml0ZXJpYUZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1
dGUoQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSwgY29uc3QgTlNEaWN0aW9uYXJ5ICpwYXJh
bXMpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwogICAgIHN0ZDo6cGFpcjxPcHRp
b25hbDxTaW1wbGVSYW5nZT4sIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24+IGNyaXRlcmlh
OwogCi0gICAgY3JpdGVyaWEuZmlyc3QgPSBbb2JqZWN0IHJhbmdlRm9yVGV4dE1hcmtlclJhbmdl
OltwYXJhbXMgb2JqZWN0Rm9yS2V5OkAiQVhTdGFydFRleHRNYXJrZXJSYW5nZSJdXTsKKyAgICBB
U1NFUlQoQVhPYmplY3RJc1RleHRNYXJrZXJSYW5nZShbcGFyYW1zIG9iamVjdEZvcktleTpAIkFY
U3RhcnRUZXh0TWFya2VyUmFuZ2UiXSkpOworICAgIGNyaXRlcmlhLmZpcnN0ID0gcmFuZ2VGb3JU
ZXh0TWFya2VyUmFuZ2UoYXhPYmplY3RDYWNoZSwgKEFYVGV4dE1hcmtlclJhbmdlUmVmKVtwYXJh
bXMgb2JqZWN0Rm9yS2V5OkAiQVhTdGFydFRleHRNYXJrZXJSYW5nZSJdKTsKIAogICAgIE5TTnVt
YmVyICpmb3J3YXJkID0gW3BhcmFtcyBvYmplY3RGb3JLZXk6TlNBY2Nlc3NpYmlsaXR5U2VhcmNo
VGV4dERpcmVjdGlvbl07CiAgICAgaWYgKFtmb3J3YXJkIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVy
IGNsYXNzXV0pCkBAIC03MzIsNTIgKzcyMiw2IEBAIHN0YXRpYyBzdGQ6OnBhaXI8T3B0aW9uYWw8
U2ltcGxlUmFuZ2U+LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uPiBhY2Nlc3NpYmlsCiAK
ICNwcmFnbWEgbWFyayBUZXh0IE1hcmtlciBoZWxwZXJzCiAKLXN0YXRpYyBCT09MIGdldEJ5dGVz
RnJvbUFYVGV4dE1hcmtlcihDRlR5cGVSZWYgdGV4dE1hcmtlciwgdm9pZCogYnl0ZXMsIHNpemVf
dCBsZW5ndGgpCi17Ci0gICAgaWYgKCF0ZXh0TWFya2VyKQotICAgICAgICByZXR1cm4gTk87Ci0K
LSAgICBBWFRleHRNYXJrZXJSZWYgcmVmID0gKEFYVGV4dE1hcmtlclJlZil0ZXh0TWFya2VyOwot
ICAgIEFTU0VSVChDRkdldFR5cGVJRChyZWYpID09IEFYVGV4dE1hcmtlckdldFR5cGVJRCgpKTsK
LSAgICBpZiAoQ0ZHZXRUeXBlSUQocmVmKSAhPSBBWFRleHRNYXJrZXJHZXRUeXBlSUQoKSkKLSAg
ICAgICAgcmV0dXJuIE5POwotCi0gICAgQ0ZJbmRleCBleHBlY3RlZExlbmd0aCA9IGxlbmd0aDsK
LSAgICBpZiAoQVhUZXh0TWFya2VyR2V0TGVuZ3RoKHJlZikgIT0gZXhwZWN0ZWRMZW5ndGgpCi0g
ICAgICAgIHJldHVybiBOTzsKLQotICAgIG1lbWNweShieXRlcywgQVhUZXh0TWFya2VyR2V0Qnl0
ZVB0cihyZWYpLCBsZW5ndGgpOwotICAgIHJldHVybiBZRVM7Ci19Ci0KLXN0YXRpYyBib29sIGlz
VGV4dE1hcmtlcklnbm9yZWQoaWQgdGV4dE1hcmtlcikKLXsKLSAgICBpZiAoIXRleHRNYXJrZXIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFy
a2VyRGF0YTsKLSAgICBpZiAoIWdldEJ5dGVzRnJvbUFYVGV4dE1hcmtlcigoX19icmlkZ2UgQ0ZU
eXBlUmVmKXRleHRNYXJrZXIsICZ0ZXh0TWFya2VyRGF0YSwgc2l6ZW9mKHRleHRNYXJrZXJEYXRh
KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gdGV4dE1hcmtlckRh
dGEuaWdub3JlZDsKLX0KLQotLSAoQWNjZXNzaWJpbGl0eU9iamVjdCopYWNjZXNzaWJpbGl0eU9i
amVjdEZvclRleHRNYXJrZXI6KGlkKXRleHRNYXJrZXIKLXsKLSAgICByZXR1cm4gYWNjZXNzaWJp
bGl0eU9iamVjdEZvclRleHRNYXJrZXIoc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2Fj
aGUoKSwgdGV4dE1hcmtlcik7Ci19Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nl
c3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hlKiBjYWNoZSwgaWQgdGV4
dE1hcmtlcikKLXsKLSAgICBpZiAoIXRleHRNYXJrZXIgfHwgIWNhY2hlIHx8IGlzVGV4dE1hcmtl
cklnbm9yZWQodGV4dE1hcmtlcikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAg
IFRleHRNYXJrZXJEYXRhIHRleHRNYXJrZXJEYXRhOwotICAgIGlmICghZ2V0Qnl0ZXNGcm9tQVhU
ZXh0TWFya2VyKChfX2JyaWRnZSBDRlR5cGVSZWYpdGV4dE1hcmtlciwgJnRleHRNYXJrZXJEYXRh
LCBzaXplb2YodGV4dE1hcmtlckRhdGEpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIGNhY2hlLT5hY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlckRhdGEodGV4dE1h
cmtlckRhdGEpOwotfQotCiBzdGF0aWMgaWQgbmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZz
ZXQoQVhPYmplY3RDYWNoZSogY2FjaGUsIENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0
KQogewogICAgIGlmICghY2FjaGUpCkBAIC04MTIsNzEgKzc1NiwyNCBAQCBzdGF0aWMgaWQgcHJl
dmlvdXNUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBD
aGFyYWN0ZXJPZgogICAgIHJldHVybiBwcmV2aW91c1RleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZz
ZXQoc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgY2hhcmFjdGVyT2Zmc2V0
KTsKIH0KIAotLSAoaWQpdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zm
c2V0JiljaGFyYWN0ZXJPZmZzZXQKLXsKLSAgICByZXR1cm4gdGV4dE1hcmtlckZvckNoYXJhY3Rl
ck9mZnNldChzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBjaGFyYWN0ZXJP
ZmZzZXQpOwotfQotCi1zdGF0aWMgaWQgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldChBWE9i
amVjdENhY2hlKiBjYWNoZSwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQp
Ci17Ci0gICAgaWYgKCFjYWNoZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBUZXh0
TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKLSAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JD
aGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtlckRhdGEsIGNoYXJhY3Rlck9mZnNldCk7Ci0gICAgaWYg
KCF0ZXh0TWFya2VyRGF0YS5heElEICYmICF0ZXh0TWFya2VyRGF0YS5pZ25vcmVkKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIAotICAgIHJldHVybiBDRkJyaWRnaW5nUmVsZWFzZShBWFRleHRN
YXJrZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4KikmdGV4dE1hcmtl
ckRhdGEsIHNpemVvZih0ZXh0TWFya2VyRGF0YSkpKTsKLX0KLQotLSAoT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+KXJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuZ2UKLXsKLSAg
ICBpZiAoIXRleHRNYXJrZXJSYW5nZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICAKLSAgICBpZCBzdGFydFRleHRNYXJrZXIgPSBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KHRleHRN
YXJrZXJSYW5nZSk7Ci0gICAgaWQgZW5kVGV4dE1hcmtlciA9IEFYVGV4dE1hcmtlclJhbmdlRW5k
KHRleHRNYXJrZXJSYW5nZSk7Ci0gICAgCi0gICAgaWYgKCFzdGFydFRleHRNYXJrZXIgfHwgIWVu
ZFRleHRNYXJrZXIpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgCi0gICAgQVhP
YmplY3RDYWNoZSogY2FjaGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgp
OwotICAgIGlmICghY2FjaGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgCi0g
ICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVy
T2Zmc2V0Rm9yVGV4dE1hcmtlcjpzdGFydFRleHRNYXJrZXJdOwotICAgIENoYXJhY3Rlck9mZnNl
dCBlbmRDaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2Vy
OmVuZFRleHRNYXJrZXJdOwotICAgIHJldHVybiBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFy
YWN0ZXJPZmZzZXRzKHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0LCBlbmRDaGFyYWN0ZXJPZmZzZXQpOwot
fQotCi1zdGF0aWMgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIo
QVhPYmplY3RDYWNoZSogY2FjaGUsIENGVHlwZVJlZiB0ZXh0TWFya2VyKQotewotICAgIGlmICgh
Y2FjaGUgfHwgIXRleHRNYXJrZXIpCi0gICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsK
LSAgICAKLSAgICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKLSAgICBpZiAoIWdldEJ5
dGVzRnJvbUFYVGV4dE1hcmtlcih0ZXh0TWFya2VyLCAmdGV4dE1hcmtlckRhdGEsIHNpemVvZih0
ZXh0TWFya2VyRGF0YSkpKQotICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7Ci0gICAg
Ci0gICAgcmV0dXJuIGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyRGF0YSh0ZXh0
TWFya2VyRGF0YSk7Ci19Ci0KLS0gKENoYXJhY3Rlck9mZnNldCljaGFyYWN0ZXJPZmZzZXRGb3JU
ZXh0TWFya2VyOihpZCl0ZXh0TWFya2VyCi17Ci0gICAgYXV0byAqYmFja2luZ09iamVjdCA9IHNl
bGYuYXhCYWNraW5nT2JqZWN0OwotICAgIHJldHVybiBiYWNraW5nT2JqZWN0ID8gY2hhcmFjdGVy
T2Zmc2V0Rm9yVGV4dE1hcmtlcihiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIChfX2Jy
aWRnZSBDRlR5cGVSZWYpdGV4dE1hcmtlcikgOiBuaWw7Ci19Ci0KKy8vIEZJWE1FOiBSZW1vdmUg
dGhpcyBtZXRob2Qgc2luY2UgY2xpZW50cyBzaG91bGQgbm90IG5lZWQgdG8gY2FsbCB0aGlzIG1l
dGhvZCBhbmQgc2hvdWxkIG5vdCBiZSBleHBvc2VkIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgor
Ly8gSW5zaWRlIFdlYkNvcmUsIHVzZSBXZWJDb3JlOjp0ZXh0TWFya2VyRnJvbVZpc2libGVQb3Np
dGlvbiBpbnN0ZWFkLgogLSAoaWQpdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjooY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJilwb3NpdGlvbgogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgYXV0byAqYmFja2luZ09iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0OwotICAgIHJl
dHVybiBiYWNraW5nT2JqZWN0ID8gdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihiYWNraW5n
T2JqZWN0LT5heE9iamVjdENhY2hlKCksIHBvc2l0aW9uKSA6IG5pbDsKKyAgICByZXR1cm4gYmFj
a2luZ09iamVjdCA/IChpZCl0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGJhY2tpbmdPYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKSwgcG9zaXRpb24pIDogbmlsOwogfQogCiAtIChpZCl0ZXh0TWFy
a2VyRm9yRmlyc3RQb3NpdGlvbkluVGV4dENvbnRyb2w6KEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50ICYpdGV4dENvbnRyb2wKIHsKLSAgICBhdXRvICpjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IGF1dG8qIGJhY2tpbmdPYmplY3QgPSBzZWxmLmF4QmFja2luZ09iamVjdDsKKyAgICBpZiAoIWJh
Y2tpbmdPYmplY3QpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBhdXRvKiBjYWNoZSA9IGJh
Y2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAgICBpZiAoIWNhY2hlKQogICAgICAgICBy
ZXR1cm4gbmlsOwogCkBAIC04ODcsMzAgKzc4NCw2IEBAIHN0YXRpYyBDaGFyYWN0ZXJPZmZzZXQg
Y2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hlKiBjYWNoZSwgQ0ZUeXBl
CiAgICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKEFYVGV4dE1hcmtlckNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCAoY29uc3QgVUludDgqKSZ0ZXh0TWFya2VyRGF0YS52YWx1ZSgpLCBzaXpl
b2YodGV4dE1hcmtlckRhdGEudmFsdWUoKSkpKTsKIH0KIAotc3RhdGljIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBDRlR5
cGVSZWYgdGV4dE1hcmtlcikKLXsKLSAgICBBU1NFUlQoY2FjaGUpOwotICAgIGlmICghdGV4dE1h
cmtlcikKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwotICAgIFRleHRNYXJrZXJE
YXRhIHRleHRNYXJrZXJEYXRhOwotICAgIGlmICghZ2V0Qnl0ZXNGcm9tQVhUZXh0TWFya2VyKHRl
eHRNYXJrZXIsICZ0ZXh0TWFya2VyRGF0YSwgc2l6ZW9mKHRleHRNYXJrZXJEYXRhKSkpCi0gICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKLSAgICByZXR1cm4gY2FjaGUtPnZpc2libGVQ
b3NpdGlvbkZvclRleHRNYXJrZXJEYXRhKHRleHRNYXJrZXJEYXRhKTsKLX0KLQotc3RhdGljIFZp
c2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdl
KEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBpZCB0ZXh0TWFya2VyUmFuZ2UpCi17Ci0gICAgcmV0dXJu
IHsKLSAgICAgICAgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihjYWNoZSwgKF9fYnJpZGdl
IENGVHlwZVJlZilBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KHRleHRNYXJrZXJSYW5nZSkpLAotICAg
ICAgICB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGNhY2hlLCAoX19icmlkZ2UgQ0ZUeXBl
UmVmKUFYVGV4dE1hcmtlclJhbmdlRW5kKHRleHRNYXJrZXJSYW5nZSkpCi0gICAgfTsKLX0KLQot
LSAoVmlzaWJsZVBvc2l0aW9uKXZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KGlkKXRleHRN
YXJrZXIKLXsKLSAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihzZWxmLmF4
QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCAoX19icmlkZ2UgQ0ZUeXBlUmVmKXRleHRN
YXJrZXIpOwotfQotCiAvLyBXaGVuIG1vZGlmeWluZyBhdHRyaWJ1dGVkIHN0cmluZ3MsIHRoZSBy
YW5nZSBjYW4gY29tZSBmcm9tIGEgc291cmNlIHdoaWNoIG1heSBwcm92aWRlIGZhdWx0eSBpbmZv
cm1hdGlvbiAoZS5nLiB0aGUgc3BlbGwgY2hlY2tlcikuCiAvLyBUbyBwcm90ZWN0IGFnYWluc3Qg
c3VjaCBjYXNlcyB0aGUgcmFuZ2Ugc2hvdWxkIGJlIHZhbGlkYXRlZCBiZWZvcmUgYWRkaW5nIG9y
IHJlbW92aW5nIGF0dHJpYnV0ZXMuCiBzdGF0aWMgQk9PTCBBWEF0dHJpYnV0ZWRTdHJpbmdSYW5n
ZUlzVmFsaWQoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW5nLCBOU1JhbmdlIHJhbmdlKQpA
QCAtMTIwMSwxNCArMTA3NCwxNCBAQCBzdGF0aWMgTlNTdHJpbmcqIG5zU3RyaW5nRm9yUmVwbGFj
ZWROb2RlKE5vZGUqIHJlcGxhY2VkTm9kZSkKICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dp
dGhDaGFyYWN0ZXJzOiZhdHRhY2htZW50Q2hhciBsZW5ndGg6MV07CiB9CiAKLS0gKE5TQXR0cmli
dXRlZFN0cmluZyAqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOihpZCl0
ZXh0TWFya2VyUmFuZ2Ugc3BlbGxDaGVjazooQk9PTClzcGVsbENoZWNrCistIChOU0F0dHJpYnV0
ZWRTdHJpbmcgKilkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTooQVhUZXh0
TWFya2VyUmFuZ2VSZWYpdGV4dE1hcmtlclJhbmdlIHNwZWxsQ2hlY2s6KEJPT0wpc3BlbGxDaGVj
awogewogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVl
RnJvbU1haW5UaHJlYWQ8TlNBdHRyaWJ1dGVkU3RyaW5nICo+KFsmdGV4dE1hcmtlclJhbmdlLCAm
c3BlbGxDaGVjaywgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWlu
UHRyPE5TQXR0cmlidXRlZFN0cmluZz4gewogICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0g
cHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CiAgICAgICAgIGlmICghYmFja2lu
Z09iamVjdCkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICAgICAgYXV0byByYW5nZSA9
IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07
CisgICAgICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvclRleHRNYXJrZXJSYW5nZShiYWNraW5nT2Jq
ZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJSYW5nZSk7CiAgICAgICAgIGlmICghcmFu
Z2UpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICBhdXRvIGF0dHJTdHJpbmcgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0pOwpAQCAtMTI0
Nyw2ICsxMTIwLDggQEAgc3RhdGljIE5TU3RyaW5nKiBuc1N0cmluZ0ZvclJlcGxhY2VkTm9kZShO
b2RlKiByZXBsYWNlZE5vZGUpCiAgICAgfSk7CiB9CiAKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBt
ZXRob2Qgc2luY2UgY2xpZW50cyBzaG91bGQgbm90IG5lZWQgdG8gY2FsbCB0aGlzIG1ldGhvZCBh
bmQgc2hvdWxkIG5vdCBiZSBleHBvc2VkIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgorLy8gSW5z
aWRlIFdlYkNvcmUsIHVzZSBXZWJDb3JlOjp0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0
aW9ucyBpbnN0ZWFkLgogLSAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpc3RhcnRQb3NpdGlvbiBlbmRQb3NpdGlvbjooY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJillbmRQb3NpdGlvbgogewogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmc3RhcnRQb3Np
dGlvbiwgJmVuZFBvc2l0aW9uLCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAt
PiBSZXRhaW5QdHI8aWQ+IHsKQEAgLTEyNTQsNyArMTEyOSw3IEBAIHN0YXRpYyBOU1N0cmluZyog
bnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUoTm9kZSogcmVwbGFjZWROb2RlKQogICAgICAgICBpZiAo
IWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgIHJldHVy
biB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhiYWNraW5nT2JqZWN0LT5heE9i
amVjdENhY2hlKCksIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJu
IChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9ucyhiYWNraW5nT2JqZWN0LT5h
eE9iamVjdENhY2hlKCksIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKICAgICB9KTsKIH0K
IApAQCAtMTgxMywxMSArMTY4OCw2IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05T
X0VORAogICAgIHJldHVybiBvYmplY3RBdHRyaWJ1dGVzOwogfQogCi0tIChWaXNpYmxlUG9zaXRp
b25SYW5nZSl2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTooaWQpdGV4dE1h
cmtlclJhbmdlCi17Ci0gICAgcmV0dXJuIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtl
clJhbmdlKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJS
YW5nZSk7Ci19Ci0KIC0gKE5TQXJyYXkqKXJlbmRlcldpZGdldENoaWxkcmVuCiB7CiAgICAgYXV0
byogYmFja2luZ09iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0OwpAQCAtMTg0Niw5ICsxNzE2
LDkgQEAgc3RhdGljIHZvaWQgY29udmVydFRvVmVjdG9yKE5TQXJyYXkqIGFycmF5LCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2gKICAgICB9CiB9CiAKLS0gKGlkKXRleHRNYXJr
ZXJSYW5nZUZvclNlbGVjdGlvbgorLSAoQVhUZXh0TWFya2VyUmFuZ2VSZWYpdGV4dE1hcmtlclJh
bmdlRm9yU2VsZWN0aW9uCiB7Ci0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0
b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oW3Byb3RlY3RlZFNlbGYgPSByZXRhaW5Q
dHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4geworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8QVhUZXh0TWFya2VyUmFu
Z2VSZWY+KFtwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8
QVhUZXh0TWFya2VyUmFuZ2VSZWY+IHsKICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHBy
b3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OwogICAgICAgICBpZiAoIWJhY2tpbmdP
YmplY3QpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwpAQCAtMTg1Niw2ICsxNzI2LDcgQEAgc3Rh
dGljIHZvaWQgY29udmVydFRvVmVjdG9yKE5TQXJyYXkqIGFycmF5LCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2gKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24g
PSBiYWNraW5nT2JqZWN0LT5zZWxlY3Rpb24oKTsKICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc05v
bmUoKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CisKICAgICAgICAgcmV0dXJuIHRleHRNYXJr
ZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUo
KSwgc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKICAg
ICB9KTsKIH0KQEAgLTI0MDIsNyArMjI3Myw4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5U
QVRJT05TX0VORAogICAgICAgICAvLyBUT0RPOiBHZXQgYWN0dWFsIHZpc2libGUgcmFuZ2UuIDxy
ZGFyOi8vcHJvYmxlbS80NzEyMTAxPgogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVh
bFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlWaXNpYmxlQ2hhcmFjdGVyUmFuZ2VBdHRyaWJ1dGVd
KQogICAgICAgICAgICAgcmV0dXJuIGJhY2tpbmdPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpID8g
bmlsIDogW05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6IE5TTWFrZVJhbmdlKDAsIGJhY2tpbmdPYmpl
Y3QtPnRleHRMZW5ndGgoKSldOwotICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlJbnNlcnRpb25Qb2ludExpbmVOdW1iZXJBdHRyaWJ1dGVd
KSB7CisKKyAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlJbnNlcnRpb25Qb2ludExpbmVOdW1iZXJBdHRyaWJ1dGVdKSB7CiAgICAgICAgICAg
ICAvLyBpZiBzZWxlY3Rpb25FbmQgPiAwLCB0aGVuIHRoZXJlIGlzIHNlbGVjdGVkIHRleHQgYW5k
IHRoaXMgcXVlc3Rpb24gc2hvdWxkIG5vdCBiZSBhbnN3ZXJlZAogICAgICAgICAgICAgaWYgKGJh
Y2tpbmdPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpIHx8IGJhY2tpbmdPYmplY3QtPnNlbGVjdGlv
bkVuZCgpID4gMCkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwpAQCAtMjc4MiwyMSArMjY1
NCwyNSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgcmV0
dXJuIE5TQWNjZXNzaWJpbGl0eVZlcnRpY2FsT3JpZW50YXRpb25WYWx1ZTsKIAogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFNlbGVjdGVkVGV4dE1hcmtlclJhbmdl
Il0pCi0gICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dOwor
ICAgICAgICByZXR1cm4gKGlkKVtzZWxmIHRleHRNYXJrZXJSYW5nZUZvclNlbGVjdGlvbl07CiAK
ICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdGFydFRleHRNYXJr
ZXIiXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFz
ZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxm
KV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Ci0gICAgICAgICAgICBpZiAoYXV0byogYmFja2luZ09i
amVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnN0
YXJ0T2ZEb2N1bWVudChiYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpKV07Ci0gICAgICAgICAgICBy
ZXR1cm4gbmlsOworICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNl
bGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OworICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0
KQorICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgICAgIHJldHVybiAoaWQp
dGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbihiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hl
KCksIHN0YXJ0T2ZEb2N1bWVudChiYWNraW5nT2JqZWN0LT5kb2N1bWVudCgpKSk7CiAgICAgICAg
IH0pOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6QCJB
WEVuZFRleHRNYXJrZXIiXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmll
dmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbcHJvdGVjdGVkU2VsZiA9IHJl
dGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Ci0gICAgICAgICAgICBpZiAoYXV0
byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0KQot
ICAgICAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJs
ZVBvc2l0aW9uOmVuZE9mRG9jdW1lbnQoYmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKSldOwotICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBw
cm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKKyAgICAgICAgICAgIGlmICghYmFj
a2luZ09iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICAgICBy
ZXR1cm4gKGlkKXRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb24oYmFja2luZ09iamVjdC0+YXhP
YmplY3RDYWNoZSgpLCBlbmRPZkRvY3VtZW50KGJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCkpKTsK
ICAgICAgICAgfSk7CiAgICAgfQogCkBAIC0zNDkwLDcgKzMzNjYsNyBAQCBBTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlkIHRleHRNYXJrZXJSYW5nZSA9IG5pbDsKKyAgICBBWFRleHRNYXJr
ZXJSYW5nZVJlZiB0ZXh0TWFya2VyUmFuZ2UgPSBuaWw7CiAgICAgTlNOdW1iZXIqICAgICAgICAg
ICAgICAgbnVtYmVyID0gbmlsOwogICAgIE5TU3RyaW5nKiAgICAgICAgICAgICAgIHN0cmluZyA9
IG5pbDsKICAgICBOU1JhbmdlICAgICAgICAgICAgICAgICByYW5nZSA9IHswLCAwfTsKQEAgLTM0
OTgsNyArMzM3NCw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAg
ICAgLy8gZGVjb2RlIHRoZSBwYXJhbWV0ZXIKICAgICBpZiAoQVhPYmplY3RJc1RleHRNYXJrZXJS
YW5nZSh2YWx1ZSkpCi0gICAgICAgIHRleHRNYXJrZXJSYW5nZSA9IHZhbHVlOworICAgICAgICB0
ZXh0TWFya2VyUmFuZ2UgPSAoQVhUZXh0TWFya2VyUmFuZ2VSZWYpdmFsdWU7CiAgICAgZWxzZSBp
ZiAoW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pCiAgICAgICAgIG51bWJl
ciA9IHZhbHVlOwogICAgIGVsc2UgaWYgKFt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBj
bGFzc11dKQpAQCAtMzUxMyw3ICszMzg5LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRB
VElPTlNfRU5ECiAgICAgICAgIEFTU0VSVCh0ZXh0TWFya2VyUmFuZ2UpOwogICAgICAgICBBY2Nl
c3NpYmlsaXR5OjpwZXJmb3JtRnVuY3Rpb25Pbk1haW5UaHJlYWQoWyZ0ZXh0TWFya2VyUmFuZ2Us
IHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildIHsKICAgICAgICAgICAgIGlmIChhdXRv
KiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3QpCi0g
ICAgICAgICAgICAgICAgYmFja2luZ09iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25S
YW5nZShbcHJvdGVjdGVkU2VsZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5n
ZTp0ZXh0TWFya2VyUmFuZ2VdKTsKKyAgICAgICAgICAgICAgICBiYWNraW5nT2JqZWN0LT5zZXRT
ZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1h
cmtlclJhbmdlKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlclJhbmdl
KSk7CiAgICAgICAgIH0pOwogICAgIH0gZWxzZSBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlXSkgewogICAgICAgICBbc2Vs
ZiBiYXNlQWNjZXNzaWJpbGl0eVNldEZvY3VzOltudW1iZXIgYm9vbFZhbHVlXV07CkBAIC0zNjIz
LDQwICszNDk5LDUzIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAg
IHJldHVybiBjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50
cygqZG9jdW1lbnRFbGVtZW50KSwgcmFuZ2UpOwogfQogCi0tIChOU0ludGVnZXIpX2luZGV4Rm9y
VGV4dE1hcmtlcjooaWQpbWFya2VyCistIChOU0ludGVnZXIpX2luZGV4Rm9yVGV4dE1hcmtlcjoo
QVhUZXh0TWFya2VyUmVmKW1hcmtlcgogewogICAgIGlmICghbWFya2VyKQogICAgICAgICByZXR1
cm4gTlNOb3RGb3VuZDsKLSAgICAKLSAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBzZWxm
LmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgIENoYXJhY3Rlck9m
ZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2Vy
Om1hcmtlcl07Ci0gICAgICAgIGF1dG8gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRD
aGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyT2Zmc2V0KTsKLSAgICAg
ICAgaWYgKCFyYW5nZSkKKworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVl
RnJvbU1haW5UaHJlYWQ8TlNJbnRlZ2VyPihbJm1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IHJldGFp
blB0cihzZWxmKV0gKCkgLT4gTlNJbnRlZ2VyIHsKKyAgICAgICAgYXV0byogYmFja2luZ09iamVj
dCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhCYWNraW5nT2JqZWN0OworICAgICAgICBpZiAoIWJh
Y2tpbmdPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKLSAgICAgICAgcmV0
dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOipyYW5nZV0ubG9jYXRpb247Ci0gICAgfQotICAg
IHJldHVybiBOU05vdEZvdW5kOworCisgICAgICAgIGlmIChhdXRvKiBjYWNoZSA9IGJhY2tpbmdP
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKSkgeworICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNo
YXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIoY2FjaGUsIG1hcmtl
cik7CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hh
cmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7CisgICAgICAg
ICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgICAgIHJldHVybiBOU05vdEZvdW5kOworCisg
ICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgX2NvbnZlcnRUb05TUmFuZ2U6KnJhbmdl
XS5sb2NhdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOU05vdEZvdW5kOworICAg
IH0pOwogfQogCi0tIChpZClfdGV4dE1hcmtlckZvckluZGV4OihOU0ludGVnZXIpdGV4dEluZGV4
CistIChBWFRleHRNYXJrZXJSZWYpX3RleHRNYXJrZXJGb3JJbmRleDooTlNJbnRlZ2VyKXRleHRJ
bmRleAogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIEFjY2Vzc2li
aWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxBWFRleHRNYXJr
ZXJSZWY+KFsmdGV4dEluZGV4LCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAt
PiBSZXRhaW5QdHI8QVhUZXh0TWFya2VyUmVmPiB7CisgICAgICAgIGF1dG8qIGJhY2tpbmdPYmpl
Y3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKKyAgICAgICAgaWYgKCFi
YWNraW5nT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIGF1dG8qIGRvY3Vt
ZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVu
dCkKLSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgYXV0byogY2FjaGUgPSBiYWNraW5nT2Jq
ZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICBy
ZXR1cm4gbmlsOwogCi0gICAgYXV0byogZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3Vt
ZW50RWxlbWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBuaWw7Cisg
ICAgICAgIGF1dG8qIGRvY3VtZW50ID0gYmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsKKyAgICAg
ICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBhdXRvKiBj
YWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7Ci0gICAgaWYgKCFj
YWNoZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgYXV0byogZG9jdW1lbnRFbGVtZW50
ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgICAgICBpZiAoIWRvY3VtZW50RWxl
bWVudCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBhdXRvIGJvdW5kYXJ5ID0gcmVz
b2x2ZUNoYXJhY3RlckxvY2F0aW9uKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqZG9j
dW1lbnRFbGVtZW50KSwgdGV4dEluZGV4KTsKLSAgICBhdXRvIGNoYXJhY3Rlck9mZnNldCA9IGNh
Y2hlLT5zdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UobWFrZVNpbXBsZVJhbmdlKGJv
dW5kYXJ5KSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJP
ZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0XTsKKyAgICAgICAgYXV0byBib3VuZGFyeSA9IHJlc29sdmVD
aGFyYWN0ZXJMb2NhdGlvbihtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmRvY3VtZW50
RWxlbWVudCksIHRleHRJbmRleCk7CisgICAgICAgIGF1dG8gY2hhcmFjdGVyT2Zmc2V0ID0gY2Fj
aGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShtYWtlU2ltcGxlUmFuZ2UoYm91
bmRhcnkpLCB0cnVlKTsKKworICAgICAgICByZXR1cm4gdGV4dE1hcmtlckZvckNoYXJhY3Rlck9m
ZnNldChjYWNoZSwgY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICB9KTsKIH0KIAogLy8gVGhlIFJURiBy
ZXByZXNlbnRhdGlvbiBvZiB0aGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY2Nlc3NpYmls
aXR5IG9iamVjdCB0aGF0IGlzCkBAIC0zNjY4LDI2ICszNTU3LDMwIEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogfQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQot
LSAoTlNTdHJpbmcgKilkZWJ1Z0Rlc2NyaXB0aW9uRm9yVGV4dE1hcmtlcjooaWQpdGV4dE1hcmtl
cgorLSAoTlNTdHJpbmcgKilkZWJ1Z0Rlc2NyaXB0aW9uRm9yVGV4dE1hcmtlcjooQVhUZXh0TWFy
a2VyUmVmKXRleHRNYXJrZXIKIHsKLSAgICByZXR1cm4gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9y
VGV4dE1hcmtlcjp0ZXh0TWFya2VyXS5kZWJ1Z0Rlc2NyaXB0aW9uKCk7Ci0KKyAgICByZXR1cm4g
dmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcihzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpLCB0ZXh0TWFya2VyKS5kZWJ1Z0Rlc2NyaXB0aW9uKCk7CiB9CiAKLS0gKE5TU3Ry
aW5nICopZGVidWdEZXNjcmlwdGlvbkZvclRleHRNYXJrZXJSYW5nZTooaWQpdGV4dE1hcmtlclJh
bmdlCistIChOU1N0cmluZyAqKWRlYnVnRGVzY3JpcHRpb25Gb3JUZXh0TWFya2VyUmFuZ2U6KEFY
VGV4dE1hcmtlclJhbmdlUmVmKXRleHRNYXJrZXJSYW5nZQogewotICAgIFZpc2libGVQb3NpdGlv
blJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uUmFuZ2VG
b3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKKyAgICBhdXRvKiBiYWNraW5nT2Jq
ZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3Q7CisgICAgaWYgKCFiYWNraW5nT2JqZWN0KQorICAg
ICAgICByZXR1cm4gQCI8bnVsbD4iOworCisgICAgYXV0byB2aXNpYmxlUG9zaXRpb25SYW5nZSA9
IHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlKGJhY2tpbmdPYmplY3QtPmF4
T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlclJhbmdlKTsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9u
UmFuZ2UuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBAIjxudWxsPiI7CisKICAgICBjaGFyIGRl
c2NyaXB0aW9uWzIwNDhdOwogICAgIGZvcm1hdEZvckRlYnVnZ2VyKHZpc2libGVQb3NpdGlvblJh
bmdlLCBkZXNjcmlwdGlvbiwgc2l6ZW9mKGRlc2NyaXB0aW9uKSk7Ci0gICAgcmV0dXJuIFtOU1N0
cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpkZXNjcmlwdGlvbl07CiAKKyAgICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmRlc2NyaXB0aW9uXTsKIH0KIAotLSAodm9pZClz
aG93Tm9kZUZvclRleHRNYXJrZXI6KGlkKXRleHRNYXJrZXIKKy0gKHZvaWQpc2hvd05vZGVGb3JU
ZXh0TWFya2VyOihBWFRleHRNYXJrZXJSZWYpdGV4dE1hcmtlcgogewotICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zaXRpb24gPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2Vy
OnRleHRNYXJrZXJdOworICAgIGF1dG8gdmlzaWJsZVBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9u
Rm9yVGV4dE1hcmtlcihzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0
TWFya2VyKTsKICAgICBOb2RlKiBub2RlID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKQEAg
LTM2OTUsOSArMzU4OCw5IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgIG5vZGUtPnNob3dOb2RlUGF0aEZvclRoaXMoKTsKIH0KIAotLSAodm9pZClzaG93Tm9kZVRy
ZWVGb3JUZXh0TWFya2VyOihpZCl0ZXh0TWFya2VyCistICh2b2lkKXNob3dOb2RlVHJlZUZvclRl
eHRNYXJrZXI6KEFYVGV4dE1hcmtlclJlZil0ZXh0TWFya2VyCiB7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIHZpc2libGVQb3NpdGlvbiA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6
dGV4dE1hcmtlcl07CisgICAgYXV0byB2aXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25G
b3JUZXh0TWFya2VyKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRN
YXJrZXIpOwogICAgIE5vZGUqIG5vZGUgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MzczNSw5ICszNjI4LDkgQEAgZW51bSBjbGFzcyBUZXh0VW5pdCB7CiAgICAgUHJldmlvdXNMaW5l
U3RhcnQsCiB9OwogCi0tIChpZCl0ZXh0TWFya2VyUmFuZ2VBdFRleHRNYXJrZXI6KGlkKXRleHRN
YXJrZXIgZm9yVW5pdDooVGV4dFVuaXQpdGV4dFVuaXQKKy0gKEFYVGV4dE1hcmtlclJhbmdlUmVm
KXRleHRNYXJrZXJSYW5nZUF0VGV4dE1hcmtlcjooQVhUZXh0TWFya2VyUmVmKXRleHRNYXJrZXIg
Zm9yVW5pdDooVGV4dFVuaXQpdGV4dFVuaXQKIHsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6
cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnRleHRNYXJrZXIs
ICZ0ZXh0VW5pdCwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWlu
UHRyPGlkPiB7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2Vk
VmFsdWVGcm9tTWFpblRocmVhZDxBWFRleHRNYXJrZXJSYW5nZVJlZj4oWyZ0ZXh0TWFya2VyLCAm
dGV4dFVuaXQsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0
cjxBWFRleHRNYXJrZXJSYW5nZVJlZj4gewogICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0g
cHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CiAgICAgICAgIGlmICghYmFja2lu
Z09iamVjdCkKICAgICAgICAgICAgIHJldHVybiBuaWw7CkBAIC0zNzcwLDkgKzM2NjMsOSBAQCBl
bnVtIGNsYXNzIFRleHRVbml0IHsKICAgICB9KTsKIH0KIAotLSAoaWQpbGluZVRleHRNYXJrZXJS
YW5nZUZvclRleHRNYXJrZXI6KGlkKXRleHRNYXJrZXIgZm9yVW5pdDooVGV4dFVuaXQpdGV4dFVu
aXQKKy0gKEFYVGV4dE1hcmtlclJhbmdlUmVmKWxpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFy
a2VyOihBWFRleHRNYXJrZXJSZWYpdGV4dE1hcmtlciBmb3JVbml0OihUZXh0VW5pdCl0ZXh0VW5p
dAogewotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVl
RnJvbU1haW5UaHJlYWQ8aWQ+KFsmdGV4dE1hcmtlciwgJnRleHRVbml0LCBwcm90ZWN0ZWRTZWxm
ID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKKyAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPEFYVGV4
dE1hcmtlclJhbmdlUmVmPihbJnRleHRNYXJrZXIsICZ0ZXh0VW5pdCwgcHJvdGVjdGVkU2VsZiA9
IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPEFYVGV4dE1hcmtlclJhbmdlUmVmPiB7
CiAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFj
a2luZ09iamVjdDsKICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgcmV0
dXJuIG5pbDsKQEAgLTM4MDIsOSArMzY5NSw5IEBAIGVudW0gY2xhc3MgVGV4dFVuaXQgewogICAg
IH0pOwogfQogCi0tIChpZCl0ZXh0TWFya2VyRm9yVGV4dE1hcmtlcjooaWQpdGV4dE1hcmtlciBh
dFVuaXQ6KFRleHRVbml0KXRleHRVbml0CistIChBWFRleHRNYXJrZXJSZWYpdGV4dE1hcmtlckZv
clRleHRNYXJrZXI6KEFYVGV4dE1hcmtlclJlZil0ZXh0TWFya2VyIGF0VW5pdDooVGV4dFVuaXQp
dGV4dFVuaXQKIHsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFz
ZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnRleHRNYXJrZXIsICZ0ZXh0VW5pdCwgcHJvdGVj
dGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7CisgICAgcmV0
dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVh
ZDxBWFRleHRNYXJrZXJSZWY+KFsmdGV4dE1hcmtlciwgJnRleHRVbml0LCBwcm90ZWN0ZWRTZWxm
ID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8QVhUZXh0TWFya2VyUmVmPiB7CiAg
ICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2lu
Z09iamVjdDsKICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJu
IG5pbDsKQEAgLTM4NjQsOCArMzc1Nyw4IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogICAgIGlmICghYXR0cmlidXRlIHx8ICFwYXJhbWV0ZXIpCiAgICAgICAgIHJldHVy
biBuaWw7CiAKLSAgICBpZCB0ZXh0TWFya2VyID0gbmlsOwotICAgIGlkIHRleHRNYXJrZXJSYW5n
ZSA9IG5pbDsKKyAgICBBWFRleHRNYXJrZXJSZWYgdGV4dE1hcmtlciA9IG5pbDsKKyAgICBBWFRl
eHRNYXJrZXJSYW5nZVJlZiB0ZXh0TWFya2VyUmFuZ2UgPSBuaWw7CiAgICAgTlNOdW1iZXIqIG51
bWJlciA9IG5pbDsKICAgICBOU0FycmF5KiBhcnJheSA9IG5pbDsKICAgICBOU0RpY3Rpb25hcnkq
IGRpY3Rpb25hcnkgPSBuaWw7CkBAIC0zODgwLDkgKzM3NzMsOSBAQCBBTExPV19ERVBSRUNBVEVE
X0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAvLyBOT1RFOiBUaGlzIGFzc3VtZXMgbmlsIGlzIG5v
dCBhIHZhbGlkIHBhcmFtZXRlciwgYmVjYXVzZSBpdCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9t
CiAgICAgLy8gYSBwYXJhbWV0ZXIgb2YgdGhlIHdyb25nIHR5cGUuCiAgICAgaWYgKEFYT2JqZWN0
SXNUZXh0TWFya2VyKHBhcmFtZXRlcikpCi0gICAgICAgIHRleHRNYXJrZXIgPSBwYXJhbWV0ZXI7
CisgICAgICAgIHRleHRNYXJrZXIgPSAoQVhUZXh0TWFya2VyUmVmKXBhcmFtZXRlcjsKICAgICBl
bHNlIGlmIChBWE9iamVjdElzVGV4dE1hcmtlclJhbmdlKHBhcmFtZXRlcikpCi0gICAgICAgIHRl
eHRNYXJrZXJSYW5nZSA9IHBhcmFtZXRlcjsKKyAgICAgICAgdGV4dE1hcmtlclJhbmdlID0gKEFY
VGV4dE1hcmtlclJhbmdlUmVmKXBhcmFtZXRlcjsKICAgICBlbHNlIGlmIChbcGFyYW1ldGVyIGlz
S2luZE9mQ2xhc3M6W1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGNsYXNzXV0pCiAgICAg
ICAgIHVpRWxlbWVudCA9IFsoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKXBhcmFtZXRl
ciBheEJhY2tpbmdPYmplY3RdOwogICAgIGVsc2UgaWYgKFtwYXJhbWV0ZXIgaXNLaW5kT2ZDbGFz
czpbTlNOdW1iZXIgY2xhc3NdXSkKQEAgLTM5MzMsNyArMzgyNiw3IEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgaWYgKHJhbmdlcy5pc0VtcHR5KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgICAgIHJldHVybiBjcmVhdGVO
U0FycmF5KHJhbmdlcywgWyZdIChhdXRvJiByYW5nZSkgewotICAgICAgICAgICAgICAgIHJldHVy
biB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgp
LCByYW5nZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9t
UmFuZ2UoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCByYW5nZSk7CiAgICAgICAgICAg
ICB9KS5hdXRvcmVsZWFzZSgpOwogICAgICAgICB9KTsKICAgICB9CkBAIC0zOTQ0LDcgKzM4Mzcs
NyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAgIGlm
ICghYmFja2luZ09iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4o
KTsKIAotICAgICAgICAgICAgYXV0byB0ZXh0T3BlcmF0aW9uID0gYWNjZXNzaWJpbGl0eVRleHRP
cGVyYXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKHByb3RlY3RlZFNlbGYuZ2V0KCksIGRp
Y3Rpb25hcnkpOworICAgICAgICAgICAgYXV0byB0ZXh0T3BlcmF0aW9uID0gYWNjZXNzaWJpbGl0
eVRleHRPcGVyYXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKGJhY2tpbmdPYmplY3QtPmF4
T2JqZWN0Q2FjaGUoKSwgZGljdGlvbmFyeSk7CiAgICAgICAgICAgICByZXR1cm4gYmFja2luZ09i
amVjdC0+cGVyZm9ybVRleHRPcGVyYXRpb24odGV4dE9wZXJhdGlvbik7CiAgICAgICAgIH0pOwog
ICAgICAgICBpZiAob3BlcmF0aW9uUmVzdWx0LmlzRW1wdHkoKSkKQEAgLTM5NzgsNyArMzg3MSw4
IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogCiAgICAgICAgICAgICBJ
bnRSZWN0IHdlYkNvcmVSZWN0ID0gW3Byb3RlY3RlZFNlbGYgc2NyZWVuVG9Db250ZW50czplbmNs
b3NpbmdJbnRSZWN0KHJlY3QpXTsKICAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0
ZXJPZmZzZXQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9yQm91bmRzKHdlYkNvcmVSZWN0LCBm
YWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlckZvckNo
YXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOworCisgICAgICAgICAgICByZXR1cm4gKGlk
KXRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoY2FjaGUsIGNoYXJhY3Rlck9mZnNldCk7CiAg
ICAgICAgIH0pOwogICAgIH0KIApAQCAtMzk5NCw2MiArMzg4OCw3MCBAQCBBTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAogICAgICAgICAgICAgSW50UmVjdCB3ZWJDb3JlUmVj
dCA9IFtwcm90ZWN0ZWRTZWxmIHNjcmVlblRvQ29udGVudHM6ZW5jbG9zaW5nSW50UmVjdChyZWN0
KV07CiAgICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUt
PmNoYXJhY3Rlck9mZnNldEZvckJvdW5kcyh3ZWJDb3JlUmVjdCwgdHJ1ZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFy
YWN0ZXJPZmZzZXRdOworCisgICAgICAgICAgICByZXR1cm4gKGlkKXRleHRNYXJrZXJGb3JDaGFy
YWN0ZXJPZmZzZXQoY2FjaGUsIGNoYXJhY3Rlck9mZnNldCk7CiAgICAgICAgIH0pOwogICAgIH0K
IAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlMaW5l
VGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKQotICAg
ICAgICByZXR1cm4gW3NlbGYgbGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXI6dGV4dE1h
cmtlciBmb3JVbml0OlRleHRVbml0OjpMaW5lXTsKKyAgICAgICAgcmV0dXJuIChpZClbc2VsZiBs
aW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGZvclVuaXQ6VGV4dFVu
aXQ6OkxpbmVdOwogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eU1pc3NwZWxsaW5nVGV4dE1hcmtlclJhbmdlUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0p
IHsKLSAgICAgICAgYXV0byBjcml0ZXJpYSA9IGFjY2Vzc2liaWxpdHlNaXNzcGVsbGluZ1NlYXJj
aENyaXRlcmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShzZWxmLCBkaWN0aW9uYXJ5KTsKLSAg
ICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9t
TWFpblRocmVhZDxpZD4oWyZjcml0ZXJpYSwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxm
KV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7CisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Ojpy
ZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmZGljdGlvbmFyeSwg
cHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7CiAg
ICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJh
Y2tpbmdPYmplY3Q7CiAgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKIAorICAgICAgICAgICAgYXV0byogY2FjaGUgPSBiYWNraW5nT2Jq
ZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgICAgICBpZiAoIWNhY2hlKQorICAgICAgICAg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICAgICAgICAgIGF1dG8gY3JpdGVyaWEgPSBhY2Nlc3Np
YmlsaXR5TWlzc3BlbGxpbmdTZWFyY2hDcml0ZXJpYUZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUo
Y2FjaGUsIGRpY3Rpb25hcnkpOwogICAgICAgICAgICAgaWYgKGF1dG8gbWlzc3BlbGxpbmdSYW5n
ZSA9IGJhY2tpbmdPYmplY3QtPm1pc3NwZWxsaW5nUmFuZ2UoKmNyaXRlcmlhLmZpcnN0LCBjcml0
ZXJpYS5zZWNvbmQpKQotICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9t
UmFuZ2UoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCAqbWlzc3BlbGxpbmdSYW5nZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UoY2Fj
aGUsICptaXNzcGVsbGluZ1JhbmdlKTsKKwogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAg
ICAgfSk7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJJc1ZhbGlkUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAg
ICAgICAgYm9vbCByZXN1bHQgPSBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5U
aHJlYWQ8Ym9vbD4oWyZ0ZXh0TWFya2VyLCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYp
XSAoKSAtPiBib29sIHsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBbcHJvdGVj
dGVkU2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwotICAgICAg
ICAgICAgcmV0dXJuICFwb3MuaXNOdWxsKCk7CisgICAgICAgICAgICBhdXRvKiBiYWNraW5nT2Jq
ZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CisgICAgICAgICAgICBp
ZiAoIWJhY2tpbmdPYmplY3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICByZXR1cm4gIXZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXIoYmFja2luZ09iamVj
dC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyKS5pc051bGwoKTsKICAgICAgICAgfSk7CisK
ICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpyZXN1bHRdOwogICAgIH0K
IAotICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlJbmRl
eEZvclRleHRNYXJrZXJQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICBhdXRvIHJl
c3VsdCA9IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxOU0ludGVn
ZXI+KFsmdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4g
TlNJbnRlZ2VyIHsKLSAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiBfaW5kZXhGb3JU
ZXh0TWFya2VyOnRleHRNYXJrZXJdOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoSW50ZWdlcjpyZXN1bHRdOwotICAgIH0KKyAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5SW5kZXhGb3JUZXh0TWFya2VyUGFyYW1l
dGVyaXplZEF0dHJpYnV0ZV0pCisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aElu
dGVnZXI6W3NlbGYgX2luZGV4Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXV07CiAKLSAgICBpZiAo
W2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlckZvcklu
ZGV4UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZudW1iZXIs
IHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewot
ICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIF90ZXh0TWFya2VyRm9ySW5kZXg6W251
bWJlciBpbnRlZ2VyVmFsdWVdXTsKLSAgICAgICAgfSk7Ci0gICAgfQorICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyRm9ySW5kZXhQYXJh
bWV0ZXJpemVkQXR0cmlidXRlXSkKKyAgICAgICAgcmV0dXJuIChpZClbc2VsZiBfdGV4dE1hcmtl
ckZvckluZGV4OltudW1iZXIgaW50ZWdlclZhbHVlXV07CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBp
c0VxdWFsVG9TdHJpbmc6QCJBWFVJRWxlbWVudEZvclRleHRNYXJrZXIiXSkgewotICAgICAgICAv
LyBGSVhNRTogd2UgbmVlZCB0byByZXR1cm4gYW4gSXNvbGF0ZWRPYmplY3QgaWYgdGhpcyBpcyBj
YWxsZWQgb24gdGhlIEFYIHRocmVhZC4KICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJl
dHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ0ZXh0TWFya2VyLCBw
cm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKLSAg
ICAgICAgICAgIGF1dG8qIGF4T2JqZWN0ID0gW3Byb3RlY3RlZFNlbGYgYWNjZXNzaWJpbGl0eU9i
amVjdEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CisgICAgICAgICAgICBhdXRvKiBiYWNraW5n
T2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CisgICAgICAgICAg
ICBpZiAoIWJhY2tpbmdPYmplY3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
ICAgICAgICAgYXV0byogYXhPYmplY3QgPSBhY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtl
cihiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXIpOwogICAgICAgICAg
ICAgaWYgKCFheE9iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworCiAgICAgICAg
ICAgICBpZiAoYXhPYmplY3QtPmlzQXR0YWNobWVudCgpICYmIFtheE9iamVjdC0+d3JhcHBlcigp
IGF0dGFjaG1lbnRWaWV3XSkKICAgICAgICAgICAgICAgICByZXR1cm4gW2F4T2JqZWN0LT53cmFw
cGVyKCkgYXR0YWNobWVudFZpZXddOworCiAgICAgICAgICAgICByZXR1cm4gYXhPYmplY3QtPndy
YXBwZXIoKTsKICAgICAgICAgfSk7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhUZXh0TWFya2VyUmFuZ2VGb3JVSUVsZW1lbnQiXSkgewogICAgICAgICBy
ZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhy
ZWFkPGlkPihbJnVpRWxlbWVudF0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Ci0gICAgICAgICAgICBy
ZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKHVpRWxlbWVudC5nZXQoKS0+YXhPYmplY3RD
YWNoZSgpLCB1aUVsZW1lbnQuZ2V0KCktPmVsZW1lbnRSYW5nZSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKHVpRWxlbWVudC5nZXQoKS0+YXhPYmpl
Y3RDYWNoZSgpLCB1aUVsZW1lbnQuZ2V0KCktPmVsZW1lbnRSYW5nZSgpKTsKICAgICAgICAgfSk7
CiAgICAgfQogCkBAIC00MDU5LDcgKzM5NjEsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
ID0gW3Byb3RlY3RlZFNlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2Vy
XTsKKyAgICAgICAgICAgIGF1dG8gdmlzaWJsZVBvcyA9IHZpc2libGVQb3NpdGlvbkZvclRleHRN
YXJrZXIoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0TWFya2VyKTsKICAgICAg
ICAgICAgIHJldHVybiBiYWNraW5nT2JqZWN0LT5saW5lRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7
CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gQChyZXN1bHQpOwpAQCAtNDA3NCwyMiArMzk3
NiwyNiBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAg
IFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2U7CiAgICAgICAgICAgICBpZiAoW251bWJlciB1
bnNpZ25lZEludGVnZXJWYWx1ZV0gIT0gTlNOb3RGb3VuZCkKICAgICAgICAgICAgICAgICB2cFJh
bmdlID0gYmFja2luZ09iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKFtudW1iZXIg
dW5zaWduZWRJbnRWYWx1ZV0pOwotICAgICAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZy
b21WaXNpYmxlUG9zaXRpb25zKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdnBSYW5n
ZS5zdGFydCwgdnBSYW5nZS5lbmQpOworCisgICAgICAgICAgICByZXR1cm4gKGlkKXRleHRNYXJr
ZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUo
KSwgdnBSYW5nZS5zdGFydCwgdnBSYW5nZS5lbmQpOwogICAgICAgICB9KTsKICAgICB9CiAKICAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0cmluZ0ZvclRleHRNYXJrZXJS
YW5nZSJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJv
bU1haW5UaHJlYWQ8U3RyaW5nPihbJnRleHRNYXJrZXJSYW5nZSwgcHJvdGVjdGVkU2VsZiA9IHJl
dGFpblB0cihzZWxmKV0gKCkgLT4gU3RyaW5nIHsKLSAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBb
cHJvdGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwog
ICAgICAgICAgICAgYXV0byogYmFja2luZ09iamVjdCA9IHByb3RlY3RlZFNlbGYuZ2V0KCkuYXhC
YWNraW5nT2JqZWN0OwotICAgICAgICAgICAgcmV0dXJuIChyYW5nZSAmJiBiYWNraW5nT2JqZWN0
KSA/IGJhY2tpbmdPYmplY3QtPnN0cmluZ0ZvclJhbmdlKCpyYW5nZSkgOiBTdHJpbmcoKTsKKyAg
ICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKKyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvclRleHRNYXJrZXJSYW5n
ZShiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJSYW5nZSk7CisgICAg
ICAgICAgICByZXR1cm4gcmFuZ2UgPyBiYWNraW5nT2JqZWN0LT5zdHJpbmdGb3JSYW5nZSgqcmFu
Z2UpIDogU3RyaW5nKCk7CiAgICAgICAgIH0pOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYVGV4dE1hcmtlckZvclBvc2l0aW9uIl0pIHsKLSAgICAgICAg
SW50UG9pbnQgd2ViQ29yZVBvaW50ID0gSW50UG9pbnQocG9pbnQpOwogICAgICAgICBpZiAoIXBv
aW50U2V0KQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgSW50UG9pbnQgd2ViQ29y
ZVBvaW50ID0gSW50UG9pbnQocG9pbnQpOwogCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmd2ViQ29yZVBv
aW50LCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+
IHsKICAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdldCgp
LmF4QmFja2luZ09iamVjdDsKQEAgLTQxMDEsNyArNDAwNyw4IEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICAg
ICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBjYWNoZS0+Y2hhcmFjdGVy
T2Zmc2V0Rm9yUG9pbnQod2ViQ29yZVBvaW50LCBiYWNraW5nT2JqZWN0KTsKLSAgICAgICAgICAg
IHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OmNoYXJh
Y3Rlck9mZnNldF07CisKKyAgICAgICAgICAgIHJldHVybiAoaWQpdGV4dE1hcmtlckZvckNoYXJh
Y3Rlck9mZnNldChjYWNoZSwgY2hhcmFjdGVyT2Zmc2V0KTsKICAgICAgICAgfSk7CiAgICAgfQog
CkBAIC00MTEwLDkgKzQwMTcsMTEgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
RU5ECiAgICAgICAgICAgICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQo
KS5heEJhY2tpbmdPYmplY3Q7CiAgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87Ci0gICAgICAgICAgICBhdXRvIHJhbmdlID0g
W3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsK
KworICAgICAgICAgICAgYXV0byByYW5nZSA9IHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlKGJhY2tp
bmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlclJhbmdlKTsKICAgICAgICAgICAg
IGlmICghcmFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIENHUmVjdFplcm87CisKICAgICAg
ICAgICAgIGF1dG8gYm91bmRzID0gRmxvYXRSZWN0KGJhY2tpbmdPYmplY3QtPmJvdW5kc0ZvclJh
bmdlKCpyYW5nZSkpOwogICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIGNvbnZlcnRS
ZWN0VG9TcGFjZTpib3VuZHMgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6U2Ny
ZWVuXTsKICAgICAgICAgfSk7CkBAIC00MTY2LDE3ICs0MDc1LDIxIEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZVdpdGhPcHRpb25zIl0pIHsK
ICAgICAgICAgaWYgKHRleHRNYXJrZXJSYW5nZSkKICAgICAgICAgICAgIHJldHVybiBbc2VsZiBk
b0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2Ugc3Bl
bGxDaGVjazpOT107CisKICAgICAgICAgaWYgKGRpY3Rpb25hcnkpIHsKLSAgICAgICAgICAgIGlk
IHRleHRNYXJrZXJSYW5nZSA9IG5pbDsKKyAgICAgICAgICAgIEFYVGV4dE1hcmtlclJhbmdlUmVm
IHRleHRNYXJrZXJSYW5nZSA9IG5pbDsKICAgICAgICAgICAgIGlkIHBhcmFtZXRlciA9IFtkaWN0
aW9uYXJ5IG9iamVjdEZvcktleTpAIkFYVGV4dE1hcmtlclJhbmdlIl07CiAgICAgICAgICAgICBp
ZiAoQVhPYmplY3RJc1RleHRNYXJrZXJSYW5nZShwYXJhbWV0ZXIpKQotICAgICAgICAgICAgICAg
IHRleHRNYXJrZXJSYW5nZSA9IHBhcmFtZXRlcjsKKyAgICAgICAgICAgICAgICB0ZXh0TWFya2Vy
UmFuZ2UgPSAoQVhUZXh0TWFya2VyUmFuZ2VSZWYpcGFyYW1ldGVyOworCiAgICAgICAgICAgICBC
T09MIHNwZWxsQ2hlY2sgPSBOTzsKICAgICAgICAgICAgIHBhcmFtZXRlciA9IFtkaWN0aW9uYXJ5
IG9iamVjdEZvcktleTpAIkFYU3BlbGxDaGVjayJdOwogICAgICAgICAgICAgaWYgKFtwYXJhbWV0
ZXIgaXNLaW5kT2ZDbGFzczpbTlNOdW1iZXIgY2xhc3NdXSkKICAgICAgICAgICAgICAgICBzcGVs
bENoZWNrID0gW3BhcmFtZXRlciBib29sVmFsdWVdOworCiAgICAgICAgICAgICByZXR1cm4gW3Nl
bGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdl
IHNwZWxsQ2hlY2s6c3BlbGxDaGVja107CiAgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gbmls
OwogICAgIH0KIApAQCAtNDE4NCwxMSArNDA5NywxMiBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkQKICAgICAgICAgaWYgKFthcnJheSBjb3VudF0gPCAyKQogICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKIAotICAgICAgICBpZCB0ZXh0TWFya2VyMSA9IFthcnJheSBvYmplY3RB
dEluZGV4OjBdOwotICAgICAgICBpZCB0ZXh0TWFya2VyMiA9IFthcnJheSBvYmplY3RBdEluZGV4
OjFdOwotICAgICAgICBpZiAoIUFYT2JqZWN0SXNUZXh0TWFya2VyKHRleHRNYXJrZXIxKSB8fCAh
QVhPYmplY3RJc1RleHRNYXJrZXIodGV4dE1hcmtlcjIpKQorICAgICAgICBpZiAoIUFYT2JqZWN0
SXNUZXh0TWFya2VyKFthcnJheSBvYmplY3RBdEluZGV4OjBdKSB8fCAhQVhPYmplY3RJc1RleHRN
YXJrZXIoW2FycmF5IG9iamVjdEF0SW5kZXg6MF0pKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsK
IAorICAgICAgICBBWFRleHRNYXJrZXJSZWYgdGV4dE1hcmtlcjEgPSAoQVhUZXh0TWFya2VyUmVm
KVthcnJheSBvYmplY3RBdEluZGV4OjBdOworICAgICAgICBBWFRleHRNYXJrZXJSZWYgdGV4dE1h
cmtlcjIgPSAoQVhUZXh0TWFya2VyUmVmKVthcnJheSBvYmplY3RBdEluZGV4OjFdOworCiAgICAg
ICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1h
aW5UaHJlYWQ8aWQ+KFsmdGV4dE1hcmtlcjEsICZ0ZXh0TWFya2VyMiwgcHJvdGVjdGVkU2VsZiA9
IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7CiAgICAgICAgICAgICBhdXRv
KiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmplY3Q7CiAg
ICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCkBAIC00MTk4LDY4ICs0MTEyLDg1IEBAIEFM
TE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgaWYgKCFjYWNo
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgICAgICBDaGFyYWN0ZXJP
ZmZzZXQgY2hhcmFjdGVyT2Zmc2V0MSA9IFtwcm90ZWN0ZWRTZWxmIGNoYXJhY3Rlck9mZnNldEZv
clRleHRNYXJrZXI6dGV4dE1hcmtlcjFdOwotICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNo
YXJhY3Rlck9mZnNldDIgPSBbcHJvdGVjdGVkU2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFy
a2VyOnRleHRNYXJrZXIyXTsKKyAgICAgICAgICAgIGF1dG8gY2hhcmFjdGVyT2Zmc2V0MSA9IGNo
YXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIoY2FjaGUsIHRleHRNYXJrZXIxKTsKKyAgICAgICAg
ICAgIGF1dG8gY2hhcmFjdGVyT2Zmc2V0MiA9IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIo
Y2FjaGUsIHRleHRNYXJrZXIyKTsKICAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYWNoZS0+cmFu
Z2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldDEsIGNoYXJhY3Rl
ck9mZnNldDIpOwotICAgICAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZShj
YWNoZSwgcmFuZ2UpOworCisgICAgICAgICAgICByZXR1cm4gKGlkKXRleHRNYXJrZXJSYW5nZUZy
b21SYW5nZShjYWNoZSwgcmFuZ2UpOwogICAgICAgICB9KTsKICAgICB9CiAKICAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJd
KSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZh
bHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IHJldGFp
blB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Ci0gICAgICAgICAgICBDaGFyYWN0ZXJP
ZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW3Byb3RlY3RlZFNlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9y
VGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKKyAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3Qg
PSBwcm90ZWN0ZWRTZWxmLmdldCgpLmF4QmFja2luZ09iamVjdDsKKyAgICAgICAgICAgIGlmICgh
YmFja2luZ09iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICAg
ICBhdXRvKiBjYWNoZSA9IGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAg
ICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICAg
ICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rlck9mZnNldEZvclRl
eHRNYXJrZXIoY2FjaGUsIHRleHRNYXJrZXIpOwogICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0
ZWRTZWxmIG5leHRUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OmNoYXJhY3Rlck9mZnNldF07
CiAgICAgICAgIH0pOwogICAgIH0KIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYUHJldmlvdXNUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIHJldHVy
biBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8
aWQ+KFsmdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4g
UmV0YWluUHRyPGlkPiB7Ci0gICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zm
c2V0ID0gW3Byb3RlY3RlZFNlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFy
a2VyXTsKKyAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdl
dCgpLmF4QmFja2luZ09iamVjdDsKKyAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICAgICBhdXRvKiBjYWNoZSA9IGJh
Y2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgICAgIGlmICghY2FjaGUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5pbDsKKworICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0
IGNoYXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXIoY2FjaGUsIHRl
eHRNYXJrZXIpOwogICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHByZXZpb3VzVGV4
dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOwogICAgICAgICB9KTsK
ICAgICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExlZnRXb3Jk
VGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKQotICAgICAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlclJhbmdlQXRUZXh0TWFya2VyOnRleHRNYXJrZXIgZm9yVW5pdDpUZXh0VW5pdDo6TGVm
dFdvcmRdOworICAgICAgICByZXR1cm4gKGlkKVtzZWxmIHRleHRNYXJrZXJSYW5nZUF0VGV4dE1h
cmtlcjp0ZXh0TWFya2VyIGZvclVuaXQ6VGV4dFVuaXQ6OkxlZnRXb3JkXTsKIAogICAgIGlmIChb
YXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUmlnaHRXb3JkVGV4dE1hcmtlclJhbmdlRm9y
VGV4dE1hcmtlciJdKQotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlQXRUZXh0
TWFya2VyOnRleHRNYXJrZXIgZm9yVW5pdDpUZXh0VW5pdDo6UmlnaHRXb3JkXTsKKyAgICAgICAg
cmV0dXJuIChpZClbc2VsZiB0ZXh0TWFya2VyUmFuZ2VBdFRleHRNYXJrZXI6dGV4dE1hcmtlciBm
b3JVbml0OlRleHRVbml0OjpSaWdodFdvcmRdOwogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhMZWZ0TGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkKLSAg
ICAgICAgcmV0dXJuIFtzZWxmIGxpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyOnRleHRN
YXJrZXIgZm9yVW5pdDpUZXh0VW5pdDo6TGVmdExpbmVdOworICAgICAgICByZXR1cm4gKGlkKVtz
ZWxmIGxpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIgZm9yVW5pdDpU
ZXh0VW5pdDo6TGVmdExpbmVdOwogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
OkAiQVhSaWdodExpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pCi0gICAgICAgIHJl
dHVybiBbc2VsZiBsaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGZv
clVuaXQ6VGV4dFVuaXQ6OlJpZ2h0TGluZV07CisgICAgICAgIHJldHVybiAoaWQpW3NlbGYgbGlu
ZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBmb3JVbml0OlRleHRVbml0
OjpSaWdodExpbmVdOwogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhT
ZW50ZW5jZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkKLSAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRNYXJrZXJSYW5nZUF0VGV4dE1hcmtlcjp0ZXh0TWFya2VyIGZvclVuaXQ6VGV4dFVu
aXQ6OlNlbnRlbmNlXTsKKyAgICAgICAgcmV0dXJuIChpZClbc2VsZiB0ZXh0TWFya2VyUmFuZ2VB
dFRleHRNYXJrZXI6dGV4dE1hcmtlciBmb3JVbml0OlRleHRVbml0OjpTZW50ZW5jZV07CiAKICAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFBhcmFncmFwaFRleHRNYXJrZXJS
YW5nZUZvclRleHRNYXJrZXIiXSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5n
ZUF0VGV4dE1hcmtlcjp0ZXh0TWFya2VyIGZvclVuaXQ6VGV4dFVuaXQ6OlBhcmFncmFwaF07Cisg
ICAgICAgIHJldHVybiAoaWQpW3NlbGYgdGV4dE1hcmtlclJhbmdlQXRUZXh0TWFya2VyOnRleHRN
YXJrZXIgZm9yVW5pdDpUZXh0VW5pdDo6UGFyYWdyYXBoXTsKIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJd
KQotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclRleHRNYXJrZXI6dGV4dE1hcmtl
ciBhdFVuaXQ6VGV4dFVuaXQ6Ok5leHRXb3JkRW5kXTsKKyAgICAgICAgcmV0dXJuIChpZClbc2Vs
ZiB0ZXh0TWFya2VyRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGF0VW5pdDpUZXh0VW5pdDo6TmV4
dFdvcmRFbmRdOwogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2
aW91c1dvcmRTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pCi0gICAgICAgIHJldHVybiBb
c2VsZiB0ZXh0TWFya2VyRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGF0VW5pdDpUZXh0VW5pdDo6
UHJldmlvdXNXb3JkU3RhcnRdOworICAgICAgICByZXR1cm4gKGlkKVtzZWxmIHRleHRNYXJrZXJG
b3JUZXh0TWFya2VyOnRleHRNYXJrZXIgYXRVbml0OlRleHRVbml0OjpQcmV2aW91c1dvcmRTdGFy
dF07CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRMaW5lRW5k
VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIgYXRVbml0OlRleHRVbml0OjpOZXh0TGluZUVuZF07
CisgICAgICAgIHJldHVybiAoaWQpW3NlbGYgdGV4dE1hcmtlckZvclRleHRNYXJrZXI6dGV4dE1h
cmtlciBhdFVuaXQ6VGV4dFVuaXQ6Ok5leHRMaW5lRW5kXTsKIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNMaW5lU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlciJdKQotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclRleHRNYXJrZXI6dGV4
dE1hcmtlciBhdFVuaXQ6VGV4dFVuaXQ6OlByZXZpb3VzTGluZVN0YXJ0XTsKKyAgICAgICAgcmV0
dXJuIChpZClbc2VsZiB0ZXh0TWFya2VyRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGF0VW5pdDpU
ZXh0VW5pdDo6UHJldmlvdXNMaW5lU3RhcnRdOwogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOkAiQVhOZXh0U2VudGVuY2VFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKQot
ICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBh
dFVuaXQ6VGV4dFVuaXQ6Ok5leHRTZW50ZW5jZUVuZF07CisgICAgICAgIHJldHVybiAoaWQpW3Nl
bGYgdGV4dE1hcmtlckZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBhdFVuaXQ6VGV4dFVuaXQ6Ok5l
eHRTZW50ZW5jZUVuZF07CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJB
WFByZXZpb3VzU2VudGVuY2VTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pCi0gICAgICAg
IHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGF0VW5pdDpU
ZXh0VW5pdDo6UHJldmlvdXNTZW50ZW5jZVN0YXJ0XTsKKyAgICAgICAgcmV0dXJuIChpZClbc2Vs
ZiB0ZXh0TWFya2VyRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGF0VW5pdDpUZXh0VW5pdDo6UHJl
dmlvdXNTZW50ZW5jZVN0YXJ0XTsKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmlu
ZzpAIkFYTmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pCi0gICAgICAg
IHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGF0VW5pdDpU
ZXh0VW5pdDo6TmV4dFBhcmFncmFwaEVuZF07CisgICAgICAgIHJldHVybiAoaWQpW3NlbGYgdGV4
dE1hcmtlckZvclRleHRNYXJrZXI6dGV4dE1hcmtlciBhdFVuaXQ6VGV4dFVuaXQ6Ok5leHRQYXJh
Z3JhcGhFbmRdOwogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2
aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkKLSAgICAgICAgcmV0
dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIgYXRVbml0OlRleHRV
bml0OjpQcmV2aW91c1BhcmFncmFwaFN0YXJ0XTsKKyAgICAgICAgcmV0dXJuIChpZClbc2VsZiB0
ZXh0TWFya2VyRm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyIGF0VW5pdDpUZXh0VW5pdDo6UHJldmlv
dXNQYXJhZ3JhcGhTdGFydF07CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWFN0eWxlVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7CiAgICAgICAgIHJldHVy
biBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8
aWQ+KFsmdGV4dE1hcmtlciwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4g
UmV0YWluUHRyPGlkPiB7CkBAIC00MjczLDcgKzQyMDQsOCBAQCBBTExPV19ERVBSRUNBVEVEX0lN
UExFTUVOVEFUSU9OU19FTkQKIAogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyKGNhY2hlLCB0ZXh0TWFya2VyKTsKICAg
ICAgICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZwUmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5z
dHlsZVJhbmdlRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7Ci0gICAgICAgICAgICByZXR1cm4gdGV4
dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnMoY2FjaGUsIHZwUmFuZ2Uuc3RhcnQsIHZw
UmFuZ2UuZW5kKTsKKworICAgICAgICAgICAgcmV0dXJuIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9t
VmlzaWJsZVBvc2l0aW9ucyhjYWNoZSwgdnBSYW5nZS5zdGFydCwgdnBSYW5nZS5lbmQpOwogICAg
ICAgICB9KTsKICAgICB9CiAKQEAgLTQyODMsNyArNDIxNSw3IEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAg
ICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICBhdXRvIHJhbmdlID0gW3Byb3Rl
Y3RlZFNlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKKyAgICAg
ICAgICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvclRleHRNYXJrZXJSYW5nZShiYWNraW5nT2JqZWN0
LT5heE9iamVjdENhY2hlKCksIHRleHRNYXJrZXJSYW5nZSk7CiAgICAgICAgICAgICBpZiAoIXJh
bmdlKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgcmV0dXJuIEFYT2Jq
ZWN0Q2FjaGU6Omxlbmd0aEZvclJhbmdlKFNpbXBsZVJhbmdlIHsgKnJhbmdlIH0pOwpAQCAtNDI5
NSwxNiArNDIyNywyNSBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIAog
ICAgIC8vIFVzZWQgb25seSBieSBEdW1wUmVuZGVyVHJlZSAoc28gZmFyKS4KICAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJS
YW5nZSJdKSB7Ci0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxl
YXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmdGV4dE1hcmtlclJhbmdlLCAmYmFja2luZ09i
amVjdCwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlk
PiB7Ci0gICAgICAgICAgICBhdXRvIHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JUZXh0
TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKLSAgICAgICAgICAgIHJldHVybiBzdGFydE9y
RW5kVGV4dE1hcmtlckZvclJhbmdlKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFu
Z2UsIHRydWUpOworICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVBdXRvcmVs
ZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnRleHRNYXJrZXJSYW5nZSwgcHJvdGVjdGVk
U2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7CisgICAgICAgICAg
ICBhdXRvKiBiYWNraW5nT2JqZWN0ID0gcHJvdGVjdGVkU2VsZi5nZXQoKS5heEJhY2tpbmdPYmpl
Y3Q7CisgICAgICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgICAgICAgICAgYXV0byByYW5nZSA9IHJhbmdlRm9yVGV4dE1hcmtlclJh
bmdlKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdGV4dE1hcmtlclJhbmdlKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIChpZClzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlKGJhY2tp
bmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFuZ2UsIHRydWUpOwogICAgICAgICB9KTsKICAg
ICB9CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEVuZFRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyUmFuZ2UiXSkgewotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6
cmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnRleHRNYXJrZXJS
YW5nZSwgJmJhY2tpbmdPYmplY3QsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgp
IC0+IFJldGFpblB0cjxpZD4gewotICAgICAgICAgICAgYXV0byByYW5nZSA9IFtwcm90ZWN0ZWRT
ZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07Ci0gICAgICAgICAg
ICByZXR1cm4gc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZShiYWNraW5nT2JqZWN0LT5heE9i
amVjdENhY2hlKCksIHJhbmdlLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmdGV4dE1hcmtl
clJhbmdlLCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8
aWQ+IHsKKyAgICAgICAgICAgIGF1dG8qIGJhY2tpbmdPYmplY3QgPSBwcm90ZWN0ZWRTZWxmLmdl
dCgpLmF4QmFja2luZ09iamVjdDsKKyAgICAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbmlsOworCisgICAgICAgICAgICBhdXRvIHJhbmdlID0gcmFu
Z2VGb3JUZXh0TWFya2VyUmFuZ2UoYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB0ZXh0
TWFya2VyUmFuZ2UpOworICAgICAgICAgICAgcmV0dXJuIChpZClzdGFydE9yRW5kVGV4dE1hcmtl
ckZvclJhbmdlKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFuZ2UsIGZhbHNlKTsK
ICAgICAgICAgfSk7CiAgICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>