<?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>215982</bug_id>
          
          <creation_ts>2020-08-29 20:46:25 -0700</creation_ts>
          <short_desc>Remove comparePositions and make VisiblePosition improvements</short_desc>
          <delta_ts>2020-09-02 14:03:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>achristensen</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1683975</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-29 20:46:25 -0700</bug_when>
    <thetext>Remove comparePositions and make VisiblePosition improvements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683977</commentid>
    <comment_count>1</comment_count>
      <attachid>407561</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-29 21:42:58 -0700</bug_when>
    <thetext>Created attachment 407561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683978</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-29 21:46:08 -0700</bug_when>
    <thetext>One thing not explicitly mentioned in the change log that makes this improvement possible is that all the Position operators now consistently work properly with shadow trees. Before, comparePositions would handle shadow trees correctly, but operators like &lt; and &gt; would not. Now they are all consistently correct in this respect so we can switch to the simpler idiom by using the operators directly. In the few cases where this is not possible, we still don&apos;t need a comparePositions function: we can call documentOrder or one of the documentOrder-related functions instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684587</commentid>
    <comment_count>3</comment_count>
      <attachid>407705</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-01 13:00:41 -0700</bug_when>
    <thetext>Created attachment 407705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684634</commentid>
    <comment_count>4</comment_count>
      <attachid>407705</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-01 15:02:50 -0700</bug_when>
    <thetext>Comment on attachment 407705
Patch

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

&gt; Source/WebCore/editing/ios/EditorIOS.mm:372
&gt; +    VisibleSelection selection;
&gt;      selection.setBase(visiblePos);
&gt;      selection.setExtent(visiblePos);

Any reason not to use the VisibleSelection constructor that takes VisiblePositions here? e.g. VisibleSelection selection { visiblePos, visiblePos };? I guess the affinity of selection might be different?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684637</commentid>
    <comment_count>5</comment_count>
      <attachid>407705</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-01 15:10:05 -0700</bug_when>
    <thetext>Comment on attachment 407705
Patch

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

&gt;&gt; Source/WebCore/editing/ios/EditorIOS.mm:372
&gt;&gt;      selection.setExtent(visiblePos);
&gt; 
&gt; Any reason not to use the VisibleSelection constructor that takes VisiblePositions here? e.g. VisibleSelection selection { visiblePos, visiblePos };? I guess the affinity of selection might be different?

We almost certainly could and should do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684638</commentid>
    <comment_count>6</comment_count>
      <attachid>407705</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-01 15:11:25 -0700</bug_when>
    <thetext>Comment on attachment 407705
Patch

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

&gt;&gt;&gt; Source/WebCore/editing/ios/EditorIOS.mm:372
&gt;&gt;&gt;      selection.setExtent(visiblePos);
&gt;&gt; 
&gt;&gt; Any reason not to use the VisibleSelection constructor that takes VisiblePositions here? e.g. VisibleSelection selection { visiblePos, visiblePos };? I guess the affinity of selection might be different?
&gt; 
&gt; We almost certainly could and should do that.

Not only that, there’s one that takes a single VisiblePosition and uses it for both base and extent, and we should use that!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684680</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-01 18:07:38 -0700</bug_when>
    <thetext>This is passing tests. The &quot;failure&quot; on iOS-wk2 is a progression, probably a test doing better after r266399 that needs an updated expectation for this platform.

Sam, looks like you read the patch but didn’t review yet. Should I upload a new version with the VisibleSelection improvement?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684844</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-02 09:37:18 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; This is passing tests. The &quot;failure&quot; on iOS-wk2 is a progression, probably a
&gt; test doing better after r266399 that needs an updated expectation for this
&gt; platform.
&gt; 
&gt; Sam, looks like you read the patch but didn’t review yet. Should I upload a
&gt; new version with the VisibleSelection improvement?

No, sorry, was just not on a computer last night. Finishing off the review now, no need to upload a new one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684851</commentid>
    <comment_count>9</comment_count>
      <attachid>407705</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-02 09:50:18 -0700</bug_when>
    <thetext>Comment on attachment 407705
Patch

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

&gt; Source/WebCore/editing/TextAffinity.h:31
&gt; +enum Affinity : bool { Upstream, Downstream };

I think these would read clearer at callsites as an enum class, but I could see arguments either way and this is a clear improvement.

&gt; Source/WebCore/editing/VisibleUnits.cpp:1065
&gt; +    if (auto box = visiblePosition.inlineBoxAndOffset().box) {

A thought for the future. Given how often callers of inlineBoxAndOffset() want just the box, is there a worthwhile optimization of having a version that doesn&apos;t return the offset? Can any computation be avoided?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684970</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-02 14:02:05 -0700</bug_when>
    <thetext>Committed r266487: &lt;https://trac.webkit.org/changeset/266487&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684972</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-02 14:03:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/68231268&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407561</attachid>
            <date>2020-08-29 21:42:58 -0700</date>
            <delta_ts>2020-09-01 13:00:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215982-20200829214257.patch</filename>
            <type>text/plain</type>
            <size>138258</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmRjY2VjNzBhMmRmOGM0
Mjk3MzU0ZWNlODdlYWMxNTI2NGFlYWMyNC4uM2U2YzVhOThhNzc0ODQ1MzRkYmYxYzZhNTFhYmVm
MTBlYjFiZDMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNSBAQAorMjAyMC0wOC0yOSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGNvbXBhcmVQb3Np
dGlvbnMgYW5kIG1ha2UgVmlzaWJsZVBvc2l0aW9uIGltcHJvdmVtZW50cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTgyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bG9jYWxDYXJl
dFJlY3RGb3JDaGFyYWN0ZXJPZmZzZXQpOiBVcGRhdGVkIGZvcgorICAgICAgICBpbmxpbmVCb3hB
bmRPZmZzZXQuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0
KTogVXNlIHN0ZDo6bWF4L21pbiBpbnN0ZWFkIG9mIGNvbXBhcmVQb3NpdGlvbnMuCisgICAgICAg
IChpc1doaXRlU3BhY2VCZXR3ZWVuU2VudGVuY2VzKTogVXNlIGlzUG9pbnRJblJhbmdlIGluc3Rl
YWQgb2YgY29tcGFyZVBvc2l0aW9ucy4KKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpb24gY29u
c3QpOiBVcGRhdGVkIGZvcgorICAgICAgICBpbmxpbmVCb3hBbmRPZmZzZXQuCisgICAgICAgIChX
ZWJDb3JlOjpQb3NpdGlvbjo6aW5saW5lQm94QW5kT2Zmc2V0IGNvbnN0KTogUmVuYW1lZCBmcm9t
CisgICAgICAgIGdldElubGluZUJveEFuZE9mZnNldCBhbmQgY2hhbmdlZCB0byB1c2UgYSByZXR1
cm4gdmFsdWUgaW5zdGVhZCBvZiBvdXQgYXJndW1lbnRzLgorCisgICAgICAgICogZG9tL1Bvc2l0
aW9uLmg6IEFkZGVkIElubGluZUJveEFuZE9mZnNldCBzdHJ1Y3R1cmUgZm9yIHRoZSBpbmxpbmVC
b3hBbmRPZmZzZXQKKyAgICAgICAgZnVuY3Rpb24uIFVwZGF0ZSBmb3IgcmVuYW1lIG9mIEVBZmZp
bml0eSB0byBBZmZpbml0eS4gQ2hhbmdlZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQKKyAgICAgICAg
dG8gaW5saW5lQm94QW5kT2Zmc2V0IGFuZCB1c2UgYSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiBv
dXQgYXJndW1lbnRzLiBDaGFuZ2UKKyAgICAgICAgPCwgPiwgPD0sIGFuZCA+PSB0byBjYWxsIGRv
Y3VtZW50T3JkZXIuCisKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjp1cGRhdGVTdGFydEVuZCk6IFVz
ZSA8PSBpbnN0ZWFkIG9mIGNvbXBhcmVQb3NpdGlvbnMuCisgICAgICAgIFVzZSBWaXNpYmxlUG9z
aXRpb246OmRlZmF1bHRBZmZpbml0eSBpbnN0ZWFkIG9mIFZQX0RFRkFVTFRfQUZGSU5JVFkuCisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKTogVXNl
IDwgaW5zdGVhZCBvZiBjb21wYXJlUG9zaXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UpOiBEaXR0by4gQWxzbyBh
ZGRlZAorICAgICAgICBhIG1pc3NpbmcgbnVsbCBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKTogVXNl
IDw9IGFuZCA8IGluc3RlYWQKKyAgICAgICAgb2YgY29tcGFyZVBvc2l0aW9ucy4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6IFVzZSA8PSBp
bnN0ZWFkIG9mIGNvbXBhcmVQb3NpdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6bm9kZUZ1bGx5U2VsZWN0ZWQgY29uc3QpOiBVc2UgPj0gYW5kIDw9IGluc3RlYWQg
b2YKKyAgICAgICAgY29tcGFyZVBvc2l0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjpub2RlRnVsbHlVbnNlbGVjdGVkIGNvbnN0KTogVXNlIDwgYW5kID4gaW5zdGVh
ZCBvZgorICAgICAgICBjb21wYXJlUG9zaXRpb25zLgorCisgICAgICAgICogZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHQpOiBVc2UgPCBpbnN0ZWFkIG9mCisgICAgICAg
IGNvbXBhcmVQb3NpdGlvbnMsIGluIGEgd2F5IHRoYXQgaGFuZGxlcyB0aGUgbnVsbCBjYXNlIGNv
cnJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJ
bnNpZ25pZmljYW50VGV4dERvd25zdHJlYW0pOiBSZW1vdmVkCisgICAgICAgIHVubmVjZXNzYXJ5
IGV4cGxpY2l0IHVzZSBvZiBWUF9ERUZBVUxUX0FGRklOSVRZLgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhDb250ZW50c1RvTmV3QmxvY2tJZk5l
Y2Vzc2FyeSk6CisgICAgICAgIERpdHRvLiBBbHNvIHVzZSA8IGluc3RlYWQgb2YgY29tcGFyZVBv
c2l0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpjbG9uZVBh
cmFncmFwaFVuZGVyTmV3RWxlbWVudCk6IFVzZSA8PQorICAgICAgICBpbnN0ZWFkIG9mIGNvbXBh
cmVQb3NpdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92
ZVBhcmFncmFwaHMpOiBVc2UgPD0gYW5kID49IGluc3RlYWQgb2YKKyAgICAgICAgY29tcGFyZVBv
c2l0aW9ucy4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjppbml0aWFsaXplU3Rh
cnRFbmQpOiBVc2UgPj0gaW5zdGVhZCBvZgorICAgICAgICBjb21wYXJlUG9zaXRpb25zCisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzbWFydERlbGV0ZVBhcmFncmFw
aFNwYWNlcnMpOgorICAgICAgICBVc2UgVmlzaWJsZVBvc2l0aW9uOjpkZWZhdWx0QWZmaW5pdHkg
aW5zdGVhZCBvZiBWUF9ERUZBVUxUX0FGRklOSVRZLCBhbmQKKyAgICAgICAgaW4gb3RoZXIgY2Fz
ZXMgcmVtb3ZlZCB1bm5lY2Vzc2FyeSBleHBsaWNpdCB1c2Ugb2YgVlBfREVGQVVMVF9BRkZJTklU
WS4KKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRpYWxpemVQ
b3NpdGlvbkRhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUpOiBVc2UgPj0gaW5zdGVhZAorICAgICAgICBvZiBj
b21wYXJlUG9zaXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6bWVyZ2VQYXJhZ3JhcGhzKTogVXNlID49IGluc3RlYWQgb2YKKyAgICAgICAgY29tcGFyZVBv
c2l0aW9ucywgYWxzbyB1c2UgaXNPcnBoYW4gYW5kIG1lcmdlIHR3byBjaGVja3MgaW50byBvbmUu
CisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cGFyZVBvc2l0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaXJzdEVkaXRhYmxl
UG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KTogVXNlIDwgaW5zdGVhZCBvZgorICAgICAgICBj
b21wYXJlUG9zaXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6bGFzdEVkaXRhYmxlUG9zaXRpb25C
ZWZvcmVQb3NpdGlvbkluUm9vdCk6IFVzZSA+IGluc3RlYWQgb2YKKyAgICAgICAgY29tcGFyZVBv
c2l0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4p
OiBVc2UgPCBpbnN0ZWFkIG9mIGNvbXBhcmVQb3NpdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjps
b2NhbENhcmV0UmVjdEluUmVuZGVyZXJGb3JDYXJldFBhaW50aW5nKTogVXBkYXRlIGZvcgorICAg
ICAgICBsb2NhbENhcmV0UmVjdCBmdW5jdGlvbiB0aGF0IG5vIGxvbmdlciB1c2VzIGFuIG91dCBh
cmd1bWVudC4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOiBEZWxldGVkIGNvbXBhcmVQ
b3NpdGlvbnMuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UpOiBVc2UgPj0gaW5zdGVhZCBvZgor
ICAgICAgICBjb21wYXJlUG9zaXRpb25zLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9u
QnlNb3VzZUlmRGlmZmVyZW50KTogQXNzaWduCisgICAgICAgIGFuIGVtcHR5IHZhbHVlIHJhdGhl
ciB0aGFuIHVzaW5nIGEgY2xlYXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6ZGlyZWN0aW9uT2ZTZWxlY3Rpb24pOiBVcGRhdGVkIGZvcgorICAgICAgICBpbmxp
bmVCb3hBbmRPZmZzZXQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Y29udGFp
bnMgY29uc3QpOiBVc2UgaXNQb2ludEluUmFuZ2UgaW5zdGVhZAorICAgICAgICBvZiBjb21wYXJl
UG9zaXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1l
RWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToKKyAgICAgICAgVXNlIFVwc3RyZWFtIGlu
c3RlYWQgb2YgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUuCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6ZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgUmVtb3ZlZCB1bm5lY2Vzc2FyeSBleHBsaWNpdCB1c2Ugb2YgVlBfREVGQVVMVF9B
RkZJTklUWS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjaGFyYWN0ZXJJblJl
bGF0aW9uVG9DYXJldFNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OmNoYXJhY3RlckJlZm9yZUNhcmV0U2VsZWN0aW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgVGhlcmUgaXMgb25seSBvbmUgY2FsbGVyLCBhbmQgd2UgY2FuIG1vdmUg
dGhlIGFsZ29yaXRobSwgbm93IGEgb25lLWxpbmVyLCB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpjaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uIGNvbnN0KTogRGVs
ZXRlZC4gRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9u
QXREb2N1bWVudFN0YXJ0IGNvbnN0KTogRGVsZXRlZC4gRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRXb3JkU3RhcnQgY29uc3QpOiBVc2UgdmlzaWJs
ZVN0YXJ0CisgICAgICAgIGluYXRlYWQgb2YgY3JlYXRpbmcgYSBuZXcgcG9zaXRpb24gd2l0aCBW
UF9ERUZBVUxUX0FGRklOSVRZLiBBbHNvIHN0cmVhbWxpbmVkCisgICAgICAgIHRoZSBmdW5jdGlv
biBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RSYW5nZU9u
RWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6d29y
ZFNlbGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbik6CisgICAgICAgIFJlbW92ZWQgdW5u
ZWNlc3NhcnkgZXhwbGljaXQgdXNlIG9mIFZQX0RFRkFVTFRfQUZGSU5JVFkuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0IGNvbnN0KTog
RGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFVwZGF0ZWQgZm9y
IGFib3ZlLgorCisgICAgICAgICogZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1h
bmQ6OmNhbGN1bGF0ZVN0eWxlQmVmb3JlSW5zZXJ0aW9uKToKKyAgICAgICAgUmVtb3ZlZCB1bm5l
Y2Vzc2FyeSBleHBsaWNpdCB1c2Ugb2YgVlBfREVGQVVMVF9BRkZJTklUWS4gQWxzbyB0aWdodGVu
ZWQKKyAgICAgICAgdXAgdGhlIGNvZGUgYSBiaXQgaW5jbHVkaW5nIHJlbW92aW5nIGFuIHVubmVj
ZXNzYXJ5IGFzc2VydGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFBhcmFncmFwaFNlcGFy
YXRvckNvbW1hbmQ6OmRvQXBwbHkpOiBVc2UgPD0gaW5zdGVhZCBvZgorICAgICAgICBjb21wYXJl
UG9zaXRpb25zLgorCisgICAgICAgICogZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246OlJlbmRlcmVkUG9zaXRpb24pOiBIYXZl
IHRoZSBWaXNpYmxlUG9zaXRpb24KKyAgICAgICAgY29uc3RydWN0b3IgY2FsbCB0aHJvdWdoIHRv
IHRoZSBQb3NpdGlvbi9BZmZpbml0eSBjb25zdHJ1Y3RvciBpbnN0ZWFkCisgICAgICAgIG9mIHJl
cGVhdGluZyB0aGUgbG9naWMgdHdpY2UuIFVwZGF0ZSBmb3IgaW5saW5lQm94QW5kT2Zmc2V0LiBJ
bml0aWFsaXplCisgICAgICAgIG1fb2Zmc2V0IGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIHNvIHdl
IGRvbid0IGhhdmUgdG8gZG8gaXQgaGVyZS4KKworICAgICAgICAqIGVkaXRpbmcvUmVuZGVyZWRQ
b3NpdGlvbi5oOiBJbml0aWFsaXplIGFsbCBkYXRhIG1lbWJlcnMuIFNvcnRlZCBhCisgICAgICAg
IGZ1bmN0aW9uIG1lbWJlciBhYm92ZSB0aGUgZGF0YSBtZW1iZXJzLgorCisgICAgICAgICogZWRp
dGluZy9UZXh0QWZmaW5pdHkuaDogUmVuYW1lZCBmb3IgbW9kZXJuIFdlYktpdCBjb2Rpbmcgc3R5
bGUsCisgICAgICAgIGVsaW1pbmF0aW5nIHRoZSB1c2Ugb2YgYWxsIGNhcHMgYW5kIHRoZSAiRSIg
cHJlZml4IG9uIEVBZmZpbml0eS4KKyAgICAgICAgRm9yIG5vdywgb2xkIG5hbWVzIGFyZSBhbHNv
IHN0aWxsIHN1cHBvcnRlZC4KKworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6VmlzaWJsZVBvc2l0aW9uKTog
VXNlIG1lbWJlciBjb25zdHJ1Y3Rpb24KKyAgICAgICAgcmF0aGVyIHRoYW4gYXNzaWdubWVudC4g
UmV3cm90ZSB0aGUgY29kZSB0aGF0IHN0b3JlcyB1cHN0cmVhbSBhZmZpbml0eQorICAgICAgICBv
bmx5IHdoZW4gYXBwcm9wcmlhdGUgdG8gYmUgbW9yZSBzdHJhaWdodGZvcndhcmQuIFRoZSBvbGQg
Y29kZSB3b3VsZAorICAgICAgICBzZXQgdG8gdXBzdHJlYW0gYW5kIHRoZW4gY2hhbmdlIGJhY2su
IFRoZSBuZXcgY29kZSBzZXRzIHRvIHVwc3RyZWFtCisgICAgICAgIG9ubHkgYWZ0ZXIgdGVzdGlu
ZyB0aGF0IGl0IHdvcmtlZC4gU2hvdWxkIGFsc28gYmUgZmFzdGVyIHNpbmNlIGl0CisgICAgICAg
IHNhdmVzIG9uZSBjYWxsIHRvIGNhbm9uaWNhbFBvc2l0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
VmlzaWJsZVBvc2l0aW9uOjppbml0KTogRGVsZXRlZC4gUm9sbGVkIGludG8gdGhlIGNvbnN0cnVj
dG9yLgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZSBjb25zdCk6CisgICAgICAgIFVwZGF0ZSBmb3IgaW5saW5lQm94QW5kT2Zm
c2V0LgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlz
dGluY3RDYW5kaWRhdGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQ
b3NpdGlvbjo6bG9jYWxDYXJldFJlY3QgY29uc3QpOiBSZXR1cm4gdGhlIHJlbmRlcmVyIGFzCisg
ICAgICAgIHBhcnQgb2YgdGhlIHJldHVybiB2YWx1ZSByYXRoZXIgdGhhbiBhbiBvdXQgYXJndW1l
bnQuIFVwZGF0ZSBmb3IKKyAgICAgICAgaW5saW5lQm94QW5kT2Zmc2V0IGFuZCBzdHJlYW1saW5l
IGxvZ2ljIGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjphYnNvbHV0
ZVNlbGVjdGlvbkJvdW5kc0ZvckxpbmUgY29uc3QpOgorICAgICAgICBVcGRhdGUgZm9yIGlubGlu
ZUJveEFuZE9mZnNldCBhbmQgcmVtb3ZlIHVubmVkZWQgc3BlY2lhbCBjYXNlcyBhbHJlYWR5Cisg
ICAgICAgIGNvdmVyZWQgYnkgdGhhdCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlZpc2li
bGVQb3NpdGlvbjo6bGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9u
IGNvbnN0KToKKyAgICAgICAgVXBkYXRlZCBmb3IgbG9jYWxDYXJldFJlY3QuCisgICAgICAgIChX
ZWJDb3JlOjpkb2N1bWVudE9yZGVyKTogQWRkZWQuCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5oOiBBZGRlZCBWaXNpYmxlUG9zaXRpb246OmRlZmF1bHRBZmZpbml0eQorICAg
ICAgICB0byByZXBsYWNlIFZQX0RFRkFVTFRfQUZGSU5JVFkuIERlbGV0ZWQgVlBfVVBTVFJFQU1f
SUZfUE9TU0lCTEU7IGNhbGxlcnMKKyAgICAgICAgd2lsbCBqdXN0IHVzZSBVcHN0cmVhbS4gRGVs
ZXRlZCB0aGUgY2xlYXIgZnVuY3Rpb24uIFJlbmFtZWQKKyAgICAgICAgZ2V0SW5saW5lQm94QW5k
T2Zmc2V0IHRvIGlubGluZUJveEFuZE9mZnNldCBhbmQgdXNlIGEgcmV0dXJuIHZhbHVlCisgICAg
ICAgIGluc3RlYWQgb2Ygb3V0IGFyZ3VtZW50cy4gVXNlIGEgcmV0dXJuIHZhbHVlIGluc3RlYWQg
b2Ygb3V0CisgICAgICAgIGFyZ3VtZW50cyBmb3IgbG9jYWxDYXJldFJlY3QuIE1hZGUgY2Fub25p
Y2FsUG9zaXRpb24gYSBzdGF0aWMgbWVtYmVyCisgICAgICAgIGZ1bmN0aW9uLiBVc2UgZG9jdW1l
bnRPcmRlciB0byBpbXBsZW1lbnQgPCwgPiwgPD0sIGFuZCA+PS4KKworICAgICAgICAqIGVkaXRp
bmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0
aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSBjb25zdCk6IFVzZSA+IGluc3RlYWQKKyAgICAgICAgb2Yg
Y29tcGFyZVBvc2l0aW9ucy4gQWxzbyBkbyB0aGUgY29tcGFyaXNvbiBhZnRlciBjYWxsaW5nCisg
ICAgICAgIHBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCBpbnN0ZWFkIG9mIGJlZm9yZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OnNldEJhc2VBbmRFeHRlbnRUb0RlZXBFcXVp
dmFsZW50cyk6CisgICAgICAgIFVzZSA8PSBpbnN0ZWFkIG9mIGNvbXBhcmVQb3NpdGlvbnMuCisg
ICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpzZXRXaXRob3V0VmFsaWRhdGlvbik6
IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dmlzdWFsV29yZFBvc2l0aW9uKTogVXBkYXRlIGZvciBpbmxpbmVCb3hBbmRPZmZz
ZXQuCisgICAgICAgIChXZWJDb3JlOjpuZXh0Qm91bmRhcnkpOiBVc2UgVXBzdHJlYW0gaW5zdGFk
IG9mIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFLgorICAgICAgICAoV2ViQ29yZTo6ZW5kUG9zaXRp
b25Gb3JMaW5lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0xpbmVQb3NpdGlv
bik6IFVwZGF0ZSBmb3IgaW5saW5lQm94QW5kT2Zmc2V0LgorICAgICAgICAoV2ViQ29yZTo6bmV4
dExpbmVQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6YXRCb3VuZGFyeU9mR3Jh
bnVsYXJpdHkpOiBVc2UgVXBzdHJlYW0gaW5zdGVhZCBvZgorICAgICAgICBWUF9VUFNUUkVBTV9J
Rl9QT1NTSUJMRS4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBoZXJlLAorICAgICAgICBi
ZWNhdXNlIHNldEFmZmluaXR5IGRvZXMgbm90IGFjdHVhbGx5IGNoZWNrIGlmIHVwc3RyZWFtIGlz
IHBvc3NpYmxlLAorICAgICAgICBzbyBpdCBpcyBzZXR0aW5nIHRvIFVwc3RyZWFtIHVuY29uZGl0
aW9uYWxseS4gVGhlIG9sZCBuYW1lIHdhcworICAgICAgICBtaXNsZWFkaW5nIGhlcmUuCisgICAg
ICAgIChXZWJDb3JlOjpuZXh0TGluZUJvdW5kYXJ5SW5EaXJlY3Rpb24pOiBEaXR0by4gU2FtZSBt
aXNsZWFkaW5nIHVzZS4KKworICAgICAgICAqIGVkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5t
bToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQpOiBVc2UgPiBpbnN0ZWFkIG9mIGNv
bXBhcmVQb3NpdGlvbnMuCisKKyAgICAgICAgKiBlZGl0aW5nL2lvcy9FZGl0b3JJT1MubW06Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50KTogUmVtb3Zl
ZCB1bm5lY2Vzc2FyeQorICAgICAgICBleHBsaWNpdCB1c2Ugb2YgVlBfREVGQVVMVF9BRkZJTklU
WS4KKworICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlcyk6IFVzZSA8PQorICAgICAgICBp
bnN0ZWFkIG9mIGNvbXBhcmVQb3NpdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVQ
cmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZUludGVybmFsKTogVXNlID09CisgICAgICAgIGFuZCA8
IGluc3RlYWQgb2YgY29tcGFyZVBvc2l0aW9ucy4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVz
c0V2ZW50U2luZ2xlQ2xpY2spOiBVc2UgPAorICAgICAgICBpbnN0ZWFkIG9mIGNvbXBhcmVQb3Np
dGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnVwZGF0ZVNlbGVjdGlvbkZv
ck1vdXNlRHJhZyk6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5l
Qm94ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94
KTogVXNlIFZpc2libGVQb3NpdGlvbjo6ZGVmYXVsdEFmZmluaXR5CisgICAgICAgIGluc3RlYWQg
b2YgVlBfREVGQVVMVF9BRkZJTklUWSBhbmQgVXBzdHJlYW0gaW5zdGVhZCBvZiBWUF9VUFNUUkVB
TV9JRl9QT1NTSUJMRS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OnBv
c2l0aW9uRm9yUG9pbnQgY29uc3QpOiBESXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5l
VGV4dDo6cG9zaXRpb25Gb3JQb2ludCk6IERpdHRvLgorCiAyMDIwLTA4LTI5ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIE5GQyBu
b3JtYWxpemF0aW9uIHdoZW4gc3VibWl0dGluZyBmb3JtcyBhbmQgZW5jb2RpbmcgVVJMIHF1ZXJp
ZXMgYW5kIGZpeCBFVUMtSlAgZW5jb2RpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNWUyNTdmODZjYmY2MzUxNTQz
NWE1NmFhODY4Yjc0OTM5MTdmMjRhZC4uZjkyMjdlOWUzNzA0MjRhMDVhZDUzMWI5Y2E4M2I3YzMy
NzMwNmU1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0wOC0yOSAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGNvbXBhcmVQb3NpdGlvbnMg
YW5kIG1ha2UgVmlzaWJsZVBvc2l0aW9uIGltcHJvdmVtZW50cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTgyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OnJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29v
cmRpbmF0ZXMpOiBVc2UgPD0gaW5zdGVhZCBvZgorICAgICAgICBjb21wYXJlUG9zaXRpb25zLgor
CiAyMDIwLTA4LTI4ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFNpdGVzIGJ1aWx0IHdpdGggZmxhbWJlLmpzIGRvbid0IHdvcmsgd2l0aCB0cmFja3Bh
ZCBvbiBpUGFkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKaW5kZXggZWNjY2MxZWJhOWEzMTUy
Y2I5ODk0ZGVmN2U0NzIyODY1OWMzZWE4Yy4uZjgwMGQ1YTE4MDFkZGFmZjk1NGJlNjcxZjZmOGUz
MjRiZjhkZDMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBA
CisyMDIwLTA4LTI5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmUgY29tcGFyZVBvc2l0aW9ucyBhbmQgbWFrZSBWaXNpYmxlUG9zaXRpb24gaW1wcm92ZW1l
bnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5
ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbToKKyAgICAgICAgKC1bV2ViVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uQnlNb3ZpbmdJbkRpcmVjdGlvbjphbW91bnQ6d2l0aEFmZmluaXR5
RG93bnN0cmVhbTpdKToKKyAgICAgICAgVXNlIFVwc3RyZWFtIGluc3RlYWQgb2YgVlBfVVBTVFJF
QU1fSUZfUE9TU0lCTEUuIFNpbmNlIHdlIHdlcmUgY2FsbGluZworICAgICAgICBzZXRBZmZpbml0
eSBoZXJlLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSB3YXMgbWlzbGVhZGluZyBzaW5jZSB0aGF0
IGZ1bmN0aW9uCisgICAgICAgIGRvZXMgbm90IGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgYWZm
aW5pdHkuCisgICAgICAgICgtW0RPTU5vZGUgc3RhcnRQb3NpdGlvbl0pOiBSZW1vdmVkIHVubmVj
ZXNzYXJ5IGV4cGxpY2l0IFZQX0RFRkFVTFRfQUZGSU5JVFkuCisgICAgICAgICgtW0RPTU5vZGUg
ZW5kUG9zaXRpb25dKTogRGl0dG8uCisKIDIwMjAtMDgtMTcgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIENyZWF0ZSBkb2N1bWVudE9yZGVyIGZ1bmN0aW9uLCBzdGFy
dCByZWZhY3RvcmluZyB0byB1c2UgaXQgaW5zdGVhZCBvZiBSYW5nZTo6Y29tcGFyZSBmdW5jdGlv
bnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA5MGYyMmYxMjljMmYwM2VhOTExYjlm
M2FmYTlmNWVkYTMzZjFlYjY4Li4zYTZiNzhiNmI1NmJkNjgyYjE2NzRhMzVmM2Q4OGViNmVhMDM1
NzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjAt
MDgtMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBj
b21wYXJlUG9zaXRpb25zIGFuZCBtYWtlIFZpc2libGVQb3NpdGlvbiBpbXByb3ZlbWVudHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTk4MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgIChraXQpOiBVcGRhdGUgZm9yIGNoYW5n
ZXMgdG8gQWZmaW5pdHkgZW51bWVyYXRpb24uCisgICAgICAgIChjb3JlKTogRGl0dG8uCisgICAg
ICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgY2hhcmFjdGVy
QmVmb3JlQ2FyZXRTZWxlY3Rpb25dKTogTW92ZWQgdGhlIGNvZGUgZnJvbQorICAgICAgICBGcmFt
ZVNlbGVjdGlvbjo6Y2hhcmFjdGVyQmVmb3JlQ2FyZXRTZWxlY3Rpb24gYmVjYXVzZSBpdCdzIGEg
b25lLWxpbmVyIG5vdy4KKyAgICAgICAgQWRkZWQgYSBjYWxsIHRvIHVwZGF0ZUxheW91dCBiZWNh
dXNlIGl0J3MgdW5jbGVhciB3aHkgd2UgY291bGQgZG8gd2l0aG91dCBpdCBiZWZvcmUuCisgICAg
ICAgIEFsc28gYWRkZWQgYSBudWxsIGNoZWNrIGZvciBmcmFtZSwgc2luY2UgdGhlcmUncyBubyBn
dWFyYW50ZWUgaXQncyBub3QgbnVsbC4KKyAgICAgICAgKC1bV2ViRnJhbWUgY2hhcmFjdGVyQWZ0
ZXJDYXJldFNlbGVjdGlvbl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9u
QXREb2N1bWVudFN0YXJ0XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBzZWxlY3ROU1Jh
bmdlOm9uRWxlbWVudDpdKTogRGl0dG8sIGJ1dCBhbHNvIGFkZGVkIGEgY29tbWVudCBiZWNhdXNl
CisgICAgICAgIHRoaXMgbWV0aG9kIGlzIG5vdCB1c2VmdWwgYW5kIGFsbW9zdCBjZXJ0YWlubHkg
bm90IHVzZWQuCisgICAgICAgICgtW1dlYkZyYW1lIF9zbWFydEluc2VydEZvclN0cmluZzpyZXBs
YWNpbmdSYW5nZTpiZWZvcmVTdHJpbmc6YWZ0ZXJTdHJpbmc6XSk6CisgICAgICAgIFVzZSBWaXNp
YmxlUG9zaXRpb246OmRlZmF1bHRBZmZpbml0eSBpbnN0ZWFkIG9mIFZQX0RFRkFVTFRfQUZGSU5J
VFkuCisKIDIwMjAtMDgtMjggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBhbG1vc3QgYWxsIHRoZSByZW1haW5pbmcgdXNlcyBvZiBsaXZlIHJhbmdlcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IDI2MmNkODM0MTU0ZjZkM2NjNWU3YmYwZWI4
MDk0Y2FlOWQwZTczM2IuLmNmNDJmYzFiOWFlNDZiMWQzYjg2YmNlMjE0ZDViZTZhYzRjYjlmN2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMC0wOC0y
OSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGNvbXBh
cmVQb3NpdGlvbnMgYW5kIG1ha2UgVmlzaWJsZVBvc2l0aW9uIGltcHJvdmVtZW50cworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTgyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBY2Nlc3NpYmxlVGV4
dEltcGwuY3BwOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OmlzSW5SYW5nZSk6IFVzZSBpc1Bv
aW50SW5SYW5nZSBpbnN0ZWFkIG9mCisgICAgICAgIGNvbXBhcmVQb3NpdGlvbnMuCisKIDIwMjAt
MDgtMjAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgbm9k
ZSBnZW9tZXRyeSBmdW5jdGlvbnMgZnJvbSBSYW5nZSB0byBSZW5kZXJPYmplY3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDFlMTA1OWRl
MWUyMDE1YzUzNDBkMjMxNWJiYTU2MDQ5YjMwMTA3ZDQuLmVhYTUzNmE1ZWUzOWQ4OWZmMzIzZjk3
NGFjNjYyOTM1NGM2N2RmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcApAQCAtMjg3NCwyNyArMjg3NCwyMiBAQCBMYXlvdXRSZWN0IEFYT2Jq
ZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hhcmFjdGVyT2Zmc2V0KFJlbmRlck9iamVjdCom
IHJlbmRlcgogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogICAgIH0KICAgICAKLSAgICBOb2Rl
KiBub2RlID0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGU7Ci0gICAgCi0gICAgcmVuZGVyZXIgPSBub2Rl
LT5yZW5kZXJlcigpOworICAgIHJlbmRlcmVyID0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGUtPnJlbmRl
cmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsK
ICAgICAKLSAgICBJbmxpbmVCb3gqIGlubGluZUJveCA9IG51bGxwdHI7Ci0gICAgaW50IGNhcmV0
T2Zmc2V0OwogICAgIC8vIFVzZSBhIGNvbGxhcHNlZCByYW5nZSB0byBnZXQgdGhlIHBvc2l0aW9u
LgogICAgIGF1dG8gcmFuZ2UgPSByYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hh
cmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJPZmZzZXQpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAg
IHJldHVybiBJbnRSZWN0KCk7Ci0gICAgCi0gICAgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KHJhbmdlLT5zdGFydCkuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KERPV05TVFJFQU0sIGlubGluZUJv
eCwgY2FyZXRPZmZzZXQpOwotICAgIAorCisgICAgYXV0byBbaW5saW5lQm94LCBjYXJldE9mZnNl
dF0gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KS5pbmxpbmVCb3hB
bmRPZmZzZXQoRG93bnN0cmVhbSk7CiAgICAgaWYgKGlubGluZUJveCkKICAgICAgICAgcmVuZGVy
ZXIgPSAmaW5saW5lQm94LT5yZW5kZXJlcigpOwotICAgIAorCiAgICAgaWYgKGlzPFJlbmRlckxp
bmVCcmVhaz4ocmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIp
LT5pbmxpbmVCb3hXcmFwcGVyKCkgIT0gaW5saW5lQm94KQogICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwotICAgIAorCiAgICAgcmV0dXJuIHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVC
b3gsIGNhcmV0T2Zmc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3Bw
CmluZGV4IGQ3MDZiMjc1ZDFiYjZlZDMwNDE0YmE4YTgxMDhlZjU3NjM4M2NhY2MuLmZkMWYxY2Ux
YTU1Mjg0Y2E4M2M5NTZiYjU0ZGJkNGZiNjczMmFiNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5jcHAKQEAgLTM5OSwxMyArMzk5LDggQEAgc3RhdGljIHZvaWQgZ2V0U2VsZWN0
aW9uT2Zmc2V0c0Zvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNp
YmwKICAgICBQb3NpdGlvbiBsYXN0VmFsaWRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbkluT3JBZnRl
ck5vZGUobm9kZS0+bGFzdERlc2NlbmRhbnQoKSk7CiAKICAgICAvLyBGaW5kIHRoZSBwcm9wZXIg
cmFuZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdGhhdCBmYWxscyBpbnNpZGUgdGhlIG9iamVjdC4KLSAg
ICBQb3NpdGlvbiBub2RlUmFuZ2VTdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpOwotICAgIGlmIChj
b21wYXJlUG9zaXRpb25zKG5vZGVSYW5nZVN0YXJ0LCBmaXJzdFZhbGlkUG9zaXRpb24pIDwgMCkK
LSAgICAgICAgbm9kZVJhbmdlU3RhcnQgPSBmaXJzdFZhbGlkUG9zaXRpb247Ci0KLSAgICBQb3Np
dGlvbiBub2RlUmFuZ2VFbmQgPSBzZWxlY3Rpb24uZW5kKCk7Ci0gICAgaWYgKGNvbXBhcmVQb3Np
dGlvbnMobm9kZVJhbmdlRW5kLCBsYXN0VmFsaWRQb3NpdGlvbikgPiAwKQotICAgICAgICBub2Rl
UmFuZ2VFbmQgPSBsYXN0VmFsaWRQb3NpdGlvbjsKKyAgICBhdXRvIG5vZGVSYW5nZVN0YXJ0ID0g
c3RkOjptYXgoc2VsZWN0aW9uLnN0YXJ0KCksIGZpcnN0VmFsaWRQb3NpdGlvbik7CisgICAgYXV0
byBub2RSYW5nZUVuZCA9IHN0ZDo6bWluKHNlbGVjdGlvbi5lbmQsIGxhc3RWYWxpZFBvc2l0aW9u
KTsKIAogICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBvZiB0aGUgc2VsZWN0ZWQgcmFuZ2UgaW5z
aWRlIHRoZSBvYmplY3QuCiAgICAgUG9zaXRpb24gcGFyZW50Rmlyc3RQb3NpdGlvbiA9IGZpcnN0
UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKQEAgLTcwMywxMiArNjk4LDEzIEBAIHN0YXRp
YyBib29sIGlzV2hpdGVTcGFjZUJldHdlZW5TZW50ZW5jZXMoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiBwb3NpdGlvbikKICAgICBpZiAoIWRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKHBvc2l0
aW9uLmNoYXJhY3RlckFmdGVyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBWaXNp
YmxlUG9zaXRpb24gc3RhcnRPZldoaXRlU3BhY2UgPSBzdGFydE9mV29yZChwb3NpdGlvbiwgUmln
aHRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZXaGl0ZVNwYWNl
ID0gZW5kT2ZXb3JkKHN0YXJ0T2ZXaGl0ZVNwYWNlLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpOwot
ICAgIGlmICghaXNTZW50ZW5jZUJvdW5kYXJ5KHN0YXJ0T2ZXaGl0ZVNwYWNlKSAmJiAhaXNTZW50
ZW5jZUJvdW5kYXJ5KGVuZE9mV2hpdGVTcGFjZSkpCisgICAgYXV0byBzdGFydCA9IHN0YXJ0T2ZX
b3JkKHBvc2l0aW9uLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpOworICAgIGF1dG8gZW5kID0gZW5k
T2ZXb3JkKHN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpOworICAgIGlmICghaXNTZW50ZW5j
ZUJvdW5kYXJ5KHN0YXJ0KSAmJiAhaXNTZW50ZW5jZUJvdW5kYXJ5KGVuZCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiBjb21wYXJlUG9zaXRpb25zKHN0YXJ0T2ZXaGl0ZVNw
YWNlLCBwb3NpdGlvbikgPD0gMCAmJiBjb21wYXJlUG9zaXRpb25zKGVuZE9mV2hpdGVTcGFjZSwg
cG9zaXRpb24pID49IDA7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydCwg
ZW5kKTsKKyAgICByZXR1cm4gcmFuZ2UgJiYgaXNQb2ludEluUmFuZ2UoKnJhbmdlLCBtYWtlQm91
bmRhcnlQb2ludChwb3NpdGlvbikpOwogfQogCiBzdGF0aWMgVmlzaWJsZVNlbGVjdGlvbiBzZW50
ZW5jZUF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0Kiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5
VHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggODA4NjAy
NDEzNTQ4ZDY2MjZkOTUwZWE2NzIyZDBlZGYzMTZiZTZiNy4uMTk1YmQ3NGRkY2VjOTcxNzkyMzU5
OTY1NmE5ZDgxZmRhZDYwYzY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMubW0KQEAgLTkwMywxMCArOTAzLDEwIEBAIC0gKENoYXJhY3Rlck9mZnNldCljaGFyYWN0ZXJP
ZmZzZXRGb3JUZXh0TWFya2VyOihpZCl0ZXh0TWFya2VyCiAgICAgcmV0dXJuIGJhY2tpbmdPYmpl
Y3QgPyBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKSwgKF9fYnJpZGdlIENGVHlwZVJlZil0ZXh0TWFya2VyKSA6IG5pbDsKIH0KIAotLSAo
aWQpdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjooY29uc3QgVmlzaWJsZVBvc2l0aW9uICYp
dmlzaWJsZVBvcworLSAoaWQpdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjooY29uc3QgVmlz
aWJsZVBvc2l0aW9uJilwb3NpdGlvbgogewogICAgIGF1dG8gKmJhY2tpbmdPYmplY3QgPSBzZWxm
LmF4QmFja2luZ09iamVjdDsKLSAgICByZXR1cm4gYmFja2luZ09iamVjdCA/IHRleHRNYXJrZXJG
b3JWaXNpYmxlUG9zaXRpb24oYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCB2aXNpYmxl
UG9zKSA6IG5pbDsKKyAgICByZXR1cm4gYmFja2luZ09iamVjdCA/IHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb24oYmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBwb3NpdGlvbikgOiBu
aWw7CiB9CiAKIC0gKGlkKXRleHRNYXJrZXJGb3JGaXJzdFBvc2l0aW9uSW5UZXh0Q29udHJvbDoo
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgJil0ZXh0Q29udHJvbApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5jcHAKaW5kZXggMmQ3YjQzZDQxMTdhMjg3ZmEwNmVkNmFkZDVjOGQ0NWMzMTU0OWVhZC4uZmUz
ZjM0MWMxMDQ5NWE3OWNhMTk2MDM2NGVlMmRhMThmNjIyNzdhNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRp
b24uY3BwCkBAIC0xMDY3LDExICsxMDY3LDggQEAgYm9vbCBQb3NpdGlvbjo6cmVuZGVyc0luRGlm
ZmVyZW50UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdAogICAgIGlmIChy
ZW5kZXJlciA9PSBwb3NpdGlvblJlbmRlcmVyICYmIHRoaXNSZW5kZXJlZE9mZnNldCA9PSBwb3Np
dGlvblJlbmRlcmVkT2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgaWdu
b3JlZENhcmV0T2Zmc2V0OwotICAgIElubGluZUJveCogYjE7Ci0gICAgZ2V0SW5saW5lQm94QW5k
T2Zmc2V0KERPV05TVFJFQU0sIGIxLCBpZ25vcmVkQ2FyZXRPZmZzZXQpOwotICAgIElubGluZUJv
eCogYjI7Ci0gICAgcG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KERPV05TVFJFQU0sIGIy
LCBpZ25vcmVkQ2FyZXRPZmZzZXQpOworICAgIGF1dG8gYjEgPSBpbmxpbmVCb3hBbmRPZmZzZXQo
RG93bnN0cmVhbSkuYm94OworICAgIGF1dG8gYjIgPSBwb3NpdGlvbi5pbmxpbmVCb3hBbmRPZmZz
ZXQoRG93bnN0cmVhbSkuYm94OwogCiAgICAgTE9HKEVkaXRpbmcsICJyZW5kZXJlcjogICAgICAg
ICAgICAgICAlcCBbJXBdXG4iLCByZW5kZXJlciwgYjEpOwogICAgIExPRyhFZGl0aW5nLCAidGhp
c1JlbmRlcmVkT2Zmc2V0OiAgICAgICAgICVkXG4iLCB0aGlzUmVuZGVyZWRPZmZzZXQpOwpAQCAt
MTA4MSwxMyArMTA3OCwxMSBAQCBib29sIFBvc2l0aW9uOjpyZW5kZXJzSW5EaWZmZXJlbnRQb3Np
dGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiAgICAgTE9HKEVkaXRpbmcsICJw
b3Mgbm9kZSBtaW4vbWF4OiAgICAgICAlZDolZFxuIiwgY2FyZXRNaW5PZmZzZXQoKnBvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCkpLCBjYXJldE1heE9mZnNldCgqcG9zaXRpb24uZGVwcmVjYXRlZE5v
ZGUoKSkpOwogICAgIExPRyhFZGl0aW5nLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAKLSAgICBpZiAo
IWIxIHx8ICFiMikgeworICAgIGlmICghYjEgfHwgIWIyKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQogCi0gICAgaWYgKCZiMS0+cm9vdCgpICE9ICZiMi0+cm9vdCgpKSB7CisgICAgaWYg
KCZiMS0+cm9vdCgpICE9ICZiMi0+cm9vdCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
CiAKICAgICBpZiAobmV4dFJlbmRlcmVkRWRpdGFibGUoZGVwcmVjYXRlZE5vZGUoKSkgPT0gcG9z
aXRpb24uZGVwcmVjYXRlZE5vZGUoKQogICAgICAgICAmJiB0aGlzUmVuZGVyZWRPZmZzZXQgPT0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhcmV0TWF4T2Zmc2V0KCpkZXByZWNhdGVkTm9kZSgpKSkg
JiYgIXBvc2l0aW9uUmVuZGVyZWRPZmZzZXQpIHsKQEAgLTExNDEsOSArMTEzNiw5IEBAIFBvc2l0
aW9uIFBvc2l0aW9uOjp0cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihFQWZmaW5pdHksIGJvb2wg
Y29uc2lkZXJOb25Db2xsYXBzCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBQb3NpdGlvbjo6
Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZpbml0eSBhZmZpbml0eSwgSW5saW5lQm94KiYgaW5s
aW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdAorSW5saW5lQm94QW5kT2Zmc2V0IFBvc2l0
aW9uOjppbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5KSBjb25zdAogewotICAg
IGdldElubGluZUJveEFuZE9mZnNldChhZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbigpLCBpbmxp
bmVCb3gsIGNhcmV0T2Zmc2V0KTsKKyAgICByZXR1cm4gaW5saW5lQm94QW5kT2Zmc2V0KGFmZmlu
aXR5LCBwcmltYXJ5RGlyZWN0aW9uKCkpOwogfQogCiBzdGF0aWMgYm9vbCBpc05vblRleHRMZWFm
Q2hpbGQoUmVuZGVyT2JqZWN0JiBvYmplY3QpCkBAIC0xMjAxLDEzICsxMTk2LDE5IEBAIHN0YXRp
YyBQb3NpdGlvbiB1cHN0cmVhbUlnbm9yaW5nRWRpdGluZ0JvdW5kYXJpZXMoUG9zaXRpb24gcG9z
aXRpb24pCiAgICAgcmV0dXJuIHBvc2l0aW9uOwogfQogCi12b2lkIFBvc2l0aW9uOjpnZXRJbmxp
bmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlE
aXJlY3Rpb24sIElubGluZUJveComIGlubGluZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QK
K0lubGluZUJveEFuZE9mZnNldCBQb3NpdGlvbjo6aW5saW5lQm94QW5kT2Zmc2V0KEFmZmluaXR5
IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0CiB7Ci0gICAg
Y2FyZXRPZmZzZXQgPSBkZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBkZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOworICAgIGF1dG8gY2Fy
ZXRPZmZzZXQgPSBkZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworCisgICAgYXV0byBub2RlID0g
ZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiB7IG51bGxw
dHIsIGNhcmV0T2Zmc2V0IH07CisgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7
CiAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAgIAorICAgICAgICByZXR1
cm4geyBudWxscHRyLCBjYXJldE9mZnNldCB9OworCisgICAgSW5saW5lQm94KiBpbmxpbmVCb3gg
PSBudWxscHRyOworCiAgICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpIHsKICAgICAgICAgYXV0byYg
bGluZUJyZWFrUmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KCpyZW5kZXJlcik7
CiAgICAgICAgIGxpbmVCcmVha1JlbmRlcmVyLmVuc3VyZUxpbmVCb3hlcygpOwpAQCAtMTIyNyw4
ICsxMjI4LDcgQEAgdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZpbml0
eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXJldE9mZnNl
dCkgPiBjYXJldE1pbk9mZnNldCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FyZXRPZmZzZXQp
IDwgY2FyZXRNYXhPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICBpbmxpbmVCb3ggPSBib3g7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiB7IGJveCwgY2Fy
ZXRPZmZzZXQgfTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCgoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGNhcmV0T2Zmc2V0KSA9PSBjYXJldE1heE9mZnNldCkgXiAoYWZmaW5pdHkg
PT0gRE9XTlNUUkVBTSkpCkBAIC0xMjQ1LDcgKzEyNDUsNiBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJ
bmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1h
cnlEaQogICAgICAgICB9CiAgICAgICAgIGlubGluZUJveCA9IGJveCA/IGJveCA6IGNhbmRpZGF0
ZTsKICAgICB9IGVsc2UgewotICAgICAgICBpbmxpbmVCb3ggPSBudWxscHRyOwogICAgICAgICBp
ZiAoY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZygqZGVwcmVjYXRlZE5vZGUoKSkgJiYgaXM8UmVu
ZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpICYmIGhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2Vu
ZGFudHNXaXRoSGVpZ2h0KGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnJlbmRlcmVyKSkpIHsK
ICAgICAgICAgICAgIC8vIFRyeSBhIHZpc3VhbGx5IGVxdWl2YWxlbnQgcG9zaXRpb24gd2l0aCBw
b3NzaWJseSBvcHBvc2l0ZSBlZGl0YWJpbGl0eS4gVGhpcyBoZWxwcyBpbiBjYXNlIHx0aGlzfCBp
cyBpbgogICAgICAgICAgICAgLy8gYW4gZWRpdGFibGUgYmxvY2sgYnV0IHN1cnJvdW5kZWQgYnkg
bm9uLWVkaXRhYmxlIHBvc2l0aW9ucy4gSXQgYWN0cyB0byBuZWdhdGUgdGhlIGxvZ2ljIGF0IHRo
ZSBiZWdpbm5pbmcKQEAgLTEyNTMsMjIgKzEyNTIsMjIgQEAgdm9pZCBQb3NpdGlvbjo6Z2V0SW5s
aW5lQm94QW5kT2Zmc2V0KEVBZmZpbml0eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5
RGkKICAgICAgICAgICAgIFBvc2l0aW9uIGVxdWl2YWxlbnQgPSBkb3duc3RyZWFtSWdub3JpbmdF
ZGl0aW5nQm91bmRhcmllcygqdGhpcyk7CiAgICAgICAgICAgICBpZiAoZXF1aXZhbGVudCA9PSAq
dGhpcykgewogICAgICAgICAgICAgICAgIGVxdWl2YWxlbnQgPSB1cHN0cmVhbUlnbm9yaW5nRWRp
dGluZ0JvdW5kYXJpZXMoKnRoaXMpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gcmV0
dXJuaW5nIG51bGxwdHIgcmVhbGx5IGJlIGNvcnJlY3QgaGVyZT8KICAgICAgICAgICAgICAgICBp
ZiAoZXF1aXZhbGVudCA9PSAqdGhpcyB8fCBkb3duc3RyZWFtSWdub3JpbmdFZGl0aW5nQm91bmRh
cmllcyhlcXVpdmFsZW50KSA9PSAqdGhpcykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBudWxscHRyLCBjYXJldE9mZnNldCB9OwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBlcXVpdmFsZW50LmdldElubGluZUJveEFuZE9mZnNl
dChVUFNUUkVBTSwgcHJpbWFyeURpcmVjdGlvbiwgaW5saW5lQm94LCBjYXJldE9mZnNldCk7Ci0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gZXF1aXZhbGVudC5pbmxpbmVC
b3hBbmRPZmZzZXQoVXBzdHJlYW0sIHByaW1hcnlEaXJlY3Rpb24pOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikpIHsKICAgICAgICAgICAgIGlubGluZUJv
eCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKS5pbmxpbmVCb3hXcmFwcGVyKCk7CiAg
ICAgICAgICAgICBpZiAoIWlubGluZUJveCB8fCAoY2FyZXRPZmZzZXQgPiBpbmxpbmVCb3gtPmNh
cmV0TWluT2Zmc2V0KCkgJiYgY2FyZXRPZmZzZXQgPCBpbmxpbmVCb3gtPmNhcmV0TWF4T2Zmc2V0
KCkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBp
bmxpbmVCb3gsIGNhcmV0T2Zmc2V0IH07CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIWlu
bGluZUJveCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyBudWxscHRyLCBjYXJl
dE9mZnNldCB9OwogCiAgICAgdW5zaWduZWQgY2hhciBsZXZlbCA9IGlubGluZUJveC0+YmlkaUxl
dmVsKCk7CiAKQEAgLTEyNzYsNyArMTI3NSw3IEBAIHZvaWQgUG9zaXRpb246OmdldElubGluZUJv
eEFuZE9mZnNldChFQWZmaW5pdHkgYWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJpbWFyeURpCiAg
ICAgICAgIGlmIChjYXJldE9mZnNldCA9PSBpbmxpbmVCb3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0
KCkpIHsKICAgICAgICAgICAgIElubGluZUJveCogbmV4dEJveCA9IGlubGluZUJveC0+bmV4dExl
YWZPbkxpbmUoKTsKICAgICAgICAgICAgIGlmICghbmV4dEJveCB8fCBuZXh0Qm94LT5iaWRpTGV2
ZWwoKSA+PSBsZXZlbCkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
cmV0dXJuIHsgaW5saW5lQm94LCBjYXJldE9mZnNldCB9OwogCiAgICAgICAgICAgICBsZXZlbCA9
IG5leHRCb3gtPmJpZGlMZXZlbCgpOwogICAgICAgICAgICAgSW5saW5lQm94KiBwcmV2Qm94ID0g
aW5saW5lQm94OwpAQCAtMTI4NSw3ICsxMjg0LDcgQEAgdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5l
Qm94QW5kT2Zmc2V0KEVBZmZpbml0eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGkK
ICAgICAgICAgICAgIH0gd2hpbGUgKHByZXZCb3ggJiYgcHJldkJveC0+YmlkaUxldmVsKCkgPiBs
ZXZlbCk7CiAKICAgICAgICAgICAgIGlmIChwcmV2Qm94ICYmIHByZXZCb3gtPmJpZGlMZXZlbCgp
ID09IGxldmVsKSAgIC8vIEZvciBleGFtcGxlLCBhYmMgRkVEIDEyMyBeIENCQQotICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBpbmxpbmVCb3gsIGNhcmV0
T2Zmc2V0IH07CiAKICAgICAgICAgICAgIC8vIEZvciBleGFtcGxlLCBhYmMgMTIzIF4gQ0JBCiAg
ICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiBuZXh0Qm94ID0gaW5saW5lQm94LT5uZXh0TGVh
Zk9uTGluZSgpKSB7CkBAIC0xMjk3LDcgKzEyOTYsNyBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJbmxp
bmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlE
aQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW5saW5lQm94KiBwcmV2Qm94ID0gaW5s
aW5lQm94LT5wcmV2aW91c0xlYWZPbkxpbmUoKTsKICAgICAgICAgICAgIGlmICghcHJldkJveCB8
fCBwcmV2Qm94LT5iaWRpTGV2ZWwoKSA+PSBsZXZlbCkKLSAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgaW5saW5lQm94LCBjYXJldE9mZnNldCB9OwogCiAg
ICAgICAgICAgICBsZXZlbCA9IHByZXZCb3gtPmJpZGlMZXZlbCgpOwogICAgICAgICAgICAgSW5s
aW5lQm94KiBuZXh0Qm94ID0gaW5saW5lQm94OwpAQCAtMTMwNiw3ICsxMzA1LDcgQEAgdm9pZCBQ
b3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZpbml0eSBhZmZpbml0eSwgVGV4dERp
cmVjdGlvbiBwcmltYXJ5RGkKICAgICAgICAgICAgIH0gd2hpbGUgKG5leHRCb3ggJiYgbmV4dEJv
eC0+YmlkaUxldmVsKCkgPiBsZXZlbCk7CiAKICAgICAgICAgICAgIGlmIChuZXh0Qm94ICYmIG5l
eHRCb3gtPmJpZGlMZXZlbCgpID09IGxldmVsKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geyBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0IH07CiAKICAgICAg
ICAgICAgIHdoaWxlIChJbmxpbmVCb3gqIHByZXZCb3ggPSBpbmxpbmVCb3gtPnByZXZpb3VzTGVh
Zk9uTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHByZXZCb3gtPmJpZGlMZXZlbCgpIDwg
bGV2ZWwpCkBAIC0xMzE1LDcgKzEzMTQsNyBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hB
bmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2FyZXRPZmZzZXQgPSBpbmxpbmVCb3gtPmNhcmV0TGVm
dG1vc3RPZmZzZXQoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB7IGlubGluZUJveCwgY2FyZXRPZmZzZXQgfTsKICAgICB9CiAKICAgICBpZiAoY2FyZXRPZmZz
ZXQgPT0gaW5saW5lQm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCkpIHsKQEAgLTEzNTcsNiArMTM1
Niw4IEBAIHZvaWQgUG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldChFQWZmaW5pdHkgYWZm
aW5pdHksIFRleHREaXJlY3Rpb24gcHJpbWFyeURpCiAgICAgICAgICAgICBjYXJldE9mZnNldCA9
IGlubGluZUJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKTsKICAgICAgICAgfQogICAgIH0KKwor
ICAgIHJldHVybiB7IGlubGluZUJveCwgY2FyZXRPZmZzZXQgfTsKIH0KIAogVGV4dERpcmVjdGlv
biBQb3NpdGlvbjo6cHJpbWFyeURpcmVjdGlvbigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCmlu
ZGV4IDc4NTM3ZjlhMTIwYjZkMjg1ZjExYWVmZDMwMzI5Mzc4ZGFkZmFjNGQuLmY5ODFjYWEwZWVk
YWRkYmZhZjY5NWMxMjY2YWE4ZTZmNjBjNzhhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCkBAIC00
OSw2ICs0OSwxMSBAQCBlbnVtIFBvc2l0aW9uTW92ZVR5cGUgewogICAgIEJhY2t3YXJkRGVsZXRp
b24gLy8gU3ViamVjdCB0byBwbGF0Zm9ybSBjb252ZW50aW9ucy4KIH07CiAKK3N0cnVjdCBJbmxp
bmVCb3hBbmRPZmZzZXQgeworICAgIElubGluZUJveCogYm94IHsgbnVsbHB0ciB9OworICAgIGlu
dCBvZmZzZXQgeyAwIH07Cit9OworCiBjbGFzcyBQb3NpdGlvbiB7CiBwdWJsaWM6CiAgICAgZW51
bSBBbmNob3JUeXBlIHsKQEAgLTE1Niw4ICsxNjEsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhN
RTogTWFrZSB0aGVzZSBub24tbWVtYmVyIGZ1bmN0aW9ucyBhbmQgcHV0IHRoZW0gc29tZXdoZXJl
IGluIHRoZSBlZGl0aW5nIGRpcmVjdG9yeS4KICAgICAvLyBUaGVzZSBhcmVuJ3QgcmVhbGx5IGJh
c2ljICJwb3NpdGlvbiIgb3BlcmF0aW9ucy4gTW9yZSBoaWdoIGxldmVsIGVkaXRpbmcgaGVscGVy
IGZ1bmN0aW9ucy4KLSAgICBXRUJDT1JFX0VYUE9SVCBQb3NpdGlvbiBsZWFkaW5nV2hpdGVzcGFj
ZVBvc2l0aW9uKEVBZmZpbml0eSwgYm9vbCBjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVzcGFj
ZSA9IGZhbHNlKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBQb3NpdGlvbiB0cmFpbGluZ1do
aXRlc3BhY2VQb3NpdGlvbihFQWZmaW5pdHksIGJvb2wgY29uc2lkZXJOb25Db2xsYXBzaWJsZVdo
aXRlc3BhY2UgPSBmYWxzZSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUG9zaXRpb24gbGVh
ZGluZ1doaXRlc3BhY2VQb3NpdGlvbihBZmZpbml0eSwgYm9vbCBjb25zaWRlck5vbkNvbGxhcHNp
YmxlV2hpdGVzcGFjZSA9IGZhbHNlKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBQb3NpdGlv
biB0cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihBZmZpbml0eSwgYm9vbCBjb25zaWRlck5vbkNv
bGxhcHNpYmxlV2hpdGVzcGFjZSA9IGZhbHNlKSBjb25zdDsKICAgICAKICAgICAvLyBUaGVzZSBy
ZXR1cm4gdXNlZnVsIHZpc3VhbGx5IGVxdWl2YWxlbnQgcG9zaXRpb25zLgogICAgIFdFQkNPUkVf
RVhQT1JUIFBvc2l0aW9uIHVwc3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENh
bm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KSBjb25zdDsKQEAgLTE2Nyw4ICsxNzIsOCBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc1JlbmRlcmVkQ2hhcmFjdGVyKCkgY29uc3Q7CiAgICAgYm9vbCByZW5k
ZXJzSW5EaWZmZXJlbnRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpIGNvbnN0OwogCi0gICAgdm9p
ZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5LCBJbmxpbmVCb3gqJiwgaW50JiBjYXJl
dE9mZnNldCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5
LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveComLCBpbnQmIGNhcmV0
T2Zmc2V0KSBjb25zdDsKKyAgICBJbmxpbmVCb3hBbmRPZmZzZXQgaW5saW5lQm94QW5kT2Zmc2V0
KEFmZmluaXR5KSBjb25zdDsKKyAgICBJbmxpbmVCb3hBbmRPZmZzZXQgaW5saW5lQm94QW5kT2Zm
c2V0KEFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24pIGNvbnN0OwogCiAg
ICAgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uKCkgY29uc3Q7CiAKQEAgLTIwNSw4ICsy
MTAsOCBAQCBwcml2YXRlOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IG9mZnNldEZvclBvc2l0
aW9uQWZ0ZXJBbmNob3IoKSBjb25zdDsKICAgICAKLSAgICBQb3NpdGlvbiBwcmV2aW91c0NoYXJh
Y3RlclBvc2l0aW9uKEVBZmZpbml0eSkgY29uc3Q7Ci0gICAgUG9zaXRpb24gbmV4dENoYXJhY3Rl
clBvc2l0aW9uKEVBZmZpbml0eSkgY29uc3Q7CisgICAgUG9zaXRpb24gcHJldmlvdXNDaGFyYWN0
ZXJQb3NpdGlvbihBZmZpbml0eSkgY29uc3Q7CisgICAgUG9zaXRpb24gbmV4dENoYXJhY3RlclBv
c2l0aW9uKEFmZmluaXR5KSBjb25zdDsKIAogICAgIHN0YXRpYyBBbmNob3JUeXBlIGFuY2hvclR5
cGVGb3JMZWdhY3lFZGl0aW5nUG9zaXRpb24oTm9kZSogYW5jaG9yTm9kZSwgdW5zaWduZWQgb2Zm
c2V0KTsKIApAQCAtMjg3LDI2ICsyOTIsMjIgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiAKIGlubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiB7Ci0gICAgaWYgKGEuaXNO
dWxsKCkgfHwgYi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhLmFu
Y2hvck5vZGUoKSA9PSBiLmFuY2hvck5vZGUoKSkKLSAgICAgICAgcmV0dXJuIGEuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSA8IGIuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICByZXR1
cm4gYi5hbmNob3JOb2RlKCktPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCphLmFuY2hvck5vZGUo
KSkgPT0gTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HOworICAgIHJldHVybiBpc19s
dChkb2N1bWVudE9yZGVyKGEsIGIpKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0
IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikgCiB7Ci0gICAgcmV0dXJuICFhLmlzTnVs
bCgpICYmICFiLmlzTnVsbCgpICYmIGEgIT0gYiAmJiBiIDwgYTsKKyAgICByZXR1cm4gaXNfZ3Qo
ZG9jdW1lbnRPcmRlcihhLCBiKSk7CiB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3Qg
UG9zaXRpb24mIGEsIGNvbnN0IFBvc2l0aW9uJiBiKSAKIHsKLSAgICByZXR1cm4gIWEuaXNOdWxs
KCkgJiYgIWIuaXNOdWxsKCkgJiYgKGEgPT0gYiB8fCBhID4gYik7CisgICAgcmV0dXJuIGlzX2d0
ZXEoZG9jdW1lbnRPcmRlcihhLCBiKSk7CiB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yPD0oY29u
c3QgUG9zaXRpb24mIGEsIGNvbnN0IFBvc2l0aW9uJiBiKSAKIHsKLSAgICByZXR1cm4gIWEuaXNO
dWxsKCkgJiYgIWIuaXNOdWxsKCkgJiYgKGEgPT0gYiB8fCBhIDwgYik7CisgICAgcmV0dXJuIGlz
X2x0ZXEoZG9jdW1lbnRPcmRlcihhLCBiKSk7CiB9CiAKIC8vIHBvc2l0aW9uQmVmb3JlTm9kZSBh
bmQgcG9zaXRpb25BZnRlck5vZGUgcmV0dXJuIG5laWdoYm9yLWFuY2hvcmVkIHBvc2l0aW9ucywg
Y29uc3RydWN0aW9uIGlzIE8oMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHAKaW5kZXggNmEwNjQxOWYzYzRhNzAyNGFhN2ViOWYxNGQ1NzgxNDdkMzdmNDg1
OC4uZTQ5OTdhNDEwNzZkNWNhMzljOTc3NWM5N2FlMTM4YjJjMTk0MjJlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTE3MiwxMyArMTcyLDEz
IEBAIEFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVudCYgZG9jdW1l
bnQsIGNvbnN0IEVkaXRpbmdTdHlsZSogc3R5CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnVw
ZGF0ZVN0YXJ0RW5kKGNvbnN0IFBvc2l0aW9uJiBuZXdTdGFydCwgY29uc3QgUG9zaXRpb24mIG5l
d0VuZCkKIHsKLSAgICBBU1NFUlQoY29tcGFyZVBvc2l0aW9ucyhuZXdFbmQsIG5ld1N0YXJ0KSA+
PSAwKTsKKyAgICBBU1NFUlQobmV3U3RhcnQgPD0gbmV3RW5kKTsKIAogICAgIGlmICghbV91c2VF
bmRpbmdTZWxlY3Rpb24gJiYgKG5ld1N0YXJ0ICE9IG1fc3RhcnQgfHwgbmV3RW5kICE9IG1fZW5k
KSkKICAgICAgICAgbV91c2VFbmRpbmdTZWxlY3Rpb24gPSB0cnVlOwogCiAgICAgYm9vbCB3YXNC
YXNlRmlyc3QgPSBzdGFydGluZ1NlbGVjdGlvbigpLmlzQmFzZUZpcnN0KCkgfHwgIXN0YXJ0aW5n
U2VsZWN0aW9uKCkuaXNEaXJlY3Rpb25hbCgpOwotICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKHdhc0Jhc2VGaXJzdCA/IG5ld1N0YXJ0IDogbmV3RW5kLCB3YXNCYXNlRmly
c3QgPyBuZXdFbmQgOiBuZXdTdGFydCwgVlBfREVGQVVMVF9BRkZJTklUWSwgZW5kaW5nU2VsZWN0
aW9uKCkuaXNEaXJlY3Rpb25hbCgpKSk7CisgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24od2FzQmFzZUZpcnN0ID8gbmV3U3RhcnQgOiBuZXdFbmQsIHdhc0Jhc2VGaXJzdCA/
IG5ld0VuZCA6IG5ld1N0YXJ0LCBWaXNpYmxlUG9zaXRpb246OmRlZmF1bHRBZmZpbml0eSwgZW5k
aW5nU2VsZWN0aW9uKCkuaXNEaXJlY3Rpb25hbCgpKSk7CiAgICAgbV9zdGFydCA9IG5ld1N0YXJ0
OwogICAgIG1fZW5kID0gbmV3RW5kOwogfQpAQCAtMjI3LDkgKzIyNyw5IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogICAgIC8v
IHVwZGF0aW5nIGJlZm9yZSBlYWNoIGFuZCBldmVyeSBjYWxsIHRvIGNoZWNrIGEgY29tcHV0ZWQg
c3R5bGUuCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHMoKTsKIAotICAgIFBvc2l0aW9uIHN0YXJ0ID0gc3RhcnRQb3NpdGlvbigpOwotICAgIFBvc2l0
aW9uIGVuZCA9IGVuZFBvc2l0aW9uKCk7Ci0gICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZW5kLCBz
dGFydCkgPCAwKQorICAgIGF1dG8gc3RhcnQgPSBzdGFydFBvc2l0aW9uKCk7CisgICAgYXV0byBl
bmQgPSBlbmRQb3NpdGlvbigpOworICAgIGlmIChlbmQgPCBzdGFydCkKICAgICAgICAgc3RkOjpz
d2FwKHN0YXJ0LCBlbmQpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChzdGFy
dCk7CkBAIC0yOTgsMTYgKzI5OCwxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJl
bGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAgICAgaWYgKCFzdHls
ZSB8fCAhc3R5bGUtPmhhc0ZvbnRTaXplRGVsdGEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UG9zaXRpb24gc3RhcnQgPSBzdGFydFBvc2l0aW9uKCk7Ci0gICAgUG9zaXRpb24gZW5kID0gZW5k
UG9zaXRpb24oKTsKLSAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhlbmQsIHN0YXJ0KSA8IDApIHsK
LSAgICAgICAgUG9zaXRpb24gc3dhcCA9IHN0YXJ0OwotICAgICAgICBzdGFydCA9IGVuZDsKLSAg
ICAgICAgZW5kID0gc3dhcDsKLSAgICB9CisgICAgYXV0byBzdGFydCA9IHN0YXJ0UG9zaXRpb24o
KTsKKyAgICBhdXRvIGVuZCA9IGVuZFBvc2l0aW9uKCk7CisgICAgaWYgKGVuZCA8IHN0YXJ0KQor
ICAgICAgICBzdGQ6OnN3YXAoc3RhcnQsIGVuZCk7CiAKICAgICAvLyBKb2luIHVwIGFueSBhZGph
Y2VudCB0ZXh0IG5vZGVzLgotICAgIGlmIChpczxUZXh0Pigqc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KSkpIHsKKyAgICBpZiAoaXM8VGV4dD4oc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAg
ICAgam9pbkNoaWxkVGV4dE5vZGVzKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUo
KSwgc3RhcnQsIGVuZCk7CiAgICAgICAgIHN0YXJ0ID0gc3RhcnRQb3NpdGlvbigpOwogICAgICAg
ICBlbmQgPSBlbmRQb3NpdGlvbigpOwpAQCAtNTU4LDE3ICs1NTUsMTAgQEAgdm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogICAgIGRv
Y3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICAv
LyBhZGp1c3QgdG8gdGhlIHBvc2l0aW9ucyB3ZSB3YW50IHRvIHVzZSBmb3IgYXBwbHlpbmcgc3R5
bGUKLSAgICBQb3NpdGlvbiBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKLSAgICBQb3NpdGlvbiBl
bmQgPSBlbmRQb3NpdGlvbigpOwotCi0gICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZW5kLCBz
dGFydCkgPCAwKSB7Ci0gICAgICAgIFBvc2l0aW9uIHN3YXAgPSBzdGFydDsKLSAgICAgICAgc3Rh
cnQgPSBlbmQ7Ci0gICAgICAgIGVuZCA9IHN3YXA7Ci0gICAgfQorICAgIGF1dG8gc3RhcnQgPSBz
dGFydFBvc2l0aW9uKCk7CisgICAgYXV0byBlbmQgPSBlbmRQb3NpdGlvbigpOworICAgIGlmIChl
bmQgPCBzdGFydCkKKyAgICAgICAgc3RkOjpzd2FwKHN0YXJ0LCBlbmQpOwogCiAgICAgLy8gc3Bs
aXQgdGhlIHN0YXJ0IG5vZGUgYW5kIGNvbnRhaW5pbmcgZWxlbWVudCBpZiB0aGUgc2VsZWN0aW9u
IHN0YXJ0cyBpbnNpZGUgb2YgaXQKICAgICBib29sIHNwbGl0U3RhcnQgPSBpc1ZhbGlkQ2FyZXRQ
b3NpdGlvbkluVGV4dE5vZGUoc3RhcnQpOwpAQCAtNTgyLDkgKzU3Miw2IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSkKICAgICAg
ICAgc3RhcnREdW1teVNwYW5BbmNlc3RvciA9IGR1bW15U3BhbkFuY2VzdG9yRm9yTm9kZShzdGFy
dC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICB9CiAKLSAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwg
ZW5kLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBzcGxpdCB0aGUgZW5kIG5v
ZGUgYW5kIGNvbnRhaW5pbmcgZWxlbWVudCBpZiB0aGUgc2VsZWN0aW9uIGVuZHMgaW5zaWRlIG9m
IGl0CiAgICAgYm9vbCBzcGxpdEVuZCA9IGlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShl
bmQpOwogICAgIGlmIChzcGxpdEVuZCkgewpAQCAtNjI5LDcgKzYxNiw3IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSkKICAgICAg
ICAgICAgIHN0eWxlV2l0aG91dEVtYmVkZGluZyA9IHN0eWxlLmNvcHkoKTsKICAgICAgICAgICAg
IGVtYmVkZGluZ1N0eWxlID0gc3R5bGVXaXRob3V0RW1iZWRkaW5nLT5leHRyYWN0QW5kUmVtb3Zl
VGV4dERpcmVjdGlvbigpOwogCi0gICAgICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhlbWJl
ZGRpbmdSZW1vdmVTdGFydCwgZW1iZWRkaW5nUmVtb3ZlRW5kKSA8PSAwKQorICAgICAgICAgICAg
aWYgKGVtYmVkZGluZ1JlbW92ZVN0YXJ0IDw9IGVtYmVkZGluZ1JlbW92ZUVuZCkKICAgICAgICAg
ICAgICAgICByZW1vdmVJbmxpbmVTdHlsZSgqZW1iZWRkaW5nU3R5bGUsIGVtYmVkZGluZ1JlbW92
ZVN0YXJ0LCBlbWJlZGRpbmdSZW1vdmVFbmQpOwogICAgICAgICB9CiAgICAgfQpAQCAtNjk0LDcg
KzY4MSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmZpeFJhbmdlQW5kQXBwbHlJbmxpbmVT
dHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBjb25zdCBQCiAKICAgICBpZiAoc3RhcnQuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldCgqc3RhcnROb2RlKSkgewogICAg
ICAgICBzdGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpzdGFydE5vZGUpOwotICAgICAg
ICBpZiAoIXN0YXJ0Tm9kZSB8fCBjb21wYXJlUG9zaXRpb25zKGVuZCwgZmlyc3RQb3NpdGlvbklu
T3JCZWZvcmVOb2RlKHN0YXJ0Tm9kZSkpIDwgMCkKKyAgICAgICAgaWYgKCFzdGFydE5vZGUgfHwg
ZW5kIDwgZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHN0YXJ0Tm9kZSkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0xMDc5LDcgKzEwNjYsNyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBjb25zdCBQb3Np
dGlvbiYgcwogICAgIEFTU0VSVChlbmQuaXNOb3ROdWxsKCkpOwogICAgIEFTU0VSVChzdGFydC5h
bmNob3JOb2RlKCktPmlzQ29ubmVjdGVkKCkpOwogICAgIEFTU0VSVChlbmQuYW5jaG9yTm9kZSgp
LT5pc0Nvbm5lY3RlZCgpKTsKLSAgICBBU1NFUlQoY29tcGFyZVBvc2l0aW9ucyhzdGFydCwgZW5k
KSA8PSAwKTsKKyAgICBBU1NFUlQoc3RhcnQgPD0gZW5kKTsKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGFzc2VydCB0aGF0IHN0YXJ0L2VuZCBhcmUgbm90IGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0
IG5vZGUuCiAKICAgICBQb3NpdGlvbiBwdXNoRG93blN0YXJ0ID0gc3RhcnQuZG93bnN0cmVhbSgp
OwpAQCAtMTE2MSwxOCArMTE0OCwxNCBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpub2RlRnVs
bHlTZWxlY3RlZChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBQb3NpdGlvbiYgc3RhcgogewogICAg
IC8vIFRoZSB0cmVlIG1heSBoYXZlIGNoYW5nZWQgYW5kIFBvc2l0aW9uOjp1cHN0cmVhbSgpIHJl
bGllcyBvbiBhbiB1cC10by1kYXRlIGxheW91dC4KICAgICBlbGVtZW50LmRvY3VtZW50KCkudXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0KLSAgICByZXR1cm4gY29tcGFy
ZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoJmVsZW1lbnQpLCBzdGFydCkg
Pj0gMAotICAgICAgICAmJiBjb21wYXJlUG9zaXRpb25zKGxhc3RQb3NpdGlvbkluT3JBZnRlck5v
ZGUoJmVsZW1lbnQpLnVwc3RyZWFtKCksIGVuZCkgPD0gMDsKKyAgICByZXR1cm4gZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKCZlbGVtZW50KSA+PSBzdGFydCAmJiBsYXN0UG9zaXRpb25Jbk9y
QWZ0ZXJOb2RlKCZlbGVtZW50KSA8PSBlbmQ7CiB9CiAKIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6
Om5vZGVGdWxseVVuc2VsZWN0ZWQoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUG9zaXRpb24mIHN0
YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKSBjb25zdAogewogICAgIC8vIFRoZSB0cmVlIG1heSBo
YXZlIGNoYW5nZWQgYW5kIFBvc2l0aW9uOjp1cHN0cmVhbSgpIHJlbGllcyBvbiBhbiB1cC10by1k
YXRlIGxheW91dC4KICAgICBlbGVtZW50LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7Ci0KLSAgICByZXR1cm4gY29tcGFyZVBvc2l0aW9ucyhsYXN0UG9z
aXRpb25Jbk9yQWZ0ZXJOb2RlKCZlbGVtZW50KS51cHN0cmVhbSgpLCBzdGFydCkgPCAwCi0gICAg
ICAgIHx8IGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKCZlbGVt
ZW50KSwgZW5kKSA+IDA7CisgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUoJmVs
ZW1lbnQpLnVwc3RyZWFtKCkgPCBzdGFydCB8fCBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUo
JmVsZW1lbnQpID4gZW5kOwogfQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRB
dFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggNzcx
NjE2MjNmN2MwZWM5NmEzMTU1N2JiMGI4ZjZmNDI5NTE1MDQxZC4uMmZjNjM4NDQ5ZDI4N2EwZjdl
NDZjZGMyZjAyNmFjODYwYWNkOGUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTEwNTQsMTAgKzEwNTQsNyBAQCB2b2lkIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pZmljYW50VGV4dChUZXh0JiB0ZXh0Tm9kZSwg
dW5zaWduZWQgc3RhcgogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25p
ZmljYW50VGV4dChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7
Ci0gICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoc3RhcnQsIGVuZCkgPj0gMCkKKyAgICBpZiAo
IShzdGFydCA8IGVuZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxSZWY8VGV4dD4+
IG5vZGVzOwpAQCAtMTA3NSwxMCArMTA3Miw5IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QKICAg
ICB9CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRU
ZXh0RG93bnN0cmVhbShjb25zdCBQb3NpdGlvbiYgcG9zKQordm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHREb3duc3RyZWFtKGNvbnN0IFBvc2l0aW9uJiBw
b3NpdGlvbikKIHsKLSAgICBQb3NpdGlvbiBlbmQgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBWUF9E
RUZBVUxUX0FGRklOSVRZKS5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7Ci0g
ICAgZGVsZXRlSW5zaWduaWZpY2FudFRleHQocG9zLCBlbmQpOworICAgIGRlbGV0ZUluc2lnbmlm
aWNhbnRUZXh0KHBvc2l0aW9uLCBWaXNpYmxlUG9zaXRpb24ocG9zaXRpb24pLm5leHQoKS5kZWVw
RXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKSk7CiB9CiAKIFJlZjxFbGVtZW50PiBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6YXBwZW5kQmxvY2tQbGFjZWhvbGRlcihSZWY8RWxlbWVudD4mJiBjb250YWlu
ZXIpCkBAIC0xMTU4LDcgKzExNTQsNyBAQCBSZWZQdHI8Tm9kZT4gQ29tcG9zaXRlRWRpdENvbW1h
bmQ6Om1vdmVQYXJhZ3JhcGhDb250ZW50c1RvTmV3QmxvY2tJZk5lY2Vzc2FyeShjbwogICAgIAog
ICAgIC8vIEl0J3Mgc3RyYW5nZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9y
IHZlcmlmeWluZyB0aGF0IHBvcyBoYXMgbm90IGJlZW4gaW52YWxpZGF0ZWQKICAgICAvLyBieSBh
biBlYXJsaWVyIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4gIFRoZSBjYWxsZXIsIGFwcGx5QmxvY2tT
dHlsZSwgc2hvdWxkIGRvIHRoaXMuCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MocG9z
LCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhw
b3MpOwogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUGFyYWdyYXBoU3RhcnQoc3RhcnRPZlBh
cmFncmFwaCh2aXNpYmxlUG9zKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQYXJhZ3Jh
cGhFbmQgPSBlbmRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKTsKICAgICBpZiAodmlzaWJsZVBhcmFn
cmFwaFN0YXJ0LmlzTnVsbCgpIHx8IHZpc2libGVQYXJhZ3JhcGhFbmQuaXNOdWxsKCkpCkBAIC0x
MTY2LDEzICsxMTYyLDEzIEBAIFJlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92
ZVBhcmFncmFwaENvbnRlbnRzVG9OZXdCbG9ja0lmTmVjZXNzYXJ5KGNvCiAKICAgICBWaXNpYmxl
UG9zaXRpb24gbmV4dCA9IHZpc2libGVQYXJhZ3JhcGhFbmQubmV4dCgpOwogICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlRW5kID0gbmV4dC5pc05vdE51bGwoKSA/IG5leHQgOiB2aXNpYmxlUGFy
YWdyYXBoRW5kOwotICAgIAorCiAgICAgUG9zaXRpb24gdXBzdHJlYW1TdGFydCA9IHZpc2libGVQ
YXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCk7CiAgICAgUG9zaXRpb24g
dXBzdHJlYW1FbmQgPSB2aXNpYmxlRW5kLmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKTsKIAog
ICAgIC8vIElmIHRoZXJlIGFyZSBubyBWaXNpYmxlUG9zaXRpb25zIGluIHRoZSBzYW1lIGJsb2Nr
IGFzIHBvcyB0aGVuIAogICAgIC8vIHVwc3RyZWFtU3RhcnQgd2lsbCBiZSBvdXRzaWRlIHRoZSBw
YXJhZ3JhcGgKLSAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhwb3MsIHVwc3RyZWFtU3RhcnQpIDwg
MCkKKyAgICBpZiAocG9zIDwgdXBzdHJlYW1TdGFydCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICAvLyBQZXJmb3JtIHNvbWUgY2hlY2tzIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHBlcmZv
cm0gd29yayBpbiB0aGlzIGZ1bmN0aW9uLgpAQCAtMTIzMiw3ICsxMjI4LDcgQEAgdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6cHVzaEFuY2hvckVsZW1lbnREb3duKEVsZW1lbnQmIGFuY2hvckVs
ZW1lbnQpCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsb25lUGFyYWdyYXBoVW5kZXJO
ZXdFbGVtZW50KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgTm9k
ZSogcGFzc2VkT3V0ZXJOb2RlLCBFbGVtZW50KiBibG9ja0VsZW1lbnQpCiB7Ci0gICAgQVNTRVJU
KGNvbXBhcmVQb3NpdGlvbnMoc3RhcnQsIGVuZCkgPD0gMCk7CisgICAgQVNTRVJUKHN0YXJ0IDw9
IGVuZCk7CiAKICAgICAvLyBGaXJzdCB3ZSBjbG9uZSB0aGUgb3V0ZXJOb2RlCiAgICAgUmVmUHRy
PE5vZGU+IGxhc3ROb2RlOwpAQCAtMTQwMiw0NSArMTM5OCwzNiBAQCB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0T2ZQ
YXJhZ3JhcAogewogICAgIGlmIChkZXN0aW5hdGlvbi5pc051bGwoKSB8fCBzdGFydE9mUGFyYWdy
YXBoVG9Nb3ZlID09IGRlc3RpbmF0aW9uKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBP
cHRpb25hbDx1aW50NjRfdD4gc3RhcnRJbmRleDsKICAgICBPcHRpb25hbDx1aW50NjRfdD4gZW5k
SW5kZXg7CiAgICAgYm9vbCBvcmlnaW5hbElzRGlyZWN0aW9uYWwgPSBlbmRpbmdTZWxlY3Rpb24o
KS5pc0RpcmVjdGlvbmFsKCk7CiAgICAgaWYgKHByZXNlcnZlU2VsZWN0aW9uICYmICFlbmRpbmdT
ZWxlY3Rpb24oKS5pc05vbmUoKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0
YXJ0ID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7Ci0gICAgICAgIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlRW5kID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpOwotICAg
ICAgICAKLSAgICAgICAgYm9vbCBzdGFydEFmdGVyUGFyYWdyYXBoID0gY29tcGFyZVBvc2l0aW9u
cyh2aXNpYmxlU3RhcnQsIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlKSA+IDA7Ci0gICAgICAgIGJvb2wg
ZW5kQmVmb3JlUGFyYWdyYXBoID0gY29tcGFyZVBvc2l0aW9ucyh2aXNpYmxlRW5kLCBzdGFydE9m
UGFyYWdyYXBoVG9Nb3ZlKSA8IDA7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXN0YXJ0QWZ0ZXJQ
YXJhZ3JhcGggJiYgIWVuZEJlZm9yZVBhcmFncmFwaCkgewotICAgICAgICAgICAgYm9vbCBzdGFy
dEluUGFyYWdyYXBoID0gY29tcGFyZVBvc2l0aW9ucyh2aXNpYmxlU3RhcnQsIHN0YXJ0T2ZQYXJh
Z3JhcGhUb01vdmUpID49IDA7Ci0gICAgICAgICAgICBib29sIGVuZEluUGFyYWdyYXBoID0gY29t
cGFyZVBvc2l0aW9ucyh2aXNpYmxlRW5kLCBlbmRPZlBhcmFncmFwaFRvTW92ZSkgPD0gMDsKLSAg
ICAgICAgICAgIAorICAgICAgICBhdXRvIHZpc2libGVTdGFydCA9IGVuZGluZ1NlbGVjdGlvbigp
LnZpc2libGVTdGFydCgpOworICAgICAgICBhdXRvIHZpc2libGVFbmQgPSBlbmRpbmdTZWxlY3Rp
b24oKS52aXNpYmxlRW5kKCk7CisgICAgICAgIGlmICh2aXNpYmxlU3RhcnQgPD0gZW5kT2ZQYXJh
Z3JhcGhUb01vdmUgJiYgdmlzaWJsZUVuZCA+PSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlKSB7CiAg
ICAgICAgICAgICBzdGFydEluZGV4ID0gMDsKLSAgICAgICAgICAgIGlmIChzdGFydEluUGFyYWdy
YXBoKSB7CisgICAgICAgICAgICBpZiAodmlzaWJsZVN0YXJ0ID49IHN0YXJ0T2ZQYXJhZ3JhcGhU
b01vdmUpIHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byByYW5nZVRvU2VsZWN0aW9uU3RhcnQg
PSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSwgdmlzaWJsZVN0YXJ0KSkK
ICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGNoYXJhY3RlckNvdW50KCpyYW5nZVRv
U2VsZWN0aW9uU3RhcnQsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNp
YmxlUG9zaXRpb25zKTsKICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgZW5kSW5kZXggPSAw
OwotICAgICAgICAgICAgaWYgKGVuZEluUGFyYWdyYXBoKSB7CisgICAgICAgICAgICBpZiAodmlz
aWJsZUVuZCA8PSBlbmRPZlBhcmFncmFwaFRvTW92ZSkgewogICAgICAgICAgICAgICAgIGlmIChh
dXRvIHJhbmdlVG9TZWxlY3Rpb25FbmQgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZlBhcmFncmFw
aFRvTW92ZSwgdmlzaWJsZUVuZCkpCiAgICAgICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gY2hh
cmFjdGVyQ291bnQoKnJhbmdlVG9TZWxlY3Rpb25FbmQsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFj
dGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KIAotICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVQYXJhZ3JhcGggPSBzdGFydE9m
UGFyYWdyYXBoVG9Nb3ZlLnByZXZpb3VzKENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAg
ICBWaXNpYmxlUG9zaXRpb24gYWZ0ZXJQYXJhZ3JhcGgoZW5kT2ZQYXJhZ3JhcGhUb01vdmUubmV4
dChDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkpOworICAgIGF1dG8gYmVmb3JlUGFyYWdyYXBo
ID0gc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5wcmV2aW91cyhDYW5ub3RDcm9zc0VkaXRpbmdCb3Vu
ZGFyeSk7CisgICAgYXV0byBhZnRlclBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLm5l
eHQoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogCiAgICAgLy8gV2UgdXBzdHJlYW0oKSB0
aGUgZW5kIGFuZCBkb3duc3RyZWFtKCkgdGhlIHN0YXJ0IHNvIHRoYXQgd2UgZG9uJ3QgaW5jbHVk
ZSBjb2xsYXBzZWQgd2hpdGVzcGFjZSBpbiB0aGUgbW92ZS4KICAgICAvLyBXaGVuIHdlIHBhc3Rl
IGEgZnJhZ21lbnQsIHNwYWNlcyBhZnRlciB0aGUgZW5kIGFuZCBiZWZvcmUgdGhlIHN0YXJ0IGFy
ZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgcmVuZGVyZWQuCi0gICAgUG9zaXRpb24gc3Rh
cnQgPSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgp
OwotICAgIFBvc2l0aW9uIGVuZCA9IGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50
KCkudXBzdHJlYW0oKTsKLSAgICAgCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYW4gaW5lZmZpY2ll
bnQgd2F5IHRvIHByZXNlcnZlIHN0eWxlIG9uIG5vZGVzIGluIHRoZSBwYXJhZ3JhcGggdG8gbW92
ZS4gSXQKLSAgICAvLyBzaG91bGRuJ3QgbWF0dGVyIHRob3VnaCwgc2luY2UgbW92ZWQgcGFyYWdy
YXBocyB3aWxsIHVzdWFsbHkgYmUgcXVpdGUgc21hbGwuCisgICAgYXV0byBzdGFydCA9IHN0YXJ0
T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7CisgICAgYXV0
byBlbmQgPSBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCk7
CisKKyAgICAvLyBGSVhNRTogU2VyaWFsaXppbmcgYW5kIHJlLXBhcnNpbmcgaXMgYW4gaW5lZmZp
Y2llbnQgd2F5IHRvIHByZXNlcnZlIHN0eWxlLgogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudDsKICAgICBpZiAoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSAhPSBlbmRPZlBhcmFn
cmFwaFRvTW92ZSkKICAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAo
ZG9jdW1lbnQoKSwgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UoKm1ha2VTaW1w
bGVSYW5nZShzdGFydCwgZW5kKSwgbnVsbHB0ciwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6Tm8s
IENvbnZlcnRCbG9ja3NUb0lubGluZXM6OlllcyksIGVtcHR5U3RyaW5nKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggMjVi
ZDMzZmRkNDE3Njc0NDZiNzUzM2Q5YTc2ZmExMzQ4MmVmMWFlYi4uYmFhN2U5N2VlYzMzNWFmZjU2
ZWEyOGNjNWEzOGJlNmQzNzhjYjE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xMzcsMTEgKzEzNywxMSBAQCB2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRpYWxpemVTdGFydEVuZChQb3NpdGlvbiYgc3RhcnQs
IFBvc2l0aW9uJiBlbmQpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAvLyBJZiB3ZSdy
ZSBnb2luZyB0byBleHBhbmQgdG8gaW5jbHVkZSB0aGUgc3RhcnRTcGVjaWFsQ29udGFpbmVyLCBp
dCBtdXN0IGJlIGZ1bGx5IHNlbGVjdGVkLgotICAgICAgICBpZiAoc3RhcnRTcGVjaWFsQ29udGFp
bmVyICYmICFlbmRTcGVjaWFsQ29udGFpbmVyICYmIGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb25J
blBhcmVudEFmdGVyTm9kZShzdGFydFNwZWNpYWxDb250YWluZXIpLCBlbmQpID4gLTEpCisgICAg
ICAgIGlmIChzdGFydFNwZWNpYWxDb250YWluZXIgJiYgIWVuZFNwZWNpYWxDb250YWluZXIgJiYg
cG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShzdGFydFNwZWNpYWxDb250YWluZXIpID49IGVuZCkK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8vIElmIHdlJ3JlIGdvaW5nIHRvIGV4cGFu
ZCB0byBpbmNsdWRlIHRoZSBlbmRTcGVjaWFsQ29udGFpbmVyLCBpdCBtdXN0IGJlIGZ1bGx5IHNl
bGVjdGVkLgotICAgICAgICBpZiAoZW5kU3BlY2lhbENvbnRhaW5lciAmJiAhc3RhcnRTcGVjaWFs
Q29udGFpbmVyICYmIGNvbXBhcmVQb3NpdGlvbnMoc3RhcnQsIHBvc2l0aW9uSW5QYXJlbnRCZWZv
cmVOb2RlKGVuZFNwZWNpYWxDb250YWluZXIpKSA+IC0xKQorICAgICAgICBpZiAoZW5kU3BlY2lh
bENvbnRhaW5lciAmJiAhc3RhcnRTcGVjaWFsQ29udGFpbmVyICYmIHN0YXJ0ID49IHBvc2l0aW9u
SW5QYXJlbnRCZWZvcmVOb2RlKGVuZFNwZWNpYWxDb250YWluZXIpKQogICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgaWYgKHN0YXJ0U3BlY2lhbENvbnRhaW5lciAmJiBzdGFydFNwZWNpYWxD
b250YWluZXItPmlzRGVzY2VuZGFudE9mKGVuZFNwZWNpYWxDb250YWluZXIpKQpAQCAtMjAwLDcg
KzIwMCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c21hcnREZWxldGVQYXJhZ3Jh
cGhTcGFjZXJzKCkKICAgICAgICAgICAgIHBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKG1fZG93
bnN0cmVhbUVuZCkubmV4dCgpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgIG1fdXBzdHJlYW1F
bmQgPSBwb3NpdGlvbi51cHN0cmVhbSgpOwogICAgICAgICBtX2Rvd25zdHJlYW1FbmQgPSBwb3Np
dGlvbi5kb3duc3RyZWFtKCk7Ci0gICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlID0gbV9kb3du
c3RyZWFtRW5kLnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFkp
OworICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZSA9IG1fZG93bnN0cmVhbUVuZC50cmFpbGlu
Z1doaXRlc3BhY2VQb3NpdGlvbihWaXNpYmxlUG9zaXRpb246OmRlZmF1bHRBZmZpbml0eSk7CiAg
ICAgICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uT25TbWFydERlbGV0ZShtX3Vwc3RyZWFtU3RhcnQs
IG1fZG93bnN0cmVhbUVuZCk7CiAgICAgfQogICAgIGlmIChzdGFydEFuZEVuZEluU2FtZVVuc3Bs
aXR0YWJsZUVsZW1lbnQgJiYgc2VsZWN0aW9uRW5kSXNFbmRPZkNvbnRlbnQgJiYgcHJldmlvdXNQ
b3NpdGlvbklzQmxhbmtQYXJhZ3JhcGggJiYgc2VsZWN0aW9uRW5kc0luUGFyYWdyYXBoU2VwZXJh
dG9yKSB7CkBAIC0yNzUsMjAgKzI3NSwyMCBAQCBib29sIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmluaXRpYWxpemVQb3NpdGlvbkRhdGEoKQogCiAgICAgLy8gSGFuZGxlIGxlYWRpbmcgYW5kIHRy
YWlsaW5nIHdoaXRlc3BhY2UsIGFzIHdlbGwgYXMgc21hcnQgZGVsZXRlIGFkanVzdG1lbnRzIHRv
IHRoZSBzZWxlY3Rpb24KICAgICBtX2xlYWRpbmdXaGl0ZXNwYWNlID0gbV91cHN0cmVhbVN0YXJ0
LmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24obV9zZWxlY3Rpb25Ub0RlbGV0ZS5hZmZpbml0eSgp
KTsKLSAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZSA9IG1fZG93bnN0cmVhbUVuZC50cmFpbGluZ1do
aXRlc3BhY2VQb3NpdGlvbihWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBtX3RyYWlsaW5nV2hp
dGVzcGFjZSA9IG1fZG93bnN0cmVhbUVuZC50cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihWaXNp
YmxlUG9zaXRpb246OmRlZmF1bHRBZmZpbml0eSk7CiAKICAgICBpZiAobV9zbWFydERlbGV0ZSkg
ewogICAgIAogICAgICAgICAvLyBza2lwIHNtYXJ0IGRlbGV0ZSBpZiB0aGUgc2VsZWN0aW9uIHRv
IGRlbGV0ZSBhbHJlYWR5IHN0YXJ0cyBvciBlbmRzIHdpdGggd2hpdGVzcGFjZQogICAgICAgICBQ
b3NpdGlvbiBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV91cHN0cmVhbVN0YXJ0LCBtX3NlbGVjdGlv
blRvRGVsZXRlLmFmZmluaXR5KCkpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgIGJvb2wgc2tp
cFNtYXJ0RGVsZXRlID0gcG9zLnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRf
QUZGSU5JVFksIHRydWUpLmlzTm90TnVsbCgpOworICAgICAgICBib29sIHNraXBTbWFydERlbGV0
ZSA9IHBvcy50cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihWaXNpYmxlUG9zaXRpb246OmRlZmF1
bHRBZmZpbml0eSwgdHJ1ZSkuaXNOb3ROdWxsKCk7CiAgICAgICAgIGlmICghc2tpcFNtYXJ0RGVs
ZXRlKQotICAgICAgICAgICAgc2tpcFNtYXJ0RGVsZXRlID0gbV9kb3duc3RyZWFtRW5kLmxlYWRp
bmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSkuaXNOb3ROdWxs
KCk7CisgICAgICAgICAgICBza2lwU21hcnREZWxldGUgPSBtX2Rvd25zdHJlYW1FbmQubGVhZGlu
Z1doaXRlc3BhY2VQb3NpdGlvbihWaXNpYmxlUG9zaXRpb246OmRlZmF1bHRBZmZpbml0eSwgdHJ1
ZSkuaXNOb3ROdWxsKCk7CiAKICAgICAgICAgLy8gZXh0ZW5kIHNlbGVjdGlvbiB1cHN0cmVhbSBp
ZiB0aGVyZSBpcyB3aGl0ZXNwYWNlIHRoZXJlCiAgICAgICAgIGJvb2wgaGFzTGVhZGluZ1doaXRl
c3BhY2VCZWZvcmVBZGp1c3RtZW50ID0gbV91cHN0cmVhbVN0YXJ0LmxlYWRpbmdXaGl0ZXNwYWNl
UG9zaXRpb24obV9zZWxlY3Rpb25Ub0RlbGV0ZS5hZmZpbml0eSgpLCB0cnVlKS5pc05vdE51bGwo
KTsKICAgICAgICAgaWYgKCFza2lwU21hcnREZWxldGUgJiYgaGFzTGVhZGluZ1doaXRlc3BhY2VC
ZWZvcmVBZGp1c3RtZW50KSB7Ci0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBv
cyA9IFZpc2libGVQb3NpdGlvbihtX3Vwc3RyZWFtU3RhcnQsIFZQX0RFRkFVTFRfQUZGSU5JVFkp
LnByZXZpb3VzKCk7CisgICAgICAgICAgICBhdXRvIHZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRp
b24obV91cHN0cmVhbVN0YXJ0KS5wcmV2aW91cygpOwogICAgICAgICAgICAgcG9zID0gdmlzaWJs
ZVBvcy5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAgICAgLy8gRXhwYW5kIG91dCBvbmUgY2hh
cmFjdGVyIHVwc3RyZWFtIGZvciBzbWFydCBkZWxldGUgYW5kIHJlY2FsY3VsYXRlCiAgICAgICAg
ICAgICAvLyBwb3NpdGlvbnMgYmFzZWQgb24gdGhpcyBjaGFuZ2UuCkBAIC0zMDEsMTMgKzMwMSwx
MyBAQCBib29sIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRpYWxpemVQb3NpdGlvbkRhdGEo
KQogICAgICAgICAKICAgICAgICAgLy8gdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyBvbmx5IGNvbnNp
ZGVyZWQgZm9yIHNtYXJ0IGRlbGV0ZSBpZiB0aGVyZSBpcyBubyBsZWFkaW5nCiAgICAgICAgIC8v
IHdoaXRlc3BhY2UsIGFzIGluIHRoZSBjYXNlIHdoZXJlIHlvdSBkb3VibGUtY2xpY2sgdGhlIGZp
cnN0IHdvcmQgb2YgYSBwYXJhZ3JhcGguCi0gICAgICAgIGlmICghc2tpcFNtYXJ0RGVsZXRlICYm
ICFoYXNMZWFkaW5nV2hpdGVzcGFjZUJlZm9yZUFkanVzdG1lbnQgJiYgbV9kb3duc3RyZWFtRW5k
LnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFksIHRydWUpLmlz
Tm90TnVsbCgpKSB7CisgICAgICAgIGlmICghc2tpcFNtYXJ0RGVsZXRlICYmICFoYXNMZWFkaW5n
V2hpdGVzcGFjZUJlZm9yZUFkanVzdG1lbnQgJiYgbV9kb3duc3RyZWFtRW5kLnRyYWlsaW5nV2hp
dGVzcGFjZVBvc2l0aW9uKFZpc2libGVQb3NpdGlvbjo6ZGVmYXVsdEFmZmluaXR5LCB0cnVlKS5p
c05vdE51bGwoKSkgewogICAgICAgICAgICAgLy8gRXhwYW5kIG91dCBvbmUgY2hhcmFjdGVyIGRv
d25zdHJlYW0gZm9yIHNtYXJ0IGRlbGV0ZSBhbmQgcmVjYWxjdWxhdGUKICAgICAgICAgICAgIC8v
IHBvc2l0aW9ucyBiYXNlZCBvbiB0aGlzIGNoYW5nZS4KLSAgICAgICAgICAgIHBvcyA9IFZpc2li
bGVQb3NpdGlvbihtX2Rvd25zdHJlYW1FbmQsIFZQX0RFRkFVTFRfQUZGSU5JVFkpLm5leHQoKS5k
ZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fZG93
bnN0cmVhbUVuZCkubmV4dCgpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgICAgICBtX3Vwc3Ry
ZWFtRW5kID0gcG9zLnVwc3RyZWFtKCk7CiAgICAgICAgICAgICBtX2Rvd25zdHJlYW1FbmQgPSBw
b3MuZG93bnN0cmVhbSgpOwotICAgICAgICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2UgPSBtX2Rv
d25zdHJlYW1FbmQudHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVMVF9BRkZJTklU
WSk7CisgICAgICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZSA9IG1fZG93bnN0cmVhbUVuZC50
cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihWaXNpYmxlUG9zaXRpb246OmRlZmF1bHRBZmZpbml0
eSk7CiAKICAgICAgICAgICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uT25TbWFydERlbGV0ZShtX2Rv
d25zdHJlYW1TdGFydCwgbV9kb3duc3RyZWFtRW5kKTsKICAgICAgICAgfQpAQCAtNjAwLDcgKzYw
MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgp
CiAgICAgICAgIAogICAgICAgICAvLyBoYW5kbGUgZGVsZXRpbmcgYWxsIG5vZGVzIHRoYXQgYXJl
IGNvbXBsZXRlbHkgc2VsZWN0ZWQKICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPSBtX2Rv
d25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKGNvbXBhcmVQ
b3NpdGlvbnMoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUuZ2V0KCkpLCBtX2Rvd25z
dHJlYW1FbmQpID49IDApIHsKKyAgICAgICAgICAgIGlmIChmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUobm9kZS5nZXQoKSkgPj0gbV9kb3duc3RyZWFtRW5kKSB7CiAgICAgICAgICAgICAgICAg
Ly8gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4ganVzdCBibGV3IHBhc3QgdGhl
IGVuZCBwb3NpdGlvbiwgc28gc3RvcCBkZWxldGluZwogICAgICAgICAgICAgICAgIG5vZGUgPSBu
dWxscHRyOwogICAgICAgICAgICAgfSBlbHNlIGlmICghbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0
ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKCpub2RlKSkgewpAQCAtNjkxLDE3ICs2OTEsMTIgQEAg
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncmFwaHMoKQogICAgIEFTU0VS
VCghbV9wcnVuZVN0YXJ0QmxvY2tJZk5lY2Vzc2FyeSk7CiAKICAgICAvLyBGSVhNRTogRGVsZXRp
b24gc2hvdWxkIGFkanVzdCBzZWxlY3Rpb24gZW5kcG9pbnRzIGFzIGl0IHJlbW92ZXMgbm9kZXMg
c28gdGhhdCB3ZSBuZXZlciBnZXQgaW50byB0aGlzIHN0YXRlICg0MDk5ODM5KS4KLSAgICBpZiAo
bV9kb3duc3RyZWFtRW5kLmlzTnVsbCgpIHx8IG1fdXBzdHJlYW1TdGFydC5pc051bGwoKSB8fCAh
bV9kb3duc3RyZWFtRW5kLmFuY2hvck5vZGUoKS0+aXNDb25uZWN0ZWQoKSB8fCAhbV91cHN0cmVh
bVN0YXJ0LmFuY2hvck5vZGUoKS0+aXNDb25uZWN0ZWQoKSkKLSAgICAgICAgIHJldHVybjsKLQot
ICAgIC8vIEZJWE1FOiBUaGUgZGVsZXRpb24gYWxnb3JpdGhtIHNob3VsZG4ndCBsZXQgdGhpcyBo
YXBwZW4uCi0gICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMobV91cHN0cmVhbVN0YXJ0LCBtX2Rvd25z
dHJlYW1FbmQpID4gMCkKKyAgICBpZiAobV9kb3duc3RyZWFtRW5kLmlzTnVsbCgpIHx8IG1fdXBz
dHJlYW1TdGFydC5pc051bGwoKSB8fCBtX2Rvd25zdHJlYW1FbmQuaXNPcnBoYW4oKSB8fCBtX3Vw
c3RyZWFtU3RhcnQuaXNPcnBoYW4oKSkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAv
LyBUaGVyZSdzIG5vdGhpbmcgdG8gbWVyZ2UuCi0gICAgaWYgKG1fdXBzdHJlYW1TdGFydCA9PSBt
X2Rvd25zdHJlYW1FbmQpCisKKyAgICBpZiAobV91cHN0cmVhbVN0YXJ0ID49IG1fZG93bnN0cmVh
bUVuZCkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIFZpc2libGVQb3NpdGlvbiBz
dGFydE9mUGFyYWdyYXBoVG9Nb3ZlKG1fZG93bnN0cmVhbUVuZCk7CiAgICAgVmlzaWJsZVBvc2l0
aW9uIG1lcmdlRGVzdGluYXRpb24obV91cHN0cmVhbVN0YXJ0KTsKICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmcuY3BwCmluZGV4IDZiMTg0Y2E4NTdjYTdlZWNhNTFkNmJhZmY1NTRiNWEyMTUy
NTc3ZGEuLmIyMjc3Y2VjNDE3ZWU4NjNjYTQyM2JhM2RhYjA0ZWUyMTI2MGVjNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtNzksMjMgKzc5LDYgQEAgYm9vbCBpc0F0b21pY05v
ZGUoY29uc3QgTm9kZSogbm9kZSkKICAgICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxk
Tm9kZXMoKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm5vZGUpKTsKIH0KIAotLy8gRklYTUU6
IENoYW5nZSBjYWxsZXJzIHRvIHVzZSBkb2N1bWVudE9yZGVyIGFuZCBkZWxldGUgdGhpcy4KLWlu
dCBjb21wYXJlUG9zaXRpb25zKGNvbnN0IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikK
LXsKLSAgICBhdXRvIG9yZGVyaW5nID0gZG9jdW1lbnRPcmRlcihhLCBiKTsKLSAgICBpZiAoaXNf
bHQob3JkZXJpbmcpKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGlzX2d0KG9yZGVyaW5n
KSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIEZJWE1FOiBDaGFu
Z2UgY2FsbGVycyB0byB1c2UgZG9jdW1lbnRPcmRlciBhbmQgZGVsZXRlIHRoaXMuCi1pbnQgY29t
cGFyZVBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgYikKLXsKLSAgICByZXR1cm4gY29tcGFyZVBvc2l0aW9ucyhhLmRlZXBFcXVpdmFsZW50
KCksIGIuZGVlcEVxdWl2YWxlbnQoKSk7Ci19Ci0KIENvbnRhaW5lck5vZGUqIGhpZ2hlc3RFZGl0
YWJsZVJvb3QoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBFZGl0YWJsZVR5cGUgZWRpdGFibGVU
eXBlKQogewogICAgIENvbnRhaW5lck5vZGUqIGhpZ2hlc3RFZGl0YWJsZVJvb3QgPSBlZGl0YWJs
ZVJvb3RGb3JQb3NpdGlvbihwb3NpdGlvbiwgZWRpdGFibGVUeXBlKTsKQEAgLTI2OSw3ICsyNTIs
NyBAQCBQb3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgQ29udAogICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
Ly8gcG9zaXRpb24gZmFsbHMgYmVmb3JlIGhpZ2hlc3RSb290LgotICAgIGlmIChjb21wYXJlUG9z
aXRpb25zKHBvc2l0aW9uLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKGhpZ2hlc3RSb290KSkgPT0gLTEg
JiYgaGlnaGVzdFJvb3QtPmhhc0VkaXRhYmxlU3R5bGUoKSkKKyAgICBpZiAocG9zaXRpb24gPCBm
aXJzdFBvc2l0aW9uSW5Ob2RlKGhpZ2hlc3RSb290KSAmJiBoaWdoZXN0Um9vdC0+aGFzRWRpdGFi
bGVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluTm9kZShoaWdoZXN0Um9v
dCk7CiAKICAgICBQb3NpdGlvbiBjYW5kaWRhdGUgPSBwb3NpdGlvbjsKQEAgLTI5Nyw3ICsyODAs
NyBAQCBQb3NpdGlvbiBsYXN0RWRpdGFibGVQb3NpdGlvbkJlZm9yZVBvc2l0aW9uSW5Sb290KGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgQ29udAogICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
Ly8gV2hlbiBwb3NpdGlvbiBmYWxscyBhZnRlciBoaWdoZXN0Um9vdCwgdGhlIHJlc3VsdCBpcyBl
YXN5IHRvIGNvbXB1dGUuCi0gICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb24sIGxhc3RQ
b3NpdGlvbkluTm9kZShoaWdoZXN0Um9vdCkpID09IDEpCisgICAgaWYgKHBvc2l0aW9uID4gbGFz
dFBvc2l0aW9uSW5Ob2RlKGhpZ2hlc3RSb290KSkKICAgICAgICAgcmV0dXJuIGxhc3RQb3NpdGlv
bkluTm9kZShoaWdoZXN0Um9vdCk7CiAKICAgICBQb3NpdGlvbiBjYW5kaWRhdGUgPSBwb3NpdGlv
bjsKQEAgLTExNDgsMTEgKzExMzEsMTEgQEAgYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0
aGluKE5vZGUmIG5vZGUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICBhdXRvIGVuZFBv
c2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCk7CiAKICAgICBi
b29sIHN0YXJ0SXNWaXN1YWxseVNhbWUgPSB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKG5vZGUp
ID09IHN0YXJ0UG9zaXRpb247Ci0gICAgaWYgKHN0YXJ0SXNWaXN1YWxseVNhbWUgJiYgY29tcGFy
ZVBvc2l0aW9ucyhwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKCZub2RlKSwgZW5kUG9zaXRpb24p
IDwgMCkKKyAgICBpZiAoc3RhcnRJc1Zpc3VhbGx5U2FtZSAmJiBwb3NpdGlvbkluUGFyZW50QWZ0
ZXJOb2RlKCZub2RlKSA8IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IGJvb2wgZW5kSXNWaXN1YWxseVNhbWUgPSB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUobm9kZSkg
PT0gZW5kUG9zaXRpb247Ci0gICAgaWYgKGVuZElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3Np
dGlvbnMoc3RhcnRQb3NpdGlvbiwgcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoJm5vZGUpKSA8
IDApCisgICAgaWYgKGVuZElzVmlzdWFsbHlTYW1lICYmIHN0YXJ0UG9zaXRpb24gPCBwb3NpdGlv
bkluUGFyZW50QmVmb3JlTm9kZSgmbm9kZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
cmV0dXJuIHN0YXJ0SXNWaXN1YWxseVNhbWUgJiYgZW5kSXNWaXN1YWxseVNhbWU7CkBAIC0xMjYw
LDEzICsxMjQzLDggQEAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdEluUmVuZGVyZXJGb3JDYXJl
dFBhaW50aW5nKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgY2FyZXQKIHsKICAgICBpZiAoY2FyZXRQ
b3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLQogICAgIEFT
U0VSVChjYXJldFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+cmVu
ZGVyZXIoKSk7Ci0KLSAgICAvLyBGaXJzdCBjb21wdXRlIGEgcmVjdCBsb2NhbCB0byB0aGUgcmVu
ZGVyZXIgYXQgdGhlIHNlbGVjdGlvbiBzdGFydC4KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
OwotICAgIExheW91dFJlY3QgbG9jYWxSZWN0ID0gY2FyZXRQb3NpdGlvbi5sb2NhbENhcmV0UmVj
dChyZW5kZXJlcik7Ci0KKyAgICBhdXRvIFtsb2NhbFJlY3QsIHJlbmRlcmVyXSA9IGNhcmV0UG9z
aXRpb24ubG9jYWxDYXJldFJlY3QoKTsKICAgICByZXR1cm4gbG9jYWxDYXJldFJlY3RJblJlbmRl
cmVyRm9yUmVjdChsb2NhbFJlY3QsIGNhcmV0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXBy
ZWNhdGVkTm9kZSgpLCByZW5kZXJlciwgY2FyZXRQYWludGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuaAppbmRleCA5MmU4YjZmZGEwNjU2Mjc3MTM4MTI0M2IzODAyYjBjNjQ5MjQ0NGZj
Li5kMTQ0OGY5NTAyZmRlOWJhYWI3OGNmZTU3YjZiOGY2ZjE4MmVkMDM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmcuaApAQCAtMTI3LDggKzEyNyw2IEBAIFBvc2l0aW9uIGxhc3RQb3NpdGlvbklu
T3JBZnRlck5vZGUoTm9kZSopOwogUG9zaXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQ
b3NpdGlvbkluUm9vdChjb25zdCBQb3NpdGlvbiYsIENvbnRhaW5lck5vZGUqIHJvb3QpOwogUG9z
aXRpb24gbGFzdEVkaXRhYmxlUG9zaXRpb25CZWZvcmVQb3NpdGlvbkluUm9vdChjb25zdCBQb3Np
dGlvbiYsIENvbnRhaW5lck5vZGUqIHJvb3QpOwogCi1XRUJDT1JFX0VYUE9SVCBpbnQgY29tcGFy
ZVBvc2l0aW9ucyhjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7Ci0KIFdFQkNPUkVf
RVhQT1JUIGJvb2wgaXNFZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiwgRWRpdGFibGVU
eXBlID0gQ29udGVudElzRWRpdGFibGUpOwogYm9vbCBpc1JpY2hseUVkaXRhYmxlUG9zaXRpb24o
Y29uc3QgUG9zaXRpb24mKTsKIGJvb2wgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihjb25zdCBQ
b3NpdGlvbiYpOwpAQCAtMTQ4LDggKzE0Niw2IEBAIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9z
aXRpb25BZnRlck5vZGUoTm9kZSYpOwogCiBib29sIGxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBv
c2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCi1XRUJDT1JFX0VYUE9SVCBpbnQgY29t
cGFyZVBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mKTsKLQogV0VCQ09SRV9FWFBPUlQgaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYsIFJlZlB0cjxDb250YWluZXJOb2RlPiYgc2NvcGUpOwogaW50IGlu
ZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKE5vZGUmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBib29s
IGZvclNlbGVjdGlvblByZXNlcnZhdGlvbik7CiBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYsIGludCBvZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDA5NDY2
YWYxOGRhMjUwZGM0MDU2OWRhMTU5ZmNiMmIxMmJkMTU3M2EuLjgwY2JkN2IyNmM3YmI0ZTFkZTg4
NGZiM2QzYzg0ODAzNTgzOWVkYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTI0
NTMsNyArMjQ1Myw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
cihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZtb3ZpbmdTZWxlY3RpCiAgICAgbWFya01pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXIobW92aW5nU2VsZWN0aW9uLCBpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCgpICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBtb3ZpbmdTZWxlY3Rp
b24pOwogfQogCi12b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3Jk
KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb25BZnRlclR5cGluZywgYm9vbCBkb1JlcGxhY2VtZW50KQordm9pZCBFZGl0b3I6
Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHdvcmRTdGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcs
IGJvb2wgZG9SZXBsYWNlbWVudCkKIHsKICAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RlZERvY3Vt
ZW50KG1fZG9jdW1lbnQpOwogCkBAIC00MjM0LDcgKzQyMzQsNyBAQCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4gRWRpdG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKICAgICBhdXRvIHJhbmdlID0g
c2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmIChyYW5nZSkgewogICAgICAgICBpZiAoYXV0byBlbmNs
b3NpbmdBbmNob3IgPSBlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2Rl
KGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCpyYW5nZSkuZ2V0KCkpLCBIVE1MTmFtZXM6OmFUYWcp
KSB7Ci0gICAgICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSksIGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpKSA+PSAwKQorICAgICAgICAgICAgaWYgKGZpcnN0UG9z
aXRpb25Jbk9yQmVmb3JlTm9kZShyYW5nZS0+c3RhcnQuY29udGFpbmVyLnB0cigpKSA+PSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSkKICAgICAgICAgICAgICAgICBy
YW5nZS0+c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqZW5jbG9z
aW5nQW5jaG9yKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4
IGE5ZTQ4ZjNmODMzNjRmYjk3MjZiZjA5YzYxMjI5ZDVhMDE2ZmY0YzcuLjA2OWY3N2RjYzY5OGEw
OTlmY2FlNjBlM2YwNGU1MjQyNzYzNDI4NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAt
MzIyLDcgKzMyMiw3IEBAIHB1YmxpYzoKICAgICBUZXh0Q2hlY2tpbmdHdWVzc2VzIGd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsKCk7CiAgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdF
bmFibGVkSW5Gb2N1c2VkTm9kZSgpIGNvbnN0OwogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5h
YmxlZEZvcihOb2RlKikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtYXJrTWlzc3Bl
bGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQs
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVw
bGFjZW1lbnQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbWFya01pc3NwZWxsaW5nc0FmdGVy
VHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgd29yZFN0YXJ0LCBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZywgYm9vbCBkb1JlcGxhY2VtZW50KTsK
ICAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJik7IC8vIFJldHVybnMgZmlyc3QgbWlzc3BlbGxpbmcgcmFuZ2UuCiAgICAgdm9p
ZCBtYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAgICAgdm9pZCBtYXJr
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGlu
Z1NlbGVjdGlvbiwgYm9vbCBtYXJrR3JhbW1hciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZ3Jh
bW1hclNlbGVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CmluZGV4IGZkMDZmNjRmYzA1NTM5YmE0OWFiNWM3NTI1ZTRhZDcyNWRiMDk5OTYuLmUxYjk4ZTFj
MTUyMjc4ZGZkZTI1YjNkMzFmZDAwNzg4YTNlZTE2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0xODksMjQgKzE4OSwyNCBAQCBFbGVtZW50KiBGcmFt
ZVNlbGVjdGlvbjo6cm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3QK
ICAgICByZXR1cm4gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBtX2RvY3VtZW50LT5k
b2N1bWVudEVsZW1lbnQoKTsKIH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmcG9zLCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkLCBDdXJz
b3JBbGlnbk9uU2Nyb2xsIGFsaWduKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQs
IEN1cnNvckFsaWduT25TY3JvbGwgYWxpZ24pCiB7Ci0gICAgc2V0U2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24ocG9zLmRlZXBFcXVpdmFsZW50KCksIHBvcy5kZWVwRXF1aXZhbGVudCgpLCBwb3Mu
YWZmaW5pdHkoKSwgbV9zZWxlY3Rpb24uaXNEaXJlY3Rpb25hbCgpKSwKKyAgICBzZXRTZWxlY3Rp
b24oVmlzaWJsZVNlbGVjdGlvbihwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLCBwb3NpdGlvbi5k
ZWVwRXF1aXZhbGVudCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBtX3NlbGVjdGlvbi5pc0RpcmVj
dGlvbmFsKCkpLAogICAgICAgICBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyh1c2VyVHJpZ2dl
cmVkKSwgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQoKSwgYWxpZ24pOwogfQogCi12b2lkIEZyYW1l
U2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZiYXNlLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24gJmV4dGVudCwgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKK3ZvaWQg
RnJhbWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mIGJhc2UsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgZXh0ZW50LCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQog
ewogICAgIGNvbnN0IGJvb2wgc2VsZWN0aW9uSGFzRGlyZWN0aW9uID0gdHJ1ZTsKICAgICBzZXRT
ZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihiYXNlLmRlZXBFcXVpdmFsZW50KCksIGV4dGVudC5k
ZWVwRXF1aXZhbGVudCgpLCBiYXNlLmFmZmluaXR5KCksIHNlbGVjdGlvbkhhc0RpcmVjdGlvbiks
IGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKHVzZXJUcmlnZ2VyZWQpKTsKIH0KIAotdm9pZCBG
cmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZp
bml0eSwgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246
Om1vdmVUbyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIEVBZmZpbml0eSBhZmZpbml0eSwgRVVz
ZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKIHsKLSAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNl
bGVjdGlvbihwb3MsIGFmZmluaXR5LCBtX3NlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCkpLCBkZWZh
dWx0U2V0U2VsZWN0aW9uT3B0aW9ucyh1c2VyVHJpZ2dlcmVkKSk7CisgICAgc2V0U2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb24sIGFmZmluaXR5LCBtX3NlbGVjdGlvbi5pc0RpcmVj
dGlvbmFsKCkpLCBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyh1c2VyVHJpZ2dlcmVkKSk7CiB9
CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246Om1vdmVUbyhjb25zdCBQb3NpdGlvbiAmYmFzZSwgY29u
c3QgUG9zaXRpb24gJmV4dGVudCwgRUFmZmluaXR5IGFmZmluaXR5LCBFVXNlclRyaWdnZXJlZCB1
c2VyVHJpZ2dlcmVkKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9u
JiBiYXNlLCBjb25zdCBQb3NpdGlvbiYgZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5pdHksIEVVc2Vy
VHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQpCiB7CiAgICAgY29uc3QgYm9vbCBzZWxlY3Rpb25IYXNE
aXJlY3Rpb24gPSB0cnVlOwogICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGJhc2Us
IGV4dGVudCwgYWZmaW5pdHksIHNlbGVjdGlvbkhhc0RpcmVjdGlvbiksIGRlZmF1bHRTZXRTZWxl
Y3Rpb25PcHRpb25zKHVzZXJUcmlnZ2VyZWQpKTsKQEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25CeU1vdXNlSWZEaWZmZXJlbnQoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgcGFzcwogICAgIH0gZWxzZSBpZiAobV9vcmlnaW5hbEJhc2UuaXNOb3ROdWxs
KCkpIHsKICAgICAgICAgaWYgKG1fc2VsZWN0aW9uLmJhc2UoKSA9PSBuZXdTZWxlY3Rpb24uYmFz
ZSgpKQogICAgICAgICAgICAgbmV3U2VsZWN0aW9uLnNldEJhc2UobV9vcmlnaW5hbEJhc2UpOwot
ICAgICAgICBtX29yaWdpbmFsQmFzZS5jbGVhcigpOworICAgICAgICBtX29yaWdpbmFsQmFzZSA9
IHsgfTsKICAgICB9CiAKICAgICBuZXdTZWxlY3Rpb24uc2V0SXNEaXJlY3Rpb25hbChpc0RpcmVj
dGlvbmFsKTsgLy8gQWRqdXN0aW5nIGJhc2UgYW5kIGV4dGVudCB3aWxsIG1ha2UgbmV3U2VsZWN0
aW9uIGFsd2F5cyBkaXJlY3Rpb25hbApAQCAtNjMzLDIwICs2MzMsMTQgQEAgVGV4dERpcmVjdGlv
biBGcmFtZVNlbGVjdGlvbjo6ZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpCiAKIFRleHREaXJl
Y3Rpb24gRnJhbWVTZWxlY3Rpb246OmRpcmVjdGlvbk9mU2VsZWN0aW9uKCkKIHsKLSAgICBJbmxp
bmVCb3gqIHN0YXJ0Qm94ID0gbnVsbHB0cjsKLSAgICBJbmxpbmVCb3gqIGVuZEJveCA9IG51bGxw
dHI7Ci0gICAgaW50IHVudXNlZE9mZnNldDsKLSAgICAvLyBDYWNoZSB0aGUgVmlzaWJsZVBvc2l0
aW9ucyBiZWNhdXNlIHZpc2libGVTdGFydCgpIGFuZCB2aXNpYmxlRW5kKCkKKyAgICAvLyBHZXQg
Ym90IFZpc2libGVQb3NpdGlvbnMgZmlyc3QgYmVjYXVzZSB2aXNpYmxlU3RhcnQoKSBhbmQgdmlz
aWJsZUVuZCgpCiAgICAgLy8gY2FuIGNhdXNlIGxheW91dCwgd2hpY2ggaGFzIHRoZSBwb3RlbnRp
YWwgdG8gaW52YWxpZGF0ZSBsaW5lYm94ZXMuCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24gPSBtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24g
ZW5kUG9zaXRpb24gPSBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0gICAgaWYgKHN0YXJ0UG9z
aXRpb24uaXNOb3ROdWxsKCkpCi0gICAgICAgIHN0YXJ0UG9zaXRpb24uZ2V0SW5saW5lQm94QW5k
T2Zmc2V0KHN0YXJ0Qm94LCB1bnVzZWRPZmZzZXQpOwotICAgIGlmIChlbmRQb3NpdGlvbi5pc05v
dE51bGwoKSkKLSAgICAgICAgZW5kUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGVuZEJv
eCwgdW51c2VkT2Zmc2V0KTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBtX3NlbGVjdGlvbi52
aXNpYmxlU3RhcnQoKTsKKyAgICBhdXRvIGVuZFBvc2l0aW9uID0gbV9zZWxlY3Rpb24udmlzaWJs
ZUVuZCgpOworICAgIGF1dG8gc3RhcnRCb3ggPSBzdGFydFBvc2l0aW9uLmlubGluZUJveEFuZE9m
ZnNldCgpLmJveDsKKyAgICBhdXRvIGVuZEJveCA9IGVuZFBvc2l0aW9uLmlubGluZUJveEFuZE9m
ZnNldCgpLmJveDsKICAgICBpZiAoc3RhcnRCb3ggJiYgZW5kQm94ICYmIHN0YXJ0Qm94LT5kaXJl
Y3Rpb24oKSA9PSBlbmRCb3gtPmRpcmVjdGlvbigpKQogICAgICAgICByZXR1cm4gc3RhcnRCb3gt
PmRpcmVjdGlvbigpOwotCiAgICAgcmV0dXJuIGRpcmVjdGlvbk9mRW5jbG9zaW5nQmxvY2soKTsK
IH0KIApAQCAtNzIxLDcgKzcxNSw3IEBAIFZpc2libGVQb3NpdGlvbiBGcmFtZVNlbGVjdGlvbjo6
ZW5kRm9yUGxhdGZvcm0oKSBjb25zdAogICAgIHJldHVybiBwb3NpdGlvbkZvclBsYXRmb3JtKGZh
bHNlKTsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0
aW9uRm9yUGxhdGZvcm0oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZvcmlnaW5hbFBvc2l0aW9uKQor
VmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjpuZXh0V29yZFBvc2l0aW9uRm9yUGxhdGZv
cm0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvcmlnaW5hbFBvc2l0aW9uKQogewogICAgIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQgPSBuZXh0V29yZFBvc2l0aW9uKG9y
aWdpbmFsUG9zaXRpb24pOwogCkBAIC0xNDM0LDcgKzE0MjgsNyBAQCBib29sIEZyYW1lU2VsZWN0
aW9uOjptb2RpZnkoRUFsdGVyYXRpb24gYWx0ZXIsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rp
b24sIFRleAogfQogCiAvLyBGSVhNRTogTWF5YmUgYmFzZWxpbmUgd291bGQgYmUgYmV0dGVyPwot
c3RhdGljIGJvb2wgYWJzb2x1dGVDYXJldFkoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCBpbnQg
JnkpCitzdGF0aWMgYm9vbCBhYnNvbHV0ZUNhcmV0WShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMs
IGludCYgeSkKIHsKICAgICBJbnRSZWN0IHJlY3QgPSBjLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsK
ICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCkBAIC0xNTg3LDQ0ICsxNTgxLDQ0IEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKQogICAgIG1fYXBwZWFyYW5jZVVw
ZGF0ZVRpbWVyLnN0b3AoKTsKIH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U3RhcnQoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIEVVc2VyVHJpZ2dlcmVkIHRyaWdnZXIpCit2b2lkIEZy
YW1lU2VsZWN0aW9uOjpzZXRTdGFydChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBF
VXNlclRyaWdnZXJlZCB0cmlnZ2VyKQogewogICAgIGlmIChtX3NlbGVjdGlvbi5pc0Jhc2VGaXJz
dCgpKQotICAgICAgICBzZXRCYXNlKHBvcywgdHJpZ2dlcik7CisgICAgICAgIHNldEJhc2UocG9z
aXRpb24sIHRyaWdnZXIpOwogICAgIGVsc2UKLSAgICAgICAgc2V0RXh0ZW50KHBvcywgdHJpZ2dl
cik7CisgICAgICAgIHNldEV4dGVudChwb3NpdGlvbiwgdHJpZ2dlcik7CiB9CiAKLXZvaWQgRnJh
bWVTZWxlY3Rpb246OnNldEVuZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcywgRVVzZXJUcmln
Z2VyZWQgdHJpZ2dlcikKK3ZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEVuZChjb25zdCBWaXNpYmxl
UG9zaXRpb24mIHBvc2l0aW9uLCBFVXNlclRyaWdnZXJlZCB0cmlnZ2VyKQogewogICAgIGlmICht
X3NlbGVjdGlvbi5pc0Jhc2VGaXJzdCgpKQotICAgICAgICBzZXRFeHRlbnQocG9zLCB0cmlnZ2Vy
KTsKKyAgICAgICAgc2V0RXh0ZW50KHBvc2l0aW9uLCB0cmlnZ2VyKTsKICAgICBlbHNlCi0gICAg
ICAgIHNldEJhc2UocG9zLCB0cmlnZ2VyKTsKKyAgICAgICAgc2V0QmFzZShwb3NpdGlvbiwgdHJp
Z2dlcik7CiB9CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEJhc2UoY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZwb3MsIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQpCit2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpzZXRCYXNlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIEVVc2VyVHJp
Z2dlcmVkIHVzZXJUcmlnZ2VyZWQpCiB7CiAgICAgY29uc3QgYm9vbCBzZWxlY3Rpb25IYXNEaXJl
Y3Rpb24gPSB0cnVlOwotICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvcy5kZWVw
RXF1aXZhbGVudCgpLCBtX3NlbGVjdGlvbi5leHRlbnQoKSwgcG9zLmFmZmluaXR5KCksIHNlbGVj
dGlvbkhhc0RpcmVjdGlvbiksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKHVzZXJUcmlnZ2Vy
ZWQpKTsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3NpdGlvbi5kZWVwRXF1
aXZhbGVudCgpLCBtX3NlbGVjdGlvbi5leHRlbnQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgc2Vs
ZWN0aW9uSGFzRGlyZWN0aW9uKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnModXNlclRyaWdn
ZXJlZCkpOwogfQogCi12b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRFeHRlbnQoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZwb3MsIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQpCit2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgRVVz
ZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKIHsKICAgICBjb25zdCBib29sIHNlbGVjdGlvbkhh
c0RpcmVjdGlvbiA9IHRydWU7Ci0gICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obV9z
ZWxlY3Rpb24uYmFzZSgpLCBwb3MuZGVlcEVxdWl2YWxlbnQoKSwgcG9zLmFmZmluaXR5KCksIHNl
bGVjdGlvbkhhc0RpcmVjdGlvbiksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKHVzZXJUcmln
Z2VyZWQpKTsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihtX3NlbGVjdGlvbi5i
YXNlKCksIHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIHNl
bGVjdGlvbkhhc0RpcmVjdGlvbiksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKHVzZXJUcmln
Z2VyZWQpKTsKIH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0QmFzZShjb25zdCBQb3NpdGlv
biAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHksIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQp
Cit2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwg
RUFmZmluaXR5IGFmZmluaXR5LCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQogewogICAg
IGNvbnN0IGJvb2wgc2VsZWN0aW9uSGFzRGlyZWN0aW9uID0gdHJ1ZTsKLSAgICBzZXRTZWxlY3Rp
b24oVmlzaWJsZVNlbGVjdGlvbihwb3MsIG1fc2VsZWN0aW9uLmV4dGVudCgpLCBhZmZpbml0eSwg
c2VsZWN0aW9uSGFzRGlyZWN0aW9uKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnModXNlclRy
aWdnZXJlZCkpOworICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uLCBt
X3NlbGVjdGlvbi5leHRlbnQoKSwgYWZmaW5pdHksIHNlbGVjdGlvbkhhc0RpcmVjdGlvbiksIGRl
ZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKHVzZXJUcmlnZ2VyZWQpKTsKIH0KIAotdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6c2V0RXh0ZW50KGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZp
bml0eSwgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246
OnNldEV4dGVudChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIEVBZmZpbml0eSBhZmZpbml0eSwg
RVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKIHsKICAgICBjb25zdCBib29sIHNlbGVjdGlv
bkhhc0RpcmVjdGlvbiA9IHRydWU7Ci0gICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
bV9zZWxlY3Rpb24uYmFzZSgpLCBwb3MsIGFmZmluaXR5LCBzZWxlY3Rpb25IYXNEaXJlY3Rpb24p
LCBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyh1c2VyVHJpZ2dlcmVkKSk7CisgICAgc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obV9zZWxlY3Rpb24uYmFzZSgpLCBwb3NpdGlvbiwgYWZm
aW5pdHksIHNlbGVjdGlvbkhhc0RpcmVjdGlvbiksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25z
KHVzZXJUcmlnZ2VyZWQpKTsKIH0KIAogdm9pZCBDYXJldEJhc2U6OmNsZWFyQ2FyZXRSZWN0KCkK
QEAgLTE4OTcsMjggKzE4OTEsMjEgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6Y29udGFpbnMoY29u
c3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdAogICAgIC8vIFRyZWF0IGEgY29sbGFwc2VkIHNl
bGVjdGlvbiBsaWtlIG5vIHNlbGVjdGlvbi4KICAgICBpZiAoIWlzUmFuZ2UoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgYXV0byByYW5nZSA9IG1fc2VsZWN0aW9uLmZpcnN0
UmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBp
ZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIEhpdFRl
c3RSZXN1bHQgcmVzdWx0KHBvaW50KTsKICAgICBtX2RvY3VtZW50LT5oaXRUZXN0KEhpdFRlc3RS
ZXF1ZXN0KCksIHJlc3VsdCk7CiAgICAgTm9kZSogaW5uZXJOb2RlID0gcmVzdWx0LmlubmVyTm9k
ZSgpOwogICAgIGlmICghaW5uZXJOb2RlIHx8ICFpbm5lck5vZGUtPnJlbmRlcmVyKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhp
bm5lck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQocmVzdWx0LmxvY2FsUG9pbnQo
KSwgbnVsbHB0cikpOwotICAgIGlmICh2aXNpYmxlUG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIGlmIChtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKS5p
c051bGwoKSB8fCBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCkuaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgUG9zaXRpb24gc3RhcnQobV9zZWxlY3Rpb24udmlz
aWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgUG9zaXRpb24gZW5kKG1fc2VsZWN0
aW9uLnZpc2libGVFbmQoKS5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICBQb3NpdGlvbiBwKHZpc2li
bGVQb3MuZGVlcEVxdWl2YWxlbnQoKSk7CiAKLSAgICByZXR1cm4gY29tcGFyZVBvc2l0aW9ucyhz
dGFydCwgcCkgPD0gMCAmJiBjb21wYXJlUG9zaXRpb25zKHAsIGVuZCkgPD0gMDsKKyAgICByZXR1
cm4gaXNQb2ludEluUmFuZ2UoKnJhbmdlLCBtYWtlQm91bmRhcnlQb2ludChpbm5lck5vZGUtPnJl
bmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cikp
KTsKIH0KIAogLy8gV29ya2Fyb3VuZCBmb3IgdGhlIGZhY3QgdGhhdCBpdCdzIGhhcmQgdG8gZGVs
ZXRlIGEgZnJhbWUuCkBAIC0xOTU5LDcgKzE5NDYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpCiAgICAgLy8gQ3JlYXRl
IGNvbXB1dGUgcG9zaXRpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGVsZW1lbnQuCiAgICAgdW5z
aWduZWQgb3duZXJFbGVtZW50Tm9kZUluZGV4ID0gb3duZXJFbGVtZW50LT5jb21wdXRlTm9kZUlu
ZGV4KCk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGJlZm9yZU93bmVyRWxlbWVudChWaXNpYmxlUG9z
aXRpb24oUG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXgs
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpKSk7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIGFmdGVyT3duZXJFbGVtZW50KFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihvd25lckVsZW1l
bnRQYXJlbnQsIG93bmVyRWxlbWVudE5vZGVJbmRleCArIDEsIFBvc2l0aW9uOjpQb3NpdGlvbklz
T2Zmc2V0SW5BbmNob3IpLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSkpOworICAgIFZpc2libGVQ
b3NpdGlvbiBhZnRlck93bmVyRWxlbWVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ob3duZXJF
bGVtZW50UGFyZW50LCBvd25lckVsZW1lbnROb2RlSW5kZXggKyAxLCBQb3NpdGlvbjo6UG9zaXRp
b25Jc09mZnNldEluQW5jaG9yKSwgVXBzdHJlYW0pKTsKIAogICAgIC8vIEZvY3VzIG9uIHRoZSBw
YXJlbnQgZnJhbWUsIGFuZCB0aGVuIHNlbGVjdCBmcm9tIGJlZm9yZSB0aGlzIGVsZW1lbnQgdG8g
YWZ0ZXIuCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oYmVmb3JlT3duZXJFbGVt
ZW50LCBhZnRlck93bmVyRWxlbWVudCk7CkBAIC0yNTIzLDEyICsyNTEwLDEyIEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRhaW5pbmdDYXJldFNlbGVj
dGlvbigpCiAKIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6ZWxlbWVudFJh
bmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBhdXRvIGVsZW1lbnQg
PSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChWaXNpYmxlUG9zaXRpb24obV9z
ZWxlY3Rpb24uc3RhcnQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSkuZGVlcEVxdWl2YWxlbnQoKS5k
ZXByZWNhdGVkTm9kZSgpKTsKKyAgICBhdXRvIGVsZW1lbnQgPSBkZXByZWNhdGVkRW5jbG9zaW5n
QmxvY2tGbG93RWxlbWVudChtX3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24oY3JlYXRl
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnQsIDApLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsK
LSAgICBhdXRvIGVuZCA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24oZWxlbWVudCwgZWxlbWVudC0+Y291bnRDaGlsZE5vZGVzKCkpLCBWUF9ERUZBVUxUX0FGRklO
SVRZKTsKKyAgICBhdXRvIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihlbGVtZW50LCAwKSk7CisgICAgYXV0byBlbmQgPSBWaXNpYmxlUG9zaXRpb24o
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnQsIGVsZW1lbnQtPmNvdW50Q2hpbGRO
b2RlcygpKSk7CiAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMjU3MCw5NCArMjU1NywzMyBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpleHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0
U2VsZWN0aW9uKCkKIAogVUNoYXIgRnJhbWVTZWxlY3Rpb246OmNoYXJhY3RlckluUmVsYXRpb25U
b0NhcmV0U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc2VsZWN0aW9u
LmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gbV9zZWxlY3Rpb247Ci0gICAgQVNTRVJUKHNlbGVjdGlvbi5pc0NhcmV0T3JSYW5n
ZSgpKTsKLQotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnN0
YXJ0KCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotCisgICAgYXV0byBwb3NpdGlvbiA9IG1fc2Vs
ZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAgIGlmIChhbW91bnQgPCAwKSB7CiAgICAgICAgIGlu
dCBjb3VudCA9IGFicyhhbW91bnQpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCi0gICAgICAgICAgICB2aXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb24ucHJl
dmlvdXMoKTsgICAgCi0gICAgICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24uY2hhcmFjdGVyQmVm
b3JlKCk7CisgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uLnByZXZpb3VzKCk7CisgICAg
ICAgIHJldHVybiBwb3NpdGlvbi5jaGFyYWN0ZXJCZWZvcmUoKTsKICAgICB9CiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykKLSAgICAgICAgdmlzaWJsZVBvc2l0aW9uID0gdmlz
aWJsZVBvc2l0aW9uLm5leHQoKTsgICAgCi0gICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5jaGFy
YWN0ZXJBZnRlcigpOwotfQotCi1VQ2hhciBGcmFtZVNlbGVjdGlvbjo6Y2hhcmFjdGVyQmVmb3Jl
Q2FyZXRTZWxlY3Rpb24oKSBjb25zdAotewotICAgIGlmIChtX3NlbGVjdGlvbi5pc05vbmUoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1f
c2VsZWN0aW9uOwotICAgIEFTU0VSVChzZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKSk7Ci0KLSAg
ICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBWUF9E
RUZBVUxUX0FGRklOSVRZKTsKLSAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmNoYXJhY3RlckJl
Zm9yZSgpOwotfQotCi1VQ2hhciBGcmFtZVNlbGVjdGlvbjo6Y2hhcmFjdGVyQWZ0ZXJDYXJldFNl
bGVjdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rp
b247Ci0gICAgQVNTRVJUKHNlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpKTsKLQotICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLmVuZCgpLCBWUF9ERUZBVUxUX0FG
RklOSVRZKTsKLSAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmNoYXJhY3RlckFmdGVyKCk7Ci19
Ci0KLWJvb2wgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkF0RG9jdW1lbnRTdGFydCgpIGNvbnN0
Ci17Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsKLSAgICBp
ZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQb3Np
dGlvbiBzdGFydFBvcyhzZWxlY3Rpb24uc3RhcnQoKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBv
cyhjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oc3RhcnRQb3MuZGVwcmVjYXRlZE5vZGUoKSwg
c3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSksIFZQX0RFRkFVTFRfQUZGSU5JVFkp
OwotICAgIGlmIChwb3MuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBpc1N0YXJ0T2ZEb2N1bWVudChwb3MpOworICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9u
Lm5leHQoKTsKKyAgICByZXR1cm4gcG9zaXRpb24uY2hhcmFjdGVyQWZ0ZXIoKTsKIH0KIAogYm9v
bCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRXb3JkU3RhcnQoKSBjb25zdAogewotICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rpb247Ci0gICAgaWYgKHNlbGVjdGlv
bi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9zaXRpb24gc3RhcnRQ
b3Moc2VsZWN0aW9uLnN0YXJ0KCkpOwotICAgIFZpc2libGVQb3NpdGlvbiBwb3MoY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHN0YXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0UG9zLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBpZiAo
cG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaXNTdGFydE9m
UGFyYWdyYXBoKHBvcykpCisgICAgYXV0byBwb3NpdGlvbiA9IG1fc2VsZWN0aW9uLnZpc2libGVT
dGFydCgpOworICAgIGlmIChpc1N0YXJ0T2ZQYXJhZ3JhcGgocG9zaXRpb24pKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgYm9vbCByZXN1bHQgPSB0cnVlOworCiAgICAgdW5z
aWduZWQgcHJldmlvdXNDb3VudCA9IDA7Ci0gICAgZm9yIChwb3MgPSBwb3MucHJldmlvdXMoKTsg
IXBvcy5pc051bGwoKTsgcG9zID0gcG9zLnByZXZpb3VzKCkpIHsKKyAgICBmb3IgKHBvc2l0aW9u
ID0gcG9zaXRpb24ucHJldmlvdXMoKTsgIXBvc2l0aW9uLmlzTnVsbCgpOyBwb3NpdGlvbiA9IHBv
c2l0aW9uLnByZXZpb3VzKCkpIHsKICAgICAgICAgcHJldmlvdXNDb3VudCsrOwotICAgICAgICBp
ZiAoaXNTdGFydE9mUGFyYWdyYXBoKHBvcykpIHsKLSAgICAgICAgICAgIGlmIChwcmV2aW91c0Nv
dW50ID09IDEpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBVQ2hhciBjKHBvcy5jaGFyYWN0ZXJBZnRlcigpKTsK
LSAgICAgICAgaWYgKGMpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGlzU3BhY2VPck5ld2xpbmUo
YykgfHwgYyA9PSBub0JyZWFrU3BhY2UgfHwgKHVfaXNwdW5jdChjKSAmJiBjICE9ICcsJyAmJiBj
ICE9ICctJyAmJiBjICE9ICdcJycpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKGlzU3RhcnRPZlBhcmFncmFwaChwb3NpdGlvbikpCisgICAgICAgICAgICByZXR1
cm4gcHJldmlvdXNDb3VudCAhPSAxOworICAgICAgICBpZiAoVUNoYXIgYyA9IHBvc2l0aW9uLmNo
YXJhY3RlckFmdGVyKCkpCisgICAgICAgICAgICByZXR1cm4gaXNTcGFjZU9yTmV3bGluZShjKSB8
fCBjID09IG5vQnJlYWtTcGFjZSB8fCAodV9pc3B1bmN0KGMpICYmIGMgIT0gJywnICYmIGMgIT0g
Jy0nICYmIGMgIT0gJ1wnJyk7CiAgICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5n
ZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdApAQCAtMjY3MCwxNCAr
MjU5Niw2IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUV4
dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VuCiAgICAgcmV0dXJuIHJhbmdlQnlBbHRl
cmluZ0N1cnJlbnRTZWxlY3Rpb24oQWx0ZXJhdGlvbkV4dGVuZCwgYW1vdW50KTsKIH0KIAotdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9jYXRpb24s
IHVuc2lnbmVkIGxlbmd0aCwgTm9kZSYgbm9kZSkKLXsKLSAgICBhdXRvIHNlbGVjdGlvbiA9IFZp
c2libGVTZWxlY3Rpb24geyBTaW1wbGVSYW5nZSB7IHsgbm9kZSwgbG9jYXRpb24gfSwgeyBub2Rl
LCBsb2NhdGlvbiArIGxlbmd0aCB9IH0gfTsKLQotICAgIC8vIEZJWE1FOiBUaGUgc2Vjb25kIGFy
Z3VtZW50IHdhcyAidHJ1ZSIgd2hpY2ggaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gb3B0aW9uICJG
aXJlU2VsZWN0RXZlbnQiLiBJcyB0aGlzIGNvcnJlY3Q/Ci0gICAgc2V0U2VsZWN0aW9uKHNlbGVj
dGlvbiwgeyBGaXJlU2VsZWN0RXZlbnQgfSk7Ci19Ci0KIFZpc2libGVTZWxlY3Rpb24gRnJhbWVT
ZWxlY3Rpb246OndvcmRTZWxlY3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkp
CkBAIC0yNjg5LDggKzI2MDcsOCBAQCBWaXNpYmxlU2VsZWN0aW9uIEZyYW1lU2VsZWN0aW9uOjp3
b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKGNvbnN0IFZpcwogCiAgICAgUG9z
aXRpb24gc3RhcnRQb3NCZWZvcmVFeHBhbnNpb24oc2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIFBv
c2l0aW9uIGVuZFBvc0JlZm9yZUV4cGFuc2lvbihzZWxlY3Rpb24uZW5kKCkpOwotICAgIFZpc2li
bGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NCZWZvcmVFeHBhbnNpb24oc3RhcnRQb3NCZWZvcmVF
eHBhbnNpb24sIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRW
aXNpYmxlUG9zQmVmb3JlRXhwYW5zaW9uKGVuZFBvc0JlZm9yZUV4cGFuc2lvbiwgVlBfREVGQVVM
VF9BRkZJTklUWSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc0JlZm9yZUV4
cGFuc2lvbihzdGFydFBvc0JlZm9yZUV4cGFuc2lvbik7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVu
ZFZpc2libGVQb3NCZWZvcmVFeHBhbnNpb24oZW5kUG9zQmVmb3JlRXhwYW5zaW9uKTsKICAgICBp
ZiAoZW5kVmlzaWJsZVBvc0JlZm9yZUV4cGFuc2lvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IFZpc2libGVTZWxlY3Rpb24oKTsKIApAQCAtMjcyNCw4ICsyNjQyLDggQEAgVmlzaWJsZVNlbGVj
dGlvbiBGcmFtZVNlbGVjdGlvbjo6d29yZFNlbGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlv
bihjb25zdCBWaXMKICAgICBpZiAoZW5kUG9zIDwgZW5kUG9zQmVmb3JlRXhwYW5zaW9uKQogICAg
ICAgICBlbmRQb3MgPSBlbmRQb3NCZWZvcmVFeHBhbnNpb247CiAKLSAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnRWaXNpYmxlUG9zKHN0YXJ0UG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvcyhlbmRQb3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkp
OworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3Moc3RhcnRQb3MpOworICAgIFZp
c2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zKGVuZFBvcyk7CiAKICAgICBpZiAoc3RhcnRWaXNp
YmxlUG9zLmlzTnVsbCgpIHx8IGVuZFZpc2libGVQb3MuaXNOdWxsKCkpIHsKICAgICAgICAgLy8g
U3RhcnQgb3IgZW5kIGlzIG5pbApAQCAtMjc2Miw4ICsyNjgwLDggQEAgVmlzaWJsZVNlbGVjdGlv
biBGcmFtZVNlbGVjdGlvbjo6d29yZFNlbGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbihj
b25zdCBWaXMKICAgICAgICAgZnJhbWVTZWxlY3Rpb24ubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpB
bHRlcmF0aW9uRXh0ZW5kLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkLCBUZXh0R3JhbnVs
YXJpdHk6OldvcmRHcmFudWxhcml0eSk7CiAgICAgICAgIHN0YXJ0UG9zID0gZnJhbWVTZWxlY3Rp
b24uc2VsZWN0aW9uKCkuc3RhcnQoKTsKICAgICAgICAgZW5kUG9zID0gZnJhbWVTZWxlY3Rpb24u
c2VsZWN0aW9uKCkuZW5kKCk7Ci0gICAgICAgIHN0YXJ0VmlzaWJsZVBvcyA9IFZpc2libGVQb3Np
dGlvbihzdGFydFBvcywgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgICAgIGVuZFZpc2libGVQ
b3MgPSBWaXNpYmxlUG9zaXRpb24oZW5kUG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICAg
ICAgc3RhcnRWaXNpYmxlUG9zID0gVmlzaWJsZVBvc2l0aW9uKHN0YXJ0UG9zKTsKKyAgICAgICAg
ZW5kVmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbihlbmRQb3MpOwogICAgICAgICBpZiAoc3Rh
cnRWaXNpYmxlUG9zLmlzTnVsbCgpIHx8IGVuZFZpc2libGVQb3MuaXNOdWxsKCkpIHsKICAgICAg
ICAgICAgIC8vIFN0YXJ0IG9yIGVuZCBpcyBuaWwKICAgICAgICAgICAgIHJldHVybiBWaXNpYmxl
U2VsZWN0aW9uKCk7CkBAIC0yNzkyLDQwICsyNzEwLDI3IEBAIFZpc2libGVTZWxlY3Rpb24gRnJh
bWVTZWxlY3Rpb246OndvcmRTZWxlY3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24oY29uc3Qg
VmlzCiAKIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkF0U2VudGVuY2VTdGFydCgpIGNv
bnN0CiB7Ci0gICAgaWYgKG1fc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBQb3NpdGlvbiBzdGFydFBvcyhtX3NlbGVjdGlvbi5zdGFydCgpKTsKLSAgICBW
aXNpYmxlUG9zaXRpb24gcG9zKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihzdGFydFBvcy5k
ZXByZWNhdGVkTm9kZSgpLCBzdGFydFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSwgVlBf
REVGQVVMVF9BRkZJTklUWSk7Ci0gICAgaWYgKHBvcy5pc051bGwoKSkKKyAgICBhdXRvIHBvc2l0
aW9uID0gbV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CisgICAgaWYgKHBvc2l0aW9uLmlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNTdGFydE9mUGFyYWdyYXBo
KHBvcykpCisgICAgaWYgKGlzU3RhcnRPZlBhcmFncmFwaChwb3NpdGlvbikpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogIAotICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICAgICBib29sIHNhd1NwYWNl
ID0gZmFsc2U7CiAgICAgdW5zaWduZWQgcHJldmlvdXNDb3VudCA9IDA7Ci0gICAgZm9yIChwb3Mg
PSBwb3MucHJldmlvdXMoKTsgIXBvcy5pc051bGwoKTsgcG9zID0gcG9zLnByZXZpb3VzKCkpIHsK
KyAgICBmb3IgKHBvc2l0aW9uID0gcG9zaXRpb24ucHJldmlvdXMoKTsgIXBvc2l0aW9uLmlzTnVs
bCgpOyBwb3NpdGlvbiA9IHBvc2l0aW9uLnByZXZpb3VzKCkpIHsKICAgICAgICAgcHJldmlvdXND
b3VudCsrOwotICAgICAgICBpZiAoaXNTdGFydE9mUGFyYWdyYXBoKHBvcykpIHsKLSAgICAgICAg
ICAgIGlmIChwcmV2aW91c0NvdW50ID09IDEgfHwgKHByZXZpb3VzQ291bnQgPT0gMiAmJiBzYXdT
cGFjZSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBVQ2hhciBjKHBvcy5jaGFyYWN0ZXJBZnRlcigpKTsKLSAg
ICAgICAgaWYgKGMpIHsKLSAgICAgICAgICAgIGlmIChpc1NwYWNlT3JOZXdsaW5lKGMpIHx8IGMg
PT0gbm9CcmVha1NwYWNlKSB7CisgICAgICAgIGlmIChpc1N0YXJ0T2ZQYXJhZ3JhcGgocG9zaXRp
b24pKQorICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzQ291bnQgIT0gMSAmJiAocHJldmlvdXND
b3VudCAhPSAyIHx8ICFzYXdTcGFjZSk7CisgICAgICAgIGlmIChhdXRvIGMgPSBwb3NpdGlvbi5j
aGFyYWN0ZXJBZnRlcigpKSB7CisgICAgICAgICAgICBpZiAoaXNTcGFjZU9yTmV3bGluZShjKSB8
fCBjID09IG5vQnJlYWtTcGFjZSkKICAgICAgICAgICAgICAgICBzYXdTcGFjZSA9IHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1bHQg
PSAoYyA9PSAnLicgfHwgYyA9PSAnIScgfHwgYyA9PSAnPycpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
dHVybiBjID09ICcuJyB8fCBjID09ICchJyB8fCBjID09ICc/JzsKICAgICAgICAgfQogICAgIH0K
LSAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB0cnVlOwogfQogCiBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxl
Y3Rpb24oRUFsdGVyYXRpb24gYWx0ZXJhdGlvbiwgaW50IGFtb3VudCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAppbmRleCBlZGQ0YmFhODI4N2Q4MTFiZjNkODE0
NWU5YzlmYjJlYjZhYzMwN2QzLi4wYWI3MDIxODNiM2ZiZGQwYzAzYzM0OTMyYmRhNjE4ODJjMDZh
NzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCkBAIC0xNzIsOCAr
MTcyLDggQEAgcHVibGljOgogCiAgICAgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KCkgY29u
c3QgeyByZXR1cm4gbV9ncmFudWxhcml0eTsgfQogCi0gICAgdm9pZCBzZXRTdGFydChjb25zdCBW
aXNpYmxlUG9zaXRpb24gJiwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKLSAg
ICB2b2lkIHNldEVuZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgRVVzZXJUcmlnZ2VyZWQgPSBO
b3RVc2VyVHJpZ2dlcmVkKTsKKyAgICB2b2lkIHNldFN0YXJ0KGNvbnN0IFZpc2libGVQb3NpdGlv
biYsIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CisgICAgdm9pZCBzZXRFbmQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVk
KTsKICAgICAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEJhc2UoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEJhc2UoY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIEVVc2VyVHJp
Z2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CkBAIC0yMjgsMTQgKzIyOCwxMCBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHdvcmRSYW5nZUNvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhwYW5kU2Vs
ZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFVDaGFyIGNoYXJhY3RlckluUmVsYXRpb25Ub0NhcmV0U2VsZWN0aW9uKGludCBh
bW91bnQpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIFVDaGFyIGNoYXJhY3RlckJlZm9yZUNh
cmV0U2VsZWN0aW9uKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVy
QWZ0ZXJDYXJldFNlbGVjdGlvbigpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2Vs
ZWN0aW9uQXREb2N1bWVudFN0YXJ0KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBz
ZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29s
IHNlbGVjdGlvbkF0V29yZFN0YXJ0KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQp
IGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUJ5
RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNp
Z25lZCBsZW5ndGgsIE5vZGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyQ3VycmVu
dFNlbGVjdGlvbigpOwogICAgIHZvaWQgc2V0Q2FyZXRCbGlua3MoYm9vbCBjYXJldEJsaW5rcyA9
IHRydWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q2FyZXRDb2xvcihjb25zdCBDb2xv
ciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKaW5kZXggYWUwYTI5YjhmYTM2NzJiZTI4MmU3MjBhZDhj
ZDA1MTI3NDM3MmZkMC4uNWJlYzQyNjFhNTE2Nzk3YmJmOTY0NWI3ZWMxMGMyYTRkYTc4ZjQ2MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFw
aFNlcGFyYXRvckNvbW1hbmQuY3BwCkBAIC03MSwxOCArNzEsMTcgQEAgYm9vbCBJbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JDb21tYW5kOjpwcmVzZXJ2ZXNUeXBpbmdTdHlsZSgpIGNvbnN0CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6
Y2FsY3VsYXRlU3R5bGVCZWZvcmVJbnNlcnRpb24oY29uc3QgUG9zaXRpb24gJnBvcykKK3ZvaWQg
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y2FsY3VsYXRlU3R5bGVCZWZvcmVJbnNl
cnRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIC8vIEl0IGlzIG9ubHkgaW1w
b3J0YW50IHRvIHNldCBhIHN0eWxlIHRvIGFwcGx5IGxhdGVyIGlmIHdlJ3JlIGF0IHRoZSBib3Vu
ZGFyaWVzIG9mCiAgICAgLy8gYSBwYXJhZ3JhcGguIE90aGVyd2lzZSwgY29udGVudCB0aGF0IGlz
IG1vdmVkIGFzIHBhcnQgb2YgdGhlIHdvcmsgb2YgdGhlIGNvbW1hbmQKICAgICAvLyB3aWxsIGxl
bmQgdGhlaXIgc3R5bGVzIHRvIHRoZSBuZXcgcGFyYWdyYXBoIHdpdGhvdXQgYW55IGV4dHJhIHdv
cmsgbmVlZGVkLgotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zKHBvcywgVlBfREVGQVVM
VF9BRkZJTklUWSk7Ci0gICAgaWYgKCFpc1N0YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVBvcykgJiYg
IWlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBvcykpCisgICAgYXV0byB2aXNpYmxlUG9zaXRpb24g
PSBWaXNpYmxlUG9zaXRpb24geyBwb3NpdGlvbiB9OworICAgIGlmICghaXNTdGFydE9mUGFyYWdy
YXBoKHZpc2libGVQb3NpdGlvbikgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBvc2l0aW9u
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKHBvcy5pc05vdE51bGwoKSk7Ci0gICAg
bV9zdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHBvcywgRWRpdGluZ1N0eWxlOjpFZGl0aW5n
UHJvcGVydGllc0luRWZmZWN0KTsKLSAgICBtX3N0eWxlLT5tZXJnZVR5cGluZ1N0eWxlKHBvcy5h
bmNob3JOb2RlKCktPmRvY3VtZW50KCkpOworICAgIG1fc3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNy
ZWF0ZShwb3NpdGlvbiwgRWRpdGluZ1N0eWxlOjpFZGl0aW5nUHJvcGVydGllc0luRWZmZWN0KTsK
KyAgICBtX3N0eWxlLT5tZXJnZVR5cGluZ1N0eWxlKCpwb3NpdGlvbi5kb2N1bWVudCgpKTsKIH0K
IAogdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjphcHBseVN0eWxlQWZ0ZXJJ
bnNlcnRpb24oTm9kZSogb3JpZ2luYWxFbmNsb3NpbmdCbG9jaykKQEAgLTMzNiw3ICszMzUsNyBA
QCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAg
Ly8gTWFrZSBzdXJlIHdlIGRvIG5vdCBjYXVzZSBhIHJlbmRlcmVkIHNwYWNlIHRvIGJlY29tZSB1
bnJlbmRlcmVkLgogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRoZSBhZmZpbml0eSBmb3IgcG9zLCBi
dXQgcG9zLmRvd25zdHJlYW0oKSBkb2VzIG5vdCBnaXZlIGl0Ci0gICAgUG9zaXRpb24gbGVhZGlu
Z1doaXRlc3BhY2UgPSBpbnNlcnRpb25Qb3NpdGlvbi5sZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9u
KFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIFBvc2l0aW9uIGxlYWRpbmdXaGl0ZXNwYWNlID0g
aW5zZXJ0aW9uUG9zaXRpb24ubGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbihWaXNpYmxlUG9zaXRp
b246OmRlZmF1bHRBZmZpbml0eSk7CiAgICAgLy8gRklYTUU6IGxlYWRpbmdXaGl0ZXNwYWNlUG9z
aXRpb24gaXMgcmV0dXJuaW5nIHRoZSBwb3NpdGlvbiBiZWZvcmUgcHJlc2VydmVkIG5ld2xpbmVz
IGZvciBwb3NpdGlvbnMKICAgICAvLyBhZnRlciB0aGUgcHJlc2VydmVkIG5ld2xpbmUsIGNhdXNp
bmcgdGhlIG5ld2xpbmUgdG8gYmUgdHVybmVkIGludG8gYSBuYnNwLgogICAgIGlmIChpczxUZXh0
PihsZWFkaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkTm9kZSgpKSkgewpAQCAtMzkxLDggKzM5MCw3
IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
ICAgICAgICBzcGxpdFRyZWVUb05vZGUoKnNwbGl0VG8sICpzdGFydEJsb2NrKTsKIAogICAgICAg
ICAgICAgZm9yIChuID0gc3RhcnRCbG9jay0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNp
YmxpbmcoKSkgewotICAgICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBiZWZvcmVOb2RlUG9z
aXRpb24gPSBwb3NpdGlvbkJlZm9yZU5vZGUobik7Ci0gICAgICAgICAgICAgICAgaWYgKCFiZWZv
cmVOb2RlUG9zaXRpb24uaXNOdWxsKCkgJiYgY29tcGFyZVBvc2l0aW9ucyhWaXNpYmxlUG9zaXRp
b24oaW5zZXJ0aW9uUG9zaXRpb24pLCBiZWZvcmVOb2RlUG9zaXRpb24pIDw9IDApCisgICAgICAg
ICAgICAgICAgaWYgKFZpc2libGVQb3NpdGlvbihpbnNlcnRpb25Qb3NpdGlvbikgPD0gVmlzaWJs
ZVBvc2l0aW9uKHBvc2l0aW9uQmVmb3JlTm9kZShuKSkpCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZW5kZXJlZFBvc2l0aW9uLmNwcAppbmRleCA0M2Q0YTRmMTVkOTYxZWRiZTVjODk0OTk5MjBjNzYw
ZDJjYjMzOGU3Li5iZDBlZTFlMTkzNTcwYTBkNTBmYjYyY2IxYjJiNzAwMWZmZDZkNDdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAKQEAgLTY0LDI3ICs2
NCwxOSBAQCBzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogcmVuZGVyZXJGcm9tUG9zaXRpb24o
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogfQogCiBSZW5kZXJlZFBvc2l0aW9uOjpSZW5kZXJl
ZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCi0gICAgOiBtX29mZnNl
dCgwKQotICAgICwgbV9wcmV2aW91c0xlYWZPbkxpbmUodW5jYWNoZWRJbmxpbmVCb3goKSkKLSAg
ICAsIG1fbmV4dExlYWZPbkxpbmUodW5jYWNoZWRJbmxpbmVCb3goKSkKKyAgICA6IFJlbmRlcmVk
UG9zaXRpb24ocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSkK
IHsKLSAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBwb3Np
dGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQobV9pbmxpbmVCb3gsIG1fb2Zmc2V0KTsKLSAgICBp
ZiAobV9pbmxpbmVCb3gpCi0gICAgICAgIG1fcmVuZGVyZXIgPSAmbV9pbmxpbmVCb3gtPnJlbmRl
cmVyKCk7Ci0gICAgZWxzZQotICAgICAgICBtX3JlbmRlcmVyID0gcmVuZGVyZXJGcm9tUG9zaXRp
b24ocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CiB9CiAKIFJlbmRlcmVkUG9zaXRpb246OlJl
bmRlcmVkUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBFQWZmaW5pdHkgYWZmaW5p
dHkpCi0gICAgOiBtX29mZnNldCgwKQotICAgICwgbV9wcmV2aW91c0xlYWZPbkxpbmUodW5jYWNo
ZWRJbmxpbmVCb3goKSkKKyAgICA6IG1fcHJldmlvdXNMZWFmT25MaW5lKHVuY2FjaGVkSW5saW5l
Qm94KCkpCiAgICAgLCBtX25leHRMZWFmT25MaW5lKHVuY2FjaGVkSW5saW5lQm94KCkpCiB7CiAg
ICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47Ci0gICAgcG9zaXRpb24u
Z2V0SW5saW5lQm94QW5kT2Zmc2V0KGFmZmluaXR5LCBtX2lubGluZUJveCwgbV9vZmZzZXQpOwor
ICAgIGF1dG8gYm94ID0gcG9zaXRpb24uaW5saW5lQm94QW5kT2Zmc2V0KGFmZmluaXR5KTsKKyAg
ICBtX2lubGluZUJveCA9IGJveC5ib3g7CisgICAgbV9vZmZzZXQgPSBib3gub2Zmc2V0OwogICAg
IGlmIChtX2lubGluZUJveCkKICAgICAgICAgbV9yZW5kZXJlciA9ICZtX2lubGluZUJveC0+cmVu
ZGVyZXIoKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
bmRlcmVkUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlv
bi5oCmluZGV4IDE1NWE3ZGY1MjBkZjU0M2I2MWI0OWI5YTE1NGEyNTVmMGQzMjg1ZmUuLjVkMDhi
OTk0ZWMxMjcxMzYwOTk4NDYwZWM2NmY5YTdhMjU4Y2VjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5oCkBAIC03OSwxNSArNzksMTUgQEAgcHJpdmF0ZToKICAg
ICBib29sIGF0TGVmdEJvdW5kYXJ5T2ZCaWRpUnVuKFNob3VsZE1hdGNoQmlkaUxldmVsLCB1bnNp
Z25lZCBjaGFyIGJpZGlMZXZlbE9mUnVuKSBjb25zdDsKICAgICBib29sIGF0UmlnaHRCb3VuZGFy
eU9mQmlkaVJ1bihTaG91bGRNYXRjaEJpZGlMZXZlbCwgdW5zaWduZWQgY2hhciBiaWRpTGV2ZWxP
ZlJ1bikgY29uc3Q7CiAKLSAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXIgeyBudWxscHRyIH07
Ci0gICAgSW5saW5lQm94KiBtX2lubGluZUJveCB7IG51bGxwdHIgfTsKLSAgICBpbnQgbV9vZmZz
ZXQ7Ci0KICAgICBzdGF0aWMgSW5saW5lQm94KiB1bmNhY2hlZElubGluZUJveCgpIHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8SW5saW5lQm94Kj4oMSk7IH0KICAgICAvLyBOZWVkcyB0byBiZSBk
aWZmZXJlbnQgZm9ybSAwIHNvIHBpY2sgMSBiZWNhdXNlIGl0J3MgYWxzbyBvbiB0aGUgbnVsbCBw
YWdlLgogCi0gICAgbXV0YWJsZSBJbmxpbmVCb3gqIG1fcHJldmlvdXNMZWFmT25MaW5lOwotICAg
IG11dGFibGUgSW5saW5lQm94KiBtX25leHRMZWFmT25MaW5lOworICAgIFJlbmRlck9iamVjdCog
bV9yZW5kZXJlciB7IG51bGxwdHIgfTsKKyAgICBJbmxpbmVCb3gqIG1faW5saW5lQm94IHsgbnVs
bHB0ciB9OworICAgIGludCBtX29mZnNldCB7IDAgfTsKKworICAgIG11dGFibGUgSW5saW5lQm94
KiBtX3ByZXZpb3VzTGVhZk9uTGluZSB7IG51bGxwdHIgfTsKKyAgICBtdXRhYmxlIElubGluZUJv
eCogbV9uZXh0TGVhZk9uTGluZSB7IG51bGxwdHIgfTsKIH07CiAKIGlubGluZSBSZW5kZXJlZFBv
c2l0aW9uOjpSZW5kZXJlZFBvc2l0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEFmZmluaXR5LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRBZmZpbml0
eS5oCmluZGV4IDA3M2Q0ZTI2YWQ0OWE1NjdmNWM0ZDBkYmJhZGJhYzcwY2VmMjY4YjIuLjZjYmFh
OTIxOWI1YWEzYWU3YWM2NjBjZGNiZTIzMTA2NzlkNGQyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEFmZmluaXR5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0QWZmaW5pdHkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiwxMyBAQAogI3ByYWdtYSBvbmNlCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKLS8vIFVQU1RSRUFNIG1lYW5zIGJlZm9yZSBhIGxpbmUgYnJlYWsg
RE9XTlNUUkVBTSBtZWFuIGFmdGVyIGEgbGluZSBicmVhawotZW51bSBFQWZmaW5pdHkgeyBVUFNU
UkVBTSA9IDAsIERPV05TVFJFQU0gPSAxIH07CisKKy8vIFVwc3RyZWFtIG1lYW5zIGJlZm9yZSBh
IGxpbmUgYnJlYWssIGRvd25zdHJlYW0gbWVhbnMgYWZ0ZXIgYSBsaW5lIGJyZWFrLgorZW51bSBB
ZmZpbml0eSA6IGJvb2wgeyBVcHN0cmVhbSwgRG93bnN0cmVhbSB9OworCisvLyBGSVhNRTogUmVt
b3ZlIHRoZXNlIGRlcHJlY2F0ZWQgbmFtZXMgYWZ0ZXIgcmVtb3ZpbmcgYWxsIHVzZXMgb2YgdGhl
bS4KK3VzaW5nIEVBZmZpbml0eSA9IEFmZmluaXR5Oworc3RhdGljIGNvbnN0ZXhwciBhdXRvIFVQ
U1RSRUFNID0gVXBzdHJlYW07CitzdGF0aWMgY29uc3RleHByIGF1dG8gRE9XTlNUUkVBTSA9IERv
d25zdHJlYW07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmNwcAppbmRleCBmMDY4YmY1ODA5MDM3NzVkNThiZjFhODg3ZmRk
NTE1MzNiYzA2OTk1Li5kMzNkYzc0YjZiMjQwM2YwYTkxNjUxNjdkZjA3ODU3YTZkNmU4ODgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCkBAIC01MCwyMCAr
NTAsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCi1WaXNpYmxlUG9zaXRpb246OlZpc2libGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiAmcG9z
LCBFQWZmaW5pdHkgYWZmaW5pdHkpCitWaXNpYmxlUG9zaXRpb246OlZpc2libGVQb3NpdGlvbihj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIEVBZmZpbml0eSBhZmZpbml0eSkKKyAgICA6IG1fZGVl
cFBvc2l0aW9uIHsgY2Fub25pY2FsUG9zaXRpb24ocG9zaXRpb24pIH0KIHsKLSAgICBpbml0KHBv
cywgYWZmaW5pdHkpOwotfQotCi12b2lkIFZpc2libGVQb3NpdGlvbjo6aW5pdChjb25zdCBQb3Np
dGlvbiYgcG9zaXRpb24sIEVBZmZpbml0eSBhZmZpbml0eSkKLXsKLSAgICBtX2FmZmluaXR5ID0g
YWZmaW5pdHk7Ci0gICAgCi0gICAgbV9kZWVwUG9zaXRpb24gPSBjYW5vbmljYWxQb3NpdGlvbihw
b3NpdGlvbik7Ci0gICAgCi0gICAgLy8gV2hlbiBub3QgYXQgYSBsaW5lIHdyYXAsIG1ha2Ugc3Vy
ZSB0byBlbmQgdXAgd2l0aCBET1dOU1RSRUFNIGFmZmluaXR5LgotICAgIGlmIChtX2FmZmluaXR5
ID09IFVQU1RSRUFNICYmIChpc051bGwoKSB8fCBpblNhbWVMaW5lKFZpc2libGVQb3NpdGlvbihw
b3NpdGlvbiwgRE9XTlNUUkVBTSksICp0aGlzKSkpCi0gICAgICAgIG1fYWZmaW5pdHkgPSBET1dO
U1RSRUFNOworICAgIGlmIChhZmZpbml0eSA9PSBVcHN0cmVhbSAmJiAhaXNOdWxsKCkpIHsKKyAg
ICAgICAgYXV0byB1cHN0cmVhbUNvcHkgPSAqdGhpczsKKyAgICAgICAgdXBzdHJlYW1Db3B5Lm1f
YWZmaW5pdHkgPSBVcHN0cmVhbTsKKyAgICAgICAgaWYgKCFpblNhbWVMaW5lKCp0aGlzLCB1cHN0
cmVhbUNvcHkpKQorICAgICAgICAgICAgbV9hZmZpbml0eSA9IFVwc3RyZWFtOworICAgIH0KIH0K
IAogVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6bmV4dChFZGl0aW5nQm91bmRhcnlD
cm9zc2luZ1J1bGUgcnVsZSwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5KSBjb25zdApAQCAtODgsMTcg
KzgzLDE3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnByZXZpb3VzKEVkaXRp
bmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlLCBib29sCiAgICAgQVNTRVJUKHJ1bGUgPT0gQ2Fu
Q3Jvc3NFZGl0aW5nQm91bmRhcnkgfHwgcnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFy
eSk7CiAgICAgLy8gZmluZCBmaXJzdCBwcmV2aW91cyBET00gcG9zaXRpb24gdGhhdCBpcyB2aXNp
YmxlCiAgICAgUG9zaXRpb24gcG9zID0gcHJldmlvdXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRl
KG1fZGVlcFBvc2l0aW9uKTsKLSAgICAKKwogICAgIC8vIHJldHVybiBudWxsIHZpc2libGUgcG9z
aXRpb24gaWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgdmlzaWJsZSBwb3NpdGlvbgogICAgIGlmIChw
b3MuYXRTdGFydE9mVHJlZSgpKSB7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCiAgICAg
ICAgICAgICAqcmVhY2hlZEJvdW5kYXJ5ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbigpOwogICAgIH0KLSAgICAgICAgCisKICAgICBWaXNpYmxlUG9zaXRpb24gcHJldiA9
IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0pOwogICAgIEFTU0VSVChwcmV2ICE9ICp0
aGlzKTsKLSAgICAKKwogI2lmbmRlZiBOREVCVUcKICAgICAvLyB3ZSBzaG91bGQgYWx3YXlzIGJl
IGFibGUgdG8gbWFrZSB0aGUgYWZmaW5pdHkgRE9XTlNUUkVBTSwgYmVjYXVzZSBnb2luZyBwcmV2
aW91cyBmcm9tIGFuCiAgICAgLy8gVVBTVFJFQU0gcG9zaXRpb24gY2FuIG5ldmVyIHlpZWxkIGFu
b3RoZXIgVVBTVFJFQU0gcG9zaXRpb24gKHVubGVzcyBsaW5lIHdyYXAgbGVuZ3RoIGlzIDAhKS4K
QEAgLTEyNSw5ICsxMjAsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJl
Y3Rpb24gPSBwLnByaW1hcnlEaXJlY3Rpb24oKTsKIAogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAg
ICAgIElubGluZUJveCogYm94OwotICAgICAgICBpbnQgb2Zmc2V0OwotICAgICAgICBwLmdldElu
bGluZUJveEFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uLCBib3gsIG9mZnNl
dCk7CisgICAgICAgIGF1dG8gW2JveCwgb2Zmc2V0XSA9IHAuaW5saW5lQm94QW5kT2Zmc2V0KG1f
YWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24pOwogICAgICAgICBpZiAoIWJveCkKICAgICAgICAg
ICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IHByZXZp
b3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBuZXh0VmlzdWFs
bHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAKQEAgLTE1OSwxMiArMTUyLDcg
QEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0
ZSgpIGNvbnN0CiAgICAgICAgICAgICAgICAgSW5saW5lQm94KiBwcmV2Qm94ID0gYm94LT5wcmV2
aW91c0xlYWZPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOwogICAgICAgICAgICAgICAgIGlmICgh
cHJldkJveCkgewogICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBwb3NpdGlvbk9uTGVmdCA9
IHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gcHJldmlvdXNWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3RpbmN0
Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0
aW9uT25MZWZ0LmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvc2l0
aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgSW5saW5lQm94KiBib3hPbkxlZnQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGludCBvZmZzZXRPbkxlZnQ7Ci0gICAgICAgICAgICAgICAgICAgIHBv
c2l0aW9uT25MZWZ0LmdldElubGluZUJveEFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGly
ZWN0aW9uLCBib3hPbkxlZnQsIG9mZnNldE9uTGVmdCk7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gYm94T25MZWZ0ID0gcG9zaXRpb25PbkxlZnQuaW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5p
dHksIHByaW1hcnlEaXJlY3Rpb24pLmJveDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJveE9u
TGVmdCAmJiAmYm94T25MZWZ0LT5yb290KCkgPT0gJmJveC0+cm9vdCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBwb3NpdGlvbk9uTGVmdDsKQEAgLTI5NSw5ICsyODMsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9z
aXRpb246OnJpZ2h0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0CiAgICAgVGV4dERp
cmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uID0gcC5wcmltYXJ5RGlyZWN0aW9uKCk7CiAKICAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICBJbmxpbmVCb3gqIGJveDsKLSAgICAgICAgaW50IG9mZnNl
dDsKLSAgICAgICAgcC5nZXRJbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSwgcHJpbWFyeURp
cmVjdGlvbiwgYm94LCBvZmZzZXQpOworICAgICAgICBhdXRvIFtib3gsIG9mZnNldF0gPSBwLmlu
bGluZUJveEFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uKTsKICAgICAgICAg
aWYgKCFib3gpCiAgICAgICAgICAgICByZXR1cm4gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGly
ZWN0aW9uOjpMVFIgPyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlv
bikgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOwog
CkBAIC0zMjksMTIgKzMxNSw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1
YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICAgICAgICAgICAgICBJbmxpbmVCb3gq
IG5leHRCb3ggPSBib3gtPm5leHRMZWFmT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKTsKICAgICAg
ICAgICAgICAgICBpZiAoIW5leHRCb3gpIHsKICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24g
cG9zaXRpb25PblJpZ2h0ID0gcHJpbWFyeURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIg
PyBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbikgOiBwcmV2aW91
c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pOwotICAgICAgICAgICAg
ICAgICAgICBpZiAocG9zaXRpb25PblJpZ2h0LmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgSW5saW5lQm94
KiBib3hPblJpZ2h0OwotICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0T25SaWdodDsKLSAg
ICAgICAgICAgICAgICAgICAgcG9zaXRpb25PblJpZ2h0LmdldElubGluZUJveEFuZE9mZnNldCht
X2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uLCBib3hPblJpZ2h0LCBvZmZzZXRPblJpZ2h0KTsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBib3hPblJpZ2h0ID0gcG9zaXRpb25PblJpZ2h0Lmlu
bGluZUJveEFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9uKS5ib3g7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChib3hPblJpZ2h0ICYmICZib3hPblJpZ2h0LT5yb290KCkgPT0g
JmJveC0+cm9vdCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbk9uUmlnaHQ7CkBAIC00OTUsMzIg
KzQ3NiwzMiBAQCBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpob25vckVkaXRpbmdC
b3VuZGFyeUF0T3JCZWZvcmUoY29uc3QgVmlzaWJsZVBvcwogICAgIHJldHVybiBsYXN0RWRpdGFi
bGVQb3NpdGlvbkJlZm9yZVBvc2l0aW9uSW5Sb290KHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCks
IGhpZ2hlc3RSb290KTsKIH0KIAotVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6aG9u
b3JFZGl0aW5nQm91bmRhcnlBdE9yQWZ0ZXIoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MsIGJv
b2wqIHJlYWNoZWRCb3VuZGFyeSkgY29uc3QKK1Zpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRp
b246Omhvbm9yRWRpdGluZ0JvdW5kYXJ5QXRPckFmdGVyKGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
b3RoZXJQb3NpdGlvbiwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5KSBjb25zdAogewogICAgIGlmIChy
ZWFjaGVkQm91bmRhcnkpCiAgICAgICAgICpyZWFjaGVkQm91bmRhcnkgPSBmYWxzZTsKLSAgICBp
ZiAocG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gcG9zOworICAgIGlmIChvdGhlclBvc2l0
aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gb3RoZXJQb3NpdGlvbjsKICAgICAKICAgICBh
dXRvKiBoaWdoZXN0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QoZGVlcEVxdWl2YWxlbnQoKSk7
CiAgICAgCi0gICAgLy8gUmV0dXJuIGVtcHR5IHBvc2l0aW9uIGlmIHBvcyBpcyBub3Qgc29tZXdo
ZXJlIGluc2lkZSB0aGUgZWRpdGFibGUgcmVnaW9uIGNvbnRhaW5pbmcgdGhpcyBwb3NpdGlvbgot
ICAgIGlmIChoaWdoZXN0Um9vdCAmJiAhcG9zLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5v
ZGUoKS0+aXNEZXNjZW5kYW50T2YoKmhpZ2hlc3RSb290KSkgeworICAgIC8vIFJldHVybiBlbXB0
eSBwb3NpdGlvbiBpZiBvdGhlclBvc2l0aW9uIGlzIG5vdCBzb21ld2hlcmUgaW5zaWRlIHRoZSBl
ZGl0YWJsZSByZWdpb24gY29udGFpbmluZyB0aGlzIHBvc2l0aW9uCisgICAgaWYgKGhpZ2hlc3RS
b290ICYmICFvdGhlclBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+
aXNEZXNjZW5kYW50T2YoKmhpZ2hlc3RSb290KSkgewogICAgICAgICBpZiAocmVhY2hlZEJvdW5k
YXJ5KQogICAgICAgICAgICAgKnJlYWNoZWRCb3VuZGFyeSA9IHRydWU7CiAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsKICAgICB9CiAgICAgCi0gICAgLy8gUmV0dXJuIHBvcyBpdHNl
bGYgaWYgdGhlIHR3byBhcmUgZnJvbSB0aGUgdmVyeSBzYW1lIGVkaXRhYmxlIHJlZ2lvbiwgb3Ig
Ym90aCBhcmUgbm9uLWVkaXRhYmxlCisgICAgLy8gUmV0dXJuIG90aGVyUG9zaXRpb24gaXRzZWxm
IGlmIHRoZSB0d28gYXJlIGZyb20gdGhlIHZlcnkgc2FtZSBlZGl0YWJsZSByZWdpb24sIG9yIGJv
dGggYXJlIG5vbi1lZGl0YWJsZQogICAgIC8vIEZJWE1FOiBJbiB0aGUgbm9uLWVkaXRhYmxlIGNh
c2UsIGp1c3QgYmVjYXVzZSB0aGUgbmV3IHBvc2l0aW9uIGlzIG5vbi1lZGl0YWJsZSBkb2Vzbid0
IG1lYW4gbW92ZW1lbnQKICAgICAvLyB0byBpdCBpcyBhbGxvd2VkLiAgVmlzaWJsZVNlbGVjdGlv
bjo6YWRqdXN0Rm9yRWRpdGFibGVDb250ZW50IGhhcyB0aGlzIHByb2JsZW0gdG9vLgotICAgIGlm
IChoaWdoZXN0RWRpdGFibGVSb290KHBvcy5kZWVwRXF1aXZhbGVudCgpKSA9PSBoaWdoZXN0Um9v
dCkgeworICAgIGlmIChoaWdoZXN0RWRpdGFibGVSb290KG90aGVyUG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKSkgPT0gaGlnaGVzdFJvb3QpIHsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkK
LSAgICAgICAgICAgICpyZWFjaGVkQm91bmRhcnkgPSAqdGhpcyA9PSBwb3M7Ci0gICAgICAgIHJl
dHVybiBwb3M7CisgICAgICAgICAgICAqcmVhY2hlZEJvdW5kYXJ5ID0gKnRoaXMgPT0gb3RoZXJQ
b3NpdGlvbjsKKyAgICAgICAgcmV0dXJuIG90aGVyUG9zaXRpb247CiAgICAgfQogCi0gICAgLy8g
UmV0dXJuIGVtcHR5IHBvc2l0aW9uIGlmIHRoaXMgcG9zaXRpb24gaXMgbm9uLWVkaXRhYmxlLCBi
dXQgcG9zIGlzIGVkaXRhYmxlCisgICAgLy8gUmV0dXJuIGVtcHR5IHBvc2l0aW9uIGlmIHRoaXMg
cG9zaXRpb24gaXMgbm9uLWVkaXRhYmxlLCBidXQgb3RoZXJQb3NpdGlvbiBpcyBlZGl0YWJsZQog
ICAgIC8vIEZJWE1FOiBNb3ZlIHRvIHRoZSBuZXh0IG5vbi1lZGl0YWJsZSByZWdpb24uCiAgICAg
aWYgKCFoaWdoZXN0Um9vdCkgewogICAgICAgICBpZiAocmVhY2hlZEJvdW5kYXJ5KQpAQCAtNTI5
LDcgKzUxMCw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246Omhvbm9yRWRpdGlu
Z0JvdW5kYXJ5QXRPckFmdGVyKGNvbnN0IFZpc2libGVQb3NpCiAgICAgfQogCiAgICAgLy8gUmV0
dXJuIHRoZSBuZXh0IHBvc2l0aW9uIGFmdGVyIHBvcyB0aGF0IGlzIGluIHRoZSBzYW1lIGVkaXRh
YmxlIHJlZ2lvbiBhcyB0aGlzIHBvc2l0aW9uCi0gICAgcmV0dXJuIGZpcnN0RWRpdGFibGVQb3Np
dGlvbkFmdGVyUG9zaXRpb25JblJvb3QocG9zLmRlZXBFcXVpdmFsZW50KCksIGhpZ2hlc3RSb290
KTsKKyAgICByZXR1cm4gZmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0ZXJQb3NpdGlvbkluUm9vdChv
dGhlclBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCksIGhpZ2hlc3RSb290KTsKIH0KIAogc3RhdGlj
IFBvc2l0aW9uIGNhbm9uaWNhbGl6ZUNhbmRpZGF0ZShjb25zdCBQb3NpdGlvbiYgY2FuZGlkYXRl
KQpAQCAtNjQwLDI2ICs2MjEsMTggQEAgVUNoYXIzMiBWaXNpYmxlUG9zaXRpb246OmNoYXJhY3Rl
ckFmdGVyKCkgY29uc3QKICAgICByZXR1cm4gY2g7CiB9CiAKLUxheW91dFJlY3QgVmlzaWJsZVBv
c2l0aW9uOjpsb2NhbENhcmV0UmVjdChSZW5kZXJPYmplY3QqJiByZW5kZXJlcikgY29uc3QKK2F1
dG8gVmlzaWJsZVBvc2l0aW9uOjpsb2NhbENhcmV0UmVjdCgpIGNvbnN0IC0+IExvY2FsQ2FyZXRS
ZWN0CiB7Ci0gICAgaWYgKG1fZGVlcFBvc2l0aW9uLmlzTnVsbCgpKSB7Ci0gICAgICAgIHJlbmRl
cmVyID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICB9Ci0gICAgTm9k
ZSogbm9kZSA9IG1fZGVlcFBvc2l0aW9uLmFuY2hvck5vZGUoKTsKLSAgICAKLSAgICByZW5kZXJl
ciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJu
IExheW91dFJlY3QoKTsKLQotICAgIElubGluZUJveCogaW5saW5lQm94OwotICAgIGludCBjYXJl
dE9mZnNldDsKLSAgICBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoaW5saW5lQm94LCBjYXJldE9mZnNl
dCk7CisgICAgYXV0byBub2RlID0gbV9kZWVwUG9zaXRpb24uYW5jaG9yTm9kZSgpOworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmIChpbmxpbmVCb3gpCi0gICAg
ICAgIHJlbmRlcmVyID0gJmlubGluZUJveC0+cmVuZGVyZXIoKTsKKyAgICBhdXRvIFtpbmxpbmVC
b3gsIGNhcmV0T2Zmc2V0XSA9IGlubGluZUJveEFuZE9mZnNldCgpOworICAgIGF1dG8gcmVuZGVy
ZXIgPSBpbmxpbmVCb3ggPyAmaW5saW5lQm94LT5yZW5kZXJlcigpIDogbm9kZS0+cmVuZGVyZXIo
KTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJu
IHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKKyAgICBy
ZXR1cm4geyByZW5kZXJlci0+bG9jYWxDYXJldFJlY3QoaW5saW5lQm94LCBjYXJldE9mZnNldCks
IHJlbmRlcmVyIH07CiB9CiAKIEludFJlY3QgVmlzaWJsZVBvc2l0aW9uOjphYnNvbHV0ZUNhcmV0
Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkKSBjb25zdApAQCAtNjcxLDE3ICs2NDQsNyBAQCBJbnRS
ZWN0IFZpc2libGVQb3NpdGlvbjo6YWJzb2x1dGVDYXJldEJvdW5kcyhib29sKiBpbnNpZGVGaXhl
ZCkgY29uc3QKIAogRmxvYXRSZWN0IFZpc2libGVQb3NpdGlvbjo6YWJzb2x1dGVTZWxlY3Rpb25C
b3VuZHNGb3JMaW5lKCkgY29uc3QKIHsKLSAgICBpZiAobV9kZWVwUG9zaXRpb24uaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBhdXRvKiBub2RlID0gbV9kZWVwUG9zaXRpb24u
YW5jaG9yTm9kZSgpOwotICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJu
IHsgfTsKLQotICAgIElubGluZUJveCogaW5saW5lQm94ID0gbnVsbHB0cjsKLSAgICBpbnQgY2Fy
ZXRPZmZzZXQgPSAwOwotICAgIGdldElubGluZUJveEFuZE9mZnNldChpbmxpbmVCb3gsIGNhcmV0
T2Zmc2V0KTsKLQorICAgIGF1dG8gaW5saW5lQm94ID0gaW5saW5lQm94QW5kT2Zmc2V0KCkuYm94
OwogICAgIGlmICghaW5saW5lQm94KQogICAgICAgICByZXR1cm4geyB9OwogCkBAIC02OTIsMTgg
KzY1NSwxNyBAQCBGbG9hdFJlY3QgVmlzaWJsZVBvc2l0aW9uOjphYnNvbHV0ZVNlbGVjdGlvbkJv
dW5kc0ZvckxpbmUoKSBjb25zdAogCiBpbnQgVmlzaWJsZVBvc2l0aW9uOjpsaW5lRGlyZWN0aW9u
UG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oKSBjb25zdAogewotICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXI7Ci0gICAgTGF5b3V0UmVjdCBsb2NhbFJlY3QgPSBsb2NhbENhcmV0UmVj
dChyZW5kZXJlcik7Ci0gICAgaWYgKGxvY2FsUmVjdC5pc0VtcHR5KCkgfHwgIXJlbmRlcmVyKQor
ICAgIGF1dG8gbG9jYWxSZWN0ID0gbG9jYWxDYXJldFJlY3QoKTsKKyAgICBpZiAobG9jYWxSZWN0
LnJlY3QuaXNFbXB0eSgpIHx8ICFsb2NhbFJlY3QucmVuZGVyZXIpCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgLy8gVGhpcyBpZ25vcmVzIHRyYW5zZm9ybXMgb24gcHVycG9zZSwgZm9yIG5vdy4g
VmVydGljYWwgbmF2aWdhdGlvbiBpcyBkb25lCiAgICAgLy8gd2l0aG91dCBjb25zdWx0aW5nIHRy
YW5zZm9ybXMsIHNvIHRoYXQgJ3VwJyBpbiB0cmFuc2Zvcm1lZCB0ZXh0IGlzICd1cCcKICAgICAv
LyByZWxhdGl2ZSB0byB0aGUgdGV4dCwgbm90IGFic29sdXRlICd1cCcuCi0gICAgRmxvYXRQb2lu
dCBjYXJldFBvaW50ID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShsb2NhbFJlY3QubG9jYXRp
b24oKSk7Ci0gICAgUmVuZGVyT2JqZWN0KiBjb250YWluaW5nQmxvY2sgPSByZW5kZXJlci0+Y29u
dGFpbmluZ0Jsb2NrKCk7CisgICAgYXV0byBjYXJldFBvaW50ID0gbG9jYWxSZWN0LnJlbmRlcmVy
LT5sb2NhbFRvQWJzb2x1dGUobG9jYWxSZWN0LnJlY3QubG9jYXRpb24oKSk7CisgICAgUmVuZGVy
T2JqZWN0KiBjb250YWluaW5nQmxvY2sgPSBsb2NhbFJlY3QucmVuZGVyZXItPmNvbnRhaW5pbmdC
bG9jaygpOwogICAgIGlmICghY29udGFpbmluZ0Jsb2NrKQotICAgICAgICBjb250YWluaW5nQmxv
Y2sgPSByZW5kZXJlcjsgLy8gSnVzdCB1c2Ugb3Vyc2VsdmVzIHRvIGRldGVybWluZSB0aGUgd3Jp
dGluZyBtb2RlIGlmIHdlIGhhdmUgbm8gY29udGFpbmluZyBibG9jay4KKyAgICAgICAgY29udGFp
bmluZ0Jsb2NrID0gbG9jYWxSZWN0LnJlbmRlcmVyOyAvLyBKdXN0IHVzZSBvdXJzZWx2ZXMgdG8g
ZGV0ZXJtaW5lIHRoZSB3cml0aW5nIG1vZGUgaWYgd2UgaGF2ZSBubyBjb250YWluaW5nIGJsb2Nr
LgogICAgIHJldHVybiBjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBjYXJldFBvaW50LngoKSA6IGNhcmV0UG9pbnQueSgpOwogfQogCkBAIC03NDAsNyArNzAyLDcg
QEAgRWxlbWVudCogZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChjb25zdCBWaXNpYmxlUG9zaXRp
b24mIHZpc2libGVQb3NpdGlvbikKICAgICByZXR1cm4gZGVwcmVjYXRlZEVuY2xvc2luZ0Jsb2Nr
Rmxvd0VsZW1lbnQodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5v
ZGUoKSk7CiB9CiAKLWJvb2wgaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNp
YmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbiwgY29uc3QgTm9kZSAqbm9kZSkKK2Jvb2wgaXNG
aXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQ
b3NpdGlvbiwgY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03NTIsNyArNzE0LDcgQEAgYm9vbCBp
c0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJs
ZVBvc2l0aW9uLCBjb25zdAogICAgIHJldHVybiBwcmV2aW91cy5pc051bGwoKSB8fCAhcHJldmlv
dXMuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2Rl
KTsKIH0KIAotYm9vbCBpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZ2aXNpYmxlUG9zaXRpb24sIGNvbnN0IE5vZGUgKm5vZGUpCitib29sIGlzTGFzdFZp
c2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlv
biwgY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04MDgsNiArNzcwLDEyIEBAIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmIHJh
bmdlKQogICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7
CiB9CiAKK1BhcnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQoreworICAgIC8vIEZJWE1FOiBTaG91bGQg
dHdvIHBvc2l0aW9ucyB3aXRoIGRpZmZlcmVudCBhZmZpbml0eSBiZSBjb25zaWRlcmVkIGVxdWl2
YWxlbnQgb3Igbm90PworICAgIHJldHVybiBkb2N1bWVudE9yZGVyKGEuZGVlcEVxdWl2YWxlbnQo
KSwgYi5kZWVwRXF1aXZhbGVudCgpKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVBvc2l0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5oCmluZGV4IGVlMGJmZWY0NmRmMjAzZDQ2MTFhNjBmMDlhYWU1ZmVmNTNhNGNjNDIu
LjEzMGU0Y2RkZjRmN2U3NmE4MzI0NTAzMjIzMjdiZGMzYTkxOWY2N2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaApAQCAtMzAsNDYgKzMwLDMxIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmFuZ2U7Ci0KLXN0cnVjdCBTaW1wbGVSYW5nZTsKLQot
Ly8gVmlzaWJsZVBvc2l0aW9uIGRlZmF1bHQgYWZmaW5pdHkgaXMgZG93bnN0cmVhbSBiZWNhdXNl
Ci0vLyB0aGUgY2FsbGVycyBkbyBub3QgcmVhbGx5IGNhcmUgKHRoZXkganVzdCB3YW50IHRoZQot
Ly8gZGVlcCBwb3NpdGlvbiB3aXRob3V0IHJlZ2FyZCB0byBsaW5lIHBvc2l0aW9uKSwgYW5kIHRo
aXMKLS8vIGlzIGNoZWFwZXIgdGhhbiBVUFNUUkVBTQotI2RlZmluZSBWUF9ERUZBVUxUX0FGRklO
SVRZIERPV05TVFJFQU0KLQotLy8gQ2FsbGVycyB3aG8gZG8gbm90IGtub3cgd2hlcmUgb24gdGhl
IGxpbmUgdGhlIHBvc2l0aW9uIGlzLAotLy8gYnV0IHdvdWxkIGxpa2UgVVBTVFJFQU0gaWYgYXQg
YSBsaW5lIGJyZWFrIG9yIERPV05TVFJFQU0KLS8vIG90aGVyd2lzZSwgbmVlZCBhIGNsZWFyIHdh
eSB0byBzcGVjaWZ5IHRoYXQuICBUaGUKLS8vIGNvbnN0cnVjdG9ycyBhdXRvLWNvcnJlY3QgVVBT
VFJFQU0gdG8gRE9XTlNUUkVBTSBpZiB0aGUKLS8vIHBvc2l0aW9uIGlzIG5vdCBhdCBhIGxpbmUg
YnJlYWsuCi0jZGVmaW5lIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFIFVQU1RSRUFNCi0KIGNsYXNz
IFZpc2libGVQb3NpdGlvbiB7CiBwdWJsaWM6Ci0gICAgLy8gTk9URTogVVBTVFJFQU0gYWZmaW5p
dHkgd2lsbCBiZSB1c2VkIG9ubHkgaWYgcG9zIGlzIGF0IGVuZCBvZiBhIHdyYXBwZWQgbGluZSwK
LSAgICAvLyBvdGhlcndpc2UgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gRE9XTlNUUkVBTQotICAg
IFZpc2libGVQb3NpdGlvbigpIDogbV9hZmZpbml0eShWUF9ERUZBVUxUX0FGRklOSVRZKSB7IH0K
LSAgICBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mLCBFQWZm
aW5pdHkgPSBWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICAvLyBWaXNpYmxlUG9zaXRpb24gZGVm
YXVsdCBhZmZpbml0eSBpcyBkb3duc3RyZWFtIGZvciBjYWxsZXJzIHRoYXQgZG8gbm90IHJlYWxs
eSBjYXJlIGJlY2F1c2UgaXQgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiB1cHN0cmVhbS4KKyAgICBz
dGF0aWMgY29uc3RleHByIGF1dG8gZGVmYXVsdEFmZmluaXR5ID0gRG93bnN0cmVhbTsKIAotICAg
IC8vIEZJWE1FOiBXaHkgZG9lc24ndCB0aGlzIHJlc2V0IG1fYWZmaW5pdHk/Ci0gICAgdm9pZCBj
bGVhcigpIHsgbV9kZWVwUG9zaXRpb24gPSB7IH07IH0KKyAgICBWaXNpYmxlUG9zaXRpb24oKSA9
IGRlZmF1bHQ7CisKKyAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgaWdub3JlIHRoZSBwYXNz
ZWQtaW4gYWZmaW5pdHkgaWYgdGhlIHBvc2l0aW9uIGlzIG5vdCBhdCB0aGUgZW5kIG9mIGEgbGlu
ZS4KKyAgICBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mLCBB
ZmZpbml0eSA9IGRlZmF1bHRBZmZpbml0eSk7CiAKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBpc05vdE51bGwoKSBj
b25zdCB7IHJldHVybiBtX2RlZXBQb3NpdGlvbi5pc05vdE51bGwoKTsgfQogICAgIGJvb2wgaXNP
cnBoYW4oKSBjb25zdCB7IHJldHVybiBtX2RlZXBQb3NpdGlvbi5pc09ycGhhbigpOyB9CiAKICAg
ICBQb3NpdGlvbiBkZWVwRXF1aXZhbGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVlcFBvc2l0aW9u
OyB9Ci0gICAgRUFmZmluaXR5IGFmZmluaXR5KCkgY29uc3QgeyBBU1NFUlQobV9hZmZpbml0eSA9
PSBVUFNUUkVBTSB8fCBtX2FmZmluaXR5ID09IERPV05TVFJFQU0pOyByZXR1cm4gbV9hZmZpbml0
eTsgfQotICAgIHZvaWQgc2V0QWZmaW5pdHkoRUFmZmluaXR5IGFmZmluaXR5KSB7IG1fYWZmaW5p
dHkgPSBhZmZpbml0eTsgfQorICAgIEFmZmluaXR5IGFmZmluaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9hZmZpbml0eTsgfQorCisgICAgdm9pZCBzZXRBZmZpbml0eShBZmZpbml0eSBhZmZpbml0eSkg
eyBtX2FmZmluaXR5ID0gYWZmaW5pdHk7IH0KIAogICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhlIGZv
bGxvd2luZyBmdW5jdGlvbnMnIHBhcmFtZXRlciBmcm9tIGEgYm9vbGVhbiB0byBTdGF5SW5FZGl0
YWJsZUNvbnRlbnQuCiAKLSAgICAvLyBuZXh0KCkgYW5kIHByZXZpb3VzKCkgd2lsbCBpbmNyZW1l
bnQvZGVjcmVtZW50IGJ5IGEgY2hhcmFjdGVyIGNsdXN0ZXIuCisgICAgLy8gbmV4dCgpIGFuZCBw
cmV2aW91cygpIGluY3JlbWVudC9kZWNyZW1lbnQgYnkgYSBjaGFyYWN0ZXIgY2x1c3Rlci4KICAg
ICBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gbmV4dChFZGl0aW5nQm91bmRhcnlDcm9z
c2luZ1J1bGUgPSBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5
ID0gbnVsbHB0cikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHBy
ZXZpb3VzKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbkNyb3NzRWRpdGluZ0JvdW5k
YXJ5LCBib29sKiByZWFjaGVkQm91bmRhcnkgPSBudWxscHRyKSBjb25zdDsKKwogICAgIFZpc2li
bGVQb3NpdGlvbiBob25vckVkaXRpbmdCb3VuZGFyeUF0T3JCZWZvcmUoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5ID0gbnVsbHB0cikgY29uc3Q7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIGhvbm9yRWRpdGluZ0JvdW5kYXJ5QXRPckFmdGVyKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYsIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSA9IG51bGxwdHIpIGNvbnN0OwogCkBAIC04
MiwxMyArNjcsMTYgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGhhbmRs
ZSBbdGFibGUsIDBdIGNvcnJlY3RseS4KICAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOb3ROdWxsKCkgPyBtX2RlZXBQb3Np
dGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiAwOyB9CiAKLSAg
ICB2b2lkIGdldElubGluZUJveEFuZE9mZnNldChJbmxpbmVCb3gqJiwgaW50JiBjYXJldE9mZnNl
dCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoVGV4dERpcmVjdGlvbiBw
cmltYXJ5RGlyZWN0aW9uLCBJbmxpbmVCb3gqJiwgaW50JiBjYXJldE9mZnNldCkgY29uc3Q7Cisg
ICAgSW5saW5lQm94QW5kT2Zmc2V0IGlubGluZUJveEFuZE9mZnNldCgpIGNvbnN0OworICAgIElu
bGluZUJveEFuZE9mZnNldCBpbmxpbmVCb3hBbmRPZmZzZXQoVGV4dERpcmVjdGlvbiBwcmltYXJ5
RGlyZWN0aW9uKSBjb25zdDsKIAotICAgIC8vIFJlY3QgaXMgbG9jYWwgdG8gdGhlIHJldHVybmVk
IHJlbmRlcmVyCi0gICAgV0VCQ09SRV9FWFBPUlQgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChS
ZW5kZXJPYmplY3QqJikgY29uc3Q7CisgICAgc3RydWN0IExvY2FsQ2FyZXRSZWN0IHsKKyAgICAg
ICAgTGF5b3V0UmVjdCByZWN0OworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyIHsgbnVs
bHB0ciB9OworICAgIH07CisgICAgV0VCQ09SRV9FWFBPUlQgTG9jYWxDYXJldFJlY3QgbG9jYWxD
YXJldFJlY3QoKSBjb25zdDsKIAotICAgIC8vIEJvdW5kcyBvZiAocG9zc2libHkgdHJhbnNmb3Jt
ZWQpIGNhcmV0IGluIGFic29sdXRlIGNvb3JkcworICAgIC8vIEJvdW5kcyBvZiAocG9zc2libHkg
dHJhbnNmb3JtZWQpIGNhcmV0IGluIGFic29sdXRlIGNvb3Jkcy4KICAgICBXRUJDT1JFX0VYUE9S
VCBJbnRSZWN0IGFic29sdXRlQ2FyZXRCb3VuZHMoYm9vbCogaW5zaWRlRml4ZWQgPSBudWxscHRy
KSBjb25zdDsKIAogICAgIC8vIEFicyB4L3kgcG9zaXRpb24gb2YgdGhlIGNhcmV0IGlnbm9yaW5n
IHRyYW5zZm9ybXMuCkBAIC0xMDgsMjAgKzk2LDE5IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIHZvaWQgaW5pdChjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSk7Ci0gICAgUG9z
aXRpb24gY2Fub25pY2FsUG9zaXRpb24oY29uc3QgUG9zaXRpb24mKTsKKyAgICBzdGF0aWMgUG9z
aXRpb24gY2Fub25pY2FsUG9zaXRpb24oY29uc3QgUG9zaXRpb24mKTsKIAogICAgIFBvc2l0aW9u
IGxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3Q7CiAgICAgUG9zaXRpb24gcmln
aHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3Q7CiAKICAgICBQb3NpdGlvbiBtX2Rl
ZXBQb3NpdGlvbjsKLSAgICBFQWZmaW5pdHkgbV9hZmZpbml0eTsKKyAgICBBZmZpbml0eSBtX2Fm
ZmluaXR5IHsgZGVmYXVsdEFmZmluaXR5IH07CiB9OwogCiBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiBib29sIG9wZXJhdG9y
IT0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKLVBh
cnRpYWxPcmRlcmluZyBkb2N1bWVudE9yZGVyKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09SRV9FWFBPUlQgUGFydGlhbE9yZGVyaW5nIGRvY3Vt
ZW50T3JkZXIoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7
CiBib29sIG9wZXJhdG9yPChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpOwogYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwpAQCAtMTM2LDcgKzEyMyw3IEBAIGJvb2wgaXNMYXN0
VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IE5vZGUq
KTsKIAogYm9vbCBhcmVWaXNpYmxlUG9zaXRpb25zSW5TYW1lVHJlZVNjb3BlKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCi1XVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgRUFmZmluaXR5KTsKK1dURjo6VGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBBZmZpbml0eSk7CiBXRUJDT1JFX0VYUE9S
VCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJik7CiAKIHN0cnVjdCBWaXNpYmxlUG9zaXRpb25SYW5nZSB7CkBAIC0xNTAs
OSArMTM3LDkgQEAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1w
bGVSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYKIAogLy8gaW5saW5lcwogCi0vLyBG
SVhNRTogSXMgaXQgY29ycmVjdCBhbmQgaGVscGZ1bCBmb3IgdGhpcyB0byBiZSBpZ25vcmluZyBh
ZmZpbml0eT8KIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBh
LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiB7CisgICAgLy8gRklYTUU6IElzIGl0IGNvcnJl
Y3QgYW5kIGhlbHBmdWwgZm9yIHRoaXMgdG8gYmUgaWdub3JpbmcgZGlmZmVyZW5jZXMgaW4gYWZm
aW5pdHk/CiAgICAgcmV0dXJuIGEuZGVlcEVxdWl2YWxlbnQoKSA9PSBiLmRlZXBFcXVpdmFsZW50
KCk7CiB9CiAKQEAgLTE2MywzMiArMTUwLDMyIEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiAKIGlubGlu
ZSBib29sIG9wZXJhdG9yPChjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgYikKIHsKLSAgICByZXR1cm4gYS5kZWVwRXF1aXZhbGVudCgpIDwgYi5kZWVwRXF1
aXZhbGVudCgpOworICAgIHJldHVybiBpc19sdChkb2N1bWVudE9yZGVyKGEsIGIpKTsKIH0KIAog
aW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBiKQogewotICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPiBiLmRl
ZXBFcXVpdmFsZW50KCk7CisgICAgcmV0dXJuIGlzX2d0KGRvY3VtZW50T3JkZXIoYSwgYikpOwog
fQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogewotICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkg
PD0gYi5kZWVwRXF1aXZhbGVudCgpOworICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50T3JkZXIo
YSwgYikpOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFZpc2libGVQb3NpdGlv
biYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQogewotICAgIHJldHVybiBhLmRlZXBFcXVp
dmFsZW50KCkgPj0gYi5kZWVwRXF1aXZhbGVudCgpOworICAgIHJldHVybiBpc19ndGVxKGRvY3Vt
ZW50T3JkZXIoYSwgYikpOwogfQogCi1pbmxpbmUgdm9pZCBWaXNpYmxlUG9zaXRpb246OmdldElu
bGluZUJveEFuZE9mZnNldChJbmxpbmVCb3gqJiBpbmxpbmVCb3gsIGludCYgY2FyZXRPZmZzZXQp
IGNvbnN0CitpbmxpbmUgYXV0byBWaXNpYmxlUG9zaXRpb246OmlubGluZUJveEFuZE9mZnNldCgp
IGNvbnN0IC0+IElubGluZUJveEFuZE9mZnNldAogewotICAgIG1fZGVlcFBvc2l0aW9uLmdldElu
bGluZUJveEFuZE9mZnNldChtX2FmZmluaXR5LCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKKyAg
ICByZXR1cm4gbV9kZWVwUG9zaXRpb24uaW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5pdHkpOwog
fQogCi1pbmxpbmUgdm9pZCBWaXNpYmxlUG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldChU
ZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveComIGlubGluZUJveCwgaW50
JiBjYXJldE9mZnNldCkgY29uc3QKK2lubGluZSBhdXRvIFZpc2libGVQb3NpdGlvbjo6aW5saW5l
Qm94QW5kT2Zmc2V0KFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbikgY29uc3QgLT4gSW5s
aW5lQm94QW5kT2Zmc2V0CiB7Ci0gICAgbV9kZWVwUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zm
c2V0KG1fYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24sIGlubGluZUJveCwgY2FyZXRPZmZzZXQp
OworICAgIHJldHVybiBtX2RlZXBQb3NpdGlvbi5pbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0
eSwgcHJpbWFyeURpcmVjdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCmluZGV4IDU3MTE5ZGIyYWE2
ZTc4NmRjNmI0MzJmNmMzODcxOWQ1Y2U4MTUxYTUuLmExNDZkYjI4ZGQ2MzU5OTQ4ZDZkYTZkNTM4
NWRjZTAxY2UwZTcxNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0
aW9uLmNwcApAQCAtMTcwLDE1ICsxNzAsMTIgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFZpc2li
bGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKICAgICAgICAgLy8gICAgICAg
ICAgICAgICAgICAgICAgIF4gc2VsZWN0ZWQKICAgICAgICAgLy8KICAgICAgICAgQVNTRVJUKGlz
UmFuZ2UoKSk7Ci0gICAgICAgIHMgPSBtX3N0YXJ0LmRvd25zdHJlYW0oKTsKLSAgICAgICAgZSA9
IG1fZW5kLnVwc3RyZWFtKCk7Ci0gICAgICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHMsIGUpID4g
MCkgewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzdGFydCBpcyBiZWZvcmUgdGhlIGVu
ZC4KLSAgICAgICAgICAgIC8vIFRoZSBlbmQgY2FuIHdpbmQgdXAgYmVmb3JlIHRoZSBzdGFydCBp
ZiBjb2xsYXBzZWQgd2hpdGVzcGFjZSBpcyB0aGUgb25seSB0aGluZyBzZWxlY3RlZC4KKyAgICAg
ICAgcyA9IG1fc3RhcnQuZG93bnN0cmVhbSgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwor
ICAgICAgICBlID0gbV9lbmQudXBzdHJlYW0oKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzdGFydCBpcyBiZWZvcmUgdGhlIGVuZC4KKyAgICAg
ICAgLy8gVGhlIGVuZCBjYW4gd2luZCB1cCBiZWZvcmUgdGhlIHN0YXJ0IGlmIGNvbGxhcHNlZCB3
aGl0ZXNwYWNlIGlzIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkLgorICAgICAgICBpZiAocyA+IGUp
CiAgICAgICAgICAgICBzdGQ6OnN3YXAocywgZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcyA9IHMu
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgICAgIGUgPSBlLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpOwogICAgIH0KIAogICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UocywgZSk7
CkBAIC0yMzUsNyArMjMyLDcgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRCYXNlQW5kRXh0
ZW50VG9EZWVwRXF1aXZhbGVudHMoKQogICAgICAgICBtX2V4dGVudCA9IG1fYmFzZTsKICAgICAg
ICAgbV9iYXNlSXNGaXJzdCA9IHRydWU7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fYmFzZUlzRmly
c3QgPSBjb21wYXJlUG9zaXRpb25zKG1fYmFzZSwgbV9leHRlbnQpIDw9IDA7CisgICAgICAgIG1f
YmFzZUlzRmlyc3QgPSBtX2Jhc2UgPD0gbV9leHRlbnQ7CiB9CiAKIHZvaWQgVmlzaWJsZVNlbGVj
dGlvbjo6c2V0U3RhcnRBbmRFbmRGcm9tQmFzZUFuZEV4dGVudFJlc3BlY3RpbmdHcmFudWxhcml0
eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCkBAIC00MjcsNyArNDI0LDcgQEAgdm9pZCBW
aXNpYmxlU2VsZWN0aW9uOjpzZXRXaXRob3V0VmFsaWRhdGlvbihjb25zdCBQb3NpdGlvbiYgYmFz
ZSwgY29uc3QgUG9zaXRpb24KICAgICBBU1NFUlQobV9hZmZpbml0eSA9PSBET1dOU1RSRUFNKTsK
ICAgICBtX2Jhc2UgPSBiYXNlOwogICAgIG1fZXh0ZW50ID0gZXh0ZW50OwotICAgIG1fYmFzZUlz
Rmlyc3QgPSBjb21wYXJlUG9zaXRpb25zKGJhc2UsIGV4dGVudCkgPD0gMDsKKyAgICBtX2Jhc2VJ
c0ZpcnN0ID0gYmFzZSA8PSBleHRlbnQ7CiAgICAgaWYgKG1fYmFzZUlzRmlyc3QpIHsKICAgICAg
ICAgbV9zdGFydCA9IGJhc2U7CiAgICAgICAgIG1fZW5kID0gZXh0ZW50OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IGEzMjliMTIxYTRjMzFkM2RlNGJjYzA1M2Y1
NWE4ZWZkY2ZkYzc0ZjAuLmZmODMwMzQ5ZDQ2NmI0NjJlOGQwMzJjMDA4MGU4NTI5ZTYzNThiMGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTM3NSw5ICszNzUs
OCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc3VhbFdvcmRQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbgogICAgICAgICBpZiAocHJldmlvdXNQb3NpdGlv
biAmJiBhZGphY2VudENoYXJhY3RlclBvc2l0aW9uID09IHByZXZpb3VzUG9zaXRpb24udmFsdWUo
KSkKICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKLSAgICAgICAg
SW5saW5lQm94KiBib3g7Ci0gICAgICAgIGludCBvZmZzZXRJbkJveDsKLSAgICAgICAgYWRqYWNl
bnRDaGFyYWN0ZXJQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmdldElubGluZUJveEFuZE9mZnNl
dChVUFNUUkVBTSwgYm94LCBvZmZzZXRJbkJveCk7CisgICAgICAgIC8vIEZJWE1FOiBXaHkgZm9y
Y2UgdGhlIHVzZSBvZiBVcHN0cmVhbSBhZmZpbml0eSBoZXJlIGluc3RlYWQgb2YgVmlzaWJsZVBv
c2l0aW9uOjppbmxpbmVCb3hBbmRPZmZzZXQsIHdoaWNoIHdpbGwgZ2V0IGFmZmluaXR5IGZyb20g
YWRqYWNlbnRDaGFyYWN0ZXJQb3NpdGlvbj8KKyAgICAgICAgYXV0byBbYm94LCBvZmZzZXRJbkJv
eF0gPSBhZGphY2VudENoYXJhY3RlclBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuaW5saW5lQm94
QW5kT2Zmc2V0KFVwc3RyZWFtKTsKICAgICAKICAgICAgICAgaWYgKCFib3gpCiAgICAgICAgICAg
ICBicmVhazsKQEAgLTY3MCw3ICs2NjksNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRC
b3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoRnVuYwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihwb3MsIFZQX1VQU1RS
RUFNX0lGX1BPU1NJQkxFKTsKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHBvcywgVXBzdHJl
YW0pOwogfQogCiAvLyAtLS0tLS0tLS0KQEAgLTg5Nyw3ICs4OTYsNyBAQCBzdGF0aWMgVmlzaWJs
ZVBvc2l0aW9uIGVuZFBvc2l0aW9uRm9yTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIExp
bmVFbmRwb2ludAogICAgIH0gZWxzZQogICAgICAgICBwb3MgPSBwb3NpdGlvbkFmdGVyTm9kZShl
bmROb2RlKTsKICAgICAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHBvcywgVlBfVVBTVFJF
QU1fSUZfUE9TU0lCTEUpOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocG9zLCBVcHN0cmVh
bSk7CiB9CiAKIHN0YXRpYyBib29sIGluU2FtZUxvZ2ljYWxMaW5lKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQpAQCAtOTc1LDcgKzk3NCw3IEBAIGJv
b2wgaXNFbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwKQogICAgIHJldHVybiBwLmlz
Tm90TnVsbCgpICYmIHAgPT0gZW5kT2ZMaW5lKHApOwogfQogCi1ib29sIGlzTG9naWNhbEVuZE9m
TGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnApCitib29sIGlzTG9naWNhbEVuZE9mTGluZShj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHApCiB7CiAgICAgcmV0dXJuIHAuaXNOb3ROdWxsKCkgJiYg
cCA9PSBsb2dpY2FsRW5kT2ZMaW5lKHApOwogfQpAQCAtMTAxMywxMCArMTAxMiw3IEBAIFZpc2li
bGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZp
c2libGVQb3NpdGlvbiwgaW50CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAog
ICAgIFJvb3RJbmxpbmVCb3gqIHJvb3QgPSBudWxscHRyOwotICAgIElubGluZUJveCogYm94Owot
ICAgIGludCBpZ25vcmVkQ2FyZXRPZmZzZXQ7Ci0gICAgdmlzaWJsZVBvc2l0aW9uLmdldElubGlu
ZUJveEFuZE9mZnNldChib3gsIGlnbm9yZWRDYXJldE9mZnNldCk7Ci0gICAgaWYgKGJveCkgewor
ICAgIGlmIChhdXRvIGJveCA9IHZpc2libGVQb3NpdGlvbi5pbmxpbmVCb3hBbmRPZmZzZXQoKS5i
b3gpIHsKICAgICAgICAgcm9vdCA9IGJveC0+cm9vdCgpLnByZXZSb290Qm94KCk7CiAgICAgICAg
IC8vIFdlIHdhbnQgdG8gc2tpcCB6ZXJvIGhlaWdodCBib3hlcy4KICAgICAgICAgLy8gVGhpcyBj
b3VsZCBoYXBwZW4gaW4gY2FzZSBpdCBpcyBhIFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC4K
QEAgLTEwNTcsMjEgKzEwNTMsMTYgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24sIGludCBsaW4KIHsKICAgICBQ
b3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgTm9kZSog
bm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKLQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAogICAgIG5vZGUtPmRvY3VtZW50KCkudXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQorICAgIGlmICgh
bm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCiAg
ICAgUm9vdElubGluZUJveCogcm9vdCA9IG51bGxwdHI7Ci0gICAgSW5saW5lQm94KiBib3g7Ci0g
ICAgaW50IGlnbm9yZWRDYXJldE9mZnNldDsKLSAgICB2aXNpYmxlUG9zaXRpb24uZ2V0SW5saW5l
Qm94QW5kT2Zmc2V0KGJveCwgaWdub3JlZENhcmV0T2Zmc2V0KTsKLSAgICBpZiAoYm94KSB7Cisg
ICAgaWYgKGF1dG8gYm94ID0gdmlzaWJsZVBvc2l0aW9uLmlubGluZUJveEFuZE9mZnNldCgpLmJv
eCkgewogICAgICAgICByb290ID0gYm94LT5yb290KCkubmV4dFJvb3RCb3goKTsKICAgICAgICAg
Ly8gV2Ugd2FudCB0byBza2lwIHplcm8gaGVpZ2h0IGJveGVzLgogICAgICAgICAvLyBUaGlzIGNv
dWxkIGhhcHBlbiBpbiBjYXNlIGl0IGlzIGEgVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LgpA
QCAtMTU2OSw5ICsxNTYwLDggQEAgYm9vbCBhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHZwLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXIKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6TGluZUdyYW51bGFyaXR5OgotICAgICAg
ICAvLyBBZmZpbml0eSBoYXMgdG8gYmUgc2V0IHRvIGdldCByaWdodCBib3VuZGFyeSBvZiB0aGUg
bGluZS4KICAgICAgICAgYm91bmRhcnkgPSB2cDsKLSAgICAgICAgYm91bmRhcnkuc2V0QWZmaW5p
dHkodXNlRG93bnN0cmVhbSA/IFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFIDogRE9XTlNUUkVBTSk7
CisgICAgICAgIGJvdW5kYXJ5LnNldEFmZmluaXR5KHVzZURvd25zdHJlYW0gPyBVcHN0cmVhbSA6
IERvd25zdHJlYW0pOwogICAgICAgICBib3VuZGFyeSA9IHVzZURvd25zdHJlYW0gPyBlbmRPZkxp
bmUoYm91bmRhcnkpIDogc3RhcnRPZkxpbmUoYm91bmRhcnkpOwogICAgICAgICBicmVhazsKIApA
QCAtMTc2NSw3ICsxNzU1LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZUJvdW5k
YXJ5SW5EaXJlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgU2UKICAgICAgICAgcmVz
dWx0LnNldEFmZmluaXR5KERPV05TVFJFQU0pOwogICAgICAgICByZXN1bHQgPSBpc0VuZE9mTGlu
ZShyZXN1bHQpID8gc3RhcnRPZkxpbmUobmV4dExpbmVQb3NpdGlvbihyZXN1bHQsIHJlc3VsdC5s
aW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oKSkpIDogZW5kT2ZM
aW5lKHJlc3VsdCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0LnNldEFmZmluaXR5KFZQ
X1VQU1RSRUFNX0lGX1BPU1NJQkxFKTsKKyAgICAgICAgcmVzdWx0LnNldEFmZmluaXR5KFVwc3Ry
ZWFtKTsKICAgICAgICAgcmVzdWx0ID0gaXNTdGFydE9mTGluZShyZXN1bHQpID8gZW5kT2ZMaW5l
KHByZXZpb3VzTGluZVBvc2l0aW9uKHJlc3VsdCwgcmVzdWx0LmxpbmVEaXJlY3Rpb25Qb2ludEZv
ckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbigpKSkgOiBzdGFydE9mTGluZShyZXN1bHQpOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKaW5kZXggZjQ3NTFiN2Y1MDU5
ZDQ4ZDEyMDUyNjkzYzhmZGE5MjcxN2FmNTM5Ny4uMjRmNTg4YzViMDdjYTQ3MmY3ODc3ZmUxNzM4
ODQzMzJlNzgxZTMzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCkBAIC0z
OCwzMSArMzgsMzEgQEAgY2xhc3MgVGV4dEl0ZXJhdG9yOwogZW51bSBFV29yZFNpZGUgeyBSaWdo
dFdvcmRJZk9uQm91bmRhcnkgPSBmYWxzZSwgTGVmdFdvcmRJZk9uQm91bmRhcnkgPSB0cnVlIH07
CiAKIC8vIHdvcmRzCi1XRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZldvcmQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIEVXb3JkU2lkZSA9IFJpZ2h0V29yZElmT25Cb3VuZGFy
eSk7Ci1XRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZXb3JkKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiAmLCBFV29yZFNpZGUgPSBSaWdodFdvcmRJZk9uQm91bmRhcnkpOwotV0VCQ09S
RV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzV29yZFBvc2l0aW9uKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiAmKTsKLVdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBuZXh0V29yZFBv
c2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKK1dFQkNPUkVfRVhQT1JUIFZpc2libGVQ
b3NpdGlvbiBzdGFydE9mV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBFV29yZFNpZGUgPSBS
aWdodFdvcmRJZk9uQm91bmRhcnkpOworV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIGVu
ZE9mV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBFV29yZFNpZGUgPSBSaWdodFdvcmRJZk9u
Qm91bmRhcnkpOworV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzV29yZFBv
c2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBv
c2l0aW9uIG5leHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiBWaXNpYmxl
UG9zaXRpb24gcmlnaHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgYm9vbCBz
a2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0KTsKIFZpc2libGVQb3NpdGlvbiBsZWZ0V29yZFBvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdo
dCk7CiBib29sIGlzU3RhcnRPZldvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKIC8vIHNl
bnRlbmNlcwotV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZW50ZW5jZShj
b25zdCBWaXNpYmxlUG9zaXRpb24gJik7Ci1XRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24g
ZW5kT2ZTZW50ZW5jZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7Ci1XRUJDT1JFX0VYUE9SVCBW
aXNpYmxlUG9zaXRpb24gcHJldmlvdXNTZW50ZW5jZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmKTsKLVdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBuZXh0U2VudGVuY2VQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CitXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9z
aXRpb24gc3RhcnRPZlNlbnRlbmNlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09SRV9F
WFBPUlQgVmlzaWJsZVBvc2l0aW9uIGVuZE9mU2VudGVuY2UoY29uc3QgVmlzaWJsZVBvc2l0aW9u
Jik7CitXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNTZW50ZW5jZVBvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0
aW9uIG5leHRTZW50ZW5jZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCiAvLyBs
aW5lcwotV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZMaW5lKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmKTsKLVdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBlbmRPZkxp
bmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOworV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09SRV9FWFBPUlQg
VmlzaWJsZVBvc2l0aW9uIGVuZE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIFdFQkNP
UkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24mLCBpbnQgbGluZURpcmVjdGlvblBvaW50LCBFZGl0YWJsZVR5cGUgPSBDb250
ZW50SXNFZGl0YWJsZSk7CiBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gbmV4dExpbmVQ
b3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBpbnQgbGluZURpcmVjdGlvblBvaW50LCBF
ZGl0YWJsZVR5cGUgPSBDb250ZW50SXNFZGl0YWJsZSk7Ci1XRUJDT1JFX0VYUE9SVCBib29sIGlu
U2FtZUxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
KTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgaXNTdGFydE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRp
b24gJik7Ci1XRUJDT1JFX0VYUE9SVCBib29sIGlzRW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmKTsKLVZpc2libGVQb3NpdGlvbiBsb2dpY2FsU3RhcnRPZkxpbmUoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICYsIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSA9IG51bGxwdHIpOwotVmlzaWJsZVBv
c2l0aW9uIGxvZ2ljYWxFbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGJvb2wqIHJl
YWNoZWRCb3VuZGFyeSA9IG51bGxwdHIpOwotYm9vbCBpc0xvZ2ljYWxFbmRPZkxpbmUoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICYpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBpblNhbWVMaW5lKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc1N0YXJ0T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09SRV9F
WFBPUlQgYm9vbCBpc0VuZE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK1Zpc2libGVQ
b3NpdGlvbiBsb2dpY2FsU3RhcnRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgYm9vbCog
cmVhY2hlZEJvdW5kYXJ5ID0gbnVsbHB0cik7CitWaXNpYmxlUG9zaXRpb24gbG9naWNhbEVuZE9m
TGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBib29sKiByZWFjaGVkQm91bmRhcnkgPSBudWxs
cHRyKTsKK2Jvb2wgaXNMb2dpY2FsRW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwog
VmlzaWJsZVBvc2l0aW9uIGxlZnRCb3VuZGFyeU9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBUZXh0RGlyZWN0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpOwogVmlzaWJsZVBvc2l0aW9u
IHJpZ2h0Qm91bmRhcnlPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dERpcmVjdGlv
biwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5KTsKIApAQCAtNzAsMjggKzcwLDI4IEBAIFZpc2libGVQ
b3NpdGlvbiByaWdodEJvdW5kYXJ5T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRE
aXJlY3Rpb24sIGJvb2wqCiBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBh
cmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1
bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiBXRUJDT1JFX0VYUE9SVCBWaXNpYmxl
UG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgRWRpdGluZ0Jv
dW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwot
V0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzUGFyYWdyYXBoUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGludCB4KTsKLVdFQkNPUkVfRVhQT1JUIFZpc2libGVQ
b3NpdGlvbiBuZXh0UGFyYWdyYXBoUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGlu
dCB4KTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgaXNTdGFydE9mUGFyYWdyYXBoKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiAmLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0Vk
aXRpbmdCb3VuZGFyeSk7Ci1XRUJDT1JFX0VYUE9SVCBib29sIGlzRW5kT2ZQYXJhZ3JhcGgoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICYsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5v
dENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLWJvb2wgaW5TYW1lUGFyYWdyYXBoKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiAmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgRWRpdGluZ0JvdW5kYXJ5Q3Jv
c3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotYm9vbCBpc0JsYW5rUGFy
YWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKK1dFQkNPUkVfRVhQT1JUIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91c1BhcmFncmFwaFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYs
IGludCB4KTsKK1dFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBuZXh0UGFyYWdyYXBoUG9z
aXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgaW50IHgpOworV0VCQ09SRV9FWFBPUlQgYm9v
bCBpc1N0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgRWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOworV0VCQ09SRV9F
WFBPUlQgYm9vbCBpc0VuZE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIEVkaXRp
bmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKK2Jv
b2wgaW5TYW1lUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRpdGlu
Z0JvdW5kYXJ5KTsKK2Jvb2wgaXNCbGFua1BhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24m
KTsKIAogLy8gYmxvY2tzICh0cnVlIHBhcmFncmFwaHM7IGxpbmUgYnJlYWsgZWxlbWVudHMgZG9u
J3QgYnJlYWsgYmxvY2tzKQotVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZCbG9jayhjb25zdCBWaXNp
YmxlUG9zaXRpb24gJiwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NF
ZGl0aW5nQm91bmRhcnkpOwotVmlzaWJsZVBvc2l0aW9uIGVuZE9mQmxvY2soY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICYsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRp
dGluZ0JvdW5kYXJ5KTsKLWJvb2wgaW5TYW1lQmxvY2soY29uc3QgVmlzaWJsZVBvc2l0aW9uICYs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKLWJvb2wgaXNTdGFydE9mQmxvY2soY29uc3QgVmlz
aWJsZVBvc2l0aW9uICYpOwotYm9vbCBpc0VuZE9mQmxvY2soY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICYpOworVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZCbG9jayhjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFy
eSk7CitWaXNpYmxlUG9zaXRpb24gZW5kT2ZCbG9jayhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBF
ZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7
Citib29sIGluU2FtZUJsb2NrKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpOworYm9vbCBpc1N0YXJ0T2ZCbG9jayhjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsK
K2Jvb2wgaXNFbmRPZkJsb2NrKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCiAvLyBkb2N1bWVu
dAogV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZEb2N1bWVudChjb25zdCBO
b2RlKik7CiBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZEb2N1bWVudChjb25z
dCBOb2RlKik7Ci1XRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkRvY3VtZW50
KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKLVdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlv
biBlbmRPZkRvY3VtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKLWJvb2wgaW5TYW1lRG9j
dW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsK
LVdFQkNPUkVfRVhQT1JUIGJvb2wgaXNTdGFydE9mRG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0
aW9uICYpOwotV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0VuZE9mRG9jdW1lbnQoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICYpOworV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZEb2N1
bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK1dFQkNPUkVfRVhQT1JUIFZpc2libGVQb3Np
dGlvbiBlbmRPZkRvY3VtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBpblNhbWVE
b2N1bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsK
K1dFQkNPUkVfRVhQT1JUIGJvb2wgaXNTdGFydE9mRG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJik7CitXRUJDT1JFX0VYUE9SVCBib29sIGlzRW5kT2ZEb2N1bWVudChjb25zdCBWaXNpYmxl
UG9zaXRpb24mKTsKIAogLy8gZWRpdGFibGUgY29udGVudAogV0VCQ09SRV9FWFBPUlQgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KaW5kZXgg
Njk0NWUyZTU1MTcxNzhmNzhjNTU1NDFmMjRhMDg1ZjAwNDBiNWJiNC4uZmI5MTM1OWNhMGQ2MTA3
N2Y5ZmFjZTEwNDdmZTlmNGM4N2YyNzUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvSFRNTENvbnZlcnRlci5tbQpAQCAtMzk4LDcgKzM5OCw3IEBAIEhUTUxDb252ZXJ0ZXI6
On5IVE1MQ29udmVydGVyKCkKIAogQXR0cmlidXRlZFN0cmluZyBIVE1MQ29udmVydGVyOjpjb252
ZXJ0KCkKIHsKLSAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhtX3N0YXJ0LCBtX2VuZCkgPiAwKQor
ICAgIGlmIChtX3N0YXJ0ID4gbV9lbmQpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBOb2Rl
KiBjb21tb25BbmNlc3RvckNvbnRhaW5lciA9IF9jYWNoZXMtPmNhY2hlQW5jZXN0b3JzT2ZTdGFy
dFRvQmVDb252ZXJ0ZWQobV9zdGFydCwgbV9lbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3Mv
RWRpdG9ySU9TLm1tCmluZGV4IDcyMTBkM2Y5YzBhZTFlNWE3MWIzZjIwY2M4ZjExMGFjMzg1YzYw
MTcuLjA4ZDEyZGJkMDBmMjI2NjEwZDNhNGU1NWYxMDU4NmZlZDQ1NzMxOGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTM2MywxNyArMzYzLDEzIEBAIHZvaWQg
RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEVsZW1l
bnQmIGVsZW1lbnQpCiAgICAgfQogCiAgICAgLy8gc2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIGVu
ZAotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uOwotCi0gICAgUG9zaXRpb24gcG9zID0g
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKCZlbGVtZW50LCBlbGVtZW50LmNvdW50Q2hpbGRO
b2RlcygpKTsKLQotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zKHBvcywgVlBfREVGQVVM
VF9BRkZJTklUWSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MoY3JlYXRlTGVnYWN5
RWRpdGluZ1Bvc2l0aW9uKCZlbGVtZW50LCBlbGVtZW50LmNvdW50Q2hpbGROb2RlcygpKSk7CiAg
ICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIFZpc2li
bGVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRCYXNlKHZpc2libGVQb3Mp
OwogICAgIHNlbGVjdGlvbi5zZXRFeHRlbnQodmlzaWJsZVBvcyk7Ci0KICAgICBtX2RvY3VtZW50
LnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwogCiAgICAgY2xpZW50KCktPnJl
c3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmluZGV4
IDZiOGUzOTlhNWY4YWVkZjFlYmI0N2JiYjZmNmQ1MjY5ZGJhODVkOGYuLmU3MjUyNzAxZjEzMDdi
Y2QxNGQwMTA2NTk5ZjM3MTE3YWZhYzE4MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAK
QEAgLTU4NCw3ICs1ODQsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRF
bmRUYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiBlbAogCiBOb2RlKiBTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMoY29uc3QgUG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIEFTU0VSVChjb21wYXJlUG9zaXRpb25zKHN0
YXJ0LCBlbmQpIDw9IDApOworICAgIEFTU0VSVChzdGFydCA8PSBlbmQpOwogICAgIGF1dG8gc3Rh
cnROb2RlID0gc3RhcnQuZmlyc3ROb2RlKCk7CiAgICAgTm9kZSogcGFzdEVuZCA9IGVuZC5jb21w
dXRlTm9kZUFmdGVyUG9zaXRpb24oKTsKICAgICBpZiAoIXBhc3RFbmQgJiYgZW5kLmNvbnRhaW5l
ck5vZGUoKSkKQEAgLTgzOSw3ICs4MzksNyBAQCBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6ZVByZXNl
cnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LAogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGludGVyY2hhbmdlTmV3bGlu
ZVN0cmluZyhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiPGJyIGNsYXNzPVwiIiBBcHBsZUludGVy
Y2hhbmdlTmV3bGluZSAiXCI+IikpOwogCi0gICAgaWYgKCFjb21wYXJlUG9zaXRpb25zKHN0YXJ0
LCBlbmQpKQorICAgIGlmIChzdGFydCA9PSBlbmQpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogCiAgICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9y
KHN0YXJ0LCBlbmQpOwpAQCAtODcxLDcgKzg3MSw3IEBAIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXpl
UHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2VJbnRlcm5hbChjb25zdCBQb3NpdGlvbiYgc3RhcnQs
CiAgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZChpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcuZ2V0
KCkpOwogICAgICAgICBzdGFydEFkanVzdGVkRm9ySW50ZXJjaGFuZ2VOZXdsaW5lID0gdmlzaWJs
ZVN0YXJ0Lm5leHQoKS5kZWVwRXF1aXZhbGVudCgpOwogCi0gICAgICAgIGlmIChjb21wYXJlUG9z
aXRpb25zKHN0YXJ0QWRqdXN0ZWRGb3JJbnRlcmNoYW5nZU5ld2xpbmUsIGVuZCkgPj0gMCkKKyAg
ICAgICAgaWYgKCEoc3RhcnRBZGp1c3RlZEZvckludGVyY2hhbmdlTmV3bGluZSA8IGVuZCkpCiAg
ICAgICAgICAgICByZXR1cm4gaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGI0NTViMWRlYjZlNDkxNWU0ZTkxYTBl
NTUxMGE3MzAxMTMxM2YyNGYuLmM3ODlkYmFhZGQ3MWQ0N2RmYWY1OTFkY2ExMzYxYjEwNzk2YzRj
ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTcxMiw5ICs3MTIsOSBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50U2luZ2xlQ2xpY2soY29u
c3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UgogICAgIGlmIChleHRlbmRTZWxlY3Rpb24gJiYgbmV3
U2VsZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCkpIHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb25JblVzZXJTZWxlY3RBbGwgPSBleHBhbmRTZWxlY3Rpb25Ub1Jlc3BlY3RTZWxlY3RP
bk1vdXNlRG93bigqdGFyZ2V0Tm9kZSwgVmlzaWJsZVNlbGVjdGlvbihwb3MpKTsKICAgICAgICAg
aWYgKHNlbGVjdGlvbkluVXNlclNlbGVjdEFsbC5pc1JhbmdlKCkpIHsKLSAgICAgICAgICAgIGlm
IChjb21wYXJlUG9zaXRpb25zKHNlbGVjdGlvbkluVXNlclNlbGVjdEFsbC5zdGFydCgpLCBuZXdT
ZWxlY3Rpb24uc3RhcnQoKSkgPCAwKQorICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkluVXNlclNl
bGVjdEFsbC5zdGFydCgpIDwgbmV3U2VsZWN0aW9uLnN0YXJ0KCkpCiAgICAgICAgICAgICAgICAg
cG9zID0gc2VsZWN0aW9uSW5Vc2VyU2VsZWN0QWxsLnN0YXJ0KCk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChjb21wYXJlUG9zaXRpb25zKG5ld1NlbGVjdGlvbi5lbmQoKSwgc2VsZWN0aW9uSW5Vc2Vy
U2VsZWN0QWxsLmVuZCgpKSA8IDApCisgICAgICAgICAgICBlbHNlIGlmIChuZXdTZWxlY3Rpb24u
ZW5kKCkgPCBzZWxlY3Rpb25JblVzZXJTZWxlY3RBbGwuZW5kKCkpCiAgICAgICAgICAgICAgICAg
cG9zID0gc2VsZWN0aW9uSW5Vc2VyU2VsZWN0QWxsLmVuZCgpOwogICAgICAgICB9CiAKQEAgLTEw
MzUsMTEgKzEwMzUsMTEgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZVNlbGVjdGlvbkZvck1v
dXNlRHJhZyhjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWwKICAgICAgICAgbmV3U2Vs
ZWN0aW9uLnNldEV4dGVudChwb3NpdGlvbkFmdGVyTm9kZShyb290VXNlclNlbGVjdEFsbEZvck1v
dXNlUHJlc3NOb2RlKS5kb3duc3RyZWFtKENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgLy8gUmVzZXQgYmFzZSBmb3IgdXNlciBzZWxlY3QgYWxsIHdoZW4g
YmFzZSBpcyBpbnNpZGUgdXNlci1zZWxlY3QtYWxsIGFyZWEgYW5kIGV4dGVudCA8IGJhc2UuCi0g
ICAgICAgIGlmIChyb290VXNlclNlbGVjdEFsbEZvck1vdXNlUHJlc3NOb2RlICYmIGNvbXBhcmVQ
b3NpdGlvbnModGFyZ2V0LT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KGhpdFRlc3RSZXN1
bHQubG9jYWxQb2ludCgpLCBudWxscHRyKSwgbV9tb3VzZVByZXNzTm9kZS0+cmVuZGVyZXIoKS0+
cG9zaXRpb25Gb3JQb2ludChtX2RyYWdTdGFydFBvc2l0aW9uLCBudWxscHRyKSkgPCAwKQorICAg
ICAgICBpZiAocm9vdFVzZXJTZWxlY3RBbGxGb3JNb3VzZVByZXNzTm9kZSAmJiB0YXJnZXQtPnJl
bmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVzdFJlc3VsdC5sb2NhbFBvaW50KCksIG51
bGxwdHIpIDwgbV9tb3VzZVByZXNzTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludCht
X2RyYWdTdGFydFBvc2l0aW9uLCBudWxscHRyKSkKICAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5z
ZXRCYXNlKHBvc2l0aW9uQWZ0ZXJOb2RlKHJvb3RVc2VyU2VsZWN0QWxsRm9yTW91c2VQcmVzc05v
ZGUpLmRvd25zdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpKTsKICAgICAgICAgCiAgICAg
ICAgIE5vZGUqIHJvb3RVc2VyU2VsZWN0QWxsRm9yVGFyZ2V0ID0gUG9zaXRpb246OnJvb3RVc2Vy
U2VsZWN0QWxsRm9yTm9kZSh0YXJnZXQpOwotICAgICAgICBpZiAocm9vdFVzZXJTZWxlY3RBbGxG
b3JUYXJnZXQgJiYgbV9tb3VzZVByZXNzTm9kZS0+cmVuZGVyZXIoKSAmJiBjb21wYXJlUG9zaXRp
b25zKHRhcmdldC0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChoaXRUZXN0UmVzdWx0Lmxv
Y2FsUG9pbnQoKSwgbnVsbHB0ciksIG1fbW91c2VQcmVzc05vZGUtPnJlbmRlcmVyKCktPnBvc2l0
aW9uRm9yUG9pbnQobV9kcmFnU3RhcnRQb3NpdGlvbiwgbnVsbHB0cikpIDwgMCkKKyAgICAgICAg
aWYgKHJvb3RVc2VyU2VsZWN0QWxsRm9yVGFyZ2V0ICYmIG1fbW91c2VQcmVzc05vZGUtPnJlbmRl
cmVyKCkgJiYgdGFyZ2V0LT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KGhpdFRlc3RSZXN1
bHQubG9jYWxQb2ludCgpLCBudWxscHRyKSA8IG1fbW91c2VQcmVzc05vZGUtPnJlbmRlcmVyKCkt
PnBvc2l0aW9uRm9yUG9pbnQobV9kcmFnU3RhcnRQb3NpdGlvbiwgbnVsbHB0cikpCiAgICAgICAg
ICAgICBuZXdTZWxlY3Rpb24uc2V0RXh0ZW50KHBvc2l0aW9uQmVmb3JlTm9kZShyb290VXNlclNl
bGVjdEFsbEZvclRhcmdldCkudXBzdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpKTsKICAg
ICAgICAgZWxzZSBpZiAocm9vdFVzZXJTZWxlY3RBbGxGb3JUYXJnZXQgJiYgbV9tb3VzZVByZXNz
Tm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5zZXRFeHRlbnQocG9z
aXRpb25BZnRlck5vZGUocm9vdFVzZXJTZWxlY3RBbGxGb3JUYXJnZXQpLmRvd25zdHJlYW0oQ2Fu
Q3Jvc3NFZGl0aW5nQm91bmRhcnkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0TGluZUJveGVzLmNwcAppbmRleCAzMzQ5MWUwNGZiOTE0YzRkN2JjMjM2MDk3OTNi
ZTFkNThjYWM5ZmFiLi5kMTZhZjA1ZGJiZTFmMTFlYWFlMmIwMDNlYjJhOGVjMWQxZWE5MzllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3Bw
CkBAIC0yMTAsMTYgKzIxMCwxNiBAQCBzdGF0aWMgYm9vbCBsaW5lRGlyZWN0aW9uUG9pbnRGaXRz
SW5Cb3goaW50IHBvaW50TGluZURpcmVjdGlvbiwgY29uc3QgSW5saW5lVGV4dAogCiBzdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChjb25zdCBJbmxpbmVC
b3gmIGJveCwgaW50IG9mZnNldCwgU2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0gc2hvdWxkQWZm
aW5pdHlCZURvd25zdHJlYW0pCiB7Ci0gICAgRUFmZmluaXR5IGFmZmluaXR5ID0gVlBfREVGQVVM
VF9BRkZJTklUWTsKKyAgICBhdXRvIGFmZmluaXR5ID0gVmlzaWJsZVBvc2l0aW9uOjpkZWZhdWx0
QWZmaW5pdHk7CiAgICAgc3dpdGNoIChzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSkgewogICAg
IGNhc2UgQWx3YXlzRG93bnN0cmVhbToKLSAgICAgICAgYWZmaW5pdHkgPSBET1dOU1RSRUFNOwor
ICAgICAgICBhZmZpbml0eSA9IERvd25zdHJlYW07CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
QWx3YXlzVXBzdHJlYW06Ci0gICAgICAgIGFmZmluaXR5ID0gVlBfVVBTVFJFQU1fSUZfUE9TU0lC
TEU7CisgICAgICAgIGFmZmluaXR5ID0gVXBzdHJlYW07CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgVXBzdHJlYW1JZlBvc2l0aW9uSXNOb3RBdFN0YXJ0OgotICAgICAgICBhZmZpbml0eSA9IG9m
ZnNldCA+IGJveC5jYXJldE1pbk9mZnNldCgpID8gVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUgOiBE
T1dOU1RSRUFNOworICAgICAgICBhZmZpbml0eSA9IG9mZnNldCA+IGJveC5jYXJldE1pbk9mZnNl
dCgpID8gVXBzdHJlYW0gOiBEb3duc3RyZWFtOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
cmV0dXJuIGJveC5yZW5kZXJlcigpLmNyZWF0ZVZpc2libGVQb3NpdGlvbihvZmZzZXQsIGFmZmlu
aXR5KTsKQEAgLTMyMyw3ICszMjMsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dExpbmVC
b3hlczo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlcgogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgICAgICAgICAgaWYgKHBvaW50TGluZURpcmVjdGlv
biAhPSBib3gtPmxvZ2ljYWxMZWZ0KCkgJiYgcG9pbnQueCgpIDwgYm94LT54KCkgKyBib3gtPmxv
Z2ljYWxXaWR0aCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBoYWxmID0gYm94LT54KCkg
KyBib3gtPmxvZ2ljYWxXaWR0aCgpIC8gMjsKLSAgICAgICAgICAgICAgICAgICAgRUFmZmluaXR5
IGFmZmluaXR5ID0gcG9pbnQueCgpIDwgaGFsZiA/IERPV05TVFJFQU0gOiBWUF9VUFNUUkVBTV9J
Rl9QT1NTSUJMRTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZmZpbml0eSA9IHBvaW50Lngo
KSA8IGhhbGYgPyBEb3duc3RyZWFtIDogVXBzdHJlYW07CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZW5kZXJlci5jcmVhdGVWaXNpYmxlUG9zaXRpb24oYm94LT5vZmZzZXRGb3JQb3NpdGlv
bihwb2ludExpbmVEaXJlY3Rpb24pICsgYm94LT5zdGFydCgpLCBhZmZpbml0eSk7CiAgICAgICAg
ICAgICAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAppbmRleCBkYmY0OTAzZjg5ZjRkYzkyZWRmZjMwNTM5
MjU4NjlmMzJlMmQ5OWMwLi5hZTA2ZTRjYjUyOTcxMDNmN2MwYmFmNjhhMmEyMDBlYmUyODQ0MjY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5jcHAKQEAgLTIxOSw3ICsyMTksNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyU1ZH
SW5saW5lVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsCiAg
ICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgRE9XTlNUUkVBTSk7CiAKICAg
ICBpbnQgb2Zmc2V0ID0gY2xvc2VzdERpc3RhbmNlQm94LT5vZmZzZXRGb3JQb3NpdGlvbkluRnJh
Z21lbnQoKmNsb3Nlc3REaXN0YW5jZUZyYWdtZW50LCBhYnNvbHV0ZVBvaW50LngoKSAtIGNsb3Nl
c3REaXN0YW5jZVBvc2l0aW9uLCB0cnVlKTsKLSAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0
aW9uKG9mZnNldCArIGNsb3Nlc3REaXN0YW5jZUJveC0+c3RhcnQoKSwgb2Zmc2V0ID4gMCA/IFZQ
X1VQU1RSRUFNX0lGX1BPU1NJQkxFIDogRE9XTlNUUkVBTSk7CisgICAgcmV0dXJuIGNyZWF0ZVZp
c2libGVQb3NpdGlvbihvZmZzZXQgKyBjbG9zZXN0RGlzdGFuY2VCb3gtPnN0YXJ0KCksIG9mZnNl
dCA+IDAgPyBVcHN0cmVhbSA6IERvd25zdHJlYW0pOwogfQogCiB2b2lkIFJlbmRlclNWR0lubGlu
ZVRleHQ6OnVwZGF0ZVNjYWxlZEZvbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCBmMjEyZjg3MWEyYmI3ZjNiNDUzZmJh
MTY1ZTA5NTg1ZjNjYmY5ODBlLi41ZDE3YjZhZDM0MWU5MWM1NjM2OTNmYmExMzAxYmMyNGM1YjZk
ZGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbQpAQCAtMTU0NywxNCArMTU0NywxNCBAQCBzdGF0aWMgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IHJhbmdlRm9yUG9pbnRJblJvb3RWaWV3Q29vcmRpbmF0ZXMoRnJhbWUmIGZyYW1lLCBj
bwogICAgICAgICByZXN1bHQgPSBmcmFtZS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludElu
RG9jdW1lbnQpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgCiAgICAgaWYgKGJhc2VJc1N0YXJ0KSB7
Ci0gICAgICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHJlc3VsdCwgc2VsZWN0aW9uU3RhcnQpIDw9
IDApCisgICAgICAgIGlmIChyZXN1bHQgPD0gc2VsZWN0aW9uU3RhcnQpCiAgICAgICAgICAgICBy
ZXN1bHQgPSBzZWxlY3Rpb25TdGFydC5uZXh0KCk7CiAgICAgICAgIGVsc2UgaWYgKCZzZWxlY3Rp
b25TdGFydC5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+dHJlZVNjb3BlKCkgIT0gJmhp
dFRlc3QudGFyZ2V0Tm9kZSgpLT50cmVlU2NvcGUoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IFZp
c2libGVTZWxlY3Rpb246OmFkanVzdFBvc2l0aW9uRm9yRW5kKHJlc3VsdC5kZWVwRXF1aXZhbGVu
dCgpLCBzZWxlY3Rpb25TdGFydC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSk7CiAK
ICAgICAgICAgcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHJlc3VsdCk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoc2VsZWN0aW9uRW5k
LCByZXN1bHQpIDw9IDApCisgICAgICAgIGlmIChzZWxlY3Rpb25FbmQgPD0gcmVzdWx0KQogICAg
ICAgICAgICAgcmVzdWx0ID0gc2VsZWN0aW9uRW5kLnByZXZpb3VzKCk7CiAgICAgICAgIGVsc2Ug
aWYgKCZoaXRUZXN0LnRhcmdldE5vZGUoKS0+dHJlZVNjb3BlKCkgIT0gJnNlbGVjdGlvbkVuZC5k
ZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+dHJlZVNjb3BlKCkpCiAgICAgICAgICAgICBy
ZXN1bHQgPSBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RQb3NpdGlvbkZvclN0YXJ0KHJlc3VsdC5k
ZWVwRXF1aXZhbGVudCgpLCBzZWxlY3Rpb25FbmQuZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJO
b2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBv
cnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29y
ZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCmluZGV4IDk3OGFiMTE2YzM2YjUyZTdmNjUy
NWE3YmQ2MTMwMmVhMDMyZTQ3NjkuLmJlY2NiODA3MTA3ZDVkMmYwM2Y0ZWM5YTA5Mjk4ZTRjZjlm
ZjhkMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0
L1dlYlZpc2libGVQb3NpdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJD
b3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KQEAgLTE0OSw5ICsxNDksOCBAQCAtIChC
T09MKWRpcmVjdGlvbklzRG93bnN0cmVhbTooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGly
ZWN0aW9uCiAKIC0gKFdlYlZpc2libGVQb3NpdGlvbiAqKXBvc2l0aW9uQnlNb3ZpbmdJbkRpcmVj
dGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pZGlyZWN0aW9uIGFtb3VudDooVUludDMy
KWFtb3VudCB3aXRoQWZmaW5pdHlEb3duc3RyZWFtOihCT09MKWFmZmluaXR5RG93bnN0cmVhbQog
ewotICAgIFZpc2libGVQb3NpdGlvbiB2cCA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25dOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICB2cC5zZXRBZmZpbml0eShhZmZpbml0eURvd25z
dHJlYW0gPyBET1dOU1RSRUFNIDogVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUpOworICAgIGF1dG8g
dnAgPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uXTsKKyAgICB2cC5zZXRBZmZpbml0eShhZmZpbml0
eURvd25zdHJlYW0gPyBEb3duc3RyZWFtIDogVXBzdHJlYW0pOwogCiAgICAgc3dpdGNoIChkaXJl
Y3Rpb24pIHsKICAgICAgICAgY2FzZSBXZWJUZXh0QWRqdXN0bWVudEZvcndhcmQ6IHsKQEAgLTE5
NSw3ICsxOTQsNiBAQCAtIChXZWJWaXNpYmxlUG9zaXRpb24gKilwb3NpdGlvbkJ5TW92aW5nSW5E
aXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50RGlyZWN0aW9uKQogfQogCiAtIChXZWJWaXNpYmxl
UG9zaXRpb24gKilwb3NpdGlvbkJ5TW92aW5nSW5EaXJlY3Rpb246KFdlYlRleHRBZGp1c3RtZW50
RGlyZWN0aW9uKWRpcmVjdGlvbiBhbW91bnQ6KFVJbnQzMilhbW91bnQKLQogewogICAgIHJldHVy
biBbc2VsZiBwb3NpdGlvbkJ5TW92aW5nSW5EaXJlY3Rpb246ZGlyZWN0aW9uIGFtb3VudDphbW91
bnQgd2l0aEFmZmluaXR5RG93bnN0cmVhbTpZRVNdOwogfQpAQCAtNDk3LDI1ICs0OTUsMTkgQEAg
LSAoRE9NUmFuZ2UgKilyYW5nZU9mQ29udGVudHMKIAogLSAoV2ViVmlzaWJsZVBvc2l0aW9uICop
c3RhcnRQb3NpdGlvbgogewotICAgIC8vIFdoZW4gaW4gZWRpdGFibGUgY29udGVudCwgd2UgbmVl
ZCB0byBjYWxjdWxhdGUgdGhlIHN0YXJ0UG9zaXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRo
ZQotICAgIC8vIGVkaXRhYmxlIGFyZWEuCi0gICAgTm9kZSogbm9kZSA9IGNvcmUoc2VsZik7Ci0g
ICAgaWYgKG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHZwKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCAwKSwgVlBfREVGQVVMVF9B
RkZJTklUWSk7Ci0gICAgICAgIHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJs
ZVBvc2l0aW9uOnN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQodnApXTsKLSAgICB9CisgICAgLy8gV2hl
biBpbiBlZGl0YWJsZSBjb250ZW50LCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgc3RhcnRQb3Np
dGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGVkaXRhYmxlIGFyZWEuCisgICAgYXV0byYg
bm9kZSA9ICpjb3JlKHNlbGYpOworICAgIGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlKCkpCisg
ICAgICAgIHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOnN0
YXJ0T2ZFZGl0YWJsZUNvbnRlbnQoVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbigmbm9kZSwgMCkpKV07CiAgICAgcmV0dXJuIFtbc2VsZiByYW5nZU9mQ29udGVudHNd
IHN0YXJ0UG9zaXRpb25dOwogfQogCiAtIChXZWJWaXNpYmxlUG9zaXRpb24gKillbmRQb3NpdGlv
bgogewotICAgIC8vIFdoZW4gaW4gZWRpdGFibGUgY29udGVudCwgd2UgbmVlZCB0byBjYWxjdWxh
dGUgdGhlIGVuZFBvc2l0aW9uIGZyb20gdGhlIGVuZCBvZiB0aGUKLSAgICAvLyBlZGl0YWJsZSBh
cmVhLgotICAgIE5vZGUqIG5vZGUgPSBjb3JlKHNlbGYpOwotICAgIGlmIChub2RlLT5pc0NvbnRl
bnRFZGl0YWJsZSgpKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2cChjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24obm9kZSwgMCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgICAgICBy
ZXR1cm4gW1dlYlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjplbmRPZkVkaXRh
YmxlQ29udGVudCh2cCldOwotICAgIH0KKyAgICAvLyBXaGVuIGluIGVkaXRhYmxlIGNvbnRlbnQs
IHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBlbmRQb3NpdGlvbiBmcm9tIHRoZSBlbmQgb2YgdGhl
IGVkaXRhYmxlIGFyZWEuCisgICAgYXV0byYgbm9kZSA9ICpjb3JlKHNlbGYpOworICAgIGlmIChu
b2RlLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIHJldHVybiBbV2ViVmlzaWJsZVBvc2l0
aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOmVuZE9mRWRpdGFibGVDb250ZW50KFZpc2libGVQb3Np
dGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJm5vZGUsIDApKSldOwogICAgIHJldHVy
biBbW3NlbGYgcmFuZ2VPZkNvbnRlbnRzXSBlbmRQb3NpdGlvbl07CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5o
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmgKaW5kZXggNmYwOGZhYWE5NTM1YzRhYjk3NWYyN2I3Y2JmNDI1NzY5NWY4YjRlMi4uYjUxOWE2
MGZiZWNmNmY2MWY3MzViOWU1Nzg5YTE1MWI3ZTc2Y2EwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKQEAg
LTIxOSwyNSArMjE5LDI1IEBAIHByaXZhdGU6CiBpbmxpbmUgTlNTZWxlY3Rpb25BZmZpbml0eSBr
aXQoV2ViQ29yZTo6RUFmZmluaXR5IGFmZmluaXR5KQogewogICAgIHN3aXRjaCAoYWZmaW5pdHkp
IHsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpFQWZmaW5pdHk6OlVQU1RSRUFNOgotICAgICAgICAg
ICAgcmV0dXJuIE5TU2VsZWN0aW9uQWZmaW5pdHlVcHN0cmVhbTsKLSAgICAgICAgY2FzZSBXZWJD
b3JlOjpFQWZmaW5pdHk6OkRPV05TVFJFQU06Ci0gICAgICAgICAgICByZXR1cm4gTlNTZWxlY3Rp
b25BZmZpbml0eURvd25zdHJlYW07CisgICAgY2FzZSBXZWJDb3JlOjpVcHN0cmVhbToKKyAgICAg
ICAgcmV0dXJuIE5TU2VsZWN0aW9uQWZmaW5pdHlVcHN0cmVhbTsKKyAgICBjYXNlIFdlYkNvcmU6
OkRvd25zdHJlYW06CisgICAgICAgIHJldHVybiBOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVh
bTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIE5TU2VsZWN0
aW9uQWZmaW5pdHlVcHN0cmVhbTsKKyAgICByZXR1cm4gTlNTZWxlY3Rpb25BZmZpbml0eURvd25z
dHJlYW07CiB9CiAKIGlubGluZSBXZWJDb3JlOjpFQWZmaW5pdHkgY29yZShOU1NlbGVjdGlvbkFm
ZmluaXR5IGFmZmluaXR5KQogewogICAgIHN3aXRjaCAoYWZmaW5pdHkpIHsKICAgICBjYXNlIE5T
U2VsZWN0aW9uQWZmaW5pdHlVcHN0cmVhbToKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkVBZmZp
bml0eTo6VVBTVFJFQU07CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpVcHN0cmVhbTsKICAgICBj
YXNlIE5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtOgotICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6RUFmZmluaXR5OjpET1dOU1RSRUFNOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6RG93bnN0
cmVhbTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFdlYkNv
cmU6OkVBZmZpbml0eTo6VVBTVFJFQU07CisgICAgcmV0dXJuIFdlYkNvcmU6OkRvd25zdHJlYW07
CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggYThlYzUyZmI1OGViNGY4Yjg1N2NlNmZhNDhlZWNh
OTY5YmRiOTUxOC4uN2JjZDYzMjk5ZjJiMmU5ZmVjMDJhMTRhOTk0NGIwZWU4ZGUwNDM4NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC0xNTE1LDEy
ICsxNTE1LDIwIEBAIC0gKHVuaWNoYXIpY2hhcmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rp
b246KGludClhbW91bnQKIAogLSAodW5pY2hhciljaGFyYWN0ZXJCZWZvcmVDYXJldFNlbGVjdGlv
bgogewotICAgIHJldHVybiBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5jaGFyYWN0ZXJCZWZvcmVD
YXJldFNlbGVjdGlvbigpOworICAgIGF1dG8gZnJhbWUgPSBjb3JlKHNlbGYpOworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIGZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVM
YXlvdXQoKTsKKyAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpLmNoYXJhY3RlckJlZm9yZSgpOwogfQogCiAtICh1bmljaGFyKWNoYXJhY3RlckFm
dGVyQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICByZXR1cm4gY29yZShzZWxmKS0+c2VsZWN0aW9uKCku
Y2hhcmFjdGVyQWZ0ZXJDYXJldFNlbGVjdGlvbigpOworICAgIGF1dG8gZnJhbWUgPSBjb3JlKHNl
bGYpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworICAgIGZyYW1lLT5kb2N1
bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKyAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnZpc2libGVFbmQoKS5jaGFyYWN0ZXJBZnRlcigpOwogfQogCiAtIChET01SYW5n
ZSAqKXdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgpAQCAtMTU2MCwxNCArMTU2OCwx
MSBAQCAtIChOU0FycmF5ICopd29yZHNJbkN1cnJlbnRQYXJhZ3JhcGgKIAogLSAoQk9PTClzZWxl
Y3Rpb25BdERvY3VtZW50U3RhcnQKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3Jl
KHNlbGYpOwotICAgIAotICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNO
b25lKCkpCisgICAgYXV0byBmcmFtZSA9IGNvcmUoc2VsZik7CisgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIE5POwotCiAgICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgp
OwotICAgIAotICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uQXREb2N1bWVu
dFN0YXJ0KCk7CisgICAgcmV0dXJuIGlzU3RhcnRPZkRvY3VtZW50KGZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CiB9CiAKIC0gKEJPT0wpc2VsZWN0aW9uQXRT
ZW50ZW5jZVN0YXJ0CkBAIC0xNjA2LDE3ICsxNjExLDE2IEBAIC0gKERPTVJhbmdlICopcmFuZ2VC
eUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb246KGludClhbW91bnQKIAogLSAodm9pZClzZWxlY3RO
U1JhbmdlOihOU1JhbmdlKXJhbmdlIG9uRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQKIHsK
LSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotCi0gICAgV2ViQ29yZTo6
RG9jdW1lbnQqIGRvYyA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jKQorICAgIC8v
IEZJWE1FOiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBkbyBhIHVzZWZ1bCBvcGVyYXRpb246IHRyZWF0
aW5nIE5TUmFuZ2Ugb2Zmc2V0cyBhcyBjaGlsZCBub2RlIG9mZnNldHMgZG9lcyBub3QgbWFrZSBs
b2dpY2FsIHNlbnNlLiBBbHNvLCBpdCdzIGhpZ2hseSB1bmxpa2VseSBhbnlvbmUgY2FsbHMgaXQu
IFdlIHNob3VsZCBkZWxldGUgaXQuCisgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvKiBub2RlID0gY29yZShlbGVtZW50KTsKLSAgICBpZiAoIW5vZGUtPmlzQ29u
bmVjdGVkKCkpCisgICAgYXV0byBmcmFtZSA9IGNvcmUoc2VsZik7CisgICAgaWYgKCFmcmFtZSkK
ICAgICAgICAgcmV0dXJuOwotCi0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdFJhbmdlT25F
bGVtZW50KHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgsICpub2RlKTsKKyAgICBhdXRvJiBj
b3JlRWxlbWVudCA9ICpjb3JlKGVsZW1lbnQpOworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0g
cmFuZ2UubG9jYXRpb247CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gTlNNYXhSYW5nZShyYW5n
ZSk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihXZWJDb3JlOjpWaXNpYmxl
U2VsZWN0aW9uIHsgV2ViQ29yZTo6U2ltcGxlUmFuZ2UgeyB7IGNvcmVFbGVtZW50LCBzdGFydE9m
ZnNldCB9LCB7IGNvcmVFbGVtZW50LCBlbmRPZmZzZXQgfSB9IH0sIHsgV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OkZpcmVTZWxlY3RFdmVudCB9KTsKIH0KIAogLSAoRE9NUmFuZ2UgKiltYXJrZWRU
ZXh0RE9NUmFuZ2UKQEAgLTE5ODksMTMgKzE5OTMsMTMgQEAgLSAodm9pZClfc21hcnRJbnNlcnRG
b3JTdHJpbmc6KE5TU3RyaW5nICopcGFzdGVTdHJpbmcgcmVwbGFjaW5nUmFuZ2U6KERPTVJhbmdl
ICoKICAgICBhdXRvIHN0YXJ0ID0gV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uIHsgbWFrZUNvbnRh
aW5lck9mZnNldFBvc2l0aW9uKHJhbmdlLT5zdGFydCkgfTsKICAgICBhdXRvIGVuZCA9IFdlYkNv
cmU6OlZpc2libGVQb3NpdGlvbiB7IG1ha2VDb250YWluZXJPZmZzZXRQb3NpdGlvbihyYW5nZS0+
ZW5kKSB9OwogCi0gICAgYm9vbCBhZGRMZWFkaW5nU3BhY2UgPSBzdGFydC5kZWVwRXF1aXZhbGVu
dCgpLmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24oV2ViQ29yZTo6VlBfREVGQVVMVF9BRkZJTklU
WSwgdHJ1ZSkuaXNOdWxsKCkgJiYgIWlzU3RhcnRPZlBhcmFncmFwaChzdGFydCk7CisgICAgYm9v
bCBhZGRMZWFkaW5nU3BhY2UgPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpLmxlYWRpbmdXaGl0ZXNw
YWNlUG9zaXRpb24oV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpkZWZhdWx0QWZmaW5pdHksIHRy
dWUpLmlzTnVsbCgpICYmICFpc1N0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnQpOwogICAgIGlmIChhZGRM
ZWFkaW5nU3BhY2UpIHsKICAgICAgICAgaWYgKFVDaGFyIHByZXZpb3VzQ2hhcmFjdGVyID0gc3Rh
cnQucHJldmlvdXMoKS5jaGFyYWN0ZXJBZnRlcigpKQogICAgICAgICAgICAgYWRkTGVhZGluZ1Nw
YWNlID0gIVdlYkNvcmU6OmlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0KHByZXZpb3VzQ2hh
cmFjdGVyLCB0cnVlKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBhZGRUcmFpbGluZ1NwYWNlID0g
ZW5kLmRlZXBFcXVpdmFsZW50KCkudHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oV2ViQ29yZTo6
VlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSkuaXNOdWxsKCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgo
ZW5kKTsKKyAgICBib29sIGFkZFRyYWlsaW5nU3BhY2UgPSBlbmQuZGVlcEVxdWl2YWxlbnQoKS50
cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmRlZmF1
bHRBZmZpbml0eSwgdHJ1ZSkuaXNOdWxsKCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgoZW5kKTsKICAg
ICBpZiAoYWRkVHJhaWxpbmdTcGFjZSkgewogICAgICAgICBpZiAoVUNoYXIgZm9sbG93aW5nQ2hh
cmFjdGVyID0gZW5kLmNoYXJhY3RlckFmdGVyKCkpCiAgICAgICAgICAgICBhZGRUcmFpbGluZ1Nw
YWNlID0gIVdlYkNvcmU6OmlzQ2hhcmFjdGVyU21hcnRSZXBsYWNlRXhlbXB0KGZvbGxvd2luZ0No
YXJhY3RlciwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQWNj
ZXNzaWJsZVRleHRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vzc2libGVU
ZXh0SW1wbC5jcHAKaW5kZXggNTY5NzY3YTExZTFlZGU1ODQ2MTA5YWJkMTBkN2IxOGE5OWZlNjcz
Ni4uNWNlOGE2MTcxOWU2ZTE3OTlhOGU4YzA4YTIwZjZkMzhlOTVmNmYwNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3BwCkBAIC03NTUsNyArNzU1
LDYgQEAgSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6aW5pdGlhbENoZWNrKCkKIAogYm9vbCBBY2Nl
c3NpYmxlVGV4dDo6aXNJblJhbmdlKFZpc2libGVQb3NpdGlvbiYgY3VycmVudCwgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UmIHdvcmRSYW5nZSkKIHsKLSAgICBBU1NFUlQod29yZFJhbmdlLnN0YXJ0Lmlz
Tm90TnVsbCgpKTsKLSAgICBBU1NFUlQod29yZFJhbmdlLmVuZC5pc05vdE51bGwoKSk7Ci0gICAg
cmV0dXJuIGNvbXBhcmVQb3NpdGlvbnMoY3VycmVudC5kZWVwRXF1aXZhbGVudCgpLCB3b3JkUmFu
Z2Uuc3RhcnQpID49IDAgJiYgY29tcGFyZVBvc2l0aW9ucyhjdXJyZW50LmRlZXBFcXVpdmFsZW50
KCksIHdvcmRSYW5nZS5lbmQpIDw9IDA7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZSh3b3JkUmFuZ2UpOworICAgIHJldHVybiByYW5nZSAmJiBpc1BvaW50SW5SYW5nZSgqcmFuZ2Us
IG1ha2VCb3VuZGFyeVBvaW50KGN1cnJlbnQpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407705</attachid>
            <date>2020-09-01 13:00:41 -0700</date>
            <delta_ts>2020-09-02 09:50:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215982-20200901130041.patch</filename>
            <type>text/plain</type>
            <size>138251</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzJiYzAxMWQ3MWUxZGI4
ODAyNDBiN2JlNjkzMjI0MTQxNjFmYzc0Ny4uNzRhMDg0ZTQ2MGI4NWZkMGRkYjc0YWEwNDI1MjFh
YTZkZDU0ZjZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNSBAQAorMjAyMC0wOS0wMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGNvbXBhcmVQb3Np
dGlvbnMgYW5kIG1ha2UgVmlzaWJsZVBvc2l0aW9uIGltcHJvdmVtZW50cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTgyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bG9jYWxDYXJl
dFJlY3RGb3JDaGFyYWN0ZXJPZmZzZXQpOiBVcGRhdGVkIGZvcgorICAgICAgICBpbmxpbmVCb3hB
bmRPZmZzZXQuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgIChnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0
KTogVXNlIHN0ZDo6bWF4L21pbiBpbnN0ZWFkIG9mIGNvbXBhcmVQb3NpdGlvbnMuCisgICAgICAg
IChpc1doaXRlU3BhY2VCZXR3ZWVuU2VudGVuY2VzKTogVXNlIGlzUG9pbnRJblJhbmdlIGluc3Rl
YWQgb2YgY29tcGFyZVBvc2l0aW9ucy4KKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpb24gY29u
c3QpOiBVcGRhdGVkIGZvcgorICAgICAgICBpbmxpbmVCb3hBbmRPZmZzZXQuCisgICAgICAgIChX
ZWJDb3JlOjpQb3NpdGlvbjo6aW5saW5lQm94QW5kT2Zmc2V0IGNvbnN0KTogUmVuYW1lZCBmcm9t
CisgICAgICAgIGdldElubGluZUJveEFuZE9mZnNldCBhbmQgY2hhbmdlZCB0byB1c2UgYSByZXR1
cm4gdmFsdWUgaW5zdGVhZCBvZiBvdXQgYXJndW1lbnRzLgorCisgICAgICAgICogZG9tL1Bvc2l0
aW9uLmg6IEFkZGVkIElubGluZUJveEFuZE9mZnNldCBzdHJ1Y3R1cmUgZm9yIHRoZSBpbmxpbmVC
b3hBbmRPZmZzZXQKKyAgICAgICAgZnVuY3Rpb24uIFVwZGF0ZSBmb3IgcmVuYW1lIG9mIEVBZmZp
bml0eSB0byBBZmZpbml0eS4gQ2hhbmdlZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQKKyAgICAgICAg
dG8gaW5saW5lQm94QW5kT2Zmc2V0IGFuZCB1c2UgYSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiBv
dXQgYXJndW1lbnRzLiBDaGFuZ2UKKyAgICAgICAgPCwgPiwgPD0sIGFuZCA+PSB0byBjYWxsIGRv
Y3VtZW50T3JkZXIuCisKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjp1cGRhdGVTdGFydEVuZCk6IFVz
ZSA8PSBpbnN0ZWFkIG9mIGNvbXBhcmVQb3NpdGlvbnMuCisgICAgICAgIFVzZSBWaXNpYmxlUG9z
aXRpb246OmRlZmF1bHRBZmZpbml0eSBpbnN0ZWFkIG9mIFZQX0RFRkFVTFRfQUZGSU5JVFkuCisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKTogVXNl
IDwgaW5zdGVhZCBvZiBjb21wYXJlUG9zaXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UpOiBEaXR0by4gQWxzbyBh
ZGRlZAorICAgICAgICBhIG1pc3NpbmcgbnVsbCBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKTogVXNl
IDw9IGFuZCA8IGluc3RlYWQKKyAgICAgICAgb2YgY29tcGFyZVBvc2l0aW9ucy4KKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6IFVzZSA8PSBp
bnN0ZWFkIG9mIGNvbXBhcmVQb3NpdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6bm9kZUZ1bGx5U2VsZWN0ZWQgY29uc3QpOiBVc2UgPj0gYW5kIDw9IGluc3RlYWQg
b2YKKyAgICAgICAgY29tcGFyZVBvc2l0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjpub2RlRnVsbHlVbnNlbGVjdGVkIGNvbnN0KTogVXNlIDwgYW5kID4gaW5zdGVh
ZCBvZgorICAgICAgICBjb21wYXJlUG9zaXRpb25zLgorCisgICAgICAgICogZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHQpOiBVc2UgPCBpbnN0ZWFkIG9mCisgICAgICAg
IGNvbXBhcmVQb3NpdGlvbnMsIGluIGEgd2F5IHRoYXQgaGFuZGxlcyB0aGUgbnVsbCBjYXNlIGNv
cnJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJ
bnNpZ25pZmljYW50VGV4dERvd25zdHJlYW0pOiBSZW1vdmVkCisgICAgICAgIHVubmVjZXNzYXJ5
IGV4cGxpY2l0IHVzZSBvZiBWUF9ERUZBVUxUX0FGRklOSVRZLgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhDb250ZW50c1RvTmV3QmxvY2tJZk5l
Y2Vzc2FyeSk6CisgICAgICAgIERpdHRvLiBBbHNvIHVzZSA8IGluc3RlYWQgb2YgY29tcGFyZVBv
c2l0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpjbG9uZVBh
cmFncmFwaFVuZGVyTmV3RWxlbWVudCk6IFVzZSA8PQorICAgICAgICBpbnN0ZWFkIG9mIGNvbXBh
cmVQb3NpdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92
ZVBhcmFncmFwaHMpOiBVc2UgPD0gYW5kID49IGluc3RlYWQgb2YKKyAgICAgICAgY29tcGFyZVBv
c2l0aW9ucy4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjppbml0aWFsaXplU3Rh
cnRFbmQpOiBVc2UgPj0gaW5zdGVhZCBvZgorICAgICAgICBjb21wYXJlUG9zaXRpb25zCisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzbWFydERlbGV0ZVBhcmFncmFw
aFNwYWNlcnMpOgorICAgICAgICBVc2UgVmlzaWJsZVBvc2l0aW9uOjpkZWZhdWx0QWZmaW5pdHkg
aW5zdGVhZCBvZiBWUF9ERUZBVUxUX0FGRklOSVRZLCBhbmQKKyAgICAgICAgaW4gb3RoZXIgY2Fz
ZXMgcmVtb3ZlZCB1bm5lY2Vzc2FyeSBleHBsaWNpdCB1c2Ugb2YgVlBfREVGQVVMVF9BRkZJTklU
WS4KKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmluaXRpYWxpemVQ
b3NpdGlvbkRhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUpOiBVc2UgPj0gaW5zdGVhZAorICAgICAgICBvZiBj
b21wYXJlUG9zaXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6bWVyZ2VQYXJhZ3JhcGhzKTogVXNlID49IGluc3RlYWQgb2YKKyAgICAgICAgY29tcGFyZVBv
c2l0aW9ucywgYWxzbyB1c2UgaXNPcnBoYW4gYW5kIG1lcmdlIHR3byBjaGVja3MgaW50byBvbmUu
CisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cGFyZVBvc2l0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaXJzdEVkaXRhYmxl
UG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KTogVXNlIDwgaW5zdGVhZCBvZgorICAgICAgICBj
b21wYXJlUG9zaXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6bGFzdEVkaXRhYmxlUG9zaXRpb25C
ZWZvcmVQb3NpdGlvbkluUm9vdCk6IFVzZSA+IGluc3RlYWQgb2YKKyAgICAgICAgY29tcGFyZVBv
c2l0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4p
OiBVc2UgPCBpbnN0ZWFkIG9mIGNvbXBhcmVQb3NpdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjps
b2NhbENhcmV0UmVjdEluUmVuZGVyZXJGb3JDYXJldFBhaW50aW5nKTogVXBkYXRlIGZvcgorICAg
ICAgICBsb2NhbENhcmV0UmVjdCBmdW5jdGlvbiB0aGF0IG5vIGxvbmdlciB1c2VzIGFuIG91dCBh
cmd1bWVudC4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOiBEZWxldGVkIGNvbXBhcmVQ
b3NpdGlvbnMuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UpOiBVc2UgPj0gaW5zdGVhZCBvZgor
ICAgICAgICBjb21wYXJlUG9zaXRpb25zLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9u
QnlNb3VzZUlmRGlmZmVyZW50KTogQXNzaWduCisgICAgICAgIGFuIGVtcHR5IHZhbHVlIHJhdGhl
ciB0aGFuIHVzaW5nIGEgY2xlYXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6ZGlyZWN0aW9uT2ZTZWxlY3Rpb24pOiBVcGRhdGVkIGZvcgorICAgICAgICBpbmxp
bmVCb3hBbmRPZmZzZXQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Y29udGFp
bnMgY29uc3QpOiBVc2UgaXNQb2ludEluUmFuZ2UgaW5zdGVhZAorICAgICAgICBvZiBjb21wYXJl
UG9zaXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdEZyYW1l
RWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKToKKyAgICAgICAgVXNlIFVwc3RyZWFtIGlu
c3RlYWQgb2YgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUuCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6ZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgUmVtb3ZlZCB1bm5lY2Vzc2FyeSBleHBsaWNpdCB1c2Ugb2YgVlBfREVGQVVMVF9B
RkZJTklUWS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpjaGFyYWN0ZXJJblJl
bGF0aW9uVG9DYXJldFNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OmNoYXJhY3RlckJlZm9yZUNhcmV0U2VsZWN0aW9uIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgVGhlcmUgaXMgb25seSBvbmUgY2FsbGVyLCBhbmQgd2UgY2FuIG1vdmUg
dGhlIGFsZ29yaXRobSwgbm93IGEgb25lLWxpbmVyLCB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpjaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uIGNvbnN0KTogRGVs
ZXRlZC4gRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9u
QXREb2N1bWVudFN0YXJ0IGNvbnN0KTogRGVsZXRlZC4gRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRXb3JkU3RhcnQgY29uc3QpOiBVc2UgdmlzaWJs
ZVN0YXJ0CisgICAgICAgIGluYXRlYWQgb2YgY3JlYXRpbmcgYSBuZXcgcG9zaXRpb24gd2l0aCBW
UF9ERUZBVUxUX0FGRklOSVRZLiBBbHNvIHN0cmVhbWxpbmVkCisgICAgICAgIHRoZSBmdW5jdGlv
biBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RSYW5nZU9u
RWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6d29y
ZFNlbGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbik6CisgICAgICAgIFJlbW92ZWQgdW5u
ZWNlc3NhcnkgZXhwbGljaXQgdXNlIG9mIFZQX0RFRkFVTFRfQUZGSU5JVFkuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0IGNvbnN0KTog
RGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFVwZGF0ZWQgZm9y
IGFib3ZlLgorCisgICAgICAgICogZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1h
bmQ6OmNhbGN1bGF0ZVN0eWxlQmVmb3JlSW5zZXJ0aW9uKToKKyAgICAgICAgUmVtb3ZlZCB1bm5l
Y2Vzc2FyeSBleHBsaWNpdCB1c2Ugb2YgVlBfREVGQVVMVF9BRkZJTklUWS4gQWxzbyB0aWdodGVu
ZWQKKyAgICAgICAgdXAgdGhlIGNvZGUgYSBiaXQgaW5jbHVkaW5nIHJlbW92aW5nIGFuIHVubmVj
ZXNzYXJ5IGFzc2VydGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFBhcmFncmFwaFNlcGFy
YXRvckNvbW1hbmQ6OmRvQXBwbHkpOiBVc2UgPD0gaW5zdGVhZCBvZgorICAgICAgICBjb21wYXJl
UG9zaXRpb25zLgorCisgICAgICAgICogZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246OlJlbmRlcmVkUG9zaXRpb24pOiBIYXZl
IHRoZSBWaXNpYmxlUG9zaXRpb24KKyAgICAgICAgY29uc3RydWN0b3IgY2FsbCB0aHJvdWdoIHRv
IHRoZSBQb3NpdGlvbi9BZmZpbml0eSBjb25zdHJ1Y3RvciBpbnN0ZWFkCisgICAgICAgIG9mIHJl
cGVhdGluZyB0aGUgbG9naWMgdHdpY2UuIFVwZGF0ZSBmb3IgaW5saW5lQm94QW5kT2Zmc2V0LiBJ
bml0aWFsaXplCisgICAgICAgIG1fb2Zmc2V0IGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIHNvIHdl
IGRvbid0IGhhdmUgdG8gZG8gaXQgaGVyZS4KKworICAgICAgICAqIGVkaXRpbmcvUmVuZGVyZWRQ
b3NpdGlvbi5oOiBJbml0aWFsaXplIGFsbCBkYXRhIG1lbWJlcnMuIFNvcnRlZCBhCisgICAgICAg
IGZ1bmN0aW9uIG1lbWJlciBhYm92ZSB0aGUgZGF0YSBtZW1iZXJzLgorCisgICAgICAgICogZWRp
dGluZy9UZXh0QWZmaW5pdHkuaDogUmVuYW1lZCBmb3IgbW9kZXJuIFdlYktpdCBjb2Rpbmcgc3R5
bGUsCisgICAgICAgIGVsaW1pbmF0aW5nIHRoZSB1c2Ugb2YgYWxsIGNhcHMgYW5kIHRoZSAiRSIg
cHJlZml4IG9uIEVBZmZpbml0eS4KKyAgICAgICAgRm9yIG5vdywgb2xkIG5hbWVzIGFyZSBhbHNv
IHN0aWxsIHN1cHBvcnRlZC4KKworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6VmlzaWJsZVBvc2l0aW9uKTog
VXNlIG1lbWJlciBjb25zdHJ1Y3Rpb24KKyAgICAgICAgcmF0aGVyIHRoYW4gYXNzaWdubWVudC4g
UmV3cm90ZSB0aGUgY29kZSB0aGF0IHN0b3JlcyB1cHN0cmVhbSBhZmZpbml0eQorICAgICAgICBv
bmx5IHdoZW4gYXBwcm9wcmlhdGUgdG8gYmUgbW9yZSBzdHJhaWdodGZvcndhcmQuIFRoZSBvbGQg
Y29kZSB3b3VsZAorICAgICAgICBzZXQgdG8gdXBzdHJlYW0gYW5kIHRoZW4gY2hhbmdlIGJhY2su
IFRoZSBuZXcgY29kZSBzZXRzIHRvIHVwc3RyZWFtCisgICAgICAgIG9ubHkgYWZ0ZXIgdGVzdGlu
ZyB0aGF0IGl0IHdvcmtlZC4gU2hvdWxkIGFsc28gYmUgZmFzdGVyIHNpbmNlIGl0CisgICAgICAg
IHNhdmVzIG9uZSBjYWxsIHRvIGNhbm9uaWNhbFBvc2l0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
VmlzaWJsZVBvc2l0aW9uOjppbml0KTogRGVsZXRlZC4gUm9sbGVkIGludG8gdGhlIGNvbnN0cnVj
dG9yLgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpsZWZ0VmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZSBjb25zdCk6CisgICAgICAgIFVwZGF0ZSBmb3IgaW5saW5lQm94QW5kT2Zm
c2V0LgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlz
dGluY3RDYW5kaWRhdGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQ
b3NpdGlvbjo6bG9jYWxDYXJldFJlY3QgY29uc3QpOiBSZXR1cm4gdGhlIHJlbmRlcmVyIGFzCisg
ICAgICAgIHBhcnQgb2YgdGhlIHJldHVybiB2YWx1ZSByYXRoZXIgdGhhbiBhbiBvdXQgYXJndW1l
bnQuIFVwZGF0ZSBmb3IKKyAgICAgICAgaW5saW5lQm94QW5kT2Zmc2V0IGFuZCBzdHJlYW1saW5l
IGxvZ2ljIGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjphYnNvbHV0
ZVNlbGVjdGlvbkJvdW5kc0ZvckxpbmUgY29uc3QpOgorICAgICAgICBVcGRhdGUgZm9yIGlubGlu
ZUJveEFuZE9mZnNldCBhbmQgcmVtb3ZlIHVubmVkZWQgc3BlY2lhbCBjYXNlcyBhbHJlYWR5Cisg
ICAgICAgIGNvdmVyZWQgYnkgdGhhdCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlZpc2li
bGVQb3NpdGlvbjo6bGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9u
IGNvbnN0KToKKyAgICAgICAgVXBkYXRlZCBmb3IgbG9jYWxDYXJldFJlY3QuCisgICAgICAgIChX
ZWJDb3JlOjpkb2N1bWVudE9yZGVyKTogQWRkZWQuCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5oOiBBZGRlZCBWaXNpYmxlUG9zaXRpb246OmRlZmF1bHRBZmZpbml0eQorICAg
ICAgICB0byByZXBsYWNlIFZQX0RFRkFVTFRfQUZGSU5JVFkuIERlbGV0ZWQgVlBfVVBTVFJFQU1f
SUZfUE9TU0lCTEU7IGNhbGxlcnMKKyAgICAgICAgd2lsbCBqdXN0IHVzZSBVcHN0cmVhbS4gRGVs
ZXRlZCB0aGUgY2xlYXIgZnVuY3Rpb24uIFJlbmFtZWQKKyAgICAgICAgZ2V0SW5saW5lQm94QW5k
T2Zmc2V0IHRvIGlubGluZUJveEFuZE9mZnNldCBhbmQgdXNlIGEgcmV0dXJuIHZhbHVlCisgICAg
ICAgIGluc3RlYWQgb2Ygb3V0IGFyZ3VtZW50cy4gVXNlIGEgcmV0dXJuIHZhbHVlIGluc3RlYWQg
b2Ygb3V0CisgICAgICAgIGFyZ3VtZW50cyBmb3IgbG9jYWxDYXJldFJlY3QuIE1hZGUgY2Fub25p
Y2FsUG9zaXRpb24gYSBzdGF0aWMgbWVtYmVyCisgICAgICAgIGZ1bmN0aW9uLiBVc2UgZG9jdW1l
bnRPcmRlciB0byBpbXBsZW1lbnQgPCwgPiwgPD0sIGFuZCA+PS4KKworICAgICAgICAqIGVkaXRp
bmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0
aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSBjb25zdCk6IFVzZSA+IGluc3RlYWQKKyAgICAgICAgb2Yg
Y29tcGFyZVBvc2l0aW9ucy4gQWxzbyBkbyB0aGUgY29tcGFyaXNvbiBhZnRlciBjYWxsaW5nCisg
ICAgICAgIHBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCBpbnN0ZWFkIG9mIGJlZm9yZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OnNldEJhc2VBbmRFeHRlbnRUb0RlZXBFcXVp
dmFsZW50cyk6CisgICAgICAgIFVzZSA8PSBpbnN0ZWFkIG9mIGNvbXBhcmVQb3NpdGlvbnMuCisg
ICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpzZXRXaXRob3V0VmFsaWRhdGlvbik6
IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dmlzdWFsV29yZFBvc2l0aW9uKTogVXBkYXRlIGZvciBpbmxpbmVCb3hBbmRPZmZz
ZXQuCisgICAgICAgIChXZWJDb3JlOjpuZXh0Qm91bmRhcnkpOiBVc2UgVXBzdHJlYW0gaW5zdGFk
IG9mIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFLgorICAgICAgICAoV2ViQ29yZTo6ZW5kUG9zaXRp
b25Gb3JMaW5lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpwcmV2aW91c0xpbmVQb3NpdGlv
bik6IFVwZGF0ZSBmb3IgaW5saW5lQm94QW5kT2Zmc2V0LgorICAgICAgICAoV2ViQ29yZTo6bmV4
dExpbmVQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6YXRCb3VuZGFyeU9mR3Jh
bnVsYXJpdHkpOiBVc2UgVXBzdHJlYW0gaW5zdGVhZCBvZgorICAgICAgICBWUF9VUFNUUkVBTV9J
Rl9QT1NTSUJMRS4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBoZXJlLAorICAgICAgICBi
ZWNhdXNlIHNldEFmZmluaXR5IGRvZXMgbm90IGFjdHVhbGx5IGNoZWNrIGlmIHVwc3RyZWFtIGlz
IHBvc3NpYmxlLAorICAgICAgICBzbyBpdCBpcyBzZXR0aW5nIHRvIFVwc3RyZWFtIHVuY29uZGl0
aW9uYWxseS4gVGhlIG9sZCBuYW1lIHdhcworICAgICAgICBtaXNsZWFkaW5nIGhlcmUuCisgICAg
ICAgIChXZWJDb3JlOjpuZXh0TGluZUJvdW5kYXJ5SW5EaXJlY3Rpb24pOiBEaXR0by4gU2FtZSBt
aXNsZWFkaW5nIHVzZS4KKworICAgICAgICAqIGVkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5t
bToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQpOiBVc2UgPiBpbnN0ZWFkIG9mIGNv
bXBhcmVQb3NpdGlvbnMuCisKKyAgICAgICAgKiBlZGl0aW5nL2lvcy9FZGl0b3JJT1MubW06Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50KTogUmVtb3Zl
ZCB1bm5lY2Vzc2FyeQorICAgICAgICBleHBsaWNpdCB1c2Ugb2YgVlBfREVGQVVMVF9BRkZJTklU
WS4KKworICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlcyk6IFVzZSA8PQorICAgICAgICBp
bnN0ZWFkIG9mIGNvbXBhcmVQb3NpdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVQ
cmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZUludGVybmFsKTogVXNlID09CisgICAgICAgIGFuZCA8
IGluc3RlYWQgb2YgY29tcGFyZVBvc2l0aW9ucy4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VQcmVz
c0V2ZW50U2luZ2xlQ2xpY2spOiBVc2UgPAorICAgICAgICBpbnN0ZWFkIG9mIGNvbXBhcmVQb3Np
dGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnVwZGF0ZVNlbGVjdGlvbkZv
ck1vdXNlRHJhZyk6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5l
Qm94ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94
KTogVXNlIFZpc2libGVQb3NpdGlvbjo6ZGVmYXVsdEFmZmluaXR5CisgICAgICAgIGluc3RlYWQg
b2YgVlBfREVGQVVMVF9BRkZJTklUWSBhbmQgVXBzdHJlYW0gaW5zdGVhZCBvZiBWUF9VUFNUUkVB
TV9JRl9QT1NTSUJMRS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OnBv
c2l0aW9uRm9yUG9pbnQgY29uc3QpOiBESXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5l
VGV4dDo6cG9zaXRpb25Gb3JQb2ludCk6IERpdHRvLgorCiAyMDIwLTA5LTAxICBSb2IgQnVpcyAg
PHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgQ29udmVydCBydW50aW1lIGZsYWcgdG8gc2V0
dGluZyBmb3IgbGF6eSBpbWFnZSBsb2FkaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDVmZDMwOGYzNThmYzI4MTdk
YjBlMzcxM2E1ZTNiYjlmYzlkYzhhMmUuLjlhZDBlOThhMjlmZjc3NDk4NWNhOWYxMDU2NmIzYTc5
OTZlMDZkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDktMDEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBjb21wYXJlUG9zaXRpb25z
IGFuZCBtYWtlIFZpc2libGVQb3NpdGlvbiBpbXByb3ZlbWVudHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTk4MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpyYW5nZUZvclBvaW50SW5Sb290Vmlld0Nv
b3JkaW5hdGVzKTogVXNlIDw9IGluc3RlYWQgb2YKKyAgICAgICAgY29tcGFyZVBvc2l0aW9ucy4K
KwogMjAyMC0wOS0wMSAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIENv
bnZlcnQgcnVudGltZSBmbGFnIHRvIHNldHRpbmcgZm9yIGxhenkgaW1hZ2UgbG9hZGluZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dExlZ2FjeS9pb3MvQ2hhbmdlTG9nCmluZGV4IGVjY2NjMWViYTlhMzE1MmNiOTg5NGRlZjdlNDcy
Mjg2NTljM2VhOGMuLjc5OTM4ZDQ5ZmNhYTViNDY0YjI0ZDk1NDQwY2U4Yzc0MjZlN2Q3YWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMC0wOS0wMSAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGNvbXBhcmVQ
b3NpdGlvbnMgYW5kIG1ha2UgVmlzaWJsZVBvc2l0aW9uIGltcHJvdmVtZW50cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTgyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJWaXNpYmxlUG9zaXRpb24ubW06CisgICAgICAgICgtW1dlYlZpc2libGVQb3NpdGlvbiBwb3Np
dGlvbkJ5TW92aW5nSW5EaXJlY3Rpb246YW1vdW50OndpdGhBZmZpbml0eURvd25zdHJlYW06XSk6
CisgICAgICAgIFVzZSBVcHN0cmVhbSBpbnN0ZWFkIG9mIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxF
LiBTaW5jZSB3ZSB3ZXJlIGNhbGxpbmcKKyAgICAgICAgc2V0QWZmaW5pdHkgaGVyZSwgVlBfVVBT
VFJFQU1fSUZfUE9TU0lCTEUgd2FzIG1pc2xlYWRpbmcgc2luY2UgdGhhdCBmdW5jdGlvbgorICAg
ICAgICBkb2VzIG5vdCBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGFmZmluaXR5LgorICAgICAg
ICAoLVtET01Ob2RlIHN0YXJ0UG9zaXRpb25dKTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBleHBsaWNp
dCBWUF9ERUZBVUxUX0FGRklOSVRZLgorICAgICAgICAoLVtET01Ob2RlIGVuZFBvc2l0aW9uXSk6
IERpdHRvLgorCiAyMDIwLTA4LTE3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBDcmVhdGUgZG9jdW1lbnRPcmRlciBmdW5jdGlvbiwgc3RhcnQgcmVmYWN0b3Jpbmcg
dG8gdXNlIGl0IGluc3RlYWQgb2YgUmFuZ2U6OmNvbXBhcmUgZnVuY3Rpb25zCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKaW5kZXggY2Q1NWQyZGEwYWVhNmIzYWFlNDBlM2Y1Mzc4ODU2Mzk5ZTlh
NTYzZS4uZjJhY2YwNzhkMzFmMTA1OTM0NTdiNjA5OWI5YzRiN2JlOTM5Yzk1ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIwLTA5LTAxICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgY29tcGFyZVBvc2l0aW9u
cyBhbmQgbWFrZSBWaXNpYmxlUG9zaXRpb24gaW1wcm92ZW1lbnRzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5ODIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5oOgorICAgICAgICAoa2l0KTogVXBkYXRlIGZvciBjaGFuZ2VzIHRvIEFmZmluaXR5
IGVudW1lcmF0aW9uLgorICAgICAgICAoY29yZSk6IERpdHRvLgorICAgICAgICAqIFdlYlZpZXcv
V2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIGNoYXJhY3RlckJlZm9yZUNhcmV0U2Vs
ZWN0aW9uXSk6IE1vdmVkIHRoZSBjb2RlIGZyb20KKyAgICAgICAgRnJhbWVTZWxlY3Rpb246OmNo
YXJhY3RlckJlZm9yZUNhcmV0U2VsZWN0aW9uIGJlY2F1c2UgaXQncyBhIG9uZS1saW5lciBub3cu
CisgICAgICAgIEFkZGVkIGEgY2FsbCB0byB1cGRhdGVMYXlvdXQgYmVjYXVzZSBpdCdzIHVuY2xl
YXIgd2h5IHdlIGNvdWxkIGRvIHdpdGhvdXQgaXQgYmVmb3JlLgorICAgICAgICBBbHNvIGFkZGVk
IGEgbnVsbCBjaGVjayBmb3IgZnJhbWUsIHNpbmNlIHRoZXJlJ3Mgbm8gZ3VhcmFudGVlIGl0J3Mg
bm90IG51bGwuCisgICAgICAgICgtW1dlYkZyYW1lIGNoYXJhY3RlckFmdGVyQ2FyZXRTZWxlY3Rp
b25dKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVjdGlvbkF0RG9jdW1lbnRTdGFy
dF0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0TlNSYW5nZTpvbkVsZW1lbnQ6
XSk6IERpdHRvLCBidXQgYWxzbyBhZGRlZCBhIGNvbW1lbnQgYmVjYXVzZQorICAgICAgICB0aGlz
IG1ldGhvZCBpcyBub3QgdXNlZnVsIGFuZCBhbG1vc3QgY2VydGFpbmx5IG5vdCB1c2VkLgorICAg
ICAgICAoLVtXZWJGcmFtZSBfc21hcnRJbnNlcnRGb3JTdHJpbmc6cmVwbGFjaW5nUmFuZ2U6YmVm
b3JlU3RyaW5nOmFmdGVyU3RyaW5nOl0pOgorICAgICAgICBVc2UgVmlzaWJsZVBvc2l0aW9uOjpk
ZWZhdWx0QWZmaW5pdHkgaW5zdGVhZCBvZiBWUF9ERUZBVUxUX0FGRklOSVRZLgorCiAyMDIwLTA4
LTMxICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBNYW55IHNldHRp
bmdzIGluIFJ1bnRpbWVFbmFibGVkU2V0dGluZ3Mgc2hvdWxkIGF1dG9nZW5lcmF0ZWQgU2V0dGlu
Z3M6IFBhcnQgMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGVkMTY2NjcwNGM4MWYw
YjNhNTUzOTJhODU0OGExZjJhMjRjNTMwMGQuLmZjNjYyNWY1MTBmNTNkNGYxMjM4ZTY0MWYzOWQ5
OTQwOWUzZTczNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAyMC0wOS0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIGNvbXBhcmVQb3NpdGlvbnMgYW5kIG1ha2UgVmlzaWJsZVBvc2l0aW9uIGltcHJvdmVt
ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1
OTgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBB
Y2Nlc3NpYmxlVGV4dEltcGwuY3BwOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OmlzSW5SYW5n
ZSk6IFVzZSBpc1BvaW50SW5SYW5nZSBpbnN0ZWFkIG9mCisgICAgICAgIGNvbXBhcmVQb3NpdGlv
bnMuCisKIDIwMjAtMDgtMzEgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAg
ICAgIE1hbnkgc2V0dGluZ3MgaW4gUnVudGltZUVuYWJsZWRTZXR0aW5ncyBzaG91bGQgYXV0b2dl
bmVyYXRlZCBTZXR0aW5nczogUGFydCAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAxZTEwNTlkZTFlMjAxNWM1MzQwZDIzMTViYmE1NjA0
OWIzMDEwN2Q0Li5lYWE1MzZhNWVlMzlkODlmZjMyM2Y5NzRhYzY2MjkzNTRjNjdkZjY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTI4
NzQsMjcgKzI4NzQsMjIgQEAgTGF5b3V0UmVjdCBBWE9iamVjdENhY2hlOjpsb2NhbENhcmV0UmVj
dEZvckNoYXJhY3Rlck9mZnNldChSZW5kZXJPYmplY3QqJiByZW5kZXIKICAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKICAgICB9CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IGNoYXJhY3Rlck9mZnNl
dC5ub2RlOwotICAgIAotICAgIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICByZW5k
ZXJlciA9IGNoYXJhY3Rlck9mZnNldC5ub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVy
ZXIpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAgICAgCi0gICAgSW5saW5lQm94KiBp
bmxpbmVCb3ggPSBudWxscHRyOwotICAgIGludCBjYXJldE9mZnNldDsKICAgICAvLyBVc2UgYSBj
b2xsYXBzZWQgcmFuZ2UgdG8gZ2V0IHRoZSBwb3NpdGlvbi4KICAgICBhdXRvIHJhbmdlID0gcmFu
Z2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVy
T2Zmc2V0KTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAg
IAotICAgIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpLmdldElubGlu
ZUJveEFuZE9mZnNldChET1dOU1RSRUFNLCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKLSAgICAK
KworICAgIGF1dG8gW2lubGluZUJveCwgY2FyZXRPZmZzZXRdID0gY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKHJhbmdlLT5zdGFydCkuaW5saW5lQm94QW5kT2Zmc2V0KERvd25zdHJlYW0pOwog
ICAgIGlmIChpbmxpbmVCb3gpCiAgICAgICAgIHJlbmRlcmVyID0gJmlubGluZUJveC0+cmVuZGVy
ZXIoKTsKLSAgICAKKwogICAgIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKSAmJiBk
b3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKS0+aW5saW5lQm94V3JhcHBlcigpICE9
IGlubGluZUJveCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAKKwogICAgIHJldHVy
biByZW5kZXJlci0+bG9jYWxDYXJldFJlY3QoaW5saW5lQm94LCBjYXJldE9mZnNldCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAppbmRleCBkNzA2YjI3NWQxYmI2ZWQz
MDQxNGJhOGE4MTA4ZWY1NzYzODNjYWNjLi44MjBiNWExOWQzMjQ2ZWFjNDkwMzMyYzM1NTAwYzEx
ZjhhOTIxZjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCkBAIC0zOTks
MTMgKzM5OSw4IEBAIHN0YXRpYyB2b2lkIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsCiAgICAgUG9zaXRpb24gbGFzdFZh
bGlkUG9zaXRpb24gPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUtPmxhc3REZXNjZW5k
YW50KCkpOwogCiAgICAgLy8gRmluZCB0aGUgcHJvcGVyIHJhbmdlIGZvciB0aGUgc2VsZWN0aW9u
IHRoYXQgZmFsbHMgaW5zaWRlIHRoZSBvYmplY3QuCi0gICAgUG9zaXRpb24gbm9kZVJhbmdlU3Rh
cnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKLSAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhub2RlUmFu
Z2VTdGFydCwgZmlyc3RWYWxpZFBvc2l0aW9uKSA8IDApCi0gICAgICAgIG5vZGVSYW5nZVN0YXJ0
ID0gZmlyc3RWYWxpZFBvc2l0aW9uOwotCi0gICAgUG9zaXRpb24gbm9kZVJhbmdlRW5kID0gc2Vs
ZWN0aW9uLmVuZCgpOwotICAgIGlmIChjb21wYXJlUG9zaXRpb25zKG5vZGVSYW5nZUVuZCwgbGFz
dFZhbGlkUG9zaXRpb24pID4gMCkKLSAgICAgICAgbm9kZVJhbmdlRW5kID0gbGFzdFZhbGlkUG9z
aXRpb247CisgICAgYXV0byBub2RlUmFuZ2VTdGFydCA9IHN0ZDo6bWF4KHNlbGVjdGlvbi5zdGFy
dCgpLCBmaXJzdFZhbGlkUG9zaXRpb24pOworICAgIGF1dG8gbm9kZVJhbmdlRW5kID0gc3RkOjpt
aW4oc2VsZWN0aW9uLmVuZCgpLCBsYXN0VmFsaWRQb3NpdGlvbik7CiAKICAgICAvLyBDYWxjdWxh
dGUgcG9zaXRpb24gb2YgdGhlIHNlbGVjdGVkIHJhbmdlIGluc2lkZSB0aGUgb2JqZWN0LgogICAg
IFBvc2l0aW9uIHBhcmVudEZpcnN0UG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5v
ZGUobm9kZSk7CkBAIC03MDMsMTIgKzY5OCwxMyBAQCBzdGF0aWMgYm9vbCBpc1doaXRlU3BhY2VC
ZXR3ZWVuU2VudGVuY2VzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgaWYg
KCFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZShwb3NpdGlvbi5jaGFyYWN0ZXJBZnRlcigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZX
aGl0ZVNwYWNlID0gc3RhcnRPZldvcmQocG9zaXRpb24sIFJpZ2h0V29yZElmT25Cb3VuZGFyeSk7
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mV2hpdGVTcGFjZSA9IGVuZE9mV29yZChzdGFydE9m
V2hpdGVTcGFjZSwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBpZiAoIWlzU2VudGVuY2VC
b3VuZGFyeShzdGFydE9mV2hpdGVTcGFjZSkgJiYgIWlzU2VudGVuY2VCb3VuZGFyeShlbmRPZldo
aXRlU3BhY2UpKQorICAgIGF1dG8gc3RhcnQgPSBzdGFydE9mV29yZChwb3NpdGlvbiwgUmlnaHRX
b3JkSWZPbkJvdW5kYXJ5KTsKKyAgICBhdXRvIGVuZCA9IGVuZE9mV29yZChzdGFydCwgUmlnaHRX
b3JkSWZPbkJvdW5kYXJ5KTsKKyAgICBpZiAoIWlzU2VudGVuY2VCb3VuZGFyeShzdGFydCkgJiYg
IWlzU2VudGVuY2VCb3VuZGFyeShlbmQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBy
ZXR1cm4gY29tcGFyZVBvc2l0aW9ucyhzdGFydE9mV2hpdGVTcGFjZSwgcG9zaXRpb24pIDw9IDAg
JiYgY29tcGFyZVBvc2l0aW9ucyhlbmRPZldoaXRlU3BhY2UsIHBvc2l0aW9uKSA+PSAwOworICAg
IGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgcmV0dXJuIHJh
bmdlICYmIGlzUG9pbnRJblJhbmdlKCpyYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24p
KTsKIH0KIAogc3RhdGljIFZpc2libGVTZWxlY3Rpb24gc2VudGVuY2VBdFBvc2l0aW9uRm9yQXRr
Qm91bmRhcnkoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IFZpc2libGVQb3NpdGlv
biYgcG9zaXRpb24sIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IDgwODYwMjQxMzU0OGQ2NjI2ZDk1MGVhNjcy
MmQwZWRmMzE2YmU2YjcuLjE5NWJkNzRkZGNlYzk3MTc5MjM1OTk2NTZhOWQ4MWZkYWQ2MGM2NTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC05MDMsMTAgKzkw
MywxMCBAQCAtIChDaGFyYWN0ZXJPZmZzZXQpY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjoo
aWQpdGV4dE1hcmtlcgogICAgIHJldHVybiBiYWNraW5nT2JqZWN0ID8gY2hhcmFjdGVyT2Zmc2V0
Rm9yVGV4dE1hcmtlcihiYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCksIChfX2JyaWRnZSBD
RlR5cGVSZWYpdGV4dE1hcmtlcikgOiBuaWw7CiB9CiAKLS0gKGlkKXRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb246KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKXZpc2libGVQb3MKKy0gKGlkKXRl
eHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpcG9zaXRp
b24KIHsKICAgICBhdXRvICpiYWNraW5nT2JqZWN0ID0gc2VsZi5heEJhY2tpbmdPYmplY3Q7Ci0g
ICAgcmV0dXJuIGJhY2tpbmdPYmplY3QgPyB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGJh
Y2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgdmlzaWJsZVBvcykgOiBuaWw7CisgICAgcmV0
dXJuIGJhY2tpbmdPYmplY3QgPyB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uKGJhY2tpbmdP
YmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcG9zaXRpb24pIDogbmlsOwogfQogCiAtIChpZCl0ZXh0
TWFya2VyRm9yRmlyc3RQb3NpdGlvbkluVGV4dENvbnRyb2w6KEhUTUxUZXh0Rm9ybUNvbnRyb2xF
bGVtZW50ICYpdGV4dENvbnRyb2wKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3Np
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IDJkN2I0M2Q0
MTE3YTI4N2ZhMDZlZDZhZGQ1YzhkNDVjMzE1NDllYWQuLmZlM2YzNDFjMTA0OTVhNzljYTE5NjAz
NjRlZTJkYTE4ZjYyMjc3YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApAQCAtMTA2NywxMSAr
MTA2Nyw4IEBAIGJvb2wgUG9zaXRpb246OnJlbmRlcnNJbkRpZmZlcmVudFBvc2l0aW9uKGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKICAgICBpZiAocmVuZGVyZXIgPT0gcG9zaXRpb25S
ZW5kZXJlciAmJiB0aGlzUmVuZGVyZWRPZmZzZXQgPT0gcG9zaXRpb25SZW5kZXJlZE9mZnNldCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW50IGlnbm9yZWRDYXJldE9mZnNldDsKLSAg
ICBJbmxpbmVCb3gqIGIxOwotICAgIGdldElubGluZUJveEFuZE9mZnNldChET1dOU1RSRUFNLCBi
MSwgaWdub3JlZENhcmV0T2Zmc2V0KTsKLSAgICBJbmxpbmVCb3gqIGIyOwotICAgIHBvc2l0aW9u
LmdldElubGluZUJveEFuZE9mZnNldChET1dOU1RSRUFNLCBiMiwgaWdub3JlZENhcmV0T2Zmc2V0
KTsKKyAgICBhdXRvIGIxID0gaW5saW5lQm94QW5kT2Zmc2V0KERvd25zdHJlYW0pLmJveDsKKyAg
ICBhdXRvIGIyID0gcG9zaXRpb24uaW5saW5lQm94QW5kT2Zmc2V0KERvd25zdHJlYW0pLmJveDsK
IAogICAgIExPRyhFZGl0aW5nLCAicmVuZGVyZXI6ICAgICAgICAgICAgICAgJXAgWyVwXVxuIiwg
cmVuZGVyZXIsIGIxKTsKICAgICBMT0coRWRpdGluZywgInRoaXNSZW5kZXJlZE9mZnNldDogICAg
ICAgICAlZFxuIiwgdGhpc1JlbmRlcmVkT2Zmc2V0KTsKQEAgLTEwODEsMTMgKzEwNzgsMTEgQEAg
Ym9vbCBQb3NpdGlvbjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpb24oY29uc3QgUG9zaXRpb24m
IHBvc2l0aW9uKSBjb25zdAogICAgIExPRyhFZGl0aW5nLCAicG9zIG5vZGUgbWluL21heDogICAg
ICAgJWQ6JWRcbiIsIGNhcmV0TWluT2Zmc2V0KCpwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSwg
Y2FyZXRNYXhPZmZzZXQoKnBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpKTsKICAgICBMT0coRWRp
dGluZywgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCi0gICAgaWYgKCFiMSB8fCAhYjIpIHsKKyAgICBp
ZiAoIWIxIHx8ICFiMikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIGlmICgm
YjEtPnJvb3QoKSAhPSAmYjItPnJvb3QoKSkgeworICAgIGlmICgmYjEtPnJvb3QoKSAhPSAmYjIt
PnJvb3QoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQogCiAgICAgaWYgKG5leHRSZW5k
ZXJlZEVkaXRhYmxlKGRlcHJlY2F0ZWROb2RlKCkpID09IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2Rl
KCkKICAgICAgICAgJiYgdGhpc1JlbmRlcmVkT2Zmc2V0ID09IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihjYXJldE1heE9mZnNldCgqZGVwcmVjYXRlZE5vZGUoKSkpICYmICFwb3NpdGlvblJlbmRlcmVk
T2Zmc2V0KSB7CkBAIC0xMTQxLDkgKzExMzYsOSBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dHJhaWxp
bmdXaGl0ZXNwYWNlUG9zaXRpb24oRUFmZmluaXR5LCBib29sIGNvbnNpZGVyTm9uQ29sbGFwcwog
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgUG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNl
dChFQWZmaW5pdHkgYWZmaW5pdHksIElubGluZUJveComIGlubGluZUJveCwgaW50JiBjYXJldE9m
ZnNldCkgY29uc3QKK0lubGluZUJveEFuZE9mZnNldCBQb3NpdGlvbjo6aW5saW5lQm94QW5kT2Zm
c2V0KEVBZmZpbml0eSBhZmZpbml0eSkgY29uc3QKIHsKLSAgICBnZXRJbmxpbmVCb3hBbmRPZmZz
ZXQoYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24oKSwgaW5saW5lQm94LCBjYXJldE9mZnNldCk7
CisgICAgcmV0dXJuIGlubGluZUJveEFuZE9mZnNldChhZmZpbml0eSwgcHJpbWFyeURpcmVjdGlv
bigpKTsKIH0KIAogc3RhdGljIGJvb2wgaXNOb25UZXh0TGVhZkNoaWxkKFJlbmRlck9iamVjdCYg
b2JqZWN0KQpAQCAtMTIwMSwxMyArMTE5NiwxOSBAQCBzdGF0aWMgUG9zaXRpb24gdXBzdHJlYW1J
Z25vcmluZ0VkaXRpbmdCb3VuZGFyaWVzKFBvc2l0aW9uIHBvc2l0aW9uKQogICAgIHJldHVybiBw
b3NpdGlvbjsKIH0KIAotdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZp
bml0eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uLCBJbmxpbmVCb3gq
JiBpbmxpbmVCb3gsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0CitJbmxpbmVCb3hBbmRPZmZzZXQg
UG9zaXRpb246OmlubGluZUJveEFuZE9mZnNldChBZmZpbml0eSBhZmZpbml0eSwgVGV4dERpcmVj
dGlvbiBwcmltYXJ5RGlyZWN0aW9uKSBjb25zdAogewotICAgIGNhcmV0T2Zmc2V0ID0gZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZGVwcmVj
YXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBhdXRvIGNhcmV0T2Zmc2V0ID0gZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKTsKKworICAgIGF1dG8gbm9kZSA9IGRlcHJlY2F0ZWROb2RlKCk7Cisg
ICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4geyBudWxscHRyLCBjYXJldE9mZnNldCB9Owor
ICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgY2FyZXRP
ZmZzZXQgfTsKKworICAgIElubGluZUJveCogaW5saW5lQm94ID0gbnVsbHB0cjsKKwogICAgIGlm
IChyZW5kZXJlci0+aXNCUigpKSB7CiAgICAgICAgIGF1dG8mIGxpbmVCcmVha1JlbmRlcmVyID0g
ZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVyZXIpOwogICAgICAgICBsaW5lQnJlYWtS
ZW5kZXJlci5lbnN1cmVMaW5lQm94ZXMoKTsKQEAgLTEyMjcsOCArMTIyOCw3IEBAIHZvaWQgUG9z
aXRpb246OmdldElubGluZUJveEFuZE9mZnNldChFQWZmaW5pdHkgYWZmaW5pdHksIFRleHREaXJl
Y3Rpb24gcHJpbWFyeURpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAg
IGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FyZXRPZmZzZXQpID4gY2FyZXRNaW5PZmZzZXQg
JiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhcmV0T2Zmc2V0KSA8IGNhcmV0TWF4T2Zmc2V0KSB7
Ci0gICAgICAgICAgICAgICAgaW5saW5lQm94ID0gYm94OwotICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBib3gsIGNhcmV0T2Zmc2V0IH07CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmICgoKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXJldE9m
ZnNldCkgPT0gY2FyZXRNYXhPZmZzZXQpIF4gKGFmZmluaXR5ID09IERPV05TVFJFQU0pKQpAQCAt
MTI0NSw3ICsxMjQ1LDYgQEAgdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVB
ZmZpbml0eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGkKICAgICAgICAgfQogICAg
ICAgICBpbmxpbmVCb3ggPSBib3ggPyBib3ggOiBjYW5kaWRhdGU7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgaW5saW5lQm94ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKGNhbkhhdmVDaGlsZHJlbkZv
ckVkaXRpbmcoKmRlcHJlY2F0ZWROb2RlKCkpICYmIGlzPFJlbmRlckJsb2NrRmxvdz4oKnJlbmRl
cmVyKSAmJiBoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChkb3du
Y2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikpKSB7CiAgICAgICAgICAgICAvLyBUcnkg
YSB2aXN1YWxseSBlcXVpdmFsZW50IHBvc2l0aW9uIHdpdGggcG9zc2libHkgb3Bwb3NpdGUgZWRp
dGFiaWxpdHkuIFRoaXMgaGVscHMgaW4gY2FzZSB8dGhpc3wgaXMgaW4KICAgICAgICAgICAgIC8v
IGFuIGVkaXRhYmxlIGJsb2NrIGJ1dCBzdXJyb3VuZGVkIGJ5IG5vbi1lZGl0YWJsZSBwb3NpdGlv
bnMuIEl0IGFjdHMgdG8gbmVnYXRlIHRoZSBsb2dpYyBhdCB0aGUgYmVnaW5uaW5nCkBAIC0xMjUz
LDIyICsxMjUyLDIyIEBAIHZvaWQgUG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldChFQWZm
aW5pdHkgYWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJpbWFyeURpCiAgICAgICAgICAgICBQb3Np
dGlvbiBlcXVpdmFsZW50ID0gZG93bnN0cmVhbUlnbm9yaW5nRWRpdGluZ0JvdW5kYXJpZXMoKnRo
aXMpOwogICAgICAgICAgICAgaWYgKGVxdWl2YWxlbnQgPT0gKnRoaXMpIHsKICAgICAgICAgICAg
ICAgICBlcXVpdmFsZW50ID0gdXBzdHJlYW1JZ25vcmluZ0VkaXRpbmdCb3VuZGFyaWVzKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIHJldHVybmluZyBudWxscHRyIHJlYWxs
eSBiZSBjb3JyZWN0IGhlcmU/CiAgICAgICAgICAgICAgICAgaWYgKGVxdWl2YWxlbnQgPT0gKnRo
aXMgfHwgZG93bnN0cmVhbUlnbm9yaW5nRWRpdGluZ0JvdW5kYXJpZXMoZXF1aXZhbGVudCkgPT0g
KnRoaXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHsgbnVsbHB0ciwgY2FyZXRPZmZzZXQgfTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgZXF1aXZhbGVudC5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoVVBTVFJFQU0sIHByaW1hcnlE
aXJlY3Rpb24sIGlubGluZUJveCwgY2FyZXRPZmZzZXQpOwotICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgcmV0dXJuIGVxdWl2YWxlbnQuaW5saW5lQm94QW5kT2Zmc2V0KFVwc3RyZWFt
LCBwcmltYXJ5RGlyZWN0aW9uKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXM8UmVuZGVyQm94
PigqcmVuZGVyZXIpKSB7CiAgICAgICAgICAgICBpbmxpbmVCb3ggPSBkb3duY2FzdDxSZW5kZXJC
b3g+KCpyZW5kZXJlcikuaW5saW5lQm94V3JhcHBlcigpOwogICAgICAgICAgICAgaWYgKCFpbmxp
bmVCb3ggfHwgKGNhcmV0T2Zmc2V0ID4gaW5saW5lQm94LT5jYXJldE1pbk9mZnNldCgpICYmIGNh
cmV0T2Zmc2V0IDwgaW5saW5lQm94LT5jYXJldE1heE9mZnNldCgpKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgaW5saW5lQm94LCBjYXJldE9mZnNl
dCB9OwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKCFpbmxpbmVCb3gpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgY2FyZXRPZmZzZXQgfTsKIAogICAgIHVu
c2lnbmVkIGNoYXIgbGV2ZWwgPSBpbmxpbmVCb3gtPmJpZGlMZXZlbCgpOwogCkBAIC0xMjc2LDcg
KzEyNzUsNyBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5
IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaQogICAgICAgICBpZiAoY2FyZXRPZmZz
ZXQgPT0gaW5saW5lQm94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpKSB7CiAgICAgICAgICAgICBJ
bmxpbmVCb3gqIG5leHRCb3ggPSBpbmxpbmVCb3gtPm5leHRMZWFmT25MaW5lKCk7CiAgICAgICAg
ICAgICBpZiAoIW5leHRCb3ggfHwgbmV4dEJveC0+YmlkaUxldmVsKCkgPj0gbGV2ZWwpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiB7IGlubGluZUJveCwg
Y2FyZXRPZmZzZXQgfTsKIAogICAgICAgICAgICAgbGV2ZWwgPSBuZXh0Qm94LT5iaWRpTGV2ZWwo
KTsKICAgICAgICAgICAgIElubGluZUJveCogcHJldkJveCA9IGlubGluZUJveDsKQEAgLTEyODUs
NyArMTI4NCw3IEBAIHZvaWQgUG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldChFQWZmaW5p
dHkgYWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJpbWFyeURpCiAgICAgICAgICAgICB9IHdoaWxl
IChwcmV2Qm94ICYmIHByZXZCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpOwogCiAgICAgICAgICAg
ICBpZiAocHJldkJveCAmJiBwcmV2Qm94LT5iaWRpTGV2ZWwoKSA9PSBsZXZlbCkgICAvLyBGb3Ig
ZXhhbXBsZSwgYWJjIEZFRCAxMjMgXiBDQkEKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgaW5saW5lQm94LCBjYXJldE9mZnNldCB9OwogCiAgICAgICAg
ICAgICAvLyBGb3IgZXhhbXBsZSwgYWJjIDEyMyBeIENCQQogICAgICAgICAgICAgd2hpbGUgKElu
bGluZUJveCogbmV4dEJveCA9IGlubGluZUJveC0+bmV4dExlYWZPbkxpbmUoKSkgewpAQCAtMTI5
Nyw3ICsxMjk2LDcgQEAgdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZp
bml0eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGkKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIElubGluZUJveCogcHJldkJveCA9IGlubGluZUJveC0+cHJldmlvdXNMZWFm
T25MaW5lKCk7CiAgICAgICAgICAgICBpZiAoIXByZXZCb3ggfHwgcHJldkJveC0+YmlkaUxldmVs
KCkgPj0gbGV2ZWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJl
dHVybiB7IGlubGluZUJveCwgY2FyZXRPZmZzZXQgfTsKIAogICAgICAgICAgICAgbGV2ZWwgPSBw
cmV2Qm94LT5iaWRpTGV2ZWwoKTsKICAgICAgICAgICAgIElubGluZUJveCogbmV4dEJveCA9IGlu
bGluZUJveDsKQEAgLTEzMDYsNyArMTMwNSw3IEBAIHZvaWQgUG9zaXRpb246OmdldElubGluZUJv
eEFuZE9mZnNldChFQWZmaW5pdHkgYWZmaW5pdHksIFRleHREaXJlY3Rpb24gcHJpbWFyeURpCiAg
ICAgICAgICAgICB9IHdoaWxlIChuZXh0Qm94ICYmIG5leHRCb3gtPmJpZGlMZXZlbCgpID4gbGV2
ZWwpOwogCiAgICAgICAgICAgICBpZiAobmV4dEJveCAmJiBuZXh0Qm94LT5iaWRpTGV2ZWwoKSA9
PSBsZXZlbCkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJu
IHsgaW5saW5lQm94LCBjYXJldE9mZnNldCB9OwogCiAgICAgICAgICAgICB3aGlsZSAoSW5saW5l
Qm94KiBwcmV2Qm94ID0gaW5saW5lQm94LT5wcmV2aW91c0xlYWZPbkxpbmUoKSkgewogICAgICAg
ICAgICAgICAgIGlmIChwcmV2Qm94LT5iaWRpTGV2ZWwoKSA8IGxldmVsKQpAQCAtMTMxNSw3ICsx
MzE0LDcgQEAgdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZpbml0eSBh
ZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGkKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGNhcmV0T2Zmc2V0ID0gaW5saW5lQm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyBpbmxpbmVCb3gsIGNhcmV0
T2Zmc2V0IH07CiAgICAgfQogCiAgICAgaWYgKGNhcmV0T2Zmc2V0ID09IGlubGluZUJveC0+Y2Fy
ZXRMZWZ0bW9zdE9mZnNldCgpKSB7CkBAIC0xMzU3LDYgKzEzNTYsOCBAQCB2b2lkIFBvc2l0aW9u
OjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9u
IHByaW1hcnlEaQogICAgICAgICAgICAgY2FyZXRPZmZzZXQgPSBpbmxpbmVCb3gtPmNhcmV0Umln
aHRtb3N0T2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4geyBpbmxpbmVC
b3gsIGNhcmV0T2Zmc2V0IH07CiB9CiAKIFRleHREaXJlY3Rpb24gUG9zaXRpb246OnByaW1hcnlE
aXJlY3Rpb24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaAppbmRleCA3ODUzN2Y5YTEyMGI2ZDI4
NWYxMWFlZmQzMDMyOTM3OGRhZGZhYzRkLi5mOTgxY2FhMGVlZGFkZGJmYWY2OTVjMTI2NmFhOGU2
ZjYwYzc4YTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaApAQCAtNDksNiArNDksMTEgQEAgZW51bSBQ
b3NpdGlvbk1vdmVUeXBlIHsKICAgICBCYWNrd2FyZERlbGV0aW9uIC8vIFN1YmplY3QgdG8gcGxh
dGZvcm0gY29udmVudGlvbnMuCiB9OwogCitzdHJ1Y3QgSW5saW5lQm94QW5kT2Zmc2V0IHsKKyAg
ICBJbmxpbmVCb3gqIGJveCB7IG51bGxwdHIgfTsKKyAgICBpbnQgb2Zmc2V0IHsgMCB9OworfTsK
KwogY2xhc3MgUG9zaXRpb24gewogcHVibGljOgogICAgIGVudW0gQW5jaG9yVHlwZSB7CkBAIC0x
NTYsOCArMTYxLDggQEAgcHVibGljOgogCiAgICAgLy8gRklYTUU6IE1ha2UgdGhlc2Ugbm9uLW1l
bWJlciBmdW5jdGlvbnMgYW5kIHB1dCB0aGVtIHNvbWV3aGVyZSBpbiB0aGUgZWRpdGluZyBkaXJl
Y3RvcnkuCiAgICAgLy8gVGhlc2UgYXJlbid0IHJlYWxseSBiYXNpYyAicG9zaXRpb24iIG9wZXJh
dGlvbnMuIE1vcmUgaGlnaCBsZXZlbCBlZGl0aW5nIGhlbHBlciBmdW5jdGlvbnMuCi0gICAgV0VC
Q09SRV9FWFBPUlQgUG9zaXRpb24gbGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbihFQWZmaW5pdHks
IGJvb2wgY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRlc3BhY2UgPSBmYWxzZSkgY29uc3Q7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgUG9zaXRpb24gdHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRUFm
ZmluaXR5LCBib29sIGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNwYWNlID0gZmFsc2UpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFBvc2l0aW9uIGxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRp
b24oQWZmaW5pdHksIGJvb2wgY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRlc3BhY2UgPSBmYWxz
ZSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUG9zaXRpb24gdHJhaWxpbmdXaGl0ZXNwYWNl
UG9zaXRpb24oQWZmaW5pdHksIGJvb2wgY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRlc3BhY2Ug
PSBmYWxzZSkgY29uc3Q7CiAgICAgCiAgICAgLy8gVGhlc2UgcmV0dXJuIHVzZWZ1bCB2aXN1YWxs
eSBlcXVpdmFsZW50IHBvc2l0aW9ucy4KICAgICBXRUJDT1JFX0VYUE9SVCBQb3NpdGlvbiB1cHN0
cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3Vu
ZGFyeSkgY29uc3Q7CkBAIC0xNjcsOCArMTcyLDggQEAgcHVibGljOgogICAgIGJvb2wgaXNSZW5k
ZXJlZENoYXJhY3RlcigpIGNvbnN0OwogICAgIGJvb2wgcmVuZGVyc0luRGlmZmVyZW50UG9zaXRp
b24oY29uc3QgUG9zaXRpb24mKSBjb25zdDsKIAotICAgIHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zm
c2V0KEVBZmZpbml0eSwgSW5saW5lQm94KiYsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0OwotICAg
IHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmlt
YXJ5RGlyZWN0aW9uLCBJbmxpbmVCb3gqJiwgaW50JiBjYXJldE9mZnNldCkgY29uc3Q7CisgICAg
SW5saW5lQm94QW5kT2Zmc2V0IGlubGluZUJveEFuZE9mZnNldChBZmZpbml0eSkgY29uc3Q7Cisg
ICAgSW5saW5lQm94QW5kT2Zmc2V0IGlubGluZUJveEFuZE9mZnNldChBZmZpbml0eSwgVGV4dERp
cmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uKSBjb25zdDsKIAogICAgIFRleHREaXJlY3Rpb24gcHJp
bWFyeURpcmVjdGlvbigpIGNvbnN0OwogCkBAIC0yMDUsOCArMjEwLDggQEAgcHJpdmF0ZToKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIGludCBvZmZzZXRGb3JQb3NpdGlvbkFmdGVyQW5jaG9yKCkgY29u
c3Q7CiAgICAgCi0gICAgUG9zaXRpb24gcHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihFQWZmaW5p
dHkpIGNvbnN0OwotICAgIFBvc2l0aW9uIG5leHRDaGFyYWN0ZXJQb3NpdGlvbihFQWZmaW5pdHkp
IGNvbnN0OworICAgIFBvc2l0aW9uIHByZXZpb3VzQ2hhcmFjdGVyUG9zaXRpb24oQWZmaW5pdHkp
IGNvbnN0OworICAgIFBvc2l0aW9uIG5leHRDaGFyYWN0ZXJQb3NpdGlvbihBZmZpbml0eSkgY29u
c3Q7CiAKICAgICBzdGF0aWMgQW5jaG9yVHlwZSBhbmNob3JUeXBlRm9yTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKE5vZGUqIGFuY2hvck5vZGUsIHVuc2lnbmVkIG9mZnNldCk7CiAKQEAgLTI4NywyNiAr
MjkyLDIyIEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUG9zaXRpb24mIGEsIGNvbnN0
IFBvc2l0aW9uJiBiKQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgUG9zaXRpb24mIGEs
IGNvbnN0IFBvc2l0aW9uJiBiKQogewotICAgIGlmIChhLmlzTnVsbCgpIHx8IGIuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5hbmNob3JOb2RlKCkgPT0gYi5hbmNo
b3JOb2RlKCkpCi0gICAgICAgIHJldHVybiBhLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPCBi
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgcmV0dXJuIGIuYW5jaG9yTm9kZSgpLT5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbigqYS5hbmNob3JOb2RlKCkpID09IE5vZGU6OkRPQ1VNRU5U
X1BPU0lUSU9OX1BSRUNFRElORzsKKyAgICByZXR1cm4gaXNfbHQoZG9jdW1lbnRPcmRlcihhLCBi
KSk7CiB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBQb3NpdGlvbiYgYSwgY29uc3Qg
UG9zaXRpb24mIGIpIAogewotICAgIHJldHVybiAhYS5pc051bGwoKSAmJiAhYi5pc051bGwoKSAm
JiBhICE9IGIgJiYgYiA8IGE7CisgICAgcmV0dXJuIGlzX2d0KGRvY3VtZW50T3JkZXIoYSwgYikp
OwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFBvc2l0aW9uJiBhLCBjb25zdCBQ
b3NpdGlvbiYgYikgCiB7Ci0gICAgcmV0dXJuICFhLmlzTnVsbCgpICYmICFiLmlzTnVsbCgpICYm
IChhID09IGIgfHwgYSA+IGIpOworICAgIHJldHVybiBpc19ndGVxKGRvY3VtZW50T3JkZXIoYSwg
YikpOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFBvc2l0aW9uJiBhLCBjb25z
dCBQb3NpdGlvbiYgYikgCiB7Ci0gICAgcmV0dXJuICFhLmlzTnVsbCgpICYmICFiLmlzTnVsbCgp
ICYmIChhID09IGIgfHwgYSA8IGIpOworICAgIHJldHVybiBpc19sdGVxKGRvY3VtZW50T3JkZXIo
YSwgYikpOwogfQogCiAvLyBwb3NpdGlvbkJlZm9yZU5vZGUgYW5kIHBvc2l0aW9uQWZ0ZXJOb2Rl
IHJldHVybiBuZWlnaGJvci1hbmNob3JlZCBwb3NpdGlvbnMsIGNvbnN0cnVjdGlvbiBpcyBPKDEp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IDZh
MDY0MTlmM2M0YTcwMjRhYTdlYjlmMTRkNTc4MTQ3ZDM3ZjQ4NTguLjk5NjczZjRjNzQyNDQwNDNj
MmE0NzA1MjE3NGMxNjFhZGQzMzMzMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCkBAIC0xNzIsMTMgKzE3MiwxMyBAQCBBcHBseVN0eWxlQ29tbWFu
ZDo6QXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBFZGl0aW5nU3R5
bGUqIHN0eQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjp1cGRhdGVTdGFydEVuZChjb25zdCBQ
b3NpdGlvbiYgbmV3U3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBuZXdFbmQpCiB7Ci0gICAgQVNTRVJU
KGNvbXBhcmVQb3NpdGlvbnMobmV3RW5kLCBuZXdTdGFydCkgPj0gMCk7CisgICAgQVNTRVJUKCEo
bmV3U3RhcnQgPiBuZXdFbmQpKTsKIAogICAgIGlmICghbV91c2VFbmRpbmdTZWxlY3Rpb24gJiYg
KG5ld1N0YXJ0ICE9IG1fc3RhcnQgfHwgbmV3RW5kICE9IG1fZW5kKSkKICAgICAgICAgbV91c2VF
bmRpbmdTZWxlY3Rpb24gPSB0cnVlOwogCiAgICAgYm9vbCB3YXNCYXNlRmlyc3QgPSBzdGFydGlu
Z1NlbGVjdGlvbigpLmlzQmFzZUZpcnN0KCkgfHwgIXN0YXJ0aW5nU2VsZWN0aW9uKCkuaXNEaXJl
Y3Rpb25hbCgpOwotICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHdhc0Jh
c2VGaXJzdCA/IG5ld1N0YXJ0IDogbmV3RW5kLCB3YXNCYXNlRmlyc3QgPyBuZXdFbmQgOiBuZXdT
dGFydCwgVlBfREVGQVVMVF9BRkZJTklUWSwgZW5kaW5nU2VsZWN0aW9uKCkuaXNEaXJlY3Rpb25h
bCgpKSk7CisgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24od2FzQmFzZUZp
cnN0ID8gbmV3U3RhcnQgOiBuZXdFbmQsIHdhc0Jhc2VGaXJzdCA/IG5ld0VuZCA6IG5ld1N0YXJ0
LCBWaXNpYmxlUG9zaXRpb246OmRlZmF1bHRBZmZpbml0eSwgZW5kaW5nU2VsZWN0aW9uKCkuaXNE
aXJlY3Rpb25hbCgpKSk7CiAgICAgbV9zdGFydCA9IG5ld1N0YXJ0OwogICAgIG1fZW5kID0gbmV3
RW5kOwogfQpAQCAtMjI3LDkgKzIyNyw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
QmxvY2tTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogICAgIC8vIHVwZGF0aW5nIGJlZm9yZSBl
YWNoIGFuZCBldmVyeSBjYWxsIHRvIGNoZWNrIGEgY29tcHV0ZWQgc3R5bGUuCiAgICAgZG9jdW1l
bnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIFBvc2l0
aW9uIHN0YXJ0ID0gc3RhcnRQb3NpdGlvbigpOwotICAgIFBvc2l0aW9uIGVuZCA9IGVuZFBvc2l0
aW9uKCk7Ci0gICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZW5kLCBzdGFydCkgPCAwKQorICAgIGF1
dG8gc3RhcnQgPSBzdGFydFBvc2l0aW9uKCk7CisgICAgYXV0byBlbmQgPSBlbmRQb3NpdGlvbigp
OworICAgIGlmIChlbmQgPCBzdGFydCkKICAgICAgICAgc3RkOjpzd2FwKHN0YXJ0LCBlbmQpOwog
CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChzdGFydCk7CkBAIC0yOTgsMTYgKzI5
OCwxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hh
bmdlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmhhc0Zv
bnRTaXplRGVsdGEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUG9zaXRpb24gc3RhcnQgPSBz
dGFydFBvc2l0aW9uKCk7Ci0gICAgUG9zaXRpb24gZW5kID0gZW5kUG9zaXRpb24oKTsKLSAgICBp
ZiAoY29tcGFyZVBvc2l0aW9ucyhlbmQsIHN0YXJ0KSA8IDApIHsKLSAgICAgICAgUG9zaXRpb24g
c3dhcCA9IHN0YXJ0OwotICAgICAgICBzdGFydCA9IGVuZDsKLSAgICAgICAgZW5kID0gc3dhcDsK
LSAgICB9CisgICAgYXV0byBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKKyAgICBhdXRvIGVuZCA9
IGVuZFBvc2l0aW9uKCk7CisgICAgaWYgKGVuZCA8IHN0YXJ0KQorICAgICAgICBzdGQ6OnN3YXAo
c3RhcnQsIGVuZCk7CiAKICAgICAvLyBKb2luIHVwIGFueSBhZGphY2VudCB0ZXh0IG5vZGVzLgot
ICAgIGlmIChpczxUZXh0Pigqc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKKyAgICBpZiAoaXM8
VGV4dD4oc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgam9pbkNoaWxkVGV4dE5v
ZGVzKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUoKSwgc3RhcnQsIGVuZCk7CiAg
ICAgICAgIHN0YXJ0ID0gc3RhcnRQb3NpdGlvbigpOwogICAgICAgICBlbmQgPSBlbmRQb3NpdGlv
bigpOwpAQCAtNTU4LDE3ICs1NTUsMTAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJ
bmxpbmVTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogICAgIGRvY3VtZW50KCkudXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICAvLyBhZGp1c3QgdG8gdGhlIHBv
c2l0aW9ucyB3ZSB3YW50IHRvIHVzZSBmb3IgYXBwbHlpbmcgc3R5bGUKLSAgICBQb3NpdGlvbiBz
dGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKLSAgICBQb3NpdGlvbiBlbmQgPSBlbmRQb3NpdGlvbigp
OwotCi0gICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZW5kLCBzdGFydCkgPCAwKSB7Ci0gICAg
ICAgIFBvc2l0aW9uIHN3YXAgPSBzdGFydDsKLSAgICAgICAgc3RhcnQgPSBlbmQ7Ci0gICAgICAg
IGVuZCA9IHN3YXA7Ci0gICAgfQorICAgIGF1dG8gc3RhcnQgPSBzdGFydFBvc2l0aW9uKCk7Cisg
ICAgYXV0byBlbmQgPSBlbmRQb3NpdGlvbigpOworICAgIGlmIChlbmQgPCBzdGFydCkKKyAgICAg
ICAgc3RkOjpzd2FwKHN0YXJ0LCBlbmQpOwogCiAgICAgLy8gc3BsaXQgdGhlIHN0YXJ0IG5vZGUg
YW5kIGNvbnRhaW5pbmcgZWxlbWVudCBpZiB0aGUgc2VsZWN0aW9uIHN0YXJ0cyBpbnNpZGUgb2Yg
aXQKICAgICBib29sIHNwbGl0U3RhcnQgPSBpc1ZhbGlkQ2FyZXRQb3NpdGlvbkluVGV4dE5vZGUo
c3RhcnQpOwpAQCAtNTgyLDkgKzU3Miw2IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
SW5saW5lU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSkKICAgICAgICAgc3RhcnREdW1teVNwYW5B
bmNlc3RvciA9IGR1bW15U3BhbkFuY2VzdG9yRm9yTm9kZShzdGFydC5kZXByZWNhdGVkTm9kZSgp
KTsKICAgICB9CiAKLSAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm47Ci0KICAgICAvLyBzcGxpdCB0aGUgZW5kIG5vZGUgYW5kIGNvbnRhaW5pbmcg
ZWxlbWVudCBpZiB0aGUgc2VsZWN0aW9uIGVuZHMgaW5zaWRlIG9mIGl0CiAgICAgYm9vbCBzcGxp
dEVuZCA9IGlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShlbmQpOwogICAgIGlmIChzcGxp
dEVuZCkgewpAQCAtNjI5LDcgKzYxNiw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
SW5saW5lU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSkKICAgICAgICAgICAgIHN0eWxlV2l0aG91
dEVtYmVkZGluZyA9IHN0eWxlLmNvcHkoKTsKICAgICAgICAgICAgIGVtYmVkZGluZ1N0eWxlID0g
c3R5bGVXaXRob3V0RW1iZWRkaW5nLT5leHRyYWN0QW5kUmVtb3ZlVGV4dERpcmVjdGlvbigpOwog
Ci0gICAgICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhlbWJlZGRpbmdSZW1vdmVTdGFydCwg
ZW1iZWRkaW5nUmVtb3ZlRW5kKSA8PSAwKQorICAgICAgICAgICAgaWYgKGVtYmVkZGluZ1JlbW92
ZVN0YXJ0IDw9IGVtYmVkZGluZ1JlbW92ZUVuZCkKICAgICAgICAgICAgICAgICByZW1vdmVJbmxp
bmVTdHlsZSgqZW1iZWRkaW5nU3R5bGUsIGVtYmVkZGluZ1JlbW92ZVN0YXJ0LCBlbWJlZGRpbmdS
ZW1vdmVFbmQpOwogICAgICAgICB9CiAgICAgfQpAQCAtNjk0LDcgKzY4MSw3IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OmZpeFJhbmdlQW5kQXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUm
IHN0eWxlLCBjb25zdCBQCiAKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSA+PSBjYXJldE1heE9mZnNldCgqc3RhcnROb2RlKSkgewogICAgICAgICBzdGFydE5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KCpzdGFydE5vZGUpOwotICAgICAgICBpZiAoIXN0YXJ0Tm9kZSB8
fCBjb21wYXJlUG9zaXRpb25zKGVuZCwgZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHN0YXJ0
Tm9kZSkpIDwgMCkKKyAgICAgICAgaWYgKCFzdGFydE5vZGUgfHwgZW5kIDwgZmlyc3RQb3NpdGlv
bkluT3JCZWZvcmVOb2RlKHN0YXJ0Tm9kZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0xMDc5LDcgKzEwNjYsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxp
bmVTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgcwogICAgIEFTU0VS
VChlbmQuaXNOb3ROdWxsKCkpOwogICAgIEFTU0VSVChzdGFydC5hbmNob3JOb2RlKCktPmlzQ29u
bmVjdGVkKCkpOwogICAgIEFTU0VSVChlbmQuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgpKTsK
LSAgICBBU1NFUlQoY29tcGFyZVBvc2l0aW9ucyhzdGFydCwgZW5kKSA8PSAwKTsKKyAgICBBU1NF
UlQoc3RhcnQgPD0gZW5kKTsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IHN0
YXJ0L2VuZCBhcmUgbm90IGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUuCiAKICAgICBQb3Np
dGlvbiBwdXNoRG93blN0YXJ0ID0gc3RhcnQuZG93bnN0cmVhbSgpOwpAQCAtMTE2MSwxOCArMTE0
OCwxNCBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpub2RlRnVsbHlTZWxlY3RlZChFbGVtZW50
JiBlbGVtZW50LCBjb25zdCBQb3NpdGlvbiYgc3RhcgogewogICAgIC8vIFRoZSB0cmVlIG1heSBo
YXZlIGNoYW5nZWQgYW5kIFBvc2l0aW9uOjp1cHN0cmVhbSgpIHJlbGllcyBvbiBhbiB1cC10by1k
YXRlIGxheW91dC4KICAgICBlbGVtZW50LmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7Ci0KLSAgICByZXR1cm4gY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUoJmVsZW1lbnQpLCBzdGFydCkgPj0gMAotICAgICAgICAmJiBj
b21wYXJlUG9zaXRpb25zKGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUoJmVsZW1lbnQpLnVwc3Ry
ZWFtKCksIGVuZCkgPD0gMDsKKyAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KCZlbGVtZW50KSA+PSBzdGFydCAmJiBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKCZlbGVtZW50
KS51cHN0cmVhbSgpIDw9IGVuZDsKIH0KIAogYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bm9kZUZ1
bGx5VW5zZWxlY3RlZChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvc2l0aW9uJiBlbmQpIGNvbnN0CiB7CiAgICAgLy8gVGhlIHRyZWUgbWF5IGhhdmUgY2hh
bmdlZCBhbmQgUG9zaXRpb246OnVwc3RyZWFtKCkgcmVsaWVzIG9uIGFuIHVwLXRvLWRhdGUgbGF5
b3V0LgogICAgIGVsZW1lbnQuZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5
bGVzaGVldHMoKTsKLQotICAgIHJldHVybiBjb21wYXJlUG9zaXRpb25zKGxhc3RQb3NpdGlvbklu
T3JBZnRlck5vZGUoJmVsZW1lbnQpLnVwc3RyZWFtKCksIHN0YXJ0KSA8IDAKLSAgICAgICAgfHwg
Y29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoJmVsZW1lbnQpLCBl
bmQpID4gMDsKKyAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZSgmZWxlbWVudCku
dXBzdHJlYW0oKSA8IHN0YXJ0IHx8IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZSgmZWxlbWVu
dCkgPiBlbmQ7CiB9CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0U3RhcnQo
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCA3NzE2MTYyM2Y3
YzBlYzk2YTMxNTU3YmIwYjhmNmY0Mjk1MTUwNDFkLi4yZmM2Mzg0NDlkMjg3YTBmN2U0NmNkYzJm
MDI2YWM4NjBhY2Q4ZTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmNwcApAQCAtMTA1NCwxMCArMTA1NCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQmIHRleHROb2RlLCB1bnNpZ25l
ZCBzdGFyCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRU
ZXh0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKIHsKLSAgICBp
ZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoY29tcGFyZVBvc2l0aW9ucyhzdGFydCwgZW5kKSA+PSAwKQorICAgIGlmICghKHN0YXJ0
IDwgZW5kKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPFJlZjxUZXh0Pj4gbm9kZXM7
CkBAIC0xMDc1LDEwICsxMDcyLDkgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRl
SW5zaWduaWZpY2FudFRleHQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdAogICAgIH0KIH0K
IAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHREb3du
c3RyZWFtKGNvbnN0IFBvc2l0aW9uJiBwb3MpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpk
ZWxldGVJbnNpZ25pZmljYW50VGV4dERvd25zdHJlYW0oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9u
KQogewotICAgIFBvc2l0aW9uIGVuZCA9IFZpc2libGVQb3NpdGlvbihwb3MsIFZQX0RFRkFVTFRf
QUZGSU5JVFkpLm5leHQoKS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKLSAgICBkZWxl
dGVJbnNpZ25pZmljYW50VGV4dChwb3MsIGVuZCk7CisgICAgZGVsZXRlSW5zaWduaWZpY2FudFRl
eHQocG9zaXRpb24sIFZpc2libGVQb3NpdGlvbihwb3NpdGlvbikubmV4dCgpLmRlZXBFcXVpdmFs
ZW50KCkuZG93bnN0cmVhbSgpKTsKIH0KIAogUmVmPEVsZW1lbnQ+IENvbXBvc2l0ZUVkaXRDb21t
YW5kOjphcHBlbmRCbG9ja1BsYWNlaG9sZGVyKFJlZjxFbGVtZW50PiYmIGNvbnRhaW5lcikKQEAg
LTExNTgsNyArMTE1NCw3IEBAIFJlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92
ZVBhcmFncmFwaENvbnRlbnRzVG9OZXdCbG9ja0lmTmVjZXNzYXJ5KGNvCiAgICAgCiAgICAgLy8g
SXQncyBzdHJhbmdlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdmVyaWZ5
aW5nIHRoYXQgcG9zIGhhcyBub3QgYmVlbiBpbnZhbGlkYXRlZAogICAgIC8vIGJ5IGFuIGVhcmxp
ZXIgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLiAgVGhlIGNhbGxlciwgYXBwbHlCbG9ja1N0eWxlLCBz
aG91bGQgZG8gdGhpcy4KLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhwb3MsIFZQX0RF
RkFVTFRfQUZGSU5JVFkpOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zKHBvcyk7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQYXJhZ3JhcGhTdGFydChzdGFydE9mUGFyYWdyYXBo
KHZpc2libGVQb3MpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBhcmFncmFwaEVuZCA9
IGVuZE9mUGFyYWdyYXBoKHZpc2libGVQb3MpOwogICAgIGlmICh2aXNpYmxlUGFyYWdyYXBoU3Rh
cnQuaXNOdWxsKCkgfHwgdmlzaWJsZVBhcmFncmFwaEVuZC5pc051bGwoKSkKQEAgLTExNjYsMTMg
KzExNjIsMTMgQEAgUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdy
YXBoQ29udGVudHNUb05ld0Jsb2NrSWZOZWNlc3NhcnkoY28KIAogICAgIFZpc2libGVQb3NpdGlv
biBuZXh0ID0gdmlzaWJsZVBhcmFncmFwaEVuZC5uZXh0KCk7CiAgICAgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVFbmQgPSBuZXh0LmlzTm90TnVsbCgpID8gbmV4dCA6IHZpc2libGVQYXJhZ3JhcGhF
bmQ7Ci0gICAgCisKICAgICBQb3NpdGlvbiB1cHN0cmVhbVN0YXJ0ID0gdmlzaWJsZVBhcmFncmFw
aFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKTsKICAgICBQb3NpdGlvbiB1cHN0cmVh
bUVuZCA9IHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpOwogCiAgICAgLy8g
SWYgdGhlcmUgYXJlIG5vIFZpc2libGVQb3NpdGlvbnMgaW4gdGhlIHNhbWUgYmxvY2sgYXMgcG9z
IHRoZW4gCiAgICAgLy8gdXBzdHJlYW1TdGFydCB3aWxsIGJlIG91dHNpZGUgdGhlIHBhcmFncmFw
aAotICAgIGlmIChjb21wYXJlUG9zaXRpb25zKHBvcywgdXBzdHJlYW1TdGFydCkgPCAwKQorICAg
IGlmIChwb3MgPCB1cHN0cmVhbVN0YXJ0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IC8vIFBlcmZvcm0gc29tZSBjaGVja3MgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcGVyZm9ybSB3b3Jr
IGluIHRoaXMgZnVuY3Rpb24uCkBAIC0xMjMyLDcgKzEyMjgsNyBAQCB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpwdXNoQW5jaG9yRWxlbWVudERvd24oRWxlbWVudCYgYW5jaG9yRWxlbWVudCkK
IAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2xvbmVQYXJhZ3JhcGhVbmRlck5ld0VsZW1l
bnQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBOb2RlKiBwYXNz
ZWRPdXRlck5vZGUsIEVsZW1lbnQqIGJsb2NrRWxlbWVudCkKIHsKLSAgICBBU1NFUlQoY29tcGFy
ZVBvc2l0aW9ucyhzdGFydCwgZW5kKSA8PSAwKTsKKyAgICBBU1NFUlQoc3RhcnQgPD0gZW5kKTsK
IAogICAgIC8vIEZpcnN0IHdlIGNsb25lIHRoZSBvdXRlck5vZGUKICAgICBSZWZQdHI8Tm9kZT4g
bGFzdE5vZGU7CkBAIC0xNDAyLDQ1ICsxMzk4LDM2IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6Om1vdmVQYXJhZ3JhcGhzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgc3RhcnRPZlBhcmFncmFw
CiB7CiAgICAgaWYgKGRlc3RpbmF0aW9uLmlzTnVsbCgpIHx8IHN0YXJ0T2ZQYXJhZ3JhcGhUb01v
dmUgPT0gZGVzdGluYXRpb24pCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIE9wdGlvbmFs
PHVpbnQ2NF90PiBzdGFydEluZGV4OwogICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBlbmRJbmRleDsK
ICAgICBib29sIG9yaWdpbmFsSXNEaXJlY3Rpb25hbCA9IGVuZGluZ1NlbGVjdGlvbigpLmlzRGly
ZWN0aW9uYWwoKTsKICAgICBpZiAocHJlc2VydmVTZWxlY3Rpb24gJiYgIWVuZGluZ1NlbGVjdGlv
bigpLmlzTm9uZSgpKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgPSBl
bmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVFbmQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7Ci0gICAgICAgIAot
ICAgICAgICBib29sIHN0YXJ0QWZ0ZXJQYXJhZ3JhcGggPSBjb21wYXJlUG9zaXRpb25zKHZpc2li
bGVTdGFydCwgZW5kT2ZQYXJhZ3JhcGhUb01vdmUpID4gMDsKLSAgICAgICAgYm9vbCBlbmRCZWZv
cmVQYXJhZ3JhcGggPSBjb21wYXJlUG9zaXRpb25zKHZpc2libGVFbmQsIHN0YXJ0T2ZQYXJhZ3Jh
cGhUb01vdmUpIDwgMDsKLSAgICAgICAgCi0gICAgICAgIGlmICghc3RhcnRBZnRlclBhcmFncmFw
aCAmJiAhZW5kQmVmb3JlUGFyYWdyYXBoKSB7Ci0gICAgICAgICAgICBib29sIHN0YXJ0SW5QYXJh
Z3JhcGggPSBjb21wYXJlUG9zaXRpb25zKHZpc2libGVTdGFydCwgc3RhcnRPZlBhcmFncmFwaFRv
TW92ZSkgPj0gMDsKLSAgICAgICAgICAgIGJvb2wgZW5kSW5QYXJhZ3JhcGggPSBjb21wYXJlUG9z
aXRpb25zKHZpc2libGVFbmQsIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlKSA8PSAwOwotICAgICAgICAg
ICAgCisgICAgICAgIGF1dG8gdmlzaWJsZVN0YXJ0ID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCk7CisgICAgICAgIGF1dG8gdmlzaWJsZUVuZCA9IGVuZGluZ1NlbGVjdGlvbigpLnZp
c2libGVFbmQoKTsKKyAgICAgICAgaWYgKHZpc2libGVTdGFydCA8PSBlbmRPZlBhcmFncmFwaFRv
TW92ZSAmJiB2aXNpYmxlRW5kID49IHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUpIHsKICAgICAgICAg
ICAgIHN0YXJ0SW5kZXggPSAwOwotICAgICAgICAgICAgaWYgKHN0YXJ0SW5QYXJhZ3JhcGgpIHsK
KyAgICAgICAgICAgIGlmICh2aXNpYmxlU3RhcnQgPj0gc3RhcnRPZlBhcmFncmFwaFRvTW92ZSkg
ewogICAgICAgICAgICAgICAgIGlmIChhdXRvIHJhbmdlVG9TZWxlY3Rpb25TdGFydCA9IG1ha2VT
aW1wbGVSYW5nZShzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLCB2aXNpYmxlU3RhcnQpKQogICAgICAg
ICAgICAgICAgICAgICBzdGFydEluZGV4ID0gY2hhcmFjdGVyQ291bnQoKnJhbmdlVG9TZWxlY3Rp
b25TdGFydCwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3Np
dGlvbnMpOwogICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBlbmRJbmRleCA9IDA7Ci0gICAg
ICAgICAgICBpZiAoZW5kSW5QYXJhZ3JhcGgpIHsKKyAgICAgICAgICAgIGlmICh2aXNpYmxlRW5k
IDw9IGVuZE9mUGFyYWdyYXBoVG9Nb3ZlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmFu
Z2VUb1NlbGVjdGlvbkVuZCA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mUGFyYWdyYXBoVG9Nb3Zl
LCB2aXNpYmxlRW5kKSkKICAgICAgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBjaGFyYWN0ZXJD
b3VudCgqcmFuZ2VUb1NlbGVjdGlvbkVuZCwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0
d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogCi0gICAgVmlzaWJsZVBvc2l0aW9uIGJlZm9yZVBhcmFncmFwaCA9IHN0YXJ0T2ZQYXJhZ3Jh
cGhUb01vdmUucHJldmlvdXMoQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgIFZpc2li
bGVQb3NpdGlvbiBhZnRlclBhcmFncmFwaChlbmRPZlBhcmFncmFwaFRvTW92ZS5uZXh0KENhbm5v
dENyb3NzRWRpdGluZ0JvdW5kYXJ5KSk7CisgICAgYXV0byBiZWZvcmVQYXJhZ3JhcGggPSBzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlLnByZXZpb3VzKENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsK
KyAgICBhdXRvIGFmdGVyUGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3JhcGhUb01vdmUubmV4dChDYW5u
b3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAKICAgICAvLyBXZSB1cHN0cmVhbSgpIHRoZSBlbmQg
YW5kIGRvd25zdHJlYW0oKSB0aGUgc3RhcnQgc28gdGhhdCB3ZSBkb24ndCBpbmNsdWRlIGNvbGxh
cHNlZCB3aGl0ZXNwYWNlIGluIHRoZSBtb3ZlLgogICAgIC8vIFdoZW4gd2UgcGFzdGUgYSBmcmFn
bWVudCwgc3BhY2VzIGFmdGVyIHRoZSBlbmQgYW5kIGJlZm9yZSB0aGUgc3RhcnQgYXJlIHRyZWF0
ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSByZW5kZXJlZC4KLSAgICBQb3NpdGlvbiBzdGFydCA9IHN0
YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7Ci0gICAg
UG9zaXRpb24gZW5kID0gZW5kT2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS51cHN0
cmVhbSgpOwotICAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhbiBpbmVmZmljaWVudCB3YXkg
dG8gcHJlc2VydmUgc3R5bGUgb24gbm9kZXMgaW4gdGhlIHBhcmFncmFwaCB0byBtb3ZlLiBJdAot
ICAgIC8vIHNob3VsZG4ndCBtYXR0ZXIgdGhvdWdoLCBzaW5jZSBtb3ZlZCBwYXJhZ3JhcGhzIHdp
bGwgdXN1YWxseSBiZSBxdWl0ZSBzbWFsbC4KKyAgICBhdXRvIHN0YXJ0ID0gc3RhcnRPZlBhcmFn
cmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKKyAgICBhdXRvIGVuZCA9
IGVuZE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKTsKKworICAg
IC8vIEZJWE1FOiBTZXJpYWxpemluZyBhbmQgcmUtcGFyc2luZyBpcyBhbiBpbmVmZmljaWVudCB3
YXkgdG8gcHJlc2VydmUgc3R5bGUuCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50OwogICAgIGlmIChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlICE9IGVuZE9mUGFyYWdyYXBoVG9N
b3ZlKQogICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVu
dCgpLCBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZSgqbWFrZVNpbXBsZVJhbmdl
KHN0YXJ0LCBlbmQpLCBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpObywgQ29udmVy
dEJsb2Nrc1RvSW5saW5lczo6WWVzKSwgZW1wdHlTdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCAyNWJkMzNmZGQ0
MTc2NzQ0NmI3NTMzZDlhNzZmYTEzNDgyZWYxYWViLi5iYWE3ZTk3ZWVjMzM1YWZmNTZlYTI4Y2M1
YTM4YmU2ZDM3OGNiMTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTEzNywxMSArMTM3LDExIEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6aW5pdGlhbGl6ZVN0YXJ0RW5kKFBvc2l0aW9uJiBzdGFydCwgUG9zaXRp
b24mIGVuZCkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8vIElmIHdlJ3JlIGdvaW5n
IHRvIGV4cGFuZCB0byBpbmNsdWRlIHRoZSBzdGFydFNwZWNpYWxDb250YWluZXIsIGl0IG11c3Qg
YmUgZnVsbHkgc2VsZWN0ZWQuCi0gICAgICAgIGlmIChzdGFydFNwZWNpYWxDb250YWluZXIgJiYg
IWVuZFNwZWNpYWxDb250YWluZXIgJiYgY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbkluUGFyZW50
QWZ0ZXJOb2RlKHN0YXJ0U3BlY2lhbENvbnRhaW5lciksIGVuZCkgPiAtMSkKKyAgICAgICAgaWYg
KHN0YXJ0U3BlY2lhbENvbnRhaW5lciAmJiAhZW5kU3BlY2lhbENvbnRhaW5lciAmJiBwb3NpdGlv
bkluUGFyZW50QWZ0ZXJOb2RlKHN0YXJ0U3BlY2lhbENvbnRhaW5lcikgPj0gZW5kKQogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gSWYgd2UncmUgZ29pbmcgdG8gZXhwYW5kIHRvIGlu
Y2x1ZGUgdGhlIGVuZFNwZWNpYWxDb250YWluZXIsIGl0IG11c3QgYmUgZnVsbHkgc2VsZWN0ZWQu
Ci0gICAgICAgIGlmIChlbmRTcGVjaWFsQ29udGFpbmVyICYmICFzdGFydFNwZWNpYWxDb250YWlu
ZXIgJiYgY29tcGFyZVBvc2l0aW9ucyhzdGFydCwgcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUo
ZW5kU3BlY2lhbENvbnRhaW5lcikpID4gLTEpCisgICAgICAgIGlmIChlbmRTcGVjaWFsQ29udGFp
bmVyICYmICFzdGFydFNwZWNpYWxDb250YWluZXIgJiYgc3RhcnQgPj0gcG9zaXRpb25JblBhcmVu
dEJlZm9yZU5vZGUoZW5kU3BlY2lhbENvbnRhaW5lcikpCiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBpZiAoc3RhcnRTcGVjaWFsQ29udGFpbmVyICYmIHN0YXJ0U3BlY2lhbENvbnRhaW5l
ci0+aXNEZXNjZW5kYW50T2YoZW5kU3BlY2lhbENvbnRhaW5lcikpCkBAIC0yMDAsNyArMjAwLDcg
QEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzbWFydERlbGV0ZVBhcmFncmFwaFNwYWNl
cnMoKQogICAgICAgICAgICAgcG9zaXRpb24gPSBWaXNpYmxlUG9zaXRpb24obV9kb3duc3RyZWFt
RW5kKS5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgbV91cHN0cmVhbUVuZCA9IHBv
c2l0aW9uLnVwc3RyZWFtKCk7CiAgICAgICAgIG1fZG93bnN0cmVhbUVuZCA9IHBvc2l0aW9uLmRv
d25zdHJlYW0oKTsKLSAgICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2UgPSBtX2Rvd25zdHJlYW1F
bmQudHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVMVF9BRkZJTklUWSk7CisgICAg
ICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlID0gbV9kb3duc3RyZWFtRW5kLnRyYWlsaW5nV2hpdGVz
cGFjZVBvc2l0aW9uKFZpc2libGVQb3NpdGlvbjo6ZGVmYXVsdEFmZmluaXR5KTsKICAgICAgICAg
c2V0U3RhcnRpbmdTZWxlY3Rpb25PblNtYXJ0RGVsZXRlKG1fdXBzdHJlYW1TdGFydCwgbV9kb3du
c3RyZWFtRW5kKTsKICAgICB9CiAgICAgaWYgKHN0YXJ0QW5kRW5kSW5TYW1lVW5zcGxpdHRhYmxl
RWxlbWVudCAmJiBzZWxlY3Rpb25FbmRJc0VuZE9mQ29udGVudCAmJiBwcmV2aW91c1Bvc2l0aW9u
SXNCbGFua1BhcmFncmFwaCAmJiBzZWxlY3Rpb25FbmRzSW5QYXJhZ3JhcGhTZXBlcmF0b3IpIHsK
QEAgLTI3NSwyMCArMjc1LDIwIEBAIGJvb2wgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aW5pdGlh
bGl6ZVBvc2l0aW9uRGF0YSgpCiAKICAgICAvLyBIYW5kbGUgbGVhZGluZyBhbmQgdHJhaWxpbmcg
d2hpdGVzcGFjZSwgYXMgd2VsbCBhcyBzbWFydCBkZWxldGUgYWRqdXN0bWVudHMgdG8gdGhlIHNl
bGVjdGlvbgogICAgIG1fbGVhZGluZ1doaXRlc3BhY2UgPSBtX3Vwc3RyZWFtU3RhcnQubGVhZGlu
Z1doaXRlc3BhY2VQb3NpdGlvbihtX3NlbGVjdGlvblRvRGVsZXRlLmFmZmluaXR5KCkpOwotICAg
IG1fdHJhaWxpbmdXaGl0ZXNwYWNlID0gbV9kb3duc3RyZWFtRW5kLnRyYWlsaW5nV2hpdGVzcGFj
ZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNl
ID0gbV9kb3duc3RyZWFtRW5kLnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZpc2libGVQb3Np
dGlvbjo6ZGVmYXVsdEFmZmluaXR5KTsKIAogICAgIGlmIChtX3NtYXJ0RGVsZXRlKSB7CiAgICAg
CiAgICAgICAgIC8vIHNraXAgc21hcnQgZGVsZXRlIGlmIHRoZSBzZWxlY3Rpb24gdG8gZGVsZXRl
IGFscmVhZHkgc3RhcnRzIG9yIGVuZHMgd2l0aCB3aGl0ZXNwYWNlCiAgICAgICAgIFBvc2l0aW9u
IHBvcyA9IFZpc2libGVQb3NpdGlvbihtX3Vwc3RyZWFtU3RhcnQsIG1fc2VsZWN0aW9uVG9EZWxl
dGUuYWZmaW5pdHkoKSkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgYm9vbCBza2lwU21hcnRE
ZWxldGUgPSBwb3MudHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVMVF9BRkZJTklU
WSwgdHJ1ZSkuaXNOb3ROdWxsKCk7CisgICAgICAgIGJvb2wgc2tpcFNtYXJ0RGVsZXRlID0gcG9z
LnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZpc2libGVQb3NpdGlvbjo6ZGVmYXVsdEFmZmlu
aXR5LCB0cnVlKS5pc05vdE51bGwoKTsKICAgICAgICAgaWYgKCFza2lwU21hcnREZWxldGUpCi0g
ICAgICAgICAgICBza2lwU21hcnREZWxldGUgPSBtX2Rvd25zdHJlYW1FbmQubGVhZGluZ1doaXRl
c3BhY2VQb3NpdGlvbihWUF9ERUZBVUxUX0FGRklOSVRZLCB0cnVlKS5pc05vdE51bGwoKTsKKyAg
ICAgICAgICAgIHNraXBTbWFydERlbGV0ZSA9IG1fZG93bnN0cmVhbUVuZC5sZWFkaW5nV2hpdGVz
cGFjZVBvc2l0aW9uKFZpc2libGVQb3NpdGlvbjo6ZGVmYXVsdEFmZmluaXR5LCB0cnVlKS5pc05v
dE51bGwoKTsKIAogICAgICAgICAvLyBleHRlbmQgc2VsZWN0aW9uIHVwc3RyZWFtIGlmIHRoZXJl
IGlzIHdoaXRlc3BhY2UgdGhlcmUKICAgICAgICAgYm9vbCBoYXNMZWFkaW5nV2hpdGVzcGFjZUJl
Zm9yZUFkanVzdG1lbnQgPSBtX3Vwc3RyZWFtU3RhcnQubGVhZGluZ1doaXRlc3BhY2VQb3NpdGlv
bihtX3NlbGVjdGlvblRvRGVsZXRlLmFmZmluaXR5KCksIHRydWUpLmlzTm90TnVsbCgpOwogICAg
ICAgICBpZiAoIXNraXBTbWFydERlbGV0ZSAmJiBoYXNMZWFkaW5nV2hpdGVzcGFjZUJlZm9yZUFk
anVzdG1lbnQpIHsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gVmlz
aWJsZVBvc2l0aW9uKG1fdXBzdHJlYW1TdGFydCwgVlBfREVGQVVMVF9BRkZJTklUWSkucHJldmlv
dXMoKTsKKyAgICAgICAgICAgIGF1dG8gdmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbihtX3Vw
c3RyZWFtU3RhcnQpLnByZXZpb3VzKCk7CiAgICAgICAgICAgICBwb3MgPSB2aXNpYmxlUG9zLmRl
ZXBFcXVpdmFsZW50KCk7CiAgICAgICAgICAgICAvLyBFeHBhbmQgb3V0IG9uZSBjaGFyYWN0ZXIg
dXBzdHJlYW0gZm9yIHNtYXJ0IGRlbGV0ZSBhbmQgcmVjYWxjdWxhdGUKICAgICAgICAgICAgIC8v
IHBvc2l0aW9ucyBiYXNlZCBvbiB0aGlzIGNoYW5nZS4KQEAgLTMwMSwxMyArMzAxLDEzIEBAIGJv
b2wgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aW5pdGlhbGl6ZVBvc2l0aW9uRGF0YSgpCiAgICAg
ICAgIAogICAgICAgICAvLyB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIG9ubHkgY29uc2lkZXJlZCBm
b3Igc21hcnQgZGVsZXRlIGlmIHRoZXJlIGlzIG5vIGxlYWRpbmcKICAgICAgICAgLy8gd2hpdGVz
cGFjZSwgYXMgaW4gdGhlIGNhc2Ugd2hlcmUgeW91IGRvdWJsZS1jbGljayB0aGUgZmlyc3Qgd29y
ZCBvZiBhIHBhcmFncmFwaC4KLSAgICAgICAgaWYgKCFza2lwU21hcnREZWxldGUgJiYgIWhhc0xl
YWRpbmdXaGl0ZXNwYWNlQmVmb3JlQWRqdXN0bWVudCAmJiBtX2Rvd25zdHJlYW1FbmQudHJhaWxp
bmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSkuaXNOb3ROdWxs
KCkpIHsKKyAgICAgICAgaWYgKCFza2lwU21hcnREZWxldGUgJiYgIWhhc0xlYWRpbmdXaGl0ZXNw
YWNlQmVmb3JlQWRqdXN0bWVudCAmJiBtX2Rvd25zdHJlYW1FbmQudHJhaWxpbmdXaGl0ZXNwYWNl
UG9zaXRpb24oVmlzaWJsZVBvc2l0aW9uOjpkZWZhdWx0QWZmaW5pdHksIHRydWUpLmlzTm90TnVs
bCgpKSB7CiAgICAgICAgICAgICAvLyBFeHBhbmQgb3V0IG9uZSBjaGFyYWN0ZXIgZG93bnN0cmVh
bSBmb3Igc21hcnQgZGVsZXRlIGFuZCByZWNhbGN1bGF0ZQogICAgICAgICAgICAgLy8gcG9zaXRp
b25zIGJhc2VkIG9uIHRoaXMgY2hhbmdlLgotICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0
aW9uKG1fZG93bnN0cmVhbUVuZCwgVlBfREVGQVVMVF9BRkZJTklUWSkubmV4dCgpLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9kb3duc3RyZWFt
RW5kKS5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgICAgIG1fdXBzdHJlYW1FbmQg
PSBwb3MudXBzdHJlYW0oKTsKICAgICAgICAgICAgIG1fZG93bnN0cmVhbUVuZCA9IHBvcy5kb3du
c3RyZWFtKCk7Ci0gICAgICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZSA9IG1fZG93bnN0cmVh
bUVuZC50cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAg
ICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlID0gbV9kb3duc3RyZWFtRW5kLnRyYWlsaW5n
V2hpdGVzcGFjZVBvc2l0aW9uKFZpc2libGVQb3NpdGlvbjo6ZGVmYXVsdEFmZmluaXR5KTsKIAog
ICAgICAgICAgICAgc2V0U3RhcnRpbmdTZWxlY3Rpb25PblNtYXJ0RGVsZXRlKG1fZG93bnN0cmVh
bVN0YXJ0LCBtX2Rvd25zdHJlYW1FbmQpOwogICAgICAgICB9CkBAIC02MDAsNyArNjAwLDcgQEAg
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAg
ICAgCiAgICAgICAgIC8vIGhhbmRsZSBkZWxldGluZyBhbGwgbm9kZXMgdGhhdCBhcmUgY29tcGxl
dGVseSBzZWxlY3RlZAogICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9IG1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkTm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9u
cyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZS5nZXQoKSksIG1fZG93bnN0cmVhbUVu
ZCkgPj0gMCkgeworICAgICAgICAgICAgaWYgKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShu
b2RlLmdldCgpKSA+PSBtX2Rvd25zdHJlYW1FbmQpIHsKICAgICAgICAgICAgICAgICAvLyBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbiBqdXN0IGJsZXcgcGFzdCB0aGUgZW5kIHBv
c2l0aW9uLCBzbyBzdG9wIGRlbGV0aW5nCiAgICAgICAgICAgICAgICAgbm9kZSA9IG51bGxwdHI7
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUo
KS0+aXNEZXNjZW5kYW50T2YoKm5vZGUpKSB7CkBAIC02OTEsMTcgKzY5MSwxMiBAQCB2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocygpCiAgICAgQVNTRVJUKCFtX3By
dW5lU3RhcnRCbG9ja0lmTmVjZXNzYXJ5KTsKIAogICAgIC8vIEZJWE1FOiBEZWxldGlvbiBzaG91
bGQgYWRqdXN0IHNlbGVjdGlvbiBlbmRwb2ludHMgYXMgaXQgcmVtb3ZlcyBub2RlcyBzbyB0aGF0
IHdlIG5ldmVyIGdldCBpbnRvIHRoaXMgc3RhdGUgKDQwOTk4MzkpLgotICAgIGlmIChtX2Rvd25z
dHJlYW1FbmQuaXNOdWxsKCkgfHwgbV91cHN0cmVhbVN0YXJ0LmlzTnVsbCgpIHx8ICFtX2Rvd25z
dHJlYW1FbmQuYW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgpIHx8ICFtX3Vwc3RyZWFtU3RhcnQu
YW5jaG9yTm9kZSgpLT5pc0Nvbm5lY3RlZCgpKQotICAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
RklYTUU6IFRoZSBkZWxldGlvbiBhbGdvcml0aG0gc2hvdWxkbid0IGxldCB0aGlzIGhhcHBlbi4K
LSAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhtX3Vwc3RyZWFtU3RhcnQsIG1fZG93bnN0cmVhbUVu
ZCkgPiAwKQorICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuaXNOdWxsKCkgfHwgbV91cHN0cmVhbVN0
YXJ0LmlzTnVsbCgpIHx8IG1fZG93bnN0cmVhbUVuZC5pc09ycGhhbigpIHx8IG1fdXBzdHJlYW1T
dGFydC5pc09ycGhhbigpKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIC8vIFRoZXJl
J3Mgbm90aGluZyB0byBtZXJnZS4KLSAgICBpZiAobV91cHN0cmVhbVN0YXJ0ID09IG1fZG93bnN0
cmVhbUVuZCkKKworICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQgPj0gbV9kb3duc3RyZWFtRW5kKQog
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQ
YXJhZ3JhcGhUb01vdmUobV9kb3duc3RyZWFtRW5kKTsKICAgICBWaXNpYmxlUG9zaXRpb24gbWVy
Z2VEZXN0aW5hdGlvbihtX3Vwc3RyZWFtU3RhcnQpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZy5jcHAKaW5kZXggNmIxODRjYTg1N2NhN2VlY2E1MWQ2YmFmZjU1NGI1YTIxNTI1NzdkYS4u
YjIyNzdjZWM0MTdlZTg2M2NhNDIzYmEzZGFiMDRlZTIxMjYwZWM0MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmcuY3BwCkBAIC03OSwyMyArNzksNiBAQCBib29sIGlzQXRvbWljTm9kZShjb25z
dCBOb2RlKiBub2RlKQogICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hpbGROb2Rlcygp
IHx8IGVkaXRpbmdJZ25vcmVzQ29udGVudCgqbm9kZSkpOwogfQogCi0vLyBGSVhNRTogQ2hhbmdl
IGNhbGxlcnMgdG8gdXNlIGRvY3VtZW50T3JkZXIgYW5kIGRlbGV0ZSB0aGlzLgotaW50IGNvbXBh
cmVQb3NpdGlvbnMoY29uc3QgUG9zaXRpb24mIGEsIGNvbnN0IFBvc2l0aW9uJiBiKQotewotICAg
IGF1dG8gb3JkZXJpbmcgPSBkb2N1bWVudE9yZGVyKGEsIGIpOwotICAgIGlmIChpc19sdChvcmRl
cmluZykpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoaXNfZ3Qob3JkZXJpbmcpKQotICAg
ICAgICByZXR1cm4gMTsKLSAgICByZXR1cm4gMDsKLX0KLQotLy8gRklYTUU6IENoYW5nZSBjYWxs
ZXJzIHRvIHVzZSBkb2N1bWVudE9yZGVyIGFuZCBkZWxldGUgdGhpcy4KLWludCBjb21wYXJlUG9z
aXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBi
KQotewotICAgIHJldHVybiBjb21wYXJlUG9zaXRpb25zKGEuZGVlcEVxdWl2YWxlbnQoKSwgYi5k
ZWVwRXF1aXZhbGVudCgpKTsKLX0KLQogQ29udGFpbmVyTm9kZSogaGlnaGVzdEVkaXRhYmxlUm9v
dChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIEVkaXRhYmxlVHlwZSBlZGl0YWJsZVR5cGUpCiB7
CiAgICAgQ29udGFpbmVyTm9kZSogaGlnaGVzdEVkaXRhYmxlUm9vdCA9IGVkaXRhYmxlUm9vdEZv
clBvc2l0aW9uKHBvc2l0aW9uLCBlZGl0YWJsZVR5cGUpOwpAQCAtMjY5LDcgKzI1Miw3IEBAIFBv
c2l0aW9uIGZpcnN0RWRpdGFibGVQb3NpdGlvbkFmdGVyUG9zaXRpb25JblJvb3QoY29uc3QgUG9z
aXRpb24mIHBvc2l0aW9uLCBDb250CiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyBwb3Np
dGlvbiBmYWxscyBiZWZvcmUgaGlnaGVzdFJvb3QuCi0gICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMo
cG9zaXRpb24sIGZpcnN0UG9zaXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpKSA9PSAtMSAmJiBoaWdo
ZXN0Um9vdC0+aGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGlmIChwb3NpdGlvbiA8IGZpcnN0UG9z
aXRpb25Jbk5vZGUoaGlnaGVzdFJvb3QpICYmIGhpZ2hlc3RSb290LT5oYXNFZGl0YWJsZVN0eWxl
KCkpCiAgICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5Ob2RlKGhpZ2hlc3RSb290KTsKIAog
ICAgIFBvc2l0aW9uIGNhbmRpZGF0ZSA9IHBvc2l0aW9uOwpAQCAtMjk3LDcgKzI4MCw3IEBAIFBv
c2l0aW9uIGxhc3RFZGl0YWJsZVBvc2l0aW9uQmVmb3JlUG9zaXRpb25JblJvb3QoY29uc3QgUG9z
aXRpb24mIHBvc2l0aW9uLCBDb250CiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyBXaGVu
IHBvc2l0aW9uIGZhbGxzIGFmdGVyIGhpZ2hlc3RSb290LCB0aGUgcmVzdWx0IGlzIGVhc3kgdG8g
Y29tcHV0ZS4KLSAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbiwgbGFzdFBvc2l0aW9u
SW5Ob2RlKGhpZ2hlc3RSb290KSkgPT0gMSkKKyAgICBpZiAocG9zaXRpb24gPiBsYXN0UG9zaXRp
b25Jbk5vZGUoaGlnaGVzdFJvb3QpKQogICAgICAgICByZXR1cm4gbGFzdFBvc2l0aW9uSW5Ob2Rl
KGhpZ2hlc3RSb290KTsKIAogICAgIFBvc2l0aW9uIGNhbmRpZGF0ZSA9IHBvc2l0aW9uOwpAQCAt
MTE0OCwxMSArMTEzMSwxMSBAQCBib29sIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oTm9k
ZSYgbm9kZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgIGF1dG8gZW5kUG9zaXRpb24g
PSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5kKTsKIAogICAgIGJvb2wgc3Rh
cnRJc1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUobm9kZSkgPT0gc3Rh
cnRQb3NpdGlvbjsKLSAgICBpZiAoc3RhcnRJc1Zpc3VhbGx5U2FtZSAmJiBjb21wYXJlUG9zaXRp
b25zKHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUoJm5vZGUpLCBlbmRQb3NpdGlvbikgPCAwKQor
ICAgIGlmIChzdGFydElzVmlzdWFsbHlTYW1lICYmIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUo
Jm5vZGUpIDwgZW5kUG9zaXRpb24pCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYm9vbCBl
bmRJc1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShub2RlKSA9PSBlbmRQ
b3NpdGlvbjsKLSAgICBpZiAoZW5kSXNWaXN1YWxseVNhbWUgJiYgY29tcGFyZVBvc2l0aW9ucyhz
dGFydFBvc2l0aW9uLCBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZSgmbm9kZSkpIDwgMCkKKyAg
ICBpZiAoZW5kSXNWaXN1YWxseVNhbWUgJiYgc3RhcnRQb3NpdGlvbiA8IHBvc2l0aW9uSW5QYXJl
bnRCZWZvcmVOb2RlKCZub2RlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4g
c3RhcnRJc1Zpc3VhbGx5U2FtZSAmJiBlbmRJc1Zpc3VhbGx5U2FtZTsKQEAgLTEyNjAsMTMgKzEy
NDMsOCBAQCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0SW5SZW5kZXJlckZvckNhcmV0UGFpbnRp
bmcoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjYXJldAogewogICAgIGlmIChjYXJldFBvc2l0aW9u
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotCiAgICAgQVNTRVJUKGNh
cmV0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigp
KTsKLQotICAgIC8vIEZpcnN0IGNvbXB1dGUgYSByZWN0IGxvY2FsIHRvIHRoZSByZW5kZXJlciBh
dCB0aGUgc2VsZWN0aW9uIHN0YXJ0LgotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXI7Ci0gICAg
TGF5b3V0UmVjdCBsb2NhbFJlY3QgPSBjYXJldFBvc2l0aW9uLmxvY2FsQ2FyZXRSZWN0KHJlbmRl
cmVyKTsKLQorICAgIGF1dG8gW2xvY2FsUmVjdCwgcmVuZGVyZXJdID0gY2FyZXRQb3NpdGlvbi5s
b2NhbENhcmV0UmVjdCgpOwogICAgIHJldHVybiBsb2NhbENhcmV0UmVjdEluUmVuZGVyZXJGb3JS
ZWN0KGxvY2FsUmVjdCwgY2FyZXRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRO
b2RlKCksIHJlbmRlcmVyLCBjYXJldFBhaW50ZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Zy5oCmluZGV4IDkyZThiNmZkYTA2NTYyNzcxMzgxMjQzYjM4MDJiMGM2NDkyNDQ0ZmMuLmQxNDQ4
Zjk1MDJmZGU5YmFhYjc4Y2ZlNTdiNmI4ZjZmMTgyZWQwMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZy5oCkBAIC0xMjcsOCArMTI3LDYgQEAgUG9zaXRpb24gbGFzdFBvc2l0aW9uSW5PckFmdGVy
Tm9kZShOb2RlKik7CiBQb3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9u
SW5Sb290KGNvbnN0IFBvc2l0aW9uJiwgQ29udGFpbmVyTm9kZSogcm9vdCk7CiBQb3NpdGlvbiBs
YXN0RWRpdGFibGVQb3NpdGlvbkJlZm9yZVBvc2l0aW9uSW5Sb290KGNvbnN0IFBvc2l0aW9uJiwg
Q29udGFpbmVyTm9kZSogcm9vdCk7CiAKLVdFQkNPUkVfRVhQT1JUIGludCBjb21wYXJlUG9zaXRp
b25zKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKLQogV0VCQ09SRV9FWFBPUlQg
Ym9vbCBpc0VkaXRhYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mLCBFZGl0YWJsZVR5cGUgPSBD
b250ZW50SXNFZGl0YWJsZSk7CiBib29sIGlzUmljaGx5RWRpdGFibGVQb3NpdGlvbihjb25zdCBQ
b3NpdGlvbiYpOwogYm9vbCBsaW5lQnJlYWtFeGlzdHNBdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9u
Jik7CkBAIC0xNDgsOCArMTQ2LDYgQEAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkFm
dGVyTm9kZShOb2RlJik7CiAKIGJvb2wgbGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKLVdFQkNPUkVfRVhQT1JUIGludCBjb21wYXJlUG9z
aXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwot
CiBXRUJDT1JFX0VYUE9SVCBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiwgUmVmUHRyPENvbnRhaW5lck5vZGU+JiBzY29wZSk7CiBpbnQgaW5kZXhGb3JW
aXNpYmxlUG9zaXRpb24oTm9kZSYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGJvb2wgZm9yU2Vs
ZWN0aW9uUHJlc2VydmF0aW9uKTsKIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhPZmZzZXQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwg
aW50IG9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggYTkyY2FmYjU5ODc0
YjIzNzliMjJjMmZhNGJiMjI0ZWQ2ZTI3NzUwNi4uNGQ0YThjYzQ0ZjkwMTJmY2ViNGM5NDQ3OWIw
NTU5MTliNTQ0N2QyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMjQ1Miw3ICsy
NDUyLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVjdGkKICAgICBtYXJrTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hcihtb3ZpbmdTZWxlY3Rpb24sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKCkgJiYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1vdmluZ1NlbGVjdGlvbik7CiB9
CiAKLXZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpCit2b2lkIEVkaXRvcjo6bWFya01p
c3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgd29yZFN0
YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZywgYm9vbCBk
b1JlcGxhY2VtZW50KQogewogICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdGVkRG9jdW1lbnQobV9k
b2N1bWVudCk7CiAKQEAgLTQyMzMsNyArNDIzMyw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBF
ZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKQogICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rl
ZFJhbmdlKCk7CiAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgIGlmIChhdXRvIGVuY2xvc2luZ0Fu
Y2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29tbW9u
SW5jbHVzaXZlQW5jZXN0b3IoKnJhbmdlKS5nZXQoKSksIEhUTUxOYW1lczo6YVRhZykpIHsKLSAg
ICAgICAgICAgIGlmIChjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9k
ZShyYW5nZS0+c3RhcnQuY29udGFpbmVyLnB0cigpKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKHJhbmdlLT5zdGFydCkpID49IDApCisgICAgICAgICAgICBpZiAoZmlyc3RQb3NpdGlvbklu
T3JCZWZvcmVOb2RlKHJhbmdlLT5zdGFydC5jb250YWluZXIucHRyKCkpID49IGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihyYW5nZS0+c3RhcnQpKQogICAgICAgICAgICAgICAgIHJhbmdlLT5z
dGFydCA9IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbmNsb3NpbmdBbmNo
b3IpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggYTA5MmRm
Zjg1ZjYyMDBhMDhjYWZmZTliOTVhOGEyMzYzMjM2MmIwZC4uYWEzNTE1YzRlODgxODFmOGFhM2M5
ODAwNTBmMjUwZmM4YzI4MjRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0zMjIsNyAr
MzIyLDcgQEAgcHVibGljOgogICAgIFRleHRDaGVja2luZ0d1ZXNzZXMgZ3Vlc3Nlc0Zvck1pc3Nw
ZWxsZWRPclVuZ3JhbW1hdGljYWwoKTsKICAgICBib29sIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRJ
bkZvY3VzZWROb2RlKCkgY29uc3Q7CiAgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9y
KE5vZGUqKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1hcmtNaXNzcGVsbGluZ3NB
ZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcsIGJvb2wgZG9SZXBsYWNlbWVu
dCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdU
b1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpOwogICAgIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mKTsgLy8gUmV0dXJucyBmaXJzdCBtaXNzcGVsbGluZyByYW5nZS4KICAgICB2b2lkIG1hcmtC
YWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKICAgICB2b2lkIG1hcmtNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWN0
aW9uLCBib29sIG1hcmtHcmFtbWFyLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBncmFtbWFyU2Vs
ZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXgg
ZmQwNmY2NGZjMDU1MzliYTQ5YWI1Yzc1MjVlNGFkNzI1ZGIwOTk5Ni4uZTFiOThlMWMxNTIyNzhk
ZmRlMjViM2QzMWZkMDA3ODhhM2VlMTY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAKQEAgLTE4OSwyNCArMTg5LDI0IEBAIEVsZW1lbnQqIEZyYW1lU2VsZWN0
aW9uOjpyb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVsZW1lbnQoKSBjb25zdAogICAgIHJl
dHVybiBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IG1fZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpOwogfQogCi12b2lkIEZyYW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZwb3MsIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQsIEN1cnNvckFsaWdu
T25TY3JvbGwgYWxpZ24pCit2b2lkIEZyYW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBwb3NpdGlvbiwgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCwgQ3Vyc29y
QWxpZ25PblNjcm9sbCBhbGlnbikKIHsKLSAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bihwb3MuZGVlcEVxdWl2YWxlbnQoKSwgcG9zLmRlZXBFcXVpdmFsZW50KCksIHBvcy5hZmZpbml0
eSgpLCBtX3NlbGVjdGlvbi5pc0RpcmVjdGlvbmFsKCkpLAorICAgIHNldFNlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCksIHBvc2l0aW9uLmRlZXBFcXVp
dmFsZW50KCksIHBvc2l0aW9uLmFmZmluaXR5KCksIG1fc2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwo
KSksCiAgICAgICAgIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKHVzZXJUcmlnZ2VyZWQpLCBB
WFRleHRTdGF0ZUNoYW5nZUludGVudCgpLCBhbGlnbik7CiB9CiAKLXZvaWQgRnJhbWVTZWxlY3Rp
b246Om1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24gJmJhc2UsIGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmZXh0ZW50LCBFVXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQordm9pZCBGcmFtZVNl
bGVjdGlvbjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYmFzZSwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBleHRlbnQsIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQpCiB7CiAgICAg
Y29uc3QgYm9vbCBzZWxlY3Rpb25IYXNEaXJlY3Rpb24gPSB0cnVlOwogICAgIHNldFNlbGVjdGlv
bihWaXNpYmxlU2VsZWN0aW9uKGJhc2UuZGVlcEVxdWl2YWxlbnQoKSwgZXh0ZW50LmRlZXBFcXVp
dmFsZW50KCksIGJhc2UuYWZmaW5pdHkoKSwgc2VsZWN0aW9uSGFzRGlyZWN0aW9uKSwgZGVmYXVs
dFNldFNlbGVjdGlvbk9wdGlvbnModXNlclRyaWdnZXJlZCkpOwogfQogCi12b2lkIEZyYW1lU2Vs
ZWN0aW9uOjptb3ZlVG8oY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBF
VXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRv
KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBFVXNlclRyaWdn
ZXJlZCB1c2VyVHJpZ2dlcmVkKQogewotICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KHBvcywgYWZmaW5pdHksIG1fc2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwoKSksIGRlZmF1bHRTZXRT
ZWxlY3Rpb25PcHRpb25zKHVzZXJUcmlnZ2VyZWQpKTsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihwb3NpdGlvbiwgYWZmaW5pdHksIG1fc2VsZWN0aW9uLmlzRGlyZWN0aW9uYWwo
KSksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKHVzZXJUcmlnZ2VyZWQpKTsKIH0KIAotdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6bW92ZVRvKGNvbnN0IFBvc2l0aW9uICZiYXNlLCBjb25zdCBQb3Np
dGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgYWZmaW5pdHksIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmln
Z2VyZWQpCit2b2lkIEZyYW1lU2VsZWN0aW9uOjptb3ZlVG8oY29uc3QgUG9zaXRpb24mIGJhc2Us
IGNvbnN0IFBvc2l0aW9uJiBleHRlbnQsIEVBZmZpbml0eSBhZmZpbml0eSwgRVVzZXJUcmlnZ2Vy
ZWQgdXNlclRyaWdnZXJlZCkKIHsKICAgICBjb25zdCBib29sIHNlbGVjdGlvbkhhc0RpcmVjdGlv
biA9IHRydWU7CiAgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oYmFzZSwgZXh0ZW50
LCBhZmZpbml0eSwgc2VsZWN0aW9uSGFzRGlyZWN0aW9uKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9w
dGlvbnModXNlclRyaWdnZXJlZCkpOwpAQCAtMzA4LDcgKzMwOCw3IEBAIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNldFNlbGVjdGlvbkJ5TW91c2VJZkRpZmZlcmVudChjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBwYXNzCiAgICAgfSBlbHNlIGlmIChtX29yaWdpbmFsQmFzZS5pc05vdE51bGwoKSkgewog
ICAgICAgICBpZiAobV9zZWxlY3Rpb24uYmFzZSgpID09IG5ld1NlbGVjdGlvbi5iYXNlKCkpCiAg
ICAgICAgICAgICBuZXdTZWxlY3Rpb24uc2V0QmFzZShtX29yaWdpbmFsQmFzZSk7Ci0gICAgICAg
IG1fb3JpZ2luYWxCYXNlLmNsZWFyKCk7CisgICAgICAgIG1fb3JpZ2luYWxCYXNlID0geyB9Owog
ICAgIH0KIAogICAgIG5ld1NlbGVjdGlvbi5zZXRJc0RpcmVjdGlvbmFsKGlzRGlyZWN0aW9uYWwp
OyAvLyBBZGp1c3RpbmcgYmFzZSBhbmQgZXh0ZW50IHdpbGwgbWFrZSBuZXdTZWxlY3Rpb24gYWx3
YXlzIGRpcmVjdGlvbmFsCkBAIC02MzMsMjAgKzYzMywxNCBAQCBUZXh0RGlyZWN0aW9uIEZyYW1l
U2VsZWN0aW9uOjpkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkKIAogVGV4dERpcmVjdGlvbiBG
cmFtZVNlbGVjdGlvbjo6ZGlyZWN0aW9uT2ZTZWxlY3Rpb24oKQogewotICAgIElubGluZUJveCog
c3RhcnRCb3ggPSBudWxscHRyOwotICAgIElubGluZUJveCogZW5kQm94ID0gbnVsbHB0cjsKLSAg
ICBpbnQgdW51c2VkT2Zmc2V0OwotICAgIC8vIENhY2hlIHRoZSBWaXNpYmxlUG9zaXRpb25zIGJl
Y2F1c2UgdmlzaWJsZVN0YXJ0KCkgYW5kIHZpc2libGVFbmQoKQorICAgIC8vIEdldCBib3QgVmlz
aWJsZVBvc2l0aW9ucyBmaXJzdCBiZWNhdXNlIHZpc2libGVTdGFydCgpIGFuZCB2aXNpYmxlRW5k
KCkKICAgICAvLyBjYW4gY2F1c2UgbGF5b3V0LCB3aGljaCBoYXMgdGhlIHBvdGVudGlhbCB0byBp
bnZhbGlkYXRlIGxpbmVib3hlcy4KLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9
IG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3Np
dGlvbiA9IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKLSAgICBpZiAoc3RhcnRQb3NpdGlvbi5p
c05vdE51bGwoKSkKLSAgICAgICAgc3RhcnRQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQo
c3RhcnRCb3gsIHVudXNlZE9mZnNldCk7Ci0gICAgaWYgKGVuZFBvc2l0aW9uLmlzTm90TnVsbCgp
KQotICAgICAgICBlbmRQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoZW5kQm94LCB1bnVz
ZWRPZmZzZXQpOworICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IG1fc2VsZWN0aW9uLnZpc2libGVT
dGFydCgpOworICAgIGF1dG8gZW5kUG9zaXRpb24gPSBtX3NlbGVjdGlvbi52aXNpYmxlRW5kKCk7
CisgICAgYXV0byBzdGFydEJveCA9IHN0YXJ0UG9zaXRpb24uaW5saW5lQm94QW5kT2Zmc2V0KCku
Ym94OworICAgIGF1dG8gZW5kQm94ID0gZW5kUG9zaXRpb24uaW5saW5lQm94QW5kT2Zmc2V0KCku
Ym94OwogICAgIGlmIChzdGFydEJveCAmJiBlbmRCb3ggJiYgc3RhcnRCb3gtPmRpcmVjdGlvbigp
ID09IGVuZEJveC0+ZGlyZWN0aW9uKCkpCiAgICAgICAgIHJldHVybiBzdGFydEJveC0+ZGlyZWN0
aW9uKCk7Ci0KICAgICByZXR1cm4gZGlyZWN0aW9uT2ZFbmNsb3NpbmdCbG9jaygpOwogfQogCkBA
IC03MjEsNyArNzE1LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEZyYW1lU2VsZWN0aW9uOjplbmRGb3JQ
bGF0Zm9ybSgpIGNvbnN0CiAgICAgcmV0dXJuIHBvc2l0aW9uRm9yUGxhdGZvcm0oZmFsc2UpOwog
fQogCi1WaXNpYmxlUG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQ
bGF0Zm9ybShjb25zdCBWaXNpYmxlUG9zaXRpb24gJm9yaWdpbmFsUG9zaXRpb24pCitWaXNpYmxl
UG9zaXRpb24gRnJhbWVTZWxlY3Rpb246Om5leHRXb3JkUG9zaXRpb25Gb3JQbGF0Zm9ybShjb25z
dCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsUG9zaXRpb24pCiB7CiAgICAgVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCA9IG5leHRXb3JkUG9zaXRpb24ob3JpZ2luYWxQ
b3NpdGlvbik7CiAKQEAgLTE0MzQsNyArMTQyOCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246Om1v
ZGlmeShFQWx0ZXJhdGlvbiBhbHRlciwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4
CiB9CiAKIC8vIEZJWE1FOiBNYXliZSBiYXNlbGluZSB3b3VsZCBiZSBiZXR0ZXI/Ci1zdGF0aWMg
Ym9vbCBhYnNvbHV0ZUNhcmV0WShjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMsIGludCAmeSkKK3N0
YXRpYyBib29sIGFic29sdXRlQ2FyZXRZKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgaW50JiB5
KQogewogICAgIEludFJlY3QgcmVjdCA9IGMuYWJzb2x1dGVDYXJldEJvdW5kcygpOwogICAgIGlm
IChyZWN0LmlzRW1wdHkoKSkKQEAgLTE1ODcsNDQgKzE1ODEsNDQgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpCiAgICAgbV9hcHBlYXJhbmNlVXBkYXRlVGlt
ZXIuc3RvcCgpOwogfQogCi12b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTdGFydChjb25zdCBWaXNp
YmxlUG9zaXRpb24gJnBvcywgRVVzZXJUcmlnZ2VyZWQgdHJpZ2dlcikKK3ZvaWQgRnJhbWVTZWxl
Y3Rpb246OnNldFN0YXJ0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIEVVc2VyVHJp
Z2dlcmVkIHRyaWdnZXIpCiB7CiAgICAgaWYgKG1fc2VsZWN0aW9uLmlzQmFzZUZpcnN0KCkpCi0g
ICAgICAgIHNldEJhc2UocG9zLCB0cmlnZ2VyKTsKKyAgICAgICAgc2V0QmFzZShwb3NpdGlvbiwg
dHJpZ2dlcik7CiAgICAgZWxzZQotICAgICAgICBzZXRFeHRlbnQocG9zLCB0cmlnZ2VyKTsKKyAg
ICAgICAgc2V0RXh0ZW50KHBvc2l0aW9uLCB0cmlnZ2VyKTsKIH0KIAotdm9pZCBGcmFtZVNlbGVj
dGlvbjo6c2V0RW5kKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcG9zLCBFVXNlclRyaWdnZXJlZCB0
cmlnZ2VyKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0RW5kKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgcG9zaXRpb24sIEVVc2VyVHJpZ2dlcmVkIHRyaWdnZXIpCiB7CiAgICAgaWYgKG1fc2VsZWN0
aW9uLmlzQmFzZUZpcnN0KCkpCi0gICAgICAgIHNldEV4dGVudChwb3MsIHRyaWdnZXIpOworICAg
ICAgICBzZXRFeHRlbnQocG9zaXRpb24sIHRyaWdnZXIpOwogICAgIGVsc2UKLSAgICAgICAgc2V0
QmFzZShwb3MsIHRyaWdnZXIpOworICAgICAgICBzZXRCYXNlKHBvc2l0aW9uLCB0cmlnZ2VyKTsK
IH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0QmFzZShjb25zdCBWaXNpYmxlUG9zaXRpb24g
JnBvcywgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKK3ZvaWQgRnJhbWVTZWxlY3Rpb246
OnNldEJhc2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgRVVzZXJUcmlnZ2VyZWQg
dXNlclRyaWdnZXJlZCkKIHsKICAgICBjb25zdCBib29sIHNlbGVjdGlvbkhhc0RpcmVjdGlvbiA9
IHRydWU7Ci0gICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zLmRlZXBFcXVpdmFs
ZW50KCksIG1fc2VsZWN0aW9uLmV4dGVudCgpLCBwb3MuYWZmaW5pdHkoKSwgc2VsZWN0aW9uSGFz
RGlyZWN0aW9uKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnModXNlclRyaWdnZXJlZCkpOwor
ICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCksIG1fc2VsZWN0aW9uLmV4dGVudCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBzZWxlY3Rpb25I
YXNEaXJlY3Rpb24pLCBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyh1c2VyVHJpZ2dlcmVkKSk7
CiB9CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRp
b24gJnBvcywgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKK3ZvaWQgRnJhbWVTZWxlY3Rp
b246OnNldEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBFVXNlclRyaWdn
ZXJlZCB1c2VyVHJpZ2dlcmVkKQogewogICAgIGNvbnN0IGJvb2wgc2VsZWN0aW9uSGFzRGlyZWN0
aW9uID0gdHJ1ZTsKLSAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihtX3NlbGVjdGlv
bi5iYXNlKCksIHBvcy5kZWVwRXF1aXZhbGVudCgpLCBwb3MuYWZmaW5pdHkoKSwgc2VsZWN0aW9u
SGFzRGlyZWN0aW9uKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnModXNlclRyaWdnZXJlZCkp
OworICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKG1fc2VsZWN0aW9uLmJhc2UoKSwg
cG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgc2VsZWN0aW9u
SGFzRGlyZWN0aW9uKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnModXNlclRyaWdnZXJlZCkp
OwogfQogCi12b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRCYXNlKGNvbnN0IFBvc2l0aW9uICZwb3Ms
IEVBZmZpbml0eSBhZmZpbml0eSwgRVVzZXJUcmlnZ2VyZWQgdXNlclRyaWdnZXJlZCkKK3ZvaWQg
RnJhbWVTZWxlY3Rpb246OnNldEJhc2UoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBFQWZmaW5p
dHkgYWZmaW5pdHksIEVVc2VyVHJpZ2dlcmVkIHVzZXJUcmlnZ2VyZWQpCiB7CiAgICAgY29uc3Qg
Ym9vbCBzZWxlY3Rpb25IYXNEaXJlY3Rpb24gPSB0cnVlOwotICAgIHNldFNlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKHBvcywgbV9zZWxlY3Rpb24uZXh0ZW50KCksIGFmZmluaXR5LCBzZWxlY3Rp
b25IYXNEaXJlY3Rpb24pLCBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyh1c2VyVHJpZ2dlcmVk
KSk7CisgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb24sIG1fc2VsZWN0
aW9uLmV4dGVudCgpLCBhZmZpbml0eSwgc2VsZWN0aW9uSGFzRGlyZWN0aW9uKSwgZGVmYXVsdFNl
dFNlbGVjdGlvbk9wdGlvbnModXNlclRyaWdnZXJlZCkpOwogfQogCi12b2lkIEZyYW1lU2VsZWN0
aW9uOjpzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5LCBF
VXNlclRyaWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQordm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0RXh0
ZW50KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBFVXNlclRy
aWdnZXJlZCB1c2VyVHJpZ2dlcmVkKQogewogICAgIGNvbnN0IGJvb2wgc2VsZWN0aW9uSGFzRGly
ZWN0aW9uID0gdHJ1ZTsKLSAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihtX3NlbGVj
dGlvbi5iYXNlKCksIHBvcywgYWZmaW5pdHksIHNlbGVjdGlvbkhhc0RpcmVjdGlvbiksIGRlZmF1
bHRTZXRTZWxlY3Rpb25PcHRpb25zKHVzZXJUcmlnZ2VyZWQpKTsKKyAgICBzZXRTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbihtX3NlbGVjdGlvbi5iYXNlKCksIHBvc2l0aW9uLCBhZmZpbml0eSwg
c2VsZWN0aW9uSGFzRGlyZWN0aW9uKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnModXNlclRy
aWdnZXJlZCkpOwogfQogCiB2b2lkIENhcmV0QmFzZTo6Y2xlYXJDYXJldFJlY3QoKQpAQCAtMTg5
NywyOCArMTg5MSwyMSBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpjb250YWlucyhjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgLy8gVHJlYXQgYSBjb2xsYXBzZWQgc2VsZWN0aW9u
IGxpa2Ugbm8gc2VsZWN0aW9uLgogICAgIGlmICghaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCisKKyAgICBhdXRvIHJhbmdlID0gbV9zZWxlY3Rpb24uZmlyc3RSYW5nZSgp
OworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghbV9k
b2N1bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgSGl0VGVzdFJlc3Vs
dCByZXN1bHQocG9pbnQpOwogICAgIG1fZG9jdW1lbnQtPmhpdFRlc3QoSGl0VGVzdFJlcXVlc3Qo
KSwgcmVzdWx0KTsKICAgICBOb2RlKiBpbm5lck5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CiAg
ICAgaWYgKCFpbm5lck5vZGUgfHwgIWlubmVyTm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zKGlubmVyTm9k
ZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChyZXN1bHQubG9jYWxQb2ludCgpLCBudWxs
cHRyKSk7Ci0gICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgCi0gICAgaWYgKG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLmlzTnVsbCgp
IHx8IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAKLSAgICBQb3NpdGlvbiBzdGFydChtX3NlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKS5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICBQb3NpdGlvbiBlbmQobV9zZWxlY3Rpb24udmlz
aWJsZUVuZCgpLmRlZXBFcXVpdmFsZW50KCkpOwotICAgIFBvc2l0aW9uIHAodmlzaWJsZVBvcy5k
ZWVwRXF1aXZhbGVudCgpKTsKIAotICAgIHJldHVybiBjb21wYXJlUG9zaXRpb25zKHN0YXJ0LCBw
KSA8PSAwICYmIGNvbXBhcmVQb3NpdGlvbnMocCwgZW5kKSA8PSAwOworICAgIHJldHVybiBpc1Bv
aW50SW5SYW5nZSgqcmFuZ2UsIG1ha2VCb3VuZGFyeVBvaW50KGlubmVyTm9kZS0+cmVuZGVyZXIo
KS0+cG9zaXRpb25Gb3JQb2ludChyZXN1bHQubG9jYWxQb2ludCgpLCBudWxscHRyKSkpOwogfQog
CiAvLyBXb3JrYXJvdW5kIGZvciB0aGUgZmFjdCB0aGF0IGl0J3MgaGFyZCB0byBkZWxldGUgYSBm
cmFtZS4KQEAgLTE5NTksNyArMTk0Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEZy
YW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCkKICAgICAvLyBDcmVhdGUgY29tcHV0
ZSBwb3NpdGlvbnMgYmVmb3JlIGFuZCBhZnRlciB0aGUgZWxlbWVudC4KICAgICB1bnNpZ25lZCBv
d25lckVsZW1lbnROb2RlSW5kZXggPSBvd25lckVsZW1lbnQtPmNvbXB1dGVOb2RlSW5kZXgoKTsK
ICAgICBWaXNpYmxlUG9zaXRpb24gYmVmb3JlT3duZXJFbGVtZW50KFZpc2libGVQb3NpdGlvbihQ
b3NpdGlvbihvd25lckVsZW1lbnRQYXJlbnQsIG93bmVyRWxlbWVudE5vZGVJbmRleCwgUG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gYWZ0
ZXJPd25lckVsZW1lbnQoVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG93bmVyRWxlbWVudFBhcmVu
dCwgb3duZXJFbGVtZW50Tm9kZUluZGV4ICsgMSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciksIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKSk7CisgICAgVmlzaWJsZVBvc2l0aW9u
IGFmdGVyT3duZXJFbGVtZW50KFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihvd25lckVsZW1lbnRQ
YXJlbnQsIG93bmVyRWxlbWVudE5vZGVJbmRleCArIDEsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IpLCBVcHN0cmVhbSkpOwogCiAgICAgLy8gRm9jdXMgb24gdGhlIHBhcmVudCBm
cmFtZSwgYW5kIHRoZW4gc2VsZWN0IGZyb20gYmVmb3JlIHRoaXMgZWxlbWVudCB0byBhZnRlci4K
ICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbihiZWZvcmVPd25lckVsZW1lbnQsIGFm
dGVyT3duZXJFbGVtZW50KTsKQEAgLTI1MjMsMTIgKzI1MTAsMTIgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6ZXhwYW5kU2VsZWN0aW9uVG9FbGVtZW50Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkK
IAogT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjplbGVtZW50UmFuZ2VDb250
YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSBjb25zdAogewotICAgIGF1dG8gZWxlbWVudCA9IGRlcHJl
Y2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlv
bi5zdGFydCgpLCBWUF9ERUZBVUxUX0FGRklOSVRZKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCkpOworICAgIGF1dG8gZWxlbWVudCA9IGRlcHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KG1fc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkuZGVw
cmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgYXV0byBzdGFydCA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24oZWxlbWVudCwgMCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIGF1
dG8gZW5kID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVt
ZW50LCBlbGVtZW50LT5jb3VudENoaWxkTm9kZXMoKSksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwor
ICAgIGF1dG8gc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKGVsZW1lbnQsIDApKTsKKyAgICBhdXRvIGVuZCA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudCwgZWxlbWVudC0+Y291bnRDaGlsZE5vZGVzKCkp
KTsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCkBAIC0yNTcwLDk0ICsyNTU3LDMzIEBAIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OmV4cGFuZFNlbGVjdGlvblRvU3RhcnRPZldvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rp
b24oKQogCiBVQ2hhciBGcmFtZVNlbGVjdGlvbjo6Y2hhcmFjdGVySW5SZWxhdGlvblRvQ2FyZXRT
ZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3QKIHsKLSAgICBpZiAobV9zZWxlY3Rpb24uaXNOb25l
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24g
PSBtX3NlbGVjdGlvbjsKLSAgICBBU1NFUlQoc2VsZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCkpOwot
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSwg
VlBfREVGQVVMVF9BRkZJTklUWSk7Ci0KKyAgICBhdXRvIHBvc2l0aW9uID0gbV9zZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCk7CiAgICAgaWYgKGFtb3VudCA8IDApIHsKICAgICAgICAgaW50IGNvdW50
ID0gYWJzKGFtb3VudCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgICAgIHZpc2libGVQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbi5wcmV2aW91cygp
OyAgICAKLSAgICAgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5jaGFyYWN0ZXJCZWZvcmUoKTsK
KyAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24ucHJldmlvdXMoKTsKKyAgICAgICAgcmV0
dXJuIHBvc2l0aW9uLmNoYXJhY3RlckJlZm9yZSgpOwogICAgIH0KICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGFtb3VudDsgaSsrKQotICAgICAgICB2aXNpYmxlUG9zaXRpb24gPSB2aXNpYmxlUG9z
aXRpb24ubmV4dCgpOyAgICAKLSAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmNoYXJhY3RlckFm
dGVyKCk7Ci19Ci0KLVVDaGFyIEZyYW1lU2VsZWN0aW9uOjpjaGFyYWN0ZXJCZWZvcmVDYXJldFNl
bGVjdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rp
b247Ci0gICAgQVNTRVJUKHNlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpKTsKLQotICAgIFZpc2li
bGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCksIFZQX0RFRkFVTFRf
QUZGSU5JVFkpOwotICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24uY2hhcmFjdGVyQmVmb3JlKCk7
Ci19Ci0KLVVDaGFyIEZyYW1lU2VsZWN0aW9uOjpjaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9u
KCkgY29uc3QKLXsKLSAgICBpZiAobV9zZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsKLSAg
ICBBU1NFUlQoc2VsZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCkpOwotCi0gICAgVmlzaWJsZVBvc2l0
aW9uIHZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCksIFZQX0RFRkFVTFRfQUZGSU5JVFkp
OwotICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24uY2hhcmFjdGVyQWZ0ZXIoKTsKLX0KLQotYm9v
bCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0KCkgY29uc3QKLXsKLSAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwotICAgIGlmIChzZWxl
Y3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFBvc2l0aW9uIHN0
YXJ0UG9zKHNlbGVjdGlvbi5zdGFydCgpKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zKGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihzdGFydFBvcy5kZXByZWNhdGVkTm9kZSgpLCBzdGFydFBv
cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAg
aWYgKHBvcy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGlz
U3RhcnRPZkRvY3VtZW50KHBvcyk7CisgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24ubmV4dCgp
OworICAgIHJldHVybiBwb3NpdGlvbi5jaGFyYWN0ZXJBZnRlcigpOwogfQogCiBib29sIEZyYW1l
U2VsZWN0aW9uOjpzZWxlY3Rpb25BdFdvcmRTdGFydCgpIGNvbnN0CiB7Ci0gICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsKLSAgICBpZiAoc2VsZWN0aW9uLmlzTm9u
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQb3NpdGlvbiBzdGFydFBvcyhzZWxl
Y3Rpb24uc3RhcnQoKSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24oc3RhcnRQb3MuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnRQb3MuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIGlmIChwb3MuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChpc1N0YXJ0T2ZQYXJhZ3Jh
cGgocG9zKSkKKyAgICBhdXRvIHBvc2l0aW9uID0gbV9zZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7
CisgICAgaWYgKGlzU3RhcnRPZlBhcmFncmFwaChwb3NpdGlvbikpCiAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAKLSAgICBib29sIHJlc3VsdCA9IHRydWU7CisKICAgICB1bnNpZ25lZCBw
cmV2aW91c0NvdW50ID0gMDsKLSAgICBmb3IgKHBvcyA9IHBvcy5wcmV2aW91cygpOyAhcG9zLmlz
TnVsbCgpOyBwb3MgPSBwb3MucHJldmlvdXMoKSkgeworICAgIGZvciAocG9zaXRpb24gPSBwb3Np
dGlvbi5wcmV2aW91cygpOyAhcG9zaXRpb24uaXNOdWxsKCk7IHBvc2l0aW9uID0gcG9zaXRpb24u
cHJldmlvdXMoKSkgewogICAgICAgICBwcmV2aW91c0NvdW50Kys7Ci0gICAgICAgIGlmIChpc1N0
YXJ0T2ZQYXJhZ3JhcGgocG9zKSkgewotICAgICAgICAgICAgaWYgKHByZXZpb3VzQ291bnQgPT0g
MSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIFVDaGFyIGMocG9zLmNoYXJhY3RlckFmdGVyKCkpOwotICAgICAg
ICBpZiAoYykgewotICAgICAgICAgICAgcmVzdWx0ID0gaXNTcGFjZU9yTmV3bGluZShjKSB8fCBj
ID09IG5vQnJlYWtTcGFjZSB8fCAodV9pc3B1bmN0KGMpICYmIGMgIT0gJywnICYmIGMgIT0gJy0n
ICYmIGMgIT0gJ1wnJyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBp
ZiAoaXNTdGFydE9mUGFyYWdyYXBoKHBvc2l0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBwcmV2
aW91c0NvdW50ICE9IDE7CisgICAgICAgIGlmIChVQ2hhciBjID0gcG9zaXRpb24uY2hhcmFjdGVy
QWZ0ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBpc1NwYWNlT3JOZXdsaW5lKGMpIHx8IGMgPT0g
bm9CcmVha1NwYWNlIHx8ICh1X2lzcHVuY3QoYykgJiYgYyAhPSAnLCcgJiYgYyAhPSAnLScgJiYg
YyAhPSAnXCcnKTsKICAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB0cnVl
OwogfQogCiBPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlNb3Zp
bmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CkBAIC0yNjcwLDE0ICsyNTk2LDYg
QEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0ZW5kaW5n
Q3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW4KICAgICByZXR1cm4gcmFuZ2VCeUFsdGVyaW5nQ3Vy
cmVudFNlbGVjdGlvbihBbHRlcmF0aW9uRXh0ZW5kLCBhbW91bnQpOwogfQogCi12b2lkIEZyYW1l
U2VsZWN0aW9uOjpzZWxlY3RSYW5nZU9uRWxlbWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWdu
ZWQgbGVuZ3RoLCBOb2RlJiBub2RlKQotewotICAgIGF1dG8gc2VsZWN0aW9uID0gVmlzaWJsZVNl
bGVjdGlvbiB7IFNpbXBsZVJhbmdlIHsgeyBub2RlLCBsb2NhdGlvbiB9LCB7IG5vZGUsIGxvY2F0
aW9uICsgbGVuZ3RoIH0gfSB9OwotCi0gICAgLy8gRklYTUU6IFRoZSBzZWNvbmQgYXJndW1lbnQg
d2FzICJ0cnVlIiB3aGljaCBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byBvcHRpb24gIkZpcmVTZWxl
Y3RFdmVudCIuIElzIHRoaXMgY29ycmVjdD8KLSAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7
IEZpcmVTZWxlY3RFdmVudCB9KTsKLX0KLQogVmlzaWJsZVNlbGVjdGlvbiBGcmFtZVNlbGVjdGlv
bjo6d29yZFNlbGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pCiB7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKQEAgLTI2
ODksOCArMjYwNyw4IEBAIFZpc2libGVTZWxlY3Rpb24gRnJhbWVTZWxlY3Rpb246OndvcmRTZWxl
Y3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24oY29uc3QgVmlzCiAKICAgICBQb3NpdGlvbiBz
dGFydFBvc0JlZm9yZUV4cGFuc2lvbihzZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAgUG9zaXRpb24g
ZW5kUG9zQmVmb3JlRXhwYW5zaW9uKHNlbGVjdGlvbi5lbmQoKSk7Ci0gICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0VmlzaWJsZVBvc0JlZm9yZUV4cGFuc2lvbihzdGFydFBvc0JlZm9yZUV4cGFuc2lv
biwgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQ
b3NCZWZvcmVFeHBhbnNpb24oZW5kUG9zQmVmb3JlRXhwYW5zaW9uLCBWUF9ERUZBVUxUX0FGRklO
SVRZKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zQmVmb3JlRXhwYW5zaW9u
KHN0YXJ0UG9zQmVmb3JlRXhwYW5zaW9uKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJs
ZVBvc0JlZm9yZUV4cGFuc2lvbihlbmRQb3NCZWZvcmVFeHBhbnNpb24pOwogICAgIGlmIChlbmRW
aXNpYmxlUG9zQmVmb3JlRXhwYW5zaW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gVmlzaWJs
ZVNlbGVjdGlvbigpOwogCkBAIC0yNzI0LDggKzI2NDIsOCBAQCBWaXNpYmxlU2VsZWN0aW9uIEZy
YW1lU2VsZWN0aW9uOjp3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKGNvbnN0
IFZpcwogICAgIGlmIChlbmRQb3MgPCBlbmRQb3NCZWZvcmVFeHBhbnNpb24pCiAgICAgICAgIGVu
ZFBvcyA9IGVuZFBvc0JlZm9yZUV4cGFuc2lvbjsKIAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFy
dFZpc2libGVQb3Moc3RhcnRQb3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIFZpc2libGVQ
b3NpdGlvbiBlbmRWaXNpYmxlUG9zKGVuZFBvcywgVlBfREVGQVVMVF9BRkZJTklUWSk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvcyhzdGFydFBvcyk7CisgICAgVmlzaWJsZVBv
c2l0aW9uIGVuZFZpc2libGVQb3MoZW5kUG9zKTsKIAogICAgIGlmIChzdGFydFZpc2libGVQb3Mu
aXNOdWxsKCkgfHwgZW5kVmlzaWJsZVBvcy5pc051bGwoKSkgewogICAgICAgICAvLyBTdGFydCBv
ciBlbmQgaXMgbmlsCkBAIC0yNzYyLDggKzI2ODAsOCBAQCBWaXNpYmxlU2VsZWN0aW9uIEZyYW1l
U2VsZWN0aW9uOjp3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKGNvbnN0IFZp
cwogICAgICAgICBmcmFtZVNlbGVjdGlvbi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25FeHRlbmQsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQsIFRleHRHcmFudWxhcml0eTo6
V29yZEdyYW51bGFyaXR5KTsKICAgICAgICAgc3RhcnRQb3MgPSBmcmFtZVNlbGVjdGlvbi5zZWxl
Y3Rpb24oKS5zdGFydCgpOwogICAgICAgICBlbmRQb3MgPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rp
b24oKS5lbmQoKTsKLSAgICAgICAgc3RhcnRWaXNpYmxlUG9zID0gVmlzaWJsZVBvc2l0aW9uKHN0
YXJ0UG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICAgICAgZW5kVmlzaWJsZVBvcyA9IFZp
c2libGVQb3NpdGlvbihlbmRQb3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgICAgICBzdGFy
dFZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oc3RhcnRQb3MpOworICAgICAgICBlbmRWaXNp
YmxlUG9zID0gVmlzaWJsZVBvc2l0aW9uKGVuZFBvcyk7CiAgICAgICAgIGlmIChzdGFydFZpc2li
bGVQb3MuaXNOdWxsKCkgfHwgZW5kVmlzaWJsZVBvcy5pc051bGwoKSkgewogICAgICAgICAgICAg
Ly8gU3RhcnQgb3IgZW5kIGlzIG5pbAogICAgICAgICAgICAgcmV0dXJuIFZpc2libGVTZWxlY3Rp
b24oKTsKQEAgLTI3OTIsNDAgKzI3MTAsMjcgQEAgVmlzaWJsZVNlbGVjdGlvbiBGcmFtZVNlbGVj
dGlvbjo6d29yZFNlbGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbihjb25zdCBWaXMKIAog
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KCkgY29uc3QKIHsK
LSAgICBpZiAobV9zZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIFBvc2l0aW9uIHN0YXJ0UG9zKG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwotICAgIFZpc2libGVQ
b3NpdGlvbiBwb3MoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHN0YXJ0UG9zLmRlcHJlY2F0
ZWROb2RlKCksIHN0YXJ0UG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpLCBWUF9ERUZBVUxU
X0FGRklOSVRZKTsKLSAgICBpZiAocG9zLmlzTnVsbCgpKQorICAgIGF1dG8gcG9zaXRpb24gPSBt
X3NlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChpc1N0YXJ0T2ZQYXJhZ3JhcGgocG9zKSkK
KyAgICBpZiAoaXNTdGFydE9mUGFyYWdyYXBoKHBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgCi0gICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgIGJvb2wgc2F3U3BhY2UgPSBmYWxz
ZTsKICAgICB1bnNpZ25lZCBwcmV2aW91c0NvdW50ID0gMDsKLSAgICBmb3IgKHBvcyA9IHBvcy5w
cmV2aW91cygpOyAhcG9zLmlzTnVsbCgpOyBwb3MgPSBwb3MucHJldmlvdXMoKSkgeworICAgIGZv
ciAocG9zaXRpb24gPSBwb3NpdGlvbi5wcmV2aW91cygpOyAhcG9zaXRpb24uaXNOdWxsKCk7IHBv
c2l0aW9uID0gcG9zaXRpb24ucHJldmlvdXMoKSkgewogICAgICAgICBwcmV2aW91c0NvdW50Kys7
Ci0gICAgICAgIGlmIChpc1N0YXJ0T2ZQYXJhZ3JhcGgocG9zKSkgewotICAgICAgICAgICAgaWYg
KHByZXZpb3VzQ291bnQgPT0gMSB8fCAocHJldmlvdXNDb3VudCA9PSAyICYmIHNhd1NwYWNlKSkK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIFVDaGFyIGMocG9zLmNoYXJhY3RlckFmdGVyKCkpOwotICAgICAgICBp
ZiAoYykgewotICAgICAgICAgICAgaWYgKGlzU3BhY2VPck5ld2xpbmUoYykgfHwgYyA9PSBub0Jy
ZWFrU3BhY2UpIHsKKyAgICAgICAgaWYgKGlzU3RhcnRPZlBhcmFncmFwaChwb3NpdGlvbikpCisg
ICAgICAgICAgICByZXR1cm4gcHJldmlvdXNDb3VudCAhPSAxICYmIChwcmV2aW91c0NvdW50ICE9
IDIgfHwgIXNhd1NwYWNlKTsKKyAgICAgICAgaWYgKGF1dG8gYyA9IHBvc2l0aW9uLmNoYXJhY3Rl
ckFmdGVyKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1NwYWNlT3JOZXdsaW5lKGMpIHx8IGMgPT0g
bm9CcmVha1NwYWNlKQogICAgICAgICAgICAgICAgIHNhd1NwYWNlID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IChjID09
ICcuJyB8fCBjID09ICchJyB8fCBjID09ICc/Jyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGMg
PT0gJy4nIHx8IGMgPT0gJyEnIHx8IGMgPT0gJz8nOwogICAgICAgICB9CiAgICAgfQotICAgIAot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbihF
QWx0ZXJhdGlvbiBhbHRlcmF0aW9uLCBpbnQgYW1vdW50KSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IGVkZDRiYWE4Mjg3ZDgxMWJmM2Q4MTQ1ZTljOWZi
MmViNmFjMzA3ZDMuLjBhYjcwMjE4M2IzZmJkZDBjMDNjMzQ5MzJiZGE2MTg4MmMwNmE3MjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTE3Miw4ICsxNzIsOCBA
QCBwdWJsaWM6CiAKICAgICBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkoKSBjb25zdCB7IHJl
dHVybiBtX2dyYW51bGFyaXR5OyB9CiAKLSAgICB2b2lkIHNldFN0YXJ0KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwotICAgIHZvaWQg
c2V0RW5kKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJU
cmlnZ2VyZWQpOworICAgIHZvaWQgc2V0U3RhcnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgRVVz
ZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKKyAgICB2b2lkIHNldEVuZChjb25zdCBW
aXNpYmxlUG9zaXRpb24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogICAg
IAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QmFzZShjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0QmFzZShjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSwgRVVzZXJUcmlnZ2VyZWQg
PSBOb3RVc2VyVHJpZ2dlcmVkKTsKQEAgLTIyOCwxNCArMjI4LDEwIEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gd29yZFJhbmdlQ29udGFpbmluZ0Nh
cmV0U2VsZWN0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHBhbmRTZWxlY3Rpb25U
b1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgVUNoYXIgY2hhcmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb24oaW50IGFtb3VudCkg
Y29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVyQmVmb3JlQ2FyZXRTZWxl
Y3Rpb24oKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBVQ2hhciBjaGFyYWN0ZXJBZnRlckNh
cmV0U2VsZWN0aW9uKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25B
dERvY3VtZW50U3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNlbGVjdGlv
bkF0U2VudGVuY2VTdGFydCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2VsZWN0
aW9uQXRXb3JkU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gcmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7
CiAgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlFeHRlbmRp
bmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2VsZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVkIGxl
bmd0aCwgTm9kZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJDdXJyZW50U2VsZWN0
aW9uKCk7CiAgICAgdm9pZCBzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0QmxpbmtzID0gdHJ1ZSk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDYXJldENvbG9yKGNvbnN0IENvbG9yJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRv
ckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3JDb21tYW5kLmNwcAppbmRleCBhZTBhMjliOGZhMzY3MmJlMjgyZTcyMGFkOGNkMDUxMjc0
MzcyZmQwLi41YmVjNDI2MWE1MTY3OTdiYmY5NjQ1YjdlYzEwYzJhNGRhNzhmNDYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1h
bmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQ29tbWFuZC5jcHAKQEAgLTcxLDE4ICs3MSwxNyBAQCBib29sIEluc2VydFBhcmFncmFwaFNl
cGFyYXRvckNvbW1hbmQ6OnByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3QKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpjYWxjdWxh
dGVTdHlsZUJlZm9yZUluc2VydGlvbihjb25zdCBQb3NpdGlvbiAmcG9zKQordm9pZCBJbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpjYWxjdWxhdGVTdHlsZUJlZm9yZUluc2VydGlvbihj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgLy8gSXQgaXMgb25seSBpbXBvcnRhbnQg
dG8gc2V0IGEgc3R5bGUgdG8gYXBwbHkgbGF0ZXIgaWYgd2UncmUgYXQgdGhlIGJvdW5kYXJpZXMg
b2YKICAgICAvLyBhIHBhcmFncmFwaC4gT3RoZXJ3aXNlLCBjb250ZW50IHRoYXQgaXMgbW92ZWQg
YXMgcGFydCBvZiB0aGUgd29yayBvZiB0aGUgY29tbWFuZAogICAgIC8vIHdpbGwgbGVuZCB0aGVp
ciBzdHlsZXMgdG8gdGhlIG5ldyBwYXJhZ3JhcGggd2l0aG91dCBhbnkgZXh0cmEgd29yayBuZWVk
ZWQuCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MocG9zLCBWUF9ERUZBVUxUX0FGRklO
SVRZKTsKLSAgICBpZiAoIWlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSAmJiAhaXNFbmRP
ZlBhcmFncmFwaCh2aXNpYmxlUG9zKSkKKyAgICBhdXRvIHZpc2libGVQb3NpdGlvbiA9IFZpc2li
bGVQb3NpdGlvbiB7IHBvc2l0aW9uIH07CisgICAgaWYgKCFpc1N0YXJ0T2ZQYXJhZ3JhcGgodmlz
aWJsZVBvc2l0aW9uKSAmJiAhaXNFbmRPZlBhcmFncmFwaCh2aXNpYmxlUG9zaXRpb24pKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQocG9zLmlzTm90TnVsbCgpKTsKLSAgICBtX3N0eWxl
ID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocG9zLCBFZGl0aW5nU3R5bGU6OkVkaXRpbmdQcm9wZXJ0
aWVzSW5FZmZlY3QpOwotICAgIG1fc3R5bGUtPm1lcmdlVHlwaW5nU3R5bGUocG9zLmFuY2hvck5v
ZGUoKS0+ZG9jdW1lbnQoKSk7CisgICAgbV9zdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHBv
c2l0aW9uLCBFZGl0aW5nU3R5bGU6OkVkaXRpbmdQcm9wZXJ0aWVzSW5FZmZlY3QpOworICAgIG1f
c3R5bGUtPm1lcmdlVHlwaW5nU3R5bGUoKnBvc2l0aW9uLmRvY3VtZW50KCkpOwogfQogCiB2b2lk
IEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmFwcGx5U3R5bGVBZnRlckluc2VydGlv
bihOb2RlKiBvcmlnaW5hbEVuY2xvc2luZ0Jsb2NrKQpAQCAtMzM2LDcgKzMzNSw3IEBAIHZvaWQg
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICAvLyBNYWtl
IHN1cmUgd2UgZG8gbm90IGNhdXNlIGEgcmVuZGVyZWQgc3BhY2UgdG8gYmVjb21lIHVucmVuZGVy
ZWQuCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdGhlIGFmZmluaXR5IGZvciBwb3MsIGJ1dCBwb3Mu
ZG93bnN0cmVhbSgpIGRvZXMgbm90IGdpdmUgaXQKLSAgICBQb3NpdGlvbiBsZWFkaW5nV2hpdGVz
cGFjZSA9IGluc2VydGlvblBvc2l0aW9uLmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24oVlBfREVG
QVVMVF9BRkZJTklUWSk7CisgICAgUG9zaXRpb24gbGVhZGluZ1doaXRlc3BhY2UgPSBpbnNlcnRp
b25Qb3NpdGlvbi5sZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZpc2libGVQb3NpdGlvbjo6ZGVm
YXVsdEFmZmluaXR5KTsKICAgICAvLyBGSVhNRTogbGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbiBp
cyByZXR1cm5pbmcgdGhlIHBvc2l0aW9uIGJlZm9yZSBwcmVzZXJ2ZWQgbmV3bGluZXMgZm9yIHBv
c2l0aW9ucwogICAgIC8vIGFmdGVyIHRoZSBwcmVzZXJ2ZWQgbmV3bGluZSwgY2F1c2luZyB0aGUg
bmV3bGluZSB0byBiZSB0dXJuZWQgaW50byBhIG5ic3AuCiAgICAgaWYgKGlzPFRleHQ+KGxlYWRp
bmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpKSB7CkBAIC0zOTEsOCArMzkwLDcgQEAgdm9p
ZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAg
IHNwbGl0VHJlZVRvTm9kZSgqc3BsaXRUbywgKnN0YXJ0QmxvY2spOwogCiAgICAgICAgICAgICBm
b3IgKG4gPSBzdGFydEJsb2NrLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygp
KSB7Ci0gICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGJlZm9yZU5vZGVQb3NpdGlvbiA9
IHBvc2l0aW9uQmVmb3JlTm9kZShuKTsKLSAgICAgICAgICAgICAgICBpZiAoIWJlZm9yZU5vZGVQ
b3NpdGlvbi5pc051bGwoKSAmJiBjb21wYXJlUG9zaXRpb25zKFZpc2libGVQb3NpdGlvbihpbnNl
cnRpb25Qb3NpdGlvbiksIGJlZm9yZU5vZGVQb3NpdGlvbikgPD0gMCkKKyAgICAgICAgICAgICAg
ICBpZiAoVmlzaWJsZVBvc2l0aW9uKGluc2VydGlvblBvc2l0aW9uKSA8PSBWaXNpYmxlUG9zaXRp
b24ocG9zaXRpb25CZWZvcmVOb2RlKG4pKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbmRlcmVk
UG9zaXRpb24uY3BwCmluZGV4IDQzZDRhNGYxNWQ5NjFlZGJlNWM4OTQ5OTkyMGM3NjBkMmNiMzM4
ZTcuLmJkMGVlMWUxOTM1NzBhMGQ1MGZiNjJjYjFiMmI3MDAxZmZkNmQ0N2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcApAQCAtNjQsMjcgKzY0LDE5IEBA
IHN0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiByZW5kZXJlckZyb21Qb3NpdGlvbihjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24pCiB9CiAKIFJlbmRlcmVkUG9zaXRpb246OlJlbmRlcmVkUG9zaXRp
b24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKLSAgICA6IG1fb2Zmc2V0KDApCi0g
ICAgLCBtX3ByZXZpb3VzTGVhZk9uTGluZSh1bmNhY2hlZElubGluZUJveCgpKQotICAgICwgbV9u
ZXh0TGVhZk9uTGluZSh1bmNhY2hlZElubGluZUJveCgpKQorICAgIDogUmVuZGVyZWRQb3NpdGlv
bihwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLCBwb3NpdGlvbi5hZmZpbml0eSgpKQogewotICAg
IGlmIChwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHBvc2l0aW9uLmdl
dElubGluZUJveEFuZE9mZnNldChtX2lubGluZUJveCwgbV9vZmZzZXQpOwotICAgIGlmIChtX2lu
bGluZUJveCkKLSAgICAgICAgbV9yZW5kZXJlciA9ICZtX2lubGluZUJveC0+cmVuZGVyZXIoKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fcmVuZGVyZXIgPSByZW5kZXJlckZyb21Qb3NpdGlvbihwb3Np
dGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKIH0KIAogUmVuZGVyZWRQb3NpdGlvbjo6UmVuZGVyZWRQ
b3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIEVBZmZpbml0eSBhZmZpbml0eSkKLSAg
ICA6IG1fb2Zmc2V0KDApCi0gICAgLCBtX3ByZXZpb3VzTGVhZk9uTGluZSh1bmNhY2hlZElubGlu
ZUJveCgpKQorICAgIDogbV9wcmV2aW91c0xlYWZPbkxpbmUodW5jYWNoZWRJbmxpbmVCb3goKSkK
ICAgICAsIG1fbmV4dExlYWZPbkxpbmUodW5jYWNoZWRJbmxpbmVCb3goKSkKIHsKICAgICBpZiAo
cG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBwb3NpdGlvbi5nZXRJbmxp
bmVCb3hBbmRPZmZzZXQoYWZmaW5pdHksIG1faW5saW5lQm94LCBtX29mZnNldCk7CisgICAgYXV0
byBib3ggPSBwb3NpdGlvbi5pbmxpbmVCb3hBbmRPZmZzZXQoYWZmaW5pdHkpOworICAgIG1faW5s
aW5lQm94ID0gYm94LmJveDsKKyAgICBtX29mZnNldCA9IGJveC5vZmZzZXQ7CiAgICAgaWYgKG1f
aW5saW5lQm94KQogICAgICAgICBtX3JlbmRlcmVyID0gJm1faW5saW5lQm94LT5yZW5kZXJlcigp
OwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQ
b3NpdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmgKaW5k
ZXggMTU1YTdkZjUyMGRmNTQzYjYxYjQ5YjlhMTU0YTI1NWYwZDMyODVmZS4uNWQwOGI5OTRlYzEy
NzEzNjA5OTg0NjBlYzY2ZjlhN2EyNThjZWNkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZW5kZXJlZFBvc2l0aW9uLmgKQEAgLTc5LDE1ICs3OSwxNSBAQCBwcml2YXRlOgogICAgIGJvb2wg
YXRMZWZ0Qm91bmRhcnlPZkJpZGlSdW4oU2hvdWxkTWF0Y2hCaWRpTGV2ZWwsIHVuc2lnbmVkIGNo
YXIgYmlkaUxldmVsT2ZSdW4pIGNvbnN0OwogICAgIGJvb2wgYXRSaWdodEJvdW5kYXJ5T2ZCaWRp
UnVuKFNob3VsZE1hdGNoQmlkaUxldmVsLCB1bnNpZ25lZCBjaGFyIGJpZGlMZXZlbE9mUnVuKSBj
b25zdDsKIAotICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlciB7IG51bGxwdHIgfTsKLSAgICBJ
bmxpbmVCb3gqIG1faW5saW5lQm94IHsgbnVsbHB0ciB9OwotICAgIGludCBtX29mZnNldDsKLQog
ICAgIHN0YXRpYyBJbmxpbmVCb3gqIHVuY2FjaGVkSW5saW5lQm94KCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxJbmxpbmVCb3gqPigxKTsgfQogICAgIC8vIE5lZWRzIHRvIGJlIGRpZmZlcmVu
dCBmb3JtIDAgc28gcGljayAxIGJlY2F1c2UgaXQncyBhbHNvIG9uIHRoZSBudWxsIHBhZ2UuCiAK
LSAgICBtdXRhYmxlIElubGluZUJveCogbV9wcmV2aW91c0xlYWZPbkxpbmU7Ci0gICAgbXV0YWJs
ZSBJbmxpbmVCb3gqIG1fbmV4dExlYWZPbkxpbmU7CisgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRl
cmVyIHsgbnVsbHB0ciB9OworICAgIElubGluZUJveCogbV9pbmxpbmVCb3ggeyBudWxscHRyIH07
CisgICAgaW50IG1fb2Zmc2V0IHsgMCB9OworCisgICAgbXV0YWJsZSBJbmxpbmVCb3gqIG1fcHJl
dmlvdXNMZWFmT25MaW5lIHsgbnVsbHB0ciB9OworICAgIG11dGFibGUgSW5saW5lQm94KiBtX25l
eHRMZWFmT25MaW5lIHsgbnVsbHB0ciB9OwogfTsKIAogaW5saW5lIFJlbmRlcmVkUG9zaXRpb246
OlJlbmRlcmVkUG9zaXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0QWZmaW5pdHkuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEFmZmluaXR5LmgKaW5k
ZXggMDczZDRlMjZhZDQ5YTU2N2Y1YzRkMGRiYmFkYmFjNzBjZWYyNjhiMi4uNmNiYWE5MjE5YjVh
YTNhZTdhYzY2MGNkY2JlMjMxMDY3OWQ0ZDI0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0QWZmaW5pdHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRB
ZmZpbml0eS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE0
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDEzIEBACiAjcHJhZ21hIG9uY2UKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotLy8gVVBTVFJFQU0gbWVhbnMgYmVmb3JlIGEgbGluZSBicmVhayBET1dOU1RS
RUFNIG1lYW4gYWZ0ZXIgYSBsaW5lIGJyZWFrCi1lbnVtIEVBZmZpbml0eSB7IFVQU1RSRUFNID0g
MCwgRE9XTlNUUkVBTSA9IDEgfTsKKworLy8gVXBzdHJlYW0gbWVhbnMgYmVmb3JlIGEgbGluZSBi
cmVhaywgZG93bnN0cmVhbSBtZWFucyBhZnRlciBhIGxpbmUgYnJlYWsuCitlbnVtIEFmZmluaXR5
IDogYm9vbCB7IFVwc3RyZWFtLCBEb3duc3RyZWFtIH07CisKKy8vIEZJWE1FOiBSZW1vdmUgdGhl
c2UgZGVwcmVjYXRlZCBuYW1lcyBhZnRlciByZW1vdmluZyBhbGwgdXNlcyBvZiB0aGVtLgordXNp
bmcgRUFmZmluaXR5ID0gQWZmaW5pdHk7CitzdGF0aWMgY29uc3RleHByIGF1dG8gVVBTVFJFQU0g
PSBVcHN0cmVhbTsKK3N0YXRpYyBjb25zdGV4cHIgYXV0byBET1dOU1RSRUFNID0gRG93bnN0cmVh
bTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlUG9zaXRpb24uY3BwCmluZGV4IGYwNjhiZjU4MDkwMzc3NWQ1OGJmMWE4ODdmZGQ1MTUzM2Jj
MDY5OTUuLmQzM2RjNzRiNmIyNDAzZjBhOTE2NTE2N2RmMDc4NTdhNmQ2ZTg4ODAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTUwLDIwICs1MCwxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLVZp
c2libGVQb3NpdGlvbjo6VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZp
bml0eSBhZmZpbml0eSkKK1Zpc2libGVQb3NpdGlvbjo6VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5KQorICAgIDogbV9kZWVwUG9zaXRp
b24geyBjYW5vbmljYWxQb3NpdGlvbihwb3NpdGlvbikgfQogewotICAgIGluaXQocG9zLCBhZmZp
bml0eSk7Ci19Ci0KLXZvaWQgVmlzaWJsZVBvc2l0aW9uOjppbml0KGNvbnN0IFBvc2l0aW9uJiBw
b3NpdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5KQotewotICAgIG1fYWZmaW5pdHkgPSBhZmZpbml0
eTsKLSAgICAKLSAgICBtX2RlZXBQb3NpdGlvbiA9IGNhbm9uaWNhbFBvc2l0aW9uKHBvc2l0aW9u
KTsKLSAgICAKLSAgICAvLyBXaGVuIG5vdCBhdCBhIGxpbmUgd3JhcCwgbWFrZSBzdXJlIHRvIGVu
ZCB1cCB3aXRoIERPV05TVFJFQU0gYWZmaW5pdHkuCi0gICAgaWYgKG1fYWZmaW5pdHkgPT0gVVBT
VFJFQU0gJiYgKGlzTnVsbCgpIHx8IGluU2FtZUxpbmUoVmlzaWJsZVBvc2l0aW9uKHBvc2l0aW9u
LCBET1dOU1RSRUFNKSwgKnRoaXMpKSkKLSAgICAgICAgbV9hZmZpbml0eSA9IERPV05TVFJFQU07
CisgICAgaWYgKGFmZmluaXR5ID09IFVwc3RyZWFtICYmICFpc051bGwoKSkgeworICAgICAgICBh
dXRvIHVwc3RyZWFtQ29weSA9ICp0aGlzOworICAgICAgICB1cHN0cmVhbUNvcHkubV9hZmZpbml0
eSA9IFVwc3RyZWFtOworICAgICAgICBpZiAoIWluU2FtZUxpbmUoKnRoaXMsIHVwc3RyZWFtQ29w
eSkpCisgICAgICAgICAgICBtX2FmZmluaXR5ID0gVXBzdHJlYW07CisgICAgfQogfQogCiBWaXNp
YmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpuZXh0KEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5n
UnVsZSBydWxlLCBib29sKiByZWFjaGVkQm91bmRhcnkpIGNvbnN0CkBAIC04OCwxNyArODMsMTcg
QEAgVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cHJldmlvdXMoRWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUsIGJvb2wKICAgICBBU1NFUlQocnVsZSA9PSBDYW5Dcm9zc0Vk
aXRpbmdCb3VuZGFyeSB8fCBydWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKICAg
ICAvLyBmaW5kIGZpcnN0IHByZXZpb3VzIERPTSBwb3NpdGlvbiB0aGF0IGlzIHZpc2libGUKICAg
ICBQb3NpdGlvbiBwb3MgPSBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9kZWVw
UG9zaXRpb24pOwotICAgIAorCiAgICAgLy8gcmV0dXJuIG51bGwgdmlzaWJsZSBwb3NpdGlvbiBp
ZiB0aGVyZSBpcyBubyBwcmV2aW91cyB2aXNpYmxlIHBvc2l0aW9uCiAgICAgaWYgKHBvcy5hdFN0
YXJ0T2ZUcmVlKCkpIHsKICAgICAgICAgaWYgKHJlYWNoZWRCb3VuZGFyeSkKICAgICAgICAgICAg
ICpyZWFjaGVkQm91bmRhcnkgPSB0cnVlOwogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KCk7CiAgICAgfQotICAgICAgICAKKwogICAgIFZpc2libGVQb3NpdGlvbiBwcmV2ID0gVmlzaWJs
ZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSk7CiAgICAgQVNTRVJUKHByZXYgIT0gKnRoaXMpOwot
ICAgIAorCiAjaWZuZGVmIE5ERUJVRwogICAgIC8vIHdlIHNob3VsZCBhbHdheXMgYmUgYWJsZSB0
byBtYWtlIHRoZSBhZmZpbml0eSBET1dOU1RSRUFNLCBiZWNhdXNlIGdvaW5nIHByZXZpb3VzIGZy
b20gYW4KICAgICAvLyBVUFNUUkVBTSBwb3NpdGlvbiBjYW4gbmV2ZXIgeWllbGQgYW5vdGhlciBV
UFNUUkVBTSBwb3NpdGlvbiAodW5sZXNzIGxpbmUgd3JhcCBsZW5ndGggaXMgMCEpLgpAQCAtMTI1
LDkgKzEyMCw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdFZpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUoKSBjb25zdAogICAgIFRleHREaXJlY3Rpb24gcHJpbWFyeURpcmVjdGlvbiA9
IHAucHJpbWFyeURpcmVjdGlvbigpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgSW5s
aW5lQm94KiBib3g7Ci0gICAgICAgIGludCBvZmZzZXQ7Ci0gICAgICAgIHAuZ2V0SW5saW5lQm94
QW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24sIGJveCwgb2Zmc2V0KTsKKyAg
ICAgICAgYXV0byBbYm94LCBvZmZzZXRdID0gcC5pbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0
eSwgcHJpbWFyeURpcmVjdGlvbik7CiAgICAgICAgIGlmICghYm94KQogICAgICAgICAgICAgcmV0
dXJuIHByaW1hcnlEaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gcHJldmlvdXNWaXN1
YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IG5leHRWaXN1YWxseURpc3Rp
bmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKTsKIApAQCAtMTU5LDEyICsxNTIsNyBAQCBQb3Np
dGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29u
c3QKICAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIHByZXZCb3ggPSBib3gtPnByZXZpb3VzTGVh
Zk9uTGluZUlnbm9yaW5nTGluZUJyZWFrKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFwcmV2Qm94
KSB7CiAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uT25MZWZ0ID0gcHJpbWFy
eURpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBwcmV2aW91c1Zpc3VhbGx5RGlzdGlu
Y3RDYW5kaWRhdGUobV9kZWVwUG9zaXRpb24pIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRh
dGUobV9kZWVwUG9zaXRpb24pOwotICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb25Pbkxl
ZnQuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsK
LQotICAgICAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIGJveE9uTGVmdDsKLSAgICAgICAgICAg
ICAgICAgICAgaW50IG9mZnNldE9uTGVmdDsKLSAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25P
bkxlZnQuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24s
IGJveE9uTGVmdCwgb2Zmc2V0T25MZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBib3hP
bkxlZnQgPSBwb3NpdGlvbk9uTGVmdC5pbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSwgcHJp
bWFyeURpcmVjdGlvbikuYm94OwogICAgICAgICAgICAgICAgICAgICBpZiAoYm94T25MZWZ0ICYm
ICZib3hPbkxlZnQtPnJvb3QoKSA9PSAmYm94LT5yb290KCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUG9zaXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0
aW9uT25MZWZ0OwpAQCAtMjk1LDkgKzI4Myw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6
cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QKICAgICBUZXh0RGlyZWN0aW9u
IHByaW1hcnlEaXJlY3Rpb24gPSBwLnByaW1hcnlEaXJlY3Rpb24oKTsKIAogICAgIHdoaWxlICh0
cnVlKSB7Ci0gICAgICAgIElubGluZUJveCogYm94OwotICAgICAgICBpbnQgb2Zmc2V0OwotICAg
ICAgICBwLmdldElubGluZUJveEFuZE9mZnNldChtX2FmZmluaXR5LCBwcmltYXJ5RGlyZWN0aW9u
LCBib3gsIG9mZnNldCk7CisgICAgICAgIGF1dG8gW2JveCwgb2Zmc2V0XSA9IHAuaW5saW5lQm94
QW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24pOwogICAgICAgICBpZiAoIWJv
eCkKICAgICAgICAgICAgIHJldHVybiBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246
OkxUUiA/IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IHBy
ZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7CiAKQEAgLTMy
OSwxMiArMzE1LDcgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlz
dGluY3RDYW5kaWRhdGUoKSBjb25zdAogICAgICAgICAgICAgICAgIElubGluZUJveCogbmV4dEJv
eCA9IGJveC0+bmV4dExlYWZPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpOwogICAgICAgICAgICAg
ICAgIGlmICghbmV4dEJveCkgewogICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBwb3NpdGlv
bk9uUmlnaHQgPSBwcmltYXJ5RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OkxUUiA/IG5leHRW
aXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZGVlcFBvc2l0aW9uKSA6IHByZXZpb3VzVmlzdWFs
bHlEaXN0aW5jdENhbmRpZGF0ZShtX2RlZXBQb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChwb3NpdGlvbk9uUmlnaHQuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUG9zaXRpb24oKTsKLQotICAgICAgICAgICAgICAgICAgICBJbmxpbmVCb3gqIGJveE9u
UmlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXRPblJpZ2h0OwotICAgICAgICAg
ICAgICAgICAgICBwb3NpdGlvbk9uUmlnaHQuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KG1fYWZmaW5p
dHksIHByaW1hcnlEaXJlY3Rpb24sIGJveE9uUmlnaHQsIG9mZnNldE9uUmlnaHQpOworICAgICAg
ICAgICAgICAgICAgICBhdXRvIGJveE9uUmlnaHQgPSBwb3NpdGlvbk9uUmlnaHQuaW5saW5lQm94
QW5kT2Zmc2V0KG1fYWZmaW5pdHksIHByaW1hcnlEaXJlY3Rpb24pLmJveDsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGJveE9uUmlnaHQgJiYgJmJveE9uUmlnaHQtPnJvb3QoKSA9PSAmYm94LT5y
b290KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uT25SaWdodDsKQEAgLTQ5NSwzMiArNDc2LDMy
IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246Omhvbm9yRWRpdGluZ0JvdW5kYXJ5
QXRPckJlZm9yZShjb25zdCBWaXNpYmxlUG9zCiAgICAgcmV0dXJuIGxhc3RFZGl0YWJsZVBvc2l0
aW9uQmVmb3JlUG9zaXRpb25JblJvb3QocG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgaGlnaGVz
dFJvb3QpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpob25vckVkaXRp
bmdCb3VuZGFyeUF0T3JBZnRlcihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnBvcywgYm9vbCogcmVh
Y2hlZEJvdW5kYXJ5KSBjb25zdAorVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6aG9u
b3JFZGl0aW5nQm91bmRhcnlBdE9yQWZ0ZXIoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvdGhlclBv
c2l0aW9uLCBib29sKiByZWFjaGVkQm91bmRhcnkpIGNvbnN0CiB7CiAgICAgaWYgKHJlYWNoZWRC
b3VuZGFyeSkKICAgICAgICAgKnJlYWNoZWRCb3VuZGFyeSA9IGZhbHNlOwotICAgIGlmIChwb3Mu
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBwb3M7CisgICAgaWYgKG90aGVyUG9zaXRpb24uaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBvdGhlclBvc2l0aW9uOwogICAgIAogICAgIGF1dG8qIGhp
Z2hlc3RSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChkZWVwRXF1aXZhbGVudCgpKTsKICAgICAK
LSAgICAvLyBSZXR1cm4gZW1wdHkgcG9zaXRpb24gaWYgcG9zIGlzIG5vdCBzb21ld2hlcmUgaW5z
aWRlIHRoZSBlZGl0YWJsZSByZWdpb24gY29udGFpbmluZyB0aGlzIHBvc2l0aW9uCi0gICAgaWYg
KGhpZ2hlc3RSb290ICYmICFwb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5p
c0Rlc2NlbmRhbnRPZigqaGlnaGVzdFJvb3QpKSB7CisgICAgLy8gUmV0dXJuIGVtcHR5IHBvc2l0
aW9uIGlmIG90aGVyUG9zaXRpb24gaXMgbm90IHNvbWV3aGVyZSBpbnNpZGUgdGhlIGVkaXRhYmxl
IHJlZ2lvbiBjb250YWluaW5nIHRoaXMgcG9zaXRpb24KKyAgICBpZiAoaGlnaGVzdFJvb3QgJiYg
IW90aGVyUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2Nl
bmRhbnRPZigqaGlnaGVzdFJvb3QpKSB7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCiAg
ICAgICAgICAgICAqcmVhY2hlZEJvdW5kYXJ5ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvbigpOwogICAgIH0KICAgICAKLSAgICAvLyBSZXR1cm4gcG9zIGl0c2VsZiBpZiB0
aGUgdHdvIGFyZSBmcm9tIHRoZSB2ZXJ5IHNhbWUgZWRpdGFibGUgcmVnaW9uLCBvciBib3RoIGFy
ZSBub24tZWRpdGFibGUKKyAgICAvLyBSZXR1cm4gb3RoZXJQb3NpdGlvbiBpdHNlbGYgaWYgdGhl
IHR3byBhcmUgZnJvbSB0aGUgdmVyeSBzYW1lIGVkaXRhYmxlIHJlZ2lvbiwgb3IgYm90aCBhcmUg
bm9uLWVkaXRhYmxlCiAgICAgLy8gRklYTUU6IEluIHRoZSBub24tZWRpdGFibGUgY2FzZSwganVz
dCBiZWNhdXNlIHRoZSBuZXcgcG9zaXRpb24gaXMgbm9uLWVkaXRhYmxlIGRvZXNuJ3QgbWVhbiBt
b3ZlbWVudAogICAgIC8vIHRvIGl0IGlzIGFsbG93ZWQuICBWaXNpYmxlU2VsZWN0aW9uOjphZGp1
c3RGb3JFZGl0YWJsZUNvbnRlbnQgaGFzIHRoaXMgcHJvYmxlbSB0b28uCi0gICAgaWYgKGhpZ2hl
c3RFZGl0YWJsZVJvb3QocG9zLmRlZXBFcXVpdmFsZW50KCkpID09IGhpZ2hlc3RSb290KSB7Cisg
ICAgaWYgKGhpZ2hlc3RFZGl0YWJsZVJvb3Qob3RoZXJQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
KSA9PSBoaWdoZXN0Um9vdCkgewogICAgICAgICBpZiAocmVhY2hlZEJvdW5kYXJ5KQotICAgICAg
ICAgICAgKnJlYWNoZWRCb3VuZGFyeSA9ICp0aGlzID09IHBvczsKLSAgICAgICAgcmV0dXJuIHBv
czsKKyAgICAgICAgICAgICpyZWFjaGVkQm91bmRhcnkgPSAqdGhpcyA9PSBvdGhlclBvc2l0aW9u
OworICAgICAgICByZXR1cm4gb3RoZXJQb3NpdGlvbjsKICAgICB9CiAKLSAgICAvLyBSZXR1cm4g
ZW1wdHkgcG9zaXRpb24gaWYgdGhpcyBwb3NpdGlvbiBpcyBub24tZWRpdGFibGUsIGJ1dCBwb3Mg
aXMgZWRpdGFibGUKKyAgICAvLyBSZXR1cm4gZW1wdHkgcG9zaXRpb24gaWYgdGhpcyBwb3NpdGlv
biBpcyBub24tZWRpdGFibGUsIGJ1dCBvdGhlclBvc2l0aW9uIGlzIGVkaXRhYmxlCiAgICAgLy8g
RklYTUU6IE1vdmUgdG8gdGhlIG5leHQgbm9uLWVkaXRhYmxlIHJlZ2lvbi4KICAgICBpZiAoIWhp
Z2hlc3RSb290KSB7CiAgICAgICAgIGlmIChyZWFjaGVkQm91bmRhcnkpCkBAIC01MjksNyArNTEw
LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6aG9ub3JFZGl0aW5nQm91bmRh
cnlBdE9yQWZ0ZXIoY29uc3QgVmlzaWJsZVBvc2kKICAgICB9CiAKICAgICAvLyBSZXR1cm4gdGhl
IG5leHQgcG9zaXRpb24gYWZ0ZXIgcG9zIHRoYXQgaXMgaW4gdGhlIHNhbWUgZWRpdGFibGUgcmVn
aW9uIGFzIHRoaXMgcG9zaXRpb24KLSAgICByZXR1cm4gZmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0
ZXJQb3NpdGlvbkluUm9vdChwb3MuZGVlcEVxdWl2YWxlbnQoKSwgaGlnaGVzdFJvb3QpOworICAg
IHJldHVybiBmaXJzdEVkaXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KG90aGVyUG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgaGlnaGVzdFJvb3QpOwogfQogCiBzdGF0aWMgUG9zaXRp
b24gY2Fub25pY2FsaXplQ2FuZGlkYXRlKGNvbnN0IFBvc2l0aW9uJiBjYW5kaWRhdGUpCkBAIC02
NDAsMjYgKzYyMSwxOCBAQCBVQ2hhcjMyIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyQWZ0ZXIo
KSBjb25zdAogICAgIHJldHVybiBjaDsKIH0KIAotTGF5b3V0UmVjdCBWaXNpYmxlUG9zaXRpb246
OmxvY2FsQ2FyZXRSZWN0KFJlbmRlck9iamVjdComIHJlbmRlcmVyKSBjb25zdAorYXV0byBWaXNp
YmxlUG9zaXRpb246OmxvY2FsQ2FyZXRSZWN0KCkgY29uc3QgLT4gTG9jYWxDYXJldFJlY3QKIHsK
LSAgICBpZiAobV9kZWVwUG9zaXRpb24uaXNOdWxsKCkpIHsKLSAgICAgICAgcmVuZGVyZXIgPSBu
dWxscHRyOwotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIH0KLSAgICBOb2RlKiBub2Rl
ID0gbV9kZWVwUG9zaXRpb24uYW5jaG9yTm9kZSgpOwotICAgIAotICAgIHJlbmRlcmVyID0gbm9k
ZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gTGF5b3V0
UmVjdCgpOwotCi0gICAgSW5saW5lQm94KiBpbmxpbmVCb3g7Ci0gICAgaW50IGNhcmV0T2Zmc2V0
OwotICAgIGdldElubGluZUJveEFuZE9mZnNldChpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKKyAg
ICBhdXRvIG5vZGUgPSBtX2RlZXBQb3NpdGlvbi5hbmNob3JOb2RlKCk7CisgICAgaWYgKCFub2Rl
KQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKGlubGluZUJveCkKLSAgICAgICAgcmVu
ZGVyZXIgPSAmaW5saW5lQm94LT5yZW5kZXJlcigpOworICAgIGF1dG8gW2lubGluZUJveCwgY2Fy
ZXRPZmZzZXRdID0gaW5saW5lQm94QW5kT2Zmc2V0KCk7CisgICAgYXV0byByZW5kZXJlciA9IGlu
bGluZUJveCA/ICZpbmxpbmVCb3gtPnJlbmRlcmVyKCkgOiBub2RlLT5yZW5kZXJlcigpOworICAg
IGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gcmVuZGVy
ZXItPmxvY2FsQ2FyZXRSZWN0KGlubGluZUJveCwgY2FyZXRPZmZzZXQpOworICAgIHJldHVybiB7
IHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KSwgcmVuZGVy
ZXIgfTsKIH0KIAogSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmFic29sdXRlQ2FyZXRCb3VuZHMo
Ym9vbCogaW5zaWRlRml4ZWQpIGNvbnN0CkBAIC02NzEsMTcgKzY0NCw3IEBAIEludFJlY3QgVmlz
aWJsZVBvc2l0aW9uOjphYnNvbHV0ZUNhcmV0Qm91bmRzKGJvb2wqIGluc2lkZUZpeGVkKSBjb25z
dAogCiBGbG9hdFJlY3QgVmlzaWJsZVBvc2l0aW9uOjphYnNvbHV0ZVNlbGVjdGlvbkJvdW5kc0Zv
ckxpbmUoKSBjb25zdAogewotICAgIGlmIChtX2RlZXBQb3NpdGlvbi5pc051bGwoKSkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLQotICAgIGF1dG8qIG5vZGUgPSBtX2RlZXBQb3NpdGlvbi5hbmNob3JO
b2RlKCk7Ci0gICAgaWYgKCFub2RlLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4geyB9Owot
Ci0gICAgSW5saW5lQm94KiBpbmxpbmVCb3ggPSBudWxscHRyOwotICAgIGludCBjYXJldE9mZnNl
dCA9IDA7Ci0gICAgZ2V0SW5saW5lQm94QW5kT2Zmc2V0KGlubGluZUJveCwgY2FyZXRPZmZzZXQp
OwotCisgICAgYXV0byBpbmxpbmVCb3ggPSBpbmxpbmVCb3hBbmRPZmZzZXQoKS5ib3g7CiAgICAg
aWYgKCFpbmxpbmVCb3gpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTY5MiwxOCArNjU1LDE3
IEBAIEZsb2F0UmVjdCBWaXNpYmxlUG9zaXRpb246OmFic29sdXRlU2VsZWN0aW9uQm91bmRzRm9y
TGluZSgpIGNvbnN0CiAKIGludCBWaXNpYmxlUG9zaXRpb246OmxpbmVEaXJlY3Rpb25Qb2ludEZv
ckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbigpIGNvbnN0CiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcjsKLSAgICBMYXlvdXRSZWN0IGxvY2FsUmVjdCA9IGxvY2FsQ2FyZXRSZWN0KHJlbmRl
cmVyKTsKLSAgICBpZiAobG9jYWxSZWN0LmlzRW1wdHkoKSB8fCAhcmVuZGVyZXIpCisgICAgYXV0
byBsb2NhbFJlY3QgPSBsb2NhbENhcmV0UmVjdCgpOworICAgIGlmIChsb2NhbFJlY3QucmVjdC5p
c0VtcHR5KCkgfHwgIWxvY2FsUmVjdC5yZW5kZXJlcikKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICAvLyBUaGlzIGlnbm9yZXMgdHJhbnNmb3JtcyBvbiBwdXJwb3NlLCBmb3Igbm93LiBWZXJ0aWNh
bCBuYXZpZ2F0aW9uIGlzIGRvbmUKICAgICAvLyB3aXRob3V0IGNvbnN1bHRpbmcgdHJhbnNmb3Jt
cywgc28gdGhhdCAndXAnIGluIHRyYW5zZm9ybWVkIHRleHQgaXMgJ3VwJwogICAgIC8vIHJlbGF0
aXZlIHRvIHRoZSB0ZXh0LCBub3QgYWJzb2x1dGUgJ3VwJy4KLSAgICBGbG9hdFBvaW50IGNhcmV0
UG9pbnQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKGxvY2FsUmVjdC5sb2NhdGlvbigpKTsK
LSAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5pbmdCbG9jayA9IHJlbmRlcmVyLT5jb250YWluaW5n
QmxvY2soKTsKKyAgICBhdXRvIGNhcmV0UG9pbnQgPSBsb2NhbFJlY3QucmVuZGVyZXItPmxvY2Fs
VG9BYnNvbHV0ZShsb2NhbFJlY3QucmVjdC5sb2NhdGlvbigpKTsKKyAgICBSZW5kZXJPYmplY3Qq
IGNvbnRhaW5pbmdCbG9jayA9IGxvY2FsUmVjdC5yZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7
CiAgICAgaWYgKCFjb250YWluaW5nQmxvY2spCi0gICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IHJl
bmRlcmVyOyAvLyBKdXN0IHVzZSBvdXJzZWx2ZXMgdG8gZGV0ZXJtaW5lIHRoZSB3cml0aW5nIG1v
ZGUgaWYgd2UgaGF2ZSBubyBjb250YWluaW5nIGJsb2NrLgorICAgICAgICBjb250YWluaW5nQmxv
Y2sgPSBsb2NhbFJlY3QucmVuZGVyZXI7IC8vIEp1c3QgdXNlIG91cnNlbHZlcyB0byBkZXRlcm1p
bmUgdGhlIHdyaXRpbmcgbW9kZSBpZiB3ZSBoYXZlIG5vIGNvbnRhaW5pbmcgYmxvY2suCiAgICAg
cmV0dXJuIGNvbnRhaW5pbmdCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNhcmV0
UG9pbnQueCgpIDogY2FyZXRQb2ludC55KCk7CiB9CiAKQEAgLTc0MCw3ICs3MDIsNyBAQCBFbGVt
ZW50KiBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlz
aWJsZVBvc2l0aW9uKQogICAgIHJldHVybiBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxl
bWVudCh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsK
IH0KIAotYm9vbCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmdmlzaWJsZVBvc2l0aW9uLCBjb25zdCBOb2RlICpub2RlKQorYm9vbCBpc0ZpcnN0Vmlz
aWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9u
LCBjb25zdCBOb2RlKiBub2RlKQogewogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc1Miw3ICs3MTQsNyBAQCBib29sIGlzRmlyc3RW
aXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRp
b24sIGNvbnN0CiAgICAgcmV0dXJuIHByZXZpb3VzLmlzTnVsbCgpIHx8ICFwcmV2aW91cy5kZWVw
RXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpOwogfQog
Ci1ib29sIGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24g
JnZpc2libGVQb3NpdGlvbiwgY29uc3QgTm9kZSAqbm9kZSkKK2Jvb2wgaXNMYXN0VmlzaWJsZVBv
c2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uLCBjb25z
dCBOb2RlKiBub2RlKQogewogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTgwOCw2ICs3NzAsMTIgQEAgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYgcmFuZ2UpCiAg
ICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKIH0KIAor
UGFydGlhbE9yZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCit7CisgICAgLy8gRklYTUU6IFNob3VsZCB0d28gcG9z
aXRpb25zIHdpdGggZGlmZmVyZW50IGFmZmluaXR5IGJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCBv
ciBub3Q/CisgICAgcmV0dXJuIGRvY3VtZW50T3JkZXIoYS5kZWVwRXF1aXZhbGVudCgpLCBiLmRl
ZXBFcXVpdmFsZW50KCkpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5B
QkxFKFRSRUVfREVCVUdHSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9u
LmgKaW5kZXggZWUwYmZlZjQ2ZGYyMDNkNDYxMWE2MGYwOWFhZTVmZWY1M2E0Y2M0Mi4uMTMwZTRj
ZGRmNGY3ZTc2YTgzMjQ1MDMyMjMyN2JkYzNhOTE5ZjY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5oCkBAIC0zMCw0NiArMzAsMzEgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBSYW5nZTsKLQotc3RydWN0IFNpbXBsZVJhbmdlOwotCi0vLyBWaXNp
YmxlUG9zaXRpb24gZGVmYXVsdCBhZmZpbml0eSBpcyBkb3duc3RyZWFtIGJlY2F1c2UKLS8vIHRo
ZSBjYWxsZXJzIGRvIG5vdCByZWFsbHkgY2FyZSAodGhleSBqdXN0IHdhbnQgdGhlCi0vLyBkZWVw
IHBvc2l0aW9uIHdpdGhvdXQgcmVnYXJkIHRvIGxpbmUgcG9zaXRpb24pLCBhbmQgdGhpcwotLy8g
aXMgY2hlYXBlciB0aGFuIFVQU1RSRUFNCi0jZGVmaW5lIFZQX0RFRkFVTFRfQUZGSU5JVFkgRE9X
TlNUUkVBTQotCi0vLyBDYWxsZXJzIHdobyBkbyBub3Qga25vdyB3aGVyZSBvbiB0aGUgbGluZSB0
aGUgcG9zaXRpb24gaXMsCi0vLyBidXQgd291bGQgbGlrZSBVUFNUUkVBTSBpZiBhdCBhIGxpbmUg
YnJlYWsgb3IgRE9XTlNUUkVBTQotLy8gb3RoZXJ3aXNlLCBuZWVkIGEgY2xlYXIgd2F5IHRvIHNw
ZWNpZnkgdGhhdC4gIFRoZQotLy8gY29uc3RydWN0b3JzIGF1dG8tY29ycmVjdCBVUFNUUkVBTSB0
byBET1dOU1RSRUFNIGlmIHRoZQotLy8gcG9zaXRpb24gaXMgbm90IGF0IGEgbGluZSBicmVhay4K
LSNkZWZpbmUgVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUgVVBTVFJFQU0KLQogY2xhc3MgVmlzaWJs
ZVBvc2l0aW9uIHsKIHB1YmxpYzoKLSAgICAvLyBOT1RFOiBVUFNUUkVBTSBhZmZpbml0eSB3aWxs
IGJlIHVzZWQgb25seSBpZiBwb3MgaXMgYXQgZW5kIG9mIGEgd3JhcHBlZCBsaW5lLAotICAgIC8v
IG90aGVyd2lzZSBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBET1dOU1RSRUFNCi0gICAgVmlzaWJs
ZVBvc2l0aW9uKCkgOiBtX2FmZmluaXR5KFZQX0RFRkFVTFRfQUZGSU5JVFkpIHsgfQotICAgIFdF
QkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSA9
IFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIC8vIFZpc2libGVQb3NpdGlvbiBkZWZhdWx0IGFm
ZmluaXR5IGlzIGRvd25zdHJlYW0gZm9yIGNhbGxlcnMgdGhhdCBkbyBub3QgcmVhbGx5IGNhcmUg
YmVjYXVzZSBpdCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHVwc3RyZWFtLgorICAgIHN0YXRpYyBj
b25zdGV4cHIgYXV0byBkZWZhdWx0QWZmaW5pdHkgPSBEb3duc3RyZWFtOwogCi0gICAgLy8gRklY
TUU6IFdoeSBkb2Vzbid0IHRoaXMgcmVzZXQgbV9hZmZpbml0eT8KLSAgICB2b2lkIGNsZWFyKCkg
eyBtX2RlZXBQb3NpdGlvbiA9IHsgfTsgfQorICAgIFZpc2libGVQb3NpdGlvbigpID0gZGVmYXVs
dDsKKworICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBpZ25vcmUgdGhlIHBhc3NlZC1pbiBh
ZmZpbml0eSBpZiB0aGUgcG9zaXRpb24gaXMgbm90IGF0IHRoZSBlbmQgb2YgYSBsaW5lLgorICAg
IFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIEFmZmluaXR5
ID0gZGVmYXVsdEFmZmluaXR5KTsKIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4g
bV9kZWVwUG9zaXRpb24uaXNOdWxsKCk7IH0KICAgICBib29sIGlzTm90TnVsbCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlzTm90TnVsbCgpOyB9CiAgICAgYm9vbCBpc09ycGhhbigp
IGNvbnN0IHsgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlzT3JwaGFuKCk7IH0KIAogICAgIFBvc2l0
aW9uIGRlZXBFcXVpdmFsZW50KCkgY29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb247IH0KLSAg
ICBFQWZmaW5pdHkgYWZmaW5pdHkoKSBjb25zdCB7IEFTU0VSVChtX2FmZmluaXR5ID09IFVQU1RS
RUFNIHx8IG1fYWZmaW5pdHkgPT0gRE9XTlNUUkVBTSk7IHJldHVybiBtX2FmZmluaXR5OyB9Ci0g
ICAgdm9pZCBzZXRBZmZpbml0eShFQWZmaW5pdHkgYWZmaW5pdHkpIHsgbV9hZmZpbml0eSA9IGFm
ZmluaXR5OyB9CisgICAgQWZmaW5pdHkgYWZmaW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2FmZmlu
aXR5OyB9CisKKyAgICB2b2lkIHNldEFmZmluaXR5KEFmZmluaXR5IGFmZmluaXR5KSB7IG1fYWZm
aW5pdHkgPSBhZmZpbml0eTsgfQogCiAgICAgLy8gRklYTUU6IENoYW5nZSB0aGUgZm9sbG93aW5n
IGZ1bmN0aW9ucycgcGFyYW1ldGVyIGZyb20gYSBib29sZWFuIHRvIFN0YXlJbkVkaXRhYmxlQ29u
dGVudC4KIAotICAgIC8vIG5leHQoKSBhbmQgcHJldmlvdXMoKSB3aWxsIGluY3JlbWVudC9kZWNy
ZW1lbnQgYnkgYSBjaGFyYWN0ZXIgY2x1c3Rlci4KKyAgICAvLyBuZXh0KCkgYW5kIHByZXZpb3Vz
KCkgaW5jcmVtZW50L2RlY3JlbWVudCBieSBhIGNoYXJhY3RlciBjbHVzdGVyLgogICAgIFdFQkNP
UkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBuZXh0KEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVs
ZSA9IENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5LCBib29sKiByZWFjaGVkQm91bmRhcnkgPSBudWxs
cHRyKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMo
RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnksIGJv
b2wqIHJlYWNoZWRCb3VuZGFyeSA9IG51bGxwdHIpIGNvbnN0OworCiAgICAgVmlzaWJsZVBvc2l0
aW9uIGhvbm9yRWRpdGluZ0JvdW5kYXJ5QXRPckJlZm9yZShjb25zdCBWaXNpYmxlUG9zaXRpb24m
LCBib29sKiByZWFjaGVkQm91bmRhcnkgPSBudWxscHRyKSBjb25zdDsKICAgICBWaXNpYmxlUG9z
aXRpb24gaG9ub3JFZGl0aW5nQm91bmRhcnlBdE9yQWZ0ZXIoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5ID0gbnVsbHB0cikgY29uc3Q7CiAKQEAgLTgyLDEzICs2
NywxNiBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFRoaXMgZG9lcyBub3QgaGFuZGxlIFt0YWJs
ZSwgMF0gY29ycmVjdGx5LgogICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2RlZXBQb3NpdGlvbi5pc05vdE51bGwoKSA/IG1fZGVlcFBvc2l0aW9uLmRl
cHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IDA7IH0KIAotICAgIHZvaWQg
Z2V0SW5saW5lQm94QW5kT2Zmc2V0KElubGluZUJveComLCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25z
dDsKLSAgICB2b2lkIGdldElubGluZUJveEFuZE9mZnNldChUZXh0RGlyZWN0aW9uIHByaW1hcnlE
aXJlY3Rpb24sIElubGluZUJveComLCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdDsKKyAgICBJbmxp
bmVCb3hBbmRPZmZzZXQgaW5saW5lQm94QW5kT2Zmc2V0KCkgY29uc3Q7CisgICAgSW5saW5lQm94
QW5kT2Zmc2V0IGlubGluZUJveEFuZE9mZnNldChUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rp
b24pIGNvbnN0OwogCi0gICAgLy8gUmVjdCBpcyBsb2NhbCB0byB0aGUgcmV0dXJuZWQgcmVuZGVy
ZXIKLSAgICBXRUJDT1JFX0VYUE9SVCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KFJlbmRlck9i
amVjdComKSBjb25zdDsKKyAgICBzdHJ1Y3QgTG9jYWxDYXJldFJlY3QgeworICAgICAgICBMYXlv
dXRSZWN0IHJlY3Q7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgeyBudWxscHRyIH07
CisgICAgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBMb2NhbENhcmV0UmVjdCBsb2NhbENhcmV0UmVj
dCgpIGNvbnN0OwogCi0gICAgLy8gQm91bmRzIG9mIChwb3NzaWJseSB0cmFuc2Zvcm1lZCkgY2Fy
ZXQgaW4gYWJzb2x1dGUgY29vcmRzCisgICAgLy8gQm91bmRzIG9mIChwb3NzaWJseSB0cmFuc2Zv
cm1lZCkgY2FyZXQgaW4gYWJzb2x1dGUgY29vcmRzLgogICAgIFdFQkNPUkVfRVhQT1JUIEludFJl
Y3QgYWJzb2x1dGVDYXJldEJvdW5kcyhib29sKiBpbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0
OwogCiAgICAgLy8gQWJzIHgveSBwb3NpdGlvbiBvZiB0aGUgY2FyZXQgaWdub3JpbmcgdHJhbnNm
b3Jtcy4KQEAgLTEwOCwyMCArOTYsMTkgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0g
ICAgdm9pZCBpbml0KGNvbnN0IFBvc2l0aW9uJiwgRUFmZmluaXR5KTsKLSAgICBQb3NpdGlvbiBj
YW5vbmljYWxQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOworICAgIHN0YXRpYyBQb3NpdGlvbiBj
YW5vbmljYWxQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpOwogCiAgICAgUG9zaXRpb24gbGVmdFZp
c3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdDsKICAgICBQb3NpdGlvbiByaWdodFZpc3Vh
bGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdDsKIAogICAgIFBvc2l0aW9uIG1fZGVlcFBvc2l0
aW9uOwotICAgIEVBZmZpbml0eSBtX2FmZmluaXR5OworICAgIEFmZmluaXR5IG1fYWZmaW5pdHkg
eyBkZWZhdWx0QWZmaW5pdHkgfTsKIH07CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWaXNpYmxl
UG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIAotUGFydGlhbE9y
ZGVyaW5nIGRvY3VtZW50T3JkZXIoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJik7CitXRUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRl
cihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
OwogYm9vbCBvcGVyYXRvcj4oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBv
c2l0aW9uJik7CiBib29sIG9wZXJhdG9yPD0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJik7CkBAIC0xMzYsNyArMTIzLDcgQEAgYm9vbCBpc0xhc3RWaXNpYmxl
UG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgTm9kZSopOwogCiBi
b29sIGFyZVZpc2libGVQb3NpdGlvbnNJblNhbWVUcmVlU2NvcGUoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBFQWZmaW5pdHkpOworV1RGOjpUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFmZmluaXR5KTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mKTsKIAogc3RydWN0IFZpc2libGVQb3NpdGlvblJhbmdlIHsKQEAgLTE1MCw5ICsxMzcs
OSBAQCBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdl
KGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJgogCiAvLyBpbmxpbmVzCiAKLS8vIEZJWE1FOiBJ
cyBpdCBjb3JyZWN0IGFuZCBoZWxwZnVsIGZvciB0aGlzIHRvIGJlIGlnbm9yaW5nIGFmZmluaXR5
PwogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgYikKIHsKKyAgICAvLyBGSVhNRTogSXMgaXQgY29ycmVjdCBhbmQg
aGVscGZ1bCBmb3IgdGhpcyB0byBiZSBpZ25vcmluZyBkaWZmZXJlbmNlcyBpbiBhZmZpbml0eT8K
ICAgICByZXR1cm4gYS5kZWVwRXF1aXZhbGVudCgpID09IGIuZGVlcEVxdWl2YWxlbnQoKTsKIH0K
IApAQCAtMTYzLDMyICsxNTAsMzIgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKIAogaW5saW5lIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiBiKQogewotICAgIHJldHVybiBhLmRlZXBFcXVpdmFsZW50KCkgPCBiLmRlZXBFcXVpdmFsZW50
KCk7CisgICAgcmV0dXJuIGlzX2x0KGRvY3VtZW50T3JkZXIoYSwgYikpOwogfQogCiBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mIGIpCiB7Ci0gICAgcmV0dXJuIGEuZGVlcEVxdWl2YWxlbnQoKSA+IGIuZGVlcEVxdWl2
YWxlbnQoKTsKKyAgICByZXR1cm4gaXNfZ3QoZG9jdW1lbnRPcmRlcihhLCBiKSk7CiB9CiAKIGlu
bGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGIpCiB7Ci0gICAgcmV0dXJuIGEuZGVlcEVxdWl2YWxlbnQoKSA8PSBiLmRl
ZXBFcXVpdmFsZW50KCk7CisgICAgcmV0dXJuIGlzX2x0ZXEoZG9jdW1lbnRPcmRlcihhLCBiKSk7
CiB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBhLCBj
b25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCiB7Ci0gICAgcmV0dXJuIGEuZGVlcEVxdWl2YWxlbnQo
KSA+PSBiLmRlZXBFcXVpdmFsZW50KCk7CisgICAgcmV0dXJuIGlzX2d0ZXEoZG9jdW1lbnRPcmRl
cihhLCBiKSk7CiB9CiAKLWlubGluZSB2b2lkIFZpc2libGVQb3NpdGlvbjo6Z2V0SW5saW5lQm94
QW5kT2Zmc2V0KElubGluZUJveComIGlubGluZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QK
K2lubGluZSBhdXRvIFZpc2libGVQb3NpdGlvbjo6aW5saW5lQm94QW5kT2Zmc2V0KCkgY29uc3Qg
LT4gSW5saW5lQm94QW5kT2Zmc2V0CiB7Ci0gICAgbV9kZWVwUG9zaXRpb24uZ2V0SW5saW5lQm94
QW5kT2Zmc2V0KG1fYWZmaW5pdHksIGlubGluZUJveCwgY2FyZXRPZmZzZXQpOworICAgIHJldHVy
biBtX2RlZXBQb3NpdGlvbi5pbmxpbmVCb3hBbmRPZmZzZXQobV9hZmZpbml0eSk7CiB9CiAKLWlu
bGluZSB2b2lkIFZpc2libGVQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KFRleHREaXJl
Y3Rpb24gcHJpbWFyeURpcmVjdGlvbiwgSW5saW5lQm94KiYgaW5saW5lQm94LCBpbnQmIGNhcmV0
T2Zmc2V0KSBjb25zdAoraW5saW5lIGF1dG8gVmlzaWJsZVBvc2l0aW9uOjppbmxpbmVCb3hBbmRP
ZmZzZXQoVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uKSBjb25zdCAtPiBJbmxpbmVCb3hB
bmRPZmZzZXQKIHsKLSAgICBtX2RlZXBQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQobV9h
ZmZpbml0eSwgcHJpbWFyeURpcmVjdGlvbiwgaW5saW5lQm94LCBjYXJldE9mZnNldCk7CisgICAg
cmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlubGluZUJveEFuZE9mZnNldChtX2FmZmluaXR5LCBwcmlt
YXJ5RGlyZWN0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKaW5kZXggNTcxMTlkYjJhYTZlNzg2ZGM2
YjQzMmY2YzM4NzE5ZDVjZTgxNTFhNS4uYTE0NmRiMjhkZDYzNTk5NDhkNmRhNmQ1Mzg1ZGNlMDFj
ZTBlNzE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3Bw
CkBAIC0xNzAsMTUgKzE3MCwxMiBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gVmlzaWJsZVNlbGVj
dGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdAogICAgICAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgXiBzZWxlY3RlZAogICAgICAgICAvLwogICAgICAgICBBU1NFUlQoaXNSYW5nZSgp
KTsKLSAgICAgICAgcyA9IG1fc3RhcnQuZG93bnN0cmVhbSgpOwotICAgICAgICBlID0gbV9lbmQu
dXBzdHJlYW0oKTsKLSAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMocywgZSkgPiAwKSB7Ci0g
ICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXJ0IGlzIGJlZm9yZSB0aGUgZW5kLgotICAg
ICAgICAgICAgLy8gVGhlIGVuZCBjYW4gd2luZCB1cCBiZWZvcmUgdGhlIHN0YXJ0IGlmIGNvbGxh
cHNlZCB3aGl0ZXNwYWNlIGlzIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkLgorICAgICAgICBzID0g
bV9zdGFydC5kb3duc3RyZWFtKCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CisgICAgICAg
IGUgPSBtX2VuZC51cHN0cmVhbSgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOworICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhlIHN0YXJ0IGlzIGJlZm9yZSB0aGUgZW5kLgorICAgICAgICAvLyBU
aGUgZW5kIGNhbiB3aW5kIHVwIGJlZm9yZSB0aGUgc3RhcnQgaWYgY29sbGFwc2VkIHdoaXRlc3Bh
Y2UgaXMgdGhlIG9ubHkgdGhpbmcgc2VsZWN0ZWQuCisgICAgICAgIGlmIChzID4gZSkKICAgICAg
ICAgICAgIHN0ZDo6c3dhcChzLCBlKTsKLSAgICAgICAgfQotICAgICAgICBzID0gcy5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICAgICAgZSA9IGUucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1ha2VTaW1wbGVSYW5nZShzLCBlKTsKQEAgLTIz
NSw3ICsyMzIsNyBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEJhc2VBbmRFeHRlbnRUb0Rl
ZXBFcXVpdmFsZW50cygpCiAgICAgICAgIG1fZXh0ZW50ID0gbV9iYXNlOwogICAgICAgICBtX2Jh
c2VJc0ZpcnN0ID0gdHJ1ZTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9iYXNlSXNGaXJzdCA9IGNv
bXBhcmVQb3NpdGlvbnMobV9iYXNlLCBtX2V4dGVudCkgPD0gMDsKKyAgICAgICAgbV9iYXNlSXNG
aXJzdCA9IG1fYmFzZSA8PSBtX2V4dGVudDsKIH0KIAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpz
ZXRTdGFydEFuZEVuZEZyb21CYXNlQW5kRXh0ZW50UmVzcGVjdGluZ0dyYW51bGFyaXR5KFRleHRH
cmFudWxhcml0eSBncmFudWxhcml0eSkKQEAgLTQyNyw3ICs0MjQsNyBAQCB2b2lkIFZpc2libGVT
ZWxlY3Rpb246OnNldFdpdGhvdXRWYWxpZGF0aW9uKGNvbnN0IFBvc2l0aW9uJiBiYXNlLCBjb25z
dCBQb3NpdGlvbgogICAgIEFTU0VSVChtX2FmZmluaXR5ID09IERPV05TVFJFQU0pOwogICAgIG1f
YmFzZSA9IGJhc2U7CiAgICAgbV9leHRlbnQgPSBleHRlbnQ7Ci0gICAgbV9iYXNlSXNGaXJzdCA9
IGNvbXBhcmVQb3NpdGlvbnMoYmFzZSwgZXh0ZW50KSA8PSAwOworICAgIG1fYmFzZUlzRmlyc3Qg
PSBiYXNlIDw9IGV4dGVudDsKICAgICBpZiAobV9iYXNlSXNGaXJzdCkgewogICAgICAgICBtX3N0
YXJ0ID0gYmFzZTsKICAgICAgICAgbV9lbmQgPSBleHRlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVVbml0cy5jcHAKaW5kZXggYTMyOWIxMjFhNGMzMWQzZGU0YmNjMDUzZjU1YThlZmRj
ZmRjNzRmMC4uZmY4MzAzNDlkNDY2YjQ2MmU4ZDAzMmMwMDgwZTg1MjllNjM1OGIwYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApAQCAtMzc1LDkgKzM3NSw4IEBAIHN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gdmlzdWFsV29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvc2l0aW9uCiAgICAgICAgIGlmIChwcmV2aW91c1Bvc2l0aW9uICYmIGFk
amFjZW50Q2hhcmFjdGVyUG9zaXRpb24gPT0gcHJldmlvdXNQb3NpdGlvbi52YWx1ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAotICAgICAgICBJbmxpbmVC
b3gqIGJveDsKLSAgICAgICAgaW50IG9mZnNldEluQm94OwotICAgICAgICBhZGphY2VudENoYXJh
Y3RlclBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KFVQU1RS
RUFNLCBib3gsIG9mZnNldEluQm94KTsKKyAgICAgICAgLy8gRklYTUU6IFdoeSBmb3JjZSB0aGUg
dXNlIG9mIFVwc3RyZWFtIGFmZmluaXR5IGhlcmUgaW5zdGVhZCBvZiBWaXNpYmxlUG9zaXRpb246
OmlubGluZUJveEFuZE9mZnNldCwgd2hpY2ggd2lsbCBnZXQgYWZmaW5pdHkgZnJvbSBhZGphY2Vu
dENoYXJhY3RlclBvc2l0aW9uPworICAgICAgICBhdXRvIFtib3gsIG9mZnNldEluQm94XSA9IGFk
amFjZW50Q2hhcmFjdGVyUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5pbmxpbmVCb3hBbmRPZmZz
ZXQoVXBzdHJlYW0pOwogICAgIAogICAgICAgICBpZiAoIWJveCkKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtNjcwLDcgKzY2OSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRhcnlTZWFyY2hGdW5jCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHBvcywgVlBfVVBTVFJFQU1fSUZf
UE9TU0lCTEUpOworICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocG9zLCBVcHN0cmVhbSk7CiB9
CiAKIC8vIC0tLS0tLS0tLQpAQCAtODk3LDcgKzg5Niw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRp
b24gZW5kUG9zaXRpb25Gb3JMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgTGluZUVuZHBv
aW50CiAgICAgfSBlbHNlCiAgICAgICAgIHBvcyA9IHBvc2l0aW9uQWZ0ZXJOb2RlKGVuZE5vZGUp
OwogICAgIAotICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocG9zLCBWUF9VUFNUUkVBTV9JRl9Q
T1NTSUJMRSk7CisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihwb3MsIFVwc3RyZWFtKTsKIH0K
IAogc3RhdGljIGJvb2wgaW5TYW1lTG9naWNhbExpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBh
LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIGIpCkBAIC05NzUsNyArOTc0LDcgQEAgYm9vbCBpc0Vu
ZE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHApCiAgICAgcmV0dXJuIHAuaXNOb3ROdWxs
KCkgJiYgcCA9PSBlbmRPZkxpbmUocCk7CiB9CiAKLWJvb2wgaXNMb2dpY2FsRW5kT2ZMaW5lKGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmcCkKK2Jvb2wgaXNMb2dpY2FsRW5kT2ZMaW5lKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgcCkKIHsKICAgICByZXR1cm4gcC5pc05vdE51bGwoKSAmJiBwID09IGxv
Z2ljYWxFbmRPZkxpbmUocCk7CiB9CkBAIC0xMDEzLDEwICsxMDEyLDcgQEAgVmlzaWJsZVBvc2l0
aW9uIHByZXZpb3VzTGluZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBv
c2l0aW9uLCBpbnQKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCiAgICAgUm9v
dElubGluZUJveCogcm9vdCA9IG51bGxwdHI7Ci0gICAgSW5saW5lQm94KiBib3g7Ci0gICAgaW50
IGlnbm9yZWRDYXJldE9mZnNldDsKLSAgICB2aXNpYmxlUG9zaXRpb24uZ2V0SW5saW5lQm94QW5k
T2Zmc2V0KGJveCwgaWdub3JlZENhcmV0T2Zmc2V0KTsKLSAgICBpZiAoYm94KSB7CisgICAgaWYg
KGF1dG8gYm94ID0gdmlzaWJsZVBvc2l0aW9uLmlubGluZUJveEFuZE9mZnNldCgpLmJveCkgewog
ICAgICAgICByb290ID0gYm94LT5yb290KCkucHJldlJvb3RCb3goKTsKICAgICAgICAgLy8gV2Ug
d2FudCB0byBza2lwIHplcm8gaGVpZ2h0IGJveGVzLgogICAgICAgICAvLyBUaGlzIGNvdWxkIGhh
cHBlbiBpbiBjYXNlIGl0IGlzIGEgVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LgpAQCAtMTA1
NywyMSArMTA1MywxNiBAQCBWaXNpYmxlUG9zaXRpb24gbmV4dExpbmVQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbiwgaW50IGxpbgogewogICAgIFBvc2l0aW9u
IHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKICAgICBOb2RlKiBub2RlID0g
cC5kZXByZWNhdGVkTm9kZSgpOwotCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7CiAgICAgCiAgICAgbm9kZS0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCisgICAgaWYgKCFub2RlLT5y
ZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKICAgICBSb290
SW5saW5lQm94KiByb290ID0gbnVsbHB0cjsKLSAgICBJbmxpbmVCb3gqIGJveDsKLSAgICBpbnQg
aWdub3JlZENhcmV0T2Zmc2V0OwotICAgIHZpc2libGVQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRP
ZmZzZXQoYm94LCBpZ25vcmVkQ2FyZXRPZmZzZXQpOwotICAgIGlmIChib3gpIHsKKyAgICBpZiAo
YXV0byBib3ggPSB2aXNpYmxlUG9zaXRpb24uaW5saW5lQm94QW5kT2Zmc2V0KCkuYm94KSB7CiAg
ICAgICAgIHJvb3QgPSBib3gtPnJvb3QoKS5uZXh0Um9vdEJveCgpOwogICAgICAgICAvLyBXZSB3
YW50IHRvIHNraXAgemVybyBoZWlnaHQgYm94ZXMuCiAgICAgICAgIC8vIFRoaXMgY291bGQgaGFw
cGVuIGluIGNhc2UgaXQgaXMgYSBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guCkBAIC0xNTY5
LDkgKzE1NjAsOCBAQCBib29sIGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgdnAsIFRleHRHcmFudWxhcml0eSBncmFudWxhcgogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpMaW5lR3JhbnVsYXJpdHk6Ci0gICAgICAgIC8vIEFm
ZmluaXR5IGhhcyB0byBiZSBzZXQgdG8gZ2V0IHJpZ2h0IGJvdW5kYXJ5IG9mIHRoZSBsaW5lLgog
ICAgICAgICBib3VuZGFyeSA9IHZwOwotICAgICAgICBib3VuZGFyeS5zZXRBZmZpbml0eSh1c2VE
b3duc3RyZWFtID8gVlBfVVBTVFJFQU1fSUZfUE9TU0lCTEUgOiBET1dOU1RSRUFNKTsKKyAgICAg
ICAgYm91bmRhcnkuc2V0QWZmaW5pdHkodXNlRG93bnN0cmVhbSA/IFVwc3RyZWFtIDogRG93bnN0
cmVhbSk7CiAgICAgICAgIGJvdW5kYXJ5ID0gdXNlRG93bnN0cmVhbSA/IGVuZE9mTGluZShib3Vu
ZGFyeSkgOiBzdGFydE9mTGluZShib3VuZGFyeSk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0xNzY1
LDcgKzE3NTUsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lQm91bmRhcnlJbkRp
cmVjdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBTZQogICAgICAgICByZXN1bHQuc2V0
QWZmaW5pdHkoRE9XTlNUUkVBTSk7CiAgICAgICAgIHJlc3VsdCA9IGlzRW5kT2ZMaW5lKHJlc3Vs
dCkgPyBzdGFydE9mTGluZShuZXh0TGluZVBvc2l0aW9uKHJlc3VsdCwgcmVzdWx0LmxpbmVEaXJl
Y3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbigpKSkgOiBlbmRPZkxpbmUocmVz
dWx0KTsKICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQuc2V0QWZmaW5pdHkoVlBfVVBTVFJF
QU1fSUZfUE9TU0lCTEUpOworICAgICAgICByZXN1bHQuc2V0QWZmaW5pdHkoVXBzdHJlYW0pOwog
ICAgICAgICByZXN1bHQgPSBpc1N0YXJ0T2ZMaW5lKHJlc3VsdCkgPyBlbmRPZkxpbmUocHJldmlv
dXNMaW5lUG9zaXRpb24ocmVzdWx0LCByZXN1bHQubGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tE
aXJlY3Rpb25OYXZpZ2F0aW9uKCkpKSA6IHN0YXJ0T2ZMaW5lKHJlc3VsdCk7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaAppbmRleCBmNDc1MWI3ZjUwNTlkNDhkMTIw
NTI2OTNjOGZkYTkyNzE3YWY1Mzk3Li4yNGY1ODhjNWIwN2NhNDcyZjc4NzdmZTE3Mzg4NDMzMmU3
ODFlMzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKQEAgLTM4LDMxICsz
OCwzMSBAQCBjbGFzcyBUZXh0SXRlcmF0b3I7CiBlbnVtIEVXb3JkU2lkZSB7IFJpZ2h0V29yZElm
T25Cb3VuZGFyeSA9IGZhbHNlLCBMZWZ0V29yZElmT25Cb3VuZGFyeSA9IHRydWUgfTsKIAogLy8g
d29yZHMKLVdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBzdGFydE9mV29yZChjb25zdCBW
aXNpYmxlUG9zaXRpb24gJiwgRVdvcmRTaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKLVdF
QkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBlbmRPZldvcmQoY29uc3QgVmlzaWJsZVBvc2l0
aW9uICYsIEVXb3JkU2lkZSA9IFJpZ2h0V29yZElmT25Cb3VuZGFyeSk7Ci1XRUJDT1JFX0VYUE9S
VCBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0
aW9uICYpOwotV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIG5leHRXb3JkUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOworV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0T2ZXb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIEVXb3JkU2lkZSA9IFJpZ2h0V29y
ZElmT25Cb3VuZGFyeSk7CitXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZXb3Jk
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIEVXb3JkU2lkZSA9IFJpZ2h0V29yZElmT25Cb3VuZGFy
eSk7CitXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNXb3JkUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24g
bmV4dFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIFZpc2libGVQb3NpdGlv
biByaWdodFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBib29sIHNraXBzU3Bh
Y2VXaGVuTW92aW5nUmlnaHQpOwogVmlzaWJsZVBvc2l0aW9uIGxlZnRXb3JkUG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiwgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0KTsKIGJv
b2wgaXNTdGFydE9mV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIAogLy8gc2VudGVuY2Vz
Ci1XRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlNlbnRlbmNlKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmKTsKLVdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBlbmRPZlNl
bnRlbmNlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsKLVdFQkNPUkVfRVhQT1JUIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91c1NlbnRlbmNlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICYp
OwotV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIG5leHRTZW50ZW5jZVBvc2l0aW9uKGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmKTsKK1dFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBz
dGFydE9mU2VudGVuY2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitXRUJDT1JFX0VYUE9SVCBW
aXNpYmxlUG9zaXRpb24gZW5kT2ZTZW50ZW5jZShjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKK1dF
QkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1NlbnRlbmNlUG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJik7CitXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gbmV4
dFNlbnRlbmNlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKIC8vIGxpbmVzCi1X
RUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkxpbmUoY29uc3QgVmlzaWJsZVBv
c2l0aW9uICYpOwotV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIGVuZE9mTGluZShjb25z
dCBWaXNpYmxlUG9zaXRpb24gJik7CitXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitXRUJDT1JFX0VYUE9SVCBWaXNpYmxl
UG9zaXRpb24gZW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogV0VCQ09SRV9FWFBP
UlQgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzTGluZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYsIGludCBsaW5lRGlyZWN0aW9uUG9pbnQsIEVkaXRhYmxlVHlwZSA9IENvbnRlbnRJc0Vk
aXRhYmxlKTsKIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZVBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGludCBsaW5lRGlyZWN0aW9uUG9pbnQsIEVkaXRhYmxl
VHlwZSA9IENvbnRlbnRJc0VkaXRhYmxlKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgaW5TYW1lTGlu
ZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwotV0VC
Q09SRV9FWFBPUlQgYm9vbCBpc1N0YXJ0T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmKTsK
LVdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYp
OwotVmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxTdGFydE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRp
b24gJiwgYm9vbCogcmVhY2hlZEJvdW5kYXJ5ID0gbnVsbHB0cik7Ci1WaXNpYmxlUG9zaXRpb24g
bG9naWNhbEVuZE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgYm9vbCogcmVhY2hlZEJv
dW5kYXJ5ID0gbnVsbHB0cik7Ci1ib29sIGlzTG9naWNhbEVuZE9mTGluZShjb25zdCBWaXNpYmxl
UG9zaXRpb24gJik7CitXRUJDT1JFX0VYUE9SVCBib29sIGluU2FtZUxpbmUoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitXRUJDT1JFX0VYUE9SVCBib29s
IGlzU3RhcnRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CitXRUJDT1JFX0VYUE9SVCBi
b29sIGlzRW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworVmlzaWJsZVBvc2l0aW9u
IGxvZ2ljYWxTdGFydE9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBib29sKiByZWFjaGVk
Qm91bmRhcnkgPSBudWxscHRyKTsKK1Zpc2libGVQb3NpdGlvbiBsb2dpY2FsRW5kT2ZMaW5lKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYsIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSA9IG51bGxwdHIpOwor
Ym9vbCBpc0xvZ2ljYWxFbmRPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiBWaXNpYmxl
UG9zaXRpb24gbGVmdEJvdW5kYXJ5T2ZMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIFRleHRE
aXJlY3Rpb24sIGJvb2wqIHJlYWNoZWRCb3VuZGFyeSk7CiBWaXNpYmxlUG9zaXRpb24gcmlnaHRC
b3VuZGFyeU9mTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBUZXh0RGlyZWN0aW9uLCBib29s
KiByZWFjaGVkQm91bmRhcnkpOwogCkBAIC03MCwyOCArNzAsMjggQEAgVmlzaWJsZVBvc2l0aW9u
IHJpZ2h0Qm91bmRhcnlPZkxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgVGV4dERpcmVjdGlv
biwgYm9vbCoKIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBo
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENh
bm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlv
biBlbmRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBFZGl0aW5nQm91bmRhcnlD
cm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZk5leHRQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci1XRUJDT1JF
X0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNQYXJhZ3JhcGhQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24gJiwgaW50IHgpOwotV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9u
IG5leHRQYXJhZ3JhcGhQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgaW50IHgpOwot
V0VCQ09SRV9FWFBPUlQgYm9vbCBpc1N0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0
aW9uICYsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0Jv
dW5kYXJ5KTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbmRPZlBhcmFncmFwaChjb25zdCBWaXNp
YmxlUG9zaXRpb24gJiwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NF
ZGl0aW5nQm91bmRhcnkpOwotYm9vbCBpblNhbWVQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0
aW9uICYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1
bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci1ib29sIGlzQmxhbmtQYXJhZ3JhcGgo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOworV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9u
IHByZXZpb3VzUGFyYWdyYXBoUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgaW50IHgp
OworV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIG5leHRQYXJhZ3JhcGhQb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mLCBpbnQgeCk7CitXRUJDT1JFX0VYUE9SVCBib29sIGlzU3Rh
cnRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBFZGl0aW5nQm91bmRhcnlDcm9z
c2luZ1J1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CitXRUJDT1JFX0VYUE9SVCBi
b29sIGlzRW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgRWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOworYm9vbCBpblNh
bWVQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRh
cnkpOworYm9vbCBpc0JsYW5rUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCiAv
LyBibG9ja3MgKHRydWUgcGFyYWdyYXBoczsgbGluZSBicmVhayBlbGVtZW50cyBkb24ndCBicmVh
ayBibG9ja3MpCi1WaXNpYmxlUG9zaXRpb24gc3RhcnRPZkJsb2NrKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdC
b3VuZGFyeSk7Ci1WaXNpYmxlUG9zaXRpb24gZW5kT2ZCbG9jayhjb25zdCBWaXNpYmxlUG9zaXRp
b24gJiwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91
bmRhcnkpOwotYm9vbCBpblNhbWVCbG9jayhjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICYpOwotYm9vbCBpc1N0YXJ0T2ZCbG9jayhjb25zdCBWaXNpYmxlUG9z
aXRpb24gJik7Ci1ib29sIGlzRW5kT2ZCbG9jayhjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CitW
aXNpYmxlUG9zaXRpb24gc3RhcnRPZkJsb2NrKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIEVkaXRp
bmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKK1Zp
c2libGVQb3NpdGlvbiBlbmRPZkJsb2NrKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIEVkaXRpbmdC
b3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKK2Jvb2wg
aW5TYW1lQmxvY2soY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9u
Jik7Citib29sIGlzU3RhcnRPZkJsb2NrKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworYm9vbCBp
c0VuZE9mQmxvY2soY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKIC8vIGRvY3VtZW50CiBXRUJD
T1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkRvY3VtZW50KGNvbnN0IE5vZGUqKTsK
IFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBlbmRPZkRvY3VtZW50KGNvbnN0IE5vZGUq
KTsKLVdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvbiBzdGFydE9mRG9jdW1lbnQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICYpOwotV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIGVuZE9m
RG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwotYm9vbCBpblNhbWVEb2N1bWVudChj
b25zdCBWaXNpYmxlUG9zaXRpb24gJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwotV0VCQ09S
RV9FWFBPUlQgYm9vbCBpc1N0YXJ0T2ZEb2N1bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7
Ci1XRUJDT1JFX0VYUE9SVCBib29sIGlzRW5kT2ZEb2N1bWVudChjb25zdCBWaXNpYmxlUG9zaXRp
b24gJik7CitXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkRvY3VtZW50KGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09SRV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIGVu
ZE9mRG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Citib29sIGluU2FtZURvY3VtZW50
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworV0VCQ09S
RV9FWFBPUlQgYm9vbCBpc1N0YXJ0T2ZEb2N1bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsK
K1dFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbmRPZkRvY3VtZW50KGNvbnN0IFZpc2libGVQb3NpdGlv
biYpOwogCiAvLyBlZGl0YWJsZSBjb250ZW50CiBXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZkVkaXRhYmxlQ29udGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQppbmRleCA2OTQ1ZTJl
NTUxNzE3OGY3OGM1NTU0MWYyNGEwODVmMDA0MGI1YmI0Li5mYjkxMzU5Y2EwZDYxMDc3ZjlmYWNl
MTA0N2ZlOWY0Yzg3ZjI3NTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0hUTUxDb252ZXJ0ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9I
VE1MQ29udmVydGVyLm1tCkBAIC0zOTgsNyArMzk4LDcgQEAgSFRNTENvbnZlcnRlcjo6fkhUTUxD
b252ZXJ0ZXIoKQogCiBBdHRyaWJ1dGVkU3RyaW5nIEhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQoKQog
ewotICAgIGlmIChjb21wYXJlUG9zaXRpb25zKG1fc3RhcnQsIG1fZW5kKSA+IDApCisgICAgaWYg
KG1fc3RhcnQgPiBtX2VuZCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIE5vZGUqIGNvbW1v
bkFuY2VzdG9yQ29udGFpbmVyID0gX2NhY2hlcy0+Y2FjaGVBbmNlc3RvcnNPZlN0YXJ0VG9CZUNv
bnZlcnRlZChtX3N0YXJ0LCBtX2VuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJ
T1MubW0KaW5kZXggNzIxMGQzZjljMGFlMWU1YTcxYjNmMjBjYzhmMTEwYWMzODVjNjAxNy4uMDhk
MTJkYmQwMGYyMjY2MTBkM2E0ZTU1ZjEwNTg2ZmVkNDU3MzE4YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtMzYzLDE3ICszNjMsMTMgQEAgdm9pZCBFZGl0b3I6
OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgRWxlbWVudCYgZWxl
bWVudCkKICAgICB9CiAKICAgICAvLyBzZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgZW5kCi0gICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb247Ci0KLSAgICBQb3NpdGlvbiBwb3MgPSBjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24oJmVsZW1lbnQsIGVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkp
OwotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MocG9zLCBWUF9ERUZBVUxUX0FGRklO
SVRZKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24oJmVsZW1lbnQsIGVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkpKTsKICAgICBpZiAo
dmlzaWJsZVBvcy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb247CiAgICAgc2VsZWN0aW9uLnNldEJhc2UodmlzaWJsZVBvcyk7CiAgICAg
c2VsZWN0aW9uLnNldEV4dGVudCh2aXNpYmxlUG9zKTsKLQogICAgIG1fZG9jdW1lbnQuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CiAKICAgICBjbGllbnQoKS0+cmVzcG9uZFRv
Q2hhbmdlZENvbnRlbnRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
cmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggNmI4ZTM5
OWE1ZjhhZWRmMWViYjQ3YmJiNmY2ZDUyNjlkYmE4NWQ4Zi4uZTcyNTI3MDFmMTMwN2JjZDE0ZDAx
MDY1OTlmMzcxMTdhZmFjMTgxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNTg0
LDcgKzU4NCw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhT
dHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IEVsZW1lbnQmIGVsCiAKIE5vZGUqIFN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlcyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgQVNTRVJUKGNvbXBhcmVQb3NpdGlvbnMoc3RhcnQsIGVu
ZCkgPD0gMCk7CisgICAgQVNTRVJUKHN0YXJ0IDw9IGVuZCk7CiAgICAgYXV0byBzdGFydE5vZGUg
PSBzdGFydC5maXJzdE5vZGUoKTsKICAgICBOb2RlKiBwYXN0RW5kID0gZW5kLmNvbXB1dGVOb2Rl
QWZ0ZXJQb3NpdGlvbigpOwogICAgIGlmICghcGFzdEVuZCAmJiBlbmQuY29udGFpbmVyTm9kZSgp
KQpAQCAtODM5LDcgKzgzOSw3IEBAIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXplUHJlc2VydmluZ1Zp
c3VhbEFwcGVhcmFuY2VJbnRlcm5hbChjb25zdCBQb3NpdGlvbiYgc3RhcnQsCiB7CiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5n
KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCI8YnIgY2xhc3M9XCIiIEFwcGxlSW50ZXJjaGFuZ2VO
ZXdsaW5lICJcIj4iKSk7CiAKLSAgICBpZiAoIWNvbXBhcmVQb3NpdGlvbnMoc3RhcnQsIGVuZCkp
CisgICAgaWYgKHN0YXJ0ID09IGVuZCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAK
ICAgICBhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Ioc3RhcnQs
IGVuZCk7CkBAIC04NzEsNyArODcxLDcgQEAgc3RhdGljIFN0cmluZyBzZXJpYWxpemVQcmVzZXJ2
aW5nVmlzdWFsQXBwZWFyYW5jZUludGVybmFsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwKICAgICAg
ICAgYWNjdW11bGF0b3IuYXBwZW5kKGludGVyY2hhbmdlTmV3bGluZVN0cmluZy5nZXQoKSk7CiAg
ICAgICAgIHN0YXJ0QWRqdXN0ZWRGb3JJbnRlcmNoYW5nZU5ld2xpbmUgPSB2aXNpYmxlU3RhcnQu
bmV4dCgpLmRlZXBFcXVpdmFsZW50KCk7CiAKLSAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMo
c3RhcnRBZGp1c3RlZEZvckludGVyY2hhbmdlTmV3bGluZSwgZW5kKSA+PSAwKQorICAgICAgICBp
ZiAoIShzdGFydEFkanVzdGVkRm9ySW50ZXJjaGFuZ2VOZXdsaW5lIDwgZW5kKSkKICAgICAgICAg
ICAgIHJldHVybiBpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmc7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYTIzNjZmMWZhMDQ3NDRlYjI1Yzc5YzQxNmZiYmUz
MzliNTgyNTEyYy4uZWFjNmY4MmU4MTM4NDFlOGZjZWY2MjE3NTYwM2E5N2E2YWNjN2ZhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNzA5LDkgKzcwOSw5IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRTaW5nbGVDbGljayhjb25zdCBNb3Vz
ZUV2ZW50V2l0aEhpdFRlc3RSCiAgICAgaWYgKGV4dGVuZFNlbGVjdGlvbiAmJiBuZXdTZWxlY3Rp
b24uaXNDYXJldE9yUmFuZ2UoKSkgewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlv
bkluVXNlclNlbGVjdEFsbCA9IGV4cGFuZFNlbGVjdGlvblRvUmVzcGVjdFNlbGVjdE9uTW91c2VE
b3duKCp0YXJnZXROb2RlLCBWaXNpYmxlU2VsZWN0aW9uKHBvcykpOwogICAgICAgICBpZiAoc2Vs
ZWN0aW9uSW5Vc2VyU2VsZWN0QWxsLmlzUmFuZ2UoKSkgewotICAgICAgICAgICAgaWYgKGNvbXBh
cmVQb3NpdGlvbnMoc2VsZWN0aW9uSW5Vc2VyU2VsZWN0QWxsLnN0YXJ0KCksIG5ld1NlbGVjdGlv
bi5zdGFydCgpKSA8IDApCisgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSW5Vc2VyU2VsZWN0QWxs
LnN0YXJ0KCkgPCBuZXdTZWxlY3Rpb24uc3RhcnQoKSkKICAgICAgICAgICAgICAgICBwb3MgPSBz
ZWxlY3Rpb25JblVzZXJTZWxlY3RBbGwuc3RhcnQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNv
bXBhcmVQb3NpdGlvbnMobmV3U2VsZWN0aW9uLmVuZCgpLCBzZWxlY3Rpb25JblVzZXJTZWxlY3RB
bGwuZW5kKCkpIDwgMCkKKyAgICAgICAgICAgIGVsc2UgaWYgKG5ld1NlbGVjdGlvbi5lbmQoKSA8
IHNlbGVjdGlvbkluVXNlclNlbGVjdEFsbC5lbmQoKSkKICAgICAgICAgICAgICAgICBwb3MgPSBz
ZWxlY3Rpb25JblVzZXJTZWxlY3RBbGwuZW5kKCk7CiAgICAgICAgIH0KIApAQCAtMTAzMiwxMSAr
MTAzMiwxMSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlU2VsZWN0aW9uRm9yTW91c2VEcmFn
KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bAogICAgICAgICBuZXdTZWxlY3Rpb24u
c2V0RXh0ZW50KHBvc2l0aW9uQWZ0ZXJOb2RlKHJvb3RVc2VyU2VsZWN0QWxsRm9yTW91c2VQcmVz
c05vZGUpLmRvd25zdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICAvLyBSZXNldCBiYXNlIGZvciB1c2VyIHNlbGVjdCBhbGwgd2hlbiBiYXNlIGlz
IGluc2lkZSB1c2VyLXNlbGVjdC1hbGwgYXJlYSBhbmQgZXh0ZW50IDwgYmFzZS4KLSAgICAgICAg
aWYgKHJvb3RVc2VyU2VsZWN0QWxsRm9yTW91c2VQcmVzc05vZGUgJiYgY29tcGFyZVBvc2l0aW9u
cyh0YXJnZXQtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVzdFJlc3VsdC5sb2Nh
bFBvaW50KCksIG51bGxwdHIpLCBtX21vdXNlUHJlc3NOb2RlLT5yZW5kZXJlcigpLT5wb3NpdGlv
bkZvclBvaW50KG1fZHJhZ1N0YXJ0UG9zaXRpb24sIG51bGxwdHIpKSA8IDApCisgICAgICAgIGlm
IChyb290VXNlclNlbGVjdEFsbEZvck1vdXNlUHJlc3NOb2RlICYmIHRhcmdldC0+cmVuZGVyZXIo
KS0+cG9zaXRpb25Gb3JQb2ludChoaXRUZXN0UmVzdWx0LmxvY2FsUG9pbnQoKSwgbnVsbHB0cikg
PCBtX21vdXNlUHJlc3NOb2RlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KG1fZHJhZ1N0
YXJ0UG9zaXRpb24sIG51bGxwdHIpKQogICAgICAgICAgICAgbmV3U2VsZWN0aW9uLnNldEJhc2Uo
cG9zaXRpb25BZnRlck5vZGUocm9vdFVzZXJTZWxlY3RBbGxGb3JNb3VzZVByZXNzTm9kZSkuZG93
bnN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkpOwogICAgICAgICAKICAgICAgICAgTm9k
ZSogcm9vdFVzZXJTZWxlY3RBbGxGb3JUYXJnZXQgPSBQb3NpdGlvbjo6cm9vdFVzZXJTZWxlY3RB
bGxGb3JOb2RlKHRhcmdldCk7Ci0gICAgICAgIGlmIChyb290VXNlclNlbGVjdEFsbEZvclRhcmdl
dCAmJiBtX21vdXNlUHJlc3NOb2RlLT5yZW5kZXJlcigpICYmIGNvbXBhcmVQb3NpdGlvbnModGFy
Z2V0LT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KGhpdFRlc3RSZXN1bHQubG9jYWxQb2lu
dCgpLCBudWxscHRyKSwgbV9tb3VzZVByZXNzTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQ
b2ludChtX2RyYWdTdGFydFBvc2l0aW9uLCBudWxscHRyKSkgPCAwKQorICAgICAgICBpZiAocm9v
dFVzZXJTZWxlY3RBbGxGb3JUYXJnZXQgJiYgbV9tb3VzZVByZXNzTm9kZS0+cmVuZGVyZXIoKSAm
JiB0YXJnZXQtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoaGl0VGVzdFJlc3VsdC5sb2Nh
bFBvaW50KCksIG51bGxwdHIpIDwgbV9tb3VzZVByZXNzTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRp
b25Gb3JQb2ludChtX2RyYWdTdGFydFBvc2l0aW9uLCBudWxscHRyKSkKICAgICAgICAgICAgIG5l
d1NlbGVjdGlvbi5zZXRFeHRlbnQocG9zaXRpb25CZWZvcmVOb2RlKHJvb3RVc2VyU2VsZWN0QWxs
Rm9yVGFyZ2V0KS51cHN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkpOwogICAgICAgICBl
bHNlIGlmIChyb290VXNlclNlbGVjdEFsbEZvclRhcmdldCAmJiBtX21vdXNlUHJlc3NOb2RlLT5y
ZW5kZXJlcigpKQogICAgICAgICAgICAgbmV3U2VsZWN0aW9uLnNldEV4dGVudChwb3NpdGlvbkFm
dGVyTm9kZShyb290VXNlclNlbGVjdEFsbEZvclRhcmdldCkuZG93bnN0cmVhbShDYW5Dcm9zc0Vk
aXRpbmdCb3VuZGFyeSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRMaW5lQm94ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRMaW5lQm94ZXMuY3BwCmluZGV4IDMzNDkxZTA0ZmI5MTRjNGQ3YmMyMzYwOTc5M2JlMWQ1OGNh
YzlmYWIuLmQxNmFmMDVkYmJlMWYxMWVhYWUyYjAwM2ViMmE4ZWMxZDFlYTkzOWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKQEAgLTIx
MCwxNiArMjEwLDE2IEBAIHN0YXRpYyBib29sIGxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveChp
bnQgcG9pbnRMaW5lRGlyZWN0aW9uLCBjb25zdCBJbmxpbmVUZXh0CiAKIHN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94KGNvbnN0IElubGluZUJveCYgYm94
LCBpbnQgb2Zmc2V0LCBTaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSBzaG91bGRBZmZpbml0eUJl
RG93bnN0cmVhbSkKIHsKLSAgICBFQWZmaW5pdHkgYWZmaW5pdHkgPSBWUF9ERUZBVUxUX0FGRklO
SVRZOworICAgIGF1dG8gYWZmaW5pdHkgPSBWaXNpYmxlUG9zaXRpb246OmRlZmF1bHRBZmZpbml0
eTsKICAgICBzd2l0Y2ggKHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKSB7CiAgICAgY2FzZSBB
bHdheXNEb3duc3RyZWFtOgotICAgICAgICBhZmZpbml0eSA9IERPV05TVFJFQU07CisgICAgICAg
IGFmZmluaXR5ID0gRG93bnN0cmVhbTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbHdheXNV
cHN0cmVhbToKLSAgICAgICAgYWZmaW5pdHkgPSBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRTsKKyAg
ICAgICAgYWZmaW5pdHkgPSBVcHN0cmVhbTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBVcHN0
cmVhbUlmUG9zaXRpb25Jc05vdEF0U3RhcnQ6Ci0gICAgICAgIGFmZmluaXR5ID0gb2Zmc2V0ID4g
Ym94LmNhcmV0TWluT2Zmc2V0KCkgPyBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSA6IERPV05TVFJF
QU07CisgICAgICAgIGFmZmluaXR5ID0gb2Zmc2V0ID4gYm94LmNhcmV0TWluT2Zmc2V0KCkgPyBV
cHN0cmVhbSA6IERvd25zdHJlYW07CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4g
Ym94LnJlbmRlcmVyKCkuY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG9mZnNldCwgYWZmaW5pdHkpOwpA
QCAtMzIzLDcgKzMyMyw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0TGluZUJveGVzOjpw
b3NpdGlvbkZvclBvaW50KGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICAgICAgICAgICAgICBpZiAocG9pbnRMaW5lRGlyZWN0aW9uICE9IGJv
eC0+bG9naWNhbExlZnQoKSAmJiBwb2ludC54KCkgPCBib3gtPngoKSArIGJveC0+bG9naWNhbFdp
ZHRoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGhhbGYgPSBib3gtPngoKSArIGJveC0+
bG9naWNhbFdpZHRoKCkgLyAyOwotICAgICAgICAgICAgICAgICAgICBFQWZmaW5pdHkgYWZmaW5p
dHkgPSBwb2ludC54KCkgPCBoYWxmID8gRE9XTlNUUkVBTSA6IFZQX1VQU1RSRUFNX0lGX1BPU1NJ
QkxFOworICAgICAgICAgICAgICAgICAgICBhdXRvIGFmZmluaXR5ID0gcG9pbnQueCgpIDwgaGFs
ZiA/IERvd25zdHJlYW0gOiBVcHN0cmVhbTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
bmRlcmVyLmNyZWF0ZVZpc2libGVQb3NpdGlvbihib3gtPm9mZnNldEZvclBvc2l0aW9uKHBvaW50
TGluZURpcmVjdGlvbikgKyBib3gtPnN0YXJ0KCksIGFmZmluaXR5KTsKICAgICAgICAgICAgICAg
ICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW5saW5lVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0lubGluZVRleHQuY3BwCmluZGV4IGRiZjQ5MDNmODlmNGRjOTJlZGZmMzA1MzkyNTg2OWYz
MmUyZDk5YzAuLmFlMDZlNGNiNTI5NzEwM2Y3YzBiYWY2OGEyYTIwMGViZTI4NDQyNjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0
LmNwcApAQCAtMjE5LDcgKzIxOSw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdJbmxpbmVU
ZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwKICAgICAgICAg
cmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBET1dOU1RSRUFNKTsKIAogICAgIGludCBv
ZmZzZXQgPSBjbG9zZXN0RGlzdGFuY2VCb3gtPm9mZnNldEZvclBvc2l0aW9uSW5GcmFnbWVudCgq
Y2xvc2VzdERpc3RhbmNlRnJhZ21lbnQsIGFic29sdXRlUG9pbnQueCgpIC0gY2xvc2VzdERpc3Rh
bmNlUG9zaXRpb24sIHRydWUpOwotICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24ob2Zm
c2V0ICsgY2xvc2VzdERpc3RhbmNlQm94LT5zdGFydCgpLCBvZmZzZXQgPiAwID8gVlBfVVBTVFJF
QU1fSUZfUE9TU0lCTEUgOiBET1dOU1RSRUFNKTsKKyAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBv
c2l0aW9uKG9mZnNldCArIGNsb3Nlc3REaXN0YW5jZUJveC0+c3RhcnQoKSwgb2Zmc2V0ID4gMCA/
IFVwc3RyZWFtIDogRG93bnN0cmVhbSk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHSW5saW5lVGV4dDo6
dXBkYXRlU2NhbGVkRm9udCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGU0YWRlMTViZDMxOWRhNWE0OTYyZjM0Zjc0M2U5
YWVhY2M3Y2IyYWYuLjY0NWM3MTkxNGNmM2MyNTY4OTliNjJjYjFhYmVlY2Q2NjhhNjJmYjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCkBAIC0xNTE1LDE0ICsxNTE1LDE0IEBAIHN0YXRpYyBPcHRpb25hbDxTaW1wbGVSYW5nZT4g
cmFuZ2VGb3JQb2ludEluUm9vdFZpZXdDb29yZGluYXRlcyhGcmFtZSYgZnJhbWUsIGNvCiAgICAg
ICAgIHJlc3VsdCA9IGZyYW1lLnZpc2libGVQb3NpdGlvbkZvclBvaW50KHBvaW50SW5Eb2N1bWVu
dCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAKICAgICBpZiAoYmFzZUlzU3RhcnQpIHsKLSAgICAg
ICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMocmVzdWx0LCBzZWxlY3Rpb25TdGFydCkgPD0gMCkKKyAg
ICAgICAgaWYgKHJlc3VsdCA8PSBzZWxlY3Rpb25TdGFydCkKICAgICAgICAgICAgIHJlc3VsdCA9
IHNlbGVjdGlvblN0YXJ0Lm5leHQoKTsKICAgICAgICAgZWxzZSBpZiAoJnNlbGVjdGlvblN0YXJ0
LmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT50cmVlU2NvcGUoKSAhPSAmaGl0VGVzdC50
YXJnZXROb2RlKCktPnRyZWVTY29wZSgpKQogICAgICAgICAgICAgcmVzdWx0ID0gVmlzaWJsZVNl
bGVjdGlvbjo6YWRqdXN0UG9zaXRpb25Gb3JFbmQocmVzdWx0LmRlZXBFcXVpdmFsZW50KCksIHNl
bGVjdGlvblN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyTm9kZSgpKTsKIAogICAgICAg
ICByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzZWxlY3Rpb25TdGFydCwgcmVzdWx0KTsKICAgICB9
IGVsc2UgewotICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhzZWxlY3Rpb25FbmQsIHJlc3Vs
dCkgPD0gMCkKKyAgICAgICAgaWYgKHNlbGVjdGlvbkVuZCA8PSByZXN1bHQpCiAgICAgICAgICAg
ICByZXN1bHQgPSBzZWxlY3Rpb25FbmQucHJldmlvdXMoKTsKICAgICAgICAgZWxzZSBpZiAoJmhp
dFRlc3QudGFyZ2V0Tm9kZSgpLT50cmVlU2NvcGUoKSAhPSAmc2VsZWN0aW9uRW5kLmRlZXBFcXVp
dmFsZW50KCkuYW5jaG9yTm9kZSgpLT50cmVlU2NvcGUoKSkKICAgICAgICAgICAgIHJlc3VsdCA9
IFZpc2libGVTZWxlY3Rpb246OmFkanVzdFBvc2l0aW9uRm9yU3RhcnQocmVzdWx0LmRlZXBFcXVp
dmFsZW50KCksIHNlbGVjdGlvbkVuZC5kZWVwRXF1aXZhbGVudCgpLmNvbnRhaW5lck5vZGUoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJW
aXNpYmxlUG9zaXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9y
dC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KaW5kZXggOTc4YWIxMTZjMzZiNTJlN2Y2NTI1YTdiZDYx
MzAyZWEwMzJlNDc2OS4uYmVjY2I4MDcxMDdkNWQyZjAzZjRlYzlhMDkyOThlNGNmOWZmOGQxOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlz
aWJsZVBvc2l0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQpAQCAtMTQ5LDkgKzE0OSw4IEBAIC0gKEJPT0wpZGly
ZWN0aW9uSXNEb3duc3RyZWFtOihXZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24K
IAogLSAoV2ViVmlzaWJsZVBvc2l0aW9uICopcG9zaXRpb25CeU1vdmluZ0luRGlyZWN0aW9uOihX
ZWJUZXh0QWRqdXN0bWVudERpcmVjdGlvbilkaXJlY3Rpb24gYW1vdW50OihVSW50MzIpYW1vdW50
IHdpdGhBZmZpbml0eURvd25zdHJlYW06KEJPT0wpYWZmaW5pdHlEb3duc3RyZWFtCiB7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIHZwID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbl07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgIHZwLnNldEFmZmluaXR5KGFmZmluaXR5RG93bnN0cmVhbSA/
IERPV05TVFJFQU0gOiBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSk7CisgICAgYXV0byB2cCA9IFtz
ZWxmIF92aXNpYmxlUG9zaXRpb25dOworICAgIHZwLnNldEFmZmluaXR5KGFmZmluaXR5RG93bnN0
cmVhbSA/IERvd25zdHJlYW0gOiBVcHN0cmVhbSk7CiAKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikg
ewogICAgICAgICBjYXNlIFdlYlRleHRBZGp1c3RtZW50Rm9yd2FyZDogewpAQCAtMTk1LDcgKzE5
NCw2IEBAIC0gKFdlYlZpc2libGVQb3NpdGlvbiAqKXBvc2l0aW9uQnlNb3ZpbmdJbkRpcmVjdGlv
bjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rpb24pCiB9CiAKIC0gKFdlYlZpc2libGVQb3NpdGlv
biAqKXBvc2l0aW9uQnlNb3ZpbmdJbkRpcmVjdGlvbjooV2ViVGV4dEFkanVzdG1lbnREaXJlY3Rp
b24pZGlyZWN0aW9uIGFtb3VudDooVUludDMyKWFtb3VudAotCiB7CiAgICAgcmV0dXJuIFtzZWxm
IHBvc2l0aW9uQnlNb3ZpbmdJbkRpcmVjdGlvbjpkaXJlY3Rpb24gYW1vdW50OmFtb3VudCB3aXRo
QWZmaW5pdHlEb3duc3RyZWFtOllFU107CiB9CkBAIC00OTcsMjUgKzQ5NSwxOSBAQCAtIChET01S
YW5nZSAqKXJhbmdlT2ZDb250ZW50cwogCiAtIChXZWJWaXNpYmxlUG9zaXRpb24gKilzdGFydFBv
c2l0aW9uCiB7Ci0gICAgLy8gV2hlbiBpbiBlZGl0YWJsZSBjb250ZW50LCB3ZSBuZWVkIHRvIGNh
bGN1bGF0ZSB0aGUgc3RhcnRQb3NpdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlCi0gICAg
Ly8gZWRpdGFibGUgYXJlYS4KLSAgICBOb2RlKiBub2RlID0gY29yZShzZWxmKTsKLSAgICBpZiAo
bm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdnAo
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIDApLCBWUF9ERUZBVUxUX0FGRklOSVRZ
KTsKLSAgICAgICAgcmV0dXJuIFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRp
b246c3RhcnRPZkVkaXRhYmxlQ29udGVudCh2cCldOwotICAgIH0KKyAgICAvLyBXaGVuIGluIGVk
aXRhYmxlIGNvbnRlbnQsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzdGFydFBvc2l0aW9uIGZy
b20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZWRpdGFibGUgYXJlYS4KKyAgICBhdXRvJiBub2RlID0g
KmNvcmUoc2VsZik7CisgICAgaWYgKG5vZGUuaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAg
cmV0dXJuIFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246c3RhcnRPZkVk
aXRhYmxlQ29udGVudChWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KCZub2RlLCAwKSkpXTsKICAgICByZXR1cm4gW1tzZWxmIHJhbmdlT2ZDb250ZW50c10gc3RhcnRQ
b3NpdGlvbl07CiB9CiAKIC0gKFdlYlZpc2libGVQb3NpdGlvbiAqKWVuZFBvc2l0aW9uCiB7Ci0g
ICAgLy8gV2hlbiBpbiBlZGl0YWJsZSBjb250ZW50LCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUg
ZW5kUG9zaXRpb24gZnJvbSB0aGUgZW5kIG9mIHRoZQotICAgIC8vIGVkaXRhYmxlIGFyZWEuCi0g
ICAgTm9kZSogbm9kZSA9IGNvcmUoc2VsZik7Ci0gICAgaWYgKG5vZGUtPmlzQ29udGVudEVkaXRh
YmxlKCkpIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZwKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihub2RlLCAwKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgICAgIHJldHVybiBb
V2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOmVuZE9mRWRpdGFibGVDb250
ZW50KHZwKV07Ci0gICAgfQorICAgIC8vIFdoZW4gaW4gZWRpdGFibGUgY29udGVudCwgd2UgbmVl
ZCB0byBjYWxjdWxhdGUgdGhlIGVuZFBvc2l0aW9uIGZyb20gdGhlIGVuZCBvZiB0aGUgZWRpdGFi
bGUgYXJlYS4KKyAgICBhdXRvJiBub2RlID0gKmNvcmUoc2VsZik7CisgICAgaWYgKG5vZGUuaXND
b250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgcmV0dXJuIFtXZWJWaXNpYmxlUG9zaXRpb24gX3dy
YXBWaXNpYmxlUG9zaXRpb246ZW5kT2ZFZGl0YWJsZUNvbnRlbnQoVmlzaWJsZVBvc2l0aW9uKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmbm9kZSwgMCkpKV07CiAgICAgcmV0dXJuIFtbc2Vs
ZiByYW5nZU9mQ29udGVudHNdIGVuZFBvc2l0aW9uXTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAppbmRl
eCA2ZjA4ZmFhYTk1MzVjNGFiOTc1ZjI3YjdjYmY0MjU3Njk1ZjhiNGUyLi5iNTE5YTYwZmJlY2Y2
ZjYxZjczNWI5ZTU3ODlhMTUxYjdlNzZjYTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaApAQCAtMjE5LDI1
ICsyMTksMjUgQEAgcHJpdmF0ZToKIGlubGluZSBOU1NlbGVjdGlvbkFmZmluaXR5IGtpdChXZWJD
b3JlOjpFQWZmaW5pdHkgYWZmaW5pdHkpCiB7CiAgICAgc3dpdGNoIChhZmZpbml0eSkgewotICAg
ICAgICBjYXNlIFdlYkNvcmU6OkVBZmZpbml0eTo6VVBTVFJFQU06Ci0gICAgICAgICAgICByZXR1
cm4gTlNTZWxlY3Rpb25BZmZpbml0eVVwc3RyZWFtOwotICAgICAgICBjYXNlIFdlYkNvcmU6OkVB
ZmZpbml0eTo6RE9XTlNUUkVBTToKLSAgICAgICAgICAgIHJldHVybiBOU1NlbGVjdGlvbkFmZmlu
aXR5RG93bnN0cmVhbTsKKyAgICBjYXNlIFdlYkNvcmU6OlVwc3RyZWFtOgorICAgICAgICByZXR1
cm4gTlNTZWxlY3Rpb25BZmZpbml0eVVwc3RyZWFtOworICAgIGNhc2UgV2ViQ29yZTo6RG93bnN0
cmVhbToKKyAgICAgICAgcmV0dXJuIE5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtOwogICAg
IH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gTlNTZWxlY3Rpb25BZmZp
bml0eVVwc3RyZWFtOworICAgIHJldHVybiBOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbTsK
IH0KIAogaW5saW5lIFdlYkNvcmU6OkVBZmZpbml0eSBjb3JlKE5TU2VsZWN0aW9uQWZmaW5pdHkg
YWZmaW5pdHkpCiB7CiAgICAgc3dpdGNoIChhZmZpbml0eSkgewogICAgIGNhc2UgTlNTZWxlY3Rp
b25BZmZpbml0eVVwc3RyZWFtOgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6RUFmZmluaXR5OjpV
UFNUUkVBTTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVwc3RyZWFtOwogICAgIGNhc2UgTlNT
ZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW06Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpFQWZm
aW5pdHk6OkRPV05TVFJFQU07CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpEb3duc3RyZWFtOwog
ICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6RUFm
ZmluaXR5OjpVUFNUUkVBTTsKKyAgICByZXR1cm4gV2ViQ29yZTo6RG93bnN0cmVhbTsKIH0KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQppbmRleCBhOGVjNTJmYjU4ZWI0ZjhiODU3Y2U2ZmE0OGVlY2E5NjliZGI5
NTE4Li43YmNkNjMyOTlmMmIyZTlmZWMwMmExNGE5OTQ0YjBlZThkZTA0Mzg2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTE1MTUsMTIgKzE1MTUs
MjAgQEAgLSAodW5pY2hhciljaGFyYWN0ZXJJblJlbGF0aW9uVG9DYXJldFNlbGVjdGlvbjooaW50
KWFtb3VudAogCiAtICh1bmljaGFyKWNoYXJhY3RlckJlZm9yZUNhcmV0U2VsZWN0aW9uCiB7Ci0g
ICAgcmV0dXJuIGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLmNoYXJhY3RlckJlZm9yZUNhcmV0U2Vs
ZWN0aW9uKCk7CisgICAgYXV0byBmcmFtZSA9IGNvcmUoc2VsZik7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgp
OworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0
KCkuY2hhcmFjdGVyQmVmb3JlKCk7CiB9CiAKIC0gKHVuaWNoYXIpY2hhcmFjdGVyQWZ0ZXJDYXJl
dFNlbGVjdGlvbgogewotICAgIHJldHVybiBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5jaGFyYWN0
ZXJBZnRlckNhcmV0U2VsZWN0aW9uKCk7CisgICAgYXV0byBmcmFtZSA9IGNvcmUoc2VsZik7Cisg
ICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZnJhbWUtPmRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dCgpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudmlzaWJsZUVuZCgpLmNoYXJhY3RlckFmdGVyKCk7CiB9CiAKIC0gKERPTVJhbmdlICopd29y
ZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCkBAIC0xNTYwLDE0ICsxNTY4LDExIEBAIC0g
KE5TQXJyYXkgKil3b3Jkc0luQ3VycmVudFBhcmFncmFwaAogCiAtIChCT09MKXNlbGVjdGlvbkF0
RG9jdW1lbnRTdGFydAogewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7
Ci0gICAgCi0gICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc05vbmUoKSkK
KyAgICBhdXRvIGZyYW1lID0gY29yZShzZWxmKTsKKyAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm4gTk87Ci0KICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAg
Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb25BdERvY3VtZW50U3RhcnQo
KTsKKyAgICByZXR1cm4gaXNTdGFydE9mRG9jdW1lbnQoZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpKTsKIH0KIAogLSAoQk9PTClzZWxlY3Rpb25BdFNlbnRlbmNl
U3RhcnQKQEAgLTE2MDYsMTcgKzE2MTEsMTYgQEAgLSAoRE9NUmFuZ2UgKilyYW5nZUJ5RXh0ZW5k
aW5nQ3VycmVudFNlbGVjdGlvbjooaW50KWFtb3VudAogCiAtICh2b2lkKXNlbGVjdE5TUmFuZ2U6
KE5TUmFuZ2UpcmFuZ2Ugb25FbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudAogewotICAgIFdl
YkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0KLSAgICBXZWJDb3JlOjpEb2N1bWVu
dCogZG9jID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2MpCisgICAgLy8gRklYTUU6
IFRoaXMgbWV0aG9kIGRvZXMgbm90IGRvIGEgdXNlZnVsIG9wZXJhdGlvbjogdHJlYXRpbmcgTlNS
YW5nZSBvZmZzZXRzIGFzIGNoaWxkIG5vZGUgb2Zmc2V0cyBkb2VzIG5vdCBtYWtlIGxvZ2ljYWwg
c2Vuc2UuIEFsc28sIGl0J3MgaGlnaGx5IHVubGlrZWx5IGFueW9uZSBjYWxscyBpdC4gV2Ugc2hv
dWxkIGRlbGV0ZSBpdC4KKyAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8qIG5vZGUgPSBjb3JlKGVsZW1lbnQpOwotICAgIGlmICghbm9kZS0+aXNDb25uZWN0ZWQo
KSkKKyAgICBhdXRvIGZyYW1lID0gY29yZShzZWxmKTsKKyAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm47Ci0KLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0UmFuZ2VPbkVsZW1lbnQo
cmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCwgKm5vZGUpOworICAgIGF1dG8mIGNvcmVFbGVt
ZW50ID0gKmNvcmUoZWxlbWVudCk7CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSByYW5nZS5s
b2NhdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBOU01heFJhbmdlKHJhbmdlKTsKKyAg
ICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rp
b24geyBXZWJDb3JlOjpTaW1wbGVSYW5nZSB7IHsgY29yZUVsZW1lbnQsIHN0YXJ0T2Zmc2V0IH0s
IHsgY29yZUVsZW1lbnQsIGVuZE9mZnNldCB9IH0gfSwgeyBXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6RmlyZVNlbGVjdEV2ZW50IH0pOwogfQogCiAtIChET01SYW5nZSAqKW1hcmtlZFRleHRET01S
YW5nZQpAQCAtMTk4OSwxMyArMTk5MywxMyBAQCAtICh2b2lkKV9zbWFydEluc2VydEZvclN0cmlu
ZzooTlNTdHJpbmcgKilwYXN0ZVN0cmluZyByZXBsYWNpbmdSYW5nZTooRE9NUmFuZ2UgKgogICAg
IGF1dG8gc3RhcnQgPSBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24geyBtYWtlQ29udGFpbmVyT2Zm
c2V0UG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSB9OwogICAgIGF1dG8gZW5kID0gV2ViQ29yZTo6Vmlz
aWJsZVBvc2l0aW9uIHsgbWFrZUNvbnRhaW5lck9mZnNldFBvc2l0aW9uKHJhbmdlLT5lbmQpIH07
CiAKLSAgICBib29sIGFkZExlYWRpbmdTcGFjZSA9IHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubGVh
ZGluZ1doaXRlc3BhY2VQb3NpdGlvbihXZWJDb3JlOjpWUF9ERUZBVUxUX0FGRklOSVRZLCB0cnVl
KS5pc051bGwoKSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKHN0YXJ0KTsKKyAgICBib29sIGFkZExl
YWRpbmdTcGFjZSA9IHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubGVhZGluZ1doaXRlc3BhY2VQb3Np
dGlvbihXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmRlZmF1bHRBZmZpbml0eSwgdHJ1ZSkuaXNO
dWxsKCkgJiYgIWlzU3RhcnRPZlBhcmFncmFwaChzdGFydCk7CiAgICAgaWYgKGFkZExlYWRpbmdT
cGFjZSkgewogICAgICAgICBpZiAoVUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIgPSBzdGFydC5wcmV2
aW91cygpLmNoYXJhY3RlckFmdGVyKCkpCiAgICAgICAgICAgICBhZGRMZWFkaW5nU3BhY2UgPSAh
V2ViQ29yZTo6aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQocHJldmlvdXNDaGFyYWN0ZXIs
IHRydWUpOwogICAgIH0KICAgICAKLSAgICBib29sIGFkZFRyYWlsaW5nU3BhY2UgPSBlbmQuZGVl
cEVxdWl2YWxlbnQoKS50cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbihXZWJDb3JlOjpWUF9ERUZB
VUxUX0FGRklOSVRZLCB0cnVlKS5pc051bGwoKSAmJiAhaXNFbmRPZlBhcmFncmFwaChlbmQpOwor
ICAgIGJvb2wgYWRkVHJhaWxpbmdTcGFjZSA9IGVuZC5kZWVwRXF1aXZhbGVudCgpLnRyYWlsaW5n
V2hpdGVzcGFjZVBvc2l0aW9uKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6ZGVmYXVsdEFmZmlu
aXR5LCB0cnVlKS5pc051bGwoKSAmJiAhaXNFbmRPZlBhcmFncmFwaChlbmQpOwogICAgIGlmIChh
ZGRUcmFpbGluZ1NwYWNlKSB7CiAgICAgICAgIGlmIChVQ2hhciBmb2xsb3dpbmdDaGFyYWN0ZXIg
PSBlbmQuY2hhcmFjdGVyQWZ0ZXIoKSkKICAgICAgICAgICAgIGFkZFRyYWlsaW5nU3BhY2UgPSAh
V2ViQ29yZTo6aXNDaGFyYWN0ZXJTbWFydFJlcGxhY2VFeGVtcHQoZm9sbG93aW5nQ2hhcmFjdGVy
LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxl
VGV4dEltcGwuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQWNjZXNzaWJsZVRleHRJbXBs
LmNwcAppbmRleCA1Njk3NjdhMTFlMWVkZTU4NDYxMDlhYmQxMGQ3YjE4YTk5ZmU2NzM2Li41Y2U4
YTYxNzE5ZTZlMTc5OWE4ZThjMDhhMjBmNmQzOGU5NWY2ZjA0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5jcHAKQEAgLTc1NSw3ICs3NTUsNiBAQCBI
UkVTVUxUIEFjY2Vzc2libGVUZXh0Ojppbml0aWFsQ2hlY2soKQogCiBib29sIEFjY2Vzc2libGVU
ZXh0Ojppc0luUmFuZ2UoVmlzaWJsZVBvc2l0aW9uJiBjdXJyZW50LCBWaXNpYmxlUG9zaXRpb25S
YW5nZSYgd29yZFJhbmdlKQogewotICAgIEFTU0VSVCh3b3JkUmFuZ2Uuc3RhcnQuaXNOb3ROdWxs
KCkpOwotICAgIEFTU0VSVCh3b3JkUmFuZ2UuZW5kLmlzTm90TnVsbCgpKTsKLSAgICByZXR1cm4g
Y29tcGFyZVBvc2l0aW9ucyhjdXJyZW50LmRlZXBFcXVpdmFsZW50KCksIHdvcmRSYW5nZS5zdGFy
dCkgPj0gMCAmJiBjb21wYXJlUG9zaXRpb25zKGN1cnJlbnQuZGVlcEVxdWl2YWxlbnQoKSwgd29y
ZFJhbmdlLmVuZCkgPD0gMDsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHdvcmRS
YW5nZSk7CisgICAgcmV0dXJuIHJhbmdlICYmIGlzUG9pbnRJblJhbmdlKCpyYW5nZSwgbWFrZUJv
dW5kYXJ5UG9pbnQoY3VycmVudCkpOwogfQo=
</data>
<flag name="review"
          id="423065"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>