<?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>215979</bug_id>
          
          <creation_ts>2020-08-29 12:46:14 -0700</creation_ts>
          <short_desc>Rewrite main thread scroll latching logic</short_desc>
          <delta_ts>2020-08-30 15:55:02 -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>Scrolling</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>fujii</cc>
    
    <cc>jamesr</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1683933</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-08-29 12:46:14 -0700</bug_when>
    <thetext>The main thread scroll event handling and latching logic has evolved over time and lacks a real design; see issues noted in bug 215741.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683934</commentid>
    <comment_count>1</comment_count>
      <attachid>407545</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-08-29 13:02:52 -0700</bug_when>
    <thetext>Created attachment 407545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683951</commentid>
    <comment_count>2</comment_count>
      <attachid>407551</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-08-29 14:11:37 -0700</bug_when>
    <thetext>Created attachment 407551
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683959</commentid>
    <comment_count>3</comment_count>
      <attachid>407553</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-08-29 17:08:44 -0700</bug_when>
    <thetext>Created attachment 407553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683961</commentid>
    <comment_count>4</comment_count>
      <attachid>407554</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-08-29 17:15:05 -0700</bug_when>
    <thetext>Created attachment 407554
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683971</commentid>
    <comment_count>5</comment_count>
      <attachid>407554</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-08-29 19:06:45 -0700</bug_when>
    <thetext>Comment on attachment 407554
Patch

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

&gt; Source/WebCore/page/scrolling/ScrollLatchingController.cpp:55
&gt; +// FIXME: This logic is different frmo ScrollingTreeLatchingController, which simply lets the latching state elapse after 100ms.

frmo

&gt; Source/WebCore/page/scrolling/ScrollLatchingController.cpp:186
&gt; +    // We always allow the main frame receive wheel events to permit rubber-banding.

Some grammar

&gt; Source/WebCore/page/scrolling/ScrollLatchingController.h:75
&gt; +        Frame* frame { nullptr }; // Icky raw pointer. Use FrameIdentifier?

Did you want to fix this before landing?

&gt; Source/WebCore/page/scrolling/ScrollingTreeLatchingController.cpp:40
&gt;  static const Seconds resetLatchedStateTimeout { 100_ms };

Should we plop this in one place and use it from both?

&gt; Source/WebCore/platform/PlatformWheelEvent.h:155
&gt; +    bool isGestureContinuation() const; // The fingers-down part of the gesture.

But not momentum?

&gt; LayoutTests/ChangeLog:14
&gt; +2020-08-18  Simon Fraser  &lt;simon.fraser@apple.com&gt;

Double changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684016</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-08-30 10:43:48 -0700</bug_when>
    <thetext>https://trac.webkit.org/r266333</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684017</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-30 10:44:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/68034254&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684034</commentid>
    <comment_count>8</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-08-30 15:01:00 -0700</bug_when>
    <thetext>The mouse wheel doesn&apos;t scroll page in trunk@266333 for WinCairo WK1 and WK2.
This change seems the culprit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684042</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-08-30 15:55:02 -0700</bug_when>
    <thetext>Fixed in bug 215990.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407545</attachid>
            <date>2020-08-29 13:02:52 -0700</date>
            <delta_ts>2020-08-29 14:11:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215979-20200829130251.patch</filename>
            <type>text/plain</type>
            <size>86554</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWY2NTQxYmJiMmQxZGU0
MzFkMDM4MjYwNzVmZWNmZjMxNzVhYWQ5Ny4uMzUyNGNkZWJhZTNhOGE4NzM5OWVjN2ExNDllYzhl
MDBmYmU1YjA2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAyMC0wOC0yOSAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdyaXRlIG1h
aW4gdGhyZWFkIHNjcm9sbCBsYXRjaGluZyBsb2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGUgZXhpc3RpbmcgbWFpbiB0aHJlYWQg
d2hlZWwgZXZlbnQgaGFuZGxpbmcgYW5kIGxhdGNoaW5nIGxvZ2ljIGhhZCBhIG51bWJlciBvZiBp
c3N1ZXMsCisgICAgICAgIHNvbWUgb2Ygd2hpY2ggd2VyZSBpbmRpY2F0ZWQgdmlhIHRoZSBGSVhN
RSBjb21tZW50cyBhZGRlZCBpbiByMjY2MDE2OgorICAgICAgICAtIEl0IHRyYWNrZWQgc2Nyb2xs
YWJsZSBjb250YWluZXJzIGFzIENvbnRhaW5lck5vZGVzIHJhdGhlciB0aGFuIFNjcm9sbGFibGVB
cmVhcworICAgICAgICAtIEl0IGZldGNoZWQgYW5kIHVzZWQgbGF0Y2hlZCBzdGF0ZSBmcm9tIGEg
ZGlmZmVyZW50IGZyYW1lLCBjYXVzaW5nIGFuIEV2ZW50SGFuZGxlcgorICAgICAgICAgIHRvIGVu
ZCB1cCBzY3JvbGxpbmcgc29tZSB1bnJlbGF0ZWQgZnJhbWUuCisgICAgICAgIC0gT3ZlcmZsb3cg
c2Nyb2xsaW5nIGlnbm9yZWQgbGF0Y2hlZCBzdGF0ZS4KKyAgICAgICAgLSBUaGUgbGF0Y2hpbmcg
c3RhY2sncyBwdXJwb3NlIHdhcyB1bmNsZWFyLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBmaXhlcyB0aG9zZSBpc3N1ZXMuIFRoZSBkZXNpZ24gaXMgYXMgZm9sbG93OiAKKyAgICAgICAg
LSBMYXRjaGluZyBsb2dpYyBpcyBtb3ZlZCBpbnRvIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlciwg
d2hpY2ggaXMgb3duZWQgYnkgUGFnZS4KKyAgICAgICAgLSBTY3JvbGxMYXRjaGluZ0NvbnRyb2xs
ZXIgb3ducyBhIHN0YWNrIG9mIEZyYW1lU3RhdGUuCisgICAgICAgIC0gV2hlbiByZWNlaXZpbmcg
YSB3aGVlbCBldmVudCwgZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldCgpIGlkZW50aWZpZXMgdGhl
IHRhcmdldAorICAgICAgICAgIFNjcm9sbGFibGVBcmVhLCBpZiBhbnksIGZvciB0aGF0IGZyYW1l
IG9ubHkuCisgICAgICAgIC0gQXMgaGl0LXRlc3RpbmcgZGVzY2VuZHMgaW50byBzdWJmcmFtZXMs
IHN0YXRlIGlzIHB1c2hlZCBvbnRvIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcidzCisgICAgICAg
ICAgc3RhdGUgc3RhY2suIEZyYW1lcyB3aXRoIHBvdGVudGlhbCBzY3JvbGxlcnMgaGF2ZSBhIG5v
bi1udWxsIFNjcm9sbGFibGVBcmVhIGluIHRoZWlyIHN0YXRlLgorICAgICAgICAtIFRoZSBsYXRj
aGVkIFNjcm9sbGFibGVBcmVhIGlzIHRoZSB0b3Agbm9uLW51bGwgU2Nyb2xsYWJsZUFyZWEgaW4g
dGhpcyBzdGFjay4KKyAgICAgICAgLSBFdmVudEhhbmRsZXIgY29uc3VsdHMgU2Nyb2xsTGF0Y2hp
bmdDb250cm9sbGVyIGZvciBzZWxlY3QsIG92ZXJmbG93IGFuZCBmcmFtZSBzY3JvbGxpbmcuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZSBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBzY3JvbGxp
bmcgb3ZlciBhbiBvdmVyZmxvdzpzY3JvbGwgaW4gdGhlIG5vbi1mYXN0IHNjcm9sbGFibGUKKyAg
ICAgICAgcmVnaW9uIHdvdWxkIHJ1YmJlci1iYW5kIHRoZSBvdmVyZmxvdywgcmF0aGVyIHRoYW4g
dGhlIG1haW4gcGFnZSAodGVzdGVkIGJ5IHRoZSBhZGp1c3RlZAorICAgICAgICBmYXN0L3Njcm9s
bGluZy9tYWMvcnViYmVyYmFuZC1vdmVyZmxvdy1pbi13aGVlbC1yZWdpb24uaHRtbCkuCisKKyAg
ICAgICAgVGVzdHM6IGZhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL2xhdGNoZWQtc2Nyb2xsLXJlbW92
ZS1pZnJhbWUuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGV0ZXJt
aW5lV2hlZWxFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBy
b2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNvbXBsZXRlV2lkZ2V0V2hlZWxFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjbGVhckxhdGNoZWRTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNsZWFyTGF0Y2hlZFN0YXRlVGltZXJGaXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNsZWFyT3JTY2hl
ZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAqIHBh
Z2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2U6OnN0YXJ0TW9uaXRvcmluZ1doZWVsRXZlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnNjcm9sbExhdGNoaW5nQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjpsYXRjaGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnB1c2hOZXdMYXRjaGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnJlc2V0TGF0Y2hpbmdTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpw
b3BMYXRjaGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlbW92
ZUxhdGNoaW5nU3RhdGVGb3JUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvUGFnZS5o
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6bGF0Y2hpbmdTdGF0ZVN0YWNrIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRldGVybWluZVdoZWVsRXZlbnRUYXJnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVQbGF0Zm9y
bVdpZGdldFdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwcm9j
ZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXApOgorICAgICAgICAoV2ViQ29yZTo6ZGVsdGFJc1By
ZWRvbWluYW50bHlWZXJ0aWNhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxl
ZFRvRWRnZUluRG9taW5hbnREaXJlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
bGF0Y2hpbmdJc0xvY2tlZFRvUGxhdGZvcm1GcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpsYXRjaGluZ0lzTG9ja2VkVG9BbmNlc3Rvck9mVGhpc0ZyYW1lKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmxhdGNoZWRUb0ZyYW1lT3JCb2R5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3Rh
dGVJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmcmFtZVZpZXdGb3JMYXRj
aGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNo
aW5nQ29udHJvbGxlcjo6U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcklmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Y2xlYXJUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6cmVjZWl2
ZWRXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxl
cjo6bGF0Y2hpbmdBbGxvd3NTY3JvbGxpbmdJbkZyYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6dXBkYXRlTGF0Y2hpbmdTdGF0ZUZvckZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Z2V0TGF0Y2hp
bmdTdGF0ZUZvckZyYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5n
Q29udHJvbGxlcjo6cmVtb3ZlTGF0Y2hpbmdTdGF0ZUZvclRhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OnJlbW92ZUxhdGNoaW5nU3RhdGVGb3JGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWx0YUlzUHJlZG9taW5hbnRseVZlcnRpY2FsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6c2hvdWxkTGF0Y2hUb1Nj
cm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29u
dHJvbGxlcjo6aGFzU3RhdGVGb3JGcmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXI6OnN0YXRlRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpzdGF0ZUZvckZyYW1lIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxM
YXRjaGluZ0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXI6OmN1bXVsYXRpdmVFdmVudERlbHRhIGNvbnN0KToKKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyOjpyZWNlaXZl
ZFdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29u
dHJvbGxlcjo6bm9kZURpZEhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9U
aHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkZWRTY3Jv
bGxpbmdUcmVlOjpoYW5kbGVXaGVlbEV2ZW50QWZ0ZXJNYWluVGhyZWFkKToKKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVN
YWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFsbG93c1ZlcnRpY2FsU3Ry
ZXRjaGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpuZXdHZXN0dXJlSXNTdGFydGluZyk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OmlzR2VzdHVyZVN0YXJ0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6aXNHZXN0dXJlQ29udGludWF0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6c2hvdWxk
UmVzZXRMYXRjaGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZl
bnQ6OmlzTm9uR2VzdHVyZUV2ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
V2hlZWxFdmVudDo6c2hvdWxkQ29uc2lkZXJMYXRjaGluZyBjb25zdCk6IERlbGV0ZWQuIFJlbmFt
ZWQgdG8gaXNHZXN0dXJlU3RhcnQoKS4gVGhpcyBjbGFzcworICAgICAgICBzaG91bGQgbm90IHBy
ZXNjcmliZSBsYXRjaGluZyBiZWhhdmlvcnMuCisKIDIwMjAtMDgtMjggIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgUGFubmVyTm9kZSB0byBzdXBwb3J0
IGstcmF0ZSBhdXRvbWF0aW9uIG9mIGl0cyBBdWRpb1BhcmFtcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBh
NzlkZWNkMGI4NDE5ZDZhYmY3NzE3ZmZhNTZjZjA1ZGVlZDRkY2IxLi4zZTczOGU0MGFmYjQyYjQ1
OTk3MjU2N2I3NjRlODAwNjdlMGEwMjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTY4Myw3ICsxNjgz
LDcgQEAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAKIHBhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUuY3BwCiBwYWdlL3Nj
cm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAogcGFnZS9zY3JvbGxpbmcvQXhp
c1Njcm9sbFNuYXBPZmZzZXRzLmNwcAotcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdTdGF0
ZS5jcHAKK3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHAKIHBhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmNwcAogcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9k
ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA1ODhjNzYxZGIxNzNkYWFhYjQ0NWQ0ZDljNTlmZWRlZGE5NjFlNzI4Li44NGQz
ZTE0YWVjYTZjYTQ1ZDEyOWY4MjlhODY1OGZlYzcyNGI4NTRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDc2LDggKzEwNzYs
OCBAQAogCQk0MTZFMEIzQTIwOUJDM0NCMDA0QTk1RDkgLyogRmV0Y2hJZGVudGlmaWVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFMEIzNzIwOUJD
M0MyMDA0QTk1RDkgLyogRmV0Y2hJZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDE2RTI5QTYxMDJGQTk2MjAwN0ZDMTRFIC8qIFdv
cmtlclJlcG9ydGluZ1Byb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTZFMjlBNTEwMkZBOTYyMDA3RkMxNEUgLyogV29ya2VyUmVwb3J0aW5nUHJv
eHkuaCAqLzsgfTsKIAkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3NjREOSAvKiBSZWFkYWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjc0IC8qIFRyYW5zZm9ybVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RUEgLyogVHJhbnNmb3JtU3RyZWFtSW50ZXJuYWxz
QnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0MTZFNkZFODFCQkQxMkRGMDAwQTNGNjUgLyogSlNET01CaW5kaW5nSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
MDNEODA2MUJCMzExMEQwMEI3NjREQSAvKiBKU0RPTUJpbmRpbmdJbnRlcm5hbHNCdWlsdGlucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxNkU2
RkU4MUJCRDEyREYwMDBBM0Y3NCAvKiBUcmFuc2Zvcm1TdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYx
QkIzMTEwRDAwQjc2NEVBIC8qIFRyYW5zZm9ybVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDE2RTZGRTgx
QkJEMTJERjAwMEE2MDMzIC8qIFN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0
QzkgLyogU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVh
ZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFk
YWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBX
cml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFi
bGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yMjE1LDcgKzIyMTUsNiBAQAogCQk3QUEzQTZBMDE5NEI1
OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QUEzQTY5RTE5NEI1OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0FBM0E2
QTQxOTRCNUMyMjAwMUNCRDI0IC8qIFRpbGVDb3ZlcmFnZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FBM0E2QTIxOTRCNUMyMjAwMUNCRDI0IC8q
IFRpbGVDb3ZlcmFnZU1hcC5oICovOyB9OwogCQk3QUFCQTI1QTE0QkM2MTMzMDBBQTlBMTEgLyog
RE9NRWRpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QUFCQTI1ODE0QkM2MTMzMDBBQTlBMTEgLyogRE9NRWRpdG9yLmggKi87IH07Ci0JCTdBQUZF
OEQwMTlDQjg2NzIwMDBGNTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUFGRThDRTE5Q0I4NjcyMDAwRjU2
RDggLyogU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oICovOyB9OwogCQk3QURFNzIyNjEwQ0JCQjlCMDA2
QjNCM0EgLyogQ29udGV4dE1lbnVQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0FERTcyMjUxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRN
ZW51UHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3QUUzMzVGMjFBQ0IwOUUyMDBFNDAxRUYgLyogV2hlZWxFdmVudFRlc3RNb25pdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUUzMzVG
MDFBQ0IwOUUyMDBFNDAxRUYgLyogV2hlZWxFdmVudFRlc3RNb25pdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0FFNkM5M0MxQkUwQzYwMTAw
RTE5RTAzIC8qIE1haW5UaHJlYWRTaGFyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FFNkM5M0ExQkUwQzYwMTAwRTE5RTAzIC8qIE1haW5U
aHJlYWRTaGFyZWRUaW1lci5oICovOyB9OwpAQCAtNTk3NSw2ICs1OTc0LDggQEAKIAkJMEY5NEI2
NTMyMjA5MTU2QzAwMTU3MDE0IC8qIFNjcm9sbGluZ1RyZWVQb3NpdGlvbmVkTm9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5NEI2NTQyMjA5MTU2QzAwMTU3MDE0IC8qIFNjcm9sbGluZ1RyZWVQ
b3NpdGlvbmVkTm9kZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVQb3Np
dGlvbmVkTm9kZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NEYzN0MyMzY2
MTEzMTAwM0FBNUM3IC8qIFN0eWxlUnVsZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSdWxl
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk1MTBGMDI0RjQ3NjlDMDAx
RjUyREMgLyogU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9s
bExhdGNoaW5nQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk1
MTBGMjI0RjQ3NjlDMDAxRjUyREMgLyogU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNjcm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTdBNjU3MTU1REE4MUUwMEZBREQ0QyAvKiBEaXNwbGF5UmVm
cmVzaE1vbml0b3JJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOUI1NDc1MjJCNEE3NzIwMDdCNUU4QSAvKiBTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Ny
b2xsUHJveHlOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3Jv
bGxQcm94eU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5QjU0NzYyMkI0
QTc3MzAwN0I1RThBIC8qIFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxQcm94eU5vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbFByb3h5Tm9k
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDAwMSw4ICsxMDAwMiw2IEBA
CiAJCTdBQTNBNkEyMTk0QjVDMjIwMDFDQkQyNCAvKiBUaWxlQ292ZXJhZ2VNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlsZUNvdmVyYWdlTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdBQUJBMjU3MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NRWRpdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FBQkEyNTgxNEJDNjEzMzAwQUE5QTExIC8q
IERPTUVkaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01FZGl0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0FBRkU4Q0QxOUNCODY3MjAwMEY1NkQ4
IC8qIFNjcm9sbExhdGNoaW5nU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTdBQUZFOENFMTlDQjg2NzIwMDBGNTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbExhdGNoaW5nU3RhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FERTcyMjUxMENCQkI5QjAwNkIzQjNBIC8q
IENvbnRleHRNZW51UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29udGV4dE1lbnVQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUUz
MzVFRjFBQ0IwOUUyMDBFNDAxRUYgLyogV2hlZWxFdmVudFRlc3RNb25pdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdoZWVsRXZlbnRUZXN0TW9uaXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRTMzNUYwMUFDQjA5RTIwMEU0MDFFRiAv
KiBXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2hlZWxFdmVudFRlc3RNb25pdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMTU2NiwxMCArMTE1NjUsMTAgQEAKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFN0cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L1N0cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19E
SVI7IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3NjREOCAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0
aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlYWRhYmxlU3RyZWFtQnVp
bHRpbnMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvUmVhZGFibGVTdHJlYW1CdWls
dGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1JlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJOUIw
M0Q4MDYxQkIzMTEwRDAwQjc2NEVBIC8qIFRyYW5zZm9ybVN0cmVhbUludGVybmFsc0J1aWx0aW5z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRyYW5zZm9ybVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1RyYW5zZm9ybVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3NjREQSAvKiBKU0RPTUJpbmRpbmdJbnRlcm5hbHNC
dWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0RPTUJpbmRpbmdJ
bnRlcm5hbHNCdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RPTUJp
bmRpbmdJbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFibGVTdHJlYW1CdWlsdGlu
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXcml0YWJsZVN0cmVhbUJ1aWx0
aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1dyaXRhYmxlU3RyZWFtQnVpbHRp
bnMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOUIwM0Q4MDYxQkIz
MTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlu
cy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Xcml0YWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTlCMDNE
ODA2MUJCMzExMEQwMEI3NjRFQSAvKiBUcmFuc2Zvcm1TdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUcmFuc2Zvcm1TdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9UcmFuc2Zvcm1TdHJl
YW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQk5QjA5OEJENTFGM0Q2MDMzMDAyREQ1NjIgLyogRGF0YVRyYW5zZmVySXRlbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhVHJhbnNmZXJJdGVtLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwOThCREQxRjNENjczRDAwMkRENTYyIC8q
IEpTRGF0YVRyYW5zZmVySXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RhdGFUcmFuc2Zlckl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjA5OEJERTFGM0Q2NzNEMDAyREQ1NjIgLyogSlNEYXRhVHJhbnNmZXJJdGVtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVRyYW5zZmVySXRlbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgwMDMsOCArMTgwMDIsOCBAQAogCQkJCTkzOTFBOTlC
MTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oICovLAogCQkJ
CUE2RDVBOTlBMTYyOUQ2RkYwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlLmNwcCAqLywKIAkJCQlBNkQ1QTk5QjE2MjlENzAwMDAyOTczMzAgLyogU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oICovLAotCQkJCTdBQUZFOENEMTlDQjg2NzIwMDBG
NTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmNwcCAqLywKLQkJCQk3QUFGRThDRTE5Q0I4Njcy
MDAwRjU2RDggLyogU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oICovLAorCQkJCTBGOTUxMEYyMjRGNDc2
OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGOTUx
MEYwMjRGNDc2OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuaCAqLywKIAkJ
CQlGNDY3MjkyNTFFMERFNUFCMDBBQ0MzRDggLyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmggKi8s
CiAJCQkJMEY2MzgzREIxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5j
cHAgKi8sCiAJCQkJMEY2MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5n
VHJlZS5oICovLApAQCAtMzM0OTcsNyArMzM0OTYsNiBAQAogCQkJCTBGMzdGMDg1MjIwMkJGOTgw
MEE4OUMwQiAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjk0QjY0OTIyMDhGRTNCMDAxNTcwMTQgLyogU2Nyb2xsaW5nVHJlZVN0
aWNreU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQzU3OTVEMURBNUMzMDEwMDZGOUM5NyAv
KiBTY3JvbGxJbnRvVmlld09wdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTdBQUZFOEQwMTlD
Qjg2NzIwMDBGNTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4M0M1Nzk1RDFEQTVDMzAxMDA2RjlDODYgLyogU2Nyb2xsTG9naWNhbFBvc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4M0M1Nzk1RDFEQTVDMzAxMDA2RkFDOTcgLyogU2Nyb2xsT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ3ODc1NTQxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9s
bFNuYXBBbmltYXRvclN0YXRlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApp
bmRleCBiZDgwMjliYmY1NzRkNWVhODRjODk2YmFhMDUyOTdiOWQxY2U3NTI1Li43MjJkY2Y0YmU3
ZDI2ODE5YTBjNTZmODNkNTlkZmExZjA3MjRlZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBA
IC0xMDUsNyArMTA1LDcgQEAKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsSW50b1ZpZXdPcHRpb25z
LmgiCi0jaW5jbHVkZSAiU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIlNjcm9sbExh
dGNoaW5nQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yUXVlcnkuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXVsYXRlZENsaWNrLmgiCkBAIC0yMjU5LDkgKzIy
NTksMTEgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlIHJl
bW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXIKICAgICBpZiAoZnJhbWUpCiAgICAgICAg
IGZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5jYW5jZWxBbmltYXRpb25zKCp0aGlzKTsKIAotI2lm
IFBMQVRGT1JNKE1BQykKLSAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAg
ZnJhbWUtPnBhZ2UoKS0+cmVtb3ZlTGF0Y2hpbmdTdGF0ZUZvclRhcmdldCgqdGhpcyk7CisjaWYg
RU5BQkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQorICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFn
ZSgpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgPSBmcmFt
ZS0+cGFnZSgpLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpKQorICAgICAgICAg
ICAgc2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLT5yZW1vdmVMYXRjaGluZ1N0YXRlRm9yVGFyZ2V0
KCp0aGlzKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIGlmIChoYXNSYXJlRGF0YSgpICYmIGVsZW1l
bnRSYXJlRGF0YSgpLT5oYXNFbGVtZW50SWRlbnRpZmllcigpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKaW5kZXggYjQ1NWIxZGViNmU0OTE1ZTRlOTFhMGU1NTEwYTczMDExMzEz
ZjI0Zi4uMzdhNjJlY2IwYTAzYzQxM2FmMTU5NWEzMDg4NzRkMTdhN2FiYzBmNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtODksNyArODksNyBAQAogI2luY2x1ZGUgIlNW
R0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTY3JvbGxBbmlt
YXRvci5oIgotI2luY2x1ZGUgIlNjcm9sbExhdGNoaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJTY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKQEAgLTM5MCw5ICszOTAsNiBA
QCBib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRMb29wSGFuZGxlTW91c2VEcmFnZ2VkKGNvbnN0IE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdAogRXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIoRnJh
bWUmIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1faG92ZXJUaW1lcigqdGhp
cywgJkV2ZW50SGFuZGxlcjo6aG92ZXJUaW1lckZpcmVkKQotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICAsIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIoKnRoaXMsICZFdmVudEhhbmRsZXI6OmNsZWFy
TGF0Y2hlZFN0YXRlVGltZXJGaXJlZCkKLSNlbmRpZgogICAgICwgbV9hdXRvc2Nyb2xsQ29udHJv
bGxlcihtYWtlVW5pcXVlPEF1dG9zY3JvbGxDb250cm9sbGVyPigpKQogI2lmICFFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKICAgICAsIG1fZmFrZU1vdXNlTW92ZUV2ZW50VGltZXIoKnRoaXMsICZF
dmVudEhhbmRsZXI6OmZha2VNb3VzZU1vdmVFdmVudFRpbWVyRmlyZWQpCkBAIC0yNzcyLDE1ICsy
NzY5LDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmlzSW5zaWRlU2Nyb2xsYmFyKGNvbnN0IEludFBv
aW50JiB3aW5kb3dQb2ludCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRXZl
bnRIYW5kbGVyOjpjbGVhckxhdGNoZWRTdGF0ZVRpbWVyRmlyZWQoKQotewotICAgIExPRyhTY3Jv
bGxMYXRjaGluZywgIkV2ZW50SGFuZGxlciAlcCBjbGVhckxhdGNoZWRTdGF0ZVRpbWVyRmlyZWQo
KSIsIHRoaXMpOwotICAgIGNsZWFyTGF0Y2hlZFN0YXRlKCk7Ci19Ci0KICNpZiAhUExBVEZPUk0o
TUFDKQogCi12b2lkIEV2ZW50SGFuZGxlcjo6ZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBIaXRUZXN0UmVzdWx0JiwgUmVmUHRyPEVsZW1l
bnQ+JiwgUmVmUHRyPENvbnRhaW5lck5vZGU+JiwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mLCBi
b29sJikKK3ZvaWQgRXZlbnRIYW5kbGVyOjpkZXRlcm1pbmVXaGVlbEV2ZW50VGFyZ2V0KGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBSZWZQdHI8RWxlbWVu
dD4mLCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYsIGJvb2wmKQogewogfQogCkBAIC0yNzkwLDcg
KzI3ODEsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6cmVjb3JkV2hlZWxFdmVudEZvckRlbHRhRmls
dGVyKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbgogICAgICAgICBwYWdlLT53aGVlbEV2
ZW50RGVsdGFGaWx0ZXIoKS0+dXBkYXRlRnJvbURlbHRhKEZsb2F0U2l6ZShldmVudC5kZWx0YVgo
KSwgZXZlbnQuZGVsdGFZKCkpKTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVl
bEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIENvbnRh
aW5lck5vZGUqLCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYpCitib29sIEV2ZW50SGFu
ZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiBldmVudCwgY29uc3QgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mKQogewogICAgIFJlZjxG
cmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFtZSk7CiAKQEAgLTI4MDIsNyArMjc5Myw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIGV2ZW50CiAgICAgcmV0dXJuIGRpZEhhbmRsZUV2ZW50OwogfQogCi1i
b29sIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVu
dChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBXaWRnZXQmLCBDb250YWluZXJOb2Rl
KikKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1XaWRnZXRXaGVl
bEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IFdpZGdldCYsIGNvbnN0IFdl
YWtQdHI8U2Nyb2xsYWJsZUFyZWE+JikKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTI4MTAs
MTEgKzI4MDEsNiBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmb3Jt
V2lkZ2V0V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRQogdm9pZCBFdmVudEhhbmRsZXI6
OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
LCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYpCiB7CiB9Ci0KLXZvaWQgRXZlbnRIYW5k
bGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcmluZ0xhdGNoZWRTdGF0ZUlmTmVlZGVkKGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYpCi17Ci0gICAgY2xlYXJMYXRjaGVkU3RhdGUoKTsKLX0KICAgICAK
ICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAKQEAgLTI4NTcsNyArMjg0Myw3IEBAIHN0
YXRpYyBXZWFrUHRyPFdpZGdldD4gd2lkZ2V0Rm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVt
ZW50KQogICAgIHJldHVybiBtYWtlV2Vha1B0cigqZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PigqdGFy
Z2V0KS53aWRnZXQoKSk7CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpjb21wbGV0ZVdpZGdldFdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgY29uc3QgV2Vha1B0cjxX
aWRnZXQ+JiB3aWRnZXQsIGNvbnN0IFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxl
QXJlYSwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lcikKK2Jvb2wgRXZlbnRIYW5k
bGVyOjpjb21wbGV0ZVdpZGdldFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBl
dmVudCwgY29uc3QgV2Vha1B0cjxXaWRnZXQ+JiB3aWRnZXQsIGNvbnN0IFdlYWtQdHI8U2Nyb2xs
YWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICBtX2lzSGFuZGxpbmdXaGVlbEV2ZW50
ID0gZmFsc2U7CiAgICAgCkBAIC0yODczLDcgKzI4NTksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
Y29tcGxldGVXaWRnZXRXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQs
IGNvbgogICAgIGlmICghd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIHJldHVybiBwbGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1XaWRnZXRXaGVlbEV2
ZW50KGV2ZW50LCAqd2lkZ2V0LmdldCgpLCBzY3JvbGxhYmxlQ29udGFpbmVyKTsKKyAgICByZXR1
cm4gcGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudChldmVudCwgKndpZGdl
dC5nZXQoKSwgc2Nyb2xsYWJsZUFyZWEpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQpAQCAtMjg4OSw2ICsy
ODc1LDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiBldmVudCkKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAorICAgIGlmICghbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgaWYgKG1fZnJhbWUucGFnZSgpLT5wb2ludGVy
TG9ja0NvbnRyb2xsZXIoKS5pc0xvY2tlZCgpKSB7CiAgICAgICAgIG1fZnJhbWUucGFnZSgpLT5w
b2ludGVyTG9ja0NvbnRyb2xsZXIoKS5kaXNwYXRjaExvY2tlZFdoZWVsRXZlbnQoZXZlbnQpOwpA
QCAtMjkwNywzMyArMjg5NiwzMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVu
dChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQogICAgIG1faXNIYW5kbGluZ1doZWVs
RXZlbnQgPSB0cnVlOwogICAgIHNldEZyYW1lV2FzU2Nyb2xsZWRCeVVzZXIoKTsKIAorICAgIGlm
IChtX2ZyYW1lLmlzTWFpbkZyYW1lKCkpIHsKKyNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJ
TkcpCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKS5y
ZWNlaXZlZFdoZWVsRXZlbnQoZXZlbnQpOworI2VuZGlmCisgICAgICAgIHJlY29yZFdoZWVsRXZl
bnRGb3JEZWx0YUZpbHRlcihldmVudCk7CisgICAgfQorCiAgICAgSGl0VGVzdFJlcXVlc3QgcmVx
dWVzdDsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKGV2
ZW50LnBvc2l0aW9uKCkpKTsKICAgICBkb2N1bWVudC0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQp
OwogCi0gICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBoYXZlIHRyYWNrIGFsbCB0aHJlZSBvZiB0YXJn
ZXRFbGVtZW50LCBzY3JvbGxhYmxlQ29udGFpbmVyIGFuZCBTY3JvbGxhYmxlQXJlYT8KICAgICBS
ZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IHJlc3VsdC50YXJnZXRFbGVtZW50KCk7Ci0gICAgUmVm
UHRyPENvbnRhaW5lck5vZGU+IHNjcm9sbGFibGVDb250YWluZXI7CiAgICAgV2Vha1B0cjxTY3Jv
bGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFyZWE7CiAgICAgYm9vbCBpc092ZXJXaWRnZXQgPSByZXN1
bHQuaXNPdmVyV2lkZ2V0KCk7CiAgICAgCi0gICAgLy8gRklYTUU6IFVzaW5nIHRoZSB2YWx1ZSBv
ZiBpc092ZXJXaWRnZXQgZnJvbSB0aGUgbGF0Y2hpbmcgc3RhdGUgdHJpZ2dlcnMgZG91YmxlLXJl
Y3Vyc2lvbiBpbnRvIHN1YmZyYW1lcy4KICAgICAvLyBGSVhNRTogRGVzcGl0ZSBkb2luZyB0aGlz
IHVwLWZyb250IHNlYXJjaCBmb3IgdGhlIGNvcnJlY3Qgc2Nyb2xsYWJsZSBhcmVhLCB3ZSBkaXNw
YXRjaCBldmVudHMgdmlhIGVsZW1lbnRzIHdoaWNoCiAgICAgLy8gaXRzZWxmIGZpbmRzIGFuZCB0
cmllcyB0byBzY3JvbGwgb3ZlcmZsb3cgc2Nyb2xsZXJzLgotICAgIGRldGVybWluZVdoZWVsRXZl
bnRUYXJnZXQoZXZlbnQsIHJlc3VsdCwgZWxlbWVudCwgc2Nyb2xsYWJsZUNvbnRhaW5lciwgc2Ny
b2xsYWJsZUFyZWEsIGlzT3ZlcldpZGdldCk7Ci0KLSNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFU
Q0hJTkcpCi0gICAgaWYgKGV2ZW50LnBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VO
b25lICYmIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5v
bmUgJiYgbV9mcmFtZS5wYWdlKCkpCi0gICAgICAgIG1fZnJhbWUucGFnZSgpLT5yZXNldExhdGNo
aW5nU3RhdGUoKTsKLSNlbmRpZgotCi0gICAgcmVjb3JkV2hlZWxFdmVudEZvckRlbHRhRmlsdGVy
KGV2ZW50KTsKKyAgICBkZXRlcm1pbmVXaGVlbEV2ZW50VGFyZ2V0KGV2ZW50LCByZXN1bHQsIGVs
ZW1lbnQsIHNjcm9sbGFibGVBcmVhLCBpc092ZXJXaWRnZXQpOwogCiAgICAgaWYgKGVsZW1lbnQp
IHsKICAgICAgICAgaWYgKGlzT3ZlcldpZGdldCkgewogICAgICAgICAgICAgaWYgKFdlYWtQdHI8
V2lkZ2V0PiB3aWRnZXQgPSB3aWRnZXRGb3JFbGVtZW50KCplbGVtZW50KSkgewogICAgICAgICAg
ICAgICAgIGlmIChwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KGV2ZW50LCAqd2lkZ2V0LmdldCgpKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRlV2lkZ2V0V2hlZWxFdmVudChldmVu
dCwgd2lkZ2V0LCBzY3JvbGxhYmxlQXJlYSwgc2Nyb2xsYWJsZUNvbnRhaW5lci5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZVdpZGdldFdoZWVsRXZlbnQoZXZlbnQs
IHdpZGdldCwgc2Nyb2xsYWJsZUFyZWEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAg
LTI5NTMsOSArMjkzOSwxNSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQogICAgIGlmIChzY3JvbGxhYmxlQXJlYSkK
ICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRl
KGZhbHNlKTsKIAotICAgIC8vIEZJWE1FOiBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZygp
IGlzIG9ubHkgY2FsbGVkIGZvciBGcmFtZVZpZXcgc2Nyb2xsaW5nLCBub3Qgb3ZlcmZsb3cgc2Ny
b2xsaW5nLCB3aGljaCBpcyBjb25mdXNpbmcuCi0gICAgYm9vbCBoYW5kbGVkRXZlbnQgPSBwcm9j
ZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZyhldmVudCwgc2Nyb2xsYWJsZUNvbnRhaW5lci5nZXQo
KSwgc2Nyb2xsYWJsZUFyZWEpOwotICAgIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChl
dmVudCwgc2Nyb2xsYWJsZUFyZWEpOworICAgIGJvb2wgaGFuZGxlZEV2ZW50ID0gZmFsc2U7Cisj
aWYgRU5BQkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQorICAgIFdlYWtQdHI8U2Nyb2xsYWJsZUFy
ZWE+IGxhdGNoZWRTY3JvbGxhYmxlQXJlYTsKKyAgICBpZiAobV9mcmFtZS5wYWdlKCktPnNjcm9s
bExhdGNoaW5nQ29udHJvbGxlcigpLmxhdGNoaW5nQWxsb3dzU2Nyb2xsaW5nSW5GcmFtZShtX2Zy
YW1lLCBsYXRjaGVkU2Nyb2xsYWJsZUFyZWEpKSB7CisgICAgICAgIC8vIEZJWE1FOiBwcm9jZXNz
V2hlZWxFdmVudEZvclNjcm9sbGluZygpIGlzIG9ubHkgY2FsbGVkIGZvciBGcmFtZVZpZXcgc2Ny
b2xsaW5nLCBub3Qgb3ZlcmZsb3cgc2Nyb2xsaW5nLCB3aGljaCBpcyBjb25mdXNpbmcuCisgICAg
ICAgIGhhbmRsZWRFdmVudCA9IHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGV2ZW50LCBs
YXRjaGVkU2Nyb2xsYWJsZUFyZWEpOworICAgICAgICBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9s
bFNuYXAoZXZlbnQsIGxhdGNoZWRTY3JvbGxhYmxlQXJlYSk7CisgICAgfQorI2VuZGlmCiAgICAg
cmV0dXJuIGhhbmRsZWRFdmVudDsKIH0KIApAQCAtMjk2Nyw5ICsyOTU5LDEwIEBAIHZvaWQgRXZl
bnRIYW5kbGVyOjpjbGVhckxhdGNoZWRTdGF0ZSgpCiAKICNpZiBFTkFCTEUoV0hFRUxfRVZFTlRf
TEFUQ0hJTkcpCiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwg
IkV2ZW50SGFuZGxlcjo6Y2xlYXJMYXRjaGVkU3RhdGUoKSIpOwotICAgIHBhZ2UtPnJlc2V0TGF0
Y2hpbmdTdGF0ZSgpOworICAgIGlmIChhdXRvKiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgPSBw
YWdlLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpKQorICAgICAgICBzY3JvbGxM
YXRjaGluZ0NvbnRyb2xsZXItPnJlbW92ZUxhdGNoaW5nU3RhdGVGb3JGcmFtZShtX2ZyYW1lKTsK
ICNlbmRpZgotICAgIGlmIChhdXRvIGZpbHRlciA9IHBhZ2UtPndoZWVsRXZlbnREZWx0YUZpbHRl
cigpKQorICAgIGlmIChhdXRvKiBmaWx0ZXIgPSBwYWdlLT53aGVlbEV2ZW50RGVsdGFGaWx0ZXIo
KSkKICAgICAgICAgZmlsdGVyLT5lbmRGaWx0ZXJpbmdEZWx0YXMoKTsKIH0KIApAQCAtMjk3OCw2
ICsyOTcxLDkgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihO
b2RlKiBzdGFydE5vZGUsIFdoZWVsRXZlbnQmIHdoZWVsRXYKICAgICBpZiAoIXN0YXJ0Tm9kZSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAorICAgIGlmICghbV9mcmFtZS5wYWdlKCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGF1dG8gcHJvdGVjdGVkRnJhbWUgPSBtYWtlUmVmKG1fZnJhbWUpOwog
CiAgICAgRmxvYXRTaXplIGZpbHRlcmVkUGxhdGZvcm1EZWx0YSh3aGVlbEV2ZW50LmRlbHRhWCgp
LCB3aGVlbEV2ZW50LmRlbHRhWSgpKTsKQEAgLTI5ODgsMTAgKzI5ODQsMjkgQEAgdm9pZCBFdmVu
dEhhbmRsZXI6OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihOb2RlKiBzdGFydE5vZGUsIFdoZWVs
RXZlbnQmIHdoZWVsRXYKICAgICB9CiAKICNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcp
Ci0gICAgaWYgKG1fZnJhbWUucGFnZSgpICYmIG1fZnJhbWUucGFnZSgpLT53aGVlbEV2ZW50RGVs
dGFGaWx0ZXIoKS0+aXNGaWx0ZXJpbmdEZWx0YXMoKSkgeworICAgIGlmIChtX2ZyYW1lLnBhZ2Uo
KS0+d2hlZWxFdmVudERlbHRhRmlsdGVyKCktPmlzRmlsdGVyaW5nRGVsdGFzKCkpIHsKICAgICAg
ICAgZmlsdGVyZWRQbGF0Zm9ybURlbHRhID0gbV9mcmFtZS5wYWdlKCktPndoZWVsRXZlbnREZWx0
YUZpbHRlcigpLT5maWx0ZXJlZERlbHRhKCk7CiAgICAgICAgIGZpbHRlcmVkVmVsb2NpdHkgPSBt
X2ZyYW1lLnBhZ2UoKS0+d2hlZWxFdmVudERlbHRhRmlsdGVyKCktPmZpbHRlcmVkVmVsb2NpdHko
KTsKICAgICB9CisKKyAgICBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiBsYXRjaGVkU2Nyb2xsZXI7
CisgICAgaWYgKCFtX2ZyYW1lLnBhZ2UoKS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkubGF0
Y2hpbmdBbGxvd3NTY3JvbGxpbmdJbkZyYW1lKG1fZnJhbWUsIGxhdGNoZWRTY3JvbGxlcikpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChsYXRjaGVkU2Nyb2xsZXIpIHsKKyAgICAgICAgaWYg
KGxhdGNoZWRTY3JvbGxlciA9PSBtX2ZyYW1lLnZpZXcoKSkgeworICAgICAgICAgICAgLy8gRnJh
bWVWaWV3IHNjcm9sbGluZyBpcyBoYW5kbGVkIHZpYSBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9s
bGluZygpLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBw
bGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOworICAg
ICAgICBpZiAocGxhdGZvcm1FdmVudCkgeworICAgICAgICAgICAgYXV0byBjb3BpZWRFdmVudCA9
IHBsYXRmb3JtRXZlbnQtPmNvcHlXaXRoRGVsdGFzQW5kVmVsb2NpdHkoZmlsdGVyZWRQbGF0Zm9y
bURlbHRhLndpZHRoKCksIGZpbHRlcmVkUGxhdGZvcm1EZWx0YS5oZWlnaHQoKSwgZmlsdGVyZWRW
ZWxvY2l0eSk7CisgICAgICAgICAgICBpZiAobGF0Y2hlZFNjcm9sbGVyLT5oYW5kbGVXaGVlbEV2
ZW50KGNvcGllZEV2ZW50KSkKKyAgICAgICAgICAgICAgICB3aGVlbEV2ZW50LnNldERlZmF1bHRI
YW5kbGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAjZW5kaWYK
IAogICAgIGlmIChoYW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xvc2luZ0JveChzdGFy
dE5vZGUsIHdoZWVsRXZlbnQsIGZpbHRlcmVkUGxhdGZvcm1EZWx0YSwgZmlsdGVyZWRWZWxvY2l0
eSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCA2MTc5MDVlMDFiMWRkZjBkMWUw
YzFkNGVlYjgzNDhlNzllYWJiMmExLi44ZWIyYWNjMDY1ODQzMzIwMTc0YmVkZDM4ZGVkOTZiMWYx
N2Y1ZDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTQ1MSwxMyArNDUxLDEz
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQq
KTsKIAogICAgIGJvb2wgcGFzc1doZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmLCBXaWRnZXQmKTsKLSAgICB2b2lkIGRldGVybWluZVdoZWVsRXZlbnRUYXJnZXQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgY29uc3QgSGl0VGVzdFJlc3VsdCYsIFJlZlB0cjxFbGVt
ZW50PiYgZXZlbnRUYXJnZXQsIFJlZlB0cjxDb250YWluZXJOb2RlPiYgc2Nyb2xsYWJsZUNvbnRh
aW5lciwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mLCBib29sJiBpc092ZXJXaWRnZXQpOworICAg
IHZvaWQgZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
LCBjb25zdCBIaXRUZXN0UmVzdWx0JiwgUmVmUHRyPEVsZW1lbnQ+JiBldmVudFRhcmdldCwgV2Vh
a1B0cjxTY3JvbGxhYmxlQXJlYT4mLCBib29sJiBpc092ZXJXaWRnZXQpOwogICAgIHZvaWQgcmVj
b3JkV2hlZWxFdmVudEZvckRlbHRhRmlsdGVyKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwot
ICAgIGJvb2wgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lciwgY29uc3QgV2Vha1B0
cjxTY3JvbGxhYmxlQXJlYT4mKTsKKyAgICBib29sIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xs
aW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IFdlYWtQdHI8U2Nyb2xsYWJsZUFy
ZWE+Jik7CiAgICAgdm9pZCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiwgY29uc3QgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mKTsKLSAgICBi
b29sIGNvbXBsZXRlV2lkZ2V0V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBj
b25zdCBXZWFrUHRyPFdpZGdldD4mLCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYsIENv
bnRhaW5lck5vZGUqKTsKKyAgICBib29sIGNvbXBsZXRlV2lkZ2V0V2hlZWxFdmVudChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBXZWFrUHRyPFdpZGdldD4mLCBjb25zdCBXZWFrUHRy
PFNjcm9sbGFibGVBcmVhPiYpOwogCi0gICAgYm9vbCBwbGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1X
aWRnZXRXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IFdpZGdldCYs
IENvbnRhaW5lck5vZGUqIHNjcm9sbGFibGVDb250YWluZXIpOworICAgIGJvb2wgcGxhdGZvcm1D
b21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
LCBjb25zdCBXaWRnZXQmLCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYpOwogCiAgICAg
dm9pZCBkZWZhdWx0U3BhY2VFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCYpOwogICAgIHZvaWQg
ZGVmYXVsdEJhY2tzcGFjZUV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50Jik7CkBAIC01MDMsOCAr
NTAzLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGF1dG9IaWRlQ3Vyc29yVGltZXJGaXJlZCgpOwog
I2VuZGlmCiAKLSAgICB2b2lkIGNsZWFyT3JTY2hlZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZO
ZWVkZWQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0gICAgdm9pZCBjbGVhckxhdGNoZWRT
dGF0ZVRpbWVyRmlyZWQoKTsKICAgICB2b2lkIGNsZWFyTGF0Y2hlZFN0YXRlKCk7CiAKICAgICBi
b29sIHNob3VsZFNlbmRNb3VzZUV2ZW50c1RvSW5hY3RpdmVXaW5kb3dzKCkgY29uc3Q7CkBAIC01
MzYsMTAgKzUzNCw2IEBAIHByaXZhdGU6CiAgICAgVGltZXIgbV9ob3ZlclRpbWVyOwogICAgIGJv
b2wgbV9oYXNTY2hlZHVsZWRDdXJzb3JVcGRhdGUgeyBmYWxzZSB9OwogCi0jaWYgUExBVEZPUk0o
TUFDKQotICAgIFRpbWVyIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXI7Ci0jZW5kaWYKLQogICAg
IHN0ZDo6dW5pcXVlX3B0cjxBdXRvc2Nyb2xsQ29udHJvbGxlcj4gbV9hdXRvc2Nyb2xsQ29udHJv
bGxlcjsKICAgICBib29sIG1fbW91c2VEb3duTWF5U3RhcnRBdXRvc2Nyb2xsIHsgZmFsc2UgfTsK
ICAgICBib29sIG1fbW91c2VEb3duV2FzSW5TdWJmcmFtZSB7IGZhbHNlIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAppbmRleCBhNzc4MTBiMDIwYmY1YThkODUyMmNhYzhiMjViMzY5MjU4ODMyNTk3Li41NmRj
NWQ3YTA4MGVlYzkxYjFiNWVmMWIyOGMwNDNlZTZkNjQ0YWExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
QEAgLTExMiw3ICsxMTIsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCIKICNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3JvbGxMYXRjaGluZ1N0YXRlLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgpAQCAtMjgzOCw3ICsyODM4LDcgQEAgdm9pZCBQYWdlOjpzdGFydE1vbml0b3JpbmdXaGVlbEV2
ZW50cyhib29sIGNsZWFyTGF0Y2hpbmdTdGF0ZSkKIAogI2lmIEVOQUJMRShXSEVFTF9FVkVOVF9M
QVRDSElORykKICAgICBpZiAoY2xlYXJMYXRjaGluZ1N0YXRlKQotICAgICAgICByZXNldExhdGNo
aW5nU3RhdGUoKTsKKyAgICAgICAgc2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkuY2xlYXIoKTsK
ICNlbmRpZgogCiAgICAgaWYgKGF1dG8qIGZyYW1lVmlldyA9IG1haW5GcmFtZSgpLnZpZXcoKSkg
ewpAQCAtMzE0MSw0MyArMzE0MSwxNyBAQCB2b2lkIFBhZ2U6OmFwcGxpY2F0aW9uRGlkQmVjb21l
QWN0aXZlKCkKIH0KIAogI2lmIEVOQUJMRShXSEVFTF9FVkVOVF9MQVRDSElORykKLVNjcm9sbExh
dGNoaW5nU3RhdGUqIFBhZ2U6OmxhdGNoaW5nU3RhdGUoKQorU2Nyb2xsTGF0Y2hpbmdDb250cm9s
bGVyJiBQYWdlOjpzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKQogewotICAgIGlmIChtX2xhdGNo
aW5nU3RhdGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVy
biAmbV9sYXRjaGluZ1N0YXRlLmxhc3QoKTsKLX0KLQotdm9pZCBQYWdlOjpwdXNoTmV3TGF0Y2hp
bmdTdGF0ZShTY3JvbGxMYXRjaGluZ1N0YXRlJiYgc3RhdGUpCi17Ci0gICAgbV9sYXRjaGluZ1N0
YXRlLmFwcGVuZChXVEZNb3ZlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgUGFnZTo6cmVzZXRMYXRjaGlu
Z1N0YXRlKCkKLXsKLSAgICBtX2xhdGNoaW5nU3RhdGUuY2xlYXIoKTsKKyAgICBpZiAoIW1fc2Ny
b2xsTGF0Y2hpbmdDb250cm9sbGVyKQorICAgICAgICBtX3Njcm9sbExhdGNoaW5nQ29udHJvbGxl
ciA9IG1ha2VVbmlxdWU8U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyPigpOworICAgICAgICAKKyAg
ICByZXR1cm4gKm1fc2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOwogfQogCi12b2lkIFBhZ2U6OnBv
cExhdGNoaW5nU3RhdGUoKQorU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKiBQYWdlOjpzY3JvbGxM
YXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpCiB7Ci0gICAgbV9sYXRjaGluZ1N0YXRlLnJlbW92
ZUxhc3QoKTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAi
UGFnZTo6cG9wTGF0Y2hpbmdTdGF0ZSgpIC0gbmV3IHN0YXRlICIgPDwgbV9sYXRjaGluZ1N0YXRl
KTsKLX0KLQotdm9pZCBQYWdlOjpyZW1vdmVMYXRjaGluZ1N0YXRlRm9yVGFyZ2V0KEVsZW1lbnQm
IHRhcmdldE5vZGUpCi17Ci0gICAgaWYgKG1fbGF0Y2hpbmdTdGF0ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fbGF0Y2hpbmdTdGF0ZS5yZW1vdmVBbGxNYXRjaGluZyhbJnRh
cmdldE5vZGVdIChTY3JvbGxMYXRjaGluZ1N0YXRlJiBzdGF0ZSkgewotICAgICAgICBhdXRvKiB3
aGVlbEVsZW1lbnQgPSBzdGF0ZS53aGVlbEV2ZW50RWxlbWVudCgpOwotICAgICAgICBpZiAoIXdo
ZWVsRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4g
dGFyZ2V0Tm9kZS5pc0VxdWFsTm9kZSh3aGVlbEVsZW1lbnQpOwotICAgIH0pOwotICAgIExPR19X
SVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJQYWdlOjpyZW1vdmVMYXRjaGlu
Z1N0YXRlRm9yVGFyZ2V0KCkgLSBuZXcgc3RhdGUgIiA8PCBtX2xhdGNoaW5nU3RhdGUpOworICAg
IHJldHVybiBtX3Njcm9sbExhdGNoaW5nQ29udHJvbGxlci5nZXQoKTsKIH0KICNlbmRpZiAvLyBF
TkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggYmU0NTQzMDBi
YmQwNzVkMGY4MThjOTk5YWNhOGYzNDkxZGM5OTZkMi4uMGFiMmJiNTUwMTk0MGJkNDFmZDEwMDNi
MzBlNjZjMGUwNzE3YTVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTEzMSw3ICsxMzEsNyBAQCBjbGFz
cyBQb2ludGVyTG9ja0NvbnRyb2xsZXI7CiBjbGFzcyBQcm9ncmVzc1RyYWNrZXI7CiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CiBjbGFzcyBSZXNvdXJjZVVzYWdlT3ZlcmxheTsKLWNsYXNzIFNjcm9sbExh
dGNoaW5nU3RhdGU7CitjbGFzcyBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI7CiBjbGFzcyBTY3Jv
bGxpbmdDb29yZGluYXRvcjsKIGNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7CiBjbGFz
cyBTZXR0aW5nczsKQEAgLTQ0OCwxMiArNDQ4LDggQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCi0gICAgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSogbGF0
Y2hpbmdTdGF0ZSgpOwotICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxMYXRjaGluZ1N0YXRlPiYgbGF0
Y2hpbmdTdGF0ZVN0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9sYXRjaGluZ1N0YXRlOyB9Ci0gICAg
dm9pZCBwdXNoTmV3TGF0Y2hpbmdTdGF0ZShTY3JvbGxMYXRjaGluZ1N0YXRlJiYpOwotICAgIHZv
aWQgcG9wTGF0Y2hpbmdTdGF0ZSgpOwotICAgIHZvaWQgcmVzZXRMYXRjaGluZ1N0YXRlKCk7Ci0g
ICAgdm9pZCByZW1vdmVMYXRjaGluZ1N0YXRlRm9yVGFyZ2V0KEVsZW1lbnQmKTsKKyAgICBTY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXImIHNjcm9sbExhdGNoaW5nQ29udHJvbGxlcigpOworICAgIFNj
cm9sbExhdGNoaW5nQ29udHJvbGxlciogc2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVySWZFeGlzdHMo
KTsKICNlbmRpZiAvLyBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCiAKICNpZiBFTkFCTEUo
QVBQTEVfUEFZKQpAQCAtMTAzOCw3ICsxMDM0LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxQZXJmb3JtYW5jZUxvZ2dpbmc+IG1fcGVyZm9ybWFuY2VMb2dnaW5nOwogI2lmIEVO
QUJMRShXSEVFTF9FVkVOVF9MQVRDSElORykKLSAgICBWZWN0b3I8U2Nyb2xsTGF0Y2hpbmdTdGF0
ZT4gbV9sYXRjaGluZ1N0YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxMYXRjaGluZ0Nv
bnRyb2xsZXI+IG1fc2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOwogI2VuZGlmCiAjaWYgUExBVEZP
Uk0oTUFDKSAmJiAoRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVf
TlVNQkVSX0RFVEVDVElPTikpCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI+IG1fc2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQppbmRleCBjMWJlZjE1MzIwNDkwN2ZhOGJmMzgxMjFk
MDBhYzlkNzRiNmYyZWY0Li45MWY4MjUyMTU0ZjNhNjczOGU3OGY5M2EwOGY1N2MyYWQwOTlhMzdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCkBAIC01OSw3
ICs1OSw3IEBACiAjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKICNpbXBvcnQg
IlNjcmVlblByb3BlcnRpZXMuaCIKICNpbXBvcnQgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW1wb3J0
ICJTY3JvbGxMYXRjaGluZ1N0YXRlLmgiCisjaW1wb3J0ICJTY3JvbGxMYXRjaGluZ0NvbnRyb2xs
ZXIuaCIKICNpbXBvcnQgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW1wb3J0ICJTY3JvbGxiYXIuaCIK
ICNpbXBvcnQgIlNldHRpbmdzLmgiCkBAIC03ODQsNyArNzg0LDggQEAgc3RhdGljIFNjcm9sbGFi
bGVBcmVhKiBzY3JvbGxhYmxlQXJlYUZvckJveChSZW5kZXJCb3gmIGJveCkKIAogICAgIHJldHVy
biBib3gubGF5ZXIoKTsKIH0KLSAgICAKKworLy8gRklYTUU6IFRoaXMgY291bGQgYmUgd3JpdHRl
biBpbiB0ZXJtcyBvZiBTY3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKS4K
IHN0YXRpYyBDb250YWluZXJOb2RlKiBmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lcihD
b250YWluZXJOb2RlKiBub2RlLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQp
CiB7CiAgICAgYXV0byBiaWFzZWREZWx0YSA9IFNjcm9sbENvbnRyb2xsZXI6OndoZWVsRGVsdGFC
aWFzaW5nVG93YXJkc1ZlcnRpY2FsKHdoZWVsRXZlbnQpOwpAQCAtODE3LDQwICs4MTgsNiBAQCBz
dGF0aWMgQ29udGFpbmVyTm9kZSogZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXIoQ29u
dGFpbmVyTm9kZSogbm9kZSwgY29ucwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMg
Ym9vbCBkZWx0YUlzUHJlZG9taW5hbnRseVZlcnRpY2FsKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVs
dGFZKQotewotICAgIHJldHVybiBzdGQ6OmFicyhkZWx0YVkpID4gc3RkOjphYnMoZGVsdGFYKTsK
LX0KLSAgICAKLXN0YXRpYyBib29sIHNjcm9sbGVkVG9FZGdlSW5Eb21pbmFudERpcmVjdGlvbihj
b25zdCBDb250YWluZXJOb2RlJiBjb250YWluZXIsIGNvbnN0IFNjcm9sbGFibGVBcmVhJiBhcmVh
LCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSkKLXsKLSAgICBpZiAoIWNvbnRhaW5lci5yZW5k
ZXJlcigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghYXJlYS5jYW5IYXZlU2Ny
b2xsYmFycygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSA9IGNvbnRhaW5lci5yZW5kZXJlcigpLT5zdHlsZSgpOwotCi0gICAgaWYgKCFkZWx0
YUlzUHJlZG9taW5hbnRseVZlcnRpY2FsKGRlbHRhWCwgZGVsdGFZKSAmJiBkZWx0YVgpIHsKLSAg
ICAgICAgaWYgKHN0eWxlLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpIaWRkZW4pCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoZGVsdGFYIDwgMCkKLSAgICAgICAgICAg
IHJldHVybiBhcmVhLnNjcm9sbGVkVG9SaWdodCgpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IGFyZWEuc2Nyb2xsZWRUb0xlZnQoKTsKLSAgICB9Ci0KLSAgICBpZiAoc3R5bGUub3ZlcmZsb3dZ
KCkgPT0gT3ZlcmZsb3c6OkhpZGRlbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
ZGVsdGFZIDwgMCkKLSAgICAgICAgcmV0dXJuIGFyZWEuc2Nyb2xsZWRUb0JvdHRvbSgpOwotICAg
IAotICAgIHJldHVybiBhcmVhLnNjcm9sbGVkVG9Ub3AoKTsKLX0KLQogc3RhdGljIFdlYWtQdHI8
U2Nyb2xsYWJsZUFyZWE+IHNjcm9sbGFibGVBcmVhRm9yRXZlbnRUYXJnZXQoRWxlbWVudCogZXZl
bnRUYXJnZXQpCiB7CiAgICAgYXV0byogd2lkZ2V0ID0gRXZlbnRIYW5kbGVyOjp3aWRnZXRGb3JF
dmVudFRhcmdldChldmVudFRhcmdldCk7CkBAIC04NjksNDMgKzgzNiw2IEBAIHN0YXRpYyBib29s
IGV2ZW50VGFyZ2V0SXNQbGF0Zm9ybVdpZGdldChFbGVtZW50KiBldmVudFRhcmdldCkKICAgICBy
ZXR1cm4gd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpOwogfQogCi1zdGF0aWMgYm9vbCBsYXRjaGlu
Z0lzTG9ja2VkVG9QbGF0Zm9ybUZyYW1lKGNvbnN0IEZyYW1lJiBmcmFtZSkKLXsKLSAgICBhdXRv
KiBwYWdlID0gZnJhbWUucGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSogbGF0Y2hlZFN0YXRlID0gcGFnZS0+bGF0
Y2hpbmdTdGF0ZSgpOwotICAgIGlmICghbGF0Y2hlZFN0YXRlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoZnJhbWVIYXNQbGF0Zm9ybVdpZGdldChmcmFtZSkgJiYgJmZyYW1lICE9
IGxhdGNoZWRTdGF0ZS0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGxhdGNoaW5nSXNMb2NrZWRUb0FuY2VzdG9yT2ZU
aGlzRnJhbWUoY29uc3QgRnJhbWUmIGZyYW1lKQotewotICAgIGF1dG8qIHBhZ2UgPSBmcmFtZS5w
YWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTY3Jv
bGxMYXRjaGluZ1N0YXRlKiBsYXRjaGVkU3RhdGUgPSBwYWdlLT5sYXRjaGluZ1N0YXRlKCk7Ci0g
ICAgaWYgKCFsYXRjaGVkU3RhdGUgfHwgIWxhdGNoZWRTdGF0ZS0+ZnJhbWUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCZmcmFtZSA9PSBsYXRjaGVkU3RhdGUtPmZyYW1lKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoRnJhbWUqIGFuY2VzdG9yID0gZnJh
bWUudHJlZSgpLnBhcmVudCgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+dHJlZSgp
LnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChhbmNlc3RvciA9PSBsYXRjaGVkU3RhdGUtPmZyYW1l
KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCiBzdGF0aWMgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFyZWFG
b3JDb250YWluZXJOb2RlKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsKICAgICBhdXRvIGJv
eCA9IGNvbnRhaW5lci5yZW5kZXJCb3goKTsKQEAgLTkxOSwxMTMgKzg0OSw0MiBAQCBzdGF0aWMg
V2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFyZWFGb3JDb250YWluZXJOb2RlKENv
bnRhaW5lck5vZGUmIGNvbgogICAgIHJldHVybiBtYWtlV2Vha1B0cigqc2Nyb2xsYWJsZUFyZWFQ
dHIpOwogfQogCi1zdGF0aWMgYm9vbCBsYXRjaGVkVG9GcmFtZU9yQm9keShDb250YWluZXJOb2Rl
JiBjb250YWluZXIpCi17Ci0gICAgLy8gRklYTUUoMTA2MTMzKTogV2UgbWlnaHQgbmVlZCB0byBh
ZGQgb3Igc3dpdGNoIHRvIGlzPEhUTUxEb2N1bWVudEVsZW1lbnQ+IHdoZW4gdGhpcyBidWcgaXMg
Zml4ZWQuCi0gICAgcmV0dXJuIGlzPEhUTUxGcmFtZVNldEVsZW1lbnQ+KGNvbnRhaW5lcikgfHwg
aXM8SFRNTEJvZHlFbGVtZW50Pihjb250YWluZXIpOwotfQotCi12b2lkIEV2ZW50SGFuZGxlcjo6
Y2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3RhdGVJZk5lZWRlZChjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmIGV2ZW50KQordm9pZCBFdmVudEhhbmRsZXI6OmRldGVybWluZVdoZWVsRXZl
bnRUYXJnZXQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBjb25zdCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIFJlZlB0cjxFbGVtZW50PiYgd2hlZWxFdmVudFRhcmdldCwgV2Vh
a1B0cjxTY3JvbGxhYmxlQXJlYT4mIHNjcm9sbGFibGVBcmVhLCBib29sJiBpc092ZXJXaWRnZXQp
CiB7Ci0gICAgaWYgKCFtX2ZyYW1lLmlzTWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFBsYXRmb3JtIGRvZXMgbm90IHByb3ZpZGUgYW4gaW5kaWNhdGlvbiB0aGF0IGl0IHdp
bGwgc3dpdGNoIGZyb20gbm9uLW1vbWVudHVtIHRvIG1vbWVudHVtIHNjcm9sbGluZwotICAgIC8v
IHdoZW4gaGFuZGxpbmcgd2hlZWwgZXZlbnRzLgotICAgIC8vIExvZ2ljIGJlbG93IGluc3RhbGxz
IGEgdGltZXIgd2hlbiBub24tbW9tZW50dW0gc2Nyb2xsaW5nIGVuZHMuIElmIG1vbWVudHVtIHNj
cm9sbCBkb2VzIG5vdCBzdGFydCB3aXRoaW4gdGhhdCBpbnRlcnZhbCwKLSAgICAvLyByZXNldCB0
aGUgbGF0Y2hlZCBzdGF0ZS4gSWYgaXQgZG9lcywgc3RvcCB0aGUgdGltZXIsIGxlYXZpbmcgdGhl
IGxhdGNoZWQgc3RhdGUgdW50b3VjaGVkLgotICAgIGlmICghbV9jbGVhckxhdGNoaW5nU3RhdGVU
aW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGlmIChldmVudC5pc0VuZE9mTm9uTW9tZW50dW1T
Y3JvbGwoKSkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBz
dHJlYW0gPDwgIkV2ZW50SGFuZGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3Rh
dGVJZk5lZWRlZCgpIC0gZXZlbnQiIDw8IGV2ZW50IDw8ICIsIHNjaGVkdWxpbmcgY2xlYXIgdGlt
ZXIiKTsKLSAgICAgICAgICAgIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIuc3RhcnRPbmVTaG90
KHJlc2V0TGF0Y2hlZFN0YXRlVGltZW91dCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBJZiBhbm90aGVyIHdoZWVsIGV2ZW50IHNjcm9sbGluZyBzdGFydHMsIHN0b3AgdGhl
IHRpbWVyIG1hbnVhbGx5LCBhbmQgcmVzZXQgdGhlIGxhdGNoZWQgc3RhdGUgaW1tZWRpYXRlbHku
Ci0gICAgICAgIGlmIChldmVudC5zaG91bGRDb25zaWRlckxhdGNoaW5nKCkpIHsKLSAgICAgICAg
ICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRs
ZXI6OmNsZWFyT3JTY2hlZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQoKSAtIGV2ZW50
IiA8PCBldmVudCA8PCAiLCB0aW1lciBwZW5kaW5nLCBhbm90aGVyIHNjcm9sbCBzdGFydGluZyIp
OwotICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKLSAgICAgICAg
ICAgICAgICBwYWdlLT5yZXNldExhdGNoaW5nU3RhdGUoKTsKLSAgICAgICAgICAgIG1fY2xlYXJM
YXRjaGluZ1N0YXRlVGltZXIuc3RvcCgpOwotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmlzVHJh
bnNpdGlvbmluZ1RvTW9tZW50dW1TY3JvbGwoKSkgewotICAgICAgICAgICAgLy8gV2hlZWwgZXZl
bnRzIG1hY2hpbmFyeSBpcyB0cmFuc2l0aW9uaW5nIHRvIG1vbWVudHVtIHNjcm9sbGluZywgc28g
bm8gbmVlZCB0byByZXNldCBsYXRjaGVkIHN0YXRlLiBTdG9wIHRoZSB0aW1lci4KLSAgICAgICAg
ICAgIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIuc3RvcCgpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIEV2ZW50SGFuZGxlcjo6ZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgUmVmUHRyPEVsZW1lbnQ+JiB3aGVlbEV2ZW50VGFyZ2V0LCBSZWZQdHI8Q29udGFpbmVyTm9k
ZT4mIHNjcm9sbGFibGVDb250YWluZXIsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxh
YmxlQXJlYSwgYm9vbCYgaXNPdmVyV2lkZ2V0KQotewotICAgIGNsZWFyT3JTY2hlZHVsZUNsZWFy
aW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQod2hlZWxFdmVudCk7Ci0KICAgICBhdXRvKiBwYWdlID0g
bV9mcmFtZS5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBh
dXRvKiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7Ci0KICAgICBpZiAoIXZpZXcpCi0gICAgICAgIHNj
cm9sbGFibGVDb250YWluZXIgPSB3aGVlbEV2ZW50VGFyZ2V0OworICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoZXZlbnRUYXJnZXRJc1BsYXRmb3JtV2lkZ2V0KHdoZWVsRXZlbnRUYXJnZXQuZ2V0
KCkpKQorICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhRm9yRXZlbnRUYXJn
ZXQod2hlZWxFdmVudFRhcmdldC5nZXQoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChldmVu
dFRhcmdldElzUGxhdGZvcm1XaWRnZXQod2hlZWxFdmVudFRhcmdldC5nZXQoKSkpIHsKLSAgICAg
ICAgICAgIHNjcm9sbGFibGVDb250YWluZXIgPSB3aGVlbEV2ZW50VGFyZ2V0OwotICAgICAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYUZvckV2ZW50VGFyZ2V0KHdoZWVsRXZl
bnRUYXJnZXQuZ2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2Nyb2xsYWJs
ZUNvbnRhaW5lciA9IGZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKHdoZWVsRXZlbnRU
YXJnZXQuZ2V0KCksIHdoZWVsRXZlbnQpOwotICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVDb250
YWluZXIgJiYgIWlzPEhUTUxJRnJhbWVFbGVtZW50Pih3aGVlbEV2ZW50VGFyZ2V0KSkKLSAgICAg
ICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhRm9yQ29udGFpbmVyTm9k
ZSgqc2Nyb2xsYWJsZUNvbnRhaW5lcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2h5IGRvZXMgdGhpcyBhc3N1bWUgdGhlIGJvZHk/IFdoYXQgaWYgd2Ug
aGl0IGFuIGlmcmFtZSBpbnNpZGUgYW4gb3ZlcmZsb3c6c2Nyb2xsPwotICAgICAgICAgICAgICAg
IHNjcm9sbGFibGVDb250YWluZXIgPSB2aWV3LT5mcmFtZSgpLmRvY3VtZW50KCktPmJvZHlPckZy
YW1lc2V0KCk7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBtYWtlV2Vha1B0cihz
dGF0aWNfY2FzdDxTY3JvbGxhYmxlQXJlYSY+KCp2aWV3KSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVu
dEhhbmRsZXI6OmRldGVybWluZVdoZWVsRXZlbnRUYXJnZXQoKSAtIGV2ZW50IiA8PCB3aGVlbEV2
ZW50IDw8ICIgZm91bmQgc2Nyb2xsYWJsZUNvbnRhaW5lciIgPDwgVmFsdWVPck51bGwoc2Nyb2xs
YWJsZUNvbnRhaW5lci5nZXQoKSkgPDwgIiBzY3JvbGxhYmxlQXJlYSAiIDw8IChzY3JvbGxhYmxl
QXJlYSA/IHNjcm9sbGFibGVBcmVhLmdldCgpIDogbnVsbHB0cikpOwotICAgICAgICB9CisgICAg
ICAgIGF1dG8qIHNjcm9sbGFibGVDb250YWluZXIgPSBmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNv
bnRhaW5lcih3aGVlbEV2ZW50VGFyZ2V0LmdldCgpLCB3aGVlbEV2ZW50KTsKKyAgICAgICAgaWYg
KHNjcm9sbGFibGVDb250YWluZXIpCisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHNjcm9s
bGFibGVBcmVhRm9yQ29udGFpbmVyTm9kZSgqc2Nyb2xsYWJsZUNvbnRhaW5lcik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gbWFrZVdlYWtQdHIoc3RhdGljX2Nh
c3Q8U2Nyb2xsYWJsZUFyZWEmPigqdmlldykpOwogICAgIH0KIAorICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRsZXI6OmRldGVybWluZVdoZWVs
RXZlbnRUYXJnZXQoKSAtIGV2ZW50IiA8PCB3aGVlbEV2ZW50IDw8ICIgZm91bmQgc2Nyb2xsYWJs
ZUFyZWEgIiA8PCBWYWx1ZU9yTnVsbChzY3JvbGxhYmxlQXJlYS5nZXQoKSkgPDwgIiwgbGF0Y2hp
bmcgc3RhdGUgaXMgIiA8PCBwYWdlLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKSk7CisKICAg
ICBpZiAoc2Nyb2xsYWJsZUFyZWEgJiYgcGFnZS0+aXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkK
ICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRl
c3RNb25pdG9yKHBhZ2UtPndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKIAotICAgIGF1dG8qIGxh
dGNoaW5nU3RhdGUgPSBwYWdlLT5sYXRjaGluZ1N0YXRlKCk7Ci0gICAgaWYgKHdoZWVsRXZlbnQu
c2hvdWxkQ29uc2lkZXJMYXRjaGluZygpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxhYmxlQ29udGFp
bmVyICYmIHNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBib29sIHN0YXJ0aW5nQXRTY3Jv
bGxMaW1pdCA9IHNjcm9sbGVkVG9FZGdlSW5Eb21pbmFudERpcmVjdGlvbigqc2Nyb2xsYWJsZUNv
bnRhaW5lciwgKnNjcm9sbGFibGVBcmVhLmdldCgpLCB3aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVl
bEV2ZW50LmRlbHRhWSgpKTsKLSAgICAgICAgICAgIGlmICghc3RhcnRpbmdBdFNjcm9sbExpbWl0
KSB7Ci0gICAgICAgICAgICAgICAgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSBsYXRjaGluZ1N0YXRlOwot
ICAgICAgICAgICAgICAgIGxhdGNoaW5nU3RhdGUuc2V0V2hlZWxFdmVudEVsZW1lbnQod2hlZWxF
dmVudFRhcmdldC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgbGF0Y2hpbmdTdGF0ZS5zZXRGcmFt
ZSgmbV9mcmFtZSk7Ci0gICAgICAgICAgICAgICAgbGF0Y2hpbmdTdGF0ZS5zZXRTY3JvbGxhYmxl
Q29udGFpbmVyKHNjcm9sbGFibGVDb250YWluZXIuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGxh
dGNoaW5nU3RhdGUuc2V0V2lkZ2V0SXNMYXRjaGVkKHJlc3VsdC5pc092ZXJXaWRnZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgcGFnZS0+cHVzaE5ld0xhdGNoaW5nU3RhdGUoV1RGTW92ZShsYXRjaGlu
Z1N0YXRlKSk7Ci0KLSAgICAgICAgICAgICAgICBwYWdlLT53aGVlbEV2ZW50RGVsdGFGaWx0ZXIo
KS0+YmVnaW5GaWx0ZXJpbmdEZWx0YXMoKTsKLSAgICAgICAgICAgICAgICBpc092ZXJXaWRnZXQg
PSByZXN1bHQuaXNPdmVyV2lkZ2V0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIExP
R19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRsZXI6OmRl
dGVybWluZVdoZWVsRXZlbnRUYXJnZXQoKSAtIGNvbnNpZGVyaW5nIGxhdGNoaW5nIGZvciAiIDw8
IHdoZWVsRXZlbnQgPDwgIiwgYXQgc2Nyb2xsIGxpbWl0ICIgPDwgc3RhcnRpbmdBdFNjcm9sbExp
bWl0IDw8ICIsIGxhdGNoaW5nIHN0YXRlICIgPDwgcGFnZS0+bGF0Y2hpbmdTdGF0ZVN0YWNrKCkp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh3aGVlbEV2ZW50LnNob3VsZFJlc2V0TGF0Y2hp
bmcoKSkgewotICAgICAgICBjbGVhckxhdGNoZWRTdGF0ZSgpOwotICAgICAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAiRXZlbnRIYW5kbGVyOjpkZXRlcm1pbmVX
aGVlbEV2ZW50VGFyZ2V0KCkgLSByZXNldCBsYXRjaGluZyBmb3IgZXZlbnQgIiA8PCB3aGVlbEV2
ZW50IDw8ICIgbGF0Y2hpbmcgc3RhdGUgIiA8PCBwYWdlLT5sYXRjaGluZ1N0YXRlU3RhY2soKSk7
Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoaXMgY2FuIHVzZSBhIHN0YWxlIGxhY2hpbmcgc3Rh
dGUsIGJlZm9yZSB3ZSBqdXN0IHB1c2hlZCBvciBjbGVhcmVkLgotICAgIGlmICghd2hlZWxFdmVu
dC5zaG91bGRSZXNldExhdGNoaW5nKCkgJiYgbGF0Y2hpbmdTdGF0ZSAmJiBsYXRjaGluZ1N0YXRl
LT53aGVlbEV2ZW50RWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChsYXRjaGluZ0lzTG9ja2VkVG9Q
bGF0Zm9ybUZyYW1lKG1fZnJhbWUpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICh3aGVl
bEV2ZW50LnNob3VsZFJlc2V0TGF0Y2hpbmcoKSB8fCB3aGVlbEV2ZW50LmlzTm9uR2VzdHVyZUV2
ZW50KCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAobGF0Y2hpbmdJc0xvY2tlZFRv
QW5jZXN0b3JPZlRoaXNGcmFtZShtX2ZyYW1lKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBt
X2ZyYW1lLnBhZ2UoKS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkudXBkYXRlTGF0Y2hpbmdT
dGF0ZUZvckZyYW1lKG1fZnJhbWUsIHdoZWVsRXZlbnQsIHdoZWVsRXZlbnRUYXJnZXQuZ2V0KCks
IHNjcm9sbGFibGVBcmVhLmdldCgpLCByZXN1bHQuaXNPdmVyV2lkZ2V0KCkpOwogCi0gICAgICAg
IHdoZWVsRXZlbnRUYXJnZXQgPSBsYXRjaGluZ1N0YXRlLT53aGVlbEV2ZW50RWxlbWVudCgpOwot
ICAgICAgICBpc092ZXJXaWRnZXQgPSBsYXRjaGluZ1N0YXRlLT53aWRnZXRJc0xhdGNoZWQoKTsK
LSAgICAgICAgc2Nyb2xsYWJsZUNvbnRhaW5lciA9IGxhdGNoaW5nU3RhdGUtPnNjcm9sbGFibGVD
b250YWluZXIoKTsKKy8vICAgcGFnZS0+d2hlZWxFdmVudERlbHRhRmlsdGVyKCktPmJlZ2luRmls
dGVyaW5nRGVsdGFzKCk7IC8vIFdoeSBoZXJlPworICAgICAgICAKKy8vICAgIGlmIChsYXRjaGlu
Z0lzTG9ja2VkVG9QbGF0Zm9ybUZyYW1lKG1fZnJhbWUpKQorLy8gICAgICAgIHJldHVybjsKIAot
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUNvbnRhaW5lcikgewotICAgICAgICAgICAgaWYgKCFsYXRj
aGVkVG9GcmFtZU9yQm9keSgqc2Nyb2xsYWJsZUNvbnRhaW5lcikgJiYgIWxhdGNoaW5nU3RhdGUt
PndpZGdldElzTGF0Y2hlZCgpKQotICAgICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gc2Ny
b2xsYWJsZUFyZWFGb3JDb250YWluZXJOb2RlKCpzY3JvbGxhYmxlQ29udGFpbmVyKTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBtX2ZyYW1lLnBhZ2UoKS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVy
KCkuZ2V0TGF0Y2hpbmdTdGF0ZUZvckZyYW1lKG1fZnJhbWUsIHdoZWVsRXZlbnRUYXJnZXQsIHNj
cm9sbGFibGVBcmVhLCBpc092ZXJXaWRnZXQpOwogfQogCiB2b2lkIEV2ZW50SGFuZGxlcjo6cmVj
b3JkV2hlZWxFdmVudEZvckRlbHRhRmlsdGVyKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCkKQEAgLTEwNDcsNTQgKzkwNiw0NSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6cmVjb3Jk
V2hlZWxFdmVudEZvckRlbHRhRmlsdGVyKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZQog
ICAgIHBhZ2UtPndoZWVsRXZlbnREZWx0YUZpbHRlcigpLT51cGRhdGVGcm9tRGVsdGEoRmxvYXRT
aXplKHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZKCkpKTsKIH0KIAotc3Rh
dGljIEZyYW1lVmlldyogZnJhbWVWaWV3Rm9yTGF0Y2hpbmdTdGF0ZShGcmFtZSYgZnJhbWUsIGNv
bnN0IFNjcm9sbExhdGNoaW5nU3RhdGUmIGxhdGNoaW5nU3RhdGUpCitib29sIEV2ZW50SGFuZGxl
cjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiB3aGVlbEV2ZW50LCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYgc2Nyb2xsYWJsZUFy
ZWEpCiB7Ci0gICAgaWYgKGxhdGNoaW5nSXNMb2NrZWRUb1BsYXRmb3JtRnJhbWUoZnJhbWUpKQot
ICAgICAgICByZXR1cm4gZnJhbWUudmlldygpOwotCi0gICAgcmV0dXJuIGxhdGNoaW5nU3RhdGUu
ZnJhbWUoKSA/IGxhdGNoaW5nU3RhdGUuZnJhbWUoKS0+dmlldygpIDogZnJhbWUudmlldygpOwot
fQotCi1ib29sIEV2ZW50SGFuZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBDb250YWluZXJOb2RlKiBzY3JvbGxh
YmxlQ29udGFpbmVyLCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYgc2Nyb2xsYWJsZUFy
ZWEpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwgIkV2
ZW50SGFuZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcgIiA8PCB3aGVlbEV2ZW50
IDw8ICIgLSBzY3JvbGxhYmxlQ29udGFpbmVyICIgPDwgc2Nyb2xsYWJsZUNvbnRhaW5lciA8PCAi
IHNjcm9sbGFibGVBcmVhICIgPDwgc2Nyb2xsYWJsZUFyZWEuZ2V0KCkgPDwgIiB1c2UgbGF0Y2hl
ZCBlbGVtZW50ICIgPDwgd2hlZWxFdmVudC51c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkpOworICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRsZXI6
OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nICIgPDwgd2hlZWxFdmVudCA8PCAiIC0gc2Ny
b2xsYWJsZUFyZWEgIiA8PCBWYWx1ZU9yTnVsbChzY3JvbGxhYmxlQXJlYS5nZXQoKSkgPDwgIiB1
c2UgbGF0Y2hlZCBlbGVtZW50ICIgPDwgd2hlZWxFdmVudC51c2VMYXRjaGVkRXZlbnRFbGVtZW50
KCkpOwogCiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZShtX2ZyYW1lKTsKIAorICAgIGlm
ICghbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEZyYW1lVmll
dyogdmlldyA9IG1fZnJhbWUudmlldygpOwogICAgIC8vIFdlIGRvIGFub3RoZXIgY2hlY2sgb24g
dGhlIGZyYW1lIHZpZXcgYmVjYXVzZSB0aGUgZXZlbnQgaGFuZGxlciBjYW4gcnVuIEpTIHdoaWNo
IHJlc3VsdHMgaW4gdGhlIGZyYW1lIGdldHRpbmcgZGVzdHJveWVkLgogICAgIGlmICghdmlldykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgYXV0byogbGF0Y2hpbmdTdGF0ZSA9
IG1fZnJhbWUucGFnZSgpID8gbV9mcmFtZS5wYWdlKCktPmxhdGNoaW5nU3RhdGUoKSA6IG51bGxw
dHI7CisgICAgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gbGF0Y2hlZFNjcm9sbGFibGVBcmVhOwor
ICAgIGlmICghbV9mcmFtZS5wYWdlKCktPnNjcm9sbExhdGNoaW5nQ29udHJvbGxlcigpLmxhdGNo
aW5nQWxsb3dzU2Nyb2xsaW5nSW5GcmFtZShtX2ZyYW1lLCBsYXRjaGVkU2Nyb2xsYWJsZUFyZWEp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBoYW5kbGUgbm9uLXZpZXcgc2Ny
b2xsYWJsZUFyZWFzIGVsc2V3aGVyZS4KKyAgICBpZiAod2hlZWxFdmVudC51c2VMYXRjaGVkRXZl
bnRFbGVtZW50KCkgJiYgbGF0Y2hlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgIEFTU0VSVChs
YXRjaGVkU2Nyb2xsYWJsZUFyZWEgPT0gc2Nyb2xsYWJsZUFyZWEuZ2V0KCkpOwogCi0gICAgaWYg
KHdoZWVsRXZlbnQudXNlTGF0Y2hlZEV2ZW50RWxlbWVudCgpICYmICFsYXRjaGluZ0lzTG9ja2Vk
VG9BbmNlc3Rvck9mVGhpc0ZyYW1lKG1fZnJhbWUpICYmIGxhdGNoaW5nU3RhdGUgJiYgbGF0Y2hp
bmdTdGF0ZS0+c2Nyb2xsYWJsZUNvbnRhaW5lcigpKSB7CiAgICAgICAgIG1faXNIYW5kbGluZ1do
ZWVsRXZlbnQgPSBmYWxzZTsKIAotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsTGF0Y2hp
bmcsIHN0cmVhbSA8PCAiICBsYXRjaGluZyBzdGF0ZSAiIDw8ICpsYXRjaGluZ1N0YXRlKTsKKyAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwgIiAgbGF0Y2hp
bmcgc3RhdGUgIiA8PCBtX2ZyYW1lLnBhZ2UoKS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkp
OwogCi0gICAgICAgIC8vIFdlYktpdDIgY29kZSBwYXRoCi0gICAgICAgIGlmICghZnJhbWVIYXNQ
bGF0Zm9ybVdpZGdldChtX2ZyYW1lKSAmJiBzY3JvbGxhYmxlQ29udGFpbmVyID09IGxhdGNoaW5n
U3RhdGUtPnNjcm9sbGFibGVDb250YWluZXIoKSAmJiBzY3JvbGxhYmxlQXJlYSAmJiB2aWV3ICE9
IHNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBkaWQgbm90IHN0YXJ0IGF0
IHRoZSBzY3JvbGwgbGltaXQsIGRvIG5vdCBwYXNzIHRoZSBldmVudCBvbiB0byBiZSBoYW5kbGVk
IGJ5IGVuY2xvc2luZyBzY3JvbGxhYmxlIHJlZ2lvbnMuCi0gICAgICAgICAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIkV2ZW50SGFuZGxlciAiIDw8IHRoaXMgPDwgIiBw
cm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZyAtIGxhdGNoZWQgdG8gIiA8PCBzY3JvbGxhYmxl
QXJlYS5nZXQoKSA8PCAiIGFuZCBub3QgcHJvcGFnYXRpbmciKTsKKyAgICAgICAgaWYgKCFmcmFt
ZUhhc1BsYXRmb3JtV2lkZ2V0KG1fZnJhbWUpICYmIGxhdGNoZWRTY3JvbGxhYmxlQXJlYSAhPSB2
aWV3KSB7CisgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwg
IiAgbGF0Y2hlZCB0byBub24tdmlldyBzY3JvbGxlciAiIDw8IGxhdGNoZWRTY3JvbGxhYmxlQXJl
YSA8PCAiIGFuZCBub3QgcHJvcGFnYXRpbmciKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2V0ICd2aWV3JyB0byBhIEZyYW1l
VmlldyB0aGF0IGlzIG5vdCB0aGlzIEV2ZW50SGFuZGxlcidzIEZyYW1lVmlldywgd2hpY2ggdGhl
biBnZXRzIHNjcm9sbGVkIGZyb20gaGVyZSwgd2hpY2ggaXMgd3JvbmcuCi0gICAgICAgIHZpZXcg
PSBmcmFtZVZpZXdGb3JMYXRjaGluZ1N0YXRlKG1fZnJhbWUsICpsYXRjaGluZ1N0YXRlKTsKLSAg
ICAgICAgQVNTRVJUKHZpZXcpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsTGF0Y2hp
bmcsIHN0cmVhbSA8PCAiIHNlbmRpbmcgdG8gdmlldyAiIDw8ICp2aWV3KTsKIAogICAgICAgICBi
b29sIGRpZEhhbmRsZVdoZWVsRXZlbnQgPSB2aWV3LT53aGVlbEV2ZW50KHdoZWVsRXZlbnQpOwot
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUNvbnRhaW5lciA9PSBsYXRjaGluZ1N0YXRlLT5zY3JvbGxh
YmxlQ29udGFpbmVyKCkpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGFyZSBqdXN0IHN0YXJ0aW5n
IGEgc2Nyb2xsIGV2ZW50LCBhbmQgaGF2ZSBub3doZXJlIGxlZnQgdG8gc2Nyb2xsLCBhbGxvdwot
ICAgICAgICAgICAgLy8gdGhlIGVuY2xvc2luZyBmcmFtZSB0byBoYW5kbGUgdGhlIHNjcm9sbC4K
LSAgICAgICAgICAgIGRpZEhhbmRsZVdoZWVsRXZlbnQgPSB0cnVlOwotICAgICAgICB9Ci0KICAg
ICAgICAgLy8gSWYgdGhlIHBsYXRmb3JtIHdpZGdldCBpcyBoYW5kbGluZyB0aGUgZXZlbnQsIHdl
IGFsd2F5cyB3YW50IHRvIHJldHVybiBmYWxzZS4KLSAgICAgICAgaWYgKHNjcm9sbGFibGVBcmVh
ID09IHZpZXcgJiYgdmlldy0+cGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgaWYgKHZpZXctPnBs
YXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgICAgICBkaWRIYW5kbGVXaGVlbEV2ZW50ID0gZmFsc2U7
Ci0gICAgICAgIAorCisgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3Ry
ZWFtIDw8ICIgIEV2ZW50SGFuZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcgcmV0
dXJuaW5nICIgPDwgZGlkSGFuZGxlV2hlZWxFdmVudCk7CiAgICAgICAgIHJldHVybiBkaWRIYW5k
bGVXaGVlbEV2ZW50OwogICAgIH0KICAgICAKQEAgLTExMDMsMjAgKzk1MywyMCBAQCBib29sIEV2
ZW50SGFuZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbAogICAgIHJldHVybiBkaWRIYW5kbGVFdmVudDsKIH0KIAotYm9vbCBF
dmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVQbGF0Zm9ybVdpZGdldFdoZWVsRXZlbnQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBjb25zdCBXaWRnZXQmIHdpZGdldCwg
Q29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lcikKK2Jvb2wgRXZlbnRIYW5kbGVyOjpw
bGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1XaWRnZXRXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYgd2hlZWxFdmVudCwgY29uc3QgV2lkZ2V0JiB3aWRnZXQsIGNvbnN0IFdlYWtQdHI8
U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICAvLyBXZWJLaXQxOiBQcmV2
ZW50IG11bHRpcGxlIGNvcGllcyBvZiB0aGUgc2Nyb2xsV2hlZWwgZXZlbnQgZnJvbSBiZWluZyBz
ZW50IHRvIHRoZSBOU1Njcm9sbFZpZXcgd2lkZ2V0LgogICAgIGlmIChmcmFtZUhhc1BsYXRmb3Jt
V2lkZ2V0KG1fZnJhbWUpICYmIHdpZGdldC5pc0ZyYW1lVmlldygpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIGNvbnN0IGF1dG8qIGxhdGNoaW5nU3RhdGUgPSBtX2ZyYW1lLnBhZ2UoKSA/
IG1fZnJhbWUucGFnZSgpLT5sYXRjaGluZ1N0YXRlKCkgOiBudWxscHRyOwotICAgIGlmICghbGF0
Y2hpbmdTdGF0ZSkKKyAgICBpZiAoIW1fZnJhbWUucGFnZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAod2hlZWxFdmVudC51c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgJiYgbGF0
Y2hpbmdTdGF0ZS0+c2Nyb2xsYWJsZUNvbnRhaW5lcigpICYmIHNjcm9sbGFibGVDb250YWluZXIg
PT0gbGF0Y2hpbmdTdGF0ZS0+c2Nyb2xsYWJsZUNvbnRhaW5lcigpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiBsYXRjaGVkU2Nyb2xsYWJsZUFyZWE7
CisgICAgaWYgKCFtX2ZyYW1lLnBhZ2UoKS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkubGF0
Y2hpbmdBbGxvd3NTY3JvbGxpbmdJbkZyYW1lKG1fZnJhbWUsIGxhdGNoZWRTY3JvbGxhYmxlQXJl
YSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gd2hlZWxFdmVudC51c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgJiYgbGF0Y2hlZFNjcm9sbGFi
bGVBcmVhICYmIHNjcm9sbGFibGVBcmVhID09IGxhdGNoZWRTY3JvbGxhYmxlQXJlYTsKIH0KIAog
dm9pZCBFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIGNvbnN0IFdlYWtQdHI8U2Nyb2xsYWJsZUFy
ZWE+JiBzY3JvbGxhYmxlQXJlYSkKQEAgLTExMjksNyArOTc5LDcgQEAgdm9pZCBFdmVudEhhbmRs
ZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmIHdoZWUKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
LSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gc2Nyb2xsYWJsZUFyZWEt
PmV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3Ig
PSBzY3JvbGxhYmxlQXJlYS0+ZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQogICAgICAgICBzY3Jv
bGxBbmltYXRvci0+cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKHdoZWVsRXZlbnQpOwog
I2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OTJkZjJkZGJiMDk5ODFl
ZWMyNTZiNDI0ZGI3MTI1OWNhMmM1YmFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcApAQCAtMCwwICsx
LDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXIuaCIKKworI2lmIEVOQUJMRShXSEVFTF9FVkVOVF9MQVRDSElO
RykKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQu
aCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBTZWUgYWxzbyBTY3JvbGxUcmVl
TGF0Y2hpbmdDb250cm9sbGVyLmNwcAorc3RhdGljIGNvbnN0IFNlY29uZHMgcmVzZXRMYXRjaGVk
U3RhdGVUaW1lb3V0IHsgMTAwX21zIH07CisKK1Njcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6U2Ny
b2xsTGF0Y2hpbmdDb250cm9sbGVyKCkKKyAgICA6IG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIo
KnRoaXMsICZTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OmNsZWFyVGltZXJGaXJlZCkKK3sKK30K
KworU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjp+U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkg
PSBkZWZhdWx0OworCit2b2lkIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Y2xlYXIoKQorewor
ICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJTY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXI6OmNsZWFyKCkiKTsKKyAgICBtX2N1bXVsYXRpdmVFdmVudERlbHRhID0g
eyB9OworICAgIG1fZnJhbWVTdGF0ZVN0YWNrLmNsZWFyKCk7Cit9CisKKy8vIEZJWE1FOiBUaGlz
IGxvZ2ljIGlzIGRpZmZlcmVudCBmcm1vIFNjcm9sbGluZ1RyZWVMYXRjaGluZ0NvbnRyb2xsZXIs
IHdoaWNoIHNpbXBseSBsZXRzIHRoZSBsYXRjaGluZyBzdGF0ZSBlbGFwc2UgYWZ0ZXIgMTAwbXMu
Cit2b2lkIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJJZk5l
ZWRlZChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYgKHdo
ZWVsRXZlbnQuc2hvdWxkUmVzZXRMYXRjaGluZygpIHx8IHdoZWVsRXZlbnQuaXNOb25HZXN0dXJl
RXZlbnQoKSkgeworICAgICAgICBjbGVhcigpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Ny
b2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpjbGVhck9y
U2NoZWR1bGVDbGVhcmluZ0xhdGNoZWRTdGF0ZUlmTmVlZGVkKCkgLSBldmVudCIgPDwgd2hlZWxF
dmVudCA8PCAiLCByZXNldHRpbmcgbGF0Y2hpbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChtX2NsZWFyTGF0Y2hpbmdTdGF0ZVRpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAg
ICAgLy8gSWYgYW5vdGhlciB3aGVlbCBldmVudCBzY3JvbGxpbmcgc3RhcnRzLCBzdG9wIHRoZSB0
aW1lciBtYW51YWxseSwgYW5kIHJlc2V0IHRoZSBsYXRjaGVkIHN0YXRlIGltbWVkaWF0ZWx5Lgor
ICAgICAgICBpZiAod2hlZWxFdmVudC5pc0dlc3R1cmVTdGFydCgpKSB7CisgICAgICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oU2Nyb2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsTGF0Y2hpbmdD
b250cm9sbGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcmluZ0xhdGNoZWRTdGF0ZUlmTmVlZGVkKCkg
LSBldmVudCIgPDwgd2hlZWxFdmVudCA8PCAiLCB0aW1lciBwZW5kaW5nLCBhbm90aGVyIHNjcm9s
bCBzdGFydGluZyIpOworICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIG1fY2xlYXJM
YXRjaGluZ1N0YXRlVGltZXIuc3RvcCgpOworICAgICAgICB9IGVsc2UgaWYgKHdoZWVsRXZlbnQu
aXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpKSB7CisgICAgICAgICAgICAvLyBXaGVl
bCBldmVudHMgbWFjaGluZXJ5IGlzIHRyYW5zaXRpb25pbmcgdG8gbW9tZW50dW0gc2Nyb2xsaW5n
LCBzbyBubyBuZWVkIHRvIHJlc2V0IGxhdGNoZWQgc3RhdGUuIFN0b3AgdGhlIHRpbWVyLgorICAg
ICAgICAgICAgbV9jbGVhckxhdGNoaW5nU3RhdGVUaW1lci5zdG9wKCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh3aGVlbEV2ZW50LmlzRW5kT2ZOb25Nb21l
bnR1bVNjcm9sbCgpKSB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywg
c3RyZWFtIDw8ICJTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OmNsZWFyT3JTY2hlZHVsZUNsZWFy
aW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQoKSAtIGV2ZW50IiA8PCB3aGVlbEV2ZW50IDw8ICIsIHNj
aGVkdWxpbmcgY2xlYXIgdGltZXIiKTsKKyAgICAgICAgbV9jbGVhckxhdGNoaW5nU3RhdGVUaW1l
ci5zdGFydE9uZVNob3QocmVzZXRMYXRjaGVkU3RhdGVUaW1lb3V0KTsKKyAgICB9Cit9CisKK3Zv
aWQgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpjbGVhclRpbWVyRmlyZWQoKQoreworICAgIExP
R19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJTY3JvbGxMYXRjaGluZ0Nv
bnRyb2xsZXI6OmNsZWFyVGltZXJGaXJlZCgpIC0gY2xlYXJpbmcgc3RhdGUiKTsKKyAgICBjbGVh
cigpOworfQorCit2b2lkIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6cmVjZWl2ZWRXaGVlbEV2
ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICBjbGVhck9y
U2NoZWR1bGVDbGVhcklmTmVlZGVkKHdoZWVsRXZlbnQpOworCisgICAgaWYgKHdoZWVsRXZlbnQu
aXNHZXN0dXJlU3RhcnQoKSB8fCB3aGVlbEV2ZW50LmlzTm9uR2VzdHVyZUV2ZW50KCkpCisgICAg
ICAgIG1fY3VtdWxhdGl2ZUV2ZW50RGVsdGEgPSB3aGVlbEV2ZW50LmRlbHRhKCk7CisgICAgZWxz
ZQorICAgICAgICBtX2N1bXVsYXRpdmVFdmVudERlbHRhICs9IHdoZWVsRXZlbnQuZGVsdGEoKTsK
K30KKworYm9vbCBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OmxhdGNoaW5nQWxsb3dzU2Nyb2xs
aW5nSW5GcmFtZShjb25zdCBGcmFtZSYgZnJhbWUsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBs
YXRjaGVkU2Nyb2xsZXIpIGNvbnN0Cit7CisgICAgaWYgKG1fZnJhbWVTdGF0ZVN0YWNrLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoYXV0byogZnJhbWVTdGF0ZSA9
IHN0YXRlRm9yRnJhbWUoZnJhbWUpKSB7CisgICAgICAgIGxhdGNoZWRTY3JvbGxlciA9IGZyYW1l
U3RhdGUtPnNjcm9sbGFibGVBcmVhOworICAgICAgICByZXR1cm4gISFmcmFtZVN0YXRlLT5zY3Jv
bGxhYmxlQXJlYTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNjcm9sbExh
dGNoaW5nQ29udHJvbGxlcjo6dXBkYXRlTGF0Y2hpbmdTdGF0ZUZvckZyYW1lKEZyYW1lJiBmcmFt
ZSwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBFbGVtZW50KiBsYXRjaGVk
RWxlbWVudCwgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbExhdGNoaW5nQ2FuZGlkYXRlLCBib29sIGlz
T3ZlcldpZGdldCkKK3sKKyAgICBpZiAod2hlZWxFdmVudC5pc0dlc3R1cmVTdGFydCgpKSB7Cisg
ICAgICAgIC8vIFdlIGNhbiBoYXZlIGV4aXN0aW5nIHN0YXRlIGhlcmUgYmVjYXVzZSBzdGF0ZSBp
cyBjbGVhcmVkIG9uIGEgdGltZXIuCisgICAgICAgIGlmICghaGFzU3RhdGVGb3JGcmFtZShmcmFt
ZSkpIHsKKyAgICAgICAgICAgIEZyYW1lU3RhdGUgc3RhdGU7CisgICAgICAgICAgICBzdGF0ZS5m
cmFtZSA9ICZmcmFtZTsKKyAgICAgICAgICAgIHN0YXRlLndoZWVsRXZlbnRFbGVtZW50ID0gbWFr
ZVdlYWtQdHIobGF0Y2hlZEVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHNob3VsZExhdGNoVG9T
Y3JvbGxhYmxlQXJlYShmcmFtZSwgc2Nyb2xsTGF0Y2hpbmdDYW5kaWRhdGUsIG1fY3VtdWxhdGl2
ZUV2ZW50RGVsdGEpKQorICAgICAgICAgICAgICAgIHN0YXRlLnNjcm9sbGFibGVBcmVhID0gbWFr
ZVdlYWtQdHIoc2Nyb2xsTGF0Y2hpbmdDYW5kaWRhdGUpOworICAgICAgICAgICAgc3RhdGUuaXNP
dmVyV2lkZ2V0ID0gaXNPdmVyV2lkZ2V0OworCisgICAgICAgICAgICBtX2ZyYW1lU3RhdGVTdGFj
ay5hcHBlbmQoV1RGTW92ZShzdGF0ZSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAod2hlZWxFdmVudC5pc0dlc3R1cmVDb250aW51YXRpb24oKSkgeworICAg
ICAgICBhdXRvKiBzdGF0ZSA9IHN0YXRlRm9yRnJhbWUoZnJhbWUpOworICAgICAgICBpZiAoIXN0
YXRlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFdlIG1heSBub3QgaGF2ZSBs
YXRjaGVkIGF0IGdlc3R1cmUgc3RhcnQgYmVjYXVzZSBvZiBzbWFsbCBkZWx0YXMuIFJlLWV2YWx1
YXRlIGxhdGNoaW5nIGJhc2VkIG9uIGFjY3VtdWxhdGVkIGRlbHRhLgorICAgICAgICBpZiAoIXN0
YXRlLT5zY3JvbGxhYmxlQXJlYSAmJiBzaG91bGRMYXRjaFRvU2Nyb2xsYWJsZUFyZWEoZnJhbWUs
IHNjcm9sbExhdGNoaW5nQ2FuZGlkYXRlLCBtX2N1bXVsYXRpdmVFdmVudERlbHRhKSkKKyAgICAg
ICAgICAgIHN0YXRlLT5zY3JvbGxhYmxlQXJlYSA9IG1ha2VXZWFrUHRyKHNjcm9sbExhdGNoaW5n
Q2FuZGlkYXRlKTsKKyAgICB9Cit9CisKK2Jvb2wgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpn
ZXRMYXRjaGluZ1N0YXRlRm9yRnJhbWUoY29uc3QgRnJhbWUmIGZyYW1lLCBSZWZQdHI8RWxlbWVu
dD4mIGxhdGNoZWRFbGVtZW50LCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYgbGF0Y2hlZFNjcm9s
bGVyLCBib29sJiBpc092ZXJXaWRnZXQpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBhdXRvJiBz
dGF0ZSA6IG1fZnJhbWVTdGF0ZVN0YWNrKSB7CisgICAgICAgIGlmIChzdGF0ZS5mcmFtZSA9PSAm
ZnJhbWUpIHsKKyAgICAgICAgICAgIGxhdGNoZWRFbGVtZW50ID0gc3RhdGUud2hlZWxFdmVudEVs
ZW1lbnQuZ2V0KCk7CisgICAgICAgICAgICBsYXRjaGVkU2Nyb2xsZXIgPSBzdGF0ZS5zY3JvbGxh
YmxlQXJlYTsKKyAgICAgICAgICAgIGlzT3ZlcldpZGdldCA9IHN0YXRlLmlzT3ZlcldpZGdldDsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OnJlbW92ZUxhdGNoaW5n
U3RhdGVGb3JUYXJnZXQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBpZiAobV9mcmFt
ZVN0YXRlU3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGZpbmRS
ZXN1bHQgPSBtX2ZyYW1lU3RhdGVTdGFjay5maW5kTWF0Y2hpbmcoWyZlbGVtZW50XSAoY29uc3Qg
YXV0byYgc3RhdGUpIHsKKyAgICAgICAgYXV0byogd2hlZWxFbGVtZW50ID0gc3RhdGUud2hlZWxF
dmVudEVsZW1lbnQuZ2V0KCk7CisgICAgICAgIHJldHVybiB3aGVlbEVsZW1lbnQgJiYgZWxlbWVu
dC5pc0VxdWFsTm9kZSh3aGVlbEVsZW1lbnQpOworICAgIH0pOworICAgIAorICAgIC8vIElmIHRo
aXMgZWxlbWVudCBpcyBmb3VuZCBpbiB0aGUgbGF0Y2hpbmcgc3RhY2ssIGp1c3QgY2xlYXIgdGhl
IHdob2xlIHN0YWNrLiBXZSBjYW4ndCBqdXN0IHJlbW92ZSBvbmUgZW50cnksCisgICAgLy8gc2lu
Y2UgdGhlIHN0YWNrIGhhcyB0byBtYXRjaCB0aGUgZnJhbWUgaGllcmFyY2h5LgorICAgIGlmIChm
aW5kUmVzdWx0ICE9IG5vdEZvdW5kKQorICAgICAgICBtX2ZyYW1lU3RhdGVTdGFjay5jbGVhcigp
OworfQorCit2b2lkIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6cmVtb3ZlTGF0Y2hpbmdTdGF0
ZUZvckZyYW1lKGNvbnN0IEZyYW1lJiBmcmFtZSkKK3sKKyAgICBpZiAobV9mcmFtZVN0YXRlU3Rh
Y2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgZnJhbWUgd2Fz
IGluIHRoZSBsYXRjaGluZyBzdGFjaywganVzdCBjbGVhciBzdGF0ZS4KKyAgICBpZiAoYXV0byog
ZnJhbWVTdGF0ZSA9IHN0YXRlRm9yRnJhbWUoZnJhbWUpKQorICAgICAgICBjbGVhcigpOworfQor
CitzdGF0aWMgYm9vbCBkZWx0YUlzUHJlZG9taW5hbnRseVZlcnRpY2FsKEZsb2F0U2l6ZSBkZWx0
YSkKK3sKKyAgICByZXR1cm4gc3RkOjphYnMoZGVsdGEuaGVpZ2h0KCkpID4gc3RkOjphYnMoZGVs
dGEud2lkdGgoKSk7Cit9CisKK2Jvb2wgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpzaG91bGRM
YXRjaFRvU2Nyb2xsYWJsZUFyZWEoY29uc3QgRnJhbWUmIGZyYW1lLCBTY3JvbGxhYmxlQXJlYSog
c2Nyb2xsYWJsZUFyZWEsIEZsb2F0U2l6ZSBzY3JvbGxEZWx0YSkgY29uc3QKK3sKKyAgICBpZiAo
IXNjcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBhbHdh
eXMgYWxsb3cgdGhlIG1haW4gZnJhbWUgcmVjZWl2ZSB3aGVlbCBldmVudHMgdG8gcGVybWl0IHJ1
YmJlci1iYW5kaW5nLgorICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSgpICYmIHNjcm9sbGFibGVB
cmVhID09IGZyYW1lLnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIXNj
cm9sbGFibGVBcmVhLT5jYW5IYXZlU2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoc2Nyb2xsRGVsdGEuaXNaZXJvKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghZGVsdGFJc1ByZWRvbWluYW50bHlWZXJ0aWNhbChzY3JvbGxEZWx0YSkgJiYg
c2Nyb2xsRGVsdGEud2lkdGgoKSkgeworICAgICAgICBpZiAoIXNjcm9sbGFibGVBcmVhLT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
aWYgKHNjcm9sbERlbHRhLndpZHRoKCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuICFzY3JvbGxh
YmxlQXJlYS0+c2Nyb2xsZWRUb1JpZ2h0KCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gIXNj
cm9sbGFibGVBcmVhLT5zY3JvbGxlZFRvTGVmdCgpOworICAgIH0KKworICAgIGlmICghc2Nyb2xs
YWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChzY3JvbGxEZWx0YS5oZWlnaHQoKSA8IDApCisgICAgICAgIHJldHVybiAhc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbGVkVG9Cb3R0b20oKTsKKworICAgIHJldHVybiAhc2Nyb2xsYWJsZUFy
ZWEtPnNjcm9sbGVkVG9Ub3AoKTsKK30KKworYm9vbCBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6
Omhhc1N0YXRlRm9yRnJhbWUoY29uc3QgRnJhbWUmIGZyYW1lKSBjb25zdAoreworICAgIGZvciAo
Y29uc3QgYXV0byYgc3RhdGUgOiBtX2ZyYW1lU3RhdGVTdGFjaykgeworICAgICAgICBpZiAoc3Rh
dGUuZnJhbWUgPT0gJmZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpGcmFtZVN0YXRl
KiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OnN0YXRlRm9yRnJhbWUoY29uc3QgRnJhbWUmIGZy
YW1lKQoreworICAgIGZvciAoYXV0byYgc3RhdGUgOiBtX2ZyYW1lU3RhdGVTdGFjaykgeworICAg
ICAgICBpZiAoc3RhdGUuZnJhbWUgPT0gJmZyYW1lKQorICAgICAgICAgICAgcmV0dXJuICZzdGF0
ZTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2NvbnN0IFNjcm9sbExhdGNoaW5n
Q29udHJvbGxlcjo6RnJhbWVTdGF0ZSogU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpzdGF0ZUZv
ckZyYW1lKGNvbnN0IEZyYW1lJiBmcmFtZSkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHN0YXRlIDogbV9mcmFtZVN0YXRlU3RhY2spIHsKKyAgICAgICAgaWYgKHN0YXRlLmZyYW1lID09
ICZmcmFtZSkKKyAgICAgICAgICAgIHJldHVybiAmc3RhdGU7CisgICAgfQorICAgIHJldHVybiBu
dWxscHRyOworfQorCit2b2lkIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6ZHVtcChXVEY6OlRl
eHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIFRleHRTdHJlYW0gbXVsdGlsaW5lU3RyZWFtOwor
ICAgIG11bHRpbGluZVN0cmVhbS5zZXRJbmRlbnQodHMuaW5kZW50KCkgKyAyKTsKKworICAgIGZv
ciAoY29uc3QgYXV0byYgc3RhdGUgOiBtX2ZyYW1lU3RhdGVTdGFjaykgeworICAgICAgICBUZXh0
U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwU2NvcGUobXVsdGlsaW5lU3RyZWFtKTsKKyAgICAgICAg
bXVsdGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgiZnJhbWUiLCBWYWx1ZU9yTnVsbChzdGF0ZS5m
cmFtZSkpOworICAgICAgICBtdWx0aWxpbmVTdHJlYW0uZHVtcFByb3BlcnR5KCJlbGVtZW50Iiwg
VmFsdWVPck51bGwoc3RhdGUud2hlZWxFdmVudEVsZW1lbnQuZ2V0KCkpKTsKKyAgICAgICAgbXVs
dGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgicHJldmlvdXNFbGVtZW50IiwgVmFsdWVPck51bGwo
c3RhdGUucHJldmlvdXNXaGVlbFNjcm9sbGVkRWxlbWVudC5nZXQoKSkpOworICAgICAgICBtdWx0
aWxpbmVTdHJlYW0uZHVtcFByb3BlcnR5KCJzY3JvbGxhYmxlIGFyZWEiLCBWYWx1ZU9yTnVsbChz
dGF0ZS5zY3JvbGxhYmxlQXJlYS5nZXQoKSkpOworICAgICAgICBtdWx0aWxpbmVTdHJlYW0uZHVt
cFByb3BlcnR5KCJpcyBvdmVyIHdpZGdldCIsIHN0YXRlLmlzT3ZlcldpZGdldCk7CisgICAgfQor
CisgICAgdHMgPDwgIlNjcm9sbExhdGNoaW5nQ29udHJvbGxlciBzdGF0ZSAiIDw8IG11bHRpbGlu
ZVN0cmVhbS5yZWxlYXNlKCk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFNjcm9sbExhdGNoaW5nQ29udHJvbGxlciYgY29udHJvbGxlcikKK3sKKyAg
ICBjb250cm9sbGVyLmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ0Nv
bnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MTRhNTkwNDFmNmY2NDJkZGI5MGRiMjEyNGU0ODBmMjI1
YjA1ODE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlNjcm9s
bFR5cGVzLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworI2lmIEVOQUJMRShXSEVFTF9FVkVOVF9MQVRDSElO
RykKKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBGcmFtZTsKK2NsYXNzIFBsYXRmb3Jt
V2hlZWxFdmVudDsKK2NsYXNzIFNjcm9sbGFibGVBcmVhOworCitjbGFzcyBTY3JvbGxMYXRjaGlu
Z0NvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcigpOworICAgIH5TY3JvbGxMYXRjaGluZ0NvbnRyb2xs
ZXIoKTsKKworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIHZvaWQgcmVjZWl2ZWRXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworICAgIEZsb2F0U2l6ZSBjdW11bGF0aXZlRXZl
bnREZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VtdWxhdGl2ZUV2ZW50RGVsdGE7IH0KKworICAg
IC8vIEZyYW1lIGNvbnRhaW5pbmcgbGF0Y2hlZCBzY3JvbGxlciAobWF5IGJlIHRoZSBmcmFtZSBv
ciBzb21lIHN1Yi1zY3JvbGxlcikuCisgICAgRnJhbWUqIGxhdGNoZWRGcmFtZSgpIGNvbnN0Owor
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIG5vIGZyYW1lIGlzIGxhdGNoZWQsIG9yIHRoZSBnaXZl
biBmcmFtZSBpcyBsYXRjaGVkLgorICAgIGJvb2wgbGF0Y2hpbmdBbGxvd3NTY3JvbGxpbmdJbkZy
YW1lKGNvbnN0IEZyYW1lJiwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mIGxhdGNoZWRTY3JvbGxl
cikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUxhdGNoaW5nU3RhdGVGb3JGcmFtZShGcmFtZSYs
IGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIEVsZW1lbnQqIGxhdGNoZWRFbGVtZW50LCBTY3Jv
bGxhYmxlQXJlYSogc2Nyb2xsTGF0Y2hpbmdDYW5kaWRhdGUsIGJvb2wgaXNPdmVyV2lkZ2V0KTsK
KworICAgIGJvb2wgZ2V0TGF0Y2hpbmdTdGF0ZUZvckZyYW1lKGNvbnN0IEZyYW1lJiwgUmVmUHRy
PEVsZW1lbnQ+JiBsYXRjaGVkRWxlbWVudCwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mIGxhdGNo
ZWRTY3JvbGxlciwgYm9vbCYgaXNPdmVyV2lkZ2V0KSBjb25zdDsKKworICAgIHZvaWQgcmVtb3Zl
TGF0Y2hpbmdTdGF0ZUZvclRhcmdldChjb25zdCBFbGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVM
YXRjaGluZ1N0YXRlRm9yRnJhbWUoY29uc3QgRnJhbWUmKTsKKworICAgIHZvaWQgZHVtcChXVEY6
OlRleHRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgRnJhbWVTdGF0ZSB7
CisgICAgICAgIFdlYWtQdHI8RWxlbWVudD4gd2hlZWxFdmVudEVsZW1lbnQ7CisgICAgICAgIFdl
YWtQdHI8RWxlbWVudD4gcHJldmlvdXNXaGVlbFNjcm9sbGVkRWxlbWVudDsgLy8gUmVtb3ZlPwor
ICAgICAgICBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiBzY3JvbGxhYmxlQXJlYTsKKyAgICAgICAg
RnJhbWUqIGZyYW1lIHsgbnVsbHB0ciB9OyAvLyBJY2t5IHJhdyBwb2ludGVyLiBVc2UgRnJhbWVJ
ZGVudGlmaWVyPworICAgICAgICBib29sIGlzT3ZlcldpZGdldCB7IGZhbHNlIH07CisgICAgfTsK
KworICAgIHZvaWQgY2xlYXJPclNjaGVkdWxlQ2xlYXJJZk5lZWRlZChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmKTsKKyAgICB2b2lkIGNsZWFyVGltZXJGaXJlZCgpOworCisgICAgYm9vbCBoYXNT
dGF0ZUZvckZyYW1lKGNvbnN0IEZyYW1lJikgY29uc3Q7CisgICAgRnJhbWVTdGF0ZSogc3RhdGVG
b3JGcmFtZShjb25zdCBGcmFtZSYpOworICAgIGNvbnN0IEZyYW1lU3RhdGUqIHN0YXRlRm9yRnJh
bWUoY29uc3QgRnJhbWUmKSBjb25zdDsKKworICAgIGJvb2wgc2hvdWxkTGF0Y2hUb1Njcm9sbGFi
bGVBcmVhKGNvbnN0IEZyYW1lJiwgU2Nyb2xsYWJsZUFyZWEqLCBGbG9hdFNpemUpIGNvbnN0Owor
CisgICAgRmxvYXRTaXplIG1fY3VtdWxhdGl2ZUV2ZW50RGVsdGE7CisgICAgVmVjdG9yPEZyYW1l
U3RhdGU+IG1fZnJhbWVTdGF0ZVN0YWNrOworICAgIFRpbWVyIG1fY2xlYXJMYXRjaGluZ1N0YXRl
VGltZXI7Cit9OworCitXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFt
JiwgY29uc3QgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyJik7CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXSEVFTF9FVkVOVF9MQVRDSElORykKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYzYWM0ZTdmYjQ1ODY1YWVlNGJjMTMw
MmJiODlmYzQyNWZlYTMzZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRl
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
U2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIgotCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TY3JvbGxM
YXRjaGluZ1N0YXRlOjpTY3JvbGxMYXRjaGluZ1N0YXRlKCkgPSBkZWZhdWx0OwotICAgIAotU2Ny
b2xsTGF0Y2hpbmdTdGF0ZTo6flNjcm9sbExhdGNoaW5nU3RhdGUoKSA9IGRlZmF1bHQ7Ci0KLXZv
aWQgU2Nyb2xsTGF0Y2hpbmdTdGF0ZTo6Y2xlYXIoKQotewotICAgIG1fd2hlZWxFdmVudEVsZW1l
bnQgPSBudWxscHRyOwotICAgIG1fZnJhbWUgPSBudWxscHRyOwotICAgIG1fc2Nyb2xsYWJsZUNv
bnRhaW5lciA9IG51bGxwdHI7Ci0gICAgbV93aWRnZXRJc0xhdGNoZWQgPSBmYWxzZTsKLX0KLQot
dm9pZCBTY3JvbGxMYXRjaGluZ1N0YXRlOjpzZXRXaGVlbEV2ZW50RWxlbWVudChFbGVtZW50KiBl
bGVtZW50KQotewotICAgIG1fd2hlZWxFdmVudEVsZW1lbnQgPSBtYWtlV2Vha1B0cihlbGVtZW50
KTsKLX0KLQotdm9pZCBTY3JvbGxMYXRjaGluZ1N0YXRlOjpzZXRXaWRnZXRJc0xhdGNoZWQoYm9v
bCBpc092ZXJXaWRnZXQpCi17Ci0gICAgbV93aWRnZXRJc0xhdGNoZWQgPSBpc092ZXJXaWRnZXQ7
Ci19Ci0KLXZvaWQgU2Nyb2xsTGF0Y2hpbmdTdGF0ZTo6c2V0U2Nyb2xsYWJsZUNvbnRhaW5lcihD
b250YWluZXJOb2RlKiBjb250YWluZXIpCi17Ci0gICAgbV9zY3JvbGxhYmxlQ29udGFpbmVyID0g
bWFrZVdlYWtQdHIoY29udGFpbmVyKTsKLX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSYgc3RhdGUpCi17Ci0gICAgVGV4
dFN0cmVhbSBtdWx0aWxpbmVTdHJlYW07Ci0gICAgbXVsdGlsaW5lU3RyZWFtLnNldEluZGVudCh0
cy5pbmRlbnQoKSArIDIpOwotCi0gICAgbXVsdGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgiZWxl
bWVudCIsIHN0YXRlLndoZWVsRXZlbnRFbGVtZW50KCkpOwotICAgIG11bHRpbGluZVN0cmVhbS5k
dW1wUHJvcGVydHkoInNjcm9sbGFibGUgY29udGFpbmVyIiwgc3RhdGUuc2Nyb2xsYWJsZUNvbnRh
aW5lcigpKTsKLSAgICBtdWx0aWxpbmVTdHJlYW0uZHVtcFByb3BlcnR5KCJ3aWRnZXRJc0xhdGNo
ZWQiLCBzdGF0ZS53aWRnZXRJc0xhdGNoZWQoKSk7Ci0KLSAgICB0cyA8PCAiU2Nyb2xsTGF0Y2hp
bmdTdGF0ZSAiIDw8IG11bHRpbGluZVN0cmVhbS5yZWxlYXNlKCk7Ci0KLSAgICByZXR1cm4gdHM7
Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bExhdGNoaW5nU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExh
dGNoaW5nU3RhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIxYjk3ZGEwM2Rh
MjdkNGVkNGFlODE4YTBhNDQyMjAzODE4NTc2YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxM
YXRjaGluZ1N0YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07
Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29udGFpbmVyTm9kZTsKLWNsYXNz
IEVsZW1lbnQ7Ci1jbGFzcyBGcmFtZTsKLQotY2xhc3MgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSBmaW5h
bCB7Ci1wdWJsaWM6Ci0gICAgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSgpOwotICAgIH5TY3JvbGxMYXRj
aGluZ1N0YXRlKCk7Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICBFbGVtZW50KiB3aGVlbEV2
ZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2hlZWxFdmVudEVsZW1lbnQuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldFdoZWVsRXZlbnRFbGVtZW50KEVsZW1lbnQqKTsKLQotICAgIEZyYW1lKiBm
cmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KLSAgICB2b2lkIHNldEZyYW1lKEZyYW1l
KiBmcmFtZSkgeyBtX2ZyYW1lID0gZnJhbWU7IH0KLQotICAgIGJvb2wgd2lkZ2V0SXNMYXRjaGVk
KCkgY29uc3QgeyByZXR1cm4gbV93aWRnZXRJc0xhdGNoZWQ7IH0KLSAgICB2b2lkIHNldFdpZGdl
dElzTGF0Y2hlZChib29sIGlzT3ZlcldpZGdldCk7Ci0KLSAgICBDb250YWluZXJOb2RlKiBzY3Jv
bGxhYmxlQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQ29udGFpbmVyLmdl
dCgpOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxhYmxlQ29udGFpbmVyKENvbnRhaW5lck5vZGUqKTsK
LQotcHJpdmF0ZToKLSAgICBXZWFrUHRyPEVsZW1lbnQ+IG1fd2hlZWxFdmVudEVsZW1lbnQ7Ci0g
ICAgV2Vha1B0cjxDb250YWluZXJOb2RlPiBtX3Njcm9sbGFibGVDb250YWluZXI7Ci0KLSAgICBG
cmFtZSogbV9mcmFtZSB7IG51bGxwdHIgfTsKLQotICAgIGJvb2wgbV93aWRnZXRJc0xhdGNoZWQg
eyBmYWxzZSB9OwotfTsKLQotV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0
cmVhbSYsIGNvbnN0IFNjcm9sbExhdGNoaW5nU3RhdGUmKTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZUxhdGNoaW5nQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyLmNwcAppbmRleCA1MTIxZjEzNWRjOGVj
ZmQzZjYyYmJmY2JjZThmMjM2YWZmOWRhNjUyLi4xN2Y2MDNhYmY3MzlmMmE0MTA3OGVkMmFlZjBm
NTFiMjcyZmE2OTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyLmNwcApAQCAtMzYs
NyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFNlZSBhbHNvIEV2ZW50SGFu
ZGxlck1hYy5jcHAKKy8vIFNlZSBhbHNvIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHAKIHN0
YXRpYyBjb25zdCBTZWNvbmRzIHJlc2V0TGF0Y2hlZFN0YXRlVGltZW91dCB7IDEwMF9tcyB9Owog
CiBTY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyOjpTY3JvbGxpbmdUcmVlTGF0Y2hpbmdD
b250cm9sbGVyKCkgPSBkZWZhdWx0OwpAQCAtNDcsNyArNDcsNyBAQCB2b2lkIFNjcm9sbGluZ1Ry
ZWVMYXRjaGluZ0NvbnRyb2xsZXI6OnJlY2VpdmVkV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbgogICAgICAgICByZXR1cm47CiAKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xhdGNo
ZWROb2RlTXV0ZXgpOwotICAgIGlmICh3aGVlbEV2ZW50LnNob3VsZENvbnNpZGVyTGF0Y2hpbmco
KSAmJiBtX2xhdGNoZWROb2RlSUQgJiYgIWxhdGNoZWROb2RlSXNSZWxldmFudCgpKSB7CisgICAg
aWYgKHdoZWVsRXZlbnQuaXNHZXN0dXJlU3RhcnQoKSAmJiBtX2xhdGNoZWROb2RlSUQgJiYgIWxh
dGNoZWROb2RlSXNSZWxldmFudCgpKSB7CiAgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxM
YXRjaGluZywgc3RyZWFtIDw8ICJTY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyICIgPDwg
dGhpcyA8PCAiIHJlY2VpdmVkV2hlZWxFdmVudCAtICIgPDwgKE1vbm90b25pY1RpbWU6Om5vdygp
IC0gbV9sYXN0TGF0Y2hlZE5vZGVJbnRlcmF0aW9uVGltZSkubWlsbGlzZWNvbmRzKCkgPDwgIm1z
IHNpbmNlIGxhc3QgZXZlbnQsIGNsZWFyaW5nIGxhdGNoZWQgbm9kZSIpOwogICAgICAgICBtX2xh
dGNoZWROb2RlSUQucmVzZXQoKTsKICAgICB9CkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgU2Nyb2xs
aW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlcjo6bm9kZURpZEhhbmRsZUV2ZW50KFNjcm9sbGluZ05v
ZGVJRCBzY3JvbGxpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAod2hlZWxFdmVu
dC5kZWx0YSgpLmlzWmVybygpIHx8ICF3aGVlbEV2ZW50LnNob3VsZENvbnNpZGVyTGF0Y2hpbmco
KSkKKyAgICBpZiAod2hlZWxFdmVudC5kZWx0YSgpLmlzWmVybygpIHx8ICF3aGVlbEV2ZW50Lmlz
R2VzdHVyZVN0YXJ0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJTY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVy
ICIgPDwgdGhpcyA8PCAiIG5vZGVEaWRIYW5kbGVFdmVudDogbGF0Y2hpbmcgdG8gIiA8PCBzY3Jv
bGxpbmdOb2RlSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
VGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAKaW5kZXggYTVhZWQyZTBhYThkODNkNWRjYTg5ODEx
MWMxZjEzN2Y2YzYwZGZhMy4uNjZlZDFmNzM2YzI3ZTg3NmRhYTZmNTI0YTg3YzBiZWEwZTAxYWUw
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3Jv
bGxpbmdUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRl
ZFNjcm9sbGluZ1RyZWUuY3BwCkBAIC02Myw2ICs2Myw3IEBAIFdoZWVsRXZlbnRIYW5kbGluZ1Jl
c3VsdCBUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZv
cm1XCiAKIGJvb2wgVGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpoYW5kbGVXaGVlbEV2ZW50QWZ0ZXJN
YWluVGhyZWFkKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgU2Nyb2xsaW5n
Tm9kZUlEIHRhcmdldE5vZGVJRCkKIHsKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBz
dHJlYW0gPDwgIlRocmVhZGVkU2Nyb2xsaW5nVHJlZTo6aGFuZGxlV2hlZWxFdmVudEFmdGVyTWFp
blRocmVhZCAiIDw8IHdoZWVsRXZlbnQpOwogICAgIFNldEZvclNjb3BlPGJvb2w+IGRpc2FsbG93
TGF0Y2hpbmdTY29wZShtX2FsbG93TGF0Y2hpbmcsIGZhbHNlKTsKIAogICAgIFJlZlB0cjxTY3Jv
bGxpbmdUcmVlTm9kZT4gdGFyZ2V0Tm9kZSA9IG5vZGVGb3JJRCh0YXJnZXROb2RlSUQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbQppbmRleCAwMjg1
NGNjYmE2MTc0NzkwODBjOGVjNjgyMTJiZWNjNWZiM2ZhZDRhLi5hOGNlNjlhY2ZiYWNkMDk0MmVm
ZjRmOTZhNDMwNzEyNDIwNjUyMzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZU1hYy5tbQpAQCAtMTY3LDEyICsxNjcsNiBAQCBib29sIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25z
dAogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8gc2hhcmUgc29tZSBvZiB0aGUg
Y29kZSBmcm9tIG5ld0dlc3R1cmVJc1N0YXJ0aW5nKCksIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0
aW9uT2ZHZXN0dXJlKCksCiAvLyBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSwgYW5kIGFsbG93
c0hvcml6b250YWxTdHJldGNoaW5nKCkgd2l0aCB0aGUgaW1wbGVtZW50YXRpb24gaW4gU2Nyb2xs
QW5pbWF0b3JNYWMuCi0vLyBUaGlzIGlzIGFsc28gdGhlIHNhbWUgYXMgUGxhdGZvcm1XaGVlbEV2
ZW50OjpzaG91bGRDb25zaWRlckxhdGNoaW5nKCkuCi1zdGF0aWMgYm9vbCBuZXdHZXN0dXJlSXNT
dGFydGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0gICAgcmV0
dXJuIHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU1heUJlZ2lu
IHx8IHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuOwot
fQotCiBib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmlzQWxyZWFk
eVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0CiB7CiAgICAgYXV0byBzY3JvbGxQ
b3NpdGlvbiA9IGN1cnJlbnRTY3JvbGxQb3NpdGlvbigpOwpAQCAtMjAwLDcgKzE5NCw3IEBAIGJv
b2wgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6YWxsb3dzSG9yaXpvbnRh
bFN0cmV0Y2hpbmcoY29uc3QgUGxhCiAgICAgc3dpdGNoIChob3Jpem9udGFsU2Nyb2xsRWxhc3Rp
Y2l0eSgpKSB7CiAgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljOiB7CiAgICAgICAg
IGJvb2wgc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyA9IGhhc0VuYWJsZWRIb3Jpem9udGFsU2Ny
b2xsYmFyKCkgfHwgIWhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgICAgICBib29s
IGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gbmV3R2VzdHVyZUlzU3RhcnRpbmcod2hlZWxFdmVu
dCkgJiYgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUod2hlZWxFdmVudCwgU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKKyAgICAgICAgYm9vbCBldmVudFByZXZlbnRzU3Ry
ZXRjaGluZyA9IHdoZWVsRXZlbnQuaXNHZXN0dXJlU3RhcnQoKSAmJiBpc0FscmVhZHlQaW5uZWRJ
bkRpcmVjdGlvbk9mR2VzdHVyZSh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250
YWwpOwogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyAmJiAhZXZlbnRQ
cmV2ZW50c1N0cmV0Y2hpbmc7CiAgICAgfQogICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eU5vbmU6
CkBAIC0yMjIsNyArMjE2LDcgQEAgYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGYKICAgICBzd2l0Y2gg
KHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpKSB7CiAgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5
QXV0b21hdGljOiB7CiAgICAgICAgIGJvb2wgc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyA9IGhh
c0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcigpIHx8ICFoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9s
bGJhcigpOwotICAgICAgICBib29sIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0gbmV3R2VzdHVy
ZUlzU3RhcnRpbmcod2hlZWxFdmVudCkgJiYgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdl
c3R1cmUod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CisgICAgICAgIGJv
b2wgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSB3aGVlbEV2ZW50LmlzR2VzdHVyZVN0YXJ0KCkg
JiYgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUod2hlZWxFdmVudCwgU2Nyb2xs
RXZlbnRBeGlzOjpWZXJ0aWNhbCk7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXJzQWxsb3dTdHJl
dGNoaW5nICYmICFldmVudFByZXZlbnRzU3RyZXRjaGluZzsKICAgICB9CiAgICAgY2FzZSBTY3Jv
bGxFbGFzdGljaXR5Tm9uZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtV2hlZWxFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVl
bEV2ZW50LmgKaW5kZXggMmNlMDYwZTMzNjU5ZjZlZmQzZDQwZjljMjE5OGQ0NWE3YjI3MTUzZS4u
OTJlMGUyNmUwNmYyY2Y2M2NkMGZmMTllZjQ3MGEwYjZlYmQ1ZDI0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKQEAgLTE1MSw4ICsxNTEsMTAgQEAg
cHVibGljOgogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBib29sIHVzZUxhdGNo
ZWRFdmVudEVsZW1lbnQoKSBjb25zdDsKLSAgICBib29sIHNob3VsZENvbnNpZGVyTGF0Y2hpbmco
KSBjb25zdDsKKyAgICBib29sIGlzR2VzdHVyZVN0YXJ0KCkgY29uc3Q7CisgICAgYm9vbCBpc0dl
c3R1cmVDb250aW51YXRpb24oKSBjb25zdDsgLy8gVGhlIGZpbmdlcnMtZG93biBwYXJ0IG9mIHRo
ZSBnZXN0dXJlLgogICAgIGJvb2wgc2hvdWxkUmVzZXRMYXRjaGluZygpIGNvbnN0OworICAgIGJv
b2wgaXNOb25HZXN0dXJlRXZlbnQoKSBjb25zdDsKICAgICBib29sIGlzRW5kT2ZNb21lbnR1bVNj
cm9sbCgpIGNvbnN0OwogI2Vsc2UKICAgICBib29sIHVzZUxhdGNoZWRFdmVudEVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMjEwLDE1ICsyMTIsMjQgQEAgaW5saW5lIGJvb2wg
UGxhdGZvcm1XaGVlbEV2ZW50Ojp1c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgY29uc3QKICAgICAg
ICAgfHwgKG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCAmJiBtX21vbWVu
dHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKTsKIH0KIAotaW5saW5lIGJv
b2wgUGxhdGZvcm1XaGVlbEV2ZW50OjpzaG91bGRDb25zaWRlckxhdGNoaW5nKCkgY29uc3QKK2lu
bGluZSBib29sIFBsYXRmb3JtV2hlZWxFdmVudDo6aXNHZXN0dXJlU3RhcnQoKSBjb25zdAogewot
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBkaXNhbGxvdyBsYXRjaGluZyBpZiB0aGUgZGVsdGEg
aXMgemVyby4KICAgICByZXR1cm4gbV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJl
Z2FuIHx8IG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VNYXlCZWdpbjsKIH0KIAor
aW5saW5lIGJvb2wgUGxhdGZvcm1XaGVlbEV2ZW50Ojppc0dlc3R1cmVDb250aW51YXRpb24oKSBj
b25zdAoreworICAgIHJldHVybiBtX3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hh
bmdlZDsKK30KKwogaW5saW5lIGJvb2wgUGxhdGZvcm1XaGVlbEV2ZW50OjpzaG91bGRSZXNldExh
dGNoaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZUNhbmNlbGxlZCB8fCBtX3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTWF5
QmVnaW4gfHwgaXNFbmRPZk1vbWVudHVtU2Nyb2xsKCk7CisgICAgcmV0dXJuIG1fcGhhc2UgPT0g
UGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDYW5jZWxsZWQgfHwgbV9waGFzZSA9PSBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZU1heUJlZ2luIHx8IChtX3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBo
YXNlTm9uZSAmJiBtX21vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25l
KSB8fCBpc0VuZE9mTW9tZW50dW1TY3JvbGwoKTsKK30KKworaW5saW5lIGJvb2wgUGxhdGZvcm1X
aGVlbEV2ZW50Ojppc05vbkdlc3R1cmVFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGhh
c2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lICYmIG1fbW9tZW50dW1QaGFzZSA9PSBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmU7CiB9CiAKIGlubGluZSBib29sIFBsYXRmb3JtV2hl
ZWxFdmVudDo6aXNFbmRPZk1vbWVudHVtU2Nyb2xsKCkgY29uc3QKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlNTExNTdjNTk4
ODcxOWYzNzJlMDhhYmJkZTc1ZDNlZDNmMmQxMmI4Li4wNGI0NzIxOTE5ZmU3NTgxODA4ZDlkYjQw
ZThjM2UxMTMzYWEyNzA5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjAtMDgtMjkgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV3cml0ZSBtYWlu
IHRocmVhZCBzY3JvbGwgbGF0Y2hpbmcgbG9naWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTk3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHRlc3QgZm9yIGlmcmFtZSB1bnBhcmVudGluZyBp
biB0aGUgbWlkZGxlIG9mIGEgbGF0Y2hlZCBzY3JvbGwuCisKKyAgICAgICAgKiBmYXN0L3Njcm9s
bGluZy9sYXRjaGluZy9sYXRjaGVkLXNjcm9sbC1yZW1vdmUtaWZyYW1lLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL3Njcm9sbC1uZXN0ZWQtaWZyYW1lLmh0
bWw6IDEwMDBtcyAtPiAwbXMKKyAgICAgICAgKiBmYXN0L3Njcm9sbGluZy9tYWMvcnViYmVyYmFu
ZC1vdmVyZmxvdy1pbi13aGVlbC1yZWdpb24uaHRtbDogVGVzdCBuZWVkcyB0byBsYXRjaCB0aGUg
b3ZlcmZsb3cgYnkgc2Nyb2xsaW5nIGRvd24gdGhlbiB1cC4KKworMjAyMC0wOC0xOCAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSdWJiZXJiYW5kaW5n
IGluIGFuIG92ZXJmbG93OnNjcm9sbCBjYW4gdHJpZ2dlciBwYWdlIGppZ2dsZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTYyOQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNjcyOTU3OTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBmYXN0L3Njcm9sbGluZy9tYWMvcnViYmVyYmFuZC1vdmVyZmxv
dy1pbi13aGVlbC1yZWdpb24tcm9vdC1qaWdnbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L3Njcm9sbGluZy9tYWMvcnViYmVyYmFuZC1vdmVyZmxvdy1pbi13aGVlbC1yZWdp
b24tcm9vdC1qaWdnbGUuaHRtbDogQWRkZWQuCisKIDIwMjAtMDgtMjggIExhdXJvIE1vdXJhICA8
bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gR2FyZGVuaW5nIGFuZCByZWJhc2Vs
aW5pbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL2xh
dGNoZWQtc2Nyb2xsLXJlbW92ZS1pZnJhbWUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xs
aW5nL2xhdGNoaW5nL2xhdGNoZWQtc2Nyb2xsLXJlbW92ZS1pZnJhbWUuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wOTcxNmIxZmYwYjhjMTBlOTc4OTQxNWVmMWUwM2NlOWU1ZTc2Zjk0Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvbGF0Y2hpbmcvbGF0Y2hlZC1zY3JvbGwt
cmVtb3ZlLWlmcmFtZS5odG1sCkBAIC0wLDAgKzEsNzUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKyAgICA8c3R5bGU+CisgICAgICAgIGlmcmFtZSB7CisgICAgICAgICAgICB3
aWR0aDogNjAwcHg7CisgICAgICAgICAgICBoZWlnaHQ6IDQwMHB4OworICAgICAgICB9CisgICAg
PC9zdHlsZT4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL3VpLWhl
bHBlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAganNUZXN0SXNBc3luYyA9
IHRydWU7CisgICAgICAgIAorICAgICAgICBsZXQgaWZyYW1lID0gdW5kZWZpbmVkOworICAgICAg
ICBmdW5jdGlvbiBpZnJhbWVTY3JvbGxlZChvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChvZmZzZXQgPj0gMjAwKQorICAgICAgICAgICAgICAgIGlmcmFtZS5yZW1vdmUoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGRvVGVzdCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpZnJhbWUn
KVswXTsKKworICAgICAgICAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAg
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKDEwMCwgMTAwKTsg
Ly8gSW5zaWRlIHRoZSBpZnJhbWUuCisgICAgICAgICAgICBldmVudFNlbmRlci5tb25pdG9yV2hl
ZWxFdmVudHMoKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hl
ZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMSwgJ2JlZ2FuJywgJ25vbmUnKTsKKyAgICAgICAgICAg
IGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAt
MTAsICdjaGFuZ2VkJywgJ25vbmUnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Ny
b2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAwLCAnZW5kZWQnLCAnbm9uZScpOwor
ICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVt
UGhhc2VzKDAsIC0xMCwgJ25vbmUnLCAnYmVnaW4nKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVy
Lm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMTAsICdub25lJywg
J2NvbnRpbnVlJyk7CisgICAgICAgICAgICBhd2FpdCBVSUhlbHBlci5yZW5kZXJpbmdVcGRhdGUo
KTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21l
bnR1bVBoYXNlcygwLCAxMCwgJ25vbmUnLCAnY29udGludWUnKTsKKyAgICAgICAgICAgIGF3YWl0
IFVJSGVscGVyLnJlbmRlcmluZ1VwZGF0ZSgpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91
c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAsIDEwLCAnbm9uZScsICdjb250
aW51ZScpOworICAgICAgICAgICAgYXdhaXQgVUlIZWxwZXIucmVuZGVyaW5nVXBkYXRlKCk7Cisg
ICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1Q
aGFzZXMoMCwgLTEwLCAnbm9uZScsICdjb250aW51ZScpOworICAgICAgICAgICAgYXdhaXQgVUlI
ZWxwZXIucmVuZGVyaW5nVXBkYXRlKCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVNj
cm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgMCwgJ25vbmUnLCAnZW5kJyk7Cisg
ICAgICAgICAgICBhd2FpdCBVSUhlbHBlci53YWl0Rm9yU2Nyb2xsQ29tcGxldGlvbigpOworCisg
ICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIHdpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4geworICAgICAgICAgICAgZGVzY3JpcHRpb24o
IlRlc3QgdGhhdCByZW1vdmVzIGFuIGlmcmFtZSBkdXJpbmcgYSBsYXRjaGVkIHNjcm9sbC4gUGFz
c2VzIGlmIHRoZSB0ZXN0IGRvZXMgbm90IGNyYXNoLiIpOworICAgICAgICAgICAgc2V0VGltZW91
dChkb1Rlc3QsIDApOworICAgICAgICB9LCBmYWxzZSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKyAgICA8aWZyYW1lIHNyY2RvYz0iCisgICAgPHN0eWxlPgorICAgICAgICBib2R5
IHsgaGVpZ2h0OiAyMDAwcHg7IH0KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQ+CisgICAgICAg
IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB7CisgICAgICAgICAgICBw
YXJlbnQuaWZyYW1lU2Nyb2xsZWQod2luZG93LnBhZ2VZT2Zmc2V0KTsKKyAgICAgICAgfSk7Cisg
ICAgPC9zY3JpcHQ+CisgICAgPGJvZHk+CisgICAgICAgIGlmcmFtZQorICAgIDwvYm9keT4KKyAg
ICAiPgorICAgIDwvaWZyYW1lPgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorICAgIDxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5n
L2xhdGNoaW5nL3Njcm9sbC1uZXN0ZWQtaWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Nj
cm9sbGluZy9sYXRjaGluZy9zY3JvbGwtbmVzdGVkLWlmcmFtZS5odG1sCmluZGV4IDFhZWM4Y2Q1
YmU4Zjg3ZmE5YzMwNTAyMGMwNWRlYWQzZmU3MDNlNDQuLjRlMjMwMTA2ODNjNTlhMTAzNWM4MThh
NTg0NTBhMjhiNjZmMmQ0ZjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5n
L2xhdGNoaW5nL3Njcm9sbC1uZXN0ZWQtaWZyYW1lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9zY3JvbGxpbmcvbGF0Y2hpbmcvc2Nyb2xsLW5lc3RlZC1pZnJhbWUuaHRtbApAQCAtNjIsNyAr
NjIsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBp
ZnJhbWUgZG9lcyBzY3JvbGwgd2hlbiBpbm5lciBpZnJhbWUgaXMgTk9UIHNjcm9sbGFibGUuIik7
CiAgICAgICAgICAgICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7Ci0gICAgICAgICAgICAgICAg
c2V0VGltZW91dChzY3JvbGxUZXN0LCAxMDAwKTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0
KHNjcm9sbFRlc3QsIDApOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHZhciBtZXNzYWdlTG9jYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgncGFyZW50Jyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9tYWMv
cnViYmVyYmFuZC1vdmVyZmxvdy1pbi13aGVlbC1yZWdpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3Qvc2Nyb2xsaW5nL21hYy9ydWJiZXJiYW5kLW92ZXJmbG93LWluLXdoZWVsLXJlZ2lvbi5odG1s
CmluZGV4IDVkZDNhMjdiMjI3YmUwZjMyZmQyZDFhYTJmNzg2MGFlNGIxNmEzYmIuLjQ5NzBjZmFm
OTVkNWYzODUyYTFiMTJiZmVjYWY1N2EzMWYwMmUwNGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3Qvc2Nyb2xsaW5nL21hYy9ydWJiZXJiYW5kLW92ZXJmbG93LWluLXdoZWVsLXJlZ2lvbi5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL21hYy9ydWJiZXJiYW5kLW92ZXJm
bG93LWluLXdoZWVsLXJlZ2lvbi5odG1sCkBAIC00Niw4ICs0NiwxMiBAQAogICAgICAgICBhc3lu
YyBmdW5jdGlvbiBkb01vdXNlV2hlZWxTY3JvbGwoKQogICAgICAgICB7CiAgICAgICAgICAgICBl
dmVudFNlbmRlci5tb3VzZU1vdmVUbygxMDAsIDEwMCk7Ci0gICAgICAgICAgICBldmVudFNlbmRl
ci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgMSwgImJlZ2FuIiwg
Im5vbmUiKTsKLSAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxB
bmRNb21lbnR1bVBoYXNlcygwLCAyMCwgImNoYW5nZWQiLCAibm9uZSIpOworICAgICAgICAgICAg
Ly8gU2Nyb2xsIGRvd24gdG8gbGF0Y2gsIHRoZW4gdXAgdG8gcnViYmVyYmFuZC4KKyAgICAgICAg
ICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygw
LCAtMSwgImJlZ2FuIiwgIm5vbmUiKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Ny
b2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMTAsICJjaGFuZ2VkIiwgIm5vbmUi
KTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21l
bnR1bVBoYXNlcygwLCAtMTAsICJjaGFuZ2VkIiwgIm5vbmUiKTsKKyAgICAgICAgICAgIGV2ZW50
U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAxMiwgImNo
YW5nZWQiLCAibm9uZSIpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdp
dGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAsIDEyLCAiY2hhbmdlZCIsICJub25lIik7CiAgICAg
ICAgICAgICBldmVudFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFz
ZXMoMCwgMCwgImVuZGVkIiwgIm5vbmUiKTsKICAgICAgICAgICAgIGF3YWl0IFVJSGVscGVyLnJl
bmRlcmluZ1VwZGF0ZSgpOwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407551</attachid>
            <date>2020-08-29 14:11:37 -0700</date>
            <delta_ts>2020-08-29 17:08:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215979-20200829141137.patch</filename>
            <type>text/plain</type>
            <size>86641</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWY2NTQxYmJiMmQxZGU0
MzFkMDM4MjYwNzVmZWNmZjMxNzVhYWQ5Ny4uMzUyNGNkZWJhZTNhOGE4NzM5OWVjN2ExNDllYzhl
MDBmYmU1YjA2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAyMC0wOC0yOSAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdyaXRlIG1h
aW4gdGhyZWFkIHNjcm9sbCBsYXRjaGluZyBsb2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGUgZXhpc3RpbmcgbWFpbiB0aHJlYWQg
d2hlZWwgZXZlbnQgaGFuZGxpbmcgYW5kIGxhdGNoaW5nIGxvZ2ljIGhhZCBhIG51bWJlciBvZiBp
c3N1ZXMsCisgICAgICAgIHNvbWUgb2Ygd2hpY2ggd2VyZSBpbmRpY2F0ZWQgdmlhIHRoZSBGSVhN
RSBjb21tZW50cyBhZGRlZCBpbiByMjY2MDE2OgorICAgICAgICAtIEl0IHRyYWNrZWQgc2Nyb2xs
YWJsZSBjb250YWluZXJzIGFzIENvbnRhaW5lck5vZGVzIHJhdGhlciB0aGFuIFNjcm9sbGFibGVB
cmVhcworICAgICAgICAtIEl0IGZldGNoZWQgYW5kIHVzZWQgbGF0Y2hlZCBzdGF0ZSBmcm9tIGEg
ZGlmZmVyZW50IGZyYW1lLCBjYXVzaW5nIGFuIEV2ZW50SGFuZGxlcgorICAgICAgICAgIHRvIGVu
ZCB1cCBzY3JvbGxpbmcgc29tZSB1bnJlbGF0ZWQgZnJhbWUuCisgICAgICAgIC0gT3ZlcmZsb3cg
c2Nyb2xsaW5nIGlnbm9yZWQgbGF0Y2hlZCBzdGF0ZS4KKyAgICAgICAgLSBUaGUgbGF0Y2hpbmcg
c3RhY2sncyBwdXJwb3NlIHdhcyB1bmNsZWFyLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBmaXhlcyB0aG9zZSBpc3N1ZXMuIFRoZSBkZXNpZ24gaXMgYXMgZm9sbG93OiAKKyAgICAgICAg
LSBMYXRjaGluZyBsb2dpYyBpcyBtb3ZlZCBpbnRvIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlciwg
d2hpY2ggaXMgb3duZWQgYnkgUGFnZS4KKyAgICAgICAgLSBTY3JvbGxMYXRjaGluZ0NvbnRyb2xs
ZXIgb3ducyBhIHN0YWNrIG9mIEZyYW1lU3RhdGUuCisgICAgICAgIC0gV2hlbiByZWNlaXZpbmcg
YSB3aGVlbCBldmVudCwgZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldCgpIGlkZW50aWZpZXMgdGhl
IHRhcmdldAorICAgICAgICAgIFNjcm9sbGFibGVBcmVhLCBpZiBhbnksIGZvciB0aGF0IGZyYW1l
IG9ubHkuCisgICAgICAgIC0gQXMgaGl0LXRlc3RpbmcgZGVzY2VuZHMgaW50byBzdWJmcmFtZXMs
IHN0YXRlIGlzIHB1c2hlZCBvbnRvIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcidzCisgICAgICAg
ICAgc3RhdGUgc3RhY2suIEZyYW1lcyB3aXRoIHBvdGVudGlhbCBzY3JvbGxlcnMgaGF2ZSBhIG5v
bi1udWxsIFNjcm9sbGFibGVBcmVhIGluIHRoZWlyIHN0YXRlLgorICAgICAgICAtIFRoZSBsYXRj
aGVkIFNjcm9sbGFibGVBcmVhIGlzIHRoZSB0b3Agbm9uLW51bGwgU2Nyb2xsYWJsZUFyZWEgaW4g
dGhpcyBzdGFjay4KKyAgICAgICAgLSBFdmVudEhhbmRsZXIgY29uc3VsdHMgU2Nyb2xsTGF0Y2hp
bmdDb250cm9sbGVyIGZvciBzZWxlY3QsIG92ZXJmbG93IGFuZCBmcmFtZSBzY3JvbGxpbmcuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZSBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBzY3JvbGxp
bmcgb3ZlciBhbiBvdmVyZmxvdzpzY3JvbGwgaW4gdGhlIG5vbi1mYXN0IHNjcm9sbGFibGUKKyAg
ICAgICAgcmVnaW9uIHdvdWxkIHJ1YmJlci1iYW5kIHRoZSBvdmVyZmxvdywgcmF0aGVyIHRoYW4g
dGhlIG1haW4gcGFnZSAodGVzdGVkIGJ5IHRoZSBhZGp1c3RlZAorICAgICAgICBmYXN0L3Njcm9s
bGluZy9tYWMvcnViYmVyYmFuZC1vdmVyZmxvdy1pbi13aGVlbC1yZWdpb24uaHRtbCkuCisKKyAg
ICAgICAgVGVzdHM6IGZhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL2xhdGNoZWQtc2Nyb2xsLXJlbW92
ZS1pZnJhbWUuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGV0ZXJt
aW5lV2hlZWxFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBy
b2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNvbXBsZXRlV2lkZ2V0V2hlZWxFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjbGVhckxhdGNoZWRTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNsZWFyTGF0Y2hlZFN0YXRlVGltZXJGaXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNsZWFyT3JTY2hl
ZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAqIHBh
Z2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2U6OnN0YXJ0TW9uaXRvcmluZ1doZWVsRXZlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnNjcm9sbExhdGNoaW5nQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjpsYXRjaGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnB1c2hOZXdMYXRjaGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnJlc2V0TGF0Y2hpbmdTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpw
b3BMYXRjaGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlbW92
ZUxhdGNoaW5nU3RhdGVGb3JUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvUGFnZS5o
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6bGF0Y2hpbmdTdGF0ZVN0YWNrIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRldGVybWluZVdoZWVsRXZlbnRUYXJnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVQbGF0Zm9y
bVdpZGdldFdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwcm9j
ZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXApOgorICAgICAgICAoV2ViQ29yZTo6ZGVsdGFJc1By
ZWRvbWluYW50bHlWZXJ0aWNhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxl
ZFRvRWRnZUluRG9taW5hbnREaXJlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
bGF0Y2hpbmdJc0xvY2tlZFRvUGxhdGZvcm1GcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpsYXRjaGluZ0lzTG9ja2VkVG9BbmNlc3Rvck9mVGhpc0ZyYW1lKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmxhdGNoZWRUb0ZyYW1lT3JCb2R5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3Rh
dGVJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmcmFtZVZpZXdGb3JMYXRj
aGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNo
aW5nQ29udHJvbGxlcjo6U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcklmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Y2xlYXJUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6cmVjZWl2
ZWRXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxl
cjo6bGF0Y2hpbmdBbGxvd3NTY3JvbGxpbmdJbkZyYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6dXBkYXRlTGF0Y2hpbmdTdGF0ZUZvckZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Z2V0TGF0Y2hp
bmdTdGF0ZUZvckZyYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5n
Q29udHJvbGxlcjo6cmVtb3ZlTGF0Y2hpbmdTdGF0ZUZvclRhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OnJlbW92ZUxhdGNoaW5nU3RhdGVGb3JGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWx0YUlzUHJlZG9taW5hbnRseVZlcnRpY2FsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6c2hvdWxkTGF0Y2hUb1Nj
cm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29u
dHJvbGxlcjo6aGFzU3RhdGVGb3JGcmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXI6OnN0YXRlRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpzdGF0ZUZvckZyYW1lIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxM
YXRjaGluZ0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXI6OmN1bXVsYXRpdmVFdmVudERlbHRhIGNvbnN0KToKKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyOjpyZWNlaXZl
ZFdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29u
dHJvbGxlcjo6bm9kZURpZEhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9U
aHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkZWRTY3Jv
bGxpbmdUcmVlOjpoYW5kbGVXaGVlbEV2ZW50QWZ0ZXJNYWluVGhyZWFkKToKKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVN
YWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFsbG93c1ZlcnRpY2FsU3Ry
ZXRjaGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpuZXdHZXN0dXJlSXNTdGFydGluZyk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OmlzR2VzdHVyZVN0YXJ0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6aXNHZXN0dXJlQ29udGludWF0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6c2hvdWxk
UmVzZXRMYXRjaGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZl
bnQ6OmlzTm9uR2VzdHVyZUV2ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
V2hlZWxFdmVudDo6c2hvdWxkQ29uc2lkZXJMYXRjaGluZyBjb25zdCk6IERlbGV0ZWQuIFJlbmFt
ZWQgdG8gaXNHZXN0dXJlU3RhcnQoKS4gVGhpcyBjbGFzcworICAgICAgICBzaG91bGQgbm90IHBy
ZXNjcmliZSBsYXRjaGluZyBiZWhhdmlvcnMuCisKIDIwMjAtMDgtMjggIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgUGFubmVyTm9kZSB0byBzdXBwb3J0
IGstcmF0ZSBhdXRvbWF0aW9uIG9mIGl0cyBBdWRpb1BhcmFtcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBh
NzlkZWNkMGI4NDE5ZDZhYmY3NzE3ZmZhNTZjZjA1ZGVlZDRkY2IxLi4zZTczOGU0MGFmYjQyYjQ1
OTk3MjU2N2I3NjRlODAwNjdlMGEwMjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTY4Myw3ICsxNjgz
LDcgQEAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAKIHBhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUuY3BwCiBwYWdlL3Nj
cm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAogcGFnZS9zY3JvbGxpbmcvQXhp
c1Njcm9sbFNuYXBPZmZzZXRzLmNwcAotcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdTdGF0
ZS5jcHAKK3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHAKIHBhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmNwcAogcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9k
ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA1ODhjNzYxZGIxNzNkYWFhYjQ0NWQ0ZDljNTlmZWRlZGE5NjFlNzI4Li44NGQz
ZTE0YWVjYTZjYTQ1ZDEyOWY4MjlhODY1OGZlYzcyNGI4NTRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDc2LDggKzEwNzYs
OCBAQAogCQk0MTZFMEIzQTIwOUJDM0NCMDA0QTk1RDkgLyogRmV0Y2hJZGVudGlmaWVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFMEIzNzIwOUJD
M0MyMDA0QTk1RDkgLyogRmV0Y2hJZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDE2RTI5QTYxMDJGQTk2MjAwN0ZDMTRFIC8qIFdv
cmtlclJlcG9ydGluZ1Byb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTZFMjlBNTEwMkZBOTYyMDA3RkMxNEUgLyogV29ya2VyUmVwb3J0aW5nUHJv
eHkuaCAqLzsgfTsKIAkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3NjREOSAvKiBSZWFkYWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjc0IC8qIFRyYW5zZm9ybVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RUEgLyogVHJhbnNmb3JtU3RyZWFtSW50ZXJuYWxz
QnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0MTZFNkZFODFCQkQxMkRGMDAwQTNGNjUgLyogSlNET01CaW5kaW5nSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
MDNEODA2MUJCMzExMEQwMEI3NjREQSAvKiBKU0RPTUJpbmRpbmdJbnRlcm5hbHNCdWlsdGlucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxNkU2
RkU4MUJCRDEyREYwMDBBM0Y3NCAvKiBUcmFuc2Zvcm1TdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYx
QkIzMTEwRDAwQjc2NEVBIC8qIFRyYW5zZm9ybVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDE2RTZGRTgx
QkJEMTJERjAwMEE2MDMzIC8qIFN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0
QzkgLyogU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVh
ZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFk
YWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBX
cml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFi
bGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yMjE1LDcgKzIyMTUsNiBAQAogCQk3QUEzQTZBMDE5NEI1
OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QUEzQTY5RTE5NEI1OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0FBM0E2
QTQxOTRCNUMyMjAwMUNCRDI0IC8qIFRpbGVDb3ZlcmFnZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FBM0E2QTIxOTRCNUMyMjAwMUNCRDI0IC8q
IFRpbGVDb3ZlcmFnZU1hcC5oICovOyB9OwogCQk3QUFCQTI1QTE0QkM2MTMzMDBBQTlBMTEgLyog
RE9NRWRpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QUFCQTI1ODE0QkM2MTMzMDBBQTlBMTEgLyogRE9NRWRpdG9yLmggKi87IH07Ci0JCTdBQUZF
OEQwMTlDQjg2NzIwMDBGNTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUFGRThDRTE5Q0I4NjcyMDAwRjU2
RDggLyogU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oICovOyB9OwogCQk3QURFNzIyNjEwQ0JCQjlCMDA2
QjNCM0EgLyogQ29udGV4dE1lbnVQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0FERTcyMjUxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRN
ZW51UHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3QUUzMzVGMjFBQ0IwOUUyMDBFNDAxRUYgLyogV2hlZWxFdmVudFRlc3RNb25pdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUUzMzVG
MDFBQ0IwOUUyMDBFNDAxRUYgLyogV2hlZWxFdmVudFRlc3RNb25pdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0FFNkM5M0MxQkUwQzYwMTAw
RTE5RTAzIC8qIE1haW5UaHJlYWRTaGFyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FFNkM5M0ExQkUwQzYwMTAwRTE5RTAzIC8qIE1haW5U
aHJlYWRTaGFyZWRUaW1lci5oICovOyB9OwpAQCAtNTk3NSw2ICs1OTc0LDggQEAKIAkJMEY5NEI2
NTMyMjA5MTU2QzAwMTU3MDE0IC8qIFNjcm9sbGluZ1RyZWVQb3NpdGlvbmVkTm9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5NEI2NTQyMjA5MTU2QzAwMTU3MDE0IC8qIFNjcm9sbGluZ1RyZWVQ
b3NpdGlvbmVkTm9kZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVQb3Np
dGlvbmVkTm9kZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NEYzN0MyMzY2
MTEzMTAwM0FBNUM3IC8qIFN0eWxlUnVsZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSdWxl
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk1MTBGMDI0RjQ3NjlDMDAx
RjUyREMgLyogU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9s
bExhdGNoaW5nQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk1
MTBGMjI0RjQ3NjlDMDAxRjUyREMgLyogU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNjcm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTdBNjU3MTU1REE4MUUwMEZBREQ0QyAvKiBEaXNwbGF5UmVm
cmVzaE1vbml0b3JJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOUI1NDc1MjJCNEE3NzIwMDdCNUU4QSAvKiBTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Ny
b2xsUHJveHlOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3Jv
bGxQcm94eU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5QjU0NzYyMkI0
QTc3MzAwN0I1RThBIC8qIFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxQcm94eU5vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbFByb3h5Tm9k
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDAwMSw4ICsxMDAwMiw2IEBA
CiAJCTdBQTNBNkEyMTk0QjVDMjIwMDFDQkQyNCAvKiBUaWxlQ292ZXJhZ2VNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlsZUNvdmVyYWdlTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdBQUJBMjU3MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NRWRpdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FBQkEyNTgxNEJDNjEzMzAwQUE5QTExIC8q
IERPTUVkaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01FZGl0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0FBRkU4Q0QxOUNCODY3MjAwMEY1NkQ4
IC8qIFNjcm9sbExhdGNoaW5nU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTdBQUZFOENFMTlDQjg2NzIwMDBGNTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbExhdGNoaW5nU3RhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FERTcyMjUxMENCQkI5QjAwNkIzQjNBIC8q
IENvbnRleHRNZW51UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29udGV4dE1lbnVQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUUz
MzVFRjFBQ0IwOUUyMDBFNDAxRUYgLyogV2hlZWxFdmVudFRlc3RNb25pdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdoZWVsRXZlbnRUZXN0TW9uaXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRTMzNUYwMUFDQjA5RTIwMEU0MDFFRiAv
KiBXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2hlZWxFdmVudFRlc3RNb25pdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMTU2NiwxMCArMTE1NjUsMTAgQEAKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFN0cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L1N0cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19E
SVI7IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3NjREOCAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0
aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlYWRhYmxlU3RyZWFtQnVp
bHRpbnMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvUmVhZGFibGVTdHJlYW1CdWls
dGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1JlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJOUIw
M0Q4MDYxQkIzMTEwRDAwQjc2NEVBIC8qIFRyYW5zZm9ybVN0cmVhbUludGVybmFsc0J1aWx0aW5z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRyYW5zZm9ybVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1RyYW5zZm9ybVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3NjREQSAvKiBKU0RPTUJpbmRpbmdJbnRlcm5hbHNC
dWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0RPTUJpbmRpbmdJ
bnRlcm5hbHNCdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RPTUJp
bmRpbmdJbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFibGVTdHJlYW1CdWlsdGlu
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXcml0YWJsZVN0cmVhbUJ1aWx0
aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1dyaXRhYmxlU3RyZWFtQnVpbHRp
bnMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOUIwM0Q4MDYxQkIz
MTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlu
cy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Xcml0YWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTlCMDNE
ODA2MUJCMzExMEQwMEI3NjRFQSAvKiBUcmFuc2Zvcm1TdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUcmFuc2Zvcm1TdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9UcmFuc2Zvcm1TdHJl
YW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQk5QjA5OEJENTFGM0Q2MDMzMDAyREQ1NjIgLyogRGF0YVRyYW5zZmVySXRlbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhVHJhbnNmZXJJdGVtLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwOThCREQxRjNENjczRDAwMkRENTYyIC8q
IEpTRGF0YVRyYW5zZmVySXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RhdGFUcmFuc2Zlckl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjA5OEJERTFGM0Q2NzNEMDAyREQ1NjIgLyogSlNEYXRhVHJhbnNmZXJJdGVtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVRyYW5zZmVySXRlbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgwMDMsOCArMTgwMDIsOCBAQAogCQkJCTkzOTFBOTlC
MTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oICovLAogCQkJ
CUE2RDVBOTlBMTYyOUQ2RkYwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlLmNwcCAqLywKIAkJCQlBNkQ1QTk5QjE2MjlENzAwMDAyOTczMzAgLyogU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oICovLAotCQkJCTdBQUZFOENEMTlDQjg2NzIwMDBG
NTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmNwcCAqLywKLQkJCQk3QUFGRThDRTE5Q0I4Njcy
MDAwRjU2RDggLyogU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oICovLAorCQkJCTBGOTUxMEYyMjRGNDc2
OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGOTUx
MEYwMjRGNDc2OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuaCAqLywKIAkJ
CQlGNDY3MjkyNTFFMERFNUFCMDBBQ0MzRDggLyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmggKi8s
CiAJCQkJMEY2MzgzREIxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5j
cHAgKi8sCiAJCQkJMEY2MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5n
VHJlZS5oICovLApAQCAtMzM0OTcsNyArMzM0OTYsNiBAQAogCQkJCTBGMzdGMDg1MjIwMkJGOTgw
MEE4OUMwQiAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjk0QjY0OTIyMDhGRTNCMDAxNTcwMTQgLyogU2Nyb2xsaW5nVHJlZVN0
aWNreU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQzU3OTVEMURBNUMzMDEwMDZGOUM5NyAv
KiBTY3JvbGxJbnRvVmlld09wdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTdBQUZFOEQwMTlD
Qjg2NzIwMDBGNTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4M0M1Nzk1RDFEQTVDMzAxMDA2RjlDODYgLyogU2Nyb2xsTG9naWNhbFBvc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4M0M1Nzk1RDFEQTVDMzAxMDA2RkFDOTcgLyogU2Nyb2xsT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ3ODc1NTQxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9s
bFNuYXBBbmltYXRvclN0YXRlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApp
bmRleCBiZDgwMjliYmY1NzRkNWVhODRjODk2YmFhMDUyOTdiOWQxY2U3NTI1Li43MjJkY2Y0YmU3
ZDI2ODE5YTBjNTZmODNkNTlkZmExZjA3MjRlZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBA
IC0xMDUsNyArMTA1LDcgQEAKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsSW50b1ZpZXdPcHRpb25z
LmgiCi0jaW5jbHVkZSAiU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIlNjcm9sbExh
dGNoaW5nQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yUXVlcnkuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXVsYXRlZENsaWNrLmgiCkBAIC0yMjU5LDkgKzIy
NTksMTEgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlIHJl
bW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXIKICAgICBpZiAoZnJhbWUpCiAgICAgICAg
IGZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5jYW5jZWxBbmltYXRpb25zKCp0aGlzKTsKIAotI2lm
IFBMQVRGT1JNKE1BQykKLSAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAg
ZnJhbWUtPnBhZ2UoKS0+cmVtb3ZlTGF0Y2hpbmdTdGF0ZUZvclRhcmdldCgqdGhpcyk7CisjaWYg
RU5BQkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQorICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFn
ZSgpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgPSBmcmFt
ZS0+cGFnZSgpLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpKQorICAgICAgICAg
ICAgc2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLT5yZW1vdmVMYXRjaGluZ1N0YXRlRm9yVGFyZ2V0
KCp0aGlzKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIGlmIChoYXNSYXJlRGF0YSgpICYmIGVsZW1l
bnRSYXJlRGF0YSgpLT5oYXNFbGVtZW50SWRlbnRpZmllcigpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKaW5kZXggYjQ1NWIxZGViNmU0OTE1ZTRlOTFhMGU1NTEwYTczMDExMzEz
ZjI0Zi4uMzdhNjJlY2IwYTAzYzQxM2FmMTU5NWEzMDg4NzRkMTdhN2FiYzBmNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtODksNyArODksNyBAQAogI2luY2x1ZGUgIlNW
R0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTY3JvbGxBbmlt
YXRvci5oIgotI2luY2x1ZGUgIlNjcm9sbExhdGNoaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJTY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKQEAgLTM5MCw5ICszOTAsNiBA
QCBib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRMb29wSGFuZGxlTW91c2VEcmFnZ2VkKGNvbnN0IE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdAogRXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIoRnJh
bWUmIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1faG92ZXJUaW1lcigqdGhp
cywgJkV2ZW50SGFuZGxlcjo6aG92ZXJUaW1lckZpcmVkKQotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICAsIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIoKnRoaXMsICZFdmVudEhhbmRsZXI6OmNsZWFy
TGF0Y2hlZFN0YXRlVGltZXJGaXJlZCkKLSNlbmRpZgogICAgICwgbV9hdXRvc2Nyb2xsQ29udHJv
bGxlcihtYWtlVW5pcXVlPEF1dG9zY3JvbGxDb250cm9sbGVyPigpKQogI2lmICFFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKICAgICAsIG1fZmFrZU1vdXNlTW92ZUV2ZW50VGltZXIoKnRoaXMsICZF
dmVudEhhbmRsZXI6OmZha2VNb3VzZU1vdmVFdmVudFRpbWVyRmlyZWQpCkBAIC0yNzcyLDE1ICsy
NzY5LDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmlzSW5zaWRlU2Nyb2xsYmFyKGNvbnN0IEludFBv
aW50JiB3aW5kb3dQb2ludCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRXZl
bnRIYW5kbGVyOjpjbGVhckxhdGNoZWRTdGF0ZVRpbWVyRmlyZWQoKQotewotICAgIExPRyhTY3Jv
bGxMYXRjaGluZywgIkV2ZW50SGFuZGxlciAlcCBjbGVhckxhdGNoZWRTdGF0ZVRpbWVyRmlyZWQo
KSIsIHRoaXMpOwotICAgIGNsZWFyTGF0Y2hlZFN0YXRlKCk7Ci19Ci0KICNpZiAhUExBVEZPUk0o
TUFDKQogCi12b2lkIEV2ZW50SGFuZGxlcjo6ZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBIaXRUZXN0UmVzdWx0JiwgUmVmUHRyPEVsZW1l
bnQ+JiwgUmVmUHRyPENvbnRhaW5lck5vZGU+JiwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mLCBi
b29sJikKK3ZvaWQgRXZlbnRIYW5kbGVyOjpkZXRlcm1pbmVXaGVlbEV2ZW50VGFyZ2V0KGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBSZWZQdHI8RWxlbWVu
dD4mLCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYsIGJvb2wmKQogewogfQogCkBAIC0yNzkwLDcg
KzI3ODEsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6cmVjb3JkV2hlZWxFdmVudEZvckRlbHRhRmls
dGVyKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbgogICAgICAgICBwYWdlLT53aGVlbEV2
ZW50RGVsdGFGaWx0ZXIoKS0+dXBkYXRlRnJvbURlbHRhKEZsb2F0U2l6ZShldmVudC5kZWx0YVgo
KSwgZXZlbnQuZGVsdGFZKCkpKTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVl
bEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIENvbnRh
aW5lck5vZGUqLCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYpCitib29sIEV2ZW50SGFu
ZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiBldmVudCwgY29uc3QgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mKQogewogICAgIFJlZjxG
cmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFtZSk7CiAKQEAgLTI4MDIsNyArMjc5Myw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIGV2ZW50CiAgICAgcmV0dXJuIGRpZEhhbmRsZUV2ZW50OwogfQogCi1i
b29sIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVu
dChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBXaWRnZXQmLCBDb250YWluZXJOb2Rl
KikKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1XaWRnZXRXaGVl
bEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IFdpZGdldCYsIGNvbnN0IFdl
YWtQdHI8U2Nyb2xsYWJsZUFyZWE+JikKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTI4MTAs
MTEgKzI4MDEsNiBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmb3Jt
V2lkZ2V0V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRQogdm9pZCBFdmVudEhhbmRsZXI6
OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
LCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYpCiB7CiB9Ci0KLXZvaWQgRXZlbnRIYW5k
bGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcmluZ0xhdGNoZWRTdGF0ZUlmTmVlZGVkKGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYpCi17Ci0gICAgY2xlYXJMYXRjaGVkU3RhdGUoKTsKLX0KICAgICAK
ICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAKQEAgLTI4NTcsNyArMjg0Myw3IEBAIHN0
YXRpYyBXZWFrUHRyPFdpZGdldD4gd2lkZ2V0Rm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVt
ZW50KQogICAgIHJldHVybiBtYWtlV2Vha1B0cigqZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PigqdGFy
Z2V0KS53aWRnZXQoKSk7CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpjb21wbGV0ZVdpZGdldFdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgY29uc3QgV2Vha1B0cjxX
aWRnZXQ+JiB3aWRnZXQsIGNvbnN0IFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxl
QXJlYSwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lcikKK2Jvb2wgRXZlbnRIYW5k
bGVyOjpjb21wbGV0ZVdpZGdldFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBl
dmVudCwgY29uc3QgV2Vha1B0cjxXaWRnZXQ+JiB3aWRnZXQsIGNvbnN0IFdlYWtQdHI8U2Nyb2xs
YWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICBtX2lzSGFuZGxpbmdXaGVlbEV2ZW50
ID0gZmFsc2U7CiAgICAgCkBAIC0yODczLDcgKzI4NTksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
Y29tcGxldGVXaWRnZXRXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQs
IGNvbgogICAgIGlmICghd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIHJldHVybiBwbGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1XaWRnZXRXaGVlbEV2
ZW50KGV2ZW50LCAqd2lkZ2V0LmdldCgpLCBzY3JvbGxhYmxlQ29udGFpbmVyKTsKKyAgICByZXR1
cm4gcGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudChldmVudCwgKndpZGdl
dC5nZXQoKSwgc2Nyb2xsYWJsZUFyZWEpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQpAQCAtMjg4OSw2ICsy
ODc1LDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiBldmVudCkKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAorICAgIGlmICghbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgaWYgKG1fZnJhbWUucGFnZSgpLT5wb2ludGVy
TG9ja0NvbnRyb2xsZXIoKS5pc0xvY2tlZCgpKSB7CiAgICAgICAgIG1fZnJhbWUucGFnZSgpLT5w
b2ludGVyTG9ja0NvbnRyb2xsZXIoKS5kaXNwYXRjaExvY2tlZFdoZWVsRXZlbnQoZXZlbnQpOwpA
QCAtMjkwNywzMyArMjg5NiwzMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVu
dChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQogICAgIG1faXNIYW5kbGluZ1doZWVs
RXZlbnQgPSB0cnVlOwogICAgIHNldEZyYW1lV2FzU2Nyb2xsZWRCeVVzZXIoKTsKIAorICAgIGlm
IChtX2ZyYW1lLmlzTWFpbkZyYW1lKCkpIHsKKyNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJ
TkcpCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKS5y
ZWNlaXZlZFdoZWVsRXZlbnQoZXZlbnQpOworI2VuZGlmCisgICAgICAgIHJlY29yZFdoZWVsRXZl
bnRGb3JEZWx0YUZpbHRlcihldmVudCk7CisgICAgfQorCiAgICAgSGl0VGVzdFJlcXVlc3QgcmVx
dWVzdDsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKGV2
ZW50LnBvc2l0aW9uKCkpKTsKICAgICBkb2N1bWVudC0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQp
OwogCi0gICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBoYXZlIHRyYWNrIGFsbCB0aHJlZSBvZiB0YXJn
ZXRFbGVtZW50LCBzY3JvbGxhYmxlQ29udGFpbmVyIGFuZCBTY3JvbGxhYmxlQXJlYT8KICAgICBS
ZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IHJlc3VsdC50YXJnZXRFbGVtZW50KCk7Ci0gICAgUmVm
UHRyPENvbnRhaW5lck5vZGU+IHNjcm9sbGFibGVDb250YWluZXI7CiAgICAgV2Vha1B0cjxTY3Jv
bGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFyZWE7CiAgICAgYm9vbCBpc092ZXJXaWRnZXQgPSByZXN1
bHQuaXNPdmVyV2lkZ2V0KCk7CiAgICAgCi0gICAgLy8gRklYTUU6IFVzaW5nIHRoZSB2YWx1ZSBv
ZiBpc092ZXJXaWRnZXQgZnJvbSB0aGUgbGF0Y2hpbmcgc3RhdGUgdHJpZ2dlcnMgZG91YmxlLXJl
Y3Vyc2lvbiBpbnRvIHN1YmZyYW1lcy4KICAgICAvLyBGSVhNRTogRGVzcGl0ZSBkb2luZyB0aGlz
IHVwLWZyb250IHNlYXJjaCBmb3IgdGhlIGNvcnJlY3Qgc2Nyb2xsYWJsZSBhcmVhLCB3ZSBkaXNw
YXRjaCBldmVudHMgdmlhIGVsZW1lbnRzIHdoaWNoCiAgICAgLy8gaXRzZWxmIGZpbmRzIGFuZCB0
cmllcyB0byBzY3JvbGwgb3ZlcmZsb3cgc2Nyb2xsZXJzLgotICAgIGRldGVybWluZVdoZWVsRXZl
bnRUYXJnZXQoZXZlbnQsIHJlc3VsdCwgZWxlbWVudCwgc2Nyb2xsYWJsZUNvbnRhaW5lciwgc2Ny
b2xsYWJsZUFyZWEsIGlzT3ZlcldpZGdldCk7Ci0KLSNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFU
Q0hJTkcpCi0gICAgaWYgKGV2ZW50LnBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VO
b25lICYmIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5v
bmUgJiYgbV9mcmFtZS5wYWdlKCkpCi0gICAgICAgIG1fZnJhbWUucGFnZSgpLT5yZXNldExhdGNo
aW5nU3RhdGUoKTsKLSNlbmRpZgotCi0gICAgcmVjb3JkV2hlZWxFdmVudEZvckRlbHRhRmlsdGVy
KGV2ZW50KTsKKyAgICBkZXRlcm1pbmVXaGVlbEV2ZW50VGFyZ2V0KGV2ZW50LCByZXN1bHQsIGVs
ZW1lbnQsIHNjcm9sbGFibGVBcmVhLCBpc092ZXJXaWRnZXQpOwogCiAgICAgaWYgKGVsZW1lbnQp
IHsKICAgICAgICAgaWYgKGlzT3ZlcldpZGdldCkgewogICAgICAgICAgICAgaWYgKFdlYWtQdHI8
V2lkZ2V0PiB3aWRnZXQgPSB3aWRnZXRGb3JFbGVtZW50KCplbGVtZW50KSkgewogICAgICAgICAg
ICAgICAgIGlmIChwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KGV2ZW50LCAqd2lkZ2V0LmdldCgpKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRlV2lkZ2V0V2hlZWxFdmVudChldmVu
dCwgd2lkZ2V0LCBzY3JvbGxhYmxlQXJlYSwgc2Nyb2xsYWJsZUNvbnRhaW5lci5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZVdpZGdldFdoZWVsRXZlbnQoZXZlbnQs
IHdpZGdldCwgc2Nyb2xsYWJsZUFyZWEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAg
LTI5NTMsOSArMjkzOSwxNSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQogICAgIGlmIChzY3JvbGxhYmxlQXJlYSkK
ICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRl
KGZhbHNlKTsKIAotICAgIC8vIEZJWE1FOiBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZygp
IGlzIG9ubHkgY2FsbGVkIGZvciBGcmFtZVZpZXcgc2Nyb2xsaW5nLCBub3Qgb3ZlcmZsb3cgc2Ny
b2xsaW5nLCB3aGljaCBpcyBjb25mdXNpbmcuCi0gICAgYm9vbCBoYW5kbGVkRXZlbnQgPSBwcm9j
ZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZyhldmVudCwgc2Nyb2xsYWJsZUNvbnRhaW5lci5nZXQo
KSwgc2Nyb2xsYWJsZUFyZWEpOwotICAgIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChl
dmVudCwgc2Nyb2xsYWJsZUFyZWEpOworICAgIGJvb2wgaGFuZGxlZEV2ZW50ID0gZmFsc2U7Cisj
aWYgRU5BQkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQorICAgIFdlYWtQdHI8U2Nyb2xsYWJsZUFy
ZWE+IGxhdGNoZWRTY3JvbGxhYmxlQXJlYTsKKyAgICBpZiAobV9mcmFtZS5wYWdlKCktPnNjcm9s
bExhdGNoaW5nQ29udHJvbGxlcigpLmxhdGNoaW5nQWxsb3dzU2Nyb2xsaW5nSW5GcmFtZShtX2Zy
YW1lLCBsYXRjaGVkU2Nyb2xsYWJsZUFyZWEpKSB7CisgICAgICAgIC8vIEZJWE1FOiBwcm9jZXNz
V2hlZWxFdmVudEZvclNjcm9sbGluZygpIGlzIG9ubHkgY2FsbGVkIGZvciBGcmFtZVZpZXcgc2Ny
b2xsaW5nLCBub3Qgb3ZlcmZsb3cgc2Nyb2xsaW5nLCB3aGljaCBpcyBjb25mdXNpbmcuCisgICAg
ICAgIGhhbmRsZWRFdmVudCA9IHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGV2ZW50LCBs
YXRjaGVkU2Nyb2xsYWJsZUFyZWEpOworICAgICAgICBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9s
bFNuYXAoZXZlbnQsIGxhdGNoZWRTY3JvbGxhYmxlQXJlYSk7CisgICAgfQorI2VuZGlmCiAgICAg
cmV0dXJuIGhhbmRsZWRFdmVudDsKIH0KIApAQCAtMjk2Nyw5ICsyOTU5LDEwIEBAIHZvaWQgRXZl
bnRIYW5kbGVyOjpjbGVhckxhdGNoZWRTdGF0ZSgpCiAKICNpZiBFTkFCTEUoV0hFRUxfRVZFTlRf
TEFUQ0hJTkcpCiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwg
IkV2ZW50SGFuZGxlcjo6Y2xlYXJMYXRjaGVkU3RhdGUoKSIpOwotICAgIHBhZ2UtPnJlc2V0TGF0
Y2hpbmdTdGF0ZSgpOworICAgIGlmIChhdXRvKiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgPSBw
YWdlLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpKQorICAgICAgICBzY3JvbGxM
YXRjaGluZ0NvbnRyb2xsZXItPnJlbW92ZUxhdGNoaW5nU3RhdGVGb3JGcmFtZShtX2ZyYW1lKTsK
ICNlbmRpZgotICAgIGlmIChhdXRvIGZpbHRlciA9IHBhZ2UtPndoZWVsRXZlbnREZWx0YUZpbHRl
cigpKQorICAgIGlmIChhdXRvKiBmaWx0ZXIgPSBwYWdlLT53aGVlbEV2ZW50RGVsdGFGaWx0ZXIo
KSkKICAgICAgICAgZmlsdGVyLT5lbmRGaWx0ZXJpbmdEZWx0YXMoKTsKIH0KIApAQCAtMjk3OCw2
ICsyOTcxLDkgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihO
b2RlKiBzdGFydE5vZGUsIFdoZWVsRXZlbnQmIHdoZWVsRXYKICAgICBpZiAoIXN0YXJ0Tm9kZSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAorICAgIGlmICghbV9mcmFtZS5wYWdlKCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGF1dG8gcHJvdGVjdGVkRnJhbWUgPSBtYWtlUmVmKG1fZnJhbWUpOwog
CiAgICAgRmxvYXRTaXplIGZpbHRlcmVkUGxhdGZvcm1EZWx0YSh3aGVlbEV2ZW50LmRlbHRhWCgp
LCB3aGVlbEV2ZW50LmRlbHRhWSgpKTsKQEAgLTI5ODgsMTAgKzI5ODQsMjkgQEAgdm9pZCBFdmVu
dEhhbmRsZXI6OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihOb2RlKiBzdGFydE5vZGUsIFdoZWVs
RXZlbnQmIHdoZWVsRXYKICAgICB9CiAKICNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcp
Ci0gICAgaWYgKG1fZnJhbWUucGFnZSgpICYmIG1fZnJhbWUucGFnZSgpLT53aGVlbEV2ZW50RGVs
dGFGaWx0ZXIoKS0+aXNGaWx0ZXJpbmdEZWx0YXMoKSkgeworICAgIGlmIChtX2ZyYW1lLnBhZ2Uo
KS0+d2hlZWxFdmVudERlbHRhRmlsdGVyKCktPmlzRmlsdGVyaW5nRGVsdGFzKCkpIHsKICAgICAg
ICAgZmlsdGVyZWRQbGF0Zm9ybURlbHRhID0gbV9mcmFtZS5wYWdlKCktPndoZWVsRXZlbnREZWx0
YUZpbHRlcigpLT5maWx0ZXJlZERlbHRhKCk7CiAgICAgICAgIGZpbHRlcmVkVmVsb2NpdHkgPSBt
X2ZyYW1lLnBhZ2UoKS0+d2hlZWxFdmVudERlbHRhRmlsdGVyKCktPmZpbHRlcmVkVmVsb2NpdHko
KTsKICAgICB9CisKKyAgICBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiBsYXRjaGVkU2Nyb2xsZXI7
CisgICAgaWYgKCFtX2ZyYW1lLnBhZ2UoKS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkubGF0
Y2hpbmdBbGxvd3NTY3JvbGxpbmdJbkZyYW1lKG1fZnJhbWUsIGxhdGNoZWRTY3JvbGxlcikpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChsYXRjaGVkU2Nyb2xsZXIpIHsKKyAgICAgICAgaWYg
KGxhdGNoZWRTY3JvbGxlciA9PSBtX2ZyYW1lLnZpZXcoKSkgeworICAgICAgICAgICAgLy8gRnJh
bWVWaWV3IHNjcm9sbGluZyBpcyBoYW5kbGVkIHZpYSBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9s
bGluZygpLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBw
bGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOworICAg
ICAgICBpZiAocGxhdGZvcm1FdmVudCkgeworICAgICAgICAgICAgYXV0byBjb3BpZWRFdmVudCA9
IHBsYXRmb3JtRXZlbnQtPmNvcHlXaXRoRGVsdGFzQW5kVmVsb2NpdHkoZmlsdGVyZWRQbGF0Zm9y
bURlbHRhLndpZHRoKCksIGZpbHRlcmVkUGxhdGZvcm1EZWx0YS5oZWlnaHQoKSwgZmlsdGVyZWRW
ZWxvY2l0eSk7CisgICAgICAgICAgICBpZiAobGF0Y2hlZFNjcm9sbGVyLT5oYW5kbGVXaGVlbEV2
ZW50KGNvcGllZEV2ZW50KSkKKyAgICAgICAgICAgICAgICB3aGVlbEV2ZW50LnNldERlZmF1bHRI
YW5kbGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAjZW5kaWYK
IAogICAgIGlmIChoYW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xvc2luZ0JveChzdGFy
dE5vZGUsIHdoZWVsRXZlbnQsIGZpbHRlcmVkUGxhdGZvcm1EZWx0YSwgZmlsdGVyZWRWZWxvY2l0
eSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCA2MTc5MDVlMDFiMWRkZjBkMWUw
YzFkNGVlYjgzNDhlNzllYWJiMmExLi44ZWIyYWNjMDY1ODQzMzIwMTc0YmVkZDM4ZGVkOTZiMWYx
N2Y1ZDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTQ1MSwxMyArNDUxLDEz
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQq
KTsKIAogICAgIGJvb2wgcGFzc1doZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmLCBXaWRnZXQmKTsKLSAgICB2b2lkIGRldGVybWluZVdoZWVsRXZlbnRUYXJnZXQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgY29uc3QgSGl0VGVzdFJlc3VsdCYsIFJlZlB0cjxFbGVt
ZW50PiYgZXZlbnRUYXJnZXQsIFJlZlB0cjxDb250YWluZXJOb2RlPiYgc2Nyb2xsYWJsZUNvbnRh
aW5lciwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mLCBib29sJiBpc092ZXJXaWRnZXQpOworICAg
IHZvaWQgZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
LCBjb25zdCBIaXRUZXN0UmVzdWx0JiwgUmVmUHRyPEVsZW1lbnQ+JiBldmVudFRhcmdldCwgV2Vh
a1B0cjxTY3JvbGxhYmxlQXJlYT4mLCBib29sJiBpc092ZXJXaWRnZXQpOwogICAgIHZvaWQgcmVj
b3JkV2hlZWxFdmVudEZvckRlbHRhRmlsdGVyKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwot
ICAgIGJvb2wgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lciwgY29uc3QgV2Vha1B0
cjxTY3JvbGxhYmxlQXJlYT4mKTsKKyAgICBib29sIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xs
aW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IFdlYWtQdHI8U2Nyb2xsYWJsZUFy
ZWE+Jik7CiAgICAgdm9pZCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiwgY29uc3QgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mKTsKLSAgICBi
b29sIGNvbXBsZXRlV2lkZ2V0V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBj
b25zdCBXZWFrUHRyPFdpZGdldD4mLCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYsIENv
bnRhaW5lck5vZGUqKTsKKyAgICBib29sIGNvbXBsZXRlV2lkZ2V0V2hlZWxFdmVudChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBXZWFrUHRyPFdpZGdldD4mLCBjb25zdCBXZWFrUHRy
PFNjcm9sbGFibGVBcmVhPiYpOwogCi0gICAgYm9vbCBwbGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1X
aWRnZXRXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IFdpZGdldCYs
IENvbnRhaW5lck5vZGUqIHNjcm9sbGFibGVDb250YWluZXIpOworICAgIGJvb2wgcGxhdGZvcm1D
b21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
LCBjb25zdCBXaWRnZXQmLCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYpOwogCiAgICAg
dm9pZCBkZWZhdWx0U3BhY2VFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCYpOwogICAgIHZvaWQg
ZGVmYXVsdEJhY2tzcGFjZUV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50Jik7CkBAIC01MDMsOCAr
NTAzLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGF1dG9IaWRlQ3Vyc29yVGltZXJGaXJlZCgpOwog
I2VuZGlmCiAKLSAgICB2b2lkIGNsZWFyT3JTY2hlZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZO
ZWVkZWQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0gICAgdm9pZCBjbGVhckxhdGNoZWRT
dGF0ZVRpbWVyRmlyZWQoKTsKICAgICB2b2lkIGNsZWFyTGF0Y2hlZFN0YXRlKCk7CiAKICAgICBi
b29sIHNob3VsZFNlbmRNb3VzZUV2ZW50c1RvSW5hY3RpdmVXaW5kb3dzKCkgY29uc3Q7CkBAIC01
MzYsMTAgKzUzNCw2IEBAIHByaXZhdGU6CiAgICAgVGltZXIgbV9ob3ZlclRpbWVyOwogICAgIGJv
b2wgbV9oYXNTY2hlZHVsZWRDdXJzb3JVcGRhdGUgeyBmYWxzZSB9OwogCi0jaWYgUExBVEZPUk0o
TUFDKQotICAgIFRpbWVyIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXI7Ci0jZW5kaWYKLQogICAg
IHN0ZDo6dW5pcXVlX3B0cjxBdXRvc2Nyb2xsQ29udHJvbGxlcj4gbV9hdXRvc2Nyb2xsQ29udHJv
bGxlcjsKICAgICBib29sIG1fbW91c2VEb3duTWF5U3RhcnRBdXRvc2Nyb2xsIHsgZmFsc2UgfTsK
ICAgICBib29sIG1fbW91c2VEb3duV2FzSW5TdWJmcmFtZSB7IGZhbHNlIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAppbmRleCBhNzc4MTBiMDIwYmY1YThkODUyMmNhYzhiMjViMzY5MjU4ODMyNTk3Li41NmRj
NWQ3YTA4MGVlYzkxYjFiNWVmMWIyOGMwNDNlZTZkNjQ0YWExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
QEAgLTExMiw3ICsxMTIsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCIKICNpbmNsdWRlICJTY3JpcHRlZEFuaW1hdGlv
bkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3JvbGxMYXRjaGluZ1N0YXRlLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgpAQCAtMjgzOCw3ICsyODM4LDcgQEAgdm9pZCBQYWdlOjpzdGFydE1vbml0b3JpbmdXaGVlbEV2
ZW50cyhib29sIGNsZWFyTGF0Y2hpbmdTdGF0ZSkKIAogI2lmIEVOQUJMRShXSEVFTF9FVkVOVF9M
QVRDSElORykKICAgICBpZiAoY2xlYXJMYXRjaGluZ1N0YXRlKQotICAgICAgICByZXNldExhdGNo
aW5nU3RhdGUoKTsKKyAgICAgICAgc2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkuY2xlYXIoKTsK
ICNlbmRpZgogCiAgICAgaWYgKGF1dG8qIGZyYW1lVmlldyA9IG1haW5GcmFtZSgpLnZpZXcoKSkg
ewpAQCAtMzE0MSw0MyArMzE0MSwxNyBAQCB2b2lkIFBhZ2U6OmFwcGxpY2F0aW9uRGlkQmVjb21l
QWN0aXZlKCkKIH0KIAogI2lmIEVOQUJMRShXSEVFTF9FVkVOVF9MQVRDSElORykKLVNjcm9sbExh
dGNoaW5nU3RhdGUqIFBhZ2U6OmxhdGNoaW5nU3RhdGUoKQorU2Nyb2xsTGF0Y2hpbmdDb250cm9s
bGVyJiBQYWdlOjpzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKQogewotICAgIGlmIChtX2xhdGNo
aW5nU3RhdGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVy
biAmbV9sYXRjaGluZ1N0YXRlLmxhc3QoKTsKLX0KLQotdm9pZCBQYWdlOjpwdXNoTmV3TGF0Y2hp
bmdTdGF0ZShTY3JvbGxMYXRjaGluZ1N0YXRlJiYgc3RhdGUpCi17Ci0gICAgbV9sYXRjaGluZ1N0
YXRlLmFwcGVuZChXVEZNb3ZlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgUGFnZTo6cmVzZXRMYXRjaGlu
Z1N0YXRlKCkKLXsKLSAgICBtX2xhdGNoaW5nU3RhdGUuY2xlYXIoKTsKKyAgICBpZiAoIW1fc2Ny
b2xsTGF0Y2hpbmdDb250cm9sbGVyKQorICAgICAgICBtX3Njcm9sbExhdGNoaW5nQ29udHJvbGxl
ciA9IG1ha2VVbmlxdWU8U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyPigpOworICAgICAgICAKKyAg
ICByZXR1cm4gKm1fc2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOwogfQogCi12b2lkIFBhZ2U6OnBv
cExhdGNoaW5nU3RhdGUoKQorU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKiBQYWdlOjpzY3JvbGxM
YXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpCiB7Ci0gICAgbV9sYXRjaGluZ1N0YXRlLnJlbW92
ZUxhc3QoKTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAi
UGFnZTo6cG9wTGF0Y2hpbmdTdGF0ZSgpIC0gbmV3IHN0YXRlICIgPDwgbV9sYXRjaGluZ1N0YXRl
KTsKLX0KLQotdm9pZCBQYWdlOjpyZW1vdmVMYXRjaGluZ1N0YXRlRm9yVGFyZ2V0KEVsZW1lbnQm
IHRhcmdldE5vZGUpCi17Ci0gICAgaWYgKG1fbGF0Y2hpbmdTdGF0ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fbGF0Y2hpbmdTdGF0ZS5yZW1vdmVBbGxNYXRjaGluZyhbJnRh
cmdldE5vZGVdIChTY3JvbGxMYXRjaGluZ1N0YXRlJiBzdGF0ZSkgewotICAgICAgICBhdXRvKiB3
aGVlbEVsZW1lbnQgPSBzdGF0ZS53aGVlbEV2ZW50RWxlbWVudCgpOwotICAgICAgICBpZiAoIXdo
ZWVsRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4g
dGFyZ2V0Tm9kZS5pc0VxdWFsTm9kZSh3aGVlbEVsZW1lbnQpOwotICAgIH0pOwotICAgIExPR19X
SVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJQYWdlOjpyZW1vdmVMYXRjaGlu
Z1N0YXRlRm9yVGFyZ2V0KCkgLSBuZXcgc3RhdGUgIiA8PCBtX2xhdGNoaW5nU3RhdGUpOworICAg
IHJldHVybiBtX3Njcm9sbExhdGNoaW5nQ29udHJvbGxlci5nZXQoKTsKIH0KICNlbmRpZiAvLyBF
TkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggYmU0NTQzMDBi
YmQwNzVkMGY4MThjOTk5YWNhOGYzNDkxZGM5OTZkMi4uMGFiMmJiNTUwMTk0MGJkNDFmZDEwMDNi
MzBlNjZjMGUwNzE3YTVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTEzMSw3ICsxMzEsNyBAQCBjbGFz
cyBQb2ludGVyTG9ja0NvbnRyb2xsZXI7CiBjbGFzcyBQcm9ncmVzc1RyYWNrZXI7CiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CiBjbGFzcyBSZXNvdXJjZVVzYWdlT3ZlcmxheTsKLWNsYXNzIFNjcm9sbExh
dGNoaW5nU3RhdGU7CitjbGFzcyBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI7CiBjbGFzcyBTY3Jv
bGxpbmdDb29yZGluYXRvcjsKIGNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7CiBjbGFz
cyBTZXR0aW5nczsKQEAgLTQ0OCwxMiArNDQ4LDggQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBF
TkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCi0gICAgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSogbGF0
Y2hpbmdTdGF0ZSgpOwotICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxMYXRjaGluZ1N0YXRlPiYgbGF0
Y2hpbmdTdGF0ZVN0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9sYXRjaGluZ1N0YXRlOyB9Ci0gICAg
dm9pZCBwdXNoTmV3TGF0Y2hpbmdTdGF0ZShTY3JvbGxMYXRjaGluZ1N0YXRlJiYpOwotICAgIHZv
aWQgcG9wTGF0Y2hpbmdTdGF0ZSgpOwotICAgIHZvaWQgcmVzZXRMYXRjaGluZ1N0YXRlKCk7Ci0g
ICAgdm9pZCByZW1vdmVMYXRjaGluZ1N0YXRlRm9yVGFyZ2V0KEVsZW1lbnQmKTsKKyAgICBTY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXImIHNjcm9sbExhdGNoaW5nQ29udHJvbGxlcigpOworICAgIFNj
cm9sbExhdGNoaW5nQ29udHJvbGxlciogc2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVySWZFeGlzdHMo
KTsKICNlbmRpZiAvLyBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCiAKICNpZiBFTkFCTEUo
QVBQTEVfUEFZKQpAQCAtMTAzOCw3ICsxMDM0LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxQZXJmb3JtYW5jZUxvZ2dpbmc+IG1fcGVyZm9ybWFuY2VMb2dnaW5nOwogI2lmIEVO
QUJMRShXSEVFTF9FVkVOVF9MQVRDSElORykKLSAgICBWZWN0b3I8U2Nyb2xsTGF0Y2hpbmdTdGF0
ZT4gbV9sYXRjaGluZ1N0YXRlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxMYXRjaGluZ0Nv
bnRyb2xsZXI+IG1fc2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOwogI2VuZGlmCiAjaWYgUExBVEZP
Uk0oTUFDKSAmJiAoRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVf
TlVNQkVSX0RFVEVDVElPTikpCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI+IG1fc2VydmljZXNPdmVybGF5Q29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQppbmRleCBjMWJlZjE1MzIwNDkwN2ZhOGJmMzgxMjFk
MDBhYzlkNzRiNmYyZWY0Li44NmI3NzZjMDY5NzQyYzY3MTgzM2RhODI4MDE3MTFlZDcyMjZiZjk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCkBAIC01OSw3
ICs1OSw3IEBACiAjaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKICNpbXBvcnQg
IlNjcmVlblByb3BlcnRpZXMuaCIKICNpbXBvcnQgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW1wb3J0
ICJTY3JvbGxMYXRjaGluZ1N0YXRlLmgiCisjaW1wb3J0ICJTY3JvbGxMYXRjaGluZ0NvbnRyb2xs
ZXIuaCIKICNpbXBvcnQgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW1wb3J0ICJTY3JvbGxiYXIuaCIK
ICNpbXBvcnQgIlNldHRpbmdzLmgiCkBAIC03ODQsNyArNzg0LDggQEAgc3RhdGljIFNjcm9sbGFi
bGVBcmVhKiBzY3JvbGxhYmxlQXJlYUZvckJveChSZW5kZXJCb3gmIGJveCkKIAogICAgIHJldHVy
biBib3gubGF5ZXIoKTsKIH0KLSAgICAKKworLy8gRklYTUU6IFRoaXMgY291bGQgYmUgd3JpdHRl
biBpbiB0ZXJtcyBvZiBTY3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKS4K
IHN0YXRpYyBDb250YWluZXJOb2RlKiBmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lcihD
b250YWluZXJOb2RlKiBub2RlLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQp
CiB7CiAgICAgYXV0byBiaWFzZWREZWx0YSA9IFNjcm9sbENvbnRyb2xsZXI6OndoZWVsRGVsdGFC
aWFzaW5nVG93YXJkc1ZlcnRpY2FsKHdoZWVsRXZlbnQpOwpAQCAtODE3LDQwICs4MTgsNiBAQCBz
dGF0aWMgQ29udGFpbmVyTm9kZSogZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXIoQ29u
dGFpbmVyTm9kZSogbm9kZSwgY29ucwogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMg
Ym9vbCBkZWx0YUlzUHJlZG9taW5hbnRseVZlcnRpY2FsKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVs
dGFZKQotewotICAgIHJldHVybiBzdGQ6OmFicyhkZWx0YVkpID4gc3RkOjphYnMoZGVsdGFYKTsK
LX0KLSAgICAKLXN0YXRpYyBib29sIHNjcm9sbGVkVG9FZGdlSW5Eb21pbmFudERpcmVjdGlvbihj
b25zdCBDb250YWluZXJOb2RlJiBjb250YWluZXIsIGNvbnN0IFNjcm9sbGFibGVBcmVhJiBhcmVh
LCBmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRhWSkKLXsKLSAgICBpZiAoIWNvbnRhaW5lci5yZW5k
ZXJlcigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghYXJlYS5jYW5IYXZlU2Ny
b2xsYmFycygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSA9IGNvbnRhaW5lci5yZW5kZXJlcigpLT5zdHlsZSgpOwotCi0gICAgaWYgKCFkZWx0
YUlzUHJlZG9taW5hbnRseVZlcnRpY2FsKGRlbHRhWCwgZGVsdGFZKSAmJiBkZWx0YVgpIHsKLSAg
ICAgICAgaWYgKHN0eWxlLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpIaWRkZW4pCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoZGVsdGFYIDwgMCkKLSAgICAgICAgICAg
IHJldHVybiBhcmVhLnNjcm9sbGVkVG9SaWdodCgpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IGFyZWEuc2Nyb2xsZWRUb0xlZnQoKTsKLSAgICB9Ci0KLSAgICBpZiAoc3R5bGUub3ZlcmZsb3dZ
KCkgPT0gT3ZlcmZsb3c6OkhpZGRlbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
ZGVsdGFZIDwgMCkKLSAgICAgICAgcmV0dXJuIGFyZWEuc2Nyb2xsZWRUb0JvdHRvbSgpOwotICAg
IAotICAgIHJldHVybiBhcmVhLnNjcm9sbGVkVG9Ub3AoKTsKLX0KLQogc3RhdGljIFdlYWtQdHI8
U2Nyb2xsYWJsZUFyZWE+IHNjcm9sbGFibGVBcmVhRm9yRXZlbnRUYXJnZXQoRWxlbWVudCogZXZl
bnRUYXJnZXQpCiB7CiAgICAgYXV0byogd2lkZ2V0ID0gRXZlbnRIYW5kbGVyOjp3aWRnZXRGb3JF
dmVudFRhcmdldChldmVudFRhcmdldCk7CkBAIC04NjksNDMgKzgzNiw2IEBAIHN0YXRpYyBib29s
IGV2ZW50VGFyZ2V0SXNQbGF0Zm9ybVdpZGdldChFbGVtZW50KiBldmVudFRhcmdldCkKICAgICBy
ZXR1cm4gd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpOwogfQogCi1zdGF0aWMgYm9vbCBsYXRjaGlu
Z0lzTG9ja2VkVG9QbGF0Zm9ybUZyYW1lKGNvbnN0IEZyYW1lJiBmcmFtZSkKLXsKLSAgICBhdXRv
KiBwYWdlID0gZnJhbWUucGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSogbGF0Y2hlZFN0YXRlID0gcGFnZS0+bGF0
Y2hpbmdTdGF0ZSgpOwotICAgIGlmICghbGF0Y2hlZFN0YXRlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoZnJhbWVIYXNQbGF0Zm9ybVdpZGdldChmcmFtZSkgJiYgJmZyYW1lICE9
IGxhdGNoZWRTdGF0ZS0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGxhdGNoaW5nSXNMb2NrZWRUb0FuY2VzdG9yT2ZU
aGlzRnJhbWUoY29uc3QgRnJhbWUmIGZyYW1lKQotewotICAgIGF1dG8qIHBhZ2UgPSBmcmFtZS5w
YWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTY3Jv
bGxMYXRjaGluZ1N0YXRlKiBsYXRjaGVkU3RhdGUgPSBwYWdlLT5sYXRjaGluZ1N0YXRlKCk7Ci0g
ICAgaWYgKCFsYXRjaGVkU3RhdGUgfHwgIWxhdGNoZWRTdGF0ZS0+ZnJhbWUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCZmcmFtZSA9PSBsYXRjaGVkU3RhdGUtPmZyYW1lKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoRnJhbWUqIGFuY2VzdG9yID0gZnJh
bWUudHJlZSgpLnBhcmVudCgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+dHJlZSgp
LnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChhbmNlc3RvciA9PSBsYXRjaGVkU3RhdGUtPmZyYW1l
KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCiBzdGF0aWMgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFyZWFG
b3JDb250YWluZXJOb2RlKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKIHsKICAgICBhdXRvIGJv
eCA9IGNvbnRhaW5lci5yZW5kZXJCb3goKTsKQEAgLTkxOSwxMTMgKzg0OSw0MiBAQCBzdGF0aWMg
V2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFyZWFGb3JDb250YWluZXJOb2RlKENv
bnRhaW5lck5vZGUmIGNvbgogICAgIHJldHVybiBtYWtlV2Vha1B0cigqc2Nyb2xsYWJsZUFyZWFQ
dHIpOwogfQogCi1zdGF0aWMgYm9vbCBsYXRjaGVkVG9GcmFtZU9yQm9keShDb250YWluZXJOb2Rl
JiBjb250YWluZXIpCi17Ci0gICAgLy8gRklYTUUoMTA2MTMzKTogV2UgbWlnaHQgbmVlZCB0byBh
ZGQgb3Igc3dpdGNoIHRvIGlzPEhUTUxEb2N1bWVudEVsZW1lbnQ+IHdoZW4gdGhpcyBidWcgaXMg
Zml4ZWQuCi0gICAgcmV0dXJuIGlzPEhUTUxGcmFtZVNldEVsZW1lbnQ+KGNvbnRhaW5lcikgfHwg
aXM8SFRNTEJvZHlFbGVtZW50Pihjb250YWluZXIpOwotfQotCi12b2lkIEV2ZW50SGFuZGxlcjo6
Y2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3RhdGVJZk5lZWRlZChjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmIGV2ZW50KQordm9pZCBFdmVudEhhbmRsZXI6OmRldGVybWluZVdoZWVsRXZl
bnRUYXJnZXQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBjb25zdCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIFJlZlB0cjxFbGVtZW50PiYgd2hlZWxFdmVudFRhcmdldCwgV2Vh
a1B0cjxTY3JvbGxhYmxlQXJlYT4mIHNjcm9sbGFibGVBcmVhLCBib29sJiBpc092ZXJXaWRnZXQp
CiB7Ci0gICAgaWYgKCFtX2ZyYW1lLmlzTWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFBsYXRmb3JtIGRvZXMgbm90IHByb3ZpZGUgYW4gaW5kaWNhdGlvbiB0aGF0IGl0IHdp
bGwgc3dpdGNoIGZyb20gbm9uLW1vbWVudHVtIHRvIG1vbWVudHVtIHNjcm9sbGluZwotICAgIC8v
IHdoZW4gaGFuZGxpbmcgd2hlZWwgZXZlbnRzLgotICAgIC8vIExvZ2ljIGJlbG93IGluc3RhbGxz
IGEgdGltZXIgd2hlbiBub24tbW9tZW50dW0gc2Nyb2xsaW5nIGVuZHMuIElmIG1vbWVudHVtIHNj
cm9sbCBkb2VzIG5vdCBzdGFydCB3aXRoaW4gdGhhdCBpbnRlcnZhbCwKLSAgICAvLyByZXNldCB0
aGUgbGF0Y2hlZCBzdGF0ZS4gSWYgaXQgZG9lcywgc3RvcCB0aGUgdGltZXIsIGxlYXZpbmcgdGhl
IGxhdGNoZWQgc3RhdGUgdW50b3VjaGVkLgotICAgIGlmICghbV9jbGVhckxhdGNoaW5nU3RhdGVU
aW1lci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGlmIChldmVudC5pc0VuZE9mTm9uTW9tZW50dW1T
Y3JvbGwoKSkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBz
dHJlYW0gPDwgIkV2ZW50SGFuZGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3Rh
dGVJZk5lZWRlZCgpIC0gZXZlbnQiIDw8IGV2ZW50IDw8ICIsIHNjaGVkdWxpbmcgY2xlYXIgdGlt
ZXIiKTsKLSAgICAgICAgICAgIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIuc3RhcnRPbmVTaG90
KHJlc2V0TGF0Y2hlZFN0YXRlVGltZW91dCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBJZiBhbm90aGVyIHdoZWVsIGV2ZW50IHNjcm9sbGluZyBzdGFydHMsIHN0b3AgdGhl
IHRpbWVyIG1hbnVhbGx5LCBhbmQgcmVzZXQgdGhlIGxhdGNoZWQgc3RhdGUgaW1tZWRpYXRlbHku
Ci0gICAgICAgIGlmIChldmVudC5zaG91bGRDb25zaWRlckxhdGNoaW5nKCkpIHsKLSAgICAgICAg
ICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRs
ZXI6OmNsZWFyT3JTY2hlZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQoKSAtIGV2ZW50
IiA8PCBldmVudCA8PCAiLCB0aW1lciBwZW5kaW5nLCBhbm90aGVyIHNjcm9sbCBzdGFydGluZyIp
OwotICAgICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKLSAgICAgICAg
ICAgICAgICBwYWdlLT5yZXNldExhdGNoaW5nU3RhdGUoKTsKLSAgICAgICAgICAgIG1fY2xlYXJM
YXRjaGluZ1N0YXRlVGltZXIuc3RvcCgpOwotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmlzVHJh
bnNpdGlvbmluZ1RvTW9tZW50dW1TY3JvbGwoKSkgewotICAgICAgICAgICAgLy8gV2hlZWwgZXZl
bnRzIG1hY2hpbmFyeSBpcyB0cmFuc2l0aW9uaW5nIHRvIG1vbWVudHVtIHNjcm9sbGluZywgc28g
bm8gbmVlZCB0byByZXNldCBsYXRjaGVkIHN0YXRlLiBTdG9wIHRoZSB0aW1lci4KLSAgICAgICAg
ICAgIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIuc3RvcCgpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIEV2ZW50SGFuZGxlcjo6ZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgUmVmUHRyPEVsZW1lbnQ+JiB3aGVlbEV2ZW50VGFyZ2V0LCBSZWZQdHI8Q29udGFpbmVyTm9k
ZT4mIHNjcm9sbGFibGVDb250YWluZXIsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxh
YmxlQXJlYSwgYm9vbCYgaXNPdmVyV2lkZ2V0KQotewotICAgIGNsZWFyT3JTY2hlZHVsZUNsZWFy
aW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQod2hlZWxFdmVudCk7Ci0KICAgICBhdXRvKiBwYWdlID0g
bV9mcmFtZS5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBh
dXRvKiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7Ci0KICAgICBpZiAoIXZpZXcpCi0gICAgICAgIHNj
cm9sbGFibGVDb250YWluZXIgPSB3aGVlbEV2ZW50VGFyZ2V0OworICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoZXZlbnRUYXJnZXRJc1BsYXRmb3JtV2lkZ2V0KHdoZWVsRXZlbnRUYXJnZXQuZ2V0
KCkpKQorICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhRm9yRXZlbnRUYXJn
ZXQod2hlZWxFdmVudFRhcmdldC5nZXQoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChldmVu
dFRhcmdldElzUGxhdGZvcm1XaWRnZXQod2hlZWxFdmVudFRhcmdldC5nZXQoKSkpIHsKLSAgICAg
ICAgICAgIHNjcm9sbGFibGVDb250YWluZXIgPSB3aGVlbEV2ZW50VGFyZ2V0OwotICAgICAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYUZvckV2ZW50VGFyZ2V0KHdoZWVsRXZl
bnRUYXJnZXQuZ2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2Nyb2xsYWJs
ZUNvbnRhaW5lciA9IGZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKHdoZWVsRXZlbnRU
YXJnZXQuZ2V0KCksIHdoZWVsRXZlbnQpOwotICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVDb250
YWluZXIgJiYgIWlzPEhUTUxJRnJhbWVFbGVtZW50Pih3aGVlbEV2ZW50VGFyZ2V0KSkKLSAgICAg
ICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhRm9yQ29udGFpbmVyTm9k
ZSgqc2Nyb2xsYWJsZUNvbnRhaW5lcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2h5IGRvZXMgdGhpcyBhc3N1bWUgdGhlIGJvZHk/IFdoYXQgaWYgd2Ug
aGl0IGFuIGlmcmFtZSBpbnNpZGUgYW4gb3ZlcmZsb3c6c2Nyb2xsPwotICAgICAgICAgICAgICAg
IHNjcm9sbGFibGVDb250YWluZXIgPSB2aWV3LT5mcmFtZSgpLmRvY3VtZW50KCktPmJvZHlPckZy
YW1lc2V0KCk7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBtYWtlV2Vha1B0cihz
dGF0aWNfY2FzdDxTY3JvbGxhYmxlQXJlYSY+KCp2aWV3KSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVu
dEhhbmRsZXI6OmRldGVybWluZVdoZWVsRXZlbnRUYXJnZXQoKSAtIGV2ZW50IiA8PCB3aGVlbEV2
ZW50IDw8ICIgZm91bmQgc2Nyb2xsYWJsZUNvbnRhaW5lciIgPDwgVmFsdWVPck51bGwoc2Nyb2xs
YWJsZUNvbnRhaW5lci5nZXQoKSkgPDwgIiBzY3JvbGxhYmxlQXJlYSAiIDw8IChzY3JvbGxhYmxl
QXJlYSA/IHNjcm9sbGFibGVBcmVhLmdldCgpIDogbnVsbHB0cikpOwotICAgICAgICB9CisgICAg
ICAgIGF1dG8qIHNjcm9sbGFibGVDb250YWluZXIgPSBmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNv
bnRhaW5lcih3aGVlbEV2ZW50VGFyZ2V0LmdldCgpLCB3aGVlbEV2ZW50KTsKKyAgICAgICAgaWYg
KHNjcm9sbGFibGVDb250YWluZXIpCisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHNjcm9s
bGFibGVBcmVhRm9yQ29udGFpbmVyTm9kZSgqc2Nyb2xsYWJsZUNvbnRhaW5lcik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gbWFrZVdlYWtQdHIoc3RhdGljX2Nh
c3Q8U2Nyb2xsYWJsZUFyZWEmPigqdmlldykpOwogICAgIH0KIAorICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRsZXI6OmRldGVybWluZVdoZWVs
RXZlbnRUYXJnZXQoKSAtIGV2ZW50IiA8PCB3aGVlbEV2ZW50IDw8ICIgZm91bmQgc2Nyb2xsYWJs
ZUFyZWEgIiA8PCBWYWx1ZU9yTnVsbChzY3JvbGxhYmxlQXJlYS5nZXQoKSkgPDwgIiwgbGF0Y2hp
bmcgc3RhdGUgaXMgIiA8PCBwYWdlLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKSk7CisKICAg
ICBpZiAoc2Nyb2xsYWJsZUFyZWEgJiYgcGFnZS0+aXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkK
ICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRl
c3RNb25pdG9yKHBhZ2UtPndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKIAotICAgIGF1dG8qIGxh
dGNoaW5nU3RhdGUgPSBwYWdlLT5sYXRjaGluZ1N0YXRlKCk7Ci0gICAgaWYgKHdoZWVsRXZlbnQu
c2hvdWxkQ29uc2lkZXJMYXRjaGluZygpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxhYmxlQ29udGFp
bmVyICYmIHNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBib29sIHN0YXJ0aW5nQXRTY3Jv
bGxMaW1pdCA9IHNjcm9sbGVkVG9FZGdlSW5Eb21pbmFudERpcmVjdGlvbigqc2Nyb2xsYWJsZUNv
bnRhaW5lciwgKnNjcm9sbGFibGVBcmVhLmdldCgpLCB3aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVl
bEV2ZW50LmRlbHRhWSgpKTsKLSAgICAgICAgICAgIGlmICghc3RhcnRpbmdBdFNjcm9sbExpbWl0
KSB7Ci0gICAgICAgICAgICAgICAgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSBsYXRjaGluZ1N0YXRlOwot
ICAgICAgICAgICAgICAgIGxhdGNoaW5nU3RhdGUuc2V0V2hlZWxFdmVudEVsZW1lbnQod2hlZWxF
dmVudFRhcmdldC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgbGF0Y2hpbmdTdGF0ZS5zZXRGcmFt
ZSgmbV9mcmFtZSk7Ci0gICAgICAgICAgICAgICAgbGF0Y2hpbmdTdGF0ZS5zZXRTY3JvbGxhYmxl
Q29udGFpbmVyKHNjcm9sbGFibGVDb250YWluZXIuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGxh
dGNoaW5nU3RhdGUuc2V0V2lkZ2V0SXNMYXRjaGVkKHJlc3VsdC5pc092ZXJXaWRnZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgcGFnZS0+cHVzaE5ld0xhdGNoaW5nU3RhdGUoV1RGTW92ZShsYXRjaGlu
Z1N0YXRlKSk7Ci0KLSAgICAgICAgICAgICAgICBwYWdlLT53aGVlbEV2ZW50RGVsdGFGaWx0ZXIo
KS0+YmVnaW5GaWx0ZXJpbmdEZWx0YXMoKTsKLSAgICAgICAgICAgICAgICBpc092ZXJXaWRnZXQg
PSByZXN1bHQuaXNPdmVyV2lkZ2V0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIExP
R19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRsZXI6OmRl
dGVybWluZVdoZWVsRXZlbnRUYXJnZXQoKSAtIGNvbnNpZGVyaW5nIGxhdGNoaW5nIGZvciAiIDw8
IHdoZWVsRXZlbnQgPDwgIiwgYXQgc2Nyb2xsIGxpbWl0ICIgPDwgc3RhcnRpbmdBdFNjcm9sbExp
bWl0IDw8ICIsIGxhdGNoaW5nIHN0YXRlICIgPDwgcGFnZS0+bGF0Y2hpbmdTdGF0ZVN0YWNrKCkp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh3aGVlbEV2ZW50LnNob3VsZFJlc2V0TGF0Y2hp
bmcoKSkgewotICAgICAgICBjbGVhckxhdGNoZWRTdGF0ZSgpOwotICAgICAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAiRXZlbnRIYW5kbGVyOjpkZXRlcm1pbmVX
aGVlbEV2ZW50VGFyZ2V0KCkgLSByZXNldCBsYXRjaGluZyBmb3IgZXZlbnQgIiA8PCB3aGVlbEV2
ZW50IDw8ICIgbGF0Y2hpbmcgc3RhdGUgIiA8PCBwYWdlLT5sYXRjaGluZ1N0YXRlU3RhY2soKSk7
Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoaXMgY2FuIHVzZSBhIHN0YWxlIGxhY2hpbmcgc3Rh
dGUsIGJlZm9yZSB3ZSBqdXN0IHB1c2hlZCBvciBjbGVhcmVkLgotICAgIGlmICghd2hlZWxFdmVu
dC5zaG91bGRSZXNldExhdGNoaW5nKCkgJiYgbGF0Y2hpbmdTdGF0ZSAmJiBsYXRjaGluZ1N0YXRl
LT53aGVlbEV2ZW50RWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChsYXRjaGluZ0lzTG9ja2VkVG9Q
bGF0Zm9ybUZyYW1lKG1fZnJhbWUpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICh3aGVl
bEV2ZW50LnNob3VsZFJlc2V0TGF0Y2hpbmcoKSB8fCB3aGVlbEV2ZW50LmlzTm9uR2VzdHVyZUV2
ZW50KCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAobGF0Y2hpbmdJc0xvY2tlZFRv
QW5jZXN0b3JPZlRoaXNGcmFtZShtX2ZyYW1lKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBt
X2ZyYW1lLnBhZ2UoKS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkudXBkYXRlTGF0Y2hpbmdT
dGF0ZUZvckZyYW1lKG1fZnJhbWUsIHdoZWVsRXZlbnQsIHdoZWVsRXZlbnRUYXJnZXQuZ2V0KCks
IHNjcm9sbGFibGVBcmVhLmdldCgpLCByZXN1bHQuaXNPdmVyV2lkZ2V0KCkpOwogCi0gICAgICAg
IHdoZWVsRXZlbnRUYXJnZXQgPSBsYXRjaGluZ1N0YXRlLT53aGVlbEV2ZW50RWxlbWVudCgpOwot
ICAgICAgICBpc092ZXJXaWRnZXQgPSBsYXRjaGluZ1N0YXRlLT53aWRnZXRJc0xhdGNoZWQoKTsK
LSAgICAgICAgc2Nyb2xsYWJsZUNvbnRhaW5lciA9IGxhdGNoaW5nU3RhdGUtPnNjcm9sbGFibGVD
b250YWluZXIoKTsKKy8vICAgcGFnZS0+d2hlZWxFdmVudERlbHRhRmlsdGVyKCktPmJlZ2luRmls
dGVyaW5nRGVsdGFzKCk7IC8vIFdoeSBoZXJlPworICAgICAgICAKKy8vICAgIGlmIChsYXRjaGlu
Z0lzTG9ja2VkVG9QbGF0Zm9ybUZyYW1lKG1fZnJhbWUpKQorLy8gICAgICAgIHJldHVybjsKIAot
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUNvbnRhaW5lcikgewotICAgICAgICAgICAgaWYgKCFsYXRj
aGVkVG9GcmFtZU9yQm9keSgqc2Nyb2xsYWJsZUNvbnRhaW5lcikgJiYgIWxhdGNoaW5nU3RhdGUt
PndpZGdldElzTGF0Y2hlZCgpKQotICAgICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gc2Ny
b2xsYWJsZUFyZWFGb3JDb250YWluZXJOb2RlKCpzY3JvbGxhYmxlQ29udGFpbmVyKTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBtX2ZyYW1lLnBhZ2UoKS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVy
KCkuZ2V0TGF0Y2hpbmdTdGF0ZUZvckZyYW1lKG1fZnJhbWUsIHdoZWVsRXZlbnRUYXJnZXQsIHNj
cm9sbGFibGVBcmVhLCBpc092ZXJXaWRnZXQpOwogfQogCiB2b2lkIEV2ZW50SGFuZGxlcjo6cmVj
b3JkV2hlZWxFdmVudEZvckRlbHRhRmlsdGVyKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCkKQEAgLTEwNDcsNTQgKzkwNiw0NyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6cmVjb3Jk
V2hlZWxFdmVudEZvckRlbHRhRmlsdGVyKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZQog
ICAgIHBhZ2UtPndoZWVsRXZlbnREZWx0YUZpbHRlcigpLT51cGRhdGVGcm9tRGVsdGEoRmxvYXRT
aXplKHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZKCkpKTsKIH0KIAotc3Rh
dGljIEZyYW1lVmlldyogZnJhbWVWaWV3Rm9yTGF0Y2hpbmdTdGF0ZShGcmFtZSYgZnJhbWUsIGNv
bnN0IFNjcm9sbExhdGNoaW5nU3RhdGUmIGxhdGNoaW5nU3RhdGUpCisvLyBGSVhNRTogVGhlIGNh
bGxlciBhbHJlYWR5IGNoZWNrZWQgZm9yIGxhdGNoaW5nLgorYm9vbCBFdmVudEhhbmRsZXI6OnBy
b2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCwgY29uc3QgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mIHNjcm9sbGFibGVBcmVhKQog
ewotICAgIGlmIChsYXRjaGluZ0lzTG9ja2VkVG9QbGF0Zm9ybUZyYW1lKGZyYW1lKSkKLSAgICAg
ICAgcmV0dXJuIGZyYW1lLnZpZXcoKTsKLQotICAgIHJldHVybiBsYXRjaGluZ1N0YXRlLmZyYW1l
KCkgPyBsYXRjaGluZ1N0YXRlLmZyYW1lKCktPnZpZXcoKSA6IGZyYW1lLnZpZXcoKTsKLX0KLQot
Ym9vbCBFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNv
bnRhaW5lciwgY29uc3QgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mIHNjcm9sbGFibGVBcmVhKQot
ewotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVudEhh
bmRsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nICIgPDwgd2hlZWxFdmVudCA8PCAi
IC0gc2Nyb2xsYWJsZUNvbnRhaW5lciAiIDw8IHNjcm9sbGFibGVDb250YWluZXIgPDwgIiBzY3Jv
bGxhYmxlQXJlYSAiIDw8IHNjcm9sbGFibGVBcmVhLmdldCgpIDw8ICIgdXNlIGxhdGNoZWQgZWxl
bWVudCAiIDw8IHdoZWVsRXZlbnQudXNlTGF0Y2hlZEV2ZW50RWxlbWVudCgpKTsKKyAgICBVTlVT
RURfUEFSQU0oc2Nyb2xsYWJsZUFyZWEpOworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRj
aGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xs
aW5nICIgPDwgd2hlZWxFdmVudCA8PCAiIC0gc2Nyb2xsYWJsZUFyZWEgIiA8PCBWYWx1ZU9yTnVs
bChzY3JvbGxhYmxlQXJlYS5nZXQoKSkgPDwgIiB1c2UgbGF0Y2hlZCBlbGVtZW50ICIgPDwgd2hl
ZWxFdmVudC51c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkpOwogCiAgICAgUmVmPEZyYW1lPiBwcm90
ZWN0ZWRGcmFtZShtX2ZyYW1lKTsKIAorICAgIGlmICghbV9mcmFtZS5wYWdlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKwogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUudmlldygpOwog
ICAgIC8vIFdlIGRvIGFub3RoZXIgY2hlY2sgb24gdGhlIGZyYW1lIHZpZXcgYmVjYXVzZSB0aGUg
ZXZlbnQgaGFuZGxlciBjYW4gcnVuIEpTIHdoaWNoIHJlc3VsdHMgaW4gdGhlIGZyYW1lIGdldHRp
bmcgZGVzdHJveWVkLgogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgY29uc3QgYXV0byogbGF0Y2hpbmdTdGF0ZSA9IG1fZnJhbWUucGFnZSgpID8gbV9mcmFtZS5w
YWdlKCktPmxhdGNoaW5nU3RhdGUoKSA6IG51bGxwdHI7CisgICAgV2Vha1B0cjxTY3JvbGxhYmxl
QXJlYT4gbGF0Y2hlZFNjcm9sbGFibGVBcmVhOworICAgIGlmICghbV9mcmFtZS5wYWdlKCktPnNj
cm9sbExhdGNoaW5nQ29udHJvbGxlcigpLmxhdGNoaW5nQWxsb3dzU2Nyb2xsaW5nSW5GcmFtZSht
X2ZyYW1lLCBsYXRjaGVkU2Nyb2xsYWJsZUFyZWEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBXZSBoYW5kbGUgbm9uLXZpZXcgc2Nyb2xsYWJsZUFyZWFzIGVsc2V3aGVyZS4KKyAg
ICBpZiAod2hlZWxFdmVudC51c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgJiYgbGF0Y2hlZFNjcm9s
bGFibGVBcmVhKSB7CisgICAgICAgIEFTU0VSVChsYXRjaGVkU2Nyb2xsYWJsZUFyZWEgPT0gc2Ny
b2xsYWJsZUFyZWEuZ2V0KCkpOwogCi0gICAgaWYgKHdoZWVsRXZlbnQudXNlTGF0Y2hlZEV2ZW50
RWxlbWVudCgpICYmICFsYXRjaGluZ0lzTG9ja2VkVG9BbmNlc3Rvck9mVGhpc0ZyYW1lKG1fZnJh
bWUpICYmIGxhdGNoaW5nU3RhdGUgJiYgbGF0Y2hpbmdTdGF0ZS0+c2Nyb2xsYWJsZUNvbnRhaW5l
cigpKSB7CiAgICAgICAgIG1faXNIYW5kbGluZ1doZWVsRXZlbnQgPSBmYWxzZTsKIAotICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAiICBsYXRjaGluZyBz
dGF0ZSAiIDw8ICpsYXRjaGluZ1N0YXRlKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9s
bExhdGNoaW5nLCBzdHJlYW0gPDwgIiAgbGF0Y2hpbmcgc3RhdGUgIiA8PCBtX2ZyYW1lLnBhZ2Uo
KS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkpOwogCi0gICAgICAgIC8vIFdlYktpdDIgY29k
ZSBwYXRoCi0gICAgICAgIGlmICghZnJhbWVIYXNQbGF0Zm9ybVdpZGdldChtX2ZyYW1lKSAmJiBz
Y3JvbGxhYmxlQ29udGFpbmVyID09IGxhdGNoaW5nU3RhdGUtPnNjcm9sbGFibGVDb250YWluZXIo
KSAmJiBzY3JvbGxhYmxlQXJlYSAmJiB2aWV3ICE9IHNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAg
ICAgICAvLyBJZiB3ZSBkaWQgbm90IHN0YXJ0IGF0IHRoZSBzY3JvbGwgbGltaXQsIGRvIG5vdCBw
YXNzIHRoZSBldmVudCBvbiB0byBiZSBoYW5kbGVkIGJ5IGVuY2xvc2luZyBzY3JvbGxhYmxlIHJl
Z2lvbnMuCi0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwg
IkV2ZW50SGFuZGxlciAiIDw8IHRoaXMgPDwgIiBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGlu
ZyAtIGxhdGNoZWQgdG8gIiA8PCBzY3JvbGxhYmxlQXJlYS5nZXQoKSA8PCAiIGFuZCBub3QgcHJv
cGFnYXRpbmciKTsKKyAgICAgICAgaWYgKCFmcmFtZUhhc1BsYXRmb3JtV2lkZ2V0KG1fZnJhbWUp
ICYmIGxhdGNoZWRTY3JvbGxhYmxlQXJlYSAhPSB2aWV3KSB7CisgICAgICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIiAgbGF0Y2hlZCB0byBub24tdmlldyBzY3Jv
bGxlciAiIDw8IGxhdGNoZWRTY3JvbGxhYmxlQXJlYSA8PCAiIGFuZCBub3QgcHJvcGFnYXRpbmci
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gRklY
TUU6IFRoaXMgc2V0ICd2aWV3JyB0byBhIEZyYW1lVmlldyB0aGF0IGlzIG5vdCB0aGlzIEV2ZW50
SGFuZGxlcidzIEZyYW1lVmlldywgd2hpY2ggdGhlbiBnZXRzIHNjcm9sbGVkIGZyb20gaGVyZSwg
d2hpY2ggaXMgd3JvbmcuCi0gICAgICAgIHZpZXcgPSBmcmFtZVZpZXdGb3JMYXRjaGluZ1N0YXRl
KG1fZnJhbWUsICpsYXRjaGluZ1N0YXRlKTsKLSAgICAgICAgQVNTRVJUKHZpZXcpOworICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAiIHNlbmRpbmcgdG8g
dmlldyAiIDw8ICp2aWV3KTsKIAogICAgICAgICBib29sIGRpZEhhbmRsZVdoZWVsRXZlbnQgPSB2
aWV3LT53aGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICBpZiAoc2Nyb2xsYWJsZUNvbnRh
aW5lciA9PSBsYXRjaGluZ1N0YXRlLT5zY3JvbGxhYmxlQ29udGFpbmVyKCkpIHsKLSAgICAgICAg
ICAgIC8vIElmIHdlIGFyZSBqdXN0IHN0YXJ0aW5nIGEgc2Nyb2xsIGV2ZW50LCBhbmQgaGF2ZSBu
b3doZXJlIGxlZnQgdG8gc2Nyb2xsLCBhbGxvdwotICAgICAgICAgICAgLy8gdGhlIGVuY2xvc2lu
ZyBmcmFtZSB0byBoYW5kbGUgdGhlIHNjcm9sbC4KLSAgICAgICAgICAgIGRpZEhhbmRsZVdoZWVs
RXZlbnQgPSB0cnVlOwotICAgICAgICB9Ci0KICAgICAgICAgLy8gSWYgdGhlIHBsYXRmb3JtIHdp
ZGdldCBpcyBoYW5kbGluZyB0aGUgZXZlbnQsIHdlIGFsd2F5cyB3YW50IHRvIHJldHVybiBmYWxz
ZS4KLSAgICAgICAgaWYgKHNjcm9sbGFibGVBcmVhID09IHZpZXcgJiYgdmlldy0+cGxhdGZvcm1X
aWRnZXQoKSkKKyAgICAgICAgaWYgKHZpZXctPnBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgICAg
ICBkaWRIYW5kbGVXaGVlbEV2ZW50ID0gZmFsc2U7Ci0gICAgICAgIAorCisgICAgICAgIExPR19X
SVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICIgIEV2ZW50SGFuZGxlcjo6cHJv
Y2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcgcmV0dXJuaW5nICIgPDwgZGlkSGFuZGxlV2hlZWxF
dmVudCk7CiAgICAgICAgIHJldHVybiBkaWRIYW5kbGVXaGVlbEV2ZW50OwogICAgIH0KICAgICAK
QEAgLTExMDMsMjAgKzk1NSwyMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6cHJvY2Vzc1doZWVsRXZl
bnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbAogICAgIHJldHVy
biBkaWRIYW5kbGVFdmVudDsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxl
dGVQbGF0Zm9ybVdpZGdldFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVl
bEV2ZW50LCBjb25zdCBXaWRnZXQmIHdpZGdldCwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNv
bnRhaW5lcikKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1XaWRn
ZXRXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgY29uc3Qg
V2lkZ2V0JiB3aWRnZXQsIGNvbnN0IFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxl
QXJlYSkKIHsKICAgICAvLyBXZWJLaXQxOiBQcmV2ZW50IG11bHRpcGxlIGNvcGllcyBvZiB0aGUg
c2Nyb2xsV2hlZWwgZXZlbnQgZnJvbSBiZWluZyBzZW50IHRvIHRoZSBOU1Njcm9sbFZpZXcgd2lk
Z2V0LgogICAgIGlmIChmcmFtZUhhc1BsYXRmb3JtV2lkZ2V0KG1fZnJhbWUpICYmIHdpZGdldC5p
c0ZyYW1lVmlldygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGNvbnN0IGF1dG8qIGxh
dGNoaW5nU3RhdGUgPSBtX2ZyYW1lLnBhZ2UoKSA/IG1fZnJhbWUucGFnZSgpLT5sYXRjaGluZ1N0
YXRlKCkgOiBudWxscHRyOwotICAgIGlmICghbGF0Y2hpbmdTdGF0ZSkKKyAgICBpZiAoIW1fZnJh
bWUucGFnZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAod2hlZWxFdmVudC51
c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgJiYgbGF0Y2hpbmdTdGF0ZS0+c2Nyb2xsYWJsZUNvbnRh
aW5lcigpICYmIHNjcm9sbGFibGVDb250YWluZXIgPT0gbGF0Y2hpbmdTdGF0ZS0+c2Nyb2xsYWJs
ZUNvbnRhaW5lcigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBXZWFrUHRyPFNjcm9sbGFi
bGVBcmVhPiBsYXRjaGVkU2Nyb2xsYWJsZUFyZWE7CisgICAgaWYgKCFtX2ZyYW1lLnBhZ2UoKS0+
c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkubGF0Y2hpbmdBbGxvd3NTY3JvbGxpbmdJbkZyYW1l
KG1fZnJhbWUsIGxhdGNoZWRTY3JvbGxhYmxlQXJlYSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gd2hlZWxFdmVudC51c2VMYXRjaGVkRXZl
bnRFbGVtZW50KCkgJiYgbGF0Y2hlZFNjcm9sbGFibGVBcmVhICYmIHNjcm9sbGFibGVBcmVhID09
IGxhdGNoZWRTY3JvbGxhYmxlQXJlYTsKIH0KIAogdm9pZCBFdmVudEhhbmRsZXI6OnByb2Nlc3NX
aGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZl
bnQsIGNvbnN0IFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSkKQEAgLTEx
MjksNyArOTgxLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Ny
b2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWUKICAgICAgICAgcmV0dXJuOwog
CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNj
cm9sbEFuaW1hdG9yID0gc2Nyb2xsYWJsZUFyZWEtPmV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkK
KyAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBzY3JvbGxhYmxlQXJlYS0+ZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQogICAgICAgICBzY3JvbGxBbmltYXRvci0+cHJvY2Vzc1doZWVsRXZl
bnRGb3JTY3JvbGxTbmFwKHdoZWVsRXZlbnQpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43OTJkZjJkZGJiMDk5ODFlZWMyNTZiNDI0ZGI3MTI1OWNhMmM1YmFlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0
Y2hpbmdDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuaCIKKwor
I2lmIEVOQUJMRShXSEVFTF9FVkVOVF9MQVRDSElORykKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJl
YS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBTZWUgYWxzbyBTY3JvbGxUcmVlTGF0Y2hpbmdDb250cm9sbGVyLmNwcAorc3Rh
dGljIGNvbnN0IFNlY29uZHMgcmVzZXRMYXRjaGVkU3RhdGVUaW1lb3V0IHsgMTAwX21zIH07CisK
K1Njcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkKKyAg
ICA6IG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIoKnRoaXMsICZTY3JvbGxMYXRjaGluZ0NvbnRy
b2xsZXI6OmNsZWFyVGltZXJGaXJlZCkKK3sKK30KKworU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVy
Ojp+U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkgPSBkZWZhdWx0OworCit2b2lkIFNjcm9sbExh
dGNoaW5nQ29udHJvbGxlcjo6Y2xlYXIoKQoreworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxM
YXRjaGluZywgc3RyZWFtIDw8ICJTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OmNsZWFyKCkiKTsK
KyAgICBtX2N1bXVsYXRpdmVFdmVudERlbHRhID0geyB9OworICAgIG1fZnJhbWVTdGF0ZVN0YWNr
LmNsZWFyKCk7Cit9CisKKy8vIEZJWE1FOiBUaGlzIGxvZ2ljIGlzIGRpZmZlcmVudCBmcm1vIFNj
cm9sbGluZ1RyZWVMYXRjaGluZ0NvbnRyb2xsZXIsIHdoaWNoIHNpbXBseSBsZXRzIHRoZSBsYXRj
aGluZyBzdGF0ZSBlbGFwc2UgYWZ0ZXIgMTAwbXMuCit2b2lkIFNjcm9sbExhdGNoaW5nQ29udHJv
bGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJJZk5lZWRlZChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYgKHdoZWVsRXZlbnQuc2hvdWxkUmVzZXRMYXRjaGlu
ZygpIHx8IHdoZWVsRXZlbnQuaXNOb25HZXN0dXJlRXZlbnQoKSkgeworICAgICAgICBjbGVhcigp
OworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAiU2Ny
b2xsTGF0Y2hpbmdDb250cm9sbGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcmluZ0xhdGNoZWRTdGF0
ZUlmTmVlZGVkKCkgLSBldmVudCIgPDwgd2hlZWxFdmVudCA8PCAiLCByZXNldHRpbmcgbGF0Y2hp
bmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2NsZWFyTGF0Y2hpbmdT
dGF0ZVRpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgLy8gSWYgYW5vdGhlciB3aGVlbCBldmVu
dCBzY3JvbGxpbmcgc3RhcnRzLCBzdG9wIHRoZSB0aW1lciBtYW51YWxseSwgYW5kIHJlc2V0IHRo
ZSBsYXRjaGVkIHN0YXRlIGltbWVkaWF0ZWx5LgorICAgICAgICBpZiAod2hlZWxFdmVudC5pc0dl
c3R1cmVTdGFydCgpKSB7CisgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsTGF0Y2hp
bmcsIHN0cmVhbSA8PCAiU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpjbGVhck9yU2NoZWR1bGVD
bGVhcmluZ0xhdGNoZWRTdGF0ZUlmTmVlZGVkKCkgLSBldmVudCIgPDwgd2hlZWxFdmVudCA8PCAi
LCB0aW1lciBwZW5kaW5nLCBhbm90aGVyIHNjcm9sbCBzdGFydGluZyIpOworICAgICAgICAgICAg
Y2xlYXIoKTsKKyAgICAgICAgICAgIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIuc3RvcCgpOwor
ICAgICAgICB9IGVsc2UgaWYgKHdoZWVsRXZlbnQuaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNj
cm9sbCgpKSB7CisgICAgICAgICAgICAvLyBXaGVlbCBldmVudHMgbWFjaGluZXJ5IGlzIHRyYW5z
aXRpb25pbmcgdG8gbW9tZW50dW0gc2Nyb2xsaW5nLCBzbyBubyBuZWVkIHRvIHJlc2V0IGxhdGNo
ZWQgc3RhdGUuIFN0b3AgdGhlIHRpbWVyLgorICAgICAgICAgICAgbV9jbGVhckxhdGNoaW5nU3Rh
dGVUaW1lci5zdG9wKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICh3aGVlbEV2ZW50LmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpKSB7CisgICAgICAgIExP
R19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJTY3JvbGxMYXRjaGluZ0Nv
bnRyb2xsZXI6OmNsZWFyT3JTY2hlZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQoKSAt
IGV2ZW50IiA8PCB3aGVlbEV2ZW50IDw8ICIsIHNjaGVkdWxpbmcgY2xlYXIgdGltZXIiKTsKKyAg
ICAgICAgbV9jbGVhckxhdGNoaW5nU3RhdGVUaW1lci5zdGFydE9uZVNob3QocmVzZXRMYXRjaGVk
U3RhdGVUaW1lb3V0KTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVy
OjpjbGVhclRpbWVyRmlyZWQoKQoreworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGlu
Zywgc3RyZWFtIDw8ICJTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OmNsZWFyVGltZXJGaXJlZCgp
IC0gY2xlYXJpbmcgc3RhdGUiKTsKKyAgICBjbGVhcigpOworfQorCit2b2lkIFNjcm9sbExhdGNo
aW5nQ29udHJvbGxlcjo6cmVjZWl2ZWRXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVu
dCYgd2hlZWxFdmVudCkKK3sKKyAgICBjbGVhck9yU2NoZWR1bGVDbGVhcklmTmVlZGVkKHdoZWVs
RXZlbnQpOworCisgICAgaWYgKHdoZWVsRXZlbnQuaXNHZXN0dXJlU3RhcnQoKSB8fCB3aGVlbEV2
ZW50LmlzTm9uR2VzdHVyZUV2ZW50KCkpCisgICAgICAgIG1fY3VtdWxhdGl2ZUV2ZW50RGVsdGEg
PSB3aGVlbEV2ZW50LmRlbHRhKCk7CisgICAgZWxzZQorICAgICAgICBtX2N1bXVsYXRpdmVFdmVu
dERlbHRhICs9IHdoZWVsRXZlbnQuZGVsdGEoKTsKK30KKworYm9vbCBTY3JvbGxMYXRjaGluZ0Nv
bnRyb2xsZXI6OmxhdGNoaW5nQWxsb3dzU2Nyb2xsaW5nSW5GcmFtZShjb25zdCBGcmFtZSYgZnJh
bWUsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBsYXRjaGVkU2Nyb2xsZXIpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fZnJhbWVTdGF0ZVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoYXV0byogZnJhbWVTdGF0ZSA9IHN0YXRlRm9yRnJhbWUoZnJhbWUpKSB7Cisg
ICAgICAgIGxhdGNoZWRTY3JvbGxlciA9IGZyYW1lU3RhdGUtPnNjcm9sbGFibGVBcmVhOworICAg
ICAgICByZXR1cm4gISFmcmFtZVN0YXRlLT5zY3JvbGxhYmxlQXJlYTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6dXBkYXRlTGF0
Y2hpbmdTdGF0ZUZvckZyYW1lKEZyYW1lJiBmcmFtZSwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiB3aGVlbEV2ZW50LCBFbGVtZW50KiBsYXRjaGVkRWxlbWVudCwgU2Nyb2xsYWJsZUFyZWEqIHNj
cm9sbExhdGNoaW5nQ2FuZGlkYXRlLCBib29sIGlzT3ZlcldpZGdldCkKK3sKKyAgICBpZiAod2hl
ZWxFdmVudC5pc0dlc3R1cmVTdGFydCgpKSB7CisgICAgICAgIC8vIFdlIGNhbiBoYXZlIGV4aXN0
aW5nIHN0YXRlIGhlcmUgYmVjYXVzZSBzdGF0ZSBpcyBjbGVhcmVkIG9uIGEgdGltZXIuCisgICAg
ICAgIGlmICghaGFzU3RhdGVGb3JGcmFtZShmcmFtZSkpIHsKKyAgICAgICAgICAgIEZyYW1lU3Rh
dGUgc3RhdGU7CisgICAgICAgICAgICBzdGF0ZS5mcmFtZSA9ICZmcmFtZTsKKyAgICAgICAgICAg
IHN0YXRlLndoZWVsRXZlbnRFbGVtZW50ID0gbWFrZVdlYWtQdHIobGF0Y2hlZEVsZW1lbnQpOwor
ICAgICAgICAgICAgaWYgKHNob3VsZExhdGNoVG9TY3JvbGxhYmxlQXJlYShmcmFtZSwgc2Nyb2xs
TGF0Y2hpbmdDYW5kaWRhdGUsIG1fY3VtdWxhdGl2ZUV2ZW50RGVsdGEpKQorICAgICAgICAgICAg
ICAgIHN0YXRlLnNjcm9sbGFibGVBcmVhID0gbWFrZVdlYWtQdHIoc2Nyb2xsTGF0Y2hpbmdDYW5k
aWRhdGUpOworICAgICAgICAgICAgc3RhdGUuaXNPdmVyV2lkZ2V0ID0gaXNPdmVyV2lkZ2V0Owor
CisgICAgICAgICAgICBtX2ZyYW1lU3RhdGVTdGFjay5hcHBlbmQoV1RGTW92ZShzdGF0ZSkpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAod2hlZWxFdmVudC5p
c0dlc3R1cmVDb250aW51YXRpb24oKSkgeworICAgICAgICBhdXRvKiBzdGF0ZSA9IHN0YXRlRm9y
RnJhbWUoZnJhbWUpOworICAgICAgICBpZiAoIXN0YXRlKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIC8vIFdlIG1heSBub3QgaGF2ZSBsYXRjaGVkIGF0IGdlc3R1cmUgc3RhcnQgYmVj
YXVzZSBvZiBzbWFsbCBkZWx0YXMuIFJlLWV2YWx1YXRlIGxhdGNoaW5nIGJhc2VkIG9uIGFjY3Vt
dWxhdGVkIGRlbHRhLgorICAgICAgICBpZiAoIXN0YXRlLT5zY3JvbGxhYmxlQXJlYSAmJiBzaG91
bGRMYXRjaFRvU2Nyb2xsYWJsZUFyZWEoZnJhbWUsIHNjcm9sbExhdGNoaW5nQ2FuZGlkYXRlLCBt
X2N1bXVsYXRpdmVFdmVudERlbHRhKSkKKyAgICAgICAgICAgIHN0YXRlLT5zY3JvbGxhYmxlQXJl
YSA9IG1ha2VXZWFrUHRyKHNjcm9sbExhdGNoaW5nQ2FuZGlkYXRlKTsKKyAgICB9Cit9CisKK2Jv
b2wgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpnZXRMYXRjaGluZ1N0YXRlRm9yRnJhbWUoY29u
c3QgRnJhbWUmIGZyYW1lLCBSZWZQdHI8RWxlbWVudD4mIGxhdGNoZWRFbGVtZW50LCBXZWFrUHRy
PFNjcm9sbGFibGVBcmVhPiYgbGF0Y2hlZFNjcm9sbGVyLCBib29sJiBpc092ZXJXaWRnZXQpIGNv
bnN0Cit7CisgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0ZSA6IG1fZnJhbWVTdGF0ZVN0YWNrKSB7
CisgICAgICAgIGlmIChzdGF0ZS5mcmFtZSA9PSAmZnJhbWUpIHsKKyAgICAgICAgICAgIGxhdGNo
ZWRFbGVtZW50ID0gc3RhdGUud2hlZWxFdmVudEVsZW1lbnQuZ2V0KCk7CisgICAgICAgICAgICBs
YXRjaGVkU2Nyb2xsZXIgPSBzdGF0ZS5zY3JvbGxhYmxlQXJlYTsKKyAgICAgICAgICAgIGlzT3Zl
cldpZGdldCA9IHN0YXRlLmlzT3ZlcldpZGdldDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXI6OnJlbW92ZUxhdGNoaW5nU3RhdGVGb3JUYXJnZXQoY29uc3QgRWxlbWVu
dCYgZWxlbWVudCkKK3sKKyAgICBpZiAobV9mcmFtZVN0YXRlU3RhY2suaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBtX2ZyYW1lU3RhdGVTdGFjay5m
aW5kTWF0Y2hpbmcoWyZlbGVtZW50XSAoY29uc3QgYXV0byYgc3RhdGUpIHsKKyAgICAgICAgYXV0
byogd2hlZWxFbGVtZW50ID0gc3RhdGUud2hlZWxFdmVudEVsZW1lbnQuZ2V0KCk7CisgICAgICAg
IHJldHVybiB3aGVlbEVsZW1lbnQgJiYgZWxlbWVudC5pc0VxdWFsTm9kZSh3aGVlbEVsZW1lbnQp
OworICAgIH0pOworICAgIAorICAgIC8vIElmIHRoaXMgZWxlbWVudCBpcyBmb3VuZCBpbiB0aGUg
bGF0Y2hpbmcgc3RhY2ssIGp1c3QgY2xlYXIgdGhlIHdob2xlIHN0YWNrLiBXZSBjYW4ndCBqdXN0
IHJlbW92ZSBvbmUgZW50cnksCisgICAgLy8gc2luY2UgdGhlIHN0YWNrIGhhcyB0byBtYXRjaCB0
aGUgZnJhbWUgaGllcmFyY2h5LgorICAgIGlmIChmaW5kUmVzdWx0ICE9IG5vdEZvdW5kKQorICAg
ICAgICBtX2ZyYW1lU3RhdGVTdGFjay5jbGVhcigpOworfQorCit2b2lkIFNjcm9sbExhdGNoaW5n
Q29udHJvbGxlcjo6cmVtb3ZlTGF0Y2hpbmdTdGF0ZUZvckZyYW1lKGNvbnN0IEZyYW1lJiBmcmFt
ZSkKK3sKKyAgICBpZiAobV9mcmFtZVN0YXRlU3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBJZiB0aGUgZnJhbWUgd2FzIGluIHRoZSBsYXRjaGluZyBzdGFjaywganVz
dCBjbGVhciBzdGF0ZS4KKyAgICBpZiAoYXV0byogZnJhbWVTdGF0ZSA9IHN0YXRlRm9yRnJhbWUo
ZnJhbWUpKQorICAgICAgICBjbGVhcigpOworfQorCitzdGF0aWMgYm9vbCBkZWx0YUlzUHJlZG9t
aW5hbnRseVZlcnRpY2FsKEZsb2F0U2l6ZSBkZWx0YSkKK3sKKyAgICByZXR1cm4gc3RkOjphYnMo
ZGVsdGEuaGVpZ2h0KCkpID4gc3RkOjphYnMoZGVsdGEud2lkdGgoKSk7Cit9CisKK2Jvb2wgU2Ny
b2xsTGF0Y2hpbmdDb250cm9sbGVyOjpzaG91bGRMYXRjaFRvU2Nyb2xsYWJsZUFyZWEoY29uc3Qg
RnJhbWUmIGZyYW1lLCBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIEZsb2F0U2l6ZSBz
Y3JvbGxEZWx0YSkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbGFibGVBcmVhKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBhbHdheXMgYWxsb3cgdGhlIG1haW4gZnJhbWUgcmVj
ZWl2ZSB3aGVlbCBldmVudHMgdG8gcGVybWl0IHJ1YmJlci1iYW5kaW5nLgorICAgIGlmIChmcmFt
ZS5pc01haW5GcmFtZSgpICYmIHNjcm9sbGFibGVBcmVhID09IGZyYW1lLnZpZXcoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIXNjcm9sbGFibGVBcmVhLT5jYW5IYXZlU2Nyb2xs
YmFycygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc2Nyb2xsRGVsdGEuaXNa
ZXJvKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVsdGFJc1ByZWRvbWlu
YW50bHlWZXJ0aWNhbChzY3JvbGxEZWx0YSkgJiYgc2Nyb2xsRGVsdGEud2lkdGgoKSkgeworICAg
ICAgICBpZiAoIXNjcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHNjcm9sbERlbHRhLndpZHRoKCkgPCAw
KQorICAgICAgICAgICAgcmV0dXJuICFzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsZWRUb1JpZ2h0KCk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gIXNjcm9sbGFibGVBcmVhLT5zY3JvbGxlZFRvTGVm
dCgpOworICAgIH0KKworICAgIGlmICghc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzY3JvbGxEZWx0YS5oZWlnaHQo
KSA8IDApCisgICAgICAgIHJldHVybiAhc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGVkVG9Cb3R0b20o
KTsKKworICAgIHJldHVybiAhc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGVkVG9Ub3AoKTsKK30KKwor
Ym9vbCBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6Omhhc1N0YXRlRm9yRnJhbWUoY29uc3QgRnJh
bWUmIGZyYW1lKSBjb25zdAoreworICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGUgOiBtX2ZyYW1l
U3RhdGVTdGFjaykgeworICAgICAgICBpZiAoc3RhdGUuZnJhbWUgPT0gJmZyYW1lKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworU2Nyb2xs
TGF0Y2hpbmdDb250cm9sbGVyOjpGcmFtZVN0YXRlKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6
OnN0YXRlRm9yRnJhbWUoY29uc3QgRnJhbWUmIGZyYW1lKQoreworICAgIGZvciAoYXV0byYgc3Rh
dGUgOiBtX2ZyYW1lU3RhdGVTdGFjaykgeworICAgICAgICBpZiAoc3RhdGUuZnJhbWUgPT0gJmZy
YW1lKQorICAgICAgICAgICAgcmV0dXJuICZzdGF0ZTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK2NvbnN0IFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6RnJhbWVTdGF0ZSogU2Ny
b2xsTGF0Y2hpbmdDb250cm9sbGVyOjpzdGF0ZUZvckZyYW1lKGNvbnN0IEZyYW1lJiBmcmFtZSkg
Y29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRlIDogbV9mcmFtZVN0YXRlU3RhY2sp
IHsKKyAgICAgICAgaWYgKHN0YXRlLmZyYW1lID09ICZmcmFtZSkKKyAgICAgICAgICAgIHJldHVy
biAmc3RhdGU7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFNjcm9sbExh
dGNoaW5nQ29udHJvbGxlcjo6ZHVtcChXVEY6OlRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAg
IFRleHRTdHJlYW0gbXVsdGlsaW5lU3RyZWFtOworICAgIG11bHRpbGluZVN0cmVhbS5zZXRJbmRl
bnQodHMuaW5kZW50KCkgKyAyKTsKKworICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGUgOiBtX2Zy
YW1lU3RhdGVTdGFjaykgeworICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwU2Nv
cGUobXVsdGlsaW5lU3RyZWFtKTsKKyAgICAgICAgbXVsdGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0
eSgiZnJhbWUiLCBWYWx1ZU9yTnVsbChzdGF0ZS5mcmFtZSkpOworICAgICAgICBtdWx0aWxpbmVT
dHJlYW0uZHVtcFByb3BlcnR5KCJlbGVtZW50IiwgVmFsdWVPck51bGwoc3RhdGUud2hlZWxFdmVu
dEVsZW1lbnQuZ2V0KCkpKTsKKyAgICAgICAgbXVsdGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgi
cHJldmlvdXNFbGVtZW50IiwgVmFsdWVPck51bGwoc3RhdGUucHJldmlvdXNXaGVlbFNjcm9sbGVk
RWxlbWVudC5nZXQoKSkpOworICAgICAgICBtdWx0aWxpbmVTdHJlYW0uZHVtcFByb3BlcnR5KCJz
Y3JvbGxhYmxlIGFyZWEiLCBWYWx1ZU9yTnVsbChzdGF0ZS5zY3JvbGxhYmxlQXJlYS5nZXQoKSkp
OworICAgICAgICBtdWx0aWxpbmVTdHJlYW0uZHVtcFByb3BlcnR5KCJpcyBvdmVyIHdpZGdldCIs
IHN0YXRlLmlzT3ZlcldpZGdldCk7CisgICAgfQorCisgICAgdHMgPDwgIlNjcm9sbExhdGNoaW5n
Q29udHJvbGxlciBzdGF0ZSAiIDw8IG11bHRpbGluZVN0cmVhbS5yZWxlYXNlKCk7Cit9CisKK1Rl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjcm9sbExhdGNoaW5n
Q29udHJvbGxlciYgY29udHJvbGxlcikKK3sKKyAgICBjb250cm9sbGVyLmR1bXAodHMpOworICAg
IHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MTRh
NTkwNDFmNmY2NDJkZGI5MGRiMjEyNGU0ODBmMjI1YjA1ODE1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmgK
QEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSAiVGltZXIu
aCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKwor
I2lmIEVOQUJMRShXSEVFTF9FVkVOVF9MQVRDSElORykKKworbmFtZXNwYWNlIFdURiB7CitjbGFz
cyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVsZW1lbnQ7
CitjbGFzcyBGcmFtZTsKK2NsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKK2NsYXNzIFNjcm9sbGFi
bGVBcmVhOworCitjbGFzcyBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcigp
OworICAgIH5TY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKTsKKworICAgIHZvaWQgY2xlYXIoKTsK
KworICAgIHZvaWQgcmVjZWl2ZWRXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYp
OworICAgIEZsb2F0U2l6ZSBjdW11bGF0aXZlRXZlbnREZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3VtdWxhdGl2ZUV2ZW50RGVsdGE7IH0KKworICAgIC8vIEZyYW1lIGNvbnRhaW5pbmcgbGF0Y2hl
ZCBzY3JvbGxlciAobWF5IGJlIHRoZSBmcmFtZSBvciBzb21lIHN1Yi1zY3JvbGxlcikuCisgICAg
RnJhbWUqIGxhdGNoZWRGcmFtZSgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIG5v
IGZyYW1lIGlzIGxhdGNoZWQsIG9yIHRoZSBnaXZlbiBmcmFtZSBpcyBsYXRjaGVkLgorICAgIGJv
b2wgbGF0Y2hpbmdBbGxvd3NTY3JvbGxpbmdJbkZyYW1lKGNvbnN0IEZyYW1lJiwgV2Vha1B0cjxT
Y3JvbGxhYmxlQXJlYT4mIGxhdGNoZWRTY3JvbGxlcikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0
ZUxhdGNoaW5nU3RhdGVGb3JGcmFtZShGcmFtZSYsIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYs
IEVsZW1lbnQqIGxhdGNoZWRFbGVtZW50LCBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsTGF0Y2hpbmdD
YW5kaWRhdGUsIGJvb2wgaXNPdmVyV2lkZ2V0KTsKKworICAgIGJvb2wgZ2V0TGF0Y2hpbmdTdGF0
ZUZvckZyYW1lKGNvbnN0IEZyYW1lJiwgUmVmUHRyPEVsZW1lbnQ+JiBsYXRjaGVkRWxlbWVudCwg
V2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mIGxhdGNoZWRTY3JvbGxlciwgYm9vbCYgaXNPdmVyV2lk
Z2V0KSBjb25zdDsKKworICAgIHZvaWQgcmVtb3ZlTGF0Y2hpbmdTdGF0ZUZvclRhcmdldChjb25z
dCBFbGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVMYXRjaGluZ1N0YXRlRm9yRnJhbWUoY29uc3Qg
RnJhbWUmKTsKKworICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBzdHJ1Y3QgRnJhbWVTdGF0ZSB7CisgICAgICAgIFdlYWtQdHI8RWxlbWVudD4g
d2hlZWxFdmVudEVsZW1lbnQ7CisgICAgICAgIFdlYWtQdHI8RWxlbWVudD4gcHJldmlvdXNXaGVl
bFNjcm9sbGVkRWxlbWVudDsgLy8gUmVtb3ZlPworICAgICAgICBXZWFrUHRyPFNjcm9sbGFibGVB
cmVhPiBzY3JvbGxhYmxlQXJlYTsKKyAgICAgICAgRnJhbWUqIGZyYW1lIHsgbnVsbHB0ciB9OyAv
LyBJY2t5IHJhdyBwb2ludGVyLiBVc2UgRnJhbWVJZGVudGlmaWVyPworICAgICAgICBib29sIGlz
T3ZlcldpZGdldCB7IGZhbHNlIH07CisgICAgfTsKKworICAgIHZvaWQgY2xlYXJPclNjaGVkdWxl
Q2xlYXJJZk5lZWRlZChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyAgICB2b2lkIGNsZWFy
VGltZXJGaXJlZCgpOworCisgICAgYm9vbCBoYXNTdGF0ZUZvckZyYW1lKGNvbnN0IEZyYW1lJikg
Y29uc3Q7CisgICAgRnJhbWVTdGF0ZSogc3RhdGVGb3JGcmFtZShjb25zdCBGcmFtZSYpOworICAg
IGNvbnN0IEZyYW1lU3RhdGUqIHN0YXRlRm9yRnJhbWUoY29uc3QgRnJhbWUmKSBjb25zdDsKKwor
ICAgIGJvb2wgc2hvdWxkTGF0Y2hUb1Njcm9sbGFibGVBcmVhKGNvbnN0IEZyYW1lJiwgU2Nyb2xs
YWJsZUFyZWEqLCBGbG9hdFNpemUpIGNvbnN0OworCisgICAgRmxvYXRTaXplIG1fY3VtdWxhdGl2
ZUV2ZW50RGVsdGE7CisgICAgVmVjdG9yPEZyYW1lU3RhdGU+IG1fZnJhbWVTdGF0ZVN0YWNrOwor
ICAgIFRpbWVyIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXI7Cit9OworCitXVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgU2Nyb2xsTGF0Y2hpbmdDb250
cm9sbGVyJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
SEVFTF9FVkVOVF9MQVRDSElORykKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjYzYWM0ZTdmYjQ1ODY1YWVlNGJjMTMwMmJiODlmYzQyNWZlYTMzZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIgotCi0j
aW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1TY3JvbGxMYXRjaGluZ1N0YXRlOjpTY3JvbGxMYXRjaGlu
Z1N0YXRlKCkgPSBkZWZhdWx0OwotICAgIAotU2Nyb2xsTGF0Y2hpbmdTdGF0ZTo6flNjcm9sbExh
dGNoaW5nU3RhdGUoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgU2Nyb2xsTGF0Y2hpbmdTdGF0ZTo6Y2xl
YXIoKQotewotICAgIG1fd2hlZWxFdmVudEVsZW1lbnQgPSBudWxscHRyOwotICAgIG1fZnJhbWUg
PSBudWxscHRyOwotICAgIG1fc2Nyb2xsYWJsZUNvbnRhaW5lciA9IG51bGxwdHI7Ci0gICAgbV93
aWRnZXRJc0xhdGNoZWQgPSBmYWxzZTsKLX0KLQotdm9pZCBTY3JvbGxMYXRjaGluZ1N0YXRlOjpz
ZXRXaGVlbEV2ZW50RWxlbWVudChFbGVtZW50KiBlbGVtZW50KQotewotICAgIG1fd2hlZWxFdmVu
dEVsZW1lbnQgPSBtYWtlV2Vha1B0cihlbGVtZW50KTsKLX0KLQotdm9pZCBTY3JvbGxMYXRjaGlu
Z1N0YXRlOjpzZXRXaWRnZXRJc0xhdGNoZWQoYm9vbCBpc092ZXJXaWRnZXQpCi17Ci0gICAgbV93
aWRnZXRJc0xhdGNoZWQgPSBpc092ZXJXaWRnZXQ7Ci19Ci0KLXZvaWQgU2Nyb2xsTGF0Y2hpbmdT
dGF0ZTo6c2V0U2Nyb2xsYWJsZUNvbnRhaW5lcihDb250YWluZXJOb2RlKiBjb250YWluZXIpCi17
Ci0gICAgbV9zY3JvbGxhYmxlQ29udGFpbmVyID0gbWFrZVdlYWtQdHIoY29udGFpbmVyKTsKLX0K
LQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2Nyb2xsTGF0
Y2hpbmdTdGF0ZSYgc3RhdGUpCi17Ci0gICAgVGV4dFN0cmVhbSBtdWx0aWxpbmVTdHJlYW07Ci0g
ICAgbXVsdGlsaW5lU3RyZWFtLnNldEluZGVudCh0cy5pbmRlbnQoKSArIDIpOwotCi0gICAgbXVs
dGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgiZWxlbWVudCIsIHN0YXRlLndoZWVsRXZlbnRFbGVt
ZW50KCkpOwotICAgIG11bHRpbGluZVN0cmVhbS5kdW1wUHJvcGVydHkoInNjcm9sbGFibGUgY29u
dGFpbmVyIiwgc3RhdGUuc2Nyb2xsYWJsZUNvbnRhaW5lcigpKTsKLSAgICBtdWx0aWxpbmVTdHJl
YW0uZHVtcFByb3BlcnR5KCJ3aWRnZXRJc0xhdGNoZWQiLCBzdGF0ZS53aWRnZXRJc0xhdGNoZWQo
KSk7Ci0KLSAgICB0cyA8PCAiU2Nyb2xsTGF0Y2hpbmdTdGF0ZSAiIDw8IG11bHRpbGluZVN0cmVh
bS5yZWxlYXNlKCk7Ci0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nU3RhdGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nU3RhdGUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYmIxYjk3ZGEwM2RhMjdkNGVkNGFlODE4YTBhNDQyMjAzODE4NTc2
YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgQ29udGFpbmVyTm9kZTsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGcmFtZTsKLQot
Y2xhc3MgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSBmaW5hbCB7Ci1wdWJsaWM6Ci0gICAgU2Nyb2xsTGF0
Y2hpbmdTdGF0ZSgpOwotICAgIH5TY3JvbGxMYXRjaGluZ1N0YXRlKCk7Ci0KLSAgICB2b2lkIGNs
ZWFyKCk7Ci0KLSAgICBFbGVtZW50KiB3aGVlbEV2ZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fd2hlZWxFdmVudEVsZW1lbnQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFdoZWVsRXZlbnRFbGVt
ZW50KEVsZW1lbnQqKTsKLQotICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJh
bWU7IH0KLSAgICB2b2lkIHNldEZyYW1lKEZyYW1lKiBmcmFtZSkgeyBtX2ZyYW1lID0gZnJhbWU7
IH0KLQotICAgIGJvb2wgd2lkZ2V0SXNMYXRjaGVkKCkgY29uc3QgeyByZXR1cm4gbV93aWRnZXRJ
c0xhdGNoZWQ7IH0KLSAgICB2b2lkIHNldFdpZGdldElzTGF0Y2hlZChib29sIGlzT3ZlcldpZGdl
dCk7Ci0KLSAgICBDb250YWluZXJOb2RlKiBzY3JvbGxhYmxlQ29udGFpbmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY3JvbGxhYmxlQ29udGFpbmVyLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRTY3JvbGxh
YmxlQ29udGFpbmVyKENvbnRhaW5lck5vZGUqKTsKLQotcHJpdmF0ZToKLSAgICBXZWFrUHRyPEVs
ZW1lbnQ+IG1fd2hlZWxFdmVudEVsZW1lbnQ7Ci0gICAgV2Vha1B0cjxDb250YWluZXJOb2RlPiBt
X3Njcm9sbGFibGVDb250YWluZXI7Ci0KLSAgICBGcmFtZSogbV9mcmFtZSB7IG51bGxwdHIgfTsK
LQotICAgIGJvb2wgbV93aWRnZXRJc0xhdGNoZWQgeyBmYWxzZSB9OwotfTsKLQotV1RGOjpUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFNjcm9sbExhdGNoaW5n
U3RhdGUmKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250
cm9sbGVyLmNwcAppbmRleCA1MTIxZjEzNWRjOGVjZmQzZjYyYmJmY2JjZThmMjM2YWZmOWRhNjUy
Li4xN2Y2MDNhYmY3MzlmMmE0MTA3OGVkMmFlZjBmNTFiMjcyZmE2OTI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVl
TGF0Y2hpbmdDb250cm9sbGVyLmNwcApAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLS8vIFNlZSBhbHNvIEV2ZW50SGFuZGxlck1hYy5jcHAKKy8vIFNlZSBhbHNvIFNj
cm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHAKIHN0YXRpYyBjb25zdCBTZWNvbmRzIHJlc2V0TGF0
Y2hlZFN0YXRlVGltZW91dCB7IDEwMF9tcyB9OwogCiBTY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250
cm9sbGVyOjpTY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyKCkgPSBkZWZhdWx0OwpAQCAt
NDcsNyArNDcsNyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVMYXRjaGluZ0NvbnRyb2xsZXI6OnJlY2Vp
dmVkV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbgogICAgICAgICByZXR1cm47CiAK
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xhdGNoZWROb2RlTXV0ZXgpOwotICAgIGlmICh3aGVl
bEV2ZW50LnNob3VsZENvbnNpZGVyTGF0Y2hpbmcoKSAmJiBtX2xhdGNoZWROb2RlSUQgJiYgIWxh
dGNoZWROb2RlSXNSZWxldmFudCgpKSB7CisgICAgaWYgKHdoZWVsRXZlbnQuaXNHZXN0dXJlU3Rh
cnQoKSAmJiBtX2xhdGNoZWROb2RlSUQgJiYgIWxhdGNoZWROb2RlSXNSZWxldmFudCgpKSB7CiAg
ICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJTY3JvbGxp
bmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIHJlY2VpdmVkV2hlZWxFdmVu
dCAtICIgPDwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9sYXN0TGF0Y2hlZE5vZGVJbnRlcmF0
aW9uVGltZSkubWlsbGlzZWNvbmRzKCkgPDwgIm1zIHNpbmNlIGxhc3QgZXZlbnQsIGNsZWFyaW5n
IGxhdGNoZWQgbm9kZSIpOwogICAgICAgICBtX2xhdGNoZWROb2RlSUQucmVzZXQoKTsKICAgICB9
CkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlcjo6
bm9kZURpZEhhbmRsZUV2ZW50KFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAod2hlZWxFdmVudC5kZWx0YSgpLmlzWmVybygpIHx8ICF3aGVl
bEV2ZW50LnNob3VsZENvbnNpZGVyTGF0Y2hpbmcoKSkKKyAgICBpZiAod2hlZWxFdmVudC5kZWx0
YSgpLmlzWmVybygpIHx8ICF3aGVlbEV2ZW50LmlzR2VzdHVyZVN0YXJ0KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJT
Y3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyICIgPDwgdGhpcyA8PCAiIG5vZGVEaWRIYW5k
bGVFdmVudDogbGF0Y2hpbmcgdG8gIiA8PCBzY3JvbGxpbmdOb2RlSUQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAK
aW5kZXggYTVhZWQyZTBhYThkODNkNWRjYTg5ODExMWMxZjEzN2Y2YzYwZGZhMy4uNjZlZDFmNzM2
YzI3ZTg3NmRhYTZmNTI0YTg3YzBiZWEwZTAxYWUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCkBAIC02Myw2
ICs2Myw3IEBAIFdoZWVsRXZlbnRIYW5kbGluZ1Jlc3VsdCBUaHJlYWRlZFNjcm9sbGluZ1RyZWU6
OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XCiAKIGJvb2wgVGhyZWFkZWRTY3JvbGxp
bmdUcmVlOjpoYW5kbGVXaGVlbEV2ZW50QWZ0ZXJNYWluVGhyZWFkKGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYgd2hlZWxFdmVudCwgU2Nyb2xsaW5nTm9kZUlEIHRhcmdldE5vZGVJRCkKIHsKKyAg
ICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlRocmVhZGVkU2Nyb2xsaW5n
VHJlZTo6aGFuZGxlV2hlZWxFdmVudEFmdGVyTWFpblRocmVhZCAiIDw8IHdoZWVsRXZlbnQpOwog
ICAgIFNldEZvclNjb3BlPGJvb2w+IGRpc2FsbG93TGF0Y2hpbmdTY29wZShtX2FsbG93TGF0Y2hp
bmcsIGZhbHNlKTsKIAogICAgIFJlZlB0cjxTY3JvbGxpbmdUcmVlTm9kZT4gdGFyZ2V0Tm9kZSA9
IG5vZGVGb3JJRCh0YXJnZXROb2RlSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVEZWxlZ2F0ZU1hYy5tbQppbmRleCAwMjg1NGNjYmE2MTc0NzkwODBjOGVjNjgyMTJiZWNj
NWZiM2ZhZDRhLi5hOGNlNjlhY2ZiYWNkMDk0MmVmZjRmOTZhNDMwNzEyNDIwNjUyMzNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbQpAQCAtMTY3
LDEyICsxNjcsNiBAQCBib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6
OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAogCiAvLyBGSVhNRTogV2Ugc2hvdWxkIGZp
bmQgYSB3YXkgdG8gc2hhcmUgc29tZSBvZiB0aGUgY29kZSBmcm9tIG5ld0dlc3R1cmVJc1N0YXJ0
aW5nKCksIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKCksCiAvLyBhbGxvd3NW
ZXJ0aWNhbFN0cmV0Y2hpbmcoKSwgYW5kIGFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKCkgd2l0
aCB0aGUgaW1wbGVtZW50YXRpb24gaW4gU2Nyb2xsQW5pbWF0b3JNYWMuCi0vLyBUaGlzIGlzIGFs
c28gdGhlIHNhbWUgYXMgUGxhdGZvcm1XaGVlbEV2ZW50OjpzaG91bGRDb25zaWRlckxhdGNoaW5n
KCkuCi1zdGF0aWMgYm9vbCBuZXdHZXN0dXJlSXNTdGFydGluZyhjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0gICAgcmV0dXJuIHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU1heUJlZ2luIHx8IHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuOwotfQotCiBib29sIFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVNYWM6OmlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJl
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzIGF4
aXMpIGNvbnN0CiB7CiAgICAgYXV0byBzY3JvbGxQb3NpdGlvbiA9IGN1cnJlbnRTY3JvbGxQb3Np
dGlvbigpOwpAQCAtMjAwLDcgKzE5NCw3IEBAIGJvb2wgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVEZWxlZ2F0ZU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhCiAgICAg
c3dpdGNoIChob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpKSB7CiAgICAgY2FzZSBTY3JvbGxF
bGFzdGljaXR5QXV0b21hdGljOiB7CiAgICAgICAgIGJvb2wgc2Nyb2xsYmFyc0FsbG93U3RyZXRj
aGluZyA9IGhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgIWhhc0VuYWJsZWRWZXJ0
aWNhbFNjcm9sbGJhcigpOwotICAgICAgICBib29sIGV2ZW50UHJldmVudHNTdHJldGNoaW5nID0g
bmV3R2VzdHVyZUlzU3RhcnRpbmcod2hlZWxFdmVudCkgJiYgaXNBbHJlYWR5UGlubmVkSW5EaXJl
Y3Rpb25PZkdlc3R1cmUod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsK
KyAgICAgICAgYm9vbCBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9IHdoZWVsRXZlbnQuaXNHZXN0
dXJlU3RhcnQoKSAmJiBpc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZSh3aGVlbEV2
ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOwogICAgICAgICByZXR1cm4gc2Nyb2xs
YmFyc0FsbG93U3RyZXRjaGluZyAmJiAhZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmc7CiAgICAgfQog
ICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eU5vbmU6CkBAIC0yMjIsNyArMjE2LDcgQEAgYm9vbCBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0
Y2hpbmcoY29uc3QgUGxhdGYKICAgICBzd2l0Y2ggKHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgp
KSB7CiAgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljOiB7CiAgICAgICAgIGJvb2wg
c2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyA9IGhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcigp
IHx8ICFoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgICAgICBib29sIGV2ZW50
UHJldmVudHNTdHJldGNoaW5nID0gbmV3R2VzdHVyZUlzU3RhcnRpbmcod2hlZWxFdmVudCkgJiYg
aXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUod2hlZWxFdmVudCwgU2Nyb2xsRXZl
bnRBeGlzOjpWZXJ0aWNhbCk7CisgICAgICAgIGJvb2wgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcg
PSB3aGVlbEV2ZW50LmlzR2VzdHVyZVN0YXJ0KCkgJiYgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rp
b25PZkdlc3R1cmUod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCk7CiAgICAg
ICAgIHJldHVybiBzY3JvbGxiYXJzQWxsb3dTdHJldGNoaW5nICYmICFldmVudFByZXZlbnRzU3Ry
ZXRjaGluZzsKICAgICB9CiAgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5Tm9uZToKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgKaW5kZXggMmNlMDYwZTMzNjU5
ZjZlZmQzZDQwZjljMjE5OGQ0NWE3YjI3MTUzZS4uOTJlMGUyNmUwNmYyY2Y2M2NkMGZmMTllZjQ3
MGEwYjZlYmQ1ZDI0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1XaGVlbEV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVl
bEV2ZW50LmgKQEAgLTE1MSw4ICsxNTEsMTAgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKEFTWU5D
X1NDUk9MTElORykKICAgICBib29sIHVzZUxhdGNoZWRFdmVudEVsZW1lbnQoKSBjb25zdDsKLSAg
ICBib29sIHNob3VsZENvbnNpZGVyTGF0Y2hpbmcoKSBjb25zdDsKKyAgICBib29sIGlzR2VzdHVy
ZVN0YXJ0KCkgY29uc3Q7CisgICAgYm9vbCBpc0dlc3R1cmVDb250aW51YXRpb24oKSBjb25zdDsg
Ly8gVGhlIGZpbmdlcnMtZG93biBwYXJ0IG9mIHRoZSBnZXN0dXJlLgogICAgIGJvb2wgc2hvdWxk
UmVzZXRMYXRjaGluZygpIGNvbnN0OworICAgIGJvb2wgaXNOb25HZXN0dXJlRXZlbnQoKSBjb25z
dDsKICAgICBib29sIGlzRW5kT2ZNb21lbnR1bVNjcm9sbCgpIGNvbnN0OwogI2Vsc2UKICAgICBi
b29sIHVzZUxhdGNoZWRFdmVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAt
MjEwLDE1ICsyMTIsMjQgQEAgaW5saW5lIGJvb2wgUGxhdGZvcm1XaGVlbEV2ZW50Ojp1c2VMYXRj
aGVkRXZlbnRFbGVtZW50KCkgY29uc3QKICAgICAgICAgfHwgKG1fcGhhc2UgPT0gUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2VFbmRlZCAmJiBtX21vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2VOb25lKTsKIH0KIAotaW5saW5lIGJvb2wgUGxhdGZvcm1XaGVlbEV2ZW50OjpzaG91
bGRDb25zaWRlckxhdGNoaW5nKCkgY29uc3QKK2lubGluZSBib29sIFBsYXRmb3JtV2hlZWxFdmVu
dDo6aXNHZXN0dXJlU3RhcnQoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBk
aXNhbGxvdyBsYXRjaGluZyBpZiB0aGUgZGVsdGEgaXMgemVyby4KICAgICByZXR1cm4gbV9waGFz
ZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuIHx8IG1fcGhhc2UgPT0gUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2VNYXlCZWdpbjsKIH0KIAoraW5saW5lIGJvb2wgUGxhdGZvcm1XaGVlbEV2
ZW50Ojppc0dlc3R1cmVDb250aW51YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3BoYXNl
ID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDsKK30KKwogaW5saW5lIGJvb2wgUGxh
dGZvcm1XaGVlbEV2ZW50OjpzaG91bGRSZXNldExhdGNoaW5nKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNhbmNlbGxlZCB8fCBtX3BoYXNl
ID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTWF5QmVnaW4gfHwgaXNFbmRPZk1vbWVudHVtU2Ny
b2xsKCk7CisgICAgcmV0dXJuIG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDYW5j
ZWxsZWQgfHwgbV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU1heUJlZ2luIHx8ICht
X3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSAmJiBtX21vbWVudHVtUGhhc2Ug
PT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKSB8fCBpc0VuZE9mTW9tZW50dW1TY3JvbGwo
KTsKK30KKworaW5saW5lIGJvb2wgUGxhdGZvcm1XaGVlbEV2ZW50Ojppc05vbkdlc3R1cmVFdmVu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2VOb25lICYmIG1fbW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmU7
CiB9CiAKIGlubGluZSBib29sIFBsYXRmb3JtV2hlZWxFdmVudDo6aXNFbmRPZk1vbWVudHVtU2Ny
b2xsKCkgY29uc3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCBlNTExNTdjNTk4ODcxOWYzNzJlMDhhYmJkZTc1ZDNlZDNmMmQx
MmI4Li4wNGI0NzIxOTE5ZmU3NTgxODA4ZDlkYjQwZThjM2UxMTMzYWEyNzA5IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjcgQEAKKzIwMjAtMDgtMjkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV3cml0ZSBtYWluIHRocmVhZCBzY3JvbGwgbGF0Y2hpbmcgbG9n
aWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTk3
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBh
IHRlc3QgZm9yIGlmcmFtZSB1bnBhcmVudGluZyBpbiB0aGUgbWlkZGxlIG9mIGEgbGF0Y2hlZCBz
Y3JvbGwuCisKKyAgICAgICAgKiBmYXN0L3Njcm9sbGluZy9sYXRjaGluZy9sYXRjaGVkLXNjcm9s
bC1yZW1vdmUtaWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL2xh
dGNoaW5nL3Njcm9sbC1uZXN0ZWQtaWZyYW1lLmh0bWw6IDEwMDBtcyAtPiAwbXMKKyAgICAgICAg
KiBmYXN0L3Njcm9sbGluZy9tYWMvcnViYmVyYmFuZC1vdmVyZmxvdy1pbi13aGVlbC1yZWdpb24u
aHRtbDogVGVzdCBuZWVkcyB0byBsYXRjaCB0aGUgb3ZlcmZsb3cgYnkgc2Nyb2xsaW5nIGRvd24g
dGhlbiB1cC4KKworMjAyMC0wOC0xOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxl
LmNvbT4KKworICAgICAgICBSdWJiZXJiYW5kaW5nIGluIGFuIG92ZXJmbG93OnNjcm9sbCBjYW4g
dHJpZ2dlciBwYWdlIGppZ2dsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxNTYyOQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjcyOTU3OTc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L3Nj
cm9sbGluZy9tYWMvcnViYmVyYmFuZC1vdmVyZmxvdy1pbi13aGVlbC1yZWdpb24tcm9vdC1qaWdn
bGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3Njcm9sbGluZy9tYWMvcnVi
YmVyYmFuZC1vdmVyZmxvdy1pbi13aGVlbC1yZWdpb24tcm9vdC1qaWdnbGUuaHRtbDogQWRkZWQu
CisKIDIwMjAtMDgtMjggIExhdXJvIE1vdXJhICA8bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW1dQRV0gR2FyZGVuaW5nIGFuZCByZWJhc2VsaW5pbmcKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL2xhdGNoZWQtc2Nyb2xsLXJlbW92ZS1pZnJhbWUu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL2xhdGNoZWQtc2Nyb2xs
LXJlbW92ZS1pZnJhbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOTcxNmIxZmYwYjhjMTBlOTc4OTQxNWVm
MWUwM2NlOWU1ZTc2Zjk0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zY3Jv
bGxpbmcvbGF0Y2hpbmcvbGF0Y2hlZC1zY3JvbGwtcmVtb3ZlLWlmcmFtZS5odG1sCkBAIC0wLDAg
KzEsNzUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c3R5bGU+Cisg
ICAgICAgIGlmcmFtZSB7CisgICAgICAgICAgICB3aWR0aDogNjAwcHg7CisgICAgICAgICAgICBo
ZWlnaHQ6IDQwMHB4OworICAgICAgICB9CisgICAgPC9zdHlsZT4KKyAgICA8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL3VpLWhlbHBlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdD4KKyAgICAgICAganNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgIAorICAgICAgICBs
ZXQgaWZyYW1lID0gdW5kZWZpbmVkOworICAgICAgICBmdW5jdGlvbiBpZnJhbWVTY3JvbGxlZChv
ZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gMjAwKQorICAgICAg
ICAgICAgICAgIGlmcmFtZS5yZW1vdmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGFzeW5jIGZ1
bmN0aW9uIGRvVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmcmFtZSA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpZnJhbWUnKVswXTsKKworICAgICAgICAgICAgaWYgKCF3
aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV2ZW50
U2VuZGVyLm1vdXNlTW92ZVRvKDEwMCwgMTAwKTsgLy8gSW5zaWRlIHRoZSBpZnJhbWUuCisgICAg
ICAgICAgICBldmVudFNlbmRlci5tb25pdG9yV2hlZWxFdmVudHMoKTsKKyAgICAgICAgICAgIGV2
ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMSwg
J2JlZ2FuJywgJ25vbmUnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlX
aXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMTAsICdjaGFuZ2VkJywgJ25vbmUnKTsKKyAg
ICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBo
YXNlcygwLCAwLCAnZW5kZWQnLCAnbm9uZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91
c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAsIC0xMCwgJ25vbmUnLCAnYmVn
aW4nKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRN
b21lbnR1bVBoYXNlcygwLCAtMTAsICdub25lJywgJ2NvbnRpbnVlJyk7CisgICAgICAgICAgICBh
d2FpdCBVSUhlbHBlci5yZW5kZXJpbmdVcGRhdGUoKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVy
Lm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAxMCwgJ25vbmUnLCAn
Y29udGludWUnKTsKKyAgICAgICAgICAgIGF3YWl0IFVJSGVscGVyLnJlbmRlcmluZ1VwZGF0ZSgp
OworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVu
dHVtUGhhc2VzKDAsIDEwLCAnbm9uZScsICdjb250aW51ZScpOworICAgICAgICAgICAgYXdhaXQg
VUlIZWxwZXIucmVuZGVyaW5nVXBkYXRlKCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3Vz
ZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgLTEwLCAnbm9uZScsICdjb250
aW51ZScpOworICAgICAgICAgICAgYXdhaXQgVUlIZWxwZXIucmVuZGVyaW5nVXBkYXRlKCk7Cisg
ICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1Q
aGFzZXMoMCwgMCwgJ25vbmUnLCAnZW5kJyk7CisgICAgICAgICAgICBhd2FpdCBVSUhlbHBlci53
YWl0Rm9yU2Nyb2xsQ29tcGxldGlvbigpOworCisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsK
KyAgICAgICAgfQorCisgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkg
PT4geworICAgICAgICAgICAgZGVzY3JpcHRpb24oIlRlc3QgdGhhdCByZW1vdmVzIGFuIGlmcmFt
ZSBkdXJpbmcgYSBsYXRjaGVkIHNjcm9sbC4gUGFzc2VzIGlmIHRoZSB0ZXN0IGRvZXMgbm90IGNy
YXNoLiIpOworICAgICAgICAgICAgc2V0VGltZW91dChkb1Rlc3QsIDApOworICAgICAgICB9LCBm
YWxzZSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8aWZyYW1lIHNyY2Rv
Yz0iCisgICAgPHN0eWxlPgorICAgICAgICBib2R5IHsgaGVpZ2h0OiAyMDAwcHg7IH0KKyAgICA8
L3N0eWxlPgorICAgIDxzY3JpcHQ+CisgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdz
Y3JvbGwnLCAoKSA9PiB7CisgICAgICAgICAgICBwYXJlbnQuaWZyYW1lU2Nyb2xsZWQod2luZG93
LnBhZ2VZT2Zmc2V0KTsKKyAgICAgICAgfSk7CisgICAgPC9zY3JpcHQ+CisgICAgPGJvZHk+Cisg
ICAgICAgIGlmcmFtZQorICAgIDwvYm9keT4KKyAgICAiPgorICAgIDwvaWZyYW1lPgorICAgIDxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL3Njcm9sbC1uZXN0ZWQtaWZy
YW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9sYXRjaGluZy9zY3JvbGwtbmVz
dGVkLWlmcmFtZS5odG1sCmluZGV4IDFhZWM4Y2Q1YmU4Zjg3ZmE5YzMwNTAyMGMwNWRlYWQzZmU3
MDNlNDQuLjRlMjMwMTA2ODNjNTlhMTAzNWM4MThhNTg0NTBhMjhiNjZmMmQ0ZjkgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL3Njcm9sbC1uZXN0ZWQtaWZy
YW1lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvbGF0Y2hpbmcvc2Nyb2xs
LW5lc3RlZC1pZnJhbWUuaHRtbApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICB7CiAgICAgICAg
ICAgICBkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBpZnJhbWUgZG9lcyBzY3JvbGwgd2hlbiBpbm5l
ciBpZnJhbWUgaXMgTk9UIHNjcm9sbGFibGUuIik7CiAgICAgICAgICAgICBpZiAod2luZG93LmV2
ZW50U2VuZGVyKSB7Ci0gICAgICAgICAgICAgICAgc2V0VGltZW91dChzY3JvbGxUZXN0LCAxMDAw
KTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHNjcm9sbFRlc3QsIDApOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhciBtZXNzYWdlTG9j
YXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFyZW50Jyk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9tYWMvcnViYmVyYmFuZC1vdmVyZmxvdy1pbi13aGVl
bC1yZWdpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL21hYy9ydWJiZXJiYW5k
LW92ZXJmbG93LWluLXdoZWVsLXJlZ2lvbi5odG1sCmluZGV4IDVkZDNhMjdiMjI3YmUwZjMyZmQy
ZDFhYTJmNzg2MGFlNGIxNmEzYmIuLjQ5NzBjZmFmOTVkNWYzODUyYTFiMTJiZmVjYWY1N2EzMWYw
MmUwNGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL21hYy9ydWJiZXJi
YW5kLW92ZXJmbG93LWluLXdoZWVsLXJlZ2lvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
c2Nyb2xsaW5nL21hYy9ydWJiZXJiYW5kLW92ZXJmbG93LWluLXdoZWVsLXJlZ2lvbi5odG1sCkBA
IC00Niw4ICs0NiwxMiBAQAogICAgICAgICBhc3luYyBmdW5jdGlvbiBkb01vdXNlV2hlZWxTY3Jv
bGwoKQogICAgICAgICB7CiAgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygxMDAs
IDEwMCk7Ci0gICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5k
TW9tZW50dW1QaGFzZXMoMCwgMSwgImJlZ2FuIiwgIm5vbmUiKTsKLSAgICAgICAgICAgIGV2ZW50
U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAyMCwgImNo
YW5nZWQiLCAibm9uZSIpOworICAgICAgICAgICAgLy8gU2Nyb2xsIGRvd24gdG8gbGF0Y2gsIHRo
ZW4gdXAgdG8gcnViYmVyYmFuZC4KKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xs
QnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMSwgImJlZ2FuIiwgIm5vbmUiKTsKKyAg
ICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBo
YXNlcygwLCAtMTAsICJjaGFuZ2VkIiwgIm5vbmUiKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVy
Lm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMTAsICJjaGFuZ2Vk
IiwgIm5vbmUiKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hl
ZWxBbmRNb21lbnR1bVBoYXNlcygwLCAxMiwgImNoYW5nZWQiLCAibm9uZSIpOworICAgICAgICAg
ICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAs
IDEyLCAiY2hhbmdlZCIsICJub25lIik7CiAgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVNj
cm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgMCwgImVuZGVkIiwgIm5vbmUiKTsK
ICAgICAgICAgICAgIGF3YWl0IFVJSGVscGVyLnJlbmRlcmluZ1VwZGF0ZSgpOwogICAgICAgICB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407553</attachid>
            <date>2020-08-29 17:08:44 -0700</date>
            <delta_ts>2020-08-29 17:15:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215979-20200829170843.patch</filename>
            <type>text/plain</type>
            <size>85922</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWY2NTQxYmJiMmQxZGU0
MzFkMDM4MjYwNzVmZWNmZjMxNzVhYWQ5Ny4uMzUyNGNkZWJhZTNhOGE4NzM5OWVjN2ExNDllYzhl
MDBmYmU1YjA2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAyMC0wOC0yOSAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdyaXRlIG1h
aW4gdGhyZWFkIHNjcm9sbCBsYXRjaGluZyBsb2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGUgZXhpc3RpbmcgbWFpbiB0aHJlYWQg
d2hlZWwgZXZlbnQgaGFuZGxpbmcgYW5kIGxhdGNoaW5nIGxvZ2ljIGhhZCBhIG51bWJlciBvZiBp
c3N1ZXMsCisgICAgICAgIHNvbWUgb2Ygd2hpY2ggd2VyZSBpbmRpY2F0ZWQgdmlhIHRoZSBGSVhN
RSBjb21tZW50cyBhZGRlZCBpbiByMjY2MDE2OgorICAgICAgICAtIEl0IHRyYWNrZWQgc2Nyb2xs
YWJsZSBjb250YWluZXJzIGFzIENvbnRhaW5lck5vZGVzIHJhdGhlciB0aGFuIFNjcm9sbGFibGVB
cmVhcworICAgICAgICAtIEl0IGZldGNoZWQgYW5kIHVzZWQgbGF0Y2hlZCBzdGF0ZSBmcm9tIGEg
ZGlmZmVyZW50IGZyYW1lLCBjYXVzaW5nIGFuIEV2ZW50SGFuZGxlcgorICAgICAgICAgIHRvIGVu
ZCB1cCBzY3JvbGxpbmcgc29tZSB1bnJlbGF0ZWQgZnJhbWUuCisgICAgICAgIC0gT3ZlcmZsb3cg
c2Nyb2xsaW5nIGlnbm9yZWQgbGF0Y2hlZCBzdGF0ZS4KKyAgICAgICAgLSBUaGUgbGF0Y2hpbmcg
c3RhY2sncyBwdXJwb3NlIHdhcyB1bmNsZWFyLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBmaXhlcyB0aG9zZSBpc3N1ZXMuIFRoZSBkZXNpZ24gaXMgYXMgZm9sbG93OiAKKyAgICAgICAg
LSBMYXRjaGluZyBsb2dpYyBpcyBtb3ZlZCBpbnRvIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlciwg
d2hpY2ggaXMgb3duZWQgYnkgUGFnZS4KKyAgICAgICAgLSBTY3JvbGxMYXRjaGluZ0NvbnRyb2xs
ZXIgb3ducyBhIHN0YWNrIG9mIEZyYW1lU3RhdGUuCisgICAgICAgIC0gV2hlbiByZWNlaXZpbmcg
YSB3aGVlbCBldmVudCwgZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldCgpIGlkZW50aWZpZXMgdGhl
IHRhcmdldAorICAgICAgICAgIFNjcm9sbGFibGVBcmVhLCBpZiBhbnksIGZvciB0aGF0IGZyYW1l
IG9ubHkuCisgICAgICAgIC0gQXMgaGl0LXRlc3RpbmcgZGVzY2VuZHMgaW50byBzdWJmcmFtZXMs
IHN0YXRlIGlzIHB1c2hlZCBvbnRvIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcidzCisgICAgICAg
ICAgc3RhdGUgc3RhY2suIEZyYW1lcyB3aXRoIHBvdGVudGlhbCBzY3JvbGxlcnMgaGF2ZSBhIG5v
bi1udWxsIFNjcm9sbGFibGVBcmVhIGluIHRoZWlyIHN0YXRlLgorICAgICAgICAtIFRoZSBsYXRj
aGVkIFNjcm9sbGFibGVBcmVhIGlzIHRoZSB0b3Agbm9uLW51bGwgU2Nyb2xsYWJsZUFyZWEgaW4g
dGhpcyBzdGFjay4KKyAgICAgICAgLSBFdmVudEhhbmRsZXIgY29uc3VsdHMgU2Nyb2xsTGF0Y2hp
bmdDb250cm9sbGVyIGZvciBzZWxlY3QsIG92ZXJmbG93IGFuZCBmcmFtZSBzY3JvbGxpbmcuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZSBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBzY3JvbGxp
bmcgb3ZlciBhbiBvdmVyZmxvdzpzY3JvbGwgaW4gdGhlIG5vbi1mYXN0IHNjcm9sbGFibGUKKyAg
ICAgICAgcmVnaW9uIHdvdWxkIHJ1YmJlci1iYW5kIHRoZSBvdmVyZmxvdywgcmF0aGVyIHRoYW4g
dGhlIG1haW4gcGFnZSAodGVzdGVkIGJ5IHRoZSBhZGp1c3RlZAorICAgICAgICBmYXN0L3Njcm9s
bGluZy9tYWMvcnViYmVyYmFuZC1vdmVyZmxvdy1pbi13aGVlbC1yZWdpb24uaHRtbCkuCisKKyAg
ICAgICAgVGVzdHM6IGZhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL2xhdGNoZWQtc2Nyb2xsLXJlbW92
ZS1pZnJhbWUuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGV0ZXJt
aW5lV2hlZWxFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBy
b2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNvbXBsZXRlV2lkZ2V0V2hlZWxFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjbGVhckxhdGNoZWRTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNsZWFyTGF0Y2hlZFN0YXRlVGltZXJGaXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNsZWFyT3JTY2hl
ZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAqIHBh
Z2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2U6OnN0YXJ0TW9uaXRvcmluZ1doZWVsRXZlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnNjcm9sbExhdGNoaW5nQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjpsYXRjaGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnB1c2hOZXdMYXRjaGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnJlc2V0TGF0Y2hpbmdTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpw
b3BMYXRjaGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlbW92
ZUxhdGNoaW5nU3RhdGVGb3JUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvUGFnZS5o
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6bGF0Y2hpbmdTdGF0ZVN0YWNrIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRldGVybWluZVdoZWVsRXZlbnRUYXJnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVQbGF0Zm9y
bVdpZGdldFdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwcm9j
ZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXApOgorICAgICAgICAoV2ViQ29yZTo6ZGVsdGFJc1By
ZWRvbWluYW50bHlWZXJ0aWNhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxl
ZFRvRWRnZUluRG9taW5hbnREaXJlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
bGF0Y2hpbmdJc0xvY2tlZFRvUGxhdGZvcm1GcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpsYXRjaGluZ0lzTG9ja2VkVG9BbmNlc3Rvck9mVGhpc0ZyYW1lKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmxhdGNoZWRUb0ZyYW1lT3JCb2R5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3Rh
dGVJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmcmFtZVZpZXdGb3JMYXRj
aGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNo
aW5nQ29udHJvbGxlcjo6U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcklmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Y2xlYXJUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6cmVjZWl2
ZWRXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxl
cjo6bGF0Y2hpbmdBbGxvd3NTY3JvbGxpbmdJbkZyYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6dXBkYXRlTGF0Y2hpbmdTdGF0ZUZvckZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Z2V0TGF0Y2hp
bmdTdGF0ZUZvckZyYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5n
Q29udHJvbGxlcjo6cmVtb3ZlTGF0Y2hpbmdTdGF0ZUZvclRhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OnJlbW92ZUxhdGNoaW5nU3RhdGVGb3JGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWx0YUlzUHJlZG9taW5hbnRseVZlcnRpY2FsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6c2hvdWxkTGF0Y2hUb1Nj
cm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29u
dHJvbGxlcjo6aGFzU3RhdGVGb3JGcmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXI6OnN0YXRlRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpzdGF0ZUZvckZyYW1lIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxM
YXRjaGluZ0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXI6OmN1bXVsYXRpdmVFdmVudERlbHRhIGNvbnN0KToKKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyOjpyZWNlaXZl
ZFdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29u
dHJvbGxlcjo6bm9kZURpZEhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9U
aHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkZWRTY3Jv
bGxpbmdUcmVlOjpoYW5kbGVXaGVlbEV2ZW50QWZ0ZXJNYWluVGhyZWFkKToKKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVN
YWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFsbG93c1ZlcnRpY2FsU3Ry
ZXRjaGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpuZXdHZXN0dXJlSXNTdGFydGluZyk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OmlzR2VzdHVyZVN0YXJ0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6aXNHZXN0dXJlQ29udGludWF0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6c2hvdWxk
UmVzZXRMYXRjaGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZl
bnQ6OmlzTm9uR2VzdHVyZUV2ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
V2hlZWxFdmVudDo6c2hvdWxkQ29uc2lkZXJMYXRjaGluZyBjb25zdCk6IERlbGV0ZWQuIFJlbmFt
ZWQgdG8gaXNHZXN0dXJlU3RhcnQoKS4gVGhpcyBjbGFzcworICAgICAgICBzaG91bGQgbm90IHBy
ZXNjcmliZSBsYXRjaGluZyBiZWhhdmlvcnMuCisKIDIwMjAtMDgtMjggIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgUGFubmVyTm9kZSB0byBzdXBwb3J0
IGstcmF0ZSBhdXRvbWF0aW9uIG9mIGl0cyBBdWRpb1BhcmFtcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBh
NzlkZWNkMGI4NDE5ZDZhYmY3NzE3ZmZhNTZjZjA1ZGVlZDRkY2IxLi4zZTczOGU0MGFmYjQyYjQ1
OTk3MjU2N2I3NjRlODAwNjdlMGEwMjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTY4Myw3ICsxNjgz
LDcgQEAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAKIHBhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUuY3BwCiBwYWdlL3Nj
cm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAogcGFnZS9zY3JvbGxpbmcvQXhp
c1Njcm9sbFNuYXBPZmZzZXRzLmNwcAotcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdTdGF0
ZS5jcHAKK3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHAKIHBhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmNwcAogcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9k
ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA1ODhjNzYxZGIxNzNkYWFhYjQ0NWQ0ZDljNTlmZWRlZGE5NjFlNzI4Li44NGQz
ZTE0YWVjYTZjYTQ1ZDEyOWY4MjlhODY1OGZlYzcyNGI4NTRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDc2LDggKzEwNzYs
OCBAQAogCQk0MTZFMEIzQTIwOUJDM0NCMDA0QTk1RDkgLyogRmV0Y2hJZGVudGlmaWVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFMEIzNzIwOUJD
M0MyMDA0QTk1RDkgLyogRmV0Y2hJZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDE2RTI5QTYxMDJGQTk2MjAwN0ZDMTRFIC8qIFdv
cmtlclJlcG9ydGluZ1Byb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTZFMjlBNTEwMkZBOTYyMDA3RkMxNEUgLyogV29ya2VyUmVwb3J0aW5nUHJv
eHkuaCAqLzsgfTsKIAkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3NjREOSAvKiBSZWFkYWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjc0IC8qIFRyYW5zZm9ybVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RUEgLyogVHJhbnNmb3JtU3RyZWFtSW50ZXJuYWxz
QnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0MTZFNkZFODFCQkQxMkRGMDAwQTNGNjUgLyogSlNET01CaW5kaW5nSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
MDNEODA2MUJCMzExMEQwMEI3NjREQSAvKiBKU0RPTUJpbmRpbmdJbnRlcm5hbHNCdWlsdGlucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxNkU2
RkU4MUJCRDEyREYwMDBBM0Y3NCAvKiBUcmFuc2Zvcm1TdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYx
QkIzMTEwRDAwQjc2NEVBIC8qIFRyYW5zZm9ybVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDE2RTZGRTgx
QkJEMTJERjAwMEE2MDMzIC8qIFN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0
QzkgLyogU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVh
ZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFk
YWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBX
cml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFi
bGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yMjE1LDcgKzIyMTUsNiBAQAogCQk3QUEzQTZBMDE5NEI1
OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QUEzQTY5RTE5NEI1OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0FBM0E2
QTQxOTRCNUMyMjAwMUNCRDI0IC8qIFRpbGVDb3ZlcmFnZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FBM0E2QTIxOTRCNUMyMjAwMUNCRDI0IC8q
IFRpbGVDb3ZlcmFnZU1hcC5oICovOyB9OwogCQk3QUFCQTI1QTE0QkM2MTMzMDBBQTlBMTEgLyog
RE9NRWRpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QUFCQTI1ODE0QkM2MTMzMDBBQTlBMTEgLyogRE9NRWRpdG9yLmggKi87IH07Ci0JCTdBQUZF
OEQwMTlDQjg2NzIwMDBGNTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUFGRThDRTE5Q0I4NjcyMDAwRjU2
RDggLyogU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oICovOyB9OwogCQk3QURFNzIyNjEwQ0JCQjlCMDA2
QjNCM0EgLyogQ29udGV4dE1lbnVQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0FERTcyMjUxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRN
ZW51UHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3QUUzMzVGMjFBQ0IwOUUyMDBFNDAxRUYgLyogV2hlZWxFdmVudFRlc3RNb25pdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUUzMzVG
MDFBQ0IwOUUyMDBFNDAxRUYgLyogV2hlZWxFdmVudFRlc3RNb25pdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0FFNkM5M0MxQkUwQzYwMTAw
RTE5RTAzIC8qIE1haW5UaHJlYWRTaGFyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FFNkM5M0ExQkUwQzYwMTAwRTE5RTAzIC8qIE1haW5U
aHJlYWRTaGFyZWRUaW1lci5oICovOyB9OwpAQCAtNTk3NSw2ICs1OTc0LDggQEAKIAkJMEY5NEI2
NTMyMjA5MTU2QzAwMTU3MDE0IC8qIFNjcm9sbGluZ1RyZWVQb3NpdGlvbmVkTm9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5NEI2NTQyMjA5MTU2QzAwMTU3MDE0IC8qIFNjcm9sbGluZ1RyZWVQ
b3NpdGlvbmVkTm9kZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVQb3Np
dGlvbmVkTm9kZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NEYzN0MyMzY2
MTEzMTAwM0FBNUM3IC8qIFN0eWxlUnVsZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSdWxl
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk1MTBGMDI0RjQ3NjlDMDAx
RjUyREMgLyogU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9s
bExhdGNoaW5nQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk1
MTBGMjI0RjQ3NjlDMDAxRjUyREMgLyogU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNjcm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTdBNjU3MTU1REE4MUUwMEZBREQ0QyAvKiBEaXNwbGF5UmVm
cmVzaE1vbml0b3JJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOUI1NDc1MjJCNEE3NzIwMDdCNUU4QSAvKiBTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Ny
b2xsUHJveHlOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3Jv
bGxQcm94eU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5QjU0NzYyMkI0
QTc3MzAwN0I1RThBIC8qIFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxQcm94eU5vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbFByb3h5Tm9k
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDAwMSw4ICsxMDAwMiw2IEBA
CiAJCTdBQTNBNkEyMTk0QjVDMjIwMDFDQkQyNCAvKiBUaWxlQ292ZXJhZ2VNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlsZUNvdmVyYWdlTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdBQUJBMjU3MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NRWRpdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FBQkEyNTgxNEJDNjEzMzAwQUE5QTExIC8q
IERPTUVkaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01FZGl0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0FBRkU4Q0QxOUNCODY3MjAwMEY1NkQ4
IC8qIFNjcm9sbExhdGNoaW5nU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTdBQUZFOENFMTlDQjg2NzIwMDBGNTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbExhdGNoaW5nU3RhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FERTcyMjUxMENCQkI5QjAwNkIzQjNBIC8q
IENvbnRleHRNZW51UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29udGV4dE1lbnVQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUUz
MzVFRjFBQ0IwOUUyMDBFNDAxRUYgLyogV2hlZWxFdmVudFRlc3RNb25pdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdoZWVsRXZlbnRUZXN0TW9uaXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRTMzNUYwMUFDQjA5RTIwMEU0MDFFRiAv
KiBXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2hlZWxFdmVudFRlc3RNb25pdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMTU2NiwxMCArMTE1NjUsMTAgQEAKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFN0cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L1N0cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19E
SVI7IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3NjREOCAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0
aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlYWRhYmxlU3RyZWFtQnVp
bHRpbnMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvUmVhZGFibGVTdHJlYW1CdWls
dGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1JlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJOUIw
M0Q4MDYxQkIzMTEwRDAwQjc2NEVBIC8qIFRyYW5zZm9ybVN0cmVhbUludGVybmFsc0J1aWx0aW5z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRyYW5zZm9ybVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1RyYW5zZm9ybVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3NjREQSAvKiBKU0RPTUJpbmRpbmdJbnRlcm5hbHNC
dWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0RPTUJpbmRpbmdJ
bnRlcm5hbHNCdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RPTUJp
bmRpbmdJbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFibGVTdHJlYW1CdWlsdGlu
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXcml0YWJsZVN0cmVhbUJ1aWx0
aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1dyaXRhYmxlU3RyZWFtQnVpbHRp
bnMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOUIwM0Q4MDYxQkIz
MTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlu
cy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Xcml0YWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTlCMDNE
ODA2MUJCMzExMEQwMEI3NjRFQSAvKiBUcmFuc2Zvcm1TdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUcmFuc2Zvcm1TdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9UcmFuc2Zvcm1TdHJl
YW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQk5QjA5OEJENTFGM0Q2MDMzMDAyREQ1NjIgLyogRGF0YVRyYW5zZmVySXRlbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhVHJhbnNmZXJJdGVtLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwOThCREQxRjNENjczRDAwMkRENTYyIC8q
IEpTRGF0YVRyYW5zZmVySXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RhdGFUcmFuc2Zlckl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjA5OEJERTFGM0Q2NzNEMDAyREQ1NjIgLyogSlNEYXRhVHJhbnNmZXJJdGVtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVRyYW5zZmVySXRlbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgwMDMsOCArMTgwMDIsOCBAQAogCQkJCTkzOTFBOTlC
MTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oICovLAogCQkJ
CUE2RDVBOTlBMTYyOUQ2RkYwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlLmNwcCAqLywKIAkJCQlBNkQ1QTk5QjE2MjlENzAwMDAyOTczMzAgLyogU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oICovLAotCQkJCTdBQUZFOENEMTlDQjg2NzIwMDBG
NTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmNwcCAqLywKLQkJCQk3QUFGRThDRTE5Q0I4Njcy
MDAwRjU2RDggLyogU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oICovLAorCQkJCTBGOTUxMEYyMjRGNDc2
OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGOTUx
MEYwMjRGNDc2OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuaCAqLywKIAkJ
CQlGNDY3MjkyNTFFMERFNUFCMDBBQ0MzRDggLyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmggKi8s
CiAJCQkJMEY2MzgzREIxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5j
cHAgKi8sCiAJCQkJMEY2MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5n
VHJlZS5oICovLApAQCAtMzM0OTcsNyArMzM0OTYsNiBAQAogCQkJCTBGMzdGMDg1MjIwMkJGOTgw
MEE4OUMwQiAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjk0QjY0OTIyMDhGRTNCMDAxNTcwMTQgLyogU2Nyb2xsaW5nVHJlZVN0
aWNreU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQzU3OTVEMURBNUMzMDEwMDZGOUM5NyAv
KiBTY3JvbGxJbnRvVmlld09wdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTdBQUZFOEQwMTlD
Qjg2NzIwMDBGNTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4M0M1Nzk1RDFEQTVDMzAxMDA2RjlDODYgLyogU2Nyb2xsTG9naWNhbFBvc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4M0M1Nzk1RDFEQTVDMzAxMDA2RkFDOTcgLyogU2Nyb2xsT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ3ODc1NTQxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9s
bFNuYXBBbmltYXRvclN0YXRlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApp
bmRleCBiZDgwMjliYmY1NzRkNWVhODRjODk2YmFhMDUyOTdiOWQxY2U3NTI1Li43MjJkY2Y0YmU3
ZDI2ODE5YTBjNTZmODNkNTlkZmExZjA3MjRlZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBA
IC0xMDUsNyArMTA1LDcgQEAKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsSW50b1ZpZXdPcHRpb25z
LmgiCi0jaW5jbHVkZSAiU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIlNjcm9sbExh
dGNoaW5nQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yUXVlcnkuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXVsYXRlZENsaWNrLmgiCkBAIC0yMjU5LDkgKzIy
NTksMTEgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlIHJl
bW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXIKICAgICBpZiAoZnJhbWUpCiAgICAgICAg
IGZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5jYW5jZWxBbmltYXRpb25zKCp0aGlzKTsKIAotI2lm
IFBMQVRGT1JNKE1BQykKLSAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAg
ZnJhbWUtPnBhZ2UoKS0+cmVtb3ZlTGF0Y2hpbmdTdGF0ZUZvclRhcmdldCgqdGhpcyk7CisjaWYg
RU5BQkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQorICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFn
ZSgpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgPSBmcmFt
ZS0+cGFnZSgpLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpKQorICAgICAgICAg
ICAgc2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLT5yZW1vdmVMYXRjaGluZ1N0YXRlRm9yVGFyZ2V0
KCp0aGlzKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIGlmIChoYXNSYXJlRGF0YSgpICYmIGVsZW1l
bnRSYXJlRGF0YSgpLT5oYXNFbGVtZW50SWRlbnRpZmllcigpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKaW5kZXggYjQ1NWIxZGViNmU0OTE1ZTRlOTFhMGU1NTEwYTczMDExMzEz
ZjI0Zi4uODZlZjYwN2RjYTIwYTNkNzg4NDUyZDI2ZjgwYzY1ZmY0OGZhNDRlNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtODksNyArODksNyBAQAogI2luY2x1ZGUgIlNW
R0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTY3JvbGxBbmlt
YXRvci5oIgotI2luY2x1ZGUgIlNjcm9sbExhdGNoaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJTY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKQEAgLTM5MCw5ICszOTAsNiBA
QCBib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRMb29wSGFuZGxlTW91c2VEcmFnZ2VkKGNvbnN0IE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdAogRXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIoRnJh
bWUmIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1faG92ZXJUaW1lcigqdGhp
cywgJkV2ZW50SGFuZGxlcjo6aG92ZXJUaW1lckZpcmVkKQotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICAsIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIoKnRoaXMsICZFdmVudEhhbmRsZXI6OmNsZWFy
TGF0Y2hlZFN0YXRlVGltZXJGaXJlZCkKLSNlbmRpZgogICAgICwgbV9hdXRvc2Nyb2xsQ29udHJv
bGxlcihtYWtlVW5pcXVlPEF1dG9zY3JvbGxDb250cm9sbGVyPigpKQogI2lmICFFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKICAgICAsIG1fZmFrZU1vdXNlTW92ZUV2ZW50VGltZXIoKnRoaXMsICZF
dmVudEhhbmRsZXI6OmZha2VNb3VzZU1vdmVFdmVudFRpbWVyRmlyZWQpCkBAIC0yNzcyLDE1ICsy
NzY5LDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmlzSW5zaWRlU2Nyb2xsYmFyKGNvbnN0IEludFBv
aW50JiB3aW5kb3dQb2ludCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRXZl
bnRIYW5kbGVyOjpjbGVhckxhdGNoZWRTdGF0ZVRpbWVyRmlyZWQoKQotewotICAgIExPRyhTY3Jv
bGxMYXRjaGluZywgIkV2ZW50SGFuZGxlciAlcCBjbGVhckxhdGNoZWRTdGF0ZVRpbWVyRmlyZWQo
KSIsIHRoaXMpOwotICAgIGNsZWFyTGF0Y2hlZFN0YXRlKCk7Ci19Ci0KICNpZiAhUExBVEZPUk0o
TUFDKQogCi12b2lkIEV2ZW50SGFuZGxlcjo6ZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBIaXRUZXN0UmVzdWx0JiwgUmVmUHRyPEVsZW1l
bnQ+JiwgUmVmUHRyPENvbnRhaW5lck5vZGU+JiwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mLCBi
b29sJikKK3ZvaWQgRXZlbnRIYW5kbGVyOjpkZXRlcm1pbmVXaGVlbEV2ZW50VGFyZ2V0KGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBSZWZQdHI8RWxlbWVu
dD4mLCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYsIGJvb2wmKQogewogfQogCkBAIC0yNzkwLDcg
KzI3ODEsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6cmVjb3JkV2hlZWxFdmVudEZvckRlbHRhRmls
dGVyKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbgogICAgICAgICBwYWdlLT53aGVlbEV2
ZW50RGVsdGFGaWx0ZXIoKS0+dXBkYXRlRnJvbURlbHRhKEZsb2F0U2l6ZShldmVudC5kZWx0YVgo
KSwgZXZlbnQuZGVsdGFZKCkpKTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVl
bEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIENvbnRh
aW5lck5vZGUqLCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYpCitib29sIEV2ZW50SGFu
ZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiBldmVudCwgY29uc3QgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mKQogewogICAgIFJlZjxG
cmFtZT4gcHJvdGVjdGVkRnJhbWUobV9mcmFtZSk7CiAKQEAgLTI4MDIsNyArMjc5Myw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIGV2ZW50CiAgICAgcmV0dXJuIGRpZEhhbmRsZUV2ZW50OwogfQogCi1i
b29sIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVu
dChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBXaWRnZXQmLCBDb250YWluZXJOb2Rl
KikKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1XaWRnZXRXaGVl
bEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IFdpZGdldCYsIGNvbnN0IFdl
YWtQdHI8U2Nyb2xsYWJsZUFyZWE+JikKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTI4MTAs
MTEgKzI4MDEsNiBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmb3Jt
V2lkZ2V0V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRQogdm9pZCBFdmVudEhhbmRsZXI6
OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
LCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYpCiB7CiB9Ci0KLXZvaWQgRXZlbnRIYW5k
bGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcmluZ0xhdGNoZWRTdGF0ZUlmTmVlZGVkKGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYpCi17Ci0gICAgY2xlYXJMYXRjaGVkU3RhdGUoKTsKLX0KICAgICAK
ICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAKQEAgLTI4NTcsNyArMjg0Myw3IEBAIHN0
YXRpYyBXZWFrUHRyPFdpZGdldD4gd2lkZ2V0Rm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVt
ZW50KQogICAgIHJldHVybiBtYWtlV2Vha1B0cigqZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PigqdGFy
Z2V0KS53aWRnZXQoKSk7CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpjb21wbGV0ZVdpZGdldFdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgY29uc3QgV2Vha1B0cjxX
aWRnZXQ+JiB3aWRnZXQsIGNvbnN0IFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxl
QXJlYSwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lcikKK2Jvb2wgRXZlbnRIYW5k
bGVyOjpjb21wbGV0ZVdpZGdldFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBl
dmVudCwgY29uc3QgV2Vha1B0cjxXaWRnZXQ+JiB3aWRnZXQsIGNvbnN0IFdlYWtQdHI8U2Nyb2xs
YWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICBtX2lzSGFuZGxpbmdXaGVlbEV2ZW50
ID0gZmFsc2U7CiAgICAgCkBAIC0yODczLDcgKzI4NTksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
Y29tcGxldGVXaWRnZXRXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQs
IGNvbgogICAgIGlmICghd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIHJldHVybiBwbGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1XaWRnZXRXaGVlbEV2
ZW50KGV2ZW50LCAqd2lkZ2V0LmdldCgpLCBzY3JvbGxhYmxlQ29udGFpbmVyKTsKKyAgICByZXR1
cm4gcGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudChldmVudCwgKndpZGdl
dC5nZXQoKSwgc2Nyb2xsYWJsZUFyZWEpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxl
V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQpAQCAtMjg4OSw2ICsy
ODc1LDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiBldmVudCkKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAorICAgIGlmICghbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
I2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAgaWYgKG1fZnJhbWUucGFnZSgpLT5wb2ludGVy
TG9ja0NvbnRyb2xsZXIoKS5pc0xvY2tlZCgpKSB7CiAgICAgICAgIG1fZnJhbWUucGFnZSgpLT5w
b2ludGVyTG9ja0NvbnRyb2xsZXIoKS5kaXNwYXRjaExvY2tlZFdoZWVsRXZlbnQoZXZlbnQpOwpA
QCAtMjkwNywzMyArMjg5NiwzMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVu
dChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQogICAgIG1faXNIYW5kbGluZ1doZWVs
RXZlbnQgPSB0cnVlOwogICAgIHNldEZyYW1lV2FzU2Nyb2xsZWRCeVVzZXIoKTsKIAorICAgIGlm
IChtX2ZyYW1lLmlzTWFpbkZyYW1lKCkpIHsKKyNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJ
TkcpCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKS5y
ZWNlaXZlZFdoZWVsRXZlbnQoZXZlbnQpOworI2VuZGlmCisgICAgICAgIHJlY29yZFdoZWVsRXZl
bnRGb3JEZWx0YUZpbHRlcihldmVudCk7CisgICAgfQorCiAgICAgSGl0VGVzdFJlcXVlc3QgcmVx
dWVzdDsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKGV2
ZW50LnBvc2l0aW9uKCkpKTsKICAgICBkb2N1bWVudC0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQp
OwogCi0gICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBoYXZlIHRyYWNrIGFsbCB0aHJlZSBvZiB0YXJn
ZXRFbGVtZW50LCBzY3JvbGxhYmxlQ29udGFpbmVyIGFuZCBTY3JvbGxhYmxlQXJlYT8KICAgICBS
ZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IHJlc3VsdC50YXJnZXRFbGVtZW50KCk7Ci0gICAgUmVm
UHRyPENvbnRhaW5lck5vZGU+IHNjcm9sbGFibGVDb250YWluZXI7CiAgICAgV2Vha1B0cjxTY3Jv
bGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFyZWE7CiAgICAgYm9vbCBpc092ZXJXaWRnZXQgPSByZXN1
bHQuaXNPdmVyV2lkZ2V0KCk7Ci0gICAgCi0gICAgLy8gRklYTUU6IFVzaW5nIHRoZSB2YWx1ZSBv
ZiBpc092ZXJXaWRnZXQgZnJvbSB0aGUgbGF0Y2hpbmcgc3RhdGUgdHJpZ2dlcnMgZG91YmxlLXJl
Y3Vyc2lvbiBpbnRvIHN1YmZyYW1lcy4KKwogICAgIC8vIEZJWE1FOiBEZXNwaXRlIGRvaW5nIHRo
aXMgdXAtZnJvbnQgc2VhcmNoIGZvciB0aGUgY29ycmVjdCBzY3JvbGxhYmxlIGFyZWEsIHdlIGRp
c3BhdGNoIGV2ZW50cyB2aWEgZWxlbWVudHMgd2hpY2gKICAgICAvLyBpdHNlbGYgZmluZHMgYW5k
IHRyaWVzIHRvIHNjcm9sbCBvdmVyZmxvdyBzY3JvbGxlcnMuCi0gICAgZGV0ZXJtaW5lV2hlZWxF
dmVudFRhcmdldChldmVudCwgcmVzdWx0LCBlbGVtZW50LCBzY3JvbGxhYmxlQ29udGFpbmVyLCBz
Y3JvbGxhYmxlQXJlYSwgaXNPdmVyV2lkZ2V0KTsKLQotI2lmIEVOQUJMRShXSEVFTF9FVkVOVF9M
QVRDSElORykKLSAgICBpZiAoZXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZU5vbmUgJiYgZXZlbnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
Tm9uZSAmJiBtX2ZyYW1lLnBhZ2UoKSkKLSAgICAgICAgbV9mcmFtZS5wYWdlKCktPnJlc2V0TGF0
Y2hpbmdTdGF0ZSgpOwotI2VuZGlmCi0KLSAgICByZWNvcmRXaGVlbEV2ZW50Rm9yRGVsdGFGaWx0
ZXIoZXZlbnQpOworICAgIGRldGVybWluZVdoZWVsRXZlbnRUYXJnZXQoZXZlbnQsIGVsZW1lbnQs
IHNjcm9sbGFibGVBcmVhLCBpc092ZXJXaWRnZXQpOwogCiAgICAgaWYgKGVsZW1lbnQpIHsKICAg
ICAgICAgaWYgKGlzT3ZlcldpZGdldCkgewogICAgICAgICAgICAgaWYgKFdlYWtQdHI8V2lkZ2V0
PiB3aWRnZXQgPSB3aWRnZXRGb3JFbGVtZW50KCplbGVtZW50KSkgewogICAgICAgICAgICAgICAg
IGlmIChwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KGV2ZW50LCAqd2lkZ2V0LmdldCgpKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRlV2lkZ2V0V2hlZWxFdmVudChldmVudCwgd2lk
Z2V0LCBzY3JvbGxhYmxlQXJlYSwgc2Nyb2xsYWJsZUNvbnRhaW5lci5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZVdpZGdldFdoZWVsRXZlbnQoZXZlbnQsIHdpZGdl
dCwgc2Nyb2xsYWJsZUFyZWEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTI5NTMs
OSArMjkzOSwxOSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQogICAgIGlmIChzY3JvbGxhYmxlQXJlYSkKICAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKGZhbHNl
KTsKIAotICAgIC8vIEZJWE1FOiBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZygpIGlzIG9u
bHkgY2FsbGVkIGZvciBGcmFtZVZpZXcgc2Nyb2xsaW5nLCBub3Qgb3ZlcmZsb3cgc2Nyb2xsaW5n
LCB3aGljaCBpcyBjb25mdXNpbmcuCi0gICAgYm9vbCBoYW5kbGVkRXZlbnQgPSBwcm9jZXNzV2hl
ZWxFdmVudEZvclNjcm9sbGluZyhldmVudCwgc2Nyb2xsYWJsZUNvbnRhaW5lci5nZXQoKSwgc2Ny
b2xsYWJsZUFyZWEpOwotICAgIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChldmVudCwg
c2Nyb2xsYWJsZUFyZWEpOworICAgIC8vIEV2ZW50IGhhbmRsaW5nIG1heSBoYXZlIGRpc2Nvbm5l
Y3RlZCBtX2ZyYW1lLgorICAgIGlmICghbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGJvb2wgaGFuZGxlZEV2ZW50ID0gZmFsc2U7CisjaWYgRU5BQkxFKFdIRUVM
X0VWRU5UX0xBVENISU5HKQorICAgIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+IGxhdGNoZWRTY3Jv
bGxhYmxlQXJlYTsKKyAgICBpZiAobV9mcmFtZS5wYWdlKCktPnNjcm9sbExhdGNoaW5nQ29udHJv
bGxlcigpLmxhdGNoaW5nQWxsb3dzU2Nyb2xsaW5nSW5GcmFtZShtX2ZyYW1lLCBsYXRjaGVkU2Ny
b2xsYWJsZUFyZWEpKSB7CisgICAgICAgIC8vIEZJWE1FOiBwcm9jZXNzV2hlZWxFdmVudEZvclNj
cm9sbGluZygpIGlzIG9ubHkgY2FsbGVkIGZvciBGcmFtZVZpZXcgc2Nyb2xsaW5nLCBub3Qgb3Zl
cmZsb3cgc2Nyb2xsaW5nLCB3aGljaCBpcyBjb25mdXNpbmcuCisgICAgICAgIGhhbmRsZWRFdmVu
dCA9IHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGV2ZW50LCBsYXRjaGVkU2Nyb2xsYWJs
ZUFyZWEpOworICAgICAgICBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoZXZlbnQsIGxh
dGNoZWRTY3JvbGxhYmxlQXJlYSk7CisgICAgfQorI2VuZGlmCiAgICAgcmV0dXJuIGhhbmRsZWRF
dmVudDsKIH0KIApAQCAtMjk2Nyw5ICsyOTYzLDEwIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVh
ckxhdGNoZWRTdGF0ZSgpCiAKICNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCiAgICAg
TE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwgIkV2ZW50SGFuZGxlcjo6
Y2xlYXJMYXRjaGVkU3RhdGUoKSIpOwotICAgIHBhZ2UtPnJlc2V0TGF0Y2hpbmdTdGF0ZSgpOwor
ICAgIGlmIChhdXRvKiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgPSBwYWdlLT5zY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpKQorICAgICAgICBzY3JvbGxMYXRjaGluZ0NvbnRyb2xs
ZXItPnJlbW92ZUxhdGNoaW5nU3RhdGVGb3JGcmFtZShtX2ZyYW1lKTsKICNlbmRpZgotICAgIGlm
IChhdXRvIGZpbHRlciA9IHBhZ2UtPndoZWVsRXZlbnREZWx0YUZpbHRlcigpKQorICAgIGlmIChh
dXRvKiBmaWx0ZXIgPSBwYWdlLT53aGVlbEV2ZW50RGVsdGFGaWx0ZXIoKSkKICAgICAgICAgZmls
dGVyLT5lbmRGaWx0ZXJpbmdEZWx0YXMoKTsKIH0KIApAQCAtMjk3OCw2ICsyOTc1LDkgQEAgdm9p
ZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcihOb2RlKiBzdGFydE5vZGUs
IFdoZWVsRXZlbnQmIHdoZWVsRXYKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJu
OwogICAgIAorICAgIGlmICghbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGF1dG8gcHJvdGVjdGVkRnJhbWUgPSBtYWtlUmVmKG1fZnJhbWUpOwogCiAgICAgRmxvYXRTaXpl
IGZpbHRlcmVkUGxhdGZvcm1EZWx0YSh3aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVlbEV2ZW50LmRl
bHRhWSgpKTsKQEAgLTI5ODgsMTAgKzI5ODgsMjkgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1
bHRXaGVlbEV2ZW50SGFuZGxlcihOb2RlKiBzdGFydE5vZGUsIFdoZWVsRXZlbnQmIHdoZWVsRXYK
ICAgICB9CiAKICNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCi0gICAgaWYgKG1fZnJh
bWUucGFnZSgpICYmIG1fZnJhbWUucGFnZSgpLT53aGVlbEV2ZW50RGVsdGFGaWx0ZXIoKS0+aXNG
aWx0ZXJpbmdEZWx0YXMoKSkgeworICAgIGlmIChtX2ZyYW1lLnBhZ2UoKS0+d2hlZWxFdmVudERl
bHRhRmlsdGVyKCktPmlzRmlsdGVyaW5nRGVsdGFzKCkpIHsKICAgICAgICAgZmlsdGVyZWRQbGF0
Zm9ybURlbHRhID0gbV9mcmFtZS5wYWdlKCktPndoZWVsRXZlbnREZWx0YUZpbHRlcigpLT5maWx0
ZXJlZERlbHRhKCk7CiAgICAgICAgIGZpbHRlcmVkVmVsb2NpdHkgPSBtX2ZyYW1lLnBhZ2UoKS0+
d2hlZWxFdmVudERlbHRhRmlsdGVyKCktPmZpbHRlcmVkVmVsb2NpdHkoKTsKICAgICB9CisKKyAg
ICBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiBsYXRjaGVkU2Nyb2xsZXI7CisgICAgaWYgKCFtX2Zy
YW1lLnBhZ2UoKS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkubGF0Y2hpbmdBbGxvd3NTY3Jv
bGxpbmdJbkZyYW1lKG1fZnJhbWUsIGxhdGNoZWRTY3JvbGxlcikpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChsYXRjaGVkU2Nyb2xsZXIpIHsKKyAgICAgICAgaWYgKGxhdGNoZWRTY3JvbGxl
ciA9PSBtX2ZyYW1lLnZpZXcoKSkgeworICAgICAgICAgICAgLy8gRnJhbWVWaWV3IHNjcm9sbGlu
ZyBpcyBoYW5kbGVkIHZpYSBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZygpLgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBwbGF0Zm9ybUV2ZW50ID0g
d2hlZWxFdmVudC51bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOworICAgICAgICBpZiAocGxhdGZv
cm1FdmVudCkgeworICAgICAgICAgICAgYXV0byBjb3BpZWRFdmVudCA9IHBsYXRmb3JtRXZlbnQt
PmNvcHlXaXRoRGVsdGFzQW5kVmVsb2NpdHkoZmlsdGVyZWRQbGF0Zm9ybURlbHRhLndpZHRoKCks
IGZpbHRlcmVkUGxhdGZvcm1EZWx0YS5oZWlnaHQoKSwgZmlsdGVyZWRWZWxvY2l0eSk7CisgICAg
ICAgICAgICBpZiAobGF0Y2hlZFNjcm9sbGVyLT5oYW5kbGVXaGVlbEV2ZW50KGNvcGllZEV2ZW50
KSkKKyAgICAgICAgICAgICAgICB3aGVlbEV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAjZW5kaWYKIAogICAgIGlmIChoYW5k
bGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xvc2luZ0JveChzdGFydE5vZGUsIHdoZWVsRXZl
bnQsIGZpbHRlcmVkUGxhdGZvcm1EZWx0YSwgZmlsdGVyZWRWZWxvY2l0eSkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAppbmRleCA2MTc5MDVlMDFiMWRkZjBkMWUwYzFkNGVlYjgzNDhlNzll
YWJiMmExLi4xNzFhZTQ3Zjc3YTY3YjNkMTMyZjA0Y2U2YmViYjg1MzQ0ZGMxZGU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTQ1MSwxMyArNDUxLDEzIEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqKTsKIAogICAgIGJvb2wg
cGFzc1doZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBXaWRnZXQm
KTsKLSAgICB2b2lkIGRldGVybWluZVdoZWVsRXZlbnRUYXJnZXQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiwgY29uc3QgSGl0VGVzdFJlc3VsdCYsIFJlZlB0cjxFbGVtZW50PiYgZXZlbnRUYXJn
ZXQsIFJlZlB0cjxDb250YWluZXJOb2RlPiYgc2Nyb2xsYWJsZUNvbnRhaW5lciwgV2Vha1B0cjxT
Y3JvbGxhYmxlQXJlYT4mLCBib29sJiBpc092ZXJXaWRnZXQpOworICAgIHZvaWQgZGV0ZXJtaW5l
V2hlZWxFdmVudFRhcmdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBSZWZQdHI8RWxlbWVu
dD4mIGV2ZW50VGFyZ2V0LCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYsIGJvb2wmIGlzT3Zlcldp
ZGdldCk7CiAgICAgdm9pZCByZWNvcmRXaGVlbEV2ZW50Rm9yRGVsdGFGaWx0ZXIoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50Jik7Ci0gICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGlu
Zyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBDb250YWluZXJOb2RlKiBzY3JvbGxhYmxlQ29u
dGFpbmVyLCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYpOworICAgIGJvb2wgcHJvY2Vz
c1doZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgY29uc3Qg
V2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mKTsKICAgICB2b2lkIHByb2Nlc3NXaGVlbEV2ZW50Rm9y
U2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBXZWFrUHRyPFNjcm9s
bGFibGVBcmVhPiYpOwotICAgIGJvb2wgY29tcGxldGVXaWRnZXRXaGVlbEV2ZW50KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IFdlYWtQdHI8V2lkZ2V0PiYsIGNvbnN0IFdlYWtQdHI8
U2Nyb2xsYWJsZUFyZWE+JiwgQ29udGFpbmVyTm9kZSopOworICAgIGJvb2wgY29tcGxldGVXaWRn
ZXRXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IFdlYWtQdHI8V2lk
Z2V0PiYsIGNvbnN0IFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+Jik7CiAKLSAgICBib29sIHBsYXRm
b3JtQ29tcGxldGVQbGF0Zm9ybVdpZGdldFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiwgY29uc3QgV2lkZ2V0JiwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lcik7
CisgICAgYm9vbCBwbGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1XaWRnZXRXaGVlbEV2ZW50KGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IFdpZGdldCYsIGNvbnN0IFdlYWtQdHI8U2Nyb2xs
YWJsZUFyZWE+Jik7CiAKICAgICB2b2lkIGRlZmF1bHRTcGFjZUV2ZW50SGFuZGxlcihLZXlib2Fy
ZEV2ZW50Jik7CiAgICAgdm9pZCBkZWZhdWx0QmFja3NwYWNlRXZlbnRIYW5kbGVyKEtleWJvYXJk
RXZlbnQmKTsKQEAgLTUwMyw4ICs1MDMsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgYXV0b0hpZGVD
dXJzb3JUaW1lckZpcmVkKCk7CiAjZW5kaWYKIAotICAgIHZvaWQgY2xlYXJPclNjaGVkdWxlQ2xl
YXJpbmdMYXRjaGVkU3RhdGVJZk5lZWRlZChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKLSAg
ICB2b2lkIGNsZWFyTGF0Y2hlZFN0YXRlVGltZXJGaXJlZCgpOwogICAgIHZvaWQgY2xlYXJMYXRj
aGVkU3RhdGUoKTsKIAogICAgIGJvb2wgc2hvdWxkU2VuZE1vdXNlRXZlbnRzVG9JbmFjdGl2ZVdp
bmRvd3MoKSBjb25zdDsKQEAgLTUzNiwxMCArNTM0LDYgQEAgcHJpdmF0ZToKICAgICBUaW1lciBt
X2hvdmVyVGltZXI7CiAgICAgYm9vbCBtX2hhc1NjaGVkdWxlZEN1cnNvclVwZGF0ZSB7IGZhbHNl
IH07CiAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgVGltZXIgbV9jbGVhckxhdGNoaW5nU3RhdGVU
aW1lcjsKLSNlbmRpZgotCiAgICAgc3RkOjp1bmlxdWVfcHRyPEF1dG9zY3JvbGxDb250cm9sbGVy
PiBtX2F1dG9zY3JvbGxDb250cm9sbGVyOwogICAgIGJvb2wgbV9tb3VzZURvd25NYXlTdGFydEF1
dG9zY3JvbGwgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9tb3VzZURvd25XYXNJblN1YmZyYW1lIHsg
ZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IGE3NzgxMGIwMjBiZjVhOGQ4NTIyY2FjOGIy
NWIzNjkyNTg4MzI1OTcuLjU2ZGM1ZDdhMDgwZWVjOTFiMWI1ZWYxYjI4YzA0M2VlNmQ2NDRhYTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtMTEyLDcgKzExMiw3IEBACiAjaW5jbHVkZSAiU2NyaXB0
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcmlwdERpc2FsbG93ZWRTY29wZS5oIgogI2luY2x1
ZGUgIlNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNjcm9sbExhdGNo
aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC0yODM4LDcgKzI4MzgsNyBAQCB2b2lkIFBhZ2U6OnN0
YXJ0TW9uaXRvcmluZ1doZWVsRXZlbnRzKGJvb2wgY2xlYXJMYXRjaGluZ1N0YXRlKQogCiAjaWYg
RU5BQkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQogICAgIGlmIChjbGVhckxhdGNoaW5nU3RhdGUp
Ci0gICAgICAgIHJlc2V0TGF0Y2hpbmdTdGF0ZSgpOworICAgICAgICBzY3JvbGxMYXRjaGluZ0Nv
bnRyb2xsZXIoKS5jbGVhcigpOwogI2VuZGlmCiAKICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0g
bWFpbkZyYW1lKCkudmlldygpKSB7CkBAIC0zMTQxLDQzICszMTQxLDE3IEBAIHZvaWQgUGFnZTo6
YXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKQogfQogCiAjaWYgRU5BQkxFKFdIRUVMX0VWRU5U
X0xBVENISU5HKQotU2Nyb2xsTGF0Y2hpbmdTdGF0ZSogUGFnZTo6bGF0Y2hpbmdTdGF0ZSgpCitT
Y3JvbGxMYXRjaGluZ0NvbnRyb2xsZXImIFBhZ2U6OnNjcm9sbExhdGNoaW5nQ29udHJvbGxlcigp
CiB7Ci0gICAgaWYgKG1fbGF0Y2hpbmdTdGF0ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgcmV0dXJuICZtX2xhdGNoaW5nU3RhdGUubGFzdCgpOwotfQotCi12b2lk
IFBhZ2U6OnB1c2hOZXdMYXRjaGluZ1N0YXRlKFNjcm9sbExhdGNoaW5nU3RhdGUmJiBzdGF0ZSkK
LXsKLSAgICBtX2xhdGNoaW5nU3RhdGUuYXBwZW5kKFdURk1vdmUoc3RhdGUpKTsKLX0KLQotdm9p
ZCBQYWdlOjpyZXNldExhdGNoaW5nU3RhdGUoKQotewotICAgIG1fbGF0Y2hpbmdTdGF0ZS5jbGVh
cigpOworICAgIGlmICghbV9zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIpCisgICAgICAgIG1fc2Ny
b2xsTGF0Y2hpbmdDb250cm9sbGVyID0gbWFrZVVuaXF1ZTxTY3JvbGxMYXRjaGluZ0NvbnRyb2xs
ZXI+KCk7CisgICAgICAgIAorICAgIHJldHVybiAqbV9zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI7
CiB9CiAKLXZvaWQgUGFnZTo6cG9wTGF0Y2hpbmdTdGF0ZSgpCitTY3JvbGxMYXRjaGluZ0NvbnRy
b2xsZXIqIFBhZ2U6OnNjcm9sbExhdGNoaW5nQ29udHJvbGxlcklmRXhpc3RzKCkKIHsKLSAgICBt
X2xhdGNoaW5nU3RhdGUucmVtb3ZlTGFzdCgpOwotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxM
YXRjaGluZywgc3RyZWFtIDw8ICJQYWdlOjpwb3BMYXRjaGluZ1N0YXRlKCkgLSBuZXcgc3RhdGUg
IiA8PCBtX2xhdGNoaW5nU3RhdGUpOwotfQotCi12b2lkIFBhZ2U6OnJlbW92ZUxhdGNoaW5nU3Rh
dGVGb3JUYXJnZXQoRWxlbWVudCYgdGFyZ2V0Tm9kZSkKLXsKLSAgICBpZiAobV9sYXRjaGluZ1N0
YXRlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXRjaGluZ1N0YXRlLnJl
bW92ZUFsbE1hdGNoaW5nKFsmdGFyZ2V0Tm9kZV0gKFNjcm9sbExhdGNoaW5nU3RhdGUmIHN0YXRl
KSB7Ci0gICAgICAgIGF1dG8qIHdoZWVsRWxlbWVudCA9IHN0YXRlLndoZWVsRXZlbnRFbGVtZW50
KCk7Ci0gICAgICAgIGlmICghd2hlZWxFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIHJldHVybiB0YXJnZXROb2RlLmlzRXF1YWxOb2RlKHdoZWVsRWxlbWVudCk7
Ci0gICAgfSk7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwg
IlBhZ2U6OnJlbW92ZUxhdGNoaW5nU3RhdGVGb3JUYXJnZXQoKSAtIG5ldyBzdGF0ZSAiIDw8IG1f
bGF0Y2hpbmdTdGF0ZSk7CisgICAgcmV0dXJuIG1fc2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmdl
dCgpOwogfQogI2VuZGlmIC8vIEVOQUJMRShXSEVFTF9FVkVOVF9MQVRDSElORykKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuaAppbmRleCBiZTQ1NDMwMGJiZDA3NWQwZjgxOGM5OTlhY2E4ZjM0OTFkYzk5NmQyLi4wYWIy
YmI1NTAxOTQwYmQ0MWZkMTAwM2IzMGU2NmMwZTA3MTdhNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApAQCAt
MTMxLDcgKzEzMSw3IEBAIGNsYXNzIFBvaW50ZXJMb2NrQ29udHJvbGxlcjsKIGNsYXNzIFByb2dy
ZXNzVHJhY2tlcjsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlc291cmNlVXNhZ2VPdmVy
bGF5OwotY2xhc3MgU2Nyb2xsTGF0Y2hpbmdTdGF0ZTsKK2NsYXNzIFNjcm9sbExhdGNoaW5nQ29u
dHJvbGxlcjsKIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOwogY2xhc3MgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjsKIGNsYXNzIFNldHRpbmdzOwpAQCAtNDQ4LDEyICs0NDgsOCBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXSEVFTF9FVkVOVF9MQVRDSElORykKLSAgICBTY3Jv
bGxMYXRjaGluZ1N0YXRlKiBsYXRjaGluZ1N0YXRlKCk7Ci0gICAgY29uc3QgVmVjdG9yPFNjcm9s
bExhdGNoaW5nU3RhdGU+JiBsYXRjaGluZ1N0YXRlU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2xh
dGNoaW5nU3RhdGU7IH0KLSAgICB2b2lkIHB1c2hOZXdMYXRjaGluZ1N0YXRlKFNjcm9sbExhdGNo
aW5nU3RhdGUmJik7Ci0gICAgdm9pZCBwb3BMYXRjaGluZ1N0YXRlKCk7Ci0gICAgdm9pZCByZXNl
dExhdGNoaW5nU3RhdGUoKTsKLSAgICB2b2lkIHJlbW92ZUxhdGNoaW5nU3RhdGVGb3JUYXJnZXQo
RWxlbWVudCYpOworICAgIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlciYgc2Nyb2xsTGF0Y2hpbmdD
b250cm9sbGVyKCk7CisgICAgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKiBzY3JvbGxMYXRjaGlu
Z0NvbnRyb2xsZXJJZkV4aXN0cygpOwogI2VuZGlmIC8vIEVOQUJMRShXSEVFTF9FVkVOVF9MQVRD
SElORykKIAogI2lmIEVOQUJMRShBUFBMRV9QQVkpCkBAIC0xMDM4LDcgKzEwMzQsNyBAQCBwcml2
YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBlcmZvcm1hbmNlTG9nZ2luZz4gbV9wZXJmb3Jt
YW5jZUxvZ2dpbmc7CiAjaWYgRU5BQkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQotICAgIFZlY3Rv
cjxTY3JvbGxMYXRjaGluZ1N0YXRlPiBtX2xhdGNoaW5nU3RhdGU7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcj4gbV9zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI7
CiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpICYmIChFTkFCTEUoU0VSVklDRV9DT05UUk9MUykg
fHwgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSkKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcj4gbV9zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4IGMxYmVm
MTUzMjA0OTA3ZmE4YmYzODEyMWQwMGFjOWQ3NGI2ZjJlZjQuLjNmMjU4ZmQ4NGQzYzE5OTA4Yzg2
MjA3MTQzYTQ5YWVkZjY3ZTkyZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhh
bmRsZXJNYWMubW0KQEAgLTU5LDcgKzU5LDcgQEAKICNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oIgogI2ltcG9ydCAiU2NyZWVuUHJvcGVydGllcy5oIgogI2ltcG9ydCAiU2Nyb2xs
QW5pbWF0b3IuaCIKLSNpbXBvcnQgIlNjcm9sbExhdGNoaW5nU3RhdGUuaCIKKyNpbXBvcnQgIlNj
cm9sbExhdGNoaW5nQ29udHJvbGxlci5oIgogI2ltcG9ydCAiU2Nyb2xsYWJsZUFyZWEuaCIKICNp
bXBvcnQgIlNjcm9sbGJhci5oIgogI2ltcG9ydCAiU2V0dGluZ3MuaCIKQEAgLTc4NCw3ICs3ODQs
OCBAQCBzdGF0aWMgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhRm9yQm94KFJlbmRlckJv
eCYgYm94KQogCiAgICAgcmV0dXJuIGJveC5sYXllcigpOwogfQotICAgIAorCisvLyBGSVhNRTog
VGhpcyBjb3VsZCBiZSB3cml0dGVuIGluIHRlcm1zIG9mIFNjcm9sbGFibGVBcmVhOjplbmNsb3Np
bmdTY3JvbGxhYmxlQXJlYSgpLgogc3RhdGljIENvbnRhaW5lck5vZGUqIGZpbmRFbmNsb3NpbmdT
Y3JvbGxhYmxlQ29udGFpbmVyKENvbnRhaW5lck5vZGUqIG5vZGUsIGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKICAgICBhdXRvIGJpYXNlZERlbHRhID0gU2Nyb2xsQ29u
dHJvbGxlcjo6d2hlZWxEZWx0YUJpYXNpbmdUb3dhcmRzVmVydGljYWwod2hlZWxFdmVudCk7CkBA
IC04MTcsNDAgKzgxOCw2IEBAIHN0YXRpYyBDb250YWluZXJOb2RlKiBmaW5kRW5jbG9zaW5nU2Ny
b2xsYWJsZUNvbnRhaW5lcihDb250YWluZXJOb2RlKiBub2RlLCBjb25zCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLXN0YXRpYyBib29sIGRlbHRhSXNQcmVkb21pbmFudGx5VmVydGljYWwoZmxv
YXQgZGVsdGFYLCBmbG9hdCBkZWx0YVkpCi17Ci0gICAgcmV0dXJuIHN0ZDo6YWJzKGRlbHRhWSkg
PiBzdGQ6OmFicyhkZWx0YVgpOwotfQotICAgIAotc3RhdGljIGJvb2wgc2Nyb2xsZWRUb0VkZ2VJ
bkRvbWluYW50RGlyZWN0aW9uKGNvbnN0IENvbnRhaW5lck5vZGUmIGNvbnRhaW5lciwgY29uc3Qg
U2Nyb2xsYWJsZUFyZWEmIGFyZWEsIGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQotewotICAg
IGlmICghY29udGFpbmVyLnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKCFhcmVhLmNhbkhhdmVTY3JvbGxiYXJzKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gY29udGFpbmVyLnJlbmRlcmVyKCktPnN0eWxl
KCk7Ci0KLSAgICBpZiAoIWRlbHRhSXNQcmVkb21pbmFudGx5VmVydGljYWwoZGVsdGFYLCBkZWx0
YVkpICYmIGRlbHRhWCkgewotICAgICAgICBpZiAoc3R5bGUub3ZlcmZsb3dYKCkgPT0gT3ZlcmZs
b3c6OkhpZGRlbikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmIChkZWx0
YVggPCAwKQotICAgICAgICAgICAgcmV0dXJuIGFyZWEuc2Nyb2xsZWRUb1JpZ2h0KCk7Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4gYXJlYS5zY3JvbGxlZFRvTGVmdCgpOwotICAgIH0KLQotICAg
IGlmIChzdHlsZS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6SGlkZGVuKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmIChkZWx0YVkgPCAwKQotICAgICAgICByZXR1cm4gYXJlYS5zY3Jv
bGxlZFRvQm90dG9tKCk7Ci0gICAgCi0gICAgcmV0dXJuIGFyZWEuc2Nyb2xsZWRUb1RvcCgpOwot
fQotCiBzdGF0aWMgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFyZWFGb3JFdmVu
dFRhcmdldChFbGVtZW50KiBldmVudFRhcmdldCkKIHsKICAgICBhdXRvKiB3aWRnZXQgPSBFdmVu
dEhhbmRsZXI6OndpZGdldEZvckV2ZW50VGFyZ2V0KGV2ZW50VGFyZ2V0KTsKQEAgLTg2OSw0MyAr
ODM2LDYgQEAgc3RhdGljIGJvb2wgZXZlbnRUYXJnZXRJc1BsYXRmb3JtV2lkZ2V0KEVsZW1lbnQq
IGV2ZW50VGFyZ2V0KQogICAgIHJldHVybiB3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCk7CiB9CiAK
LXN0YXRpYyBib29sIGxhdGNoaW5nSXNMb2NrZWRUb1BsYXRmb3JtRnJhbWUoY29uc3QgRnJhbWUm
IGZyYW1lKQotewotICAgIGF1dG8qIHBhZ2UgPSBmcmFtZS5wYWdlKCk7Ci0gICAgaWYgKCFwYWdl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTY3JvbGxMYXRjaGluZ1N0YXRlKiBsYXRj
aGVkU3RhdGUgPSBwYWdlLT5sYXRjaGluZ1N0YXRlKCk7Ci0gICAgaWYgKCFsYXRjaGVkU3RhdGUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChmcmFtZUhhc1BsYXRmb3JtV2lkZ2V0
KGZyYW1lKSAmJiAmZnJhbWUgIT0gbGF0Y2hlZFN0YXRlLT5mcmFtZSgpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgbGF0Y2hpbmdJ
c0xvY2tlZFRvQW5jZXN0b3JPZlRoaXNGcmFtZShjb25zdCBGcmFtZSYgZnJhbWUpCi17Ci0gICAg
YXV0byogcGFnZSA9IGZyYW1lLnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIFNjcm9sbExhdGNoaW5nU3RhdGUqIGxhdGNoZWRTdGF0ZSA9IHBhZ2Ut
PmxhdGNoaW5nU3RhdGUoKTsKLSAgICBpZiAoIWxhdGNoZWRTdGF0ZSB8fCAhbGF0Y2hlZFN0YXRl
LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoJmZyYW1lID09IGxh
dGNoZWRTdGF0ZS0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChG
cmFtZSogYW5jZXN0b3IgPSBmcmFtZS50cmVlKCkucGFyZW50KCk7IGFuY2VzdG9yOyBhbmNlc3Rv
ciA9IGFuY2VzdG9yLT50cmVlKCkucGFyZW50KCkpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9yID09
IGxhdGNoZWRTdGF0ZS0+ZnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBXZWFrUHRyPFNjcm9sbGFibGVB
cmVhPiBzY3JvbGxhYmxlQXJlYUZvckNvbnRhaW5lck5vZGUoQ29udGFpbmVyTm9kZSYgY29udGFp
bmVyKQogewogICAgIGF1dG8gYm94ID0gY29udGFpbmVyLnJlbmRlckJveCgpOwpAQCAtOTE5LDEx
MyArODQ5LDM4IEBAIHN0YXRpYyBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiBzY3JvbGxhYmxlQXJl
YUZvckNvbnRhaW5lck5vZGUoQ29udGFpbmVyTm9kZSYgY29uCiAgICAgcmV0dXJuIG1ha2VXZWFr
UHRyKCpzY3JvbGxhYmxlQXJlYVB0cik7CiB9CiAKLXN0YXRpYyBib29sIGxhdGNoZWRUb0ZyYW1l
T3JCb2R5KENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKLXsKLSAgICAvLyBGSVhNRSgxMDYxMzMp
OiBXZSBtaWdodCBuZWVkIHRvIGFkZCBvciBzd2l0Y2ggdG8gaXM8SFRNTERvY3VtZW50RWxlbWVu
dD4gd2hlbiB0aGlzIGJ1ZyBpcyBmaXhlZC4KLSAgICByZXR1cm4gaXM8SFRNTEZyYW1lU2V0RWxl
bWVudD4oY29udGFpbmVyKSB8fCBpczxIVE1MQm9keUVsZW1lbnQ+KGNvbnRhaW5lcik7Ci19Ci0K
LXZvaWQgRXZlbnRIYW5kbGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcmluZ0xhdGNoZWRTdGF0ZUlm
TmVlZGVkKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKCFtX2Zy
YW1lLmlzTWFpbkZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFBsYXRmb3JtIGRv
ZXMgbm90IHByb3ZpZGUgYW4gaW5kaWNhdGlvbiB0aGF0IGl0IHdpbGwgc3dpdGNoIGZyb20gbm9u
LW1vbWVudHVtIHRvIG1vbWVudHVtIHNjcm9sbGluZwotICAgIC8vIHdoZW4gaGFuZGxpbmcgd2hl
ZWwgZXZlbnRzLgotICAgIC8vIExvZ2ljIGJlbG93IGluc3RhbGxzIGEgdGltZXIgd2hlbiBub24t
bW9tZW50dW0gc2Nyb2xsaW5nIGVuZHMuIElmIG1vbWVudHVtIHNjcm9sbCBkb2VzIG5vdCBzdGFy
dCB3aXRoaW4gdGhhdCBpbnRlcnZhbCwKLSAgICAvLyByZXNldCB0aGUgbGF0Y2hlZCBzdGF0ZS4g
SWYgaXQgZG9lcywgc3RvcCB0aGUgdGltZXIsIGxlYXZpbmcgdGhlIGxhdGNoZWQgc3RhdGUgdW50
b3VjaGVkLgotICAgIGlmICghbV9jbGVhckxhdGNoaW5nU3RhdGVUaW1lci5pc0FjdGl2ZSgpKSB7
Ci0gICAgICAgIGlmIChldmVudC5pc0VuZE9mTm9uTW9tZW50dW1TY3JvbGwoKSkgewotICAgICAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwgIkV2ZW50SGFu
ZGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3RhdGVJZk5lZWRlZCgpIC0gZXZl
bnQiIDw8IGV2ZW50IDw8ICIsIHNjaGVkdWxpbmcgY2xlYXIgdGltZXIiKTsKLSAgICAgICAgICAg
IG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIuc3RhcnRPbmVTaG90KHJlc2V0TGF0Y2hlZFN0YXRl
VGltZW91dCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiBhbm90aGVy
IHdoZWVsIGV2ZW50IHNjcm9sbGluZyBzdGFydHMsIHN0b3AgdGhlIHRpbWVyIG1hbnVhbGx5LCBh
bmQgcmVzZXQgdGhlIGxhdGNoZWQgc3RhdGUgaW1tZWRpYXRlbHkuCi0gICAgICAgIGlmIChldmVu
dC5zaG91bGRDb25zaWRlckxhdGNoaW5nKCkpIHsKLSAgICAgICAgICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRsZXI6OmNsZWFyT3JTY2hlZHVs
ZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQoKSAtIGV2ZW50IiA8PCBldmVudCA8PCAiLCB0
aW1lciBwZW5kaW5nLCBhbm90aGVyIHNjcm9sbCBzdGFydGluZyIpOwotICAgICAgICAgICAgaWYg
KGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKLSAgICAgICAgICAgICAgICBwYWdlLT5yZXNl
dExhdGNoaW5nU3RhdGUoKTsKLSAgICAgICAgICAgIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIu
c3RvcCgpOwotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmlzVHJhbnNpdGlvbmluZ1RvTW9tZW50
dW1TY3JvbGwoKSkgewotICAgICAgICAgICAgLy8gV2hlZWwgZXZlbnRzIG1hY2hpbmFyeSBpcyB0
cmFuc2l0aW9uaW5nIHRvIG1vbWVudHVtIHNjcm9sbGluZywgc28gbm8gbmVlZCB0byByZXNldCBs
YXRjaGVkIHN0YXRlLiBTdG9wIHRoZSB0aW1lci4KLSAgICAgICAgICAgIG1fY2xlYXJMYXRjaGlu
Z1N0YXRlVGltZXIuc3RvcCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEV2ZW50SGFu
ZGxlcjo6ZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
IHdoZWVsRXZlbnQsIGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgUmVmUHRyPEVsZW1lbnQ+
JiB3aGVlbEV2ZW50VGFyZ2V0LCBSZWZQdHI8Q29udGFpbmVyTm9kZT4mIHNjcm9sbGFibGVDb250
YWluZXIsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSwgYm9vbCYgaXNP
dmVyV2lkZ2V0KQordm9pZCBFdmVudEhhbmRsZXI6OmRldGVybWluZVdoZWVsRXZlbnRUYXJnZXQo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBSZWZQdHI8RWxlbWVudD4mIHdo
ZWVsRXZlbnRUYXJnZXQsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSwg
Ym9vbCYgaXNPdmVyV2lkZ2V0KQogewotICAgIGNsZWFyT3JTY2hlZHVsZUNsZWFyaW5nTGF0Y2hl
ZFN0YXRlSWZOZWVkZWQod2hlZWxFdmVudCk7Ci0KICAgICBhdXRvKiBwYWdlID0gbV9mcmFtZS5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvKiB2aWV3
ID0gbV9mcmFtZS52aWV3KCk7Ci0KICAgICBpZiAoIXZpZXcpCi0gICAgICAgIHNjcm9sbGFibGVD
b250YWluZXIgPSB3aGVlbEV2ZW50VGFyZ2V0OworICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
ZXZlbnRUYXJnZXRJc1BsYXRmb3JtV2lkZ2V0KHdoZWVsRXZlbnRUYXJnZXQuZ2V0KCkpKQorICAg
ICAgICBzY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhRm9yRXZlbnRUYXJnZXQod2hlZWxF
dmVudFRhcmdldC5nZXQoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChldmVudFRhcmdldElz
UGxhdGZvcm1XaWRnZXQod2hlZWxFdmVudFRhcmdldC5nZXQoKSkpIHsKLSAgICAgICAgICAgIHNj
cm9sbGFibGVDb250YWluZXIgPSB3aGVlbEV2ZW50VGFyZ2V0OwotICAgICAgICAgICAgc2Nyb2xs
YWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYUZvckV2ZW50VGFyZ2V0KHdoZWVsRXZlbnRUYXJnZXQu
Z2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2Nyb2xsYWJsZUNvbnRhaW5l
ciA9IGZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKHdoZWVsRXZlbnRUYXJnZXQuZ2V0
KCksIHdoZWVsRXZlbnQpOwotICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVDb250YWluZXIgJiYg
IWlzPEhUTUxJRnJhbWVFbGVtZW50Pih3aGVlbEV2ZW50VGFyZ2V0KSkKLSAgICAgICAgICAgICAg
ICBzY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhRm9yQ29udGFpbmVyTm9kZSgqc2Nyb2xs
YWJsZUNvbnRhaW5lcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2h5IGRvZXMgdGhpcyBhc3N1bWUgdGhlIGJvZHk/IFdoYXQgaWYgd2UgaGl0IGFuIGlm
cmFtZSBpbnNpZGUgYW4gb3ZlcmZsb3c6c2Nyb2xsPwotICAgICAgICAgICAgICAgIHNjcm9sbGFi
bGVDb250YWluZXIgPSB2aWV3LT5mcmFtZSgpLmRvY3VtZW50KCktPmJvZHlPckZyYW1lc2V0KCk7
Ci0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBtYWtlV2Vha1B0cihzdGF0aWNfY2Fz
dDxTY3JvbGxhYmxlQXJlYSY+KCp2aWV3KSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRsZXI6
OmRldGVybWluZVdoZWVsRXZlbnRUYXJnZXQoKSAtIGV2ZW50IiA8PCB3aGVlbEV2ZW50IDw8ICIg
Zm91bmQgc2Nyb2xsYWJsZUNvbnRhaW5lciIgPDwgVmFsdWVPck51bGwoc2Nyb2xsYWJsZUNvbnRh
aW5lci5nZXQoKSkgPDwgIiBzY3JvbGxhYmxlQXJlYSAiIDw8IChzY3JvbGxhYmxlQXJlYSA/IHNj
cm9sbGFibGVBcmVhLmdldCgpIDogbnVsbHB0cikpOwotICAgICAgICB9CisgICAgICAgIGF1dG8q
IHNjcm9sbGFibGVDb250YWluZXIgPSBmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lcih3
aGVlbEV2ZW50VGFyZ2V0LmdldCgpLCB3aGVlbEV2ZW50KTsKKyAgICAgICAgaWYgKHNjcm9sbGFi
bGVDb250YWluZXIpCisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVh
Rm9yQ29udGFpbmVyTm9kZSgqc2Nyb2xsYWJsZUNvbnRhaW5lcik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gbWFrZVdlYWtQdHIoc3RhdGljX2Nhc3Q8U2Nyb2xs
YWJsZUFyZWEmPigqdmlldykpOwogICAgIH0KIAorICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxM
YXRjaGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRsZXI6OmRldGVybWluZVdoZWVsRXZlbnRUYXJn
ZXQoKSAtIGV2ZW50IiA8PCB3aGVlbEV2ZW50IDw8ICIgZm91bmQgc2Nyb2xsYWJsZUFyZWEgIiA8
PCBWYWx1ZU9yTnVsbChzY3JvbGxhYmxlQXJlYS5nZXQoKSkgPDwgIiwgbGF0Y2hpbmcgc3RhdGUg
aXMgIiA8PCBwYWdlLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKSk7CisKICAgICBpZiAoc2Ny
b2xsYWJsZUFyZWEgJiYgcGFnZS0+aXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKICAgICAgICAg
c2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9y
KHBhZ2UtPndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKIAotICAgIGF1dG8qIGxhdGNoaW5nU3Rh
dGUgPSBwYWdlLT5sYXRjaGluZ1N0YXRlKCk7Ci0gICAgaWYgKHdoZWVsRXZlbnQuc2hvdWxkQ29u
c2lkZXJMYXRjaGluZygpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxhYmxlQ29udGFpbmVyICYmIHNj
cm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBib29sIHN0YXJ0aW5nQXRTY3JvbGxMaW1pdCA9
IHNjcm9sbGVkVG9FZGdlSW5Eb21pbmFudERpcmVjdGlvbigqc2Nyb2xsYWJsZUNvbnRhaW5lciwg
KnNjcm9sbGFibGVBcmVhLmdldCgpLCB3aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVlbEV2ZW50LmRl
bHRhWSgpKTsKLSAgICAgICAgICAgIGlmICghc3RhcnRpbmdBdFNjcm9sbExpbWl0KSB7Ci0gICAg
ICAgICAgICAgICAgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSBsYXRjaGluZ1N0YXRlOwotICAgICAgICAg
ICAgICAgIGxhdGNoaW5nU3RhdGUuc2V0V2hlZWxFdmVudEVsZW1lbnQod2hlZWxFdmVudFRhcmdl
dC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgbGF0Y2hpbmdTdGF0ZS5zZXRGcmFtZSgmbV9mcmFt
ZSk7Ci0gICAgICAgICAgICAgICAgbGF0Y2hpbmdTdGF0ZS5zZXRTY3JvbGxhYmxlQ29udGFpbmVy
KHNjcm9sbGFibGVDb250YWluZXIuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGxhdGNoaW5nU3Rh
dGUuc2V0V2lkZ2V0SXNMYXRjaGVkKHJlc3VsdC5pc092ZXJXaWRnZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgcGFnZS0+cHVzaE5ld0xhdGNoaW5nU3RhdGUoV1RGTW92ZShsYXRjaGluZ1N0YXRlKSk7
Ci0KLSAgICAgICAgICAgICAgICBwYWdlLT53aGVlbEV2ZW50RGVsdGFGaWx0ZXIoKS0+YmVnaW5G
aWx0ZXJpbmdEZWx0YXMoKTsKLSAgICAgICAgICAgICAgICBpc092ZXJXaWRnZXQgPSByZXN1bHQu
aXNPdmVyV2lkZ2V0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIExPR19XSVRIX1NU
UkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRsZXI6OmRldGVybWluZVdo
ZWVsRXZlbnRUYXJnZXQoKSAtIGNvbnNpZGVyaW5nIGxhdGNoaW5nIGZvciAiIDw8IHdoZWVsRXZl
bnQgPDwgIiwgYXQgc2Nyb2xsIGxpbWl0ICIgPDwgc3RhcnRpbmdBdFNjcm9sbExpbWl0IDw8ICIs
IGxhdGNoaW5nIHN0YXRlICIgPDwgcGFnZS0+bGF0Y2hpbmdTdGF0ZVN0YWNrKCkpOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmICh3aGVlbEV2ZW50LnNob3VsZFJlc2V0TGF0Y2hpbmcoKSkgewot
ICAgICAgICBjbGVhckxhdGNoZWRTdGF0ZSgpOwotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Ny
b2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAiRXZlbnRIYW5kbGVyOjpkZXRlcm1pbmVXaGVlbEV2ZW50
VGFyZ2V0KCkgLSByZXNldCBsYXRjaGluZyBmb3IgZXZlbnQgIiA8PCB3aGVlbEV2ZW50IDw8ICIg
bGF0Y2hpbmcgc3RhdGUgIiA8PCBwYWdlLT5sYXRjaGluZ1N0YXRlU3RhY2soKSk7Ci0gICAgfQot
Ci0gICAgLy8gRklYTUU6IFRoaXMgY2FuIHVzZSBhIHN0YWxlIGxhY2hpbmcgc3RhdGUsIGJlZm9y
ZSB3ZSBqdXN0IHB1c2hlZCBvciBjbGVhcmVkLgotICAgIGlmICghd2hlZWxFdmVudC5zaG91bGRS
ZXNldExhdGNoaW5nKCkgJiYgbGF0Y2hpbmdTdGF0ZSAmJiBsYXRjaGluZ1N0YXRlLT53aGVlbEV2
ZW50RWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChsYXRjaGluZ0lzTG9ja2VkVG9QbGF0Zm9ybUZy
YW1lKG1fZnJhbWUpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChsYXRjaGlu
Z0lzTG9ja2VkVG9BbmNlc3Rvck9mVGhpc0ZyYW1lKG1fZnJhbWUpKQotICAgICAgICAgICAgcmV0
dXJuOworICAgIGlmICh3aGVlbEV2ZW50LnNob3VsZFJlc2V0TGF0Y2hpbmcoKSB8fCB3aGVlbEV2
ZW50LmlzTm9uR2VzdHVyZUV2ZW50KCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICB3aGVl
bEV2ZW50VGFyZ2V0ID0gbGF0Y2hpbmdTdGF0ZS0+d2hlZWxFdmVudEVsZW1lbnQoKTsKLSAgICAg
ICAgaXNPdmVyV2lkZ2V0ID0gbGF0Y2hpbmdTdGF0ZS0+d2lkZ2V0SXNMYXRjaGVkKCk7Ci0gICAg
ICAgIHNjcm9sbGFibGVDb250YWluZXIgPSBsYXRjaGluZ1N0YXRlLT5zY3JvbGxhYmxlQ29udGFp
bmVyKCk7CisgICAgaWYgKG1fZnJhbWUuaXNNYWluRnJhbWUoKSAmJiB3aGVlbEV2ZW50LmlzR2Vz
dHVyZVN0YXJ0KCkpCisgICAgICAgIHBhZ2UtPndoZWVsRXZlbnREZWx0YUZpbHRlcigpLT5iZWdp
bkZpbHRlcmluZ0RlbHRhcygpOwogCi0gICAgICAgIGlmIChzY3JvbGxhYmxlQ29udGFpbmVyKSB7
Ci0gICAgICAgICAgICBpZiAoIWxhdGNoZWRUb0ZyYW1lT3JCb2R5KCpzY3JvbGxhYmxlQ29udGFp
bmVyKSAmJiAhbGF0Y2hpbmdTdGF0ZS0+d2lkZ2V0SXNMYXRjaGVkKCkpCi0gICAgICAgICAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYUZvckNvbnRhaW5lck5vZGUoKnNjcm9s
bGFibGVDb250YWluZXIpOwotICAgICAgICB9Ci0gICAgfQorICAgIHBhZ2UtPnNjcm9sbExhdGNo
aW5nQ29udHJvbGxlcigpLnVwZGF0ZUFuZEZldGNoTGF0Y2hpbmdTdGF0ZUZvckZyYW1lKG1fZnJh
bWUsIHdoZWVsRXZlbnQsIHdoZWVsRXZlbnRUYXJnZXQsIHNjcm9sbGFibGVBcmVhLCBpc092ZXJX
aWRnZXQpOwogfQogCiB2b2lkIEV2ZW50SGFuZGxlcjo6cmVjb3JkV2hlZWxFdmVudEZvckRlbHRh
RmlsdGVyKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKQEAgLTEwNDcsNTQg
KzkwMiw0NyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6cmVjb3JkV2hlZWxFdmVudEZvckRlbHRhRmls
dGVyKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZQogICAgIHBhZ2UtPndoZWVsRXZlbnRE
ZWx0YUZpbHRlcigpLT51cGRhdGVGcm9tRGVsdGEoRmxvYXRTaXplKHdoZWVsRXZlbnQuZGVsdGFY
KCksIHdoZWVsRXZlbnQuZGVsdGFZKCkpKTsKIH0KIAotc3RhdGljIEZyYW1lVmlldyogZnJhbWVW
aWV3Rm9yTGF0Y2hpbmdTdGF0ZShGcmFtZSYgZnJhbWUsIGNvbnN0IFNjcm9sbExhdGNoaW5nU3Rh
dGUmIGxhdGNoaW5nU3RhdGUpCitib29sIEV2ZW50SGFuZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRG
b3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBjb25zdCBX
ZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYgc2Nyb2xsYWJsZUFyZWEpCiB7Ci0gICAgaWYgKGxhdGNo
aW5nSXNMb2NrZWRUb1BsYXRmb3JtRnJhbWUoZnJhbWUpKQotICAgICAgICByZXR1cm4gZnJhbWUu
dmlldygpOwotCi0gICAgcmV0dXJuIGxhdGNoaW5nU3RhdGUuZnJhbWUoKSA/IGxhdGNoaW5nU3Rh
dGUuZnJhbWUoKS0+dmlldygpIDogZnJhbWUudmlldygpOwotfQorICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVlbEV2
ZW50Rm9yU2Nyb2xsaW5nICIgPDwgd2hlZWxFdmVudCA8PCAiIC0gc2Nyb2xsYWJsZUFyZWEgIiA8
PCBWYWx1ZU9yTnVsbChzY3JvbGxhYmxlQXJlYS5nZXQoKSkgPDwgIiB1c2UgbGF0Y2hlZCBlbGVt
ZW50ICIgPDwgd2hlZWxFdmVudC51c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkpOwogCi1ib29sIEV2
ZW50SGFuZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBDb250YWluZXJOb2RlKiBzY3JvbGxhYmxlQ29udGFpbmVy
LCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYgc2Nyb2xsYWJsZUFyZWEpCi17Ci0gICAg
TE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwgIkV2ZW50SGFuZGxlcjo6
cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcgIiA8PCB3aGVlbEV2ZW50IDw8ICIgLSBzY3Jv
bGxhYmxlQ29udGFpbmVyICIgPDwgc2Nyb2xsYWJsZUNvbnRhaW5lciA8PCAiIHNjcm9sbGFibGVB
cmVhICIgPDwgc2Nyb2xsYWJsZUFyZWEuZ2V0KCkgPDwgIiB1c2UgbGF0Y2hlZCBlbGVtZW50ICIg
PDwgd2hlZWxFdmVudC51c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkpOworI2lmIEFTU0VSVF9FTkFC
TEVECisgICAgeworICAgICAgICAvLyBGSVhNRTogQ2xlYW4gdXAgcHJvY2Vzc1doZWVsRXZlbnRG
b3JTY3JvbGxTbmFwKCkgYW5kIHRoZW4gdHVybiB0aGlzIGludG8gYW4gZWFybHkgcmV0dXJuLgor
ICAgICAgICBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiBsYXRjaGVkU2Nyb2xsYWJsZUFyZWE7Cisg
ICAgICAgIEFTU0VSVChtX2ZyYW1lLnBhZ2UoKS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCku
bGF0Y2hpbmdBbGxvd3NTY3JvbGxpbmdJbkZyYW1lKG1fZnJhbWUsIGxhdGNoZWRTY3JvbGxhYmxl
QXJlYSkpOworICAgIH0KKyNlbmRpZgogCiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZSht
X2ZyYW1lKTsKIAorICAgIGlmICghbV9mcmFtZS5wYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKwogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUudmlldygpOwogICAgIC8vIFdlIGRv
IGFub3RoZXIgY2hlY2sgb24gdGhlIGZyYW1lIHZpZXcgYmVjYXVzZSB0aGUgZXZlbnQgaGFuZGxl
ciBjYW4gcnVuIEpTIHdoaWNoIHJlc3VsdHMgaW4gdGhlIGZyYW1lIGdldHRpbmcgZGVzdHJveWVk
LgogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgYXV0
byogbGF0Y2hpbmdTdGF0ZSA9IG1fZnJhbWUucGFnZSgpID8gbV9mcmFtZS5wYWdlKCktPmxhdGNo
aW5nU3RhdGUoKSA6IG51bGxwdHI7Ci0KLSAgICBpZiAod2hlZWxFdmVudC51c2VMYXRjaGVkRXZl
bnRFbGVtZW50KCkgJiYgIWxhdGNoaW5nSXNMb2NrZWRUb0FuY2VzdG9yT2ZUaGlzRnJhbWUobV9m
cmFtZSkgJiYgbGF0Y2hpbmdTdGF0ZSAmJiBsYXRjaGluZ1N0YXRlLT5zY3JvbGxhYmxlQ29udGFp
bmVyKCkpIHsKKyAgICAvLyBXZSBoYW5kbGUgbm9uLXZpZXcgc2Nyb2xsYWJsZUFyZWFzIGVsc2V3
aGVyZS4KKyAgICBpZiAod2hlZWxFdmVudC51c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgJiYgc2Ny
b2xsYWJsZUFyZWEpIHsKICAgICAgICAgbV9pc0hhbmRsaW5nV2hlZWxFdmVudCA9IGZhbHNlOwog
Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICIgIGxh
dGNoaW5nIHN0YXRlICIgPDwgKmxhdGNoaW5nU3RhdGUpOworICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oU2Nyb2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAiICBsYXRjaGluZyBzdGF0ZSAiIDw8IG1fZnJh
bWUucGFnZSgpLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKSk7CiAKLSAgICAgICAgLy8gV2Vi
S2l0MiBjb2RlIHBhdGgKLSAgICAgICAgaWYgKCFmcmFtZUhhc1BsYXRmb3JtV2lkZ2V0KG1fZnJh
bWUpICYmIHNjcm9sbGFibGVDb250YWluZXIgPT0gbGF0Y2hpbmdTdGF0ZS0+c2Nyb2xsYWJsZUNv
bnRhaW5lcigpICYmIHNjcm9sbGFibGVBcmVhICYmIHZpZXcgIT0gc2Nyb2xsYWJsZUFyZWEpIHsK
LSAgICAgICAgICAgIC8vIElmIHdlIGRpZCBub3Qgc3RhcnQgYXQgdGhlIHNjcm9sbCBsaW1pdCwg
ZG8gbm90IHBhc3MgdGhlIGV2ZW50IG9uIHRvIGJlIGhhbmRsZWQgYnkgZW5jbG9zaW5nIHNjcm9s
bGFibGUgcmVnaW9ucy4KLSAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0
cmVhbSA8PCAiRXZlbnRIYW5kbGVyICIgPDwgdGhpcyA8PCAiIHByb2Nlc3NXaGVlbEV2ZW50Rm9y
U2Nyb2xsaW5nIC0gbGF0Y2hlZCB0byAiIDw8IHNjcm9sbGFibGVBcmVhLmdldCgpIDw8ICIgYW5k
IG5vdCBwcm9wYWdhdGluZyIpOworICAgICAgICBpZiAoIWZyYW1lSGFzUGxhdGZvcm1XaWRnZXQo
bV9mcmFtZSkgJiYgc2Nyb2xsYWJsZUFyZWEgIT0gdmlldykgeworICAgICAgICAgICAgTE9HX1dJ
VEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICIgIGxhdGNoZWQgdG8gbm9uLXZpZXcgc2Ny
b2xsZXIgIiA8PCBzY3JvbGxhYmxlQXJlYSA8PCAiIGFuZCBub3QgcHJvcGFnYXRpbmciKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2V0ICd2aWV3JyB0byBhIEZyYW1lVmlldyB0aGF0IGlzIG5vdCB0aGlzIEV2ZW50SGFuZGxl
cidzIEZyYW1lVmlldywgd2hpY2ggdGhlbiBnZXRzIHNjcm9sbGVkIGZyb20gaGVyZSwgd2hpY2gg
aXMgd3JvbmcuCi0gICAgICAgIHZpZXcgPSBmcmFtZVZpZXdGb3JMYXRjaGluZ1N0YXRlKG1fZnJh
bWUsICpsYXRjaGluZ1N0YXRlKTsKLSAgICAgICAgQVNTRVJUKHZpZXcpOworICAgICAgICBMT0df
V0lUSF9TVFJFQU0oU2Nyb2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAiIHNlbmRpbmcgdG8gdmlldyAi
IDw8ICp2aWV3KTsKIAogICAgICAgICBib29sIGRpZEhhbmRsZVdoZWVsRXZlbnQgPSB2aWV3LT53
aGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICBpZiAoc2Nyb2xsYWJsZUNvbnRhaW5lciA9
PSBsYXRjaGluZ1N0YXRlLT5zY3JvbGxhYmxlQ29udGFpbmVyKCkpIHsKLSAgICAgICAgICAgIC8v
IElmIHdlIGFyZSBqdXN0IHN0YXJ0aW5nIGEgc2Nyb2xsIGV2ZW50LCBhbmQgaGF2ZSBub3doZXJl
IGxlZnQgdG8gc2Nyb2xsLCBhbGxvdwotICAgICAgICAgICAgLy8gdGhlIGVuY2xvc2luZyBmcmFt
ZSB0byBoYW5kbGUgdGhlIHNjcm9sbC4KLSAgICAgICAgICAgIGRpZEhhbmRsZVdoZWVsRXZlbnQg
PSB0cnVlOwotICAgICAgICB9Ci0KICAgICAgICAgLy8gSWYgdGhlIHBsYXRmb3JtIHdpZGdldCBp
cyBoYW5kbGluZyB0aGUgZXZlbnQsIHdlIGFsd2F5cyB3YW50IHRvIHJldHVybiBmYWxzZS4KLSAg
ICAgICAgaWYgKHNjcm9sbGFibGVBcmVhID09IHZpZXcgJiYgdmlldy0+cGxhdGZvcm1XaWRnZXQo
KSkKKyAgICAgICAgaWYgKHZpZXctPnBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgICAgICBkaWRI
YW5kbGVXaGVlbEV2ZW50ID0gZmFsc2U7Ci0gICAgICAgIAorCisgICAgICAgIExPR19XSVRIX1NU
UkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICIgIEV2ZW50SGFuZGxlcjo6cHJvY2Vzc1do
ZWVsRXZlbnRGb3JTY3JvbGxpbmcgcmV0dXJuaW5nICIgPDwgZGlkSGFuZGxlV2hlZWxFdmVudCk7
CiAgICAgICAgIHJldHVybiBkaWRIYW5kbGVXaGVlbEV2ZW50OwogICAgIH0KICAgICAKQEAgLTEx
MDMsMjAgKzk1MSwyMCBAQCBib29sIEV2ZW50SGFuZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JT
Y3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbAogICAgIHJldHVybiBkaWRI
YW5kbGVFdmVudDsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVQbGF0
Zm9ybVdpZGdldFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50
LCBjb25zdCBXaWRnZXQmIHdpZGdldCwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5l
cikKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1XaWRnZXRXaGVl
bEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgY29uc3QgV2lkZ2V0
JiB3aWRnZXQsIGNvbnN0IFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSkK
IHsKICAgICAvLyBXZWJLaXQxOiBQcmV2ZW50IG11bHRpcGxlIGNvcGllcyBvZiB0aGUgc2Nyb2xs
V2hlZWwgZXZlbnQgZnJvbSBiZWluZyBzZW50IHRvIHRoZSBOU1Njcm9sbFZpZXcgd2lkZ2V0Lgog
ICAgIGlmIChmcmFtZUhhc1BsYXRmb3JtV2lkZ2V0KG1fZnJhbWUpICYmIHdpZGdldC5pc0ZyYW1l
VmlldygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGNvbnN0IGF1dG8qIGxhdGNoaW5n
U3RhdGUgPSBtX2ZyYW1lLnBhZ2UoKSA/IG1fZnJhbWUucGFnZSgpLT5sYXRjaGluZ1N0YXRlKCkg
OiBudWxscHRyOwotICAgIGlmICghbGF0Y2hpbmdTdGF0ZSkKKyAgICBpZiAoIW1fZnJhbWUucGFn
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAod2hlZWxFdmVudC51c2VMYXRj
aGVkRXZlbnRFbGVtZW50KCkgJiYgbGF0Y2hpbmdTdGF0ZS0+c2Nyb2xsYWJsZUNvbnRhaW5lcigp
ICYmIHNjcm9sbGFibGVDb250YWluZXIgPT0gbGF0Y2hpbmdTdGF0ZS0+c2Nyb2xsYWJsZUNvbnRh
aW5lcigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBXZWFrUHRyPFNjcm9sbGFibGVBcmVh
PiBsYXRjaGVkU2Nyb2xsYWJsZUFyZWE7CisgICAgaWYgKCFtX2ZyYW1lLnBhZ2UoKS0+c2Nyb2xs
TGF0Y2hpbmdDb250cm9sbGVyKCkubGF0Y2hpbmdBbGxvd3NTY3JvbGxpbmdJbkZyYW1lKG1fZnJh
bWUsIGxhdGNoZWRTY3JvbGxhYmxlQXJlYSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gd2hlZWxFdmVudC51c2VMYXRjaGVkRXZlbnRFbGVt
ZW50KCkgJiYgbGF0Y2hlZFNjcm9sbGFibGVBcmVhICYmIHNjcm9sbGFibGVBcmVhID09IGxhdGNo
ZWRTY3JvbGxhYmxlQXJlYTsKIH0KIAogdm9pZCBFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVlbEV2
ZW50Rm9yU2Nyb2xsU25hcChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIGNv
bnN0IFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSkKQEAgLTExMjksNyAr
OTc3LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25h
cChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWUKICAgICAgICAgcmV0dXJuOwogCiAjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFu
aW1hdG9yID0gc2Nyb2xsYWJsZUFyZWEtPmV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICBp
ZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBzY3JvbGxhYmxlQXJlYS0+ZXhpc3RpbmdTY3JvbGxB
bmltYXRvcigpKQogICAgICAgICBzY3JvbGxBbmltYXRvci0+cHJvY2Vzc1doZWVsRXZlbnRGb3JT
Y3JvbGxTbmFwKHdoZWVsRXZlbnQpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zM2U4MTA4MDQwMTdlZjA3OGY2ZjY5YTM1YWFlOTQ0NmNlMjJiNjVhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdD
b250cm9sbGVyLmNwcApAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuaCIKKworI2lmIEVO
QUJMRShXSEVFTF9FVkVOVF9MQVRDSElORykKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBTZWUgYWxzbyBTY3JvbGxUcmVlTGF0Y2hpbmdDb250cm9sbGVyLmNwcAorc3RhdGljIGNv
bnN0IFNlY29uZHMgcmVzZXRMYXRjaGVkU3RhdGVUaW1lb3V0IHsgMTAwX21zIH07CisKK1Njcm9s
bExhdGNoaW5nQ29udHJvbGxlcjo6U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkKKyAgICA6IG1f
Y2xlYXJMYXRjaGluZ1N0YXRlVGltZXIoKnRoaXMsICZTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6
OmNsZWFyVGltZXJGaXJlZCkKK3sKK30KKworU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjp+U2Ny
b2xsTGF0Y2hpbmdDb250cm9sbGVyKCkgPSBkZWZhdWx0OworCit2b2lkIFNjcm9sbExhdGNoaW5n
Q29udHJvbGxlcjo6Y2xlYXIoKQoreworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGlu
Zywgc3RyZWFtIDw8ICJTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OmNsZWFyKCkiKTsKKyAgICBt
X2N1bXVsYXRpdmVFdmVudERlbHRhID0geyB9OworICAgIG1fZnJhbWVTdGF0ZVN0YWNrLmNsZWFy
KCk7Cit9CisKKy8vIEZJWE1FOiBUaGlzIGxvZ2ljIGlzIGRpZmZlcmVudCBmcm1vIFNjcm9sbGlu
Z1RyZWVMYXRjaGluZ0NvbnRyb2xsZXIsIHdoaWNoIHNpbXBseSBsZXRzIHRoZSBsYXRjaGluZyBz
dGF0ZSBlbGFwc2UgYWZ0ZXIgMTAwbXMuCit2b2lkIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6
Y2xlYXJPclNjaGVkdWxlQ2xlYXJJZk5lZWRlZChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCit7CisgICAgaWYgKHdoZWVsRXZlbnQuc2hvdWxkUmVzZXRMYXRjaGluZygpIHx8
IHdoZWVsRXZlbnQuaXNOb25HZXN0dXJlRXZlbnQoKSkgeworICAgICAgICBjbGVhcigpOworICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsTGF0
Y2hpbmdDb250cm9sbGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcmluZ0xhdGNoZWRTdGF0ZUlmTmVl
ZGVkKCkgLSBldmVudCIgPDwgd2hlZWxFdmVudCA8PCAiLCByZXNldHRpbmcgbGF0Y2hpbmciKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2NsZWFyTGF0Y2hpbmdTdGF0ZVRp
bWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgLy8gSWYgYW5vdGhlciB3aGVlbCBldmVudCBzY3Jv
bGxpbmcgc3RhcnRzLCBzdG9wIHRoZSB0aW1lciBtYW51YWxseSwgYW5kIHJlc2V0IHRoZSBsYXRj
aGVkIHN0YXRlIGltbWVkaWF0ZWx5LgorICAgICAgICBpZiAod2hlZWxFdmVudC5pc0dlc3R1cmVT
dGFydCgpKSB7CisgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsTGF0Y2hpbmcsIHN0
cmVhbSA8PCAiU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcmlu
Z0xhdGNoZWRTdGF0ZUlmTmVlZGVkKCkgLSBldmVudCIgPDwgd2hlZWxFdmVudCA8PCAiLCB0aW1l
ciBwZW5kaW5nLCBhbm90aGVyIHNjcm9sbCBzdGFydGluZyIpOworICAgICAgICAgICAgY2xlYXIo
KTsKKyAgICAgICAgICAgIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIuc3RvcCgpOworICAgICAg
ICB9IGVsc2UgaWYgKHdoZWVsRXZlbnQuaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgp
KSB7CisgICAgICAgICAgICAvLyBXaGVlbCBldmVudHMgbWFjaGluZXJ5IGlzIHRyYW5zaXRpb25p
bmcgdG8gbW9tZW50dW0gc2Nyb2xsaW5nLCBzbyBubyBuZWVkIHRvIHJlc2V0IGxhdGNoZWQgc3Rh
dGUuIFN0b3AgdGhlIHRpbWVyLgorICAgICAgICAgICAgbV9jbGVhckxhdGNoaW5nU3RhdGVUaW1l
ci5zdG9wKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh3
aGVlbEV2ZW50LmlzRW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpKSB7CisgICAgICAgIExPR19XSVRI
X1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJTY3JvbGxMYXRjaGluZ0NvbnRyb2xs
ZXI6OmNsZWFyT3JTY2hlZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQoKSAtIGV2ZW50
IiA8PCB3aGVlbEV2ZW50IDw8ICIsIHNjaGVkdWxpbmcgY2xlYXIgdGltZXIiKTsKKyAgICAgICAg
bV9jbGVhckxhdGNoaW5nU3RhdGVUaW1lci5zdGFydE9uZVNob3QocmVzZXRMYXRjaGVkU3RhdGVU
aW1lb3V0KTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpjbGVh
clRpbWVyRmlyZWQoKQoreworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3Ry
ZWFtIDw8ICJTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OmNsZWFyVGltZXJGaXJlZCgpIC0gY2xl
YXJpbmcgc3RhdGUiKTsKKyAgICBjbGVhcigpOworfQorCit2b2lkIFNjcm9sbExhdGNoaW5nQ29u
dHJvbGxlcjo6cmVjZWl2ZWRXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCkKK3sKKyAgICBjbGVhck9yU2NoZWR1bGVDbGVhcklmTmVlZGVkKHdoZWVsRXZlbnQp
OworCisgICAgaWYgKHdoZWVsRXZlbnQuaXNHZXN0dXJlU3RhcnQoKSB8fCB3aGVlbEV2ZW50Lmlz
Tm9uR2VzdHVyZUV2ZW50KCkpCisgICAgICAgIG1fY3VtdWxhdGl2ZUV2ZW50RGVsdGEgPSB3aGVl
bEV2ZW50LmRlbHRhKCk7CisgICAgZWxzZQorICAgICAgICBtX2N1bXVsYXRpdmVFdmVudERlbHRh
ICs9IHdoZWVsRXZlbnQuZGVsdGEoKTsKK30KKworYm9vbCBTY3JvbGxMYXRjaGluZ0NvbnRyb2xs
ZXI6OmxhdGNoaW5nQWxsb3dzU2Nyb2xsaW5nSW5GcmFtZShjb25zdCBGcmFtZSYgZnJhbWUsIFdl
YWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBsYXRjaGVkU2Nyb2xsZXIpIGNvbnN0Cit7CisgICAgaWYg
KG1fZnJhbWVTdGF0ZVN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoYXV0byogZnJhbWVTdGF0ZSA9IHN0YXRlRm9yRnJhbWUoZnJhbWUpKSB7CisgICAgICAg
IGxhdGNoZWRTY3JvbGxlciA9IGZyYW1lU3RhdGUtPnNjcm9sbGFibGVBcmVhOworICAgICAgICBy
ZXR1cm4gISFmcmFtZVN0YXRlLT5zY3JvbGxhYmxlQXJlYTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6dXBkYXRlQW5kRmV0Y2hM
YXRjaGluZ1N0YXRlRm9yRnJhbWUoRnJhbWUmIGZyYW1lLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmIHdoZWVsRXZlbnQsIFJlZlB0cjxFbGVtZW50PiYgbGF0Y2hlZEVsZW1lbnQsIFdlYWtQdHI8
U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSwgYm9vbCYgaXNPdmVyV2lkZ2V0KQorewor
ICAgIGlmICh3aGVlbEV2ZW50LmlzR2VzdHVyZVN0YXJ0KCkpIHsKKyAgICAgICAgLy8gV2UgY2Fu
IGhhdmUgZXhpc3Rpbmcgc3RhdGUgaGVyZSBiZWNhdXNlIHN0YXRlIGlzIGNsZWFyZWQgb24gYSB0
aW1lci4KKyAgICAgICAgaWYgKCFoYXNTdGF0ZUZvckZyYW1lKGZyYW1lKSkgeworICAgICAgICAg
ICAgRnJhbWVTdGF0ZSBzdGF0ZTsKKyAgICAgICAgICAgIHN0YXRlLmZyYW1lID0gJmZyYW1lOwor
ICAgICAgICAgICAgc3RhdGUud2hlZWxFdmVudEVsZW1lbnQgPSBtYWtlV2Vha1B0cihsYXRjaGVk
RWxlbWVudC5nZXQoKSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkTGF0Y2hUb1Njcm9sbGFibGVB
cmVhKGZyYW1lLCBzY3JvbGxhYmxlQXJlYS5nZXQoKSwgbV9jdW11bGF0aXZlRXZlbnREZWx0YSkp
CisgICAgICAgICAgICAgICAgc3RhdGUuc2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYTsK
KyAgICAgICAgICAgIHN0YXRlLmlzT3ZlcldpZGdldCA9IGlzT3ZlcldpZGdldDsKKworICAgICAg
ICAgICAgbV9mcmFtZVN0YXRlU3RhY2suYXBwZW5kKFdURk1vdmUoc3RhdGUpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh3aGVlbEV2ZW50LmlzR2Vz
dHVyZUNvbnRpbnVhdGlvbigpKSB7CisgICAgICAgIGF1dG8qIHN0YXRlID0gc3RhdGVGb3JGcmFt
ZShmcmFtZSk7CisgICAgICAgIGlmICghc3RhdGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgLy8gV2UgbWF5IG5vdCBoYXZlIGxhdGNoZWQgYXQgZ2VzdHVyZSBzdGFydCBiZWNhdXNl
IG9mIHNtYWxsIGRlbHRhcy4gUmUtZXZhbHVhdGUgbGF0Y2hpbmcgYmFzZWQgb24gYWNjdW11bGF0
ZWQgZGVsdGEuCisgICAgICAgIGlmICghc3RhdGUtPnNjcm9sbGFibGVBcmVhICYmIHNob3VsZExh
dGNoVG9TY3JvbGxhYmxlQXJlYShmcmFtZSwgc2Nyb2xsYWJsZUFyZWEuZ2V0KCksIG1fY3VtdWxh
dGl2ZUV2ZW50RGVsdGEpKQorICAgICAgICAgICAgc3RhdGUtPnNjcm9sbGFibGVBcmVhID0gc2Ny
b2xsYWJsZUFyZWE7CisgICAgfQorCisgICAgaWYgKCF3aGVlbEV2ZW50LnVzZUxhdGNoZWRFdmVu
dEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0
ZSA6IG1fZnJhbWVTdGF0ZVN0YWNrKSB7CisgICAgICAgIGlmIChzdGF0ZS5mcmFtZSA9PSAmZnJh
bWUpIHsKKyAgICAgICAgICAgIGxhdGNoZWRFbGVtZW50ID0gc3RhdGUud2hlZWxFdmVudEVsZW1l
bnQuZ2V0KCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHN0YXRlLnNjcm9sbGFibGVB
cmVhOworICAgICAgICAgICAgaXNPdmVyV2lkZ2V0ID0gc3RhdGUuaXNPdmVyV2lkZ2V0OworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6cmVtb3Zl
TGF0Y2hpbmdTdGF0ZUZvclRhcmdldChjb25zdCBFbGVtZW50JiBlbGVtZW50KQoreworICAgIGlm
IChtX2ZyYW1lU3RhdGVTdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8gZmluZFJlc3VsdCA9IG1fZnJhbWVTdGF0ZVN0YWNrLmZpbmRNYXRjaGluZyhbJmVsZW1lbnRd
IChjb25zdCBhdXRvJiBzdGF0ZSkgeworICAgICAgICBhdXRvKiB3aGVlbEVsZW1lbnQgPSBzdGF0
ZS53aGVlbEV2ZW50RWxlbWVudC5nZXQoKTsKKyAgICAgICAgcmV0dXJuIHdoZWVsRWxlbWVudCAm
JiBlbGVtZW50LmlzRXF1YWxOb2RlKHdoZWVsRWxlbWVudCk7CisgICAgfSk7CisgICAgCisgICAg
Ly8gSWYgdGhpcyBlbGVtZW50IGlzIGZvdW5kIGluIHRoZSBsYXRjaGluZyBzdGFjaywganVzdCBj
bGVhciB0aGUgd2hvbGUgc3RhY2suIFdlIGNhbid0IGp1c3QgcmVtb3ZlIG9uZSBlbnRyeSwKKyAg
ICAvLyBzaW5jZSB0aGUgc3RhY2sgaGFzIHRvIG1hdGNoIHRoZSBmcmFtZSBoaWVyYXJjaHkuCisg
ICAgaWYgKGZpbmRSZXN1bHQgIT0gbm90Rm91bmQpCisgICAgICAgIG1fZnJhbWVTdGF0ZVN0YWNr
LmNsZWFyKCk7Cit9CisKK3ZvaWQgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpyZW1vdmVMYXRj
aGluZ1N0YXRlRm9yRnJhbWUoY29uc3QgRnJhbWUmIGZyYW1lKQoreworICAgIGlmIChtX2ZyYW1l
U3RhdGVTdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBm
cmFtZSB3YXMgaW4gdGhlIGxhdGNoaW5nIHN0YWNrLCBqdXN0IGNsZWFyIHN0YXRlLgorICAgIGlm
IChhdXRvKiBmcmFtZVN0YXRlID0gc3RhdGVGb3JGcmFtZShmcmFtZSkpCisgICAgICAgIGNsZWFy
KCk7Cit9CisKK3N0YXRpYyBib29sIGRlbHRhSXNQcmVkb21pbmFudGx5VmVydGljYWwoRmxvYXRT
aXplIGRlbHRhKQoreworICAgIHJldHVybiBzdGQ6OmFicyhkZWx0YS5oZWlnaHQoKSkgPiBzdGQ6
OmFicyhkZWx0YS53aWR0aCgpKTsKK30KKworYm9vbCBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6
OnNob3VsZExhdGNoVG9TY3JvbGxhYmxlQXJlYShjb25zdCBGcmFtZSYgZnJhbWUsIFNjcm9sbGFi
bGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgRmxvYXRTaXplIHNjcm9sbERlbHRhKSBjb25zdAorewor
ICAgIGlmICghc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
IFdlIGFsd2F5cyBhbGxvdyB0aGUgbWFpbiBmcmFtZSByZWNlaXZlIHdoZWVsIGV2ZW50cyB0byBw
ZXJtaXQgcnViYmVyLWJhbmRpbmcuCisgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkgJiYgc2Ny
b2xsYWJsZUFyZWEgPT0gZnJhbWUudmlldygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmICghc2Nyb2xsYWJsZUFyZWEtPmNhbkhhdmVTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChzY3JvbGxEZWx0YS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFkZWx0YUlzUHJlZG9taW5hbnRseVZlcnRpY2FsKHNjcm9sbERl
bHRhKSAmJiBzY3JvbGxEZWx0YS53aWR0aCgpKSB7CisgICAgICAgIGlmICghc2Nyb2xsYWJsZUFy
ZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBpZiAoc2Nyb2xsRGVsdGEud2lkdGgoKSA8IDApCisgICAgICAgICAgICByZXR1cm4g
IXNjcm9sbGFibGVBcmVhLT5zY3JvbGxlZFRvUmlnaHQoKTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiAhc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbGVkVG9MZWZ0KCk7CisgICAgfQorCisgICAgaWYg
KCFzY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKHNjcm9sbERlbHRhLmhlaWdodCgpIDwgMCkKKyAgICAgICAgcmV0dXJu
ICFzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsZWRUb0JvdHRvbSgpOworCisgICAgcmV0dXJuICFzY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsZWRUb1RvcCgpOworfQorCitib29sIFNjcm9sbExhdGNoaW5nQ29u
dHJvbGxlcjo6aGFzU3RhdGVGb3JGcmFtZShjb25zdCBGcmFtZSYgZnJhbWUpIGNvbnN0Cit7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBzdGF0ZSA6IG1fZnJhbWVTdGF0ZVN0YWNrKSB7CisgICAgICAg
IGlmIChzdGF0ZS5mcmFtZSA9PSAmZnJhbWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OkZy
YW1lU3RhdGUqIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6c3RhdGVGb3JGcmFtZShjb25zdCBG
cmFtZSYgZnJhbWUpCit7CisgICAgZm9yIChhdXRvJiBzdGF0ZSA6IG1fZnJhbWVTdGF0ZVN0YWNr
KSB7CisgICAgICAgIGlmIChzdGF0ZS5mcmFtZSA9PSAmZnJhbWUpCisgICAgICAgICAgICByZXR1
cm4gJnN0YXRlOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworY29uc3QgU2Nyb2xs
TGF0Y2hpbmdDb250cm9sbGVyOjpGcmFtZVN0YXRlKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6
OnN0YXRlRm9yRnJhbWUoY29uc3QgRnJhbWUmIGZyYW1lKSBjb25zdAoreworICAgIGZvciAoY29u
c3QgYXV0byYgc3RhdGUgOiBtX2ZyYW1lU3RhdGVTdGFjaykgeworICAgICAgICBpZiAoc3RhdGUu
ZnJhbWUgPT0gJmZyYW1lKQorICAgICAgICAgICAgcmV0dXJuICZzdGF0ZTsKKyAgICB9CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpkdW1w
KFdURjo6VGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgVGV4dFN0cmVhbSBtdWx0aWxpbmVT
dHJlYW07CisgICAgbXVsdGlsaW5lU3RyZWFtLnNldEluZGVudCh0cy5pbmRlbnQoKSArIDIpOwor
CisgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0ZSA6IG1fZnJhbWVTdGF0ZVN0YWNrKSB7CisgICAg
ICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXBTY29wZShtdWx0aWxpbmVTdHJlYW0pOwor
ICAgICAgICBtdWx0aWxpbmVTdHJlYW0uZHVtcFByb3BlcnR5KCJmcmFtZSIsIFZhbHVlT3JOdWxs
KHN0YXRlLmZyYW1lKSk7CisgICAgICAgIG11bHRpbGluZVN0cmVhbS5kdW1wUHJvcGVydHkoImVs
ZW1lbnQiLCBWYWx1ZU9yTnVsbChzdGF0ZS53aGVlbEV2ZW50RWxlbWVudC5nZXQoKSkpOworICAg
ICAgICBtdWx0aWxpbmVTdHJlYW0uZHVtcFByb3BlcnR5KCJzY3JvbGxhYmxlIGFyZWEiLCBWYWx1
ZU9yTnVsbChzdGF0ZS5zY3JvbGxhYmxlQXJlYS5nZXQoKSkpOworICAgICAgICBtdWx0aWxpbmVT
dHJlYW0uZHVtcFByb3BlcnR5KCJpcyBvdmVyIHdpZGdldCIsIHN0YXRlLmlzT3ZlcldpZGdldCk7
CisgICAgfQorCisgICAgdHMgPDwgIlNjcm9sbExhdGNoaW5nQ29udHJvbGxlciBzdGF0ZSAiIDw8
IG11bHRpbGluZVN0cmVhbS5yZWxlYXNlKCk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjcm9sbExhdGNoaW5nQ29udHJvbGxlciYgY29udHJvbGxl
cikKK3sKKyAgICBjb250cm9sbGVyLmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdIRUVMX0VWRU5UX0xBVENI
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0
Y2hpbmdDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxM
YXRjaGluZ0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMzU4ODhlYzVlZDRkNmUwY2JhMjRkYTEx
M2Y2MjRlYWI5ODMzMzMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmgKQEAgLTAsMCArMSw5OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCisjaWYgRU5BQkxFKFdIRUVMX0VWRU5U
X0xBVENISU5HKQorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFRleHRTdHJlYW07Cit9CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEZyYW1lOworY2xhc3Mg
UGxhdGZvcm1XaGVlbEV2ZW50OworY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CisKK2NsYXNzIFNjcm9s
bExhdGNoaW5nQ29udHJvbGxlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCk7CisgICAgflNjcm9sbExhdGNoaW5n
Q29udHJvbGxlcigpOworCisgICAgdm9pZCBjbGVhcigpOworCisgICAgdm9pZCByZWNlaXZlZFdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisgICAgRmxvYXRTaXplIGN1bXVs
YXRpdmVFdmVudERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9jdW11bGF0aXZlRXZlbnREZWx0YTsg
fQorCisgICAgLy8gRnJhbWUgY29udGFpbmluZyBsYXRjaGVkIHNjcm9sbGVyIChtYXkgYmUgdGhl
IGZyYW1lIG9yIHNvbWUgc3ViLXNjcm9sbGVyKS4KKyAgICBGcmFtZSogbGF0Y2hlZEZyYW1lKCkg
Y29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgbm8gZnJhbWUgaXMgbGF0Y2hlZCwgb3Ig
bGF0Y2hpbmcgaXMgaW4gdGhlIGdpdmVuIGZyYW1lIChpbiB3aGljaCBjYXNlIGxhdGNoZWRTY3Jv
bGxlciB3aWxsIGJlIG5vbi1udWxsKS4KKyAgICBib29sIGxhdGNoaW5nQWxsb3dzU2Nyb2xsaW5n
SW5GcmFtZShjb25zdCBGcmFtZSYsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBsYXRjaGVkU2Ny
b2xsZXIpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVBbmRGZXRjaExhdGNoaW5nU3RhdGVGb3JG
cmFtZShGcmFtZSYsIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIFJlZlB0cjxFbGVtZW50PiYg
bGF0Y2hlZEVsZW1lbnQsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiwgYm9vbCYgaXNPdmVyV2lk
Z2V0KTsKKworICAgIHZvaWQgcmVtb3ZlTGF0Y2hpbmdTdGF0ZUZvclRhcmdldChjb25zdCBFbGVt
ZW50Jik7CisgICAgdm9pZCByZW1vdmVMYXRjaGluZ1N0YXRlRm9yRnJhbWUoY29uc3QgRnJhbWUm
KTsKKworICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBzdHJ1Y3QgRnJhbWVTdGF0ZSB7CisgICAgICAgIFdlYWtQdHI8RWxlbWVudD4gd2hlZWxF
dmVudEVsZW1lbnQ7CisgICAgICAgIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+IHNjcm9sbGFibGVB
cmVhOworICAgICAgICBGcmFtZSogZnJhbWUgeyBudWxscHRyIH07IC8vIElja3kgcmF3IHBvaW50
ZXIuIFVzZSBGcmFtZUlkZW50aWZpZXI/CisgICAgICAgIGJvb2wgaXNPdmVyV2lkZ2V0IHsgZmFs
c2UgfTsKKyAgICB9OworCisgICAgdm9pZCBjbGVhck9yU2NoZWR1bGVDbGVhcklmTmVlZGVkKGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworICAgIHZvaWQgY2xlYXJUaW1lckZpcmVkKCk7CisK
KyAgICBib29sIGhhc1N0YXRlRm9yRnJhbWUoY29uc3QgRnJhbWUmKSBjb25zdDsKKyAgICBGcmFt
ZVN0YXRlKiBzdGF0ZUZvckZyYW1lKGNvbnN0IEZyYW1lJik7CisgICAgY29uc3QgRnJhbWVTdGF0
ZSogc3RhdGVGb3JGcmFtZShjb25zdCBGcmFtZSYpIGNvbnN0OworCisgICAgYm9vbCBzaG91bGRM
YXRjaFRvU2Nyb2xsYWJsZUFyZWEoY29uc3QgRnJhbWUmLCBTY3JvbGxhYmxlQXJlYSosIEZsb2F0
U2l6ZSkgY29uc3Q7CisKKyAgICBGbG9hdFNpemUgbV9jdW11bGF0aXZlRXZlbnREZWx0YTsKKyAg
ICBWZWN0b3I8RnJhbWVTdGF0ZT4gbV9mcmFtZVN0YXRlU3RhY2s7CisgICAgVGltZXIgbV9jbGVh
ckxhdGNoaW5nU3RhdGVUaW1lcjsKK307CisKK1dURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChX
VEY6OlRleHRTdHJlYW0mLCBjb25zdCBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXImKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdIRUVMX0VWRU5UX0xBVENI
SU5HKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxM
YXRjaGluZ1N0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExh
dGNoaW5nU3RhdGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjNhYzRlN2Zi
NDU4NjVhZWU0YmMxMzAyYmI4OWZjNDI1ZmVhMzNlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bExhdGNoaW5nU3RhdGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJTY3JvbGxMYXRjaGluZ1N0YXRlLmgiCi0KLSNpbmNsdWRlICJFbGVtZW50
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVNjcm9sbExhdGNoaW5nU3RhdGU6OlNjcm9sbExhdGNoaW5nU3RhdGUoKSA9IGRlZmF1
bHQ7Ci0gICAgCi1TY3JvbGxMYXRjaGluZ1N0YXRlOjp+U2Nyb2xsTGF0Y2hpbmdTdGF0ZSgpID0g
ZGVmYXVsdDsKLQotdm9pZCBTY3JvbGxMYXRjaGluZ1N0YXRlOjpjbGVhcigpCi17Ci0gICAgbV93
aGVlbEV2ZW50RWxlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9mcmFtZSA9IG51bGxwdHI7Ci0gICAg
bV9zY3JvbGxhYmxlQ29udGFpbmVyID0gbnVsbHB0cjsKLSAgICBtX3dpZGdldElzTGF0Y2hlZCA9
IGZhbHNlOwotfQotCi12b2lkIFNjcm9sbExhdGNoaW5nU3RhdGU6OnNldFdoZWVsRXZlbnRFbGVt
ZW50KEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgbV93aGVlbEV2ZW50RWxlbWVudCA9IG1ha2VX
ZWFrUHRyKGVsZW1lbnQpOwotfQotCi12b2lkIFNjcm9sbExhdGNoaW5nU3RhdGU6OnNldFdpZGdl
dElzTGF0Y2hlZChib29sIGlzT3ZlcldpZGdldCkKLXsKLSAgICBtX3dpZGdldElzTGF0Y2hlZCA9
IGlzT3ZlcldpZGdldDsKLX0KLQotdm9pZCBTY3JvbGxMYXRjaGluZ1N0YXRlOjpzZXRTY3JvbGxh
YmxlQ29udGFpbmVyKENvbnRhaW5lck5vZGUqIGNvbnRhaW5lcikKLXsKLSAgICBtX3Njcm9sbGFi
bGVDb250YWluZXIgPSBtYWtlV2Vha1B0cihjb250YWluZXIpOwotfQotCi1UZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY3JvbGxMYXRjaGluZ1N0YXRlJiBzdGF0
ZSkKLXsKLSAgICBUZXh0U3RyZWFtIG11bHRpbGluZVN0cmVhbTsKLSAgICBtdWx0aWxpbmVTdHJl
YW0uc2V0SW5kZW50KHRzLmluZGVudCgpICsgMik7Ci0KLSAgICBtdWx0aWxpbmVTdHJlYW0uZHVt
cFByb3BlcnR5KCJlbGVtZW50Iiwgc3RhdGUud2hlZWxFdmVudEVsZW1lbnQoKSk7Ci0gICAgbXVs
dGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgic2Nyb2xsYWJsZSBjb250YWluZXIiLCBzdGF0ZS5z
Y3JvbGxhYmxlQ29udGFpbmVyKCkpOwotICAgIG11bHRpbGluZVN0cmVhbS5kdW1wUHJvcGVydHko
IndpZGdldElzTGF0Y2hlZCIsIHN0YXRlLndpZGdldElzTGF0Y2hlZCgpKTsKLQotICAgIHRzIDw8
ICJTY3JvbGxMYXRjaGluZ1N0YXRlICIgPDwgbXVsdGlsaW5lU3RyZWFtLnJlbGVhc2UoKTsKLQot
ICAgIHJldHVybiB0czsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiYjFiOTdkYTAzZGEyN2Q0ZWQ0YWU4MThhMGE0NDIyMDM4MTg1NzZhLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbExhdGNoaW5nU3RhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xh
c3MgVGV4dFN0cmVhbTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDb250YWlu
ZXJOb2RlOwotY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZyYW1lOwotCi1jbGFzcyBTY3JvbGxMYXRj
aGluZ1N0YXRlIGZpbmFsIHsKLXB1YmxpYzoKLSAgICBTY3JvbGxMYXRjaGluZ1N0YXRlKCk7Ci0g
ICAgflNjcm9sbExhdGNoaW5nU3RhdGUoKTsKLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIEVs
ZW1lbnQqIHdoZWVsRXZlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV93aGVlbEV2ZW50RWxl
bWVudC5nZXQoKTsgfQotICAgIHZvaWQgc2V0V2hlZWxFdmVudEVsZW1lbnQoRWxlbWVudCopOwot
Ci0gICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQotICAgIHZvaWQg
c2V0RnJhbWUoRnJhbWUqIGZyYW1lKSB7IG1fZnJhbWUgPSBmcmFtZTsgfQotCi0gICAgYm9vbCB3
aWRnZXRJc0xhdGNoZWQoKSBjb25zdCB7IHJldHVybiBtX3dpZGdldElzTGF0Y2hlZDsgfQotICAg
IHZvaWQgc2V0V2lkZ2V0SXNMYXRjaGVkKGJvb2wgaXNPdmVyV2lkZ2V0KTsKLQotICAgIENvbnRh
aW5lck5vZGUqIHNjcm9sbGFibGVDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFi
bGVDb250YWluZXIuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFNjcm9sbGFibGVDb250YWluZXIoQ29u
dGFpbmVyTm9kZSopOwotCi1wcml2YXRlOgotICAgIFdlYWtQdHI8RWxlbWVudD4gbV93aGVlbEV2
ZW50RWxlbWVudDsKLSAgICBXZWFrUHRyPENvbnRhaW5lck5vZGU+IG1fc2Nyb2xsYWJsZUNvbnRh
aW5lcjsKLQotICAgIEZyYW1lKiBtX2ZyYW1lIHsgbnVsbHB0ciB9OwotCi0gICAgYm9vbCBtX3dp
ZGdldElzTGF0Y2hlZCB7IGZhbHNlIH07Ci19OwotCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSYpOwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCmluZGV4
IDUxMjFmMTM1ZGM4ZWNmZDNmNjJiYmZjYmNlOGYyMzZhZmY5ZGE2NTIuLjE3ZjYwM2FiZjczOWYy
YTQxMDc4ZWQyYWVmMGY1MWIyNzJmYTY5MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVMYXRjaGluZ0NvbnRyb2xs
ZXIuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gU2Vl
IGFsc28gRXZlbnRIYW5kbGVyTWFjLmNwcAorLy8gU2VlIGFsc28gU2Nyb2xsTGF0Y2hpbmdDb250
cm9sbGVyLmNwcAogc3RhdGljIGNvbnN0IFNlY29uZHMgcmVzZXRMYXRjaGVkU3RhdGVUaW1lb3V0
IHsgMTAwX21zIH07CiAKIFNjcm9sbGluZ1RyZWVMYXRjaGluZ0NvbnRyb2xsZXI6OlNjcm9sbGlu
Z1RyZWVMYXRjaGluZ0NvbnRyb2xsZXIoKSA9IGRlZmF1bHQ7CkBAIC00Nyw3ICs0Nyw3IEBAIHZv
aWQgU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlcjo6cmVjZWl2ZWRXaGVlbEV2ZW50KGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVuCiAgICAgICAgIHJldHVybjsKIAogICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fbGF0Y2hlZE5vZGVNdXRleCk7Ci0gICAgaWYgKHdoZWVsRXZlbnQuc2hvdWxkQ29u
c2lkZXJMYXRjaGluZygpICYmIG1fbGF0Y2hlZE5vZGVJRCAmJiAhbGF0Y2hlZE5vZGVJc1JlbGV2
YW50KCkpIHsKKyAgICBpZiAod2hlZWxFdmVudC5pc0dlc3R1cmVTdGFydCgpICYmIG1fbGF0Y2hl
ZE5vZGVJRCAmJiAhbGF0Y2hlZE5vZGVJc1JlbGV2YW50KCkpIHsKICAgICAgICAgTE9HX1dJVEhf
U1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwgIlNjcm9sbGluZ1RyZWVMYXRjaGluZ0Nv
bnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgcmVjZWl2ZWRXaGVlbEV2ZW50IC0gIiA8PCAoTW9ub3Rv
bmljVGltZTo6bm93KCkgLSBtX2xhc3RMYXRjaGVkTm9kZUludGVyYXRpb25UaW1lKS5taWxsaXNl
Y29uZHMoKSA8PCAibXMgc2luY2UgbGFzdCBldmVudCwgY2xlYXJpbmcgbGF0Y2hlZCBub2RlIik7
CiAgICAgICAgIG1fbGF0Y2hlZE5vZGVJRC5yZXNldCgpOwogICAgIH0KQEAgLTg3LDcgKzg3LDcg
QEAgdm9pZCBTY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyOjpub2RlRGlkSGFuZGxlRXZl
bnQoU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICh3aGVlbEV2ZW50LmRlbHRhKCkuaXNaZXJvKCkgfHwgIXdoZWVsRXZlbnQuc2hvdWxkQ29u
c2lkZXJMYXRjaGluZygpKQorICAgIGlmICh3aGVlbEV2ZW50LmRlbHRhKCkuaXNaZXJvKCkgfHwg
IXdoZWVsRXZlbnQuaXNHZXN0dXJlU3RhcnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTE9H
X1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwgIlNjcm9sbGluZ1RyZWVMYXRj
aGluZ0NvbnRyb2xsZXIgIiA8PCB0aGlzIDw8ICIgbm9kZURpZEhhbmRsZUV2ZW50OiBsYXRjaGlu
ZyB0byAiIDw8IHNjcm9sbGluZ05vZGVJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcAppbmRleCBhNWFlZDJlMGFh
OGQ4M2Q1ZGNhODk4MTExYzFmMTM3ZjZjNjBkZmEzLi42NmVkMWY3MzZjMjdlODc2ZGFhNmY1MjRh
ODdjMGJlYTBlMDFhZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAKQEAgLTYzLDYgKzYzLDcgQEAgV2hlZWxF
dmVudEhhbmRsaW5nUmVzdWx0IFRocmVhZGVkU2Nyb2xsaW5nVHJlZTo6aGFuZGxlV2hlZWxFdmVu
dChjb25zdCBQbGF0Zm9ybVcKIAogYm9vbCBUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OmhhbmRsZVdo
ZWVsRXZlbnRBZnRlck1haW5UaHJlYWQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2
ZW50LCBTY3JvbGxpbmdOb2RlSUQgdGFyZ2V0Tm9kZUlEKQogeworICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiVGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpoYW5kbGVXaGVl
bEV2ZW50QWZ0ZXJNYWluVGhyZWFkICIgPDwgd2hlZWxFdmVudCk7CiAgICAgU2V0Rm9yU2NvcGU8
Ym9vbD4gZGlzYWxsb3dMYXRjaGluZ1Njb3BlKG1fYWxsb3dMYXRjaGluZywgZmFsc2UpOwogCiAg
ICAgUmVmUHRyPFNjcm9sbGluZ1RyZWVOb2RlPiB0YXJnZXROb2RlID0gbm9kZUZvcklEKHRhcmdl
dE5vZGVJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFj
Lm1tCmluZGV4IDAyODU0Y2NiYTYxNzQ3OTA4MGM4ZWM2ODIxMmJlY2M1ZmIzZmFkNGEuLmE4Y2U2
OWFjZmJhY2QwOTQyZWZmNGY5NmE0MzA3MTI0MjA2NTIzM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVn
YXRlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLm1tCkBAIC0xNjcsMTIgKzE2Nyw2IEBAIGJv
b2wgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6aXNTY3JvbGxTbmFwSW5Q
cm9ncmVzcygpIGNvbnN0CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgZmluZCBhIHdheSB0byBzaGFy
ZSBzb21lIG9mIHRoZSBjb2RlIGZyb20gbmV3R2VzdHVyZUlzU3RhcnRpbmcoKSwgaXNBbHJlYWR5
UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUoKSwKIC8vIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGlu
ZygpLCBhbmQgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSB3aXRoIHRoZSBpbXBsZW1lbnRh
dGlvbiBpbiBTY3JvbGxBbmltYXRvck1hYy4KLS8vIFRoaXMgaXMgYWxzbyB0aGUgc2FtZSBhcyBQ
bGF0Zm9ybVdoZWVsRXZlbnQ6OnNob3VsZENvbnNpZGVyTGF0Y2hpbmcoKS4KLXN0YXRpYyBib29s
IG5ld0dlc3R1cmVJc1N0YXJ0aW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVu
dCkKLXsKLSAgICByZXR1cm4gd2hlZWxFdmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlTWF5QmVnaW4gfHwgd2hlZWxFdmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlQmVnYW47Ci19Ci0KIGJvb2wgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0
ZU1hYzo6aXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rpb25PZkdlc3R1cmUoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKIHsKICAg
ICBhdXRvIHNjcm9sbFBvc2l0aW9uID0gY3VycmVudFNjcm9sbFBvc2l0aW9uKCk7CkBAIC0yMDAs
NyArMTk0LDcgQEAgYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjph
bGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGEKICAgICBzd2l0Y2ggKGhvcml6b250
YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKICAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0
aWM6IHsKICAgICAgICAgYm9vbCBzY3JvbGxiYXJzQWxsb3dTdHJldGNoaW5nID0gaGFzRW5hYmxl
ZEhvcml6b250YWxTY3JvbGxiYXIoKSB8fCAhaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKCk7
Ci0gICAgICAgIGJvb2wgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcgPSBuZXdHZXN0dXJlSXNTdGFy
dGluZyh3aGVlbEV2ZW50KSAmJiBpc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZSh3
aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpOworICAgICAgICBib29sIGV2
ZW50UHJldmVudHNTdHJldGNoaW5nID0gd2hlZWxFdmVudC5pc0dlc3R1cmVTdGFydCgpICYmIGlz
QWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbCk7CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXJzQWxsb3dTdHJldGNo
aW5nICYmICFldmVudFByZXZlbnRzU3RyZXRjaGluZzsKICAgICB9CiAgICAgY2FzZSBTY3JvbGxF
bGFzdGljaXR5Tm9uZToKQEAgLTIyMiw3ICsyMTYsNyBAQCBib29sIFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZyhjb25zdCBQbGF0
ZgogICAgIHN3aXRjaCAodmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKICAgICBjYXNlIFNj
cm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6IHsKICAgICAgICAgYm9vbCBzY3JvbGxiYXJzQWxsb3dT
dHJldGNoaW5nID0gaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgIWhhc0VuYWJsZWRI
b3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgICAgIGJvb2wgZXZlbnRQcmV2ZW50c1N0cmV0Y2hp
bmcgPSBuZXdHZXN0dXJlSXNTdGFydGluZyh3aGVlbEV2ZW50KSAmJiBpc0FscmVhZHlQaW5uZWRJ
bkRpcmVjdGlvbk9mR2VzdHVyZSh3aGVlbEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2Fs
KTsKKyAgICAgICAgYm9vbCBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9IHdoZWVsRXZlbnQuaXNH
ZXN0dXJlU3RhcnQoKSAmJiBpc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2VzdHVyZSh3aGVl
bEV2ZW50LCBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKTsKICAgICAgICAgcmV0dXJuIHNjcm9s
bGJhcnNBbGxvd1N0cmV0Y2hpbmcgJiYgIWV2ZW50UHJldmVudHNTdHJldGNoaW5nOwogICAgIH0K
ICAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAppbmRleCAyY2UwNjBlMzM2NTlmNmVmZDNkNDBmOWMyMTk4
ZDQ1YTdiMjcxNTNlLi45MmUwZTI2ZTA2ZjJjZjYzY2QwZmYxOWVmNDcwYTBiNmViZDVkMjRhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaApAQCAtMTUx
LDggKzE1MSwxMCBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogICAg
IGJvb2wgdXNlTGF0Y2hlZEV2ZW50RWxlbWVudCgpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkQ29u
c2lkZXJMYXRjaGluZygpIGNvbnN0OworICAgIGJvb2wgaXNHZXN0dXJlU3RhcnQoKSBjb25zdDsK
KyAgICBib29sIGlzR2VzdHVyZUNvbnRpbnVhdGlvbigpIGNvbnN0OyAvLyBUaGUgZmluZ2Vycy1k
b3duIHBhcnQgb2YgdGhlIGdlc3R1cmUuCiAgICAgYm9vbCBzaG91bGRSZXNldExhdGNoaW5nKCkg
Y29uc3Q7CisgICAgYm9vbCBpc05vbkdlc3R1cmVFdmVudCgpIGNvbnN0OwogICAgIGJvb2wgaXNF
bmRPZk1vbWVudHVtU2Nyb2xsKCkgY29uc3Q7CiAjZWxzZQogICAgIGJvb2wgdXNlTGF0Y2hlZEV2
ZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yMTAsMTUgKzIxMiwyNCBA
QCBpbmxpbmUgYm9vbCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OnVzZUxhdGNoZWRFdmVudEVsZW1lbnQo
KSBjb25zdAogICAgICAgICB8fCAobV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVu
ZGVkICYmIG1fbW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpOwog
fQogCi1pbmxpbmUgYm9vbCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OnNob3VsZENvbnNpZGVyTGF0Y2hp
bmcoKSBjb25zdAoraW5saW5lIGJvb2wgUGxhdGZvcm1XaGVlbEV2ZW50Ojppc0dlc3R1cmVTdGFy
dCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGRpc2FsbG93IGxhdGNoaW5n
IGlmIHRoZSBkZWx0YSBpcyB6ZXJvLgogICAgIHJldHVybiBtX3BoYXNlID09IFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlQmVnYW4gfHwgbV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU1h
eUJlZ2luOwogfQogCitpbmxpbmUgYm9vbCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OmlzR2VzdHVyZUNv
bnRpbnVhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VDaGFuZ2VkOworfQorCiBpbmxpbmUgYm9vbCBQbGF0Zm9ybVdoZWVsRXZlbnQ6
OnNob3VsZFJlc2V0TGF0Y2hpbmcoKSBjb25zdAogewotICAgIHJldHVybiBtX3BoYXNlID09IFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlQ2FuY2VsbGVkIHx8IG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VNYXlCZWdpbiB8fCBpc0VuZE9mTW9tZW50dW1TY3JvbGwoKTsKKyAgICByZXR1
cm4gbV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNhbmNlbGxlZCB8fCBtX3BoYXNl
ID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTWF5QmVnaW4gfHwgKG1fcGhhc2UgPT0gUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2VOb25lICYmIG1fbW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZU5vbmUpIHx8IGlzRW5kT2ZNb21lbnR1bVNjcm9sbCgpOworfQorCitpbmxpbmUg
Ym9vbCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OmlzTm9uR2VzdHVyZUV2ZW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgJiYgbV9tb21l
bnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZTsKIH0KIAogaW5saW5lIGJv
b2wgUGxhdGZvcm1XaGVlbEV2ZW50Ojppc0VuZE9mTW9tZW50dW1TY3JvbGwoKSBjb25zdApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IGU1MTE1N2M1OTg4NzE5ZjM3MmUwOGFiYmRlNzVkM2VkM2YyZDEyYjguLjA0YjQ3MjE5MTlm
ZTc1ODE4MDhkOWRiNDBlOGMzZTExMzNhYTI3MDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAy
MC0wOC0yOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXdyaXRlIG1haW4gdGhyZWFkIHNjcm9sbCBsYXRjaGluZyBsb2dpYworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTc5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgdGVzdCBmb3IgaWZyYW1l
IHVucGFyZW50aW5nIGluIHRoZSBtaWRkbGUgb2YgYSBsYXRjaGVkIHNjcm9sbC4KKworICAgICAg
ICAqIGZhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL2xhdGNoZWQtc2Nyb2xsLXJlbW92ZS1pZnJhbWUu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9zY3JvbGxpbmcvbGF0Y2hpbmcvc2Nyb2xsLW5l
c3RlZC1pZnJhbWUuaHRtbDogMTAwMG1zIC0+IDBtcworICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5n
L21hYy9ydWJiZXJiYW5kLW92ZXJmbG93LWluLXdoZWVsLXJlZ2lvbi5odG1sOiBUZXN0IG5lZWRz
IHRvIGxhdGNoIHRoZSBvdmVyZmxvdyBieSBzY3JvbGxpbmcgZG93biB0aGVuIHVwLgorCisyMDIw
LTA4LTE4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAg
IFJ1YmJlcmJhbmRpbmcgaW4gYW4gb3ZlcmZsb3c6c2Nyb2xsIGNhbiB0cmlnZ2VyIHBhZ2Ugamln
Z2xlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1
NjI5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82NzI5NTc5Nz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL21hYy9ydWJi
ZXJiYW5kLW92ZXJmbG93LWluLXdoZWVsLXJlZ2lvbi1yb290LWppZ2dsZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL21hYy9ydWJiZXJiYW5kLW92ZXJmbG93
LWluLXdoZWVsLXJlZ2lvbi1yb290LWppZ2dsZS5odG1sOiBBZGRlZC4KKwogMjAyMC0wOC0yOCAg
TGF1cm8gTW91cmEgIDxsbW91cmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1BFXSBHYXJkZW5p
bmcgYW5kIHJlYmFzZWxpbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxp
bmcvbGF0Y2hpbmcvbGF0Y2hlZC1zY3JvbGwtcmVtb3ZlLWlmcmFtZS5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9zY3JvbGxpbmcvbGF0Y2hpbmcvbGF0Y2hlZC1zY3JvbGwtcmVtb3ZlLWlmcmFtZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc0YTExOWE4YjRiZWY5NGM3ZDdiYjIxOTU0MjIwZjNmODAzODBiZDMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9sYXRjaGluZy9s
YXRjaGVkLXNjcm9sbC1yZW1vdmUtaWZyYW1lLmh0bWwKQEAgLTAsMCArMSw3MyBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzdHlsZT4KKyAgICAgICAgaWZyYW1lIHsK
KyAgICAgICAgICAgIHdpZHRoOiA2MDBweDsKKyAgICAgICAgICAgIGhlaWdodDogNDAwcHg7Cisg
ICAgICAgIH0KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi9y
ZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgICBq
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGxldCBpZnJhbWUgPSB1bmRl
ZmluZWQ7CisgICAgICAgIGZ1bmN0aW9uIGlmcmFtZVNjcm9sbGVkKG9mZnNldCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKG9mZnNldCA+PSAyMDApCisgICAgICAgICAgICAgICAgaWZyYW1l
LnJlbW92ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaEpT
VGVzdCwgMTYpOworICAgICAgICB9CisKKyAgICAgICAgYXN5bmMgZnVuY3Rpb24gZG9UZXN0KCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJ2lmcmFtZScpWzBdOworCisgICAgICAgICAgICBpZiAoIXdpbmRvdy5ldmVudFNlbmRl
cikgeworICAgICAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3Zl
VG8oMTAwLCAxMDApOyAvLyBJbnNpZGUgdGhlIGlmcmFtZS4KKyAgICAgICAgICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMSwgJ2JlZ2Fu
JywgJ25vbmUnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hl
ZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMTAsICdjaGFuZ2VkJywgJ25vbmUnKTsKKyAgICAgICAg
ICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygw
LCAwLCAnZW5kZWQnLCAnbm9uZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VTY3Jv
bGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAsIC0xMCwgJ25vbmUnLCAnYmVnaW4nKTsK
KyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1
bVBoYXNlcygwLCAtMTAsICdub25lJywgJ2NvbnRpbnVlJyk7CisgICAgICAgICAgICBhd2FpdCBV
SUhlbHBlci5yZW5kZXJpbmdVcGRhdGUoKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNl
U2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAxMCwgJ25vbmUnLCAnY29udGlu
dWUnKTsKKyAgICAgICAgICAgIGF3YWl0IFVJSGVscGVyLnJlbmRlcmluZ1VwZGF0ZSgpOworICAg
ICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhh
c2VzKDAsIDEwLCAnbm9uZScsICdjb250aW51ZScpOworICAgICAgICAgICAgYXdhaXQgVUlIZWxw
ZXIucmVuZGVyaW5nVXBkYXRlKCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVNjcm9s
bEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgLTEwLCAnbm9uZScsICdjb250aW51ZScp
OworICAgICAgICAgICAgYXdhaXQgVUlIZWxwZXIucmVuZGVyaW5nVXBkYXRlKCk7CisgICAgICAg
ICAgICBldmVudFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMo
MCwgMCwgJ25vbmUnLCAnZW5kJyk7CisgICAgICAgIH0KKworICAgICAgICB3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCJUZXN0
IHRoYXQgcmVtb3ZlcyBhbiBpZnJhbWUgZHVyaW5nIGEgbGF0Y2hlZCBzY3JvbGwuIFBhc3NlcyBp
ZiB0aGUgdGVzdCBkb2VzIG5vdCBjcmFzaC4iKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZG9U
ZXN0LCAwKTsKKyAgICAgICAgfSwgZmFsc2UpOworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+CisgICAgPGlmcmFtZSBzcmNkb2M9IgorICAgIDxzdHlsZT4KKyAgICAgICAgYm9keSB7IGhl
aWdodDogMjAwMHB4OyB9CisgICAgPC9zdHlsZT4KKyAgICA8c2NyaXB0PgorICAgICAgICB3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4geworICAgICAgICAgICAgcGFyZW50
LmlmcmFtZVNjcm9sbGVkKHdpbmRvdy5wYWdlWU9mZnNldCk7CisgICAgICAgIH0pOworICAgIDwv
c2NyaXB0PgorICAgIDxib2R5PgorICAgICAgICBpZnJhbWUKKyAgICA8L2JvZHk+CisgICAgIj4K
KyAgICA8L2lmcmFtZT4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICA8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9sYXRj
aGluZy9zY3JvbGwtbmVzdGVkLWlmcmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxp
bmcvbGF0Y2hpbmcvc2Nyb2xsLW5lc3RlZC1pZnJhbWUuaHRtbAppbmRleCAxYWVjOGNkNWJlOGY4
N2ZhOWMzMDUwMjBjMDVkZWFkM2ZlNzAzZTQ0Li40ZTIzMDEwNjgzYzU5YTEwMzVjODE4YTU4NDUw
YTI4YjY2ZjJkNGY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9sYXRj
aGluZy9zY3JvbGwtbmVzdGVkLWlmcmFtZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc2Ny
b2xsaW5nL2xhdGNoaW5nL3Njcm9sbC1uZXN0ZWQtaWZyYW1lLmh0bWwKQEAgLTYyLDcgKzYyLDcg
QEAKICAgICAgICAgewogICAgICAgICAgICAgZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgaWZyYW1l
IGRvZXMgc2Nyb2xsIHdoZW4gaW5uZXIgaWZyYW1lIGlzIE5PVCBzY3JvbGxhYmxlLiIpOwogICAg
ICAgICAgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgewotICAgICAgICAgICAgICAgIHNldFRp
bWVvdXQoc2Nyb2xsVGVzdCwgMTAwMCk7CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChzY3Jv
bGxUZXN0LCAwKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB2YXIgbWVzc2FnZUxvY2F0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bh
cmVudCcpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvbWFjL3J1YmJl
cmJhbmQtb3ZlcmZsb3ctaW4td2hlZWwtcmVnaW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Nj
cm9sbGluZy9tYWMvcnViYmVyYmFuZC1vdmVyZmxvdy1pbi13aGVlbC1yZWdpb24uaHRtbAppbmRl
eCA1ZGQzYTI3YjIyN2JlMGYzMmZkMmQxYWEyZjc4NjBhZTRiMTZhM2JiLi40OTcwY2ZhZjk1ZDVm
Mzg1MmExYjEyYmZlY2FmNTdhMzFmMDJlMDRhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L3Njcm9sbGluZy9tYWMvcnViYmVyYmFuZC1vdmVyZmxvdy1pbi13aGVlbC1yZWdpb24uaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9tYWMvcnViYmVyYmFuZC1vdmVyZmxvdy1p
bi13aGVlbC1yZWdpb24uaHRtbApAQCAtNDYsOCArNDYsMTIgQEAKICAgICAgICAgYXN5bmMgZnVu
Y3Rpb24gZG9Nb3VzZVdoZWVsU2Nyb2xsKCkKICAgICAgICAgewogICAgICAgICAgICAgZXZlbnRT
ZW5kZXIubW91c2VNb3ZlVG8oMTAwLCAxMDApOwotICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91
c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAsIDEsICJiZWdhbiIsICJub25l
Iik7Ci0gICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9t
ZW50dW1QaGFzZXMoMCwgMjAsICJjaGFuZ2VkIiwgIm5vbmUiKTsKKyAgICAgICAgICAgIC8vIFNj
cm9sbCBkb3duIHRvIGxhdGNoLCB0aGVuIHVwIHRvIHJ1YmJlcmJhbmQuCisgICAgICAgICAgICBl
dmVudFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgLTEs
ICJiZWdhbiIsICJub25lIik7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVNjcm9sbEJ5
V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgLTEwLCAiY2hhbmdlZCIsICJub25lIik7Cisg
ICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1Q
aGFzZXMoMCwgLTEwLCAiY2hhbmdlZCIsICJub25lIik7CisgICAgICAgICAgICBldmVudFNlbmRl
ci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgMTIsICJjaGFuZ2Vk
IiwgIm5vbmUiKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hl
ZWxBbmRNb21lbnR1bVBoYXNlcygwLCAxMiwgImNoYW5nZWQiLCAibm9uZSIpOwogICAgICAgICAg
ICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAs
IDAsICJlbmRlZCIsICJub25lIik7CiAgICAgICAgICAgICBhd2FpdCBVSUhlbHBlci5yZW5kZXJp
bmdVcGRhdGUoKTsKICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407554</attachid>
            <date>2020-08-29 17:15:05 -0700</date>
            <delta_ts>2020-08-29 19:06:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215979-20200829171504.patch</filename>
            <type>text/plain</type>
            <size>85900</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWY2NTQxYmJiMmQxZGU0
MzFkMDM4MjYwNzVmZWNmZjMxNzVhYWQ5Ny4uMzUyNGNkZWJhZTNhOGE4NzM5OWVjN2ExNDllYzhl
MDBmYmU1YjA2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMyBAQAorMjAyMC0wOC0yOSAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdyaXRlIG1h
aW4gdGhyZWFkIHNjcm9sbCBsYXRjaGluZyBsb2dpYworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGUgZXhpc3RpbmcgbWFpbiB0aHJlYWQg
d2hlZWwgZXZlbnQgaGFuZGxpbmcgYW5kIGxhdGNoaW5nIGxvZ2ljIGhhZCBhIG51bWJlciBvZiBp
c3N1ZXMsCisgICAgICAgIHNvbWUgb2Ygd2hpY2ggd2VyZSBpbmRpY2F0ZWQgdmlhIHRoZSBGSVhN
RSBjb21tZW50cyBhZGRlZCBpbiByMjY2MDE2OgorICAgICAgICAtIEl0IHRyYWNrZWQgc2Nyb2xs
YWJsZSBjb250YWluZXJzIGFzIENvbnRhaW5lck5vZGVzIHJhdGhlciB0aGFuIFNjcm9sbGFibGVB
cmVhcworICAgICAgICAtIEl0IGZldGNoZWQgYW5kIHVzZWQgbGF0Y2hlZCBzdGF0ZSBmcm9tIGEg
ZGlmZmVyZW50IGZyYW1lLCBjYXVzaW5nIGFuIEV2ZW50SGFuZGxlcgorICAgICAgICAgIHRvIGVu
ZCB1cCBzY3JvbGxpbmcgc29tZSB1bnJlbGF0ZWQgZnJhbWUuCisgICAgICAgIC0gT3ZlcmZsb3cg
c2Nyb2xsaW5nIGlnbm9yZWQgbGF0Y2hlZCBzdGF0ZS4KKyAgICAgICAgLSBUaGUgbGF0Y2hpbmcg
c3RhY2sncyBwdXJwb3NlIHdhcyB1bmNsZWFyLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBmaXhlcyB0aG9zZSBpc3N1ZXMuIFRoZSBkZXNpZ24gaXMgYXMgZm9sbG93OiAKKyAgICAgICAg
LSBMYXRjaGluZyBsb2dpYyBpcyBtb3ZlZCBpbnRvIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlciwg
d2hpY2ggaXMgb3duZWQgYnkgUGFnZS4KKyAgICAgICAgLSBTY3JvbGxMYXRjaGluZ0NvbnRyb2xs
ZXIgb3ducyBhIHN0YWNrIG9mIEZyYW1lU3RhdGUuCisgICAgICAgIC0gV2hlbiByZWNlaXZpbmcg
YSB3aGVlbCBldmVudCwgZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldCgpIGlkZW50aWZpZXMgdGhl
IHRhcmdldAorICAgICAgICAgIFNjcm9sbGFibGVBcmVhLCBpZiBhbnksIGZvciB0aGF0IGZyYW1l
IG9ubHkuCisgICAgICAgIC0gQXMgaGl0LXRlc3RpbmcgZGVzY2VuZHMgaW50byBzdWJmcmFtZXMs
IHN0YXRlIGlzIHB1c2hlZCBvbnRvIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcidzCisgICAgICAg
ICAgc3RhdGUgc3RhY2suIEZyYW1lcyB3aXRoIHBvdGVudGlhbCBzY3JvbGxlcnMgaGF2ZSBhIG5v
bi1udWxsIFNjcm9sbGFibGVBcmVhIGluIHRoZWlyIHN0YXRlLgorICAgICAgICAtIFRoZSBsYXRj
aGVkIFNjcm9sbGFibGVBcmVhIGlzIHRoZSB0b3Agbm9uLW51bGwgU2Nyb2xsYWJsZUFyZWEgaW4g
dGhpcyBzdGFjay4KKyAgICAgICAgLSBFdmVudEhhbmRsZXIgY29uc3VsdHMgU2Nyb2xsTGF0Y2hp
bmdDb250cm9sbGVyIGZvciBzZWxlY3QsIG92ZXJmbG93IGFuZCBmcmFtZSBzY3JvbGxpbmcuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGNoYW5nZSBmaXhlcyBhbiBpc3N1ZSB3aGVyZSBzY3JvbGxp
bmcgb3ZlciBhbiBvdmVyZmxvdzpzY3JvbGwgaW4gdGhlIG5vbi1mYXN0IHNjcm9sbGFibGUKKyAg
ICAgICAgcmVnaW9uIHdvdWxkIHJ1YmJlci1iYW5kIHRoZSBvdmVyZmxvdywgcmF0aGVyIHRoYW4g
dGhlIG1haW4gcGFnZSAodGVzdGVkIGJ5IHRoZSBhZGp1c3RlZAorICAgICAgICBmYXN0L3Njcm9s
bGluZy9tYWMvcnViYmVyYmFuZC1vdmVyZmxvdy1pbi13aGVlbC1yZWdpb24uaHRtbCkuCisKKyAg
ICAgICAgVGVzdHM6IGZhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL2xhdGNoZWQtc2Nyb2xsLXJlbW92
ZS1pZnJhbWUuaHRtbAorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGV0ZXJt
aW5lV2hlZWxFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBy
b2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNvbXBsZXRlV2lkZ2V0V2hlZWxFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjbGVhckxhdGNoZWRTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRlZmF1bHRXaGVlbEV2ZW50SGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNsZWFyTGF0Y2hlZFN0YXRlVGltZXJGaXJl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNsZWFyT3JTY2hl
ZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAqIHBh
Z2UvRXZlbnRIYW5kbGVyLmg6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2U6OnN0YXJ0TW9uaXRvcmluZ1doZWVsRXZlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnNjcm9sbExhdGNoaW5nQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjpzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlOjpsYXRjaGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnB1c2hOZXdMYXRjaGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OnJlc2V0TGF0Y2hpbmdTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpw
b3BMYXRjaGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlbW92
ZUxhdGNoaW5nU3RhdGVGb3JUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvUGFnZS5o
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6bGF0Y2hpbmdTdGF0ZVN0YWNrIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRldGVybWluZVdoZWVsRXZlbnRUYXJnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVQbGF0Zm9y
bVdpZGdldFdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwcm9j
ZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXApOgorICAgICAgICAoV2ViQ29yZTo6ZGVsdGFJc1By
ZWRvbWluYW50bHlWZXJ0aWNhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxl
ZFRvRWRnZUluRG9taW5hbnREaXJlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
bGF0Y2hpbmdJc0xvY2tlZFRvUGxhdGZvcm1GcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpsYXRjaGluZ0lzTG9ja2VkVG9BbmNlc3Rvck9mVGhpc0ZyYW1lKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmxhdGNoZWRUb0ZyYW1lT3JCb2R5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3Rh
dGVJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpmcmFtZVZpZXdGb3JMYXRj
aGluZ1N0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNo
aW5nQ29udHJvbGxlcjo6U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcklmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Y2xlYXJUaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6cmVjZWl2
ZWRXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxl
cjo6bGF0Y2hpbmdBbGxvd3NTY3JvbGxpbmdJbkZyYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6dXBkYXRlTGF0Y2hpbmdTdGF0ZUZvckZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Z2V0TGF0Y2hp
bmdTdGF0ZUZvckZyYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5n
Q29udHJvbGxlcjo6cmVtb3ZlTGF0Y2hpbmdTdGF0ZUZvclRhcmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OnJlbW92ZUxhdGNoaW5nU3RhdGVGb3JGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWx0YUlzUHJlZG9taW5hbnRseVZlcnRpY2FsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6c2hvdWxkTGF0Y2hUb1Nj
cm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29u
dHJvbGxlcjo6aGFzU3RhdGVGb3JGcmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXI6OnN0YXRlRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpzdGF0ZUZvckZyYW1lIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxM
YXRjaGluZ0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXI6OmN1bXVsYXRpdmVFdmVudERlbHRhIGNvbnN0KToKKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTGF0Y2hpbmdDb250cm9sbGVyOjpyZWNlaXZl
ZFdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29u
dHJvbGxlcjo6bm9kZURpZEhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9U
aHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkZWRTY3Jv
bGxpbmdUcmVlOjpoYW5kbGVXaGVlbEV2ZW50QWZ0ZXJNYWluVGhyZWFkKToKKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVN
YWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFsbG93c1ZlcnRpY2FsU3Ry
ZXRjaGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpuZXdHZXN0dXJlSXNTdGFydGluZyk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OmlzR2VzdHVyZVN0YXJ0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6aXNHZXN0dXJlQ29udGludWF0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6c2hvdWxk
UmVzZXRMYXRjaGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZl
bnQ6OmlzTm9uR2VzdHVyZUV2ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
V2hlZWxFdmVudDo6c2hvdWxkQ29uc2lkZXJMYXRjaGluZyBjb25zdCk6IERlbGV0ZWQuIFJlbmFt
ZWQgdG8gaXNHZXN0dXJlU3RhcnQoKS4gVGhpcyBjbGFzcworICAgICAgICBzaG91bGQgbm90IHBy
ZXNjcmliZSBsYXRjaGluZyBiZWhhdmlvcnMuCisKIDIwMjAtMDgtMjggIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgUGFubmVyTm9kZSB0byBzdXBwb3J0
IGstcmF0ZSBhdXRvbWF0aW9uIG9mIGl0cyBBdWRpb1BhcmFtcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBh
NzlkZWNkMGI4NDE5ZDZhYmY3NzE3ZmZhNTZjZjA1ZGVlZDRkY2IxLi4zZTczOGU0MGFmYjQyYjQ1
OTk3MjU2N2I3NjRlODAwNjdlMGEwMjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTY4Myw3ICsxNjgz
LDcgQEAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAKIHBhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUuY3BwCiBwYWdlL3Nj
cm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAogcGFnZS9zY3JvbGxpbmcvQXhp
c1Njcm9sbFNuYXBPZmZzZXRzLmNwcAotcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdTdGF0
ZS5jcHAKK3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHAKIHBhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0NvbnN0cmFpbnRzLmNwcAogcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZUZpeGVkTm9k
ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA1ODhjNzYxZGIxNzNkYWFhYjQ0NWQ0ZDljNTlmZWRlZGE5NjFlNzI4Li44NGQz
ZTE0YWVjYTZjYTQ1ZDEyOWY4MjlhODY1OGZlYzcyNGI4NTRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDc2LDggKzEwNzYs
OCBAQAogCQk0MTZFMEIzQTIwOUJDM0NCMDA0QTk1RDkgLyogRmV0Y2hJZGVudGlmaWVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFMEIzNzIwOUJD
M0MyMDA0QTk1RDkgLyogRmV0Y2hJZGVudGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDE2RTI5QTYxMDJGQTk2MjAwN0ZDMTRFIC8qIFdv
cmtlclJlcG9ydGluZ1Byb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTZFMjlBNTEwMkZBOTYyMDA3RkMxNEUgLyogV29ya2VyUmVwb3J0aW5nUHJv
eHkuaCAqLzsgfTsKIAkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjY0IC8qIFJlYWRhYmxlU3RyZWFt
SW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3NjREOSAvKiBSZWFkYWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJNDE2RTZGRTgxQkJEMTJERjAwMEEzRjc0IC8qIFRyYW5zZm9ybVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RUEgLyogVHJhbnNmb3JtU3RyZWFtSW50ZXJuYWxz
QnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0MTZFNkZFODFCQkQxMkRGMDAwQTNGNjUgLyogSlNET01CaW5kaW5nSW50ZXJuYWxzQnVp
bHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlC
MDNEODA2MUJCMzExMEQwMEI3NjREQSAvKiBKU0RPTUJpbmRpbmdJbnRlcm5hbHNCdWlsdGlucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxNkU2
RkU4MUJCRDEyREYwMDBBM0Y3NCAvKiBUcmFuc2Zvcm1TdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwM0Q4MDYx
QkIzMTEwRDAwQjc2NEVBIC8qIFRyYW5zZm9ybVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDE2RTZGRTgx
QkJEMTJERjAwMEE2MDMzIC8qIFN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0
QzkgLyogU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTZFNkZFODFCQkQxMkRGMDAwQTYwNDMgLyogUmVh
ZGFibGVCeXRlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMDNEODA2MUJCMzExMEQwMEI3M0Y2NCAvKiBSZWFk
YWJsZUJ5dGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQxNkU2RkU4MUJCRDEyREYwMDBBNjA1MyAvKiBX
cml0YWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTkgLyogV3JpdGFi
bGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yMjE1LDcgKzIyMTUsNiBAQAogCQk3QUEzQTZBMDE5NEI1
OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QUEzQTY5RTE5NEI1OUI2MDAxQ0JEMjQgLyogTGF5ZXJQb29sLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0FBM0E2
QTQxOTRCNUMyMjAwMUNCRDI0IC8qIFRpbGVDb3ZlcmFnZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FBM0E2QTIxOTRCNUMyMjAwMUNCRDI0IC8q
IFRpbGVDb3ZlcmFnZU1hcC5oICovOyB9OwogCQk3QUFCQTI1QTE0QkM2MTMzMDBBQTlBMTEgLyog
RE9NRWRpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QUFCQTI1ODE0QkM2MTMzMDBBQTlBMTEgLyogRE9NRWRpdG9yLmggKi87IH07Ci0JCTdBQUZF
OEQwMTlDQjg2NzIwMDBGNTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUFGRThDRTE5Q0I4NjcyMDAwRjU2
RDggLyogU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oICovOyB9OwogCQk3QURFNzIyNjEwQ0JCQjlCMDA2
QjNCM0EgLyogQ29udGV4dE1lbnVQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0FERTcyMjUxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRN
ZW51UHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3QUUzMzVGMjFBQ0IwOUUyMDBFNDAxRUYgLyogV2hlZWxFdmVudFRlc3RNb25pdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUUzMzVG
MDFBQ0IwOUUyMDBFNDAxRUYgLyogV2hlZWxFdmVudFRlc3RNb25pdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0FFNkM5M0MxQkUwQzYwMTAw
RTE5RTAzIC8qIE1haW5UaHJlYWRTaGFyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FFNkM5M0ExQkUwQzYwMTAwRTE5RTAzIC8qIE1haW5U
aHJlYWRTaGFyZWRUaW1lci5oICovOyB9OwpAQCAtNTk3NSw2ICs1OTc0LDggQEAKIAkJMEY5NEI2
NTMyMjA5MTU2QzAwMTU3MDE0IC8qIFNjcm9sbGluZ1RyZWVQb3NpdGlvbmVkTm9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JvbGxpbmdUcmVlUG9zaXRpb25lZE5vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5NEI2NTQyMjA5MTU2QzAwMTU3MDE0IC8qIFNjcm9sbGluZ1RyZWVQ
b3NpdGlvbmVkTm9kZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVQb3Np
dGlvbmVkTm9kZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NEYzN0MyMzY2
MTEzMTAwM0FBNUM3IC8qIFN0eWxlUnVsZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSdWxl
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk1MTBGMDI0RjQ3NjlDMDAx
RjUyREMgLyogU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9s
bExhdGNoaW5nQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk1
MTBGMjI0RjQ3NjlDMDAxRjUyREMgLyogU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNjcm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTdBNjU3MTU1REE4MUUwMEZBREQ0QyAvKiBEaXNwbGF5UmVm
cmVzaE1vbml0b3JJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBEaXNwbGF5UmVmcmVzaE1vbml0b3JJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOUI1NDc1MjJCNEE3NzIwMDdCNUU4QSAvKiBTY3JvbGxpbmdTdGF0ZU92ZXJmbG93U2Ny
b2xsUHJveHlOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3Jv
bGxQcm94eU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5QjU0NzYyMkI0
QTc3MzAwN0I1RThBIC8qIFNjcm9sbGluZ1N0YXRlT3ZlcmZsb3dTY3JvbGxQcm94eU5vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsaW5nU3RhdGVPdmVyZmxvd1Njcm9sbFByb3h5Tm9k
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDAwMSw4ICsxMDAwMiw2IEBA
CiAJCTdBQTNBNkEyMTk0QjVDMjIwMDFDQkQyNCAvKiBUaWxlQ292ZXJhZ2VNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlsZUNvdmVyYWdlTWFwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdBQUJBMjU3MTRCQzYxMzMwMEFBOUExMSAvKiBET01FZGl0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NRWRpdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FBQkEyNTgxNEJDNjEzMzAwQUE5QTExIC8q
IERPTUVkaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01FZGl0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0FBRkU4Q0QxOUNCODY3MjAwMEY1NkQ4
IC8qIFNjcm9sbExhdGNoaW5nU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTdBQUZFOENFMTlDQjg2NzIwMDBGNTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbExhdGNoaW5nU3RhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FERTcyMjUxMENCQkI5QjAwNkIzQjNBIC8q
IENvbnRleHRNZW51UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29udGV4dE1lbnVQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUUz
MzVFRjFBQ0IwOUUyMDBFNDAxRUYgLyogV2hlZWxFdmVudFRlc3RNb25pdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdoZWVsRXZlbnRUZXN0TW9uaXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRTMzNUYwMUFDQjA5RTIwMEU0MDFFRiAv
KiBXaGVlbEV2ZW50VGVzdE1vbml0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2hlZWxFdmVudFRlc3RNb25pdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMTU2NiwxMCArMTE1NjUsMTAgQEAKIAkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFN0cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L1N0cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19E
SVI7IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3NjREOCAvKiBSZWFkYWJsZVN0cmVhbUJ1aWx0
aW5zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlYWRhYmxlU3RyZWFtQnVp
bHRpbnMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvUmVhZGFibGVTdHJlYW1CdWls
dGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5QjAzRDgwNjFC
QjMxMTBEMDBCNzY0RDkgLyogUmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0
aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1JlYWRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJOUIw
M0Q4MDYxQkIzMTEwRDAwQjc2NEVBIC8qIFRyYW5zZm9ybVN0cmVhbUludGVybmFsc0J1aWx0aW5z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRyYW5zZm9ybVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1RyYW5zZm9ybVN0
cmVhbUludGVybmFsc0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTlCMDNEODA2MUJCMzExMEQwMEI3NjREQSAvKiBKU0RPTUJpbmRpbmdJbnRlcm5hbHNC
dWlsdGlucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0RPTUJpbmRpbmdJ
bnRlcm5hbHNCdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RPTUJp
bmRpbmdJbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OyB9OwogCQk5QjAzRDgwNjFCQjMxMTBEMDBCNzY0RTggLyogV3JpdGFibGVTdHJlYW1CdWlsdGlu
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXcml0YWJsZVN0cmVhbUJ1aWx0
aW5zLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1dyaXRhYmxlU3RyZWFtQnVpbHRp
bnMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOUIwM0Q4MDYxQkIz
MTEwRDAwQjc2NEU5IC8qIFdyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV3JpdGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlu
cy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9Xcml0YWJsZVN0cmVhbUludGVybmFs
c0J1aWx0aW5zLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTlCMDNE
ODA2MUJCMzExMEQwMEI3NjRFQSAvKiBUcmFuc2Zvcm1TdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUcmFuc2Zvcm1TdHJlYW1JbnRlcm5h
bHNCdWlsdGlucy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9UcmFuc2Zvcm1TdHJl
YW1JbnRlcm5hbHNCdWlsdGlucy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQk5QjA5OEJENTFGM0Q2MDMzMDAyREQ1NjIgLyogRGF0YVRyYW5zZmVySXRlbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRhVHJhbnNmZXJJdGVtLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIwOThCREQxRjNENjczRDAwMkRENTYyIC8q
IEpTRGF0YVRyYW5zZmVySXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RhdGFUcmFuc2Zlckl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5QjA5OEJERTFGM0Q2NzNEMDAyREQ1NjIgLyogSlNEYXRhVHJhbnNmZXJJdGVtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVRyYW5zZmVySXRlbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgwMDMsOCArMTgwMDIsOCBAQAogCQkJCTkzOTFBOTlC
MTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oICovLAogCQkJ
CUE2RDVBOTlBMTYyOUQ2RkYwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURl
bGVnYXRlLmNwcCAqLywKIAkJCQlBNkQ1QTk5QjE2MjlENzAwMDAyOTczMzAgLyogU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5oICovLAotCQkJCTdBQUZFOENEMTlDQjg2NzIwMDBG
NTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmNwcCAqLywKLQkJCQk3QUFGRThDRTE5Q0I4Njcy
MDAwRjU2RDggLyogU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oICovLAorCQkJCTBGOTUxMEYyMjRGNDc2
OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGOTUx
MEYwMjRGNDc2OUMwMDFGNTJEQyAvKiBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuaCAqLywKIAkJ
CQlGNDY3MjkyNTFFMERFNUFCMDBBQ0MzRDggLyogU2Nyb2xsU25hcE9mZnNldHNJbmZvLmggKi8s
CiAJCQkJMEY2MzgzREIxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5nVHJlZS5j
cHAgKi8sCiAJCQkJMEY2MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Nyb2xsaW5n
VHJlZS5oICovLApAQCAtMzM0OTcsNyArMzM0OTYsNiBAQAogCQkJCTBGMzdGMDg1MjIwMkJGOTgw
MEE4OUMwQiAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjk0QjY0OTIyMDhGRTNCMDAxNTcwMTQgLyogU2Nyb2xsaW5nVHJlZVN0
aWNreU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQzU3OTVEMURBNUMzMDEwMDZGOUM5NyAv
KiBTY3JvbGxJbnRvVmlld09wdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTdBQUZFOEQwMTlD
Qjg2NzIwMDBGNTZEOCAvKiBTY3JvbGxMYXRjaGluZ1N0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4M0M1Nzk1RDFEQTVDMzAxMDA2RjlDODYgLyogU2Nyb2xsTG9naWNhbFBvc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4M0M1Nzk1RDFEQTVDMzAxMDA2RkFDOTcgLyogU2Nyb2xsT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ3ODc1NTQxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9s
bFNuYXBBbmltYXRvclN0YXRlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApp
bmRleCBiZDgwMjliYmY1NzRkNWVhODRjODk2YmFhMDUyOTdiOWQxY2U3NTI1Li43MjJkY2Y0YmU3
ZDI2ODE5YTBjNTZmODNkNTlkZmExZjA3MjRlZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBA
IC0xMDUsNyArMTA1LDcgQEAKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsSW50b1ZpZXdPcHRpb25z
LmgiCi0jaW5jbHVkZSAiU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIlNjcm9sbExh
dGNoaW5nQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yUXVlcnkuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXVsYXRlZENsaWNrLmgiCkBAIC0yMjU5LDkgKzIy
NTksMTEgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlIHJl
bW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXIKICAgICBpZiAoZnJhbWUpCiAgICAgICAg
IGZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5jYW5jZWxBbmltYXRpb25zKCp0aGlzKTsKIAotI2lm
IFBMQVRGT1JNKE1BQykKLSAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAg
ZnJhbWUtPnBhZ2UoKS0+cmVtb3ZlTGF0Y2hpbmdTdGF0ZUZvclRhcmdldCgqdGhpcyk7CisjaWYg
RU5BQkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQorICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFn
ZSgpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgPSBmcmFt
ZS0+cGFnZSgpLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpKQorICAgICAgICAg
ICAgc2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyLT5yZW1vdmVMYXRjaGluZ1N0YXRlRm9yVGFyZ2V0
KCp0aGlzKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIGlmIChoYXNSYXJlRGF0YSgpICYmIGVsZW1l
bnRSYXJlRGF0YSgpLT5oYXNFbGVtZW50SWRlbnRpZmllcigpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKaW5kZXggYjQ1NWIxZGViNmU0OTE1ZTRlOTFhMGU1NTEwYTczMDExMzEz
ZjI0Zi4uMDEyN2ZhZjNhOWU5MTVmMjE0OTljNzhjMmI3YjEwMzZjY2QyMTM3NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtODksNyArODksNyBAQAogI2luY2x1ZGUgIlNW
R0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTY3JvbGxBbmlt
YXRvci5oIgotI2luY2x1ZGUgIlNjcm9sbExhdGNoaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJTY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKQEAgLTM5MCw5ICszOTAsNiBA
QCBib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRMb29wSGFuZGxlTW91c2VEcmFnZ2VkKGNvbnN0IE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdAogRXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIoRnJh
bWUmIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1faG92ZXJUaW1lcigqdGhp
cywgJkV2ZW50SGFuZGxlcjo6aG92ZXJUaW1lckZpcmVkKQotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICAsIG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIoKnRoaXMsICZFdmVudEhhbmRsZXI6OmNsZWFy
TGF0Y2hlZFN0YXRlVGltZXJGaXJlZCkKLSNlbmRpZgogICAgICwgbV9hdXRvc2Nyb2xsQ29udHJv
bGxlcihtYWtlVW5pcXVlPEF1dG9zY3JvbGxDb250cm9sbGVyPigpKQogI2lmICFFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKICAgICAsIG1fZmFrZU1vdXNlTW92ZUV2ZW50VGltZXIoKnRoaXMsICZF
dmVudEhhbmRsZXI6OmZha2VNb3VzZU1vdmVFdmVudFRpbWVyRmlyZWQpCkBAIC0yNzcyLDE1ICsy
NzY5LDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmlzSW5zaWRlU2Nyb2xsYmFyKGNvbnN0IEludFBv
aW50JiB3aW5kb3dQb2ludCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRXZl
bnRIYW5kbGVyOjpjbGVhckxhdGNoZWRTdGF0ZVRpbWVyRmlyZWQoKQotewotICAgIExPRyhTY3Jv
bGxMYXRjaGluZywgIkV2ZW50SGFuZGxlciAlcCBjbGVhckxhdGNoZWRTdGF0ZVRpbWVyRmlyZWQo
KSIsIHRoaXMpOwotICAgIGNsZWFyTGF0Y2hlZFN0YXRlKCk7Ci19Ci0KICNpZiAhUExBVEZPUk0o
TUFDKQogCi12b2lkIEV2ZW50SGFuZGxlcjo6ZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBIaXRUZXN0UmVzdWx0JiwgUmVmUHRyPEVsZW1l
bnQ+JiwgUmVmUHRyPENvbnRhaW5lck5vZGU+JiwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mLCBi
b29sJikKK3ZvaWQgRXZlbnRIYW5kbGVyOjpkZXRlcm1pbmVXaGVlbEV2ZW50VGFyZ2V0KGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYsIFJlZlB0cjxFbGVtZW50PiYsIFdlYWtQdHI8U2Nyb2xsYWJs
ZUFyZWE+JiwgYm9vbCYpCiB7CiB9CiAKQEAgLTI3OTAsNyArMjc4MSw3IEBAIHZvaWQgRXZlbnRI
YW5kbGVyOjpyZWNvcmRXaGVlbEV2ZW50Rm9yRGVsdGFGaWx0ZXIoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiBldmVuCiAgICAgICAgIHBhZ2UtPndoZWVsRXZlbnREZWx0YUZpbHRlcigpLT51cGRh
dGVGcm9tRGVsdGEoRmxvYXRTaXplKGV2ZW50LmRlbHRhWCgpLCBldmVudC5kZWx0YVkoKSkpOwog
fQogCi1ib29sIEV2ZW50SGFuZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgQ29udGFpbmVyTm9kZSosIGNvbnN0IFdlYWtQ
dHI8U2Nyb2xsYWJsZUFyZWE+JikKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwcm9jZXNzV2hlZWxFdmVu
dEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBjb25zdCBXZWFr
UHRyPFNjcm9sbGFibGVBcmVhPiYpCiB7CiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZSht
X2ZyYW1lKTsKIApAQCAtMjgwMiw3ICsyNzkzLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnByb2Nl
c3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQK
ICAgICByZXR1cm4gZGlkSGFuZGxlRXZlbnQ7CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpwbGF0
Zm9ybUNvbXBsZXRlUGxhdGZvcm1XaWRnZXRXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYsIGNvbnN0IFdpZGdldCYsIENvbnRhaW5lck5vZGUqKQorYm9vbCBFdmVudEhhbmRsZXI6
OnBsYXRmb3JtQ29tcGxldGVQbGF0Zm9ybVdpZGdldFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiwgY29uc3QgV2lkZ2V0JiwgY29uc3QgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4m
KQogewogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjgxMCwxMSArMjgwMSw2IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1XaWRnZXRXaGVlbEV2ZW50KGNvbnN0
IFBsYXRmb3JtV2hlZWxFCiB2b2lkIEV2ZW50SGFuZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JT
Y3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IFdlYWtQdHI8U2Nyb2xs
YWJsZUFyZWE+JikKIHsKIH0KLQotdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyT3JTY2hlZHVsZUNs
ZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikKLXsK
LSAgICBjbGVhckxhdGNoZWRTdGF0ZSgpOwotfQogICAgIAogI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIApAQCAtMjg1Nyw3ICsyODQzLDcgQEAgc3RhdGljIFdlYWtQdHI8V2lkZ2V0PiB3
aWRnZXRGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJuIG1ha2VX
ZWFrUHRyKCpkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCp0YXJnZXQpLndpZGdldCgpKTsKIH0KIAot
Ym9vbCBFdmVudEhhbmRsZXI6OmNvbXBsZXRlV2lkZ2V0V2hlZWxFdmVudChjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmIGV2ZW50LCBjb25zdCBXZWFrUHRyPFdpZGdldD4mIHdpZGdldCwgY29uc3Qg
V2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mIHNjcm9sbGFibGVBcmVhLCBDb250YWluZXJOb2RlKiBz
Y3JvbGxhYmxlQ29udGFpbmVyKQorYm9vbCBFdmVudEhhbmRsZXI6OmNvbXBsZXRlV2lkZ2V0V2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBjb25zdCBXZWFrUHRyPFdp
ZGdldD4mIHdpZGdldCwgY29uc3QgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mIHNjcm9sbGFibGVB
cmVhKQogewogICAgIG1faXNIYW5kbGluZ1doZWVsRXZlbnQgPSBmYWxzZTsKICAgICAKQEAgLTI4
NzMsNyArMjg1OSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpjb21wbGV0ZVdpZGdldFdoZWVsRXZl
bnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgY29uCiAgICAgaWYgKCF3aWRnZXQt
PnBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIHBs
YXRmb3JtQ29tcGxldGVQbGF0Zm9ybVdpZGdldFdoZWVsRXZlbnQoZXZlbnQsICp3aWRnZXQuZ2V0
KCksIHNjcm9sbGFibGVDb250YWluZXIpOworICAgIHJldHVybiBwbGF0Zm9ybUNvbXBsZXRlUGxh
dGZvcm1XaWRnZXRXaGVlbEV2ZW50KGV2ZW50LCAqd2lkZ2V0LmdldCgpLCBzY3JvbGxhYmxlQXJl
YSk7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYgZXZlbnQpCkBAIC0yODg5LDYgKzI4NzUsOSBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQog
ICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKCFtX2ZyYW1l
LnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9D
SykKICAgICBpZiAobV9mcmFtZS5wYWdlKCktPnBvaW50ZXJMb2NrQ29udHJvbGxlcigpLmlzTG9j
a2VkKCkpIHsKICAgICAgICAgbV9mcmFtZS5wYWdlKCktPnBvaW50ZXJMb2NrQ29udHJvbGxlcigp
LmRpc3BhdGNoTG9ja2VkV2hlZWxFdmVudChldmVudCk7CkBAIC0yOTA3LDMzICsyODk2LDMwIEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYgZXZlbnQpCiAgICAgbV9pc0hhbmRsaW5nV2hlZWxFdmVudCA9IHRydWU7CiAgICAgc2V0
RnJhbWVXYXNTY3JvbGxlZEJ5VXNlcigpOwogCisgICAgaWYgKG1fZnJhbWUuaXNNYWluRnJhbWUo
KSkgeworI2lmIEVOQUJMRShXSEVFTF9FVkVOVF9MQVRDSElORykKKyAgICAgICAgbV9mcmFtZS5w
YWdlKCktPnNjcm9sbExhdGNoaW5nQ29udHJvbGxlcigpLnJlY2VpdmVkV2hlZWxFdmVudChldmVu
dCk7CisjZW5kaWYKKyAgICAgICAgcmVjb3JkV2hlZWxFdmVudEZvckRlbHRhRmlsdGVyKGV2ZW50
KTsKKyAgICB9CisKICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0OwogICAgIEhpdFRlc3RSZXN1
bHQgcmVzdWx0KHZpZXctPndpbmRvd1RvQ29udGVudHMoZXZlbnQucG9zaXRpb24oKSkpOwogICAg
IGRvY3VtZW50LT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCk7CiAKLSAgICAvLyBGSVhNRTogV2h5
IGRvIHdlIGhhdmUgdHJhY2sgYWxsIHRocmVlIG9mIHRhcmdldEVsZW1lbnQsIHNjcm9sbGFibGVD
b250YWluZXIgYW5kIFNjcm9sbGFibGVBcmVhPwogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50
ID0gcmVzdWx0LnRhcmdldEVsZW1lbnQoKTsKLSAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gc2Ny
b2xsYWJsZUNvbnRhaW5lcjsKICAgICBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiBzY3JvbGxhYmxl
QXJlYTsKICAgICBib29sIGlzT3ZlcldpZGdldCA9IHJlc3VsdC5pc092ZXJXaWRnZXQoKTsKLSAg
ICAKLSAgICAvLyBGSVhNRTogVXNpbmcgdGhlIHZhbHVlIG9mIGlzT3ZlcldpZGdldCBmcm9tIHRo
ZSBsYXRjaGluZyBzdGF0ZSB0cmlnZ2VycyBkb3VibGUtcmVjdXJzaW9uIGludG8gc3ViZnJhbWVz
LgorCiAgICAgLy8gRklYTUU6IERlc3BpdGUgZG9pbmcgdGhpcyB1cC1mcm9udCBzZWFyY2ggZm9y
IHRoZSBjb3JyZWN0IHNjcm9sbGFibGUgYXJlYSwgd2UgZGlzcGF0Y2ggZXZlbnRzIHZpYSBlbGVt
ZW50cyB3aGljaAogICAgIC8vIGl0c2VsZiBmaW5kcyBhbmQgdHJpZXMgdG8gc2Nyb2xsIG92ZXJm
bG93IHNjcm9sbGVycy4KLSAgICBkZXRlcm1pbmVXaGVlbEV2ZW50VGFyZ2V0KGV2ZW50LCByZXN1
bHQsIGVsZW1lbnQsIHNjcm9sbGFibGVDb250YWluZXIsIHNjcm9sbGFibGVBcmVhLCBpc092ZXJX
aWRnZXQpOwotCi0jaWYgRU5BQkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQotICAgIGlmIChldmVu
dC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSAmJiBldmVudC5tb21lbnR1
bVBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lICYmIG1fZnJhbWUucGFnZSgp
KQotICAgICAgICBtX2ZyYW1lLnBhZ2UoKS0+cmVzZXRMYXRjaGluZ1N0YXRlKCk7Ci0jZW5kaWYK
LQotICAgIHJlY29yZFdoZWVsRXZlbnRGb3JEZWx0YUZpbHRlcihldmVudCk7CisgICAgZGV0ZXJt
aW5lV2hlZWxFdmVudFRhcmdldChldmVudCwgZWxlbWVudCwgc2Nyb2xsYWJsZUFyZWEsIGlzT3Zl
cldpZGdldCk7CiAKICAgICBpZiAoZWxlbWVudCkgewogICAgICAgICBpZiAoaXNPdmVyV2lkZ2V0
KSB7CiAgICAgICAgICAgICBpZiAoV2Vha1B0cjxXaWRnZXQ+IHdpZGdldCA9IHdpZGdldEZvckVs
ZW1lbnQoKmVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBhc3NXaGVlbEV2ZW50VG9X
aWRnZXQoZXZlbnQsICp3aWRnZXQuZ2V0KCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y29tcGxldGVXaWRnZXRXaGVlbEV2ZW50KGV2ZW50LCB3aWRnZXQsIHNjcm9sbGFibGVBcmVhLCBz
Y3JvbGxhYmxlQ29udGFpbmVyLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bXBsZXRlV2lkZ2V0V2hlZWxFdmVudChldmVudCwgd2lkZ2V0LCBzY3JvbGxhYmxlQXJlYSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMjk1Myw5ICsyOTM5LDE5IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZl
bnQpCiAgICAgaWYgKHNjcm9sbGFibGVBcmVhKQogICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0
U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUoZmFsc2UpOwogCi0gICAgLy8gRklYTUU6IHBy
b2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKCkgaXMgb25seSBjYWxsZWQgZm9yIEZyYW1lVmll
dyBzY3JvbGxpbmcsIG5vdCBvdmVyZmxvdyBzY3JvbGxpbmcsIHdoaWNoIGlzIGNvbmZ1c2luZy4K
LSAgICBib29sIGhhbmRsZWRFdmVudCA9IHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGV2
ZW50LCBzY3JvbGxhYmxlQ29udGFpbmVyLmdldCgpLCBzY3JvbGxhYmxlQXJlYSk7Ci0gICAgcHJv
Y2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGV2ZW50LCBzY3JvbGxhYmxlQXJlYSk7CisgICAg
Ly8gRXZlbnQgaGFuZGxpbmcgbWF5IGhhdmUgZGlzY29ubmVjdGVkIG1fZnJhbWUuCisgICAgaWYg
KCFtX2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBoYW5k
bGVkRXZlbnQgPSBmYWxzZTsKKyNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCisgICAg
V2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gbGF0Y2hlZFNjcm9sbGFibGVBcmVhOworICAgIGlmICht
X2ZyYW1lLnBhZ2UoKS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkubGF0Y2hpbmdBbGxvd3NT
Y3JvbGxpbmdJbkZyYW1lKG1fZnJhbWUsIGxhdGNoZWRTY3JvbGxhYmxlQXJlYSkpIHsKKyAgICAg
ICAgLy8gRklYTUU6IHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKCkgaXMgb25seSBjYWxs
ZWQgZm9yIEZyYW1lVmlldyBzY3JvbGxpbmcsIG5vdCBvdmVyZmxvdyBzY3JvbGxpbmcsIHdoaWNo
IGlzIGNvbmZ1c2luZy4KKyAgICAgICAgaGFuZGxlZEV2ZW50ID0gcHJvY2Vzc1doZWVsRXZlbnRG
b3JTY3JvbGxpbmcoZXZlbnQsIGxhdGNoZWRTY3JvbGxhYmxlQXJlYSk7CisgICAgICAgIHByb2Nl
c3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChldmVudCwgbGF0Y2hlZFNjcm9sbGFibGVBcmVhKTsK
KyAgICB9CisjZW5kaWYKICAgICByZXR1cm4gaGFuZGxlZEV2ZW50OwogfQogCkBAIC0yOTY3LDkg
KzI5NjMsMTAgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyTGF0Y2hlZFN0YXRlKCkKIAogI2lm
IEVOQUJMRShXSEVFTF9FVkVOVF9MQVRDSElORykKICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xs
TGF0Y2hpbmcsIHN0cmVhbSA8PCAiRXZlbnRIYW5kbGVyOjpjbGVhckxhdGNoZWRTdGF0ZSgpIik7
Ci0gICAgcGFnZS0+cmVzZXRMYXRjaGluZ1N0YXRlKCk7CisgICAgaWYgKGF1dG8qIHNjcm9sbExh
dGNoaW5nQ29udHJvbGxlciA9IHBhZ2UtPnNjcm9sbExhdGNoaW5nQ29udHJvbGxlcklmRXhpc3Rz
KCkpCisgICAgICAgIHNjcm9sbExhdGNoaW5nQ29udHJvbGxlci0+cmVtb3ZlTGF0Y2hpbmdTdGF0
ZUZvckZyYW1lKG1fZnJhbWUpOwogI2VuZGlmCi0gICAgaWYgKGF1dG8gZmlsdGVyID0gcGFnZS0+
d2hlZWxFdmVudERlbHRhRmlsdGVyKCkpCisgICAgaWYgKGF1dG8qIGZpbHRlciA9IHBhZ2UtPndo
ZWVsRXZlbnREZWx0YUZpbHRlcigpKQogICAgICAgICBmaWx0ZXItPmVuZEZpbHRlcmluZ0RlbHRh
cygpOwogfQogCkBAIC0yOTc4LDYgKzI5NzUsOSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVs
dFdoZWVsRXZlbnRIYW5kbGVyKE5vZGUqIHN0YXJ0Tm9kZSwgV2hlZWxFdmVudCYgd2hlZWxFdgog
ICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm47CiAgICAgCisgICAgaWYgKCFtX2Zy
YW1lLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byBwcm90ZWN0ZWRGcmFtZSA9
IG1ha2VSZWYobV9mcmFtZSk7CiAKICAgICBGbG9hdFNpemUgZmlsdGVyZWRQbGF0Zm9ybURlbHRh
KHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZKCkpOwpAQCAtMjk4OCwxMCAr
Mjk4OCwyOSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFdoZWVsRXZlbnRIYW5kbGVyKE5v
ZGUqIHN0YXJ0Tm9kZSwgV2hlZWxFdmVudCYgd2hlZWxFdgogICAgIH0KIAogI2lmIEVOQUJMRShX
SEVFTF9FVkVOVF9MQVRDSElORykKLSAgICBpZiAobV9mcmFtZS5wYWdlKCkgJiYgbV9mcmFtZS5w
YWdlKCktPndoZWVsRXZlbnREZWx0YUZpbHRlcigpLT5pc0ZpbHRlcmluZ0RlbHRhcygpKSB7Cisg
ICAgaWYgKG1fZnJhbWUucGFnZSgpLT53aGVlbEV2ZW50RGVsdGFGaWx0ZXIoKS0+aXNGaWx0ZXJp
bmdEZWx0YXMoKSkgewogICAgICAgICBmaWx0ZXJlZFBsYXRmb3JtRGVsdGEgPSBtX2ZyYW1lLnBh
Z2UoKS0+d2hlZWxFdmVudERlbHRhRmlsdGVyKCktPmZpbHRlcmVkRGVsdGEoKTsKICAgICAgICAg
ZmlsdGVyZWRWZWxvY2l0eSA9IG1fZnJhbWUucGFnZSgpLT53aGVlbEV2ZW50RGVsdGFGaWx0ZXIo
KS0+ZmlsdGVyZWRWZWxvY2l0eSgpOwogICAgIH0KKworICAgIFdlYWtQdHI8U2Nyb2xsYWJsZUFy
ZWE+IGxhdGNoZWRTY3JvbGxlcjsKKyAgICBpZiAoIW1fZnJhbWUucGFnZSgpLT5zY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXIoKS5sYXRjaGluZ0FsbG93c1Njcm9sbGluZ0luRnJhbWUobV9mcmFtZSwg
bGF0Y2hlZFNjcm9sbGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxhdGNoZWRTY3Jv
bGxlcikgeworICAgICAgICBpZiAobGF0Y2hlZFNjcm9sbGVyID09IG1fZnJhbWUudmlldygpKSB7
CisgICAgICAgICAgICAvLyBGcmFtZVZpZXcgc2Nyb2xsaW5nIGlzIGhhbmRsZWQgdmlhIHByb2Nl
c3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKCkuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBhdXRvIHBsYXRmb3JtRXZlbnQgPSB3aGVlbEV2ZW50LnVuZGVybHlpbmdQ
bGF0Zm9ybUV2ZW50KCk7CisgICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50KSB7CisgICAgICAgICAg
ICBhdXRvIGNvcGllZEV2ZW50ID0gcGxhdGZvcm1FdmVudC0+Y29weVdpdGhEZWx0YXNBbmRWZWxv
Y2l0eShmaWx0ZXJlZFBsYXRmb3JtRGVsdGEud2lkdGgoKSwgZmlsdGVyZWRQbGF0Zm9ybURlbHRh
LmhlaWdodCgpLCBmaWx0ZXJlZFZlbG9jaXR5KTsKKyAgICAgICAgICAgIGlmIChsYXRjaGVkU2Ny
b2xsZXItPmhhbmRsZVdoZWVsRXZlbnQoY29waWVkRXZlbnQpKQorICAgICAgICAgICAgICAgIHdo
ZWVsRXZlbnQuc2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KICNlbmRpZgogCiAgICAgaWYgKGhhbmRsZVdoZWVsRXZlbnRJbkFwcHJvcHJp
YXRlRW5jbG9zaW5nQm94KHN0YXJ0Tm9kZSwgd2hlZWxFdmVudCwgZmlsdGVyZWRQbGF0Zm9ybURl
bHRhLCBmaWx0ZXJlZFZlbG9jaXR5KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4
IDYxNzkwNWUwMWIxZGRmMGQxZTBjMWQ0ZWViODM0OGU3OWVhYmIyYTEuLjE3MWFlNDdmNzdhNjdi
M2QxMzJmMDRjZTZiZWJiODUzNDRkYzFkZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aApAQCAtNDUxLDEzICs0NTEsMTMgQEAgcHJpdmF0ZToKICAgICBib29sIHBhc3NNb3VzZURvd25F
dmVudFRvV2lkZ2V0KFdpZGdldCopOwogCiAgICAgYm9vbCBwYXNzV2hlZWxFdmVudFRvV2lkZ2V0
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIFdpZGdldCYpOwotICAgIHZvaWQgZGV0ZXJtaW5l
V2hlZWxFdmVudFRhcmdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBIaXRUZXN0
UmVzdWx0JiwgUmVmUHRyPEVsZW1lbnQ+JiBldmVudFRhcmdldCwgUmVmUHRyPENvbnRhaW5lck5v
ZGU+JiBzY3JvbGxhYmxlQ29udGFpbmVyLCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYsIGJvb2wm
IGlzT3ZlcldpZGdldCk7CisgICAgdm9pZCBkZXRlcm1pbmVXaGVlbEV2ZW50VGFyZ2V0KGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYsIFJlZlB0cjxFbGVtZW50PiYgZXZlbnRUYXJnZXQsIFdlYWtQ
dHI8U2Nyb2xsYWJsZUFyZWE+JiwgYm9vbCYgaXNPdmVyV2lkZ2V0KTsKICAgICB2b2lkIHJlY29y
ZFdoZWVsRXZlbnRGb3JEZWx0YUZpbHRlcihjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKLSAg
ICBib29sIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYsIENvbnRhaW5lck5vZGUqIHNjcm9sbGFibGVDb250YWluZXIsIGNvbnN0IFdlYWtQdHI8
U2Nyb2xsYWJsZUFyZWE+Jik7CisgICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGlu
Zyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBXZWFrUHRyPFNjcm9sbGFibGVBcmVh
PiYpOwogICAgIHZvaWQgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYsIGNvbnN0IFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+Jik7Ci0gICAgYm9v
bCBjb21wbGV0ZVdpZGdldFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgY29u
c3QgV2Vha1B0cjxXaWRnZXQ+JiwgY29uc3QgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mLCBDb250
YWluZXJOb2RlKik7CisgICAgYm9vbCBjb21wbGV0ZVdpZGdldFdoZWVsRXZlbnQoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiwgY29uc3QgV2Vha1B0cjxXaWRnZXQ+JiwgY29uc3QgV2Vha1B0cjxT
Y3JvbGxhYmxlQXJlYT4mKTsKIAotICAgIGJvb2wgcGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lk
Z2V0V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBXaWRnZXQmLCBD
b250YWluZXJOb2RlKiBzY3JvbGxhYmxlQ29udGFpbmVyKTsKKyAgICBib29sIHBsYXRmb3JtQ29t
cGxldGVQbGF0Zm9ybVdpZGdldFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jiwg
Y29uc3QgV2lkZ2V0JiwgY29uc3QgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mKTsKIAogICAgIHZv
aWQgZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQmKTsKICAgICB2b2lkIGRl
ZmF1bHRCYWNrc3BhY2VFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCYpOwpAQCAtNTAzLDggKzUw
Myw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhdXRvSGlkZUN1cnNvclRpbWVyRmlyZWQoKTsKICNl
bmRpZgogCi0gICAgdm9pZCBjbGVhck9yU2NoZWR1bGVDbGVhcmluZ0xhdGNoZWRTdGF0ZUlmTmVl
ZGVkKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwotICAgIHZvaWQgY2xlYXJMYXRjaGVkU3Rh
dGVUaW1lckZpcmVkKCk7CiAgICAgdm9pZCBjbGVhckxhdGNoZWRTdGF0ZSgpOwogCiAgICAgYm9v
bCBzaG91bGRTZW5kTW91c2VFdmVudHNUb0luYWN0aXZlV2luZG93cygpIGNvbnN0OwpAQCAtNTM2
LDEwICs1MzQsNiBAQCBwcml2YXRlOgogICAgIFRpbWVyIG1faG92ZXJUaW1lcjsKICAgICBib29s
IG1faGFzU2NoZWR1bGVkQ3Vyc29yVXBkYXRlIHsgZmFsc2UgfTsKIAotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICBUaW1lciBtX2NsZWFyTGF0Y2hpbmdTdGF0ZVRpbWVyOwotI2VuZGlmCi0KICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QXV0b3Njcm9sbENvbnRyb2xsZXI+IG1fYXV0b3Njcm9sbENvbnRyb2xs
ZXI7CiAgICAgYm9vbCBtX21vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbCB7IGZhbHNlIH07CiAg
ICAgYm9vbCBtX21vdXNlRG93bldhc0luU3ViZnJhbWUgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAKaW5kZXggYTc3ODEwYjAyMGJmNWE4ZDg1MjJjYWM4YjI1YjM2OTI1ODgzMjU5Ny4uNTZkYzVk
N2EwODBlZWM5MWIxYjVlZjFiMjhjMDQzZWU2ZDY0NGFhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBA
IC0xMTIsNyArMTEyLDcgQEAKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0RGlzYWxsb3dlZFNjb3BlLmgiCiAjaW5jbHVkZSAiU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIgorI2luY2x1ZGUg
IlNjcm9sbExhdGNoaW5nQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5h
dG9yLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
QEAgLTI4MzgsNyArMjgzOCw3IEBAIHZvaWQgUGFnZTo6c3RhcnRNb25pdG9yaW5nV2hlZWxFdmVu
dHMoYm9vbCBjbGVhckxhdGNoaW5nU3RhdGUpCiAKICNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFU
Q0hJTkcpCiAgICAgaWYgKGNsZWFyTGF0Y2hpbmdTdGF0ZSkKLSAgICAgICAgcmVzZXRMYXRjaGlu
Z1N0YXRlKCk7CisgICAgICAgIHNjcm9sbExhdGNoaW5nQ29udHJvbGxlcigpLmNsZWFyKCk7CiAj
ZW5kaWYKIAogICAgIGlmIChhdXRvKiBmcmFtZVZpZXcgPSBtYWluRnJhbWUoKS52aWV3KCkpIHsK
QEAgLTMxNDEsNDMgKzMxNDEsMTcgQEAgdm9pZCBQYWdlOjphcHBsaWNhdGlvbkRpZEJlY29tZUFj
dGl2ZSgpCiB9CiAKICNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCi1TY3JvbGxMYXRj
aGluZ1N0YXRlKiBQYWdlOjpsYXRjaGluZ1N0YXRlKCkKK1Njcm9sbExhdGNoaW5nQ29udHJvbGxl
ciYgUGFnZTo6c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkKIHsKLSAgICBpZiAobV9sYXRjaGlu
Z1N0YXRlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4g
Jm1fbGF0Y2hpbmdTdGF0ZS5sYXN0KCk7Ci19Ci0KLXZvaWQgUGFnZTo6cHVzaE5ld0xhdGNoaW5n
U3RhdGUoU2Nyb2xsTGF0Y2hpbmdTdGF0ZSYmIHN0YXRlKQotewotICAgIG1fbGF0Y2hpbmdTdGF0
ZS5hcHBlbmQoV1RGTW92ZShzdGF0ZSkpOwotfQotCi12b2lkIFBhZ2U6OnJlc2V0TGF0Y2hpbmdT
dGF0ZSgpCi17Ci0gICAgbV9sYXRjaGluZ1N0YXRlLmNsZWFyKCk7CisgICAgaWYgKCFtX3Njcm9s
bExhdGNoaW5nQ29udHJvbGxlcikKKyAgICAgICAgbV9zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIg
PSBtYWtlVW5pcXVlPFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcj4oKTsKKyAgICAgICAgCisgICAg
cmV0dXJuICptX3Njcm9sbExhdGNoaW5nQ29udHJvbGxlcjsKIH0KIAotdm9pZCBQYWdlOjpwb3BM
YXRjaGluZ1N0YXRlKCkKK1Njcm9sbExhdGNoaW5nQ29udHJvbGxlciogUGFnZTo6c2Nyb2xsTGF0
Y2hpbmdDb250cm9sbGVySWZFeGlzdHMoKQogewotICAgIG1fbGF0Y2hpbmdTdGF0ZS5yZW1vdmVM
YXN0KCk7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwgIlBh
Z2U6OnBvcExhdGNoaW5nU3RhdGUoKSAtIG5ldyBzdGF0ZSAiIDw8IG1fbGF0Y2hpbmdTdGF0ZSk7
Ci19Ci0KLXZvaWQgUGFnZTo6cmVtb3ZlTGF0Y2hpbmdTdGF0ZUZvclRhcmdldChFbGVtZW50JiB0
YXJnZXROb2RlKQotewotICAgIGlmIChtX2xhdGNoaW5nU3RhdGUuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2xhdGNoaW5nU3RhdGUucmVtb3ZlQWxsTWF0Y2hpbmcoWyZ0YXJn
ZXROb2RlXSAoU2Nyb2xsTGF0Y2hpbmdTdGF0ZSYgc3RhdGUpIHsKLSAgICAgICAgYXV0byogd2hl
ZWxFbGVtZW50ID0gc3RhdGUud2hlZWxFdmVudEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKCF3aGVl
bEVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHRh
cmdldE5vZGUuaXNFcXVhbE5vZGUod2hlZWxFbGVtZW50KTsKLSAgICB9KTsKLSAgICBMT0dfV0lU
SF9TVFJFQU0oU2Nyb2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAiUGFnZTo6cmVtb3ZlTGF0Y2hpbmdT
dGF0ZUZvclRhcmdldCgpIC0gbmV3IHN0YXRlICIgPDwgbV9sYXRjaGluZ1N0YXRlKTsKKyAgICBy
ZXR1cm4gbV9zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuZ2V0KCk7CiB9CiAjZW5kaWYgLy8gRU5B
QkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IGJlNDU0MzAwYmJk
MDc1ZDBmODE4Yzk5OWFjYThmMzQ5MWRjOTk2ZDIuLjBhYjJiYjU1MDE5NDBiZDQxZmQxMDAzYjMw
ZTY2YzBlMDcxN2E1YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0xMzEsNyArMTMxLDcgQEAgY2xhc3Mg
UG9pbnRlckxvY2tDb250cm9sbGVyOwogY2xhc3MgUHJvZ3Jlc3NUcmFja2VyOwogY2xhc3MgUmVu
ZGVyT2JqZWN0OwogY2xhc3MgUmVzb3VyY2VVc2FnZU92ZXJsYXk7Ci1jbGFzcyBTY3JvbGxMYXRj
aGluZ1N0YXRlOworY2xhc3MgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOwogY2xhc3MgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I7CiBjbGFzcyBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOwogY2xhc3Mg
U2V0dGluZ3M7CkBAIC00NDgsMTIgKzQ0OCw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5B
QkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQotICAgIFNjcm9sbExhdGNoaW5nU3RhdGUqIGxhdGNo
aW5nU3RhdGUoKTsKLSAgICBjb25zdCBWZWN0b3I8U2Nyb2xsTGF0Y2hpbmdTdGF0ZT4mIGxhdGNo
aW5nU3RhdGVTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbGF0Y2hpbmdTdGF0ZTsgfQotICAgIHZv
aWQgcHVzaE5ld0xhdGNoaW5nU3RhdGUoU2Nyb2xsTGF0Y2hpbmdTdGF0ZSYmKTsKLSAgICB2b2lk
IHBvcExhdGNoaW5nU3RhdGUoKTsKLSAgICB2b2lkIHJlc2V0TGF0Y2hpbmdTdGF0ZSgpOwotICAg
IHZvaWQgcmVtb3ZlTGF0Y2hpbmdTdGF0ZUZvclRhcmdldChFbGVtZW50Jik7CisgICAgU2Nyb2xs
TGF0Y2hpbmdDb250cm9sbGVyJiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKTsKKyAgICBTY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXIqIHNjcm9sbExhdGNoaW5nQ29udHJvbGxlcklmRXhpc3RzKCk7
CiAjZW5kaWYgLy8gRU5BQkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQogCiAjaWYgRU5BQkxFKEFQ
UExFX1BBWSkKQEAgLTEwMzgsNyArMTAzNCw3IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UGVyZm9ybWFuY2VMb2dnaW5nPiBtX3BlcmZvcm1hbmNlTG9nZ2luZzsKICNpZiBFTkFC
TEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCi0gICAgVmVjdG9yPFNjcm9sbExhdGNoaW5nU3RhdGU+
IG1fbGF0Y2hpbmdTdGF0ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsTGF0Y2hpbmdDb250
cm9sbGVyPiBtX3Njcm9sbExhdGNoaW5nQ29udHJvbGxlcjsKICNlbmRpZgogI2lmIFBMQVRGT1JN
KE1BQykgJiYgKEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKSB8fCBFTkFCTEUoVEVMRVBIT05FX05V
TUJFUl9ERVRFQ1RJT04pKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyPiBtX3NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggYzFiZWYxNTMyMDQ5MDdmYThiZjM4MTIxZDAw
YWM5ZDc0YjZmMmVmNC4uM2YyNThmZDg0ZDNjMTk5MDhjODYyMDcxNDNhNDlhZWRmNjdlOTJkMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtNTksNyAr
NTksNyBAQAogI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAjaW1wb3J0ICJT
Y3JlZW5Qcm9wZXJ0aWVzLmgiCiAjaW1wb3J0ICJTY3JvbGxBbmltYXRvci5oIgotI2ltcG9ydCAi
U2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIgorI2ltcG9ydCAiU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVy
LmgiCiAjaW1wb3J0ICJTY3JvbGxhYmxlQXJlYS5oIgogI2ltcG9ydCAiU2Nyb2xsYmFyLmgiCiAj
aW1wb3J0ICJTZXR0aW5ncy5oIgpAQCAtNzg0LDcgKzc4NCw4IEBAIHN0YXRpYyBTY3JvbGxhYmxl
QXJlYSogc2Nyb2xsYWJsZUFyZWFGb3JCb3goUmVuZGVyQm94JiBib3gpCiAKICAgICByZXR1cm4g
Ym94LmxheWVyKCk7CiB9Ci0gICAgCisKKy8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHdyaXR0ZW4g
aW4gdGVybXMgb2YgU2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkuCiBz
dGF0aWMgQ29udGFpbmVyTm9kZSogZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXIoQ29u
dGFpbmVyTm9kZSogbm9kZSwgY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQog
ewogICAgIGF1dG8gYmlhc2VkRGVsdGEgPSBTY3JvbGxDb250cm9sbGVyOjp3aGVlbERlbHRhQmlh
c2luZ1Rvd2FyZHNWZXJ0aWNhbCh3aGVlbEV2ZW50KTsKQEAgLTgxNyw0MCArODE4LDYgQEAgc3Rh
dGljIENvbnRhaW5lck5vZGUqIGZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKENvbnRh
aW5lck5vZGUqIG5vZGUsIGNvbnMKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIGJv
b2wgZGVsdGFJc1ByZWRvbWluYW50bHlWZXJ0aWNhbChmbG9hdCBkZWx0YVgsIGZsb2F0IGRlbHRh
WSkKLXsKLSAgICByZXR1cm4gc3RkOjphYnMoZGVsdGFZKSA+IHN0ZDo6YWJzKGRlbHRhWCk7Ci19
Ci0gICAgCi1zdGF0aWMgYm9vbCBzY3JvbGxlZFRvRWRnZUluRG9taW5hbnREaXJlY3Rpb24oY29u
c3QgQ29udGFpbmVyTm9kZSYgY29udGFpbmVyLCBjb25zdCBTY3JvbGxhYmxlQXJlYSYgYXJlYSwg
ZmxvYXQgZGVsdGFYLCBmbG9hdCBkZWx0YVkpCi17Ci0gICAgaWYgKCFjb250YWluZXIucmVuZGVy
ZXIoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIWFyZWEuY2FuSGF2ZVNjcm9s
bGJhcnMoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUgPSBjb250YWluZXIucmVuZGVyZXIoKS0+c3R5bGUoKTsKLQotICAgIGlmICghZGVsdGFJ
c1ByZWRvbWluYW50bHlWZXJ0aWNhbChkZWx0YVgsIGRlbHRhWSkgJiYgZGVsdGFYKSB7Ci0gICAg
ICAgIGlmIChzdHlsZS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6SGlkZGVuKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKGRlbHRhWCA8IDApCi0gICAgICAgICAgICBy
ZXR1cm4gYXJlYS5zY3JvbGxlZFRvUmlnaHQoKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBh
cmVhLnNjcm9sbGVkVG9MZWZ0KCk7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlLm92ZXJmbG93WSgp
ID09IE92ZXJmbG93OjpIaWRkZW4pCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGRl
bHRhWSA8IDApCi0gICAgICAgIHJldHVybiBhcmVhLnNjcm9sbGVkVG9Cb3R0b20oKTsKLSAgICAK
LSAgICByZXR1cm4gYXJlYS5zY3JvbGxlZFRvVG9wKCk7Ci19Ci0KIHN0YXRpYyBXZWFrUHRyPFNj
cm9sbGFibGVBcmVhPiBzY3JvbGxhYmxlQXJlYUZvckV2ZW50VGFyZ2V0KEVsZW1lbnQqIGV2ZW50
VGFyZ2V0KQogewogICAgIGF1dG8qIHdpZGdldCA9IEV2ZW50SGFuZGxlcjo6d2lkZ2V0Rm9yRXZl
bnRUYXJnZXQoZXZlbnRUYXJnZXQpOwpAQCAtODY5LDQzICs4MzYsNiBAQCBzdGF0aWMgYm9vbCBl
dmVudFRhcmdldElzUGxhdGZvcm1XaWRnZXQoRWxlbWVudCogZXZlbnRUYXJnZXQpCiAgICAgcmV0
dXJuIHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKTsKIH0KIAotc3RhdGljIGJvb2wgbGF0Y2hpbmdJ
c0xvY2tlZFRvUGxhdGZvcm1GcmFtZShjb25zdCBGcmFtZSYgZnJhbWUpCi17Ci0gICAgYXV0byog
cGFnZSA9IGZyYW1lLnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFNjcm9sbExhdGNoaW5nU3RhdGUqIGxhdGNoZWRTdGF0ZSA9IHBhZ2UtPmxhdGNo
aW5nU3RhdGUoKTsKLSAgICBpZiAoIWxhdGNoZWRTdGF0ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGZyYW1lSGFzUGxhdGZvcm1XaWRnZXQoZnJhbWUpICYmICZmcmFtZSAhPSBs
YXRjaGVkU3RhdGUtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBsYXRjaGluZ0lzTG9ja2VkVG9BbmNlc3Rvck9mVGhp
c0ZyYW1lKGNvbnN0IEZyYW1lJiBmcmFtZSkKLXsKLSAgICBhdXRvKiBwYWdlID0gZnJhbWUucGFn
ZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU2Nyb2xs
TGF0Y2hpbmdTdGF0ZSogbGF0Y2hlZFN0YXRlID0gcGFnZS0+bGF0Y2hpbmdTdGF0ZSgpOwotICAg
IGlmICghbGF0Y2hlZFN0YXRlIHx8ICFsYXRjaGVkU3RhdGUtPmZyYW1lKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICgmZnJhbWUgPT0gbGF0Y2hlZFN0YXRlLT5mcmFtZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKEZyYW1lKiBhbmNlc3RvciA9IGZyYW1l
LnRyZWUoKS5wYXJlbnQoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnRyZWUoKS5w
YXJlbnQoKSkgewotICAgICAgICBpZiAoYW5jZXN0b3IgPT0gbGF0Y2hlZFN0YXRlLT5mcmFtZSgp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogc3RhdGljIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+IHNjcm9sbGFibGVBcmVhRm9y
Q29udGFpbmVyTm9kZShDb250YWluZXJOb2RlJiBjb250YWluZXIpCiB7CiAgICAgYXV0byBib3gg
PSBjb250YWluZXIucmVuZGVyQm94KCk7CkBAIC05MTksMTEzICs4NDksMzggQEAgc3RhdGljIFdl
YWtQdHI8U2Nyb2xsYWJsZUFyZWE+IHNjcm9sbGFibGVBcmVhRm9yQ29udGFpbmVyTm9kZShDb250
YWluZXJOb2RlJiBjb24KICAgICByZXR1cm4gbWFrZVdlYWtQdHIoKnNjcm9sbGFibGVBcmVhUHRy
KTsKIH0KIAotc3RhdGljIGJvb2wgbGF0Y2hlZFRvRnJhbWVPckJvZHkoQ29udGFpbmVyTm9kZSYg
Y29udGFpbmVyKQotewotICAgIC8vIEZJWE1FKDEwNjEzMyk6IFdlIG1pZ2h0IG5lZWQgdG8gYWRk
IG9yIHN3aXRjaCB0byBpczxIVE1MRG9jdW1lbnRFbGVtZW50PiB3aGVuIHRoaXMgYnVnIGlzIGZp
eGVkLgotICAgIHJldHVybiBpczxIVE1MRnJhbWVTZXRFbGVtZW50Pihjb250YWluZXIpIHx8IGlz
PEhUTUxCb2R5RWxlbWVudD4oY29udGFpbmVyKTsKLX0KLQotdm9pZCBFdmVudEhhbmRsZXI6OmNs
ZWFyT3JTY2hlZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoIW1fZnJhbWUuaXNNYWluRnJhbWUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gUGxhdGZvcm0gZG9lcyBub3QgcHJvdmlkZSBhbiBpbmRp
Y2F0aW9uIHRoYXQgaXQgd2lsbCBzd2l0Y2ggZnJvbSBub24tbW9tZW50dW0gdG8gbW9tZW50dW0g
c2Nyb2xsaW5nCi0gICAgLy8gd2hlbiBoYW5kbGluZyB3aGVlbCBldmVudHMuCi0gICAgLy8gTG9n
aWMgYmVsb3cgaW5zdGFsbHMgYSB0aW1lciB3aGVuIG5vbi1tb21lbnR1bSBzY3JvbGxpbmcgZW5k
cy4gSWYgbW9tZW50dW0gc2Nyb2xsIGRvZXMgbm90IHN0YXJ0IHdpdGhpbiB0aGF0IGludGVydmFs
LAotICAgIC8vIHJlc2V0IHRoZSBsYXRjaGVkIHN0YXRlLiBJZiBpdCBkb2VzLCBzdG9wIHRoZSB0
aW1lciwgbGVhdmluZyB0aGUgbGF0Y2hlZCBzdGF0ZSB1bnRvdWNoZWQuCi0gICAgaWYgKCFtX2Ns
ZWFyTGF0Y2hpbmdTdGF0ZVRpbWVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgaWYgKGV2ZW50Lmlz
RW5kT2ZOb25Nb21lbnR1bVNjcm9sbCgpKSB7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
U2Nyb2xsTGF0Y2hpbmcsIHN0cmVhbSA8PCAiRXZlbnRIYW5kbGVyOjpjbGVhck9yU2NoZWR1bGVD
bGVhcmluZ0xhdGNoZWRTdGF0ZUlmTmVlZGVkKCkgLSBldmVudCIgPDwgZXZlbnQgPDwgIiwgc2No
ZWR1bGluZyBjbGVhciB0aW1lciIpOwotICAgICAgICAgICAgbV9jbGVhckxhdGNoaW5nU3RhdGVU
aW1lci5zdGFydE9uZVNob3QocmVzZXRMYXRjaGVkU3RhdGVUaW1lb3V0KTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIGFub3RoZXIgd2hlZWwgZXZlbnQgc2Nyb2xsaW5n
IHN0YXJ0cywgc3RvcCB0aGUgdGltZXIgbWFudWFsbHksIGFuZCByZXNldCB0aGUgbGF0Y2hlZCBz
dGF0ZSBpbW1lZGlhdGVseS4KLSAgICAgICAgaWYgKGV2ZW50LnNob3VsZENvbnNpZGVyTGF0Y2hp
bmcoKSkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJl
YW0gPDwgIkV2ZW50SGFuZGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3RhdGVJ
Zk5lZWRlZCgpIC0gZXZlbnQiIDw8IGV2ZW50IDw8ICIsIHRpbWVyIHBlbmRpbmcsIGFub3RoZXIg
c2Nyb2xsIHN0YXJ0aW5nIik7Ci0gICAgICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUu
cGFnZSgpKQotICAgICAgICAgICAgICAgIHBhZ2UtPnJlc2V0TGF0Y2hpbmdTdGF0ZSgpOwotICAg
ICAgICAgICAgbV9jbGVhckxhdGNoaW5nU3RhdGVUaW1lci5zdG9wKCk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoZXZlbnQuaXNUcmFuc2l0aW9uaW5nVG9Nb21lbnR1bVNjcm9sbCgpKSB7Ci0gICAgICAg
ICAgICAvLyBXaGVlbCBldmVudHMgbWFjaGluYXJ5IGlzIHRyYW5zaXRpb25pbmcgdG8gbW9tZW50
dW0gc2Nyb2xsaW5nLCBzbyBubyBuZWVkIHRvIHJlc2V0IGxhdGNoZWQgc3RhdGUuIFN0b3AgdGhl
IHRpbWVyLgotICAgICAgICAgICAgbV9jbGVhckxhdGNoaW5nU3RhdGVUaW1lci5zdG9wKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRXZlbnRIYW5kbGVyOjpkZXRlcm1pbmVXaGVlbEV2
ZW50VGFyZ2V0KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgY29uc3QgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBSZWZQdHI8RWxlbWVudD4mIHdoZWVsRXZlbnRUYXJnZXQsIFJl
ZlB0cjxDb250YWluZXJOb2RlPiYgc2Nyb2xsYWJsZUNvbnRhaW5lciwgV2Vha1B0cjxTY3JvbGxh
YmxlQXJlYT4mIHNjcm9sbGFibGVBcmVhLCBib29sJiBpc092ZXJXaWRnZXQpCit2b2lkIEV2ZW50
SGFuZGxlcjo6ZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmIHdoZWVsRXZlbnQsIFJlZlB0cjxFbGVtZW50PiYgd2hlZWxFdmVudFRhcmdldCwgV2Vha1B0
cjxTY3JvbGxhYmxlQXJlYT4mIHNjcm9sbGFibGVBcmVhLCBib29sJiBpc092ZXJXaWRnZXQpCiB7
Ci0gICAgY2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3RhdGVJZk5lZWRlZCh3aGVlbEV2
ZW50KTsKLQogICAgIGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKTsKICAgICBpZiAoIXBhZ2Up
CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8qIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKTsKLQog
ICAgIGlmICghdmlldykKLSAgICAgICAgc2Nyb2xsYWJsZUNvbnRhaW5lciA9IHdoZWVsRXZlbnRU
YXJnZXQ7CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChldmVudFRhcmdldElzUGxhdGZvcm1X
aWRnZXQod2hlZWxFdmVudFRhcmdldC5nZXQoKSkpCisgICAgICAgIHNjcm9sbGFibGVBcmVhID0g
c2Nyb2xsYWJsZUFyZWFGb3JFdmVudFRhcmdldCh3aGVlbEV2ZW50VGFyZ2V0LmdldCgpKTsKICAg
ICBlbHNlIHsKLSAgICAgICAgaWYgKGV2ZW50VGFyZ2V0SXNQbGF0Zm9ybVdpZGdldCh3aGVlbEV2
ZW50VGFyZ2V0LmdldCgpKSkgewotICAgICAgICAgICAgc2Nyb2xsYWJsZUNvbnRhaW5lciA9IHdo
ZWVsRXZlbnRUYXJnZXQ7Ci0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVB
cmVhRm9yRXZlbnRUYXJnZXQod2hlZWxFdmVudFRhcmdldC5nZXQoKSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBzY3JvbGxhYmxlQ29udGFpbmVyID0gZmluZEVuY2xvc2luZ1Njcm9s
bGFibGVDb250YWluZXIod2hlZWxFdmVudFRhcmdldC5nZXQoKSwgd2hlZWxFdmVudCk7Ci0gICAg
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUNvbnRhaW5lciAmJiAhaXM8SFRNTElGcmFtZUVsZW1lbnQ+
KHdoZWVsRXZlbnRUYXJnZXQpKQotICAgICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gc2Ny
b2xsYWJsZUFyZWFGb3JDb250YWluZXJOb2RlKCpzY3JvbGxhYmxlQ29udGFpbmVyKTsKLSAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaHkgZG9lcyB0aGlzIGFz
c3VtZSB0aGUgYm9keT8gV2hhdCBpZiB3ZSBoaXQgYW4gaWZyYW1lIGluc2lkZSBhbiBvdmVyZmxv
dzpzY3JvbGw/Ci0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUNvbnRhaW5lciA9IHZpZXctPmZy
YW1lKCkuZG9jdW1lbnQoKS0+Ym9keU9yRnJhbWVzZXQoKTsKLSAgICAgICAgICAgICAgICBzY3Jv
bGxhYmxlQXJlYSA9IG1ha2VXZWFrUHRyKHN0YXRpY19jYXN0PFNjcm9sbGFibGVBcmVhJj4oKnZp
ZXcpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9s
bExhdGNoaW5nLCBzdHJlYW0gPDwgIkV2ZW50SGFuZGxlcjo6ZGV0ZXJtaW5lV2hlZWxFdmVudFRh
cmdldCgpIC0gZXZlbnQiIDw8IHdoZWVsRXZlbnQgPDwgIiBmb3VuZCBzY3JvbGxhYmxlQ29udGFp
bmVyIiA8PCBWYWx1ZU9yTnVsbChzY3JvbGxhYmxlQ29udGFpbmVyLmdldCgpKSA8PCAiIHNjcm9s
bGFibGVBcmVhICIgPDwgKHNjcm9sbGFibGVBcmVhID8gc2Nyb2xsYWJsZUFyZWEuZ2V0KCkgOiBu
dWxscHRyKSk7Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUNvbnRhaW5lciA9
IGZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKHdoZWVsRXZlbnRUYXJnZXQuZ2V0KCks
IHdoZWVsRXZlbnQpOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUNvbnRhaW5lcikKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVBcmVhID0gc2Nyb2xsYWJsZUFyZWFGb3JDb250YWluZXJOb2RlKCpzY3Jv
bGxhYmxlQ29udGFpbmVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2Nyb2xsYWJsZUFy
ZWEgPSBtYWtlV2Vha1B0cihzdGF0aWNfY2FzdDxTY3JvbGxhYmxlQXJlYSY+KCp2aWV3KSk7CiAg
ICAgfQogCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwgIkV2
ZW50SGFuZGxlcjo6ZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldCgpIC0gZXZlbnQiIDw8IHdoZWVs
RXZlbnQgPDwgIiBmb3VuZCBzY3JvbGxhYmxlQXJlYSAiIDw8IFZhbHVlT3JOdWxsKHNjcm9sbGFi
bGVBcmVhLmdldCgpKSA8PCAiLCBsYXRjaGluZyBzdGF0ZSBpcyAiIDw8IHBhZ2UtPnNjcm9sbExh
dGNoaW5nQ29udHJvbGxlcigpKTsKKwogICAgIGlmIChzY3JvbGxhYmxlQXJlYSAmJiBwYWdlLT5p
c01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQogICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2Nyb2xs
QW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZS0+d2hlZWxFdmVudFRlc3RN
b25pdG9yKCkpOwogCi0gICAgYXV0byogbGF0Y2hpbmdTdGF0ZSA9IHBhZ2UtPmxhdGNoaW5nU3Rh
dGUoKTsKLSAgICBpZiAod2hlZWxFdmVudC5zaG91bGRDb25zaWRlckxhdGNoaW5nKCkpIHsKLSAg
ICAgICAgaWYgKHNjcm9sbGFibGVDb250YWluZXIgJiYgc2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAg
ICAgICAgIGJvb2wgc3RhcnRpbmdBdFNjcm9sbExpbWl0ID0gc2Nyb2xsZWRUb0VkZ2VJbkRvbWlu
YW50RGlyZWN0aW9uKCpzY3JvbGxhYmxlQ29udGFpbmVyLCAqc2Nyb2xsYWJsZUFyZWEuZ2V0KCks
IHdoZWVsRXZlbnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZKCkpOwotICAgICAgICAgICAg
aWYgKCFzdGFydGluZ0F0U2Nyb2xsTGltaXQpIHsKLSAgICAgICAgICAgICAgICBTY3JvbGxMYXRj
aGluZ1N0YXRlIGxhdGNoaW5nU3RhdGU7Ci0gICAgICAgICAgICAgICAgbGF0Y2hpbmdTdGF0ZS5z
ZXRXaGVlbEV2ZW50RWxlbWVudCh3aGVlbEV2ZW50VGFyZ2V0LmdldCgpKTsKLSAgICAgICAgICAg
ICAgICBsYXRjaGluZ1N0YXRlLnNldEZyYW1lKCZtX2ZyYW1lKTsKLSAgICAgICAgICAgICAgICBs
YXRjaGluZ1N0YXRlLnNldFNjcm9sbGFibGVDb250YWluZXIoc2Nyb2xsYWJsZUNvbnRhaW5lci5n
ZXQoKSk7Ci0gICAgICAgICAgICAgICAgbGF0Y2hpbmdTdGF0ZS5zZXRXaWRnZXRJc0xhdGNoZWQo
cmVzdWx0LmlzT3ZlcldpZGdldCgpKTsKLSAgICAgICAgICAgICAgICBwYWdlLT5wdXNoTmV3TGF0
Y2hpbmdTdGF0ZShXVEZNb3ZlKGxhdGNoaW5nU3RhdGUpKTsKLQotICAgICAgICAgICAgICAgIHBh
Z2UtPndoZWVsRXZlbnREZWx0YUZpbHRlcigpLT5iZWdpbkZpbHRlcmluZ0RlbHRhcygpOwotICAg
ICAgICAgICAgICAgIGlzT3ZlcldpZGdldCA9IHJlc3VsdC5pc092ZXJXaWRnZXQoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBz
dHJlYW0gPDwgIkV2ZW50SGFuZGxlcjo6ZGV0ZXJtaW5lV2hlZWxFdmVudFRhcmdldCgpIC0gY29u
c2lkZXJpbmcgbGF0Y2hpbmcgZm9yICIgPDwgd2hlZWxFdmVudCA8PCAiLCBhdCBzY3JvbGwgbGlt
aXQgIiA8PCBzdGFydGluZ0F0U2Nyb2xsTGltaXQgPDwgIiwgbGF0Y2hpbmcgc3RhdGUgIiA8PCBw
YWdlLT5sYXRjaGluZ1N0YXRlU3RhY2soKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHdo
ZWVsRXZlbnQuc2hvdWxkUmVzZXRMYXRjaGluZygpKSB7Ci0gICAgICAgIGNsZWFyTGF0Y2hlZFN0
YXRlKCk7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8
ICJFdmVudEhhbmRsZXI6OmRldGVybWluZVdoZWVsRXZlbnRUYXJnZXQoKSAtIHJlc2V0IGxhdGNo
aW5nIGZvciBldmVudCAiIDw8IHdoZWVsRXZlbnQgPDwgIiBsYXRjaGluZyBzdGF0ZSAiIDw8IHBh
Z2UtPmxhdGNoaW5nU3RhdGVTdGFjaygpKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBj
YW4gdXNlIGEgc3RhbGUgbGFjaGluZyBzdGF0ZSwgYmVmb3JlIHdlIGp1c3QgcHVzaGVkIG9yIGNs
ZWFyZWQuCi0gICAgaWYgKCF3aGVlbEV2ZW50LnNob3VsZFJlc2V0TGF0Y2hpbmcoKSAmJiBsYXRj
aGluZ1N0YXRlICYmIGxhdGNoaW5nU3RhdGUtPndoZWVsRXZlbnRFbGVtZW50KCkpIHsKLSAgICAg
ICAgaWYgKGxhdGNoaW5nSXNMb2NrZWRUb1BsYXRmb3JtRnJhbWUobV9mcmFtZSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGxhdGNoaW5nSXNMb2NrZWRUb0FuY2VzdG9yT2ZU
aGlzRnJhbWUobV9mcmFtZSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKHdoZWVsRXZl
bnQuc2hvdWxkUmVzZXRMYXRjaGluZygpIHx8IHdoZWVsRXZlbnQuaXNOb25HZXN0dXJlRXZlbnQo
KSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHdoZWVsRXZlbnRUYXJnZXQgPSBsYXRjaGlu
Z1N0YXRlLT53aGVlbEV2ZW50RWxlbWVudCgpOwotICAgICAgICBpc092ZXJXaWRnZXQgPSBsYXRj
aGluZ1N0YXRlLT53aWRnZXRJc0xhdGNoZWQoKTsKLSAgICAgICAgc2Nyb2xsYWJsZUNvbnRhaW5l
ciA9IGxhdGNoaW5nU3RhdGUtPnNjcm9sbGFibGVDb250YWluZXIoKTsKKyAgICBpZiAobV9mcmFt
ZS5pc01haW5GcmFtZSgpICYmIHdoZWVsRXZlbnQuaXNHZXN0dXJlU3RhcnQoKSkKKyAgICAgICAg
cGFnZS0+d2hlZWxFdmVudERlbHRhRmlsdGVyKCktPmJlZ2luRmlsdGVyaW5nRGVsdGFzKCk7CiAK
LSAgICAgICAgaWYgKHNjcm9sbGFibGVDb250YWluZXIpIHsKLSAgICAgICAgICAgIGlmICghbGF0
Y2hlZFRvRnJhbWVPckJvZHkoKnNjcm9sbGFibGVDb250YWluZXIpICYmICFsYXRjaGluZ1N0YXRl
LT53aWRnZXRJc0xhdGNoZWQoKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHNj
cm9sbGFibGVBcmVhRm9yQ29udGFpbmVyTm9kZSgqc2Nyb2xsYWJsZUNvbnRhaW5lcik7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgcGFnZS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCkudXBkYXRl
QW5kRmV0Y2hMYXRjaGluZ1N0YXRlRm9yRnJhbWUobV9mcmFtZSwgd2hlZWxFdmVudCwgd2hlZWxF
dmVudFRhcmdldCwgc2Nyb2xsYWJsZUFyZWEsIGlzT3ZlcldpZGdldCk7CiB9CiAKIHZvaWQgRXZl
bnRIYW5kbGVyOjpyZWNvcmRXaGVlbEV2ZW50Rm9yRGVsdGFGaWx0ZXIoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50KQpAQCAtMTA0Nyw1NCArOTAyLDQ3IEBAIHZvaWQgRXZlbnRI
YW5kbGVyOjpyZWNvcmRXaGVlbEV2ZW50Rm9yRGVsdGFGaWx0ZXIoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiB3aGVlCiAgICAgcGFnZS0+d2hlZWxFdmVudERlbHRhRmlsdGVyKCktPnVwZGF0ZUZy
b21EZWx0YShGbG9hdFNpemUod2hlZWxFdmVudC5kZWx0YVgoKSwgd2hlZWxFdmVudC5kZWx0YVko
KSkpOwogfQogCi1zdGF0aWMgRnJhbWVWaWV3KiBmcmFtZVZpZXdGb3JMYXRjaGluZ1N0YXRlKEZy
YW1lJiBmcmFtZSwgY29uc3QgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSYgbGF0Y2hpbmdTdGF0ZSkKK2Jv
b2wgRXZlbnRIYW5kbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIGNvbnN0IFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+
JiBzY3JvbGxhYmxlQXJlYSkKIHsKLSAgICBpZiAobGF0Y2hpbmdJc0xvY2tlZFRvUGxhdGZvcm1G
cmFtZShmcmFtZSkpCi0gICAgICAgIHJldHVybiBmcmFtZS52aWV3KCk7Ci0KLSAgICByZXR1cm4g
bGF0Y2hpbmdTdGF0ZS5mcmFtZSgpID8gbGF0Y2hpbmdTdGF0ZS5mcmFtZSgpLT52aWV3KCkgOiBm
cmFtZS52aWV3KCk7Ci19CisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJl
YW0gPDwgIkV2ZW50SGFuZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcgIiA8PCB3
aGVlbEV2ZW50IDw8ICIgLSBzY3JvbGxhYmxlQXJlYSAiIDw8IFZhbHVlT3JOdWxsKHNjcm9sbGFi
bGVBcmVhLmdldCgpKSA8PCAiIHVzZSBsYXRjaGVkIGVsZW1lbnQgIiA8PCB3aGVlbEV2ZW50LnVz
ZUxhdGNoZWRFdmVudEVsZW1lbnQoKSk7CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpwcm9jZXNzV2hl
ZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQs
IENvbnRhaW5lck5vZGUqIHNjcm9sbGFibGVDb250YWluZXIsIGNvbnN0IFdlYWtQdHI8U2Nyb2xs
YWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSkKLXsKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xs
TGF0Y2hpbmcsIHN0cmVhbSA8PCAiRXZlbnRIYW5kbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNj
cm9sbGluZyAiIDw8IHdoZWVsRXZlbnQgPDwgIiAtIHNjcm9sbGFibGVDb250YWluZXIgIiA8PCBz
Y3JvbGxhYmxlQ29udGFpbmVyIDw8ICIgc2Nyb2xsYWJsZUFyZWEgIiA8PCBzY3JvbGxhYmxlQXJl
YS5nZXQoKSA8PCAiIHVzZSBsYXRjaGVkIGVsZW1lbnQgIiA8PCB3aGVlbEV2ZW50LnVzZUxhdGNo
ZWRFdmVudEVsZW1lbnQoKSk7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBDbGVhbiB1cCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoKSBhbmQgdGhl
biB0dXJuIHRoaXMgaW50byBhbiBlYXJseSByZXR1cm4uCisgICAgICAgIFdlYWtQdHI8U2Nyb2xs
YWJsZUFyZWE+IGxhdGNoZWRTY3JvbGxhYmxlQXJlYTsKKyAgICAgICAgQVNTRVJUKG1fZnJhbWUu
cGFnZSgpLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKS5sYXRjaGluZ0FsbG93c1Njcm9sbGlu
Z0luRnJhbWUobV9mcmFtZSwgbGF0Y2hlZFNjcm9sbGFibGVBcmVhKSk7CisgICAgfQorI2VuZGlm
CiAKICAgICBSZWY8RnJhbWU+IHByb3RlY3RlZEZyYW1lKG1fZnJhbWUpOwogCisgICAgaWYgKCFt
X2ZyYW1lLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgRnJhbWVWaWV3KiB2
aWV3ID0gbV9mcmFtZS52aWV3KCk7CiAgICAgLy8gV2UgZG8gYW5vdGhlciBjaGVjayBvbiB0aGUg
ZnJhbWUgdmlldyBiZWNhdXNlIHRoZSBldmVudCBoYW5kbGVyIGNhbiBydW4gSlMgd2hpY2ggcmVz
dWx0cyBpbiB0aGUgZnJhbWUgZ2V0dGluZyBkZXN0cm95ZWQuCiAgICAgaWYgKCF2aWV3KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBhdXRvKiBsYXRjaGluZ1N0YXRlID0gbV9m
cmFtZS5wYWdlKCkgPyBtX2ZyYW1lLnBhZ2UoKS0+bGF0Y2hpbmdTdGF0ZSgpIDogbnVsbHB0cjsK
LQotICAgIGlmICh3aGVlbEV2ZW50LnVzZUxhdGNoZWRFdmVudEVsZW1lbnQoKSAmJiAhbGF0Y2hp
bmdJc0xvY2tlZFRvQW5jZXN0b3JPZlRoaXNGcmFtZShtX2ZyYW1lKSAmJiBsYXRjaGluZ1N0YXRl
ICYmIGxhdGNoaW5nU3RhdGUtPnNjcm9sbGFibGVDb250YWluZXIoKSkgeworICAgIC8vIFdlIGhh
bmRsZSBub24tdmlldyBzY3JvbGxhYmxlQXJlYXMgZWxzZXdoZXJlLgorICAgIGlmICh3aGVlbEV2
ZW50LnVzZUxhdGNoZWRFdmVudEVsZW1lbnQoKSAmJiBzY3JvbGxhYmxlQXJlYSkgewogICAgICAg
ICBtX2lzSGFuZGxpbmdXaGVlbEV2ZW50ID0gZmFsc2U7CiAKLSAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwgIiAgbGF0Y2hpbmcgc3RhdGUgIiA8PCAqbGF0
Y2hpbmdTdGF0ZSk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3Ry
ZWFtIDw8ICIgIGxhdGNoaW5nIHN0YXRlICIgPDwgbV9mcmFtZS5wYWdlKCktPnNjcm9sbExhdGNo
aW5nQ29udHJvbGxlcigpKTsKIAotICAgICAgICAvLyBXZWJLaXQyIGNvZGUgcGF0aAotICAgICAg
ICBpZiAoIWZyYW1lSGFzUGxhdGZvcm1XaWRnZXQobV9mcmFtZSkgJiYgc2Nyb2xsYWJsZUNvbnRh
aW5lciA9PSBsYXRjaGluZ1N0YXRlLT5zY3JvbGxhYmxlQ29udGFpbmVyKCkgJiYgc2Nyb2xsYWJs
ZUFyZWEgJiYgdmlldyAhPSBzY3JvbGxhYmxlQXJlYSkgewotICAgICAgICAgICAgLy8gSWYgd2Ug
ZGlkIG5vdCBzdGFydCBhdCB0aGUgc2Nyb2xsIGxpbWl0LCBkbyBub3QgcGFzcyB0aGUgZXZlbnQg
b24gdG8gYmUgaGFuZGxlZCBieSBlbmNsb3Npbmcgc2Nyb2xsYWJsZSByZWdpb25zLgotICAgICAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJFdmVudEhhbmRsZXIg
IiA8PCB0aGlzIDw8ICIgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxpbmcgLSBsYXRjaGVkIHRv
ICIgPDwgc2Nyb2xsYWJsZUFyZWEuZ2V0KCkgPDwgIiBhbmQgbm90IHByb3BhZ2F0aW5nIik7Cisg
ICAgICAgIGlmICghZnJhbWVIYXNQbGF0Zm9ybVdpZGdldChtX2ZyYW1lKSAmJiBzY3JvbGxhYmxl
QXJlYSAhPSB2aWV3KSB7CisgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBz
dHJlYW0gPDwgIiAgbGF0Y2hlZCB0byBub24tdmlldyBzY3JvbGxlciAiIDw8IHNjcm9sbGFibGVB
cmVhIDw8ICIgYW5kIG5vdCBwcm9wYWdhdGluZyIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KIAotICAgICAgICAvLyBGSVhNRTogVGhpcyBzZXQgJ3ZpZXcnIHRvIGEgRnJh
bWVWaWV3IHRoYXQgaXMgbm90IHRoaXMgRXZlbnRIYW5kbGVyJ3MgRnJhbWVWaWV3LCB3aGljaCB0
aGVuIGdldHMgc2Nyb2xsZWQgZnJvbSBoZXJlLCB3aGljaCBpcyB3cm9uZy4KLSAgICAgICAgdmll
dyA9IGZyYW1lVmlld0ZvckxhdGNoaW5nU3RhdGUobV9mcmFtZSwgKmxhdGNoaW5nU3RhdGUpOwot
ICAgICAgICBBU1NFUlQodmlldyk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRj
aGluZywgc3RyZWFtIDw8ICIgc2VuZGluZyB0byB2aWV3ICIgPDwgKnZpZXcpOwogCiAgICAgICAg
IGJvb2wgZGlkSGFuZGxlV2hlZWxFdmVudCA9IHZpZXctPndoZWVsRXZlbnQod2hlZWxFdmVudCk7
Ci0gICAgICAgIGlmIChzY3JvbGxhYmxlQ29udGFpbmVyID09IGxhdGNoaW5nU3RhdGUtPnNjcm9s
bGFibGVDb250YWluZXIoKSkgewotICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGp1c3Qgc3RhcnRp
bmcgYSBzY3JvbGwgZXZlbnQsIGFuZCBoYXZlIG5vd2hlcmUgbGVmdCB0byBzY3JvbGwsIGFsbG93
Ci0gICAgICAgICAgICAvLyB0aGUgZW5jbG9zaW5nIGZyYW1lIHRvIGhhbmRsZSB0aGUgc2Nyb2xs
LgotICAgICAgICAgICAgZGlkSGFuZGxlV2hlZWxFdmVudCA9IHRydWU7Ci0gICAgICAgIH0KLQog
ICAgICAgICAvLyBJZiB0aGUgcGxhdGZvcm0gd2lkZ2V0IGlzIGhhbmRsaW5nIHRoZSBldmVudCwg
d2UgYWx3YXlzIHdhbnQgdG8gcmV0dXJuIGZhbHNlLgotICAgICAgICBpZiAoc2Nyb2xsYWJsZUFy
ZWEgPT0gdmlldyAmJiB2aWV3LT5wbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICBpZiAodmlldy0+
cGxhdGZvcm1XaWRnZXQoKSkKICAgICAgICAgICAgIGRpZEhhbmRsZVdoZWVsRXZlbnQgPSBmYWxz
ZTsKLSAgICAgICAgCisKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBz
dHJlYW0gPDwgIiAgRXZlbnRIYW5kbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZyBy
ZXR1cm5pbmcgIiA8PCBkaWRIYW5kbGVXaGVlbEV2ZW50KTsKICAgICAgICAgcmV0dXJuIGRpZEhh
bmRsZVdoZWVsRXZlbnQ7CiAgICAgfQogICAgIApAQCAtMTEwMywyMCArOTUxLDIwIEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmIHdoZWVsCiAgICAgcmV0dXJuIGRpZEhhbmRsZUV2ZW50OwogfQogCi1ib29s
IEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIGNvbnN0IFdpZGdldCYgd2lkZ2V0
LCBDb250YWluZXJOb2RlKiBzY3JvbGxhYmxlQ29udGFpbmVyKQorYm9vbCBFdmVudEhhbmRsZXI6
OnBsYXRmb3JtQ29tcGxldGVQbGF0Zm9ybVdpZGdldFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBjb25zdCBXaWRnZXQmIHdpZGdldCwgY29uc3QgV2Vha1B0
cjxTY3JvbGxhYmxlQXJlYT4mIHNjcm9sbGFibGVBcmVhKQogewogICAgIC8vIFdlYktpdDE6IFBy
ZXZlbnQgbXVsdGlwbGUgY29waWVzIG9mIHRoZSBzY3JvbGxXaGVlbCBldmVudCBmcm9tIGJlaW5n
IHNlbnQgdG8gdGhlIE5TU2Nyb2xsVmlldyB3aWRnZXQuCiAgICAgaWYgKGZyYW1lSGFzUGxhdGZv
cm1XaWRnZXQobV9mcmFtZSkgJiYgd2lkZ2V0LmlzRnJhbWVWaWV3KCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgY29uc3QgYXV0byogbGF0Y2hpbmdTdGF0ZSA9IG1fZnJhbWUucGFnZSgp
ID8gbV9mcmFtZS5wYWdlKCktPmxhdGNoaW5nU3RhdGUoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFs
YXRjaGluZ1N0YXRlKQorICAgIGlmICghbV9mcmFtZS5wYWdlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmICh3aGVlbEV2ZW50LnVzZUxhdGNoZWRFdmVudEVsZW1lbnQoKSAmJiBs
YXRjaGluZ1N0YXRlLT5zY3JvbGxhYmxlQ29udGFpbmVyKCkgJiYgc2Nyb2xsYWJsZUNvbnRhaW5l
ciA9PSBsYXRjaGluZ1N0YXRlLT5zY3JvbGxhYmxlQ29udGFpbmVyKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOworICAgIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+IGxhdGNoZWRTY3JvbGxhYmxlQXJl
YTsKKyAgICBpZiAoIW1fZnJhbWUucGFnZSgpLT5zY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKS5s
YXRjaGluZ0FsbG93c1Njcm9sbGluZ0luRnJhbWUobV9mcmFtZSwgbGF0Y2hlZFNjcm9sbGFibGVB
cmVhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiB3aGVlbEV2ZW50LnVzZUxhdGNoZWRFdmVudEVsZW1lbnQoKSAmJiBsYXRjaGVkU2Nyb2xs
YWJsZUFyZWEgJiYgc2Nyb2xsYWJsZUFyZWEgPT0gbGF0Y2hlZFNjcm9sbGFibGVBcmVhOwogfQog
CiB2b2lkIEV2ZW50SGFuZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgY29uc3QgV2Vha1B0cjxTY3JvbGxhYmxl
QXJlYT4mIHNjcm9sbGFibGVBcmVhKQpAQCAtMTEyOSw3ICs5NzcsNyBAQCB2b2lkIEV2ZW50SGFu
ZGxlcjo6cHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYgd2hlZQogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQotICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBzY3JvbGxhYmxlQXJl
YS0+ZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRv
ciA9IHNjcm9sbGFibGVBcmVhLT5leGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCiAgICAgICAgIHNj
cm9sbEFuaW1hdG9yLT5wcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAod2hlZWxFdmVudCk7
CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbExhdGNoaW5nQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzZTgxMDgwNDAxN2Vm
MDc4ZjZmNjlhMzVhYWU5NDQ2Y2UyMmI2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCkBAIC0wLDAg
KzEsMjY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNj
cm9sbExhdGNoaW5nQ29udHJvbGxlci5oIgorCisjaWYgRU5BQkxFKFdIRUVMX0VWRU5UX0xBVENI
SU5HKQorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVu
dC5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNlZSBhbHNvIFNjcm9sbFRy
ZWVMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCitzdGF0aWMgY29uc3QgU2Vjb25kcyByZXNldExhdGNo
ZWRTdGF0ZVRpbWVvdXQgeyAxMDBfbXMgfTsKKworU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpT
Y3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIoKQorICAgIDogbV9jbGVhckxhdGNoaW5nU3RhdGVUaW1l
cigqdGhpcywgJlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Y2xlYXJUaW1lckZpcmVkKQorewor
fQorCitTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6On5TY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIo
KSA9IGRlZmF1bHQ7CisKK3ZvaWQgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpjbGVhcigpCit7
CisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwgIlNjcm9sbExh
dGNoaW5nQ29udHJvbGxlcjo6Y2xlYXIoKSIpOworICAgIG1fY3VtdWxhdGl2ZUV2ZW50RGVsdGEg
PSB7IH07CisgICAgbV9mcmFtZVN0YXRlU3RhY2suY2xlYXIoKTsKK30KKworLy8gRklYTUU6IFRo
aXMgbG9naWMgaXMgZGlmZmVyZW50IGZybW8gU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxl
ciwgd2hpY2ggc2ltcGx5IGxldHMgdGhlIGxhdGNoaW5nIHN0YXRlIGVsYXBzZSBhZnRlciAxMDBt
cy4KK3ZvaWQgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcklm
TmVlZGVkKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICBpZiAo
d2hlZWxFdmVudC5zaG91bGRSZXNldExhdGNoaW5nKCkgfHwgd2hlZWxFdmVudC5pc05vbkdlc3R1
cmVFdmVudCgpKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OmNsZWFy
T3JTY2hlZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQoKSAtIGV2ZW50IiA8PCB3aGVl
bEV2ZW50IDw8ICIsIHJlc2V0dGluZyBsYXRjaGluZyIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKG1fY2xlYXJMYXRjaGluZ1N0YXRlVGltZXIuaXNBY3RpdmUoKSkgeworICAg
ICAgICAvLyBJZiBhbm90aGVyIHdoZWVsIGV2ZW50IHNjcm9sbGluZyBzdGFydHMsIHN0b3AgdGhl
IHRpbWVyIG1hbnVhbGx5LCBhbmQgcmVzZXQgdGhlIGxhdGNoZWQgc3RhdGUgaW1tZWRpYXRlbHku
CisgICAgICAgIGlmICh3aGVlbEV2ZW50LmlzR2VzdHVyZVN0YXJ0KCkpIHsKKyAgICAgICAgICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxMYXRjaGluZywgc3RyZWFtIDw8ICJTY3JvbGxMYXRjaGlu
Z0NvbnRyb2xsZXI6OmNsZWFyT3JTY2hlZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQo
KSAtIGV2ZW50IiA8PCB3aGVlbEV2ZW50IDw8ICIsIHRpbWVyIHBlbmRpbmcsIGFub3RoZXIgc2Ny
b2xsIHN0YXJ0aW5nIik7CisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgbV9jbGVh
ckxhdGNoaW5nU3RhdGVUaW1lci5zdG9wKCk7CisgICAgICAgIH0gZWxzZSBpZiAod2hlZWxFdmVu
dC5pc1RyYW5zaXRpb25pbmdUb01vbWVudHVtU2Nyb2xsKCkpIHsKKyAgICAgICAgICAgIC8vIFdo
ZWVsIGV2ZW50cyBtYWNoaW5lcnkgaXMgdHJhbnNpdGlvbmluZyB0byBtb21lbnR1bSBzY3JvbGxp
bmcsIHNvIG5vIG5lZWQgdG8gcmVzZXQgbGF0Y2hlZCBzdGF0ZS4gU3RvcCB0aGUgdGltZXIuCisg
ICAgICAgICAgICBtX2NsZWFyTGF0Y2hpbmdTdGF0ZVRpbWVyLnN0b3AoKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHdoZWVsRXZlbnQuaXNFbmRPZk5vbk1v
bWVudHVtU2Nyb2xsKCkpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5n
LCBzdHJlYW0gPDwgIlNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xl
YXJpbmdMYXRjaGVkU3RhdGVJZk5lZWRlZCgpIC0gZXZlbnQiIDw8IHdoZWVsRXZlbnQgPDwgIiwg
c2NoZWR1bGluZyBjbGVhciB0aW1lciIpOworICAgICAgICBtX2NsZWFyTGF0Y2hpbmdTdGF0ZVRp
bWVyLnN0YXJ0T25lU2hvdChyZXNldExhdGNoZWRTdGF0ZVRpbWVvdXQpOworICAgIH0KK30KKwor
dm9pZCBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OmNsZWFyVGltZXJGaXJlZCgpCit7CisgICAg
TE9HX1dJVEhfU1RSRUFNKFNjcm9sbExhdGNoaW5nLCBzdHJlYW0gPDwgIlNjcm9sbExhdGNoaW5n
Q29udHJvbGxlcjo6Y2xlYXJUaW1lckZpcmVkKCkgLSBjbGVhcmluZyBzdGF0ZSIpOworICAgIGNs
ZWFyKCk7Cit9CisKK3ZvaWQgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpyZWNlaXZlZFdoZWVs
RXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIGNsZWFy
T3JTY2hlZHVsZUNsZWFySWZOZWVkZWQod2hlZWxFdmVudCk7CisKKyAgICBpZiAod2hlZWxFdmVu
dC5pc0dlc3R1cmVTdGFydCgpIHx8IHdoZWVsRXZlbnQuaXNOb25HZXN0dXJlRXZlbnQoKSkKKyAg
ICAgICAgbV9jdW11bGF0aXZlRXZlbnREZWx0YSA9IHdoZWVsRXZlbnQuZGVsdGEoKTsKKyAgICBl
bHNlCisgICAgICAgIG1fY3VtdWxhdGl2ZUV2ZW50RGVsdGEgKz0gd2hlZWxFdmVudC5kZWx0YSgp
OworfQorCitib29sIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6bGF0Y2hpbmdBbGxvd3NTY3Jv
bGxpbmdJbkZyYW1lKGNvbnN0IEZyYW1lJiBmcmFtZSwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4m
IGxhdGNoZWRTY3JvbGxlcikgY29uc3QKK3sKKyAgICBpZiAobV9mcmFtZVN0YXRlU3RhY2suaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChhdXRvKiBmcmFtZVN0YXRl
ID0gc3RhdGVGb3JGcmFtZShmcmFtZSkpIHsKKyAgICAgICAgbGF0Y2hlZFNjcm9sbGVyID0gZnJh
bWVTdGF0ZS0+c2Nyb2xsYWJsZUFyZWE7CisgICAgICAgIHJldHVybiAhIWZyYW1lU3RhdGUtPnNj
cm9sbGFibGVBcmVhOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU2Nyb2xs
TGF0Y2hpbmdDb250cm9sbGVyOjp1cGRhdGVBbmRGZXRjaExhdGNoaW5nU3RhdGVGb3JGcmFtZShG
cmFtZSYgZnJhbWUsIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgUmVmUHRy
PEVsZW1lbnQ+JiBsYXRjaGVkRWxlbWVudCwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mIHNjcm9s
bGFibGVBcmVhLCBib29sJiBpc092ZXJXaWRnZXQpCit7CisgICAgaWYgKHdoZWVsRXZlbnQuaXNH
ZXN0dXJlU3RhcnQoKSkgeworICAgICAgICAvLyBXZSBjYW4gaGF2ZSBleGlzdGluZyBzdGF0ZSBo
ZXJlIGJlY2F1c2Ugc3RhdGUgaXMgY2xlYXJlZCBvbiBhIHRpbWVyLgorICAgICAgICBpZiAoIWhh
c1N0YXRlRm9yRnJhbWUoZnJhbWUpKSB7CisgICAgICAgICAgICBGcmFtZVN0YXRlIHN0YXRlOwor
ICAgICAgICAgICAgc3RhdGUuZnJhbWUgPSAmZnJhbWU7CisgICAgICAgICAgICBzdGF0ZS53aGVl
bEV2ZW50RWxlbWVudCA9IG1ha2VXZWFrUHRyKGxhdGNoZWRFbGVtZW50LmdldCgpKTsKKyAgICAg
ICAgICAgIGlmIChzaG91bGRMYXRjaFRvU2Nyb2xsYWJsZUFyZWEoZnJhbWUsIHNjcm9sbGFibGVB
cmVhLmdldCgpLCBtX2N1bXVsYXRpdmVFdmVudERlbHRhKSkKKyAgICAgICAgICAgICAgICBzdGF0
ZS5zY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhOworICAgICAgICAgICAgc3RhdGUuaXNP
dmVyV2lkZ2V0ID0gaXNPdmVyV2lkZ2V0OworCisgICAgICAgICAgICBtX2ZyYW1lU3RhdGVTdGFj
ay5hcHBlbmQoV1RGTW92ZShzdGF0ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKHdoZWVsRXZlbnQuaXNHZXN0dXJlQ29udGludWF0aW9uKCkpIHsK
KyAgICAgICAgYXV0byogc3RhdGUgPSBzdGF0ZUZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgaWYg
KCFzdGF0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBXZSBtYXkgbm90IGhh
dmUgbGF0Y2hlZCBhdCBnZXN0dXJlIHN0YXJ0IGJlY2F1c2Ugb2Ygc21hbGwgZGVsdGFzLiBSZS1l
dmFsdWF0ZSBsYXRjaGluZyBiYXNlZCBvbiBhY2N1bXVsYXRlZCBkZWx0YS4KKyAgICAgICAgaWYg
KCFzdGF0ZS0+c2Nyb2xsYWJsZUFyZWEgJiYgc2hvdWxkTGF0Y2hUb1Njcm9sbGFibGVBcmVhKGZy
YW1lLCBzY3JvbGxhYmxlQXJlYS5nZXQoKSwgbV9jdW11bGF0aXZlRXZlbnREZWx0YSkpCisgICAg
ICAgICAgICBzdGF0ZS0+c2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYTsKKyAgICB9CisK
KyAgICBpZiAoIXdoZWVsRXZlbnQudXNlTGF0Y2hlZEV2ZW50RWxlbWVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRlIDogbV9mcmFtZVN0YXRlU3RhY2sp
IHsKKyAgICAgICAgaWYgKHN0YXRlLmZyYW1lID09ICZmcmFtZSkgeworICAgICAgICAgICAgbGF0
Y2hlZEVsZW1lbnQgPSBzdGF0ZS53aGVlbEV2ZW50RWxlbWVudC5nZXQoKTsKKyAgICAgICAgICAg
IHNjcm9sbGFibGVBcmVhID0gc3RhdGUuc2Nyb2xsYWJsZUFyZWE7CisgICAgICAgICAgICBpc092
ZXJXaWRnZXQgPSBzdGF0ZS5pc092ZXJXaWRnZXQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpyZW1vdmVMYXRjaGluZ1N0YXRlRm9yVGFyZ2V0
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYgKG1fZnJhbWVTdGF0ZVN0YWNrLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBmaW5kUmVzdWx0ID0gbV9mcmFt
ZVN0YXRlU3RhY2suZmluZE1hdGNoaW5nKFsmZWxlbWVudF0gKGNvbnN0IGF1dG8mIHN0YXRlKSB7
CisgICAgICAgIGF1dG8qIHdoZWVsRWxlbWVudCA9IHN0YXRlLndoZWVsRXZlbnRFbGVtZW50Lmdl
dCgpOworICAgICAgICByZXR1cm4gd2hlZWxFbGVtZW50ICYmIGVsZW1lbnQuaXNFcXVhbE5vZGUo
d2hlZWxFbGVtZW50KTsKKyAgICB9KTsKKyAgICAKKyAgICAvLyBJZiB0aGlzIGVsZW1lbnQgaXMg
Zm91bmQgaW4gdGhlIGxhdGNoaW5nIHN0YWNrLCBqdXN0IGNsZWFyIHRoZSB3aG9sZSBzdGFjay4g
V2UgY2FuJ3QganVzdCByZW1vdmUgb25lIGVudHJ5LAorICAgIC8vIHNpbmNlIHRoZSBzdGFjayBo
YXMgdG8gbWF0Y2ggdGhlIGZyYW1lIGhpZXJhcmNoeS4KKyAgICBpZiAoZmluZFJlc3VsdCAhPSBu
b3RGb3VuZCkKKyAgICAgICAgbV9mcmFtZVN0YXRlU3RhY2suY2xlYXIoKTsKK30KKwordm9pZCBT
Y3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OnJlbW92ZUxhdGNoaW5nU3RhdGVGb3JGcmFtZShjb25z
dCBGcmFtZSYgZnJhbWUpCit7CisgICAgaWYgKG1fZnJhbWVTdGF0ZVN0YWNrLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlIGZyYW1lIHdhcyBpbiB0aGUgbGF0Y2hp
bmcgc3RhY2ssIGp1c3QgY2xlYXIgc3RhdGUuCisgICAgaWYgKGF1dG8qIGZyYW1lU3RhdGUgPSBz
dGF0ZUZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAgY2xlYXIoKTsKK30KKworc3RhdGljIGJvb2wg
ZGVsdGFJc1ByZWRvbWluYW50bHlWZXJ0aWNhbChGbG9hdFNpemUgZGVsdGEpCit7CisgICAgcmV0
dXJuIHN0ZDo6YWJzKGRlbHRhLmhlaWdodCgpKSA+IHN0ZDo6YWJzKGRlbHRhLndpZHRoKCkpOwor
fQorCitib29sIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6c2hvdWxkTGF0Y2hUb1Njcm9sbGFi
bGVBcmVhKGNvbnN0IEZyYW1lJiBmcmFtZSwgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
LCBGbG9hdFNpemUgc2Nyb2xsRGVsdGEpIGNvbnN0Cit7CisgICAgaWYgKCFzY3JvbGxhYmxlQXJl
YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgYWx3YXlzIGFsbG93IHRoZSBt
YWluIGZyYW1lIHJlY2VpdmUgd2hlZWwgZXZlbnRzIHRvIHBlcm1pdCBydWJiZXItYmFuZGluZy4K
KyAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSAmJiBzY3JvbGxhYmxlQXJlYSA9PSBmcmFtZS52
aWV3KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKCFzY3JvbGxhYmxlQXJlYS0+
Y2FuSGF2ZVNjcm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNj
cm9sbERlbHRhLmlzWmVybygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRl
bHRhSXNQcmVkb21pbmFudGx5VmVydGljYWwoc2Nyb2xsRGVsdGEpICYmIHNjcm9sbERlbHRhLndp
ZHRoKCkpIHsKKyAgICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJh
cigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChzY3JvbGxEZWx0
YS53aWR0aCgpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAhc2Nyb2xsYWJsZUFyZWEtPnNjcm9s
bGVkVG9SaWdodCgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuICFzY3JvbGxhYmxlQXJlYS0+
c2Nyb2xsZWRUb0xlZnQoKTsKKyAgICB9CisKKyAgICBpZiAoIXNjcm9sbGFibGVBcmVhLT52ZXJ0
aWNhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc2Nyb2xs
RGVsdGEuaGVpZ2h0KCkgPCAwKQorICAgICAgICByZXR1cm4gIXNjcm9sbGFibGVBcmVhLT5zY3Jv
bGxlZFRvQm90dG9tKCk7CisKKyAgICByZXR1cm4gIXNjcm9sbGFibGVBcmVhLT5zY3JvbGxlZFRv
VG9wKCk7Cit9CisKK2Jvb2wgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyOjpoYXNTdGF0ZUZvckZy
YW1lKGNvbnN0IEZyYW1lJiBmcmFtZSkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0
YXRlIDogbV9mcmFtZVN0YXRlU3RhY2spIHsKKyAgICAgICAgaWYgKHN0YXRlLmZyYW1lID09ICZm
cmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK1Njcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6RnJhbWVTdGF0ZSogU2Nyb2xsTGF0Y2hp
bmdDb250cm9sbGVyOjpzdGF0ZUZvckZyYW1lKGNvbnN0IEZyYW1lJiBmcmFtZSkKK3sKKyAgICBm
b3IgKGF1dG8mIHN0YXRlIDogbV9mcmFtZVN0YXRlU3RhY2spIHsKKyAgICAgICAgaWYgKHN0YXRl
LmZyYW1lID09ICZmcmFtZSkKKyAgICAgICAgICAgIHJldHVybiAmc3RhdGU7CisgICAgfQorICAg
IHJldHVybiBudWxscHRyOworfQorCitjb25zdCBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OkZy
YW1lU3RhdGUqIFNjcm9sbExhdGNoaW5nQ29udHJvbGxlcjo6c3RhdGVGb3JGcmFtZShjb25zdCBG
cmFtZSYgZnJhbWUpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0ZSA6IG1fZnJh
bWVTdGF0ZVN0YWNrKSB7CisgICAgICAgIGlmIChzdGF0ZS5mcmFtZSA9PSAmZnJhbWUpCisgICAg
ICAgICAgICByZXR1cm4gJnN0YXRlOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
dm9pZCBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXI6OmR1bXAoV1RGOjpUZXh0U3RyZWFtJiB0cykg
Y29uc3QKK3sKKyAgICBUZXh0U3RyZWFtIG11bHRpbGluZVN0cmVhbTsKKyAgICBtdWx0aWxpbmVT
dHJlYW0uc2V0SW5kZW50KHRzLmluZGVudCgpICsgMik7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHN0YXRlIDogbV9mcmFtZVN0YXRlU3RhY2spIHsKKyAgICAgICAgVGV4dFN0cmVhbTo6R3JvdXBT
Y29wZSBncm91cFNjb3BlKG11bHRpbGluZVN0cmVhbSk7CisgICAgICAgIG11bHRpbGluZVN0cmVh
bS5kdW1wUHJvcGVydHkoImZyYW1lIiwgVmFsdWVPck51bGwoc3RhdGUuZnJhbWUpKTsKKyAgICAg
ICAgbXVsdGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgiZWxlbWVudCIsIFZhbHVlT3JOdWxsKHN0
YXRlLndoZWVsRXZlbnRFbGVtZW50LmdldCgpKSk7CisgICAgICAgIG11bHRpbGluZVN0cmVhbS5k
dW1wUHJvcGVydHkoInNjcm9sbGFibGUgYXJlYSIsIFZhbHVlT3JOdWxsKHN0YXRlLnNjcm9sbGFi
bGVBcmVhLmdldCgpKSk7CisgICAgICAgIG11bHRpbGluZVN0cmVhbS5kdW1wUHJvcGVydHkoImlz
IG92ZXIgd2lkZ2V0Iiwgc3RhdGUuaXNPdmVyV2lkZ2V0KTsKKyAgICB9CisKKyAgICB0cyA8PCAi
U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyIHN0YXRlICIgPDwgbXVsdGlsaW5lU3RyZWFtLnJlbGVh
c2UoKTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyJiBjb250cm9sbGVyKQoreworICAgIGNvbnRyb2xsZXIu
ZHVtcCh0cyk7CisgICAgcmV0dXJuIHRzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nQ29udHJvbGxlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmMzNTg4OGVjNWVkNGQ2ZTBjYmEyNGRhMTEzZjYyNGVhYjk4MzMzMzIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGlu
Z0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorI2lu
Y2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CisKKyNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCisKK25hbWVzcGFj
ZSBXVEYgeworY2xhc3MgVGV4dFN0cmVhbTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBFbGVtZW50OworY2xhc3MgRnJhbWU7CitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7Citj
bGFzcyBTY3JvbGxhYmxlQXJlYTsKKworY2xhc3MgU2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyIHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTY3JvbGxMYXRjaGlu
Z0NvbnRyb2xsZXIoKTsKKyAgICB+U2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVyKCk7CisKKyAgICB2
b2lkIGNsZWFyKCk7CisKKyAgICB2b2lkIHJlY2VpdmVkV2hlZWxFdmVudChjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmKTsKKyAgICBGbG9hdFNpemUgY3VtdWxhdGl2ZUV2ZW50RGVsdGEoKSBjb25z
dCB7IHJldHVybiBtX2N1bXVsYXRpdmVFdmVudERlbHRhOyB9CisKKyAgICAvLyBGcmFtZSBjb250
YWluaW5nIGxhdGNoZWQgc2Nyb2xsZXIgKG1heSBiZSB0aGUgZnJhbWUgb3Igc29tZSBzdWItc2Ny
b2xsZXIpLgorICAgIEZyYW1lKiBsYXRjaGVkRnJhbWUoKSBjb25zdDsKKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiBubyBmcmFtZSBpcyBsYXRjaGVkLCBvciBsYXRjaGluZyBpcyBpbiB0aGUgZ2l2
ZW4gZnJhbWUgKGluIHdoaWNoIGNhc2UgbGF0Y2hlZFNjcm9sbGVyIHdpbGwgYmUgbm9uLW51bGwp
LgorICAgIGJvb2wgbGF0Y2hpbmdBbGxvd3NTY3JvbGxpbmdJbkZyYW1lKGNvbnN0IEZyYW1lJiwg
V2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mIGxhdGNoZWRTY3JvbGxlcikgY29uc3Q7CisKKyAgICB2
b2lkIHVwZGF0ZUFuZEZldGNoTGF0Y2hpbmdTdGF0ZUZvckZyYW1lKEZyYW1lJiwgY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiwgUmVmUHRyPEVsZW1lbnQ+JiBsYXRjaGVkRWxlbWVudCwgV2Vha1B0
cjxTY3JvbGxhYmxlQXJlYT4mLCBib29sJiBpc092ZXJXaWRnZXQpOworCisgICAgdm9pZCByZW1v
dmVMYXRjaGluZ1N0YXRlRm9yVGFyZ2V0KGNvbnN0IEVsZW1lbnQmKTsKKyAgICB2b2lkIHJlbW92
ZUxhdGNoaW5nU3RhdGVGb3JGcmFtZShjb25zdCBGcmFtZSYpOworCisgICAgdm9pZCBkdW1wKFdU
Rjo6VGV4dFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHN0cnVjdCBGcmFtZVN0YXRl
IHsKKyAgICAgICAgV2Vha1B0cjxFbGVtZW50PiB3aGVlbEV2ZW50RWxlbWVudDsKKyAgICAgICAg
V2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFyZWE7CisgICAgICAgIEZyYW1lKiBm
cmFtZSB7IG51bGxwdHIgfTsgLy8gSWNreSByYXcgcG9pbnRlci4gVXNlIEZyYW1lSWRlbnRpZmll
cj8KKyAgICAgICAgYm9vbCBpc092ZXJXaWRnZXQgeyBmYWxzZSB9OworICAgIH07CisKKyAgICB2
b2lkIGNsZWFyT3JTY2hlZHVsZUNsZWFySWZOZWVkZWQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
Jik7CisgICAgdm9pZCBjbGVhclRpbWVyRmlyZWQoKTsKKworICAgIGJvb2wgaGFzU3RhdGVGb3JG
cmFtZShjb25zdCBGcmFtZSYpIGNvbnN0OworICAgIEZyYW1lU3RhdGUqIHN0YXRlRm9yRnJhbWUo
Y29uc3QgRnJhbWUmKTsKKyAgICBjb25zdCBGcmFtZVN0YXRlKiBzdGF0ZUZvckZyYW1lKGNvbnN0
IEZyYW1lJikgY29uc3Q7CisKKyAgICBib29sIHNob3VsZExhdGNoVG9TY3JvbGxhYmxlQXJlYShj
b25zdCBGcmFtZSYsIFNjcm9sbGFibGVBcmVhKiwgRmxvYXRTaXplKSBjb25zdDsKKworICAgIEZs
b2F0U2l6ZSBtX2N1bXVsYXRpdmVFdmVudERlbHRhOworICAgIFZlY3RvcjxGcmFtZVN0YXRlPiBt
X2ZyYW1lU3RhdGVTdGFjazsKKyAgICBUaW1lciBtX2NsZWFyTGF0Y2hpbmdTdGF0ZVRpbWVyOwor
fTsKKworV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0
IFNjcm9sbExhdGNoaW5nQ29udHJvbGxlciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0hFRUxfRVZFTlRfTEFUQ0hJTkcpCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbExhdGNoaW5nU3RhdGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2M2FjNGU3ZmI0NTg2NWFlZTRiYzEzMDJiYjg5ZmM0
MjVmZWEzM2UuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbExh
dGNoaW5nU3RhdGUuaCIKLQotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU2Nyb2xsTGF0Y2hpbmdT
dGF0ZTo6U2Nyb2xsTGF0Y2hpbmdTdGF0ZSgpID0gZGVmYXVsdDsKLSAgICAKLVNjcm9sbExhdGNo
aW5nU3RhdGU6On5TY3JvbGxMYXRjaGluZ1N0YXRlKCkgPSBkZWZhdWx0OwotCi12b2lkIFNjcm9s
bExhdGNoaW5nU3RhdGU6OmNsZWFyKCkKLXsKLSAgICBtX3doZWVsRXZlbnRFbGVtZW50ID0gbnVs
bHB0cjsKLSAgICBtX2ZyYW1lID0gbnVsbHB0cjsKLSAgICBtX3Njcm9sbGFibGVDb250YWluZXIg
PSBudWxscHRyOwotICAgIG1fd2lkZ2V0SXNMYXRjaGVkID0gZmFsc2U7Ci19Ci0KLXZvaWQgU2Ny
b2xsTGF0Y2hpbmdTdGF0ZTo6c2V0V2hlZWxFdmVudEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkK
LXsKLSAgICBtX3doZWVsRXZlbnRFbGVtZW50ID0gbWFrZVdlYWtQdHIoZWxlbWVudCk7Ci19Ci0K
LXZvaWQgU2Nyb2xsTGF0Y2hpbmdTdGF0ZTo6c2V0V2lkZ2V0SXNMYXRjaGVkKGJvb2wgaXNPdmVy
V2lkZ2V0KQotewotICAgIG1fd2lkZ2V0SXNMYXRjaGVkID0gaXNPdmVyV2lkZ2V0OwotfQotCi12
b2lkIFNjcm9sbExhdGNoaW5nU3RhdGU6OnNldFNjcm9sbGFibGVDb250YWluZXIoQ29udGFpbmVy
Tm9kZSogY29udGFpbmVyKQotewotICAgIG1fc2Nyb2xsYWJsZUNvbnRhaW5lciA9IG1ha2VXZWFr
UHRyKGNvbnRhaW5lcik7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNjcm9sbExhdGNoaW5nU3RhdGUmIHN0YXRlKQotewotICAgIFRleHRTdHJlYW0g
bXVsdGlsaW5lU3RyZWFtOwotICAgIG11bHRpbGluZVN0cmVhbS5zZXRJbmRlbnQodHMuaW5kZW50
KCkgKyAyKTsKLQotICAgIG11bHRpbGluZVN0cmVhbS5kdW1wUHJvcGVydHkoImVsZW1lbnQiLCBz
dGF0ZS53aGVlbEV2ZW50RWxlbWVudCgpKTsKLSAgICBtdWx0aWxpbmVTdHJlYW0uZHVtcFByb3Bl
cnR5KCJzY3JvbGxhYmxlIGNvbnRhaW5lciIsIHN0YXRlLnNjcm9sbGFibGVDb250YWluZXIoKSk7
Ci0gICAgbXVsdGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgid2lkZ2V0SXNMYXRjaGVkIiwgc3Rh
dGUud2lkZ2V0SXNMYXRjaGVkKCkpOwotCi0gICAgdHMgPDwgIlNjcm9sbExhdGNoaW5nU3RhdGUg
IiA8PCBtdWx0aWxpbmVTdHJlYW0ucmVsZWFzZSgpOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGlu
Z1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0
YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMWI5N2RhMDNkYTI3ZDRlZDRh
ZTgxOGEwYTQ0MjIwMzgxODU3NmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsTGF0Y2hpbmdT
dGF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBUZXh0U3RyZWFtOwotfQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbnRhaW5lck5vZGU7Ci1jbGFzcyBFbGVtZW50
OwotY2xhc3MgRnJhbWU7Ci0KLWNsYXNzIFNjcm9sbExhdGNoaW5nU3RhdGUgZmluYWwgewotcHVi
bGljOgotICAgIFNjcm9sbExhdGNoaW5nU3RhdGUoKTsKLSAgICB+U2Nyb2xsTGF0Y2hpbmdTdGF0
ZSgpOwotCi0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgRWxlbWVudCogd2hlZWxFdmVudEVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX3doZWVsRXZlbnRFbGVtZW50LmdldCgpOyB9Ci0gICAgdm9p
ZCBzZXRXaGVlbEV2ZW50RWxlbWVudChFbGVtZW50Kik7Ci0KLSAgICBGcmFtZSogZnJhbWUoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lOyB9Ci0gICAgdm9pZCBzZXRGcmFtZShGcmFtZSogZnJhbWUp
IHsgbV9mcmFtZSA9IGZyYW1lOyB9Ci0KLSAgICBib29sIHdpZGdldElzTGF0Y2hlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fd2lkZ2V0SXNMYXRjaGVkOyB9Ci0gICAgdm9pZCBzZXRXaWRnZXRJc0xhdGNo
ZWQoYm9vbCBpc092ZXJXaWRnZXQpOwotCi0gICAgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNv
bnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYWJsZUNvbnRhaW5lci5nZXQoKTsgfQot
ICAgIHZvaWQgc2V0U2Nyb2xsYWJsZUNvbnRhaW5lcihDb250YWluZXJOb2RlKik7Ci0KLXByaXZh
dGU6Ci0gICAgV2Vha1B0cjxFbGVtZW50PiBtX3doZWVsRXZlbnRFbGVtZW50OwotICAgIFdlYWtQ
dHI8Q29udGFpbmVyTm9kZT4gbV9zY3JvbGxhYmxlQ29udGFpbmVyOwotCi0gICAgRnJhbWUqIG1f
ZnJhbWUgeyBudWxscHRyIH07Ci0KLSAgICBib29sIG1fd2lkZ2V0SXNMYXRjaGVkIHsgZmFsc2Ug
fTsKLX07Ci0KLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBj
b25zdCBTY3JvbGxMYXRjaGluZ1N0YXRlJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVMYXRj
aGluZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlci5jcHAKaW5kZXggNTEyMWYxMzVkYzhlY2ZkM2Y2MmJi
ZmNiY2U4ZjIzNmFmZjlkYTY1Mi4uMTdmNjAzYWJmNzM5ZjJhNDEwNzhlZDJhZWYwZjUxYjI3MmZh
NjkyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZUxhdGNoaW5nQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlci5jcHAKQEAgLTM2LDcgKzM2LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBTZWUgYWxzbyBFdmVudEhhbmRsZXJNYWMu
Y3BwCisvLyBTZWUgYWxzbyBTY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIuY3BwCiBzdGF0aWMgY29u
c3QgU2Vjb25kcyByZXNldExhdGNoZWRTdGF0ZVRpbWVvdXQgeyAxMDBfbXMgfTsKIAogU2Nyb2xs
aW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlcjo6U2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxl
cigpID0gZGVmYXVsdDsKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlTGF0Y2hp
bmdDb250cm9sbGVyOjpyZWNlaXZlZFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW4K
ICAgICAgICAgcmV0dXJuOwogCiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sYXRjaGVkTm9kZU11
dGV4KTsKLSAgICBpZiAod2hlZWxFdmVudC5zaG91bGRDb25zaWRlckxhdGNoaW5nKCkgJiYgbV9s
YXRjaGVkTm9kZUlEICYmICFsYXRjaGVkTm9kZUlzUmVsZXZhbnQoKSkgeworICAgIGlmICh3aGVl
bEV2ZW50LmlzR2VzdHVyZVN0YXJ0KCkgJiYgbV9sYXRjaGVkTm9kZUlEICYmICFsYXRjaGVkTm9k
ZUlzUmVsZXZhbnQoKSkgewogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsTGF0Y2hpbmcs
IHN0cmVhbSA8PCAiU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlciAiIDw8IHRoaXMgPDwg
IiByZWNlaXZlZFdoZWVsRXZlbnQgLSAiIDw8IChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fbGFz
dExhdGNoZWROb2RlSW50ZXJhdGlvblRpbWUpLm1pbGxpc2Vjb25kcygpIDw8ICJtcyBzaW5jZSBs
YXN0IGV2ZW50LCBjbGVhcmluZyBsYXRjaGVkIG5vZGUiKTsKICAgICAgICAgbV9sYXRjaGVkTm9k
ZUlELnJlc2V0KCk7CiAgICAgfQpAQCAtODcsNyArODcsNyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVM
YXRjaGluZ0NvbnRyb2xsZXI6Om5vZGVEaWRIYW5kbGVFdmVudChTY3JvbGxpbmdOb2RlSUQgc2Ny
b2xsaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHdoZWVsRXZlbnQuZGVsdGEo
KS5pc1plcm8oKSB8fCAhd2hlZWxFdmVudC5zaG91bGRDb25zaWRlckxhdGNoaW5nKCkpCisgICAg
aWYgKHdoZWVsRXZlbnQuZGVsdGEoKS5pc1plcm8oKSB8fCAhd2hlZWxFdmVudC5pc0dlc3R1cmVT
dGFydCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsTGF0
Y2hpbmcsIHN0cmVhbSA8PCAiU2Nyb2xsaW5nVHJlZUxhdGNoaW5nQ29udHJvbGxlciAiIDw8IHRo
aXMgPDwgIiBub2RlRGlkSGFuZGxlRXZlbnQ6IGxhdGNoaW5nIHRvICIgPDwgc2Nyb2xsaW5nTm9k
ZUlEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVk
U2Nyb2xsaW5nVHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRl
ZFNjcm9sbGluZ1RyZWUuY3BwCmluZGV4IGE1YWVkMmUwYWE4ZDgzZDVkY2E4OTgxMTFjMWYxMzdm
NmM2MGRmYTMuLjY2ZWQxZjczNmMyN2U4NzZkYWE2ZjUyNGE4N2MwYmVhMGUwMWFlMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJl
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxp
bmdUcmVlLmNwcApAQCAtNjMsNiArNjMsNyBAQCBXaGVlbEV2ZW50SGFuZGxpbmdSZXN1bHQgVGhy
ZWFkZWRTY3JvbGxpbmdUcmVlOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtVwogCiBi
b29sIFRocmVhZGVkU2Nyb2xsaW5nVHJlZTo6aGFuZGxlV2hlZWxFdmVudEFmdGVyTWFpblRocmVh
ZChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFNjcm9sbGluZ05vZGVJRCB0
YXJnZXROb2RlSUQpCiB7CisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8
ICJUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OmhhbmRsZVdoZWVsRXZlbnRBZnRlck1haW5UaHJlYWQg
IiA8PCB3aGVlbEV2ZW50KTsKICAgICBTZXRGb3JTY29wZTxib29sPiBkaXNhbGxvd0xhdGNoaW5n
U2NvcGUobV9hbGxvd0xhdGNoaW5nLCBmYWxzZSk7CiAKICAgICBSZWZQdHI8U2Nyb2xsaW5nVHJl
ZU5vZGU+IHRhcmdldE5vZGUgPSBub2RlRm9ySUQodGFyZ2V0Tm9kZUlEKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZURlbGVnYXRlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KaW5kZXggMDI4NTRjY2JhNjE3
NDc5MDgwYzhlYzY4MjEyYmVjYzVmYjNmYWQ0YS4uYThjZTY5YWNmYmFjZDA5NDJlZmY0Zjk2YTQz
MDcxMjQyMDY1MjMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVs
ZWdhdGVNYWMubW0KQEAgLTE2NywxMiArMTY3LDYgQEAgYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZURlbGVnYXRlTWFjOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKIAogLy8g
RklYTUU6IFdlIHNob3VsZCBmaW5kIGEgd2F5IHRvIHNoYXJlIHNvbWUgb2YgdGhlIGNvZGUgZnJv
bSBuZXdHZXN0dXJlSXNTdGFydGluZygpLCBpc0FscmVhZHlQaW5uZWRJbkRpcmVjdGlvbk9mR2Vz
dHVyZSgpLAogLy8gYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCksIGFuZCBhbGxvd3NIb3Jpem9u
dGFsU3RyZXRjaGluZygpIHdpdGggdGhlIGltcGxlbWVudGF0aW9uIGluIFNjcm9sbEFuaW1hdG9y
TWFjLgotLy8gVGhpcyBpcyBhbHNvIHRoZSBzYW1lIGFzIFBsYXRmb3JtV2hlZWxFdmVudDo6c2hv
dWxkQ29uc2lkZXJMYXRjaGluZygpLgotc3RhdGljIGJvb2wgbmV3R2VzdHVyZUlzU3RhcnRpbmco
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIHJldHVybiB3aGVl
bEV2ZW50LnBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VNYXlCZWdpbiB8fCB3aGVl
bEV2ZW50LnBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbjsKLX0KLQogYm9v
bCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlTWFjOjppc0FscmVhZHlQaW5uZWRJ
bkRpcmVjdGlvbk9mR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQs
IFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAogewogICAgIGF1dG8gc2Nyb2xsUG9zaXRpb24g
PSBjdXJyZW50U2Nyb2xsUG9zaXRpb24oKTsKQEAgLTIwMCw3ICsxOTQsNyBAQCBib29sIFNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGVNYWM6OmFsbG93c0hvcml6b250YWxTdHJldGNo
aW5nKGNvbnN0IFBsYQogICAgIHN3aXRjaCAoaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKSkg
ewogICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzogewogICAgICAgICBib29sIHNj
cm9sbGJhcnNBbGxvd1N0cmV0Y2hpbmcgPSBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcigp
IHx8ICFoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICAgICAgYm9vbCBldmVudFBy
ZXZlbnRzU3RyZXRjaGluZyA9IG5ld0dlc3R1cmVJc1N0YXJ0aW5nKHdoZWVsRXZlbnQpICYmIGlz
QWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50
QXhpczo6SG9yaXpvbnRhbCk7CisgICAgICAgIGJvb2wgZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmcg
PSB3aGVlbEV2ZW50LmlzR2VzdHVyZVN0YXJ0KCkgJiYgaXNBbHJlYWR5UGlubmVkSW5EaXJlY3Rp
b25PZkdlc3R1cmUod2hlZWxFdmVudCwgU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKTsKICAg
ICAgICAgcmV0dXJuIHNjcm9sbGJhcnNBbGxvd1N0cmV0Y2hpbmcgJiYgIWV2ZW50UHJldmVudHNT
dHJldGNoaW5nOwogICAgIH0KICAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgpAQCAtMjIy
LDcgKzIxNiw3IEBAIGJvb2wgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZU1hYzo6
YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmCiAgICAgc3dpdGNoICh2ZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkoKSkgewogICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRp
YzogewogICAgICAgICBib29sIHNjcm9sbGJhcnNBbGxvd1N0cmV0Y2hpbmcgPSBoYXNFbmFibGVk
VmVydGljYWxTY3JvbGxiYXIoKSB8fCAhaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoKTsK
LSAgICAgICAgYm9vbCBldmVudFByZXZlbnRzU3RyZXRjaGluZyA9IG5ld0dlc3R1cmVJc1N0YXJ0
aW5nKHdoZWVsRXZlbnQpICYmIGlzQWxyZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKHdo
ZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpOworICAgICAgICBib29sIGV2ZW50
UHJldmVudHNTdHJldGNoaW5nID0gd2hlZWxFdmVudC5pc0dlc3R1cmVTdGFydCgpICYmIGlzQWxy
ZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKHdoZWVsRXZlbnQsIFNjcm9sbEV2ZW50QXhp
czo6VmVydGljYWwpOwogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyc0FsbG93U3RyZXRjaGluZyAm
JiAhZXZlbnRQcmV2ZW50c1N0cmV0Y2hpbmc7CiAgICAgfQogICAgIGNhc2UgU2Nyb2xsRWxhc3Rp
Y2l0eU5vbmU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdo
ZWVsRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5o
CmluZGV4IDJjZTA2MGUzMzY1OWY2ZWZkM2Q0MGY5YzIxOThkNDVhN2IyNzE1M2UuLjkyZTBlMjZl
MDZmMmNmNjNjZDBmZjE5ZWY0NzBhMGI2ZWJkNWQyNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCkBAIC0xNTEsOCArMTUxLDEwIEBAIHB1YmxpYzoK
IAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAgICAgYm9vbCB1c2VMYXRjaGVkRXZlbnRF
bGVtZW50KCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRDb25zaWRlckxhdGNoaW5nKCkgY29uc3Q7
CisgICAgYm9vbCBpc0dlc3R1cmVTdGFydCgpIGNvbnN0OworICAgIGJvb2wgaXNHZXN0dXJlQ29u
dGludWF0aW9uKCkgY29uc3Q7IC8vIFRoZSBmaW5nZXJzLWRvd24gcGFydCBvZiB0aGUgZ2VzdHVy
ZS4KICAgICBib29sIHNob3VsZFJlc2V0TGF0Y2hpbmcoKSBjb25zdDsKKyAgICBib29sIGlzTm9u
R2VzdHVyZUV2ZW50KCkgY29uc3Q7CiAgICAgYm9vbCBpc0VuZE9mTW9tZW50dW1TY3JvbGwoKSBj
b25zdDsKICNlbHNlCiAgICAgYm9vbCB1c2VMYXRjaGVkRXZlbnRFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KQEAgLTIxMCwxNSArMjEyLDI0IEBAIGlubGluZSBib29sIFBsYXRmb3Jt
V2hlZWxFdmVudDo6dXNlTGF0Y2hlZEV2ZW50RWxlbWVudCgpIGNvbnN0CiAgICAgICAgIHx8ICht
X3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQgJiYgbV9tb21lbnR1bVBoYXNl
ID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSk7CiB9CiAKLWlubGluZSBib29sIFBsYXRm
b3JtV2hlZWxFdmVudDo6c2hvdWxkQ29uc2lkZXJMYXRjaGluZygpIGNvbnN0CitpbmxpbmUgYm9v
bCBQbGF0Zm9ybVdoZWVsRXZlbnQ6OmlzR2VzdHVyZVN0YXJ0KCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgZGlzYWxsb3cgbGF0Y2hpbmcgaWYgdGhlIGRlbHRhIGlzIHplcm8u
CiAgICAgcmV0dXJuIG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbiB8fCBt
X3BoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTWF5QmVnaW47CiB9CiAKK2lubGluZSBi
b29sIFBsYXRmb3JtV2hlZWxFdmVudDo6aXNHZXN0dXJlQ29udGludWF0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ7Cit9
CisKIGlubGluZSBib29sIFBsYXRmb3JtV2hlZWxFdmVudDo6c2hvdWxkUmVzZXRMYXRjaGluZygp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VD
YW5jZWxsZWQgfHwgbV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU1heUJlZ2luIHx8
IGlzRW5kT2ZNb21lbnR1bVNjcm9sbCgpOworICAgIHJldHVybiBtX3BoYXNlID09IFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlQ2FuY2VsbGVkIHx8IG1fcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VNYXlCZWdpbiB8fCAobV9waGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUg
JiYgbV9tb21lbnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkgfHwgaXNF
bmRPZk1vbWVudHVtU2Nyb2xsKCk7Cit9CisKK2lubGluZSBib29sIFBsYXRmb3JtV2hlZWxFdmVu
dDo6aXNOb25HZXN0dXJlRXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3BoYXNlID09IFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSAmJiBtX21vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2VOb25lOwogfQogCiBpbmxpbmUgYm9vbCBQbGF0Zm9ybVdoZWVsRXZlbnQ6
OmlzRW5kT2ZNb21lbnR1bVNjcm9sbCgpIGNvbnN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZTUxMTU3YzU5ODg3MTlmMzcy
ZTA4YWJiZGU3NWQzZWQzZjJkMTJiOC4uMDRiNDcyMTkxOWZlNzU4MTgwOGQ5ZGI0MGU4YzNlMTEz
M2FhMjcwOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIwLTA4LTI5ICBTaW1vbiBGcmFzZXIg
IDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJld3JpdGUgbWFpbiB0aHJlYWQg
c2Nyb2xsIGxhdGNoaW5nIGxvZ2ljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTU5NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgYSB0ZXN0IGZvciBpZnJhbWUgdW5wYXJlbnRpbmcgaW4gdGhlIG1p
ZGRsZSBvZiBhIGxhdGNoZWQgc2Nyb2xsLgorCisgICAgICAgICogZmFzdC9zY3JvbGxpbmcvbGF0
Y2hpbmcvbGF0Y2hlZC1zY3JvbGwtcmVtb3ZlLWlmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3Njcm9sbGluZy9sYXRjaGluZy9zY3JvbGwtbmVzdGVkLWlmcmFtZS5odG1sOiAxMDAw
bXMgLT4gMG1zCisgICAgICAgICogZmFzdC9zY3JvbGxpbmcvbWFjL3J1YmJlcmJhbmQtb3ZlcmZs
b3ctaW4td2hlZWwtcmVnaW9uLmh0bWw6IFRlc3QgbmVlZHMgdG8gbGF0Y2ggdGhlIG92ZXJmbG93
IGJ5IHNjcm9sbGluZyBkb3duIHRoZW4gdXAuCisKKzIwMjAtMDgtMTggIFNpbW9uIEZyYXNlciAg
PHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUnViYmVyYmFuZGluZyBpbiBhbiBv
dmVyZmxvdzpzY3JvbGwgY2FuIHRyaWdnZXIgcGFnZSBqaWdnbGVzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU2MjkKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzY3Mjk1Nzk3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogZmFzdC9zY3JvbGxpbmcvbWFjL3J1YmJlcmJhbmQtb3ZlcmZsb3ctaW4td2hl
ZWwtcmVnaW9uLXJvb3QtamlnZ2xlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9zY3JvbGxpbmcvbWFjL3J1YmJlcmJhbmQtb3ZlcmZsb3ctaW4td2hlZWwtcmVnaW9uLXJvb3Qt
amlnZ2xlLmh0bWw6IEFkZGVkLgorCiAyMDIwLTA4LTI4ICBMYXVybyBNb3VyYSAgPGxtb3VyYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtXUEVdIEdhcmRlbmluZyBhbmQgcmViYXNlbGluaW5nCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9sYXRjaGluZy9sYXRjaGVkLXNj
cm9sbC1yZW1vdmUtaWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9sYXRj
aGluZy9sYXRjaGVkLXNjcm9sbC1yZW1vdmUtaWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzRhMTE5
YThiNGJlZjk0YzdkN2JiMjE5NTQyMjBmM2Y4MDM4MGJkMwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL2xhdGNoZWQtc2Nyb2xsLXJlbW92ZS1p
ZnJhbWUuaHRtbApAQCAtMCwwICsxLDczIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+CisgICAgPHN0eWxlPgorICAgICAgICBpZnJhbWUgeworICAgICAgICAgICAgd2lkdGg6IDYw
MHB4OworICAgICAgICAgICAgaGVpZ2h0OiA0MDBweDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+
CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy91aS1oZWxwZXIuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGpzVGVzdElzQXN5bmMgPSB0cnVlOwor
ICAgICAgICAKKyAgICAgICAgbGV0IGlmcmFtZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgZnVuY3Rp
b24gaWZyYW1lU2Nyb2xsZWQob2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob2Zm
c2V0ID49IDIwMCkKKyAgICAgICAgICAgICAgICBpZnJhbWUucmVtb3ZlKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZmluaXNoSlNUZXN0LCAxNik7CisgICAgICAgIH0K
KworICAgICAgICBhc3luYyBmdW5jdGlvbiBkb1Rlc3QoKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaWZyYW1lJylbMF07CisK
KyAgICAgICAgICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgICAgICAgICAg
ZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygxMDAsIDEwMCk7IC8vIEluc2lk
ZSB0aGUgaWZyYW1lLgorICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdpdGhX
aGVlbEFuZE1vbWVudHVtUGhhc2VzKDAsIC0xLCAnYmVnYW4nLCAnbm9uZScpOworICAgICAgICAg
ICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAs
IC0xMCwgJ2NoYW5nZWQnLCAnbm9uZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VT
Y3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAsIDAsICdlbmRlZCcsICdub25lJyk7
CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50
dW1QaGFzZXMoMCwgLTEwLCAnbm9uZScsICdiZWdpbicpOworICAgICAgICAgICAgZXZlbnRTZW5k
ZXIubW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAsIC0xMCwgJ25vbmUn
LCAnY29udGludWUnKTsKKyAgICAgICAgICAgIGF3YWl0IFVJSGVscGVyLnJlbmRlcmluZ1VwZGF0
ZSgpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1v
bWVudHVtUGhhc2VzKDAsIDEwLCAnbm9uZScsICdjb250aW51ZScpOworICAgICAgICAgICAgYXdh
aXQgVUlIZWxwZXIucmVuZGVyaW5nVXBkYXRlKCk7CisgICAgICAgICAgICBldmVudFNlbmRlci5t
b3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgMTAsICdub25lJywgJ2Nv
bnRpbnVlJyk7CisgICAgICAgICAgICBhd2FpdCBVSUhlbHBlci5yZW5kZXJpbmdVcGRhdGUoKTsK
KyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1
bVBoYXNlcygwLCAtMTAsICdub25lJywgJ2NvbnRpbnVlJyk7CisgICAgICAgICAgICBhd2FpdCBV
SUhlbHBlci5yZW5kZXJpbmdVcGRhdGUoKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNl
U2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAwLCAnbm9uZScsICdlbmQnKTsK
KyAgICAgICAgfQorCisgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkg
PT4geworICAgICAgICAgICAgZGVzY3JpcHRpb24oIlRlc3QgdGhhdCByZW1vdmVzIGFuIGlmcmFt
ZSBkdXJpbmcgYSBsYXRjaGVkIHNjcm9sbC4gUGFzc2VzIGlmIHRoZSB0ZXN0IGRvZXMgbm90IGNy
YXNoLiIpOworICAgICAgICAgICAgc2V0VGltZW91dChkb1Rlc3QsIDApOworICAgICAgICB9LCBm
YWxzZSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8aWZyYW1lIHNyY2Rv
Yz0iCisgICAgPHN0eWxlPgorICAgICAgICBib2R5IHsgaGVpZ2h0OiAyMDAwcHg7IH0KKyAgICA8
L3N0eWxlPgorICAgIDxzY3JpcHQ+CisgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdz
Y3JvbGwnLCAoKSA9PiB7CisgICAgICAgICAgICBwYXJlbnQuaWZyYW1lU2Nyb2xsZWQod2luZG93
LnBhZ2VZT2Zmc2V0KTsKKyAgICAgICAgfSk7CisgICAgPC9zY3JpcHQ+CisgICAgPGJvZHk+Cisg
ICAgICAgIGlmcmFtZQorICAgIDwvYm9keT4KKyAgICAiPgorICAgIDwvaWZyYW1lPgorICAgIDxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL3Njcm9sbC1uZXN0ZWQtaWZy
YW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9sYXRjaGluZy9zY3JvbGwtbmVz
dGVkLWlmcmFtZS5odG1sCmluZGV4IDFhZWM4Y2Q1YmU4Zjg3ZmE5YzMwNTAyMGMwNWRlYWQzZmU3
MDNlNDQuLjRlMjMwMTA2ODNjNTlhMTAzNWM4MThhNTg0NTBhMjhiNjZmMmQ0ZjkgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL2xhdGNoaW5nL3Njcm9sbC1uZXN0ZWQtaWZy
YW1lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvbGF0Y2hpbmcvc2Nyb2xs
LW5lc3RlZC1pZnJhbWUuaHRtbApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICB7CiAgICAgICAg
ICAgICBkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBpZnJhbWUgZG9lcyBzY3JvbGwgd2hlbiBpbm5l
ciBpZnJhbWUgaXMgTk9UIHNjcm9sbGFibGUuIik7CiAgICAgICAgICAgICBpZiAod2luZG93LmV2
ZW50U2VuZGVyKSB7Ci0gICAgICAgICAgICAgICAgc2V0VGltZW91dChzY3JvbGxUZXN0LCAxMDAw
KTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHNjcm9sbFRlc3QsIDApOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhciBtZXNzYWdlTG9j
YXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFyZW50Jyk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9tYWMvcnViYmVyYmFuZC1vdmVyZmxvdy1pbi13aGVl
bC1yZWdpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL21hYy9ydWJiZXJiYW5k
LW92ZXJmbG93LWluLXdoZWVsLXJlZ2lvbi5odG1sCmluZGV4IDVkZDNhMjdiMjI3YmUwZjMyZmQy
ZDFhYTJmNzg2MGFlNGIxNmEzYmIuLjQ5NzBjZmFmOTVkNWYzODUyYTFiMTJiZmVjYWY1N2EzMWYw
MmUwNGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL21hYy9ydWJiZXJi
YW5kLW92ZXJmbG93LWluLXdoZWVsLXJlZ2lvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
c2Nyb2xsaW5nL21hYy9ydWJiZXJiYW5kLW92ZXJmbG93LWluLXdoZWVsLXJlZ2lvbi5odG1sCkBA
IC00Niw4ICs0NiwxMiBAQAogICAgICAgICBhc3luYyBmdW5jdGlvbiBkb01vdXNlV2hlZWxTY3Jv
bGwoKQogICAgICAgICB7CiAgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygxMDAs
IDEwMCk7Ci0gICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5k
TW9tZW50dW1QaGFzZXMoMCwgMSwgImJlZ2FuIiwgIm5vbmUiKTsKLSAgICAgICAgICAgIGV2ZW50
U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAyMCwgImNo
YW5nZWQiLCAibm9uZSIpOworICAgICAgICAgICAgLy8gU2Nyb2xsIGRvd24gdG8gbGF0Y2gsIHRo
ZW4gdXAgdG8gcnViYmVyYmFuZC4KKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xs
QnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMSwgImJlZ2FuIiwgIm5vbmUiKTsKKyAg
ICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBo
YXNlcygwLCAtMTAsICJjaGFuZ2VkIiwgIm5vbmUiKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVy
Lm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMTAsICJjaGFuZ2Vk
IiwgIm5vbmUiKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hl
ZWxBbmRNb21lbnR1bVBoYXNlcygwLCAxMiwgImNoYW5nZWQiLCAibm9uZSIpOworICAgICAgICAg
ICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAs
IDEyLCAiY2hhbmdlZCIsICJub25lIik7CiAgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVNj
cm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgMCwgImVuZGVkIiwgIm5vbmUiKTsK
ICAgICAgICAgICAgIGF3YWl0IFVJSGVscGVyLnJlbmRlcmluZ1VwZGF0ZSgpOwogICAgICAgICB9
Cg==
</data>
<flag name="review"
          id="422924"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>