<?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>224012</bug_id>
          
          <creation_ts>2021-03-31 12:38:15 -0700</creation_ts>
          <short_desc>Move AnimationTimeline methods related to Styleable to Styleable</short_desc>
          <delta_ts>2021-03-31 23:34:13 -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>Animations</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="Antoine Quint">graouts</reporter>
          <assigned_to name="Antoine Quint">graouts</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1745731</commentid>
    <comment_count>0</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-03-31 12:38:15 -0700</bug_when>
    <thetext>A number of public methods on AnimationTimeline make no use of any AnimationTimeline instance variables and instead call into Styleable:

    void elementWasRemoved(const Styleable&amp;);
    void willChangeRendererForStyleable(const Styleable&amp;);
    void cancelDeclarativeAnimationsForStyleable(const Styleable&amp;);
    void animationWasAddedToStyleable(WebAnimation&amp;, const Styleable&amp;);
    void animationWasRemovedFromStyleable(WebAnimation&amp;, const Styleable&amp;);
    void removeDeclarativeAnimationFromListsForOwningElement(WebAnimation&amp;, const Styleable&amp;);
    void updateCSSAnimationsForStyleable(const Styleable&amp;, const RenderStyle* currentStyle, const RenderStyle&amp; afterChangeStyle, const RenderStyle* parentElementStyle);
    void updateCSSTransitionsForStyleable(const Styleable&amp;, const RenderStyle&amp; currentStyle, const RenderStyle&amp; newStyle);

These should all be on Styleable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745735</commentid>
    <comment_count>1</comment_count>
      <attachid>424803</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-03-31 12:43:54 -0700</bug_when>
    <thetext>Created attachment 424803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745741</commentid>
    <comment_count>2</comment_count>
      <attachid>424807</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-03-31 12:55:05 -0700</bug_when>
    <thetext>Created attachment 424807
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745785</commentid>
    <comment_count>3</comment_count>
      <attachid>424807</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-03-31 14:46:05 -0700</bug_when>
    <thetext>Comment on attachment 424807
Patch

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

&gt; Source/WebCore/ChangeLog:21
&gt; +        These really belong on Styleable so we move them all over to that class with a new .cpp class
&gt; +        for these non-trivial methods.

Stylable is a pretty generic name, but all these functions are related to animations. Maybe this should be called something like AnimatableStyleable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745790</commentid>
    <comment_count>4</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-03-31 14:51:02 -0700</bug_when>
    <thetext>(In reply to Dean Jackson from comment #3)
&gt; Comment on attachment 424807 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=424807&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:21
&gt; &gt; +        These really belong on Styleable so we move them all over to that class with a new .cpp class
&gt; &gt; +        for these non-trivial methods.
&gt; 
&gt; Stylable is a pretty generic name, but all these functions are related to
&gt; animations. Maybe this should be called something like AnimatableStyleable?

A Styleable is a struct that is an Element/PseudoId pair. It&apos;s primarily used for animations, but not only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745946</commentid>
    <comment_count>5</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-03-31 23:33:34 -0700</bug_when>
    <thetext>Committed r275346 (236017@main): &lt;https://commits.webkit.org/236017@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745947</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-31 23:34:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/76090629&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424803</attachid>
            <date>2021-03-31 12:43:54 -0700</date>
            <delta_ts>2021-03-31 12:59:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224012-20210331214352.patch</filename>
            <type>text/plain</type>
            <size>77003</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MzAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmRkZmQ5YTc0ODNkMWUx
ZDA0ZTlmMTg5MzM4ZDg3ZjVkNGY0OTMwZS4uZDJhNzA3MWM2M2U2NjllNmY1ZDQzZTc5MjBjYjI3
ODJhYmM3ODU0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDIxLTAzLTMxICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgQW5pbWF0aW9u
VGltZWxpbmUgbWV0aG9kcyByZWxhdGVkIHRvIFN0eWxlYWJsZSB0byBTdHlsZWFibGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDAxMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgbnVtYmVyIG9mIHB1
YmxpYyBtZXRob2RzIG9uIEFuaW1hdGlvblRpbWVsaW5lIG1ha2Ugbm8gdXNlIG9mIGFueSBBbmlt
YXRpb25UaW1lbGluZSBpbnN0YW5jZQorICAgICAgICB2YXJpYWJsZXMgYW5kIGluc3RlYWQgY2Fs
bCBpbnRvIFN0eWxlYWJsZToKKworICAgICAgICAgICAgdm9pZCBlbGVtZW50V2FzUmVtb3ZlZChj
b25zdCBTdHlsZWFibGUmKTsKKyAgICAgICAgICAgIHZvaWQgd2lsbENoYW5nZVJlbmRlcmVyRm9y
U3R5bGVhYmxlKGNvbnN0IFN0eWxlYWJsZSYpOworICAgICAgICAgICAgdm9pZCBjYW5jZWxEZWNs
YXJhdGl2ZUFuaW1hdGlvbnNGb3JTdHlsZWFibGUoY29uc3QgU3R5bGVhYmxlJik7CisgICAgICAg
ICAgICB2b2lkIGFuaW1hdGlvbldhc0FkZGVkVG9TdHlsZWFibGUoV2ViQW5pbWF0aW9uJiwgY29u
c3QgU3R5bGVhYmxlJik7CisgICAgICAgICAgICB2b2lkIGFuaW1hdGlvbldhc1JlbW92ZWRGcm9t
U3R5bGVhYmxlKFdlYkFuaW1hdGlvbiYsIGNvbnN0IFN0eWxlYWJsZSYpOworICAgICAgICAgICAg
dm9pZCByZW1vdmVEZWNsYXJhdGl2ZUFuaW1hdGlvbkZyb21MaXN0c0Zvck93bmluZ0VsZW1lbnQo
V2ViQW5pbWF0aW9uJiwgY29uc3QgU3R5bGVhYmxlJik7CisgICAgICAgICAgICB2b2lkIHVwZGF0
ZUNTU0FuaW1hdGlvbnNGb3JTdHlsZWFibGUoY29uc3QgU3R5bGVhYmxlJiwgY29uc3QgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIGFmdGVyQ2hhbmdlU3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgdm9p
ZCB1cGRhdGVDU1NUcmFuc2l0aW9uc0ZvclN0eWxlYWJsZShjb25zdCBTdHlsZWFibGUmLCBjb25z
dCBSZW5kZXJTdHlsZSYgY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUp
OworCisgICAgICAgIFRoZXNlIHJlYWxseSBiZWxvbmcgb24gU3R5bGVhYmxlIHNvIHdlIG1vdmUg
dGhlbSBhbGwgb3ZlciB0byB0aGF0IGNsYXNzIHdpdGggYSBuZXcgLmNwcCBjbGFzcworICAgICAg
ICBmb3IgdGhlc2Ugbm9uLXRyaXZpYWwgbWV0aG9kcy4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBhbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5p
bWF0aW9uVGltZWxpbmU6OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbmlt
YXRpb25UaW1lbGluZTo6YW5pbWF0aW9uV2FzQWRkZWRUb1N0eWxlYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpyZW1vdmVDU1NUcmFuc2l0aW9uRnJvbU1hcCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25UaW1lbGluZTo6YW5pbWF0aW9uV2FzUmVtb3ZlZEZy
b21TdHlsZWFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uVGltZWxp
bmU6OnJlbW92ZURlY2xhcmF0aXZlQW5pbWF0aW9uRnJvbUxpc3RzRm9yT3duaW5nRWxlbWVudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25UaW1lbGluZTo6cmVtb3ZlQ1NT
QW5pbWF0aW9uQ3JlYXRlZEJ5TWFya3VwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFu
aW1hdGlvblRpbWVsaW5lOjplbGVtZW50V2FzUmVtb3ZlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpBbmltYXRpb25UaW1lbGluZTo6d2lsbENoYW5nZVJlbmRlcmVyRm9yU3R5bGVhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lOjpjYW5jZWxE
ZWNsYXJhdGl2ZUFuaW1hdGlvbnNGb3JTdHlsZWFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkQ29uc2lkZXJBbmltYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QW5pbWF0aW9uVGltZWxpbmU6OnVwZGF0ZUNTU0FuaW1hdGlvbnNGb3JTdHlsZWFibGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2V5ZnJhbWVFZmZlY3RGb3JFbGVtZW50QW5kUHJv
cGVydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cHJvcGVydHlJblN0eWxlTWF0Y2hl
c1ZhbHVlRm9yVHJhbnNpdGlvbkluTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRy
YW5zaXRpb25Db21iaW5lZER1cmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRy
YW5zaXRpb25NYXRjaGVzUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29t
cGlsZVRyYW5zaXRpb25Qcm9wZXJ0aWVzSW5TdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpBbmltYXRpb25UaW1lbGluZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGVB
bmRQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25UaW1lbGlu
ZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGUpOiBEZWxldGVkLgorICAgICAgICAq
IGFuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5oOgorICAgICAgICAqIGFuaW1hdGlvbi9EZWNs
YXJhdGl2ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWNsYXJhdGl2ZUFuaW1h
dGlvbjo6ZGlzYXNzb2NpYXRlRnJvbU93bmluZ0VsZW1lbnQpOgorICAgICAgICAqIGFuaW1hdGlv
bi9XZWJBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViQW5pbWF0aW9uOjpzZXRF
ZmZlY3RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJBbmltYXRpb246OnNldFRpbWVs
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6ZWZmZWN0VGFyZ2V0RGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6cGVyc2lzdCk6CisgICAgICAg
ICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlZEZy
b21BbmNlc3Rvcik6CisgICAgICAgICogZG9tL1BzZXVkb0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxlbWVudCk6CisgICAgICAgICogcmVu
ZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJlbmRlcmVycyk6CisgICAgICAgICogc3R5bGUv
U3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNv
bHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKToKKyAgICAgICAgKiBzdHlsZS9TdHls
ZWFibGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9u
VGltZWxpbmUuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVhYmxlOjphbmltYXRpb25XYXNB
ZGRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVDU1NUcmFuc2l0aW9uRnJvbU1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWFibGU6OnJlbW92ZURlY2xhcmF0aXZlQW5pbWF0
aW9uRnJvbUxpc3RzRm9yT3duaW5nRWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZWFibGU6OmFuaW1hdGlvbldhc1JlbW92ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
cmVtb3ZlQ1NTQW5pbWF0aW9uQ3JlYXRlZEJ5TWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlYWJsZTo6ZWxlbWVudFdhc1JlbW92ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVhYmxlOjp3aWxsQ2hhbmdlUmVuZGVyZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVhYmxlOjpjYW5jZWxEZWNsYXJhdGl2ZUFuaW1hdGlvbnMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkQ29uc2lkZXJBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVh
YmxlOjp1cGRhdGVDU1NBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmtleWZy
YW1lRWZmZWN0Rm9yRWxlbWVudEFuZFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OnByb3Bl
cnR5SW5TdHlsZU1hdGNoZXNWYWx1ZUZvclRyYW5zaXRpb25Jbk1hcCk6CisgICAgICAgIChXZWJD
b3JlOjp0cmFuc2l0aW9uQ29tYmluZWREdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0cmFu
c2l0aW9uTWF0Y2hlc1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBpbGVUcmFuc2l0
aW9uUHJvcGVydGllc0luU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQ1NTVHJhbnNp
dGlvbnNGb3JTdHlsZWFibGVBbmRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWFi
bGU6OnVwZGF0ZUNTU1RyYW5zaXRpb25zIGNvbnN0KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZWFi
bGUuaDoKKwogMjAyMS0wMy0zMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIEFkZCBkZXByZWNhdGlvbiBtYWNyb3MuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cmlu
ZGV4IDNlMDE3NTNiNmUzYjcyNGNmZDg3MzI2Nzg4NjU3OTI1ZDc1MTQxNWYuLjBhMjQxMDYwOGIw
NGYxY2MwMDdjYWE2MTQ5NjlhZTZlZTc4YzliNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yNDk3LDYg
KzI0OTcsNyBAQCBzdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCiBzdHlsZS9TdHlsZVNoYXJp
bmdSZXNvbHZlci5jcHAKIHN0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAogc3R5bGUvU3R5bGVV
cGRhdGUuY3BwCitzdHlsZS9TdHlsZWFibGUuY3BwCiBzdHlsZS9Vc2VyQWdlbnRTdHlsZS5jcHAK
IHN2Zy9Eb2N1bWVudFNWRy5jcHAKIHN2Zy9TVkdBRWxlbWVudC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzOTcxZjMwYzA3
OTllNzQ5NTg5YTkwMDVhZTg0Mjg4NzhmMmJkY2IwLi5iZjAyOGI3NDZhOGZjMGNjYWI2OTZmMjRi
NTA1YTUzZDc2YWU1ZmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDE0OCw2ICsxMDE0OCw3IEBACiAJCTcxNzI5RjdBMjBG
M0JBM0EwMDgwMUNFNiAvKiBEb2N1bWVudFRpbWVsaW5lT3B0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEb2N1bWVudFRpbWVsaW5lT3B0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MTcyOUY3QzIwRjNCQUI5MDA4MDFDRTYgLyogSlNEb2N1bWVu
dFRpbWVsaW5lT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Rv
Y3VtZW50VGltZWxpbmVPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcx
NzI5RjdEMjBGM0JBQkEwMDgwMUNFNiAvKiBKU0RvY3VtZW50VGltZWxpbmVPcHRpb25zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9jdW1lbnRUaW1lbGluZU9w
dGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MTczREVCRDI2MTRERjA0
MDA5N0RGMzIgLyogU3R5bGVhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0eWxlYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxNzdF
MjQ2MURCODBEMkYwMDkxOUEwQiAvKiBtZWRpYS1jb250cm9sbGVyLXN1cHBvcnQuanMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSAibWVkaWEtY29udHJvbGxlci1zdXBw
b3J0LmpzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzE3N0UyNDcxREI4MEQyRjAw
OTE5QTBCIC8qIG11dGUtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9ICJtdXRlLXN1cHBvcnQuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MTc3RTI0ODFEQjgwRDJGMDA5MTlBMEIgLyogc3RhcnQtc3VwcG9ydC5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJzdGFydC1zdXBwb3J0LmpzIjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MzExLDYgKzI5MzEyLDcgQEAKIAkJCQlBNzlCQUQ5
RTE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZUZlYXR1cmUuaCAqLywKIAkJCQlBNzlCQUQ5RjE2MUU3
RjNGMDBDMkU2NTIgLyogUnVsZVNldC5jcHAgKi8sCiAJCQkJQTc5QkFEQTAxNjFFN0YzRjAwQzJF
NjUyIC8qIFJ1bGVTZXQuaCAqLywKKwkJCQk3MTczREVCRDI2MTRERjA0MDA5N0RGMzIgLyogU3R5
bGVhYmxlLmNwcCAqLywKIAkJCQk3MTM5MjJCQzI1MThBQjcwMDA1REIzQzIgLyogU3R5bGVhYmxl
LmggKi8sCiAJCQkJRTQ1QkE2QjIyMzc2MjI3RTAwNERGQzA3IC8qIFN0eWxlQWRqdXN0ZXIuY3Bw
ICovLAogCQkJCUU0NUJBNkI1MjM3NjIyOUYwMDRERkMwNyAvKiBTdHlsZUFkanVzdGVyLmggKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmNwcAppbmRl
eCA4ZWRmODBlMWRjNThhYWQ1ZjEzOTliN2UxYTBlZGJhMzY0YWZiNzhkLi5hZWYzMWQzMDFlNzU4
MGFlMjRjZDViNzZhMmIxNDBjNmJiYjg1NTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9BbmltYXRpb25UaW1lbGluZS5jcHAKQEAgLTI3LDI1ICsyNywxMSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkFuaW1hdGlvblRpbWVsaW5lLmgiCiAKLSNpbmNsdWRlICJB
bmltYXRpb24uaCIKLSNpbmNsdWRlICJBbmltYXRpb25FZmZlY3QuaCIKLSNpbmNsdWRlICJBbmlt
YXRpb25MaXN0LmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUHJv
cGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDU1NUcmFuc2l0aW9uLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnRUaW1lbGluZS5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJLZXlm
cmFtZUVmZmVjdC5oIgogI2luY2x1ZGUgIktleWZyYW1lRWZmZWN0U3RhY2suaCIKLSNpbmNsdWRl
ICJQc2V1ZG9FbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgogI2luY2x1
ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZWFibGUuaCIKICNpbmNsdWRlICJX
ZWJBbmltYXRpb25VdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtODIsNyArNjgsNyBAQCB2b2lkIEFuaW1hdGlvblRpbWVsaW5lOjpyZW1vdmVBbmltYXRp
b24oV2ViQW5pbWF0aW9uJiBhbmltYXRpb24pCiAgICAgbV9hbmltYXRpb25zLnJlbW92ZSgmYW5p
bWF0aW9uKTsKICAgICBpZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+KGFuaW1hdGlvbi5lZmZlY3QoKSkp
IHsKICAgICAgICAgaWYgKGF1dG8gc3R5bGVhYmxlID0gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+
KGFuaW1hdGlvbi5lZmZlY3QoKSktPnRhcmdldFN0eWxlYWJsZSgpKSB7Ci0gICAgICAgICAgICBh
bmltYXRpb25XYXNSZW1vdmVkRnJvbVN0eWxlYWJsZShhbmltYXRpb24sICpzdHlsZWFibGUpOwor
ICAgICAgICAgICAgc3R5bGVhYmxlLT5hbmltYXRpb25XYXNSZW1vdmVkKGFuaW1hdGlvbik7CiAg
ICAgICAgICAgICBzdHlsZWFibGUtPmVuc3VyZUtleWZyYW1lRWZmZWN0U3RhY2soKS5yZW1vdmVF
ZmZlY3QoKmRvd25jYXN0PEtleWZyYW1lRWZmZWN0PihhbmltYXRpb24uZWZmZWN0KCkpKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTk2LDQ1NCArODIsNCBAQCBPcHRpb25hbDxkb3VibGU+IEFuaW1h
dGlvblRpbWVsaW5lOjpiaW5kaW5nc0N1cnJlbnRUaW1lKCkKICAgICByZXR1cm4gc2Vjb25kc1Rv
V2ViQW5pbWF0aW9uc0FQSVRpbWUoKnRpbWUpOwogfQogCi12b2lkIEFuaW1hdGlvblRpbWVsaW5l
OjphbmltYXRpb25XYXNBZGRlZFRvU3R5bGVhYmxlKFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uLCBj
b25zdCBTdHlsZWFibGUmIHN0eWxlYWJsZSkKLXsKLSAgICBzdHlsZWFibGUuZW5zdXJlQW5pbWF0
aW9ucygpLmFkZCgmYW5pbWF0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHJlbW92ZUNT
U1RyYW5zaXRpb25Gcm9tTWFwKENTU1RyYW5zaXRpb24mIHRyYW5zaXRpb24sIFByb3BlcnR5VG9U
cmFuc2l0aW9uTWFwJiBjc3NUcmFuc2l0aW9uc0J5UHJvcGVydHkpCi17Ci0gICAgYXV0byB0cmFu
c2l0aW9uSXRlcmF0b3IgPSBjc3NUcmFuc2l0aW9uc0J5UHJvcGVydHkuZmluZCh0cmFuc2l0aW9u
LnByb3BlcnR5KCkpOwotICAgIGlmICh0cmFuc2l0aW9uSXRlcmF0b3IgPT0gY3NzVHJhbnNpdGlv
bnNCeVByb3BlcnR5LmVuZCgpIHx8IHRyYW5zaXRpb25JdGVyYXRvci0+dmFsdWUgIT0gJnRyYW5z
aXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNzc1RyYW5zaXRpb25zQnlQcm9w
ZXJ0eS5yZW1vdmUodHJhbnNpdGlvbkl0ZXJhdG9yKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBBbmltYXRpb25UaW1lbGluZTo6YW5pbWF0aW9uV2FzUmVtb3ZlZEZyb21TdHlsZWFibGUo
V2ViQW5pbWF0aW9uJiBhbmltYXRpb24sIGNvbnN0IFN0eWxlYWJsZSYgc3R5bGVhYmxlKQotewot
ICAgIHN0eWxlYWJsZS5lbnN1cmVBbmltYXRpb25zKCkucmVtb3ZlKCZhbmltYXRpb24pOwotCi0g
ICAgLy8gTm93LCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBDU1MgVHJhbnNpdGlvbiwgd2UgcmVt
b3ZlIGl0IGZyb20gdGhlIG1fZWxlbWVudFRvUnVubmluZ0NTU1RyYW5zaXRpb25CeUNTU1Byb3Bl
cnR5SUQgbWFwLgotICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gdGhpcyBmb3IgQ1NTIEFuaW1h
dGlvbnMgYmVjYXVzZSB0aGVpciB0aW1pbmcgY2FuIGJlIHNldCB2aWEgQ1NTIHRvIGVuZCwgd2hp
Y2ggd291bGQgY2F1c2UgdGhpcwotICAgIC8vIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCwgYnV0IHRo
ZXkgc2hvdWxkIHJlbWFpbiBhc3NvY2lhdGVkIHdpdGggdGhlaXIgb3duaW5nIGVsZW1lbnQgdW50
aWwgdGhpcyBpcyBjaGFuZ2VkIHZpYSBhIGNhbGwKLSAgICAvLyB0byB0aGUgSlMgQVBJIG9yIGNo
YW5naW5nIHRoZSB0YXJnZXQgZWxlbWVudCdzIGFuaW1hdGlvbi1uYW1lIHByb3BlcnR5LgotICAg
IGlmIChpczxDU1NUcmFuc2l0aW9uPihhbmltYXRpb24pKQotICAgICAgICByZW1vdmVEZWNsYXJh
dGl2ZUFuaW1hdGlvbkZyb21MaXN0c0Zvck93bmluZ0VsZW1lbnQoYW5pbWF0aW9uLCBzdHlsZWFi
bGUpOwotfQotCi12b2lkIEFuaW1hdGlvblRpbWVsaW5lOjpyZW1vdmVEZWNsYXJhdGl2ZUFuaW1h
dGlvbkZyb21MaXN0c0Zvck93bmluZ0VsZW1lbnQoV2ViQW5pbWF0aW9uJiBhbmltYXRpb24sIGNv
bnN0IFN0eWxlYWJsZSYgc3R5bGVhYmxlKQotewotICAgIEFTU0VSVChpczxEZWNsYXJhdGl2ZUFu
aW1hdGlvbj4oYW5pbWF0aW9uKSk7Ci0KLSAgICBpZiAoaXM8Q1NTVHJhbnNpdGlvbj4oYW5pbWF0
aW9uKSkgewotICAgICAgICBhdXRvJiB0cmFuc2l0aW9uID0gZG93bmNhc3Q8Q1NTVHJhbnNpdGlv
bj4oYW5pbWF0aW9uKTsKLSAgICAgICAgaWYgKCFyZW1vdmVDU1NUcmFuc2l0aW9uRnJvbU1hcCh0
cmFuc2l0aW9uLCBzdHlsZWFibGUuZW5zdXJlUnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSgp
KSkKLSAgICAgICAgICAgIHJlbW92ZUNTU1RyYW5zaXRpb25Gcm9tTWFwKHRyYW5zaXRpb24sIHN0
eWxlYWJsZS5lbnN1cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKSk7Ci0gICAgfQot
fQotCi12b2lkIEFuaW1hdGlvblRpbWVsaW5lOjpyZW1vdmVDU1NBbmltYXRpb25DcmVhdGVkQnlN
YXJrdXAoY29uc3QgU3R5bGVhYmxlJiBzdHlsZWFibGUsIENTU0FuaW1hdGlvbiYgY3NzQW5pbWF0
aW9uKQotewotICAgIHN0eWxlYWJsZS5hbmltYXRpb25zQ3JlYXRlZEJ5TWFya3VwKCkucmVtb3Zl
KCZjc3NBbmltYXRpb24pOwotCi0gICAgaWYgKCFzdHlsZWFibGUuaGFzS2V5ZnJhbWVFZmZlY3Rz
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGtleWZyYW1lRWZmZWN0U3RhY2sgPSBz
dHlsZWFibGUuZW5zdXJlS2V5ZnJhbWVFZmZlY3RTdGFjaygpOwotICAgIGF1dG8qIGNzc0FuaW1h
dGlvbkxpc3QgPSBrZXlmcmFtZUVmZmVjdFN0YWNrLmNzc0FuaW1hdGlvbkxpc3QoKTsKLSAgICBp
ZiAoIWNzc0FuaW1hdGlvbkxpc3QgfHwgY3NzQW5pbWF0aW9uTGlzdC0+aXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBiYWNraW5nQW5pbWF0aW9uID0gY3NzQW5pbWF0aW9u
LmJhY2tpbmdBbmltYXRpb24oKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNzc0FuaW1h
dGlvbkxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChjc3NBbmltYXRpb25MaXN0LT5h
bmltYXRpb24oaSkgPT0gYmFja2luZ0FuaW1hdGlvbikgewotICAgICAgICAgICAgYXV0byBuZXdB
bmltYXRpb25MaXN0ID0gY3NzQW5pbWF0aW9uTGlzdC0+Y29weSgpOwotICAgICAgICAgICAgbmV3
QW5pbWF0aW9uTGlzdC0+cmVtb3ZlKGkpOwotICAgICAgICAgICAga2V5ZnJhbWVFZmZlY3RTdGFj
ay5zZXRDU1NBbmltYXRpb25MaXN0KFdURk1vdmUobmV3QW5pbWF0aW9uTGlzdCkpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEFuaW1hdGlvblRpbWVs
aW5lOjplbGVtZW50V2FzUmVtb3ZlZChjb25zdCBTdHlsZWFibGUmIHN0eWxlYWJsZSkKLXsKLSAg
ICBjYW5jZWxEZWNsYXJhdGl2ZUFuaW1hdGlvbnNGb3JTdHlsZWFibGUoc3R5bGVhYmxlKTsKLX0K
LQotdm9pZCBBbmltYXRpb25UaW1lbGluZTo6d2lsbENoYW5nZVJlbmRlcmVyRm9yU3R5bGVhYmxl
KGNvbnN0IFN0eWxlYWJsZSYgc3R5bGVhYmxlKQotewotICAgIGlmIChhdXRvKiBhbmltYXRpb25z
ID0gc3R5bGVhYmxlLmFuaW1hdGlvbnMoKSkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFu
aW1hdGlvbiA6ICphbmltYXRpb25zKQotICAgICAgICAgICAgYW5pbWF0aW9uLT53aWxsQ2hhbmdl
UmVuZGVyZXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQW5pbWF0aW9uVGltZWxpbmU6OmNhbmNlbERl
Y2xhcmF0aXZlQW5pbWF0aW9uc0ZvclN0eWxlYWJsZShjb25zdCBTdHlsZWFibGUmIHN0eWxlYWJs
ZSkKLXsKLSAgICBpZiAoYXV0byogYW5pbWF0aW9ucyA9IHN0eWxlYWJsZS5hbmltYXRpb25zKCkp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiAqYW5pbWF0aW9ucykgewotICAgICAg
ICAgICAgaWYgKGlzPERlY2xhcmF0aXZlQW5pbWF0aW9uPihhbmltYXRpb24pKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzPENTU0FuaW1hdGlvbj4oYW5pbWF0aW9uKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmVtb3ZlQ1NTQW5pbWF0aW9uQ3JlYXRlZEJ5TWFya3VwKHN0eWxlYWJsZSwgZG93bmNh
c3Q8Q1NTQW5pbWF0aW9uPigqYW5pbWF0aW9uKSk7Ci0gICAgICAgICAgICAgICAgZG93bmNhc3Q8
RGVjbGFyYXRpdmVBbmltYXRpb24+KCphbmltYXRpb24pLmNhbmNlbEZyb21TdHlsZSgpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRDb25z
aWRlckFuaW1hdGlvbihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBbmltYXRpb24mIGFuaW1hdGlv
bikKLXsKLSAgICBpZiAoIWFuaW1hdGlvbi5pc1ZhbGlkQW5pbWF0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGFu
aW1hdGlvbk5hbWVOb25lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJub25lIikpOwotCi0gICAg
YXV0byYgbmFtZSA9IGFuaW1hdGlvbi5uYW1lKCk7Ci0gICAgaWYgKG5hbWUgPT0gYW5pbWF0aW9u
TmFtZU5vbmUgfHwgbmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChhdXRvKiBzdHlsZVNjb3BlID0gU3R5bGU6OlNjb3BlOjpmb3JPcmRpbmFsKGVsZW1lbnQs
IGFuaW1hdGlvbi5uYW1lU3R5bGVTY29wZU9yZGluYWwoKSkpCi0gICAgICAgIHJldHVybiBzdHls
ZVNjb3BlLT5yZXNvbHZlcigpLmlzQW5pbWF0aW9uTmFtZVZhbGlkKG5hbWUpOwotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIEFuaW1hdGlvblRpbWVsaW5lOjp1cGRhdGVDU1NBbmltYXRp
b25zRm9yU3R5bGVhYmxlKGNvbnN0IFN0eWxlYWJsZSYgc3R5bGVhYmxlLCBjb25zdCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlKiBwYXJlbnRFbGVtZW50U3R5bGUpCi17Ci0gICAgYXV0byYga2V5ZnJhbWVFZmZl
Y3RTdGFjayA9IHN0eWxlYWJsZS5lbnN1cmVLZXlmcmFtZUVmZmVjdFN0YWNrKCk7Ci0KLSAgICAv
LyBJbiBjYXNlIHRoaXMgZWxlbWVudCBpcyBuZXdseSBnZXR0aW5nIGEgImRpc3BsYXk6IG5vbmUi
IHdlIG5lZWQgdG8gY2FuY2VsIGFsbCBvZiBpdHMgYW5pbWF0aW9ucyBhbmQgZGlzcmVnYXJkIG5l
dyBvbmVzLgotICAgIGlmIChjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5kaXNwbGF5KCkg
IT0gRGlzcGxheVR5cGU6Ok5vbmUgJiYgbmV3U3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBl
OjpOb25lKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY3NzQW5pbWF0aW9uIDogc3R5bGVhYmxlLmFu
aW1hdGlvbnNDcmVhdGVkQnlNYXJrdXAoKSkKLSAgICAgICAgICAgIGNzc0FuaW1hdGlvbi0+Y2Fu
Y2VsRnJvbVN0eWxlKCk7Ci0gICAgICAgIGtleWZyYW1lRWZmZWN0U3RhY2suc2V0Q1NTQW5pbWF0
aW9uTGlzdChudWxscHRyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGN1
cnJlbnRBbmltYXRpb25MaXN0ID0gbmV3U3R5bGUuYW5pbWF0aW9ucygpOwotICAgIGF1dG8qIHBy
ZXZpb3VzQW5pbWF0aW9uTGlzdCA9IGtleWZyYW1lRWZmZWN0U3RhY2suY3NzQW5pbWF0aW9uTGlz
dCgpOwotICAgIGlmIChwcmV2aW91c0FuaW1hdGlvbkxpc3QgJiYgIXByZXZpb3VzQW5pbWF0aW9u
TGlzdC0+aXNFbXB0eSgpICYmIG5ld1N0eWxlLmhhc0FuaW1hdGlvbnMoKSAmJiAqKHByZXZpb3Vz
QW5pbWF0aW9uTGlzdCkgPT0gKihuZXdTdHlsZS5hbmltYXRpb25zKCkpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDU1NBbmltYXRpb25Db2xsZWN0aW9uIG5ld0FuaW1hdGlvbnM7Ci0gICAgYXV0
byYgcHJldmlvdXNBbmltYXRpb25zID0gc3R5bGVhYmxlLmFuaW1hdGlvbnNDcmVhdGVkQnlNYXJr
dXAoKTsKLQotICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtYW5pbWF0aW9ucy0xLyNh
bmltYXRpb25zCi0gICAgLy8gVGhlIHNhbWUgQGtleWZyYW1lcyBydWxlIG5hbWUgbWF5IGJlIHJl
cGVhdGVkIHdpdGhpbiBhbiBhbmltYXRpb24tbmFtZS4gQ2hhbmdlcyB0byB0aGUgYW5pbWF0aW9u
LW5hbWUgdXBkYXRlIGV4aXN0aW5nCi0gICAgLy8gYW5pbWF0aW9ucyBieSBpdGVyYXRpbmcgb3Zl
ciB0aGUgbmV3IGxpc3Qgb2YgYW5pbWF0aW9ucyBmcm9tIGxhc3QgdG8gZmlyc3QsIGFuZCwgZm9y
IGVhY2ggYW5pbWF0aW9uLCBmaW5kaW5nIHRoZSBsYXN0Ci0gICAgLy8gbWF0Y2hpbmcgYW5pbWF0
aW9uIGluIHRoZSBsaXN0IG9mIGV4aXN0aW5nIGFuaW1hdGlvbnMuIElmIGEgbWF0Y2ggaXMgZm91
bmQsIHRoZSBleGlzdGluZyBhbmltYXRpb24gaXMgdXBkYXRlZCB1c2luZyB0aGUKLSAgICAvLyBh
bmltYXRpb24gcHJvcGVydGllcyBjb3JyZXNwb25kaW5nIHRvIGl0cyBwb3NpdGlvbiBpbiB0aGUg
bmV3IGxpc3Qgb2YgYW5pbWF0aW9ucywgd2hpbHN0IG1haW50YWluaW5nIGl0cyBjdXJyZW50IHBs
YXliYWNrCi0gICAgLy8gdGltZSBhcyBkZXNjcmliZWQgYWJvdmUuIFRoZSBtYXRjaGluZyBhbmlt
YXRpb24gaXMgcmVtb3ZlZCBmcm9tIHRoZSBleGlzdGluZyBsaXN0IG9mIGFuaW1hdGlvbnMgc3Vj
aCB0aGF0IGl0IHdpbGwgbm90IG1hdGNoCi0gICAgLy8gdHdpY2UuIElmIGEgbWF0Y2ggaXMgbm90
IGZvdW5kLCBhIG5ldyBhbmltYXRpb24gaXMgY3JlYXRlZC4gQXMgYSByZXN1bHQsIHVwZGF0aW5n
IGFuaW1hdGlvbi1uYW1lIGZyb20g4oCYYeKAmSB0byDigJhhLCBh4oCZIHdpbGwKLSAgICAvLyBj
YXVzZSB0aGUgZXhpc3RpbmcgYW5pbWF0aW9uIGZvciDigJhh4oCZIHRvIGJlY29tZSB0aGUgc2Vj
b25kIGFuaW1hdGlvbiBpbiB0aGUgbGlzdCBhbmQgYSBuZXcgYW5pbWF0aW9uIHdpbGwgYmUgY3Jl
YXRlZCBmb3IgdGhlCi0gICAgLy8gZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4KLSAgICBpZiAoY3Vy
cmVudEFuaW1hdGlvbkxpc3QpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IGN1cnJlbnRBbmlt
YXRpb25MaXN0LT5zaXplKCk7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgICAgIGF1dG8mIGN1cnJl
bnRBbmltYXRpb24gPSBjdXJyZW50QW5pbWF0aW9uTGlzdC0+YW5pbWF0aW9uKGkgLSAxKTsKLSAg
ICAgICAgICAgIGlmICghc2hvdWxkQ29uc2lkZXJBbmltYXRpb24oc3R5bGVhYmxlLmVsZW1lbnQs
IGN1cnJlbnRBbmltYXRpb24pKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICBib29sIGZvdW5kTWF0Y2hpbmdBbmltYXRpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgcHJldmlvdXNBbmltYXRpb24gOiBwcmV2aW91c0FuaW1hdGlvbnMpIHsKLSAgICAg
ICAgICAgICAgICBpZiAocHJldmlvdXNBbmltYXRpb24tPmFuaW1hdGlvbk5hbWUoKSA9PSBjdXJy
ZW50QW5pbWF0aW9uLm5hbWUoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaW1pbmcgcHJv
cGVydGllcyBvciBwbGF5IHN0YXRlIG1heSBoYXZlIGNoYW5nZWQgc28gd2UgbmVlZCB0byB1cGRh
dGUgdGhlIGJhY2tpbmcgYW5pbWF0aW9uIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IEFuaW1hdGlvbiBmb3VuZCBpbiB0aGUgY3VycmVudCBzdHlsZS4KLSAgICAgICAgICAgICAgICAg
ICAgcHJldmlvdXNBbmltYXRpb24tPnNldEJhY2tpbmdBbmltYXRpb24oY3VycmVudEFuaW1hdGlv
bik7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuYWRkKHByZXZpb3VzQW5pbWF0
aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBtYXRjaGVkIGFuaW1hdGlv
biBmcm9tIHRoZSBsaXN0IG9mIHByZXZpb3VzIGFuaW1hdGlvbnMgc28gd2UgbWF5IG5vdCBtYXRj
aCBpdCBhZ2Fpbi4KLSAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNBbmltYXRpb25zLnJlbW92
ZShwcmV2aW91c0FuaW1hdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kTWF0Y2hpbmdB
bmltYXRpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZm91bmRNYXRjaGluZ0Fu
aW1hdGlvbikKLSAgICAgICAgICAgICAgICBuZXdBbmltYXRpb25zLmFkZChDU1NBbmltYXRpb246
OmNyZWF0ZShzdHlsZWFibGUsIGN1cnJlbnRBbmltYXRpb24sIGN1cnJlbnRTdHlsZSwgbmV3U3R5
bGUsIHBhcmVudEVsZW1lbnRTdHlsZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQW55
IGFuaW1hdGlvbiBmb3VuZCBpbiBwcmV2aW91c0FuaW1hdGlvbnMgYnV0IG5vdCBmb3VuZCBpbiBu
ZXdBbmltYXRpb25zIGlzIG5vdCBsb25nZXIgY3VycmVudCBhbmQgc2hvdWxkIGJlIGNhbmNlbGVk
LgotICAgIGZvciAoYXV0byYgcHJldmlvdXNBbmltYXRpb24gOiBwcmV2aW91c0FuaW1hdGlvbnMp
IHsKLSAgICAgICAgaWYgKCFuZXdBbmltYXRpb25zLmNvbnRhaW5zKHByZXZpb3VzQW5pbWF0aW9u
KSkgewotICAgICAgICAgICAgaWYgKHByZXZpb3VzQW5pbWF0aW9uLT5vd25pbmdFbGVtZW50KCkp
Ci0gICAgICAgICAgICAgICAgcHJldmlvdXNBbmltYXRpb24tPmNhbmNlbEZyb21TdHlsZSgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgc3R5bGVhYmxlLnNldEFuaW1hdGlvbnNDcmVhdGVkQnlN
YXJrdXAoV1RGTW92ZShuZXdBbmltYXRpb25zKSk7Ci0KLSAgICBrZXlmcmFtZUVmZmVjdFN0YWNr
LnNldENTU0FuaW1hdGlvbkxpc3QoY3VycmVudEFuaW1hdGlvbkxpc3QpOwotfQotCi1zdGF0aWMg
S2V5ZnJhbWVFZmZlY3QqIGtleWZyYW1lRWZmZWN0Rm9yRWxlbWVudEFuZFByb3BlcnR5KGNvbnN0
IFN0eWxlYWJsZSYgc3R5bGVhYmxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQotewotICAgIGlm
IChhdXRvKiBrZXlmcmFtZUVmZmVjdFN0YWNrID0gc3R5bGVhYmxlLmtleWZyYW1lRWZmZWN0U3Rh
Y2soKSkgewotICAgICAgICBhdXRvIGVmZmVjdHMgPSBrZXlmcmFtZUVmZmVjdFN0YWNrLT5zb3J0
ZWRFZmZlY3RzKCk7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgZWZmZWN0IDogbWFrZVJldmVy
c2VkUmFuZ2UoZWZmZWN0cykpIHsKLSAgICAgICAgICAgIGlmIChlZmZlY3QtPmFuaW1hdGVzUHJv
cGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAgICAgIHJldHVybiBlZmZlY3QuZ2V0KCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIGJvb2wg
cHJvcGVydHlJblN0eWxlTWF0Y2hlc1ZhbHVlRm9yVHJhbnNpdGlvbkluTWFwKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUHJvcGVydHlUb1RyYW5zaXRp
b25NYXAmIHRyYW5zaXRpb25zKQotewotICAgIGlmIChhdXRvKiB0cmFuc2l0aW9uID0gdHJhbnNp
dGlvbnMuZ2V0KHByb3BlcnR5KSkgewotICAgICAgICBpZiAoQ1NTUHJvcGVydHlBbmltYXRpb246
OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgJnN0eWxlLCAmdHJhbnNpdGlvbi0+dGFyZ2V0U3R5
bGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1zdGF0aWMgZG91YmxlIHRyYW5zaXRpb25Db21iaW5lZER1cmF0aW9uKGNvbnN0IEFu
aW1hdGlvbiogdHJhbnNpdGlvbikKLXsKLSAgICByZXR1cm4gc3RkOjptYXgoMC4wLCB0cmFuc2l0
aW9uLT5kdXJhdGlvbigpKSArIHRyYW5zaXRpb24tPmRlbGF5KCk7Ci19Ci0KLXN0YXRpYyBib29s
IHRyYW5zaXRpb25NYXRjaGVzUHJvcGVydHkoY29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KQotewotICAgIGF1dG8gbW9kZSA9IHRyYW5zaXRpb24ucHJv
cGVydHkoKS5tb2RlOwotICAgIGlmIChtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6
Ok5vbmUgfHwgbW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpVbmtub3duUHJvcGVy
dHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobW9kZSA9PSBBbmltYXRpb246OlRy
YW5zaXRpb25Nb2RlOjpTaW5nbGVQcm9wZXJ0eSkgewotICAgICAgICBhdXRvIHRyYW5zaXRpb25Q
cm9wZXJ0eSA9IHRyYW5zaXRpb24ucHJvcGVydHkoKS5pZDsKLSAgICAgICAgaWYgKHRyYW5zaXRp
b25Qcm9wZXJ0eSAhPSBwcm9wZXJ0eSkgewotICAgICAgICAgICAgZm9yIChhdXRvIGxvbmdoYW5k
IDogc2hvcnRoYW5kRm9yUHJvcGVydHkodHJhbnNpdGlvblByb3BlcnR5KSkgewotICAgICAgICAg
ICAgICAgIGlmIChsb25naGFuZCA9PSBwcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbXBpbGVU
cmFuc2l0aW9uUHJvcGVydGllc0luU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBIYXNo
U2V0PENTU1Byb3BlcnR5SUQ+JiB0cmFuc2l0aW9uUHJvcGVydGllcywgYm9vbCYgdHJhbnNpdGlv
blByb3BlcnRpZXNDb250YWluQWxsKQotewotICAgIGlmICh0cmFuc2l0aW9uUHJvcGVydGllc0Nv
bnRhaW5BbGwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIHRyYW5zaXRpb25zID0gc3R5
bGUudHJhbnNpdGlvbnMoKTsKLSAgICBpZiAoIXRyYW5zaXRpb25zKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYW5zaXRpb25zLT5zaXplKCk7ICsraSkg
ewotICAgICAgICBjb25zdCBhdXRvJiBhbmltYXRpb24gPSB0cmFuc2l0aW9ucy0+YW5pbWF0aW9u
KGkpOwotICAgICAgICBhdXRvIG1vZGUgPSBhbmltYXRpb24ucHJvcGVydHkoKS5tb2RlOwotICAg
ICAgICBpZiAobW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpTaW5nbGVQcm9wZXJ0
eSkgewotICAgICAgICAgICAgYXV0byBwcm9wZXJ0eSA9IGFuaW1hdGlvbi5wcm9wZXJ0eSgpLmlk
OwotICAgICAgICAgICAgaWYgKGlzU2hvcnRoYW5kQ1NTUHJvcGVydHkocHJvcGVydHkpKSB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChhdXRvIGxvbmdoYW5kIDogc2hvcnRoYW5kRm9yUHJvcGVydHko
cHJvcGVydHkpKQotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uUHJvcGVydGllcy5hZGQo
bG9uZ2hhbmQpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSAhPSBDU1NQcm9wZXJ0
eUludmFsaWQpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvblByb3BlcnRpZXMuYWRkKHByb3Bl
cnR5KTsKLSAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1v
ZGU6OkFsbCkgewotICAgICAgICAgICAgdHJhbnNpdGlvblByb3BlcnRpZXNDb250YWluQWxsID0g
dHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBB
bmltYXRpb25UaW1lbGluZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGVBbmRQcm9w
ZXJ0eShjb25zdCBTdHlsZWFibGUmIHN0eWxlYWJsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
Y29uc3QgUmVuZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0
eWxlLCBjb25zdCBNb25vdG9uaWNUaW1lIGdlbmVyYXRpb25UaW1lKQotewotICAgIGF1dG8qIGtl
eWZyYW1lRWZmZWN0ID0ga2V5ZnJhbWVFZmZlY3RGb3JFbGVtZW50QW5kUHJvcGVydHkoc3R5bGVh
YmxlLCBwcm9wZXJ0eSk7Ci0gICAgYXV0byogYW5pbWF0aW9uID0ga2V5ZnJhbWVFZmZlY3QgPyBr
ZXlmcmFtZUVmZmVjdC0+YW5pbWF0aW9uKCkgOiBudWxscHRyOwotCi0gICAgYm9vbCBpc0RlY2xh
cmF0aXZlID0gZmFsc2U7Ci0gICAgaWYgKGlzPERlY2xhcmF0aXZlQW5pbWF0aW9uPihhbmltYXRp
b24pKSB7Ci0gICAgICAgIGlmIChhdXRvIG93bmluZ0VsZW1lbnQgPSBkb3duY2FzdDxEZWNsYXJh
dGl2ZUFuaW1hdGlvbj4oKmFuaW1hdGlvbikub3duaW5nRWxlbWVudCgpKQotICAgICAgICAgICAg
aXNEZWNsYXJhdGl2ZSA9ICpvd25pbmdFbGVtZW50ID09IHN0eWxlYWJsZTsKLSAgICB9Ci0KLSAg
ICBpZiAoYW5pbWF0aW9uICYmICFpc0RlY2xhcmF0aXZlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBjb25zdCBBbmltYXRpb24qIG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiA9IG51bGxwdHI7Ci0g
ICAgaWYgKGF1dG8qIHRyYW5zaXRpb25zID0gbmV3U3R5bGUudHJhbnNpdGlvbnMoKSkgewotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYW5zaXRpb25zLT5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgYXV0byYgYmFja2luZ0FuaW1hdGlvbiA9IHRyYW5zaXRpb25zLT5hbmltYXRp
b24oaSk7Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlvbk1hdGNoZXNQcm9wZXJ0eShiYWNraW5n
QW5pbWF0aW9uLCBwcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgbWF0Y2hpbmdCYWNraW5nQW5p
bWF0aW9uID0gJmJhY2tpbmdBbmltYXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBB
IENTUyBUcmFuc2l0aW9uIG1pZ2h0IGhhdmUgY29tcGxldGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUg
YW5pbWF0aW9ucyB3ZXJlIHVwZGF0ZWQgc28gd2UgbXVzdAotICAgIC8vIHVwZGF0ZSB0aGUgcnVu
bmluZyBhbmQgY29tcGxldGVkIHRyYW5zaXRpb25zIG1lbWJlcnNoaXAgaW4gdGhhdCBjYXNlLgot
ICAgIGlmIChpczxDU1NUcmFuc2l0aW9uPihhbmltYXRpb24pICYmIG1hdGNoaW5nQmFja2luZ0Fu
aW1hdGlvbiAmJiBzdHlsZWFibGUuaGFzUnVubmluZ1RyYW5zaXRpb25Gb3JQcm9wZXJ0eShwcm9w
ZXJ0eSkgJiYgYW5pbWF0aW9uLT5wbGF5U3RhdGUoKSA9PSBXZWJBbmltYXRpb246OlBsYXlTdGF0
ZTo6RmluaXNoZWQpIHsKLSAgICAgICAgc3R5bGVhYmxlLmVuc3VyZUNvbXBsZXRlZFRyYW5zaXRp
b25zQnlQcm9wZXJ0eSgpLnNldChwcm9wZXJ0eSwgc3R5bGVhYmxlLmVuc3VyZVJ1bm5pbmdUcmFu
c2l0aW9uc0J5UHJvcGVydHkoKS50YWtlKHByb3BlcnR5KSk7Ci0gICAgICAgIGFuaW1hdGlvbiA9
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10
cmFuc2l0aW9ucy0xLyNiZWZvcmUtY2hhbmdlLXN0eWxlCi0gICAgLy8gRGVmaW5lIHRoZSBiZWZv
cmUtY2hhbmdlIHN0eWxlIGFzIHRoZSBjb21wdXRlZCB2YWx1ZXMgb2YgYWxsIHByb3BlcnRpZXMg
b24gdGhlIGVsZW1lbnQgYXMgb2YgdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBldmVudCwgZXhj
ZXB0IHdpdGgKLSAgICAvLyBhbnkgc3R5bGVzIGRlcml2ZWQgZnJvbSBkZWNsYXJhdGl2ZSBhbmlt
YXRpb25zIHN1Y2ggYXMgQ1NTIFRyYW5zaXRpb25zLCBDU1MgQW5pbWF0aW9ucywgYW5kIFNNSUwg
QW5pbWF0aW9ucyB1cGRhdGVkIHRvIHRoZSBjdXJyZW50IHRpbWUuCi0gICAgYXV0byBiZWZvcmVD
aGFuZ2VTdHlsZSA9IFsmXSgpIC0+IGNvbnN0IFJlbmRlclN0eWxlIHsKLSAgICAgICAgaWYgKGFu
aW1hdGlvbiAmJiBhbmltYXRpb24tPmlzUmVsZXZhbnQoKSkgewotICAgICAgICAgICAgYXV0byBh
bmltYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGN1cnJlbnRTdHlsZSk7Ci0gICAgICAg
ICAgICAvLyBJZiBhIHRyYW5zaXRpb24gaGFzIG5vdCB5ZXQgc3RhcnRlZCBvciBzdGFydGVkIHdo
ZW4gYW5pbWF0aW9ucyB3ZXJlIGxhc3QgdXBkYXRlZCwgdXNlIHRoZSB0aW1lbGluZSB0aW1lIGF0
IGl0cyBjcmVhdGlvbgotICAgICAgICAgICAgLy8gYXMgaXRzIHN0YXJ0IHRpbWUgdG8gZW5zdXJl
IHRoYXQgaXQgd2lsbCBwcm9kdWNlIGEgc3R5bGUgd2l0aCBwcm9ncmVzcyA+IDAuCi0gICAgICAg
ICAgICBib29sIHNob3VsZFVzZVRpbWVsaW5lVGltZUF0Q3JlYXRpb24gPSBpczxDU1NUcmFuc2l0
aW9uPihhbmltYXRpb24pICYmICghYW5pbWF0aW9uLT5zdGFydFRpbWUoKSB8fCAqYW5pbWF0aW9u
LT5zdGFydFRpbWUoKSA9PSBjdXJyZW50VGltZSgpKTsKLSAgICAgICAgICAgIGFuaW1hdGlvbi0+
cmVzb2x2ZShhbmltYXRlZFN0eWxlLCBudWxscHRyLCBzaG91bGRVc2VUaW1lbGluZVRpbWVBdENy
ZWF0aW9uID8gZG93bmNhc3Q8Q1NTVHJhbnNpdGlvbj4oKmFuaW1hdGlvbikudGltZWxpbmVUaW1l
QXRDcmVhdGlvbigpIDogV1RGOjpudWxsb3B0KTsKLSAgICAgICAgICAgIHJldHVybiBhbmltYXRl
ZFN0eWxlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgaXQgZXhpc3RzLCB1c2UgdGhlIHJl
Y29yZGVkIFJlbmRlclN0eWxlIGZvciB0aGlzIGVsZW1lbnQgZHVyaW5nIGEgcHJldmlvdXMgY2Fs
bCB0byBTdHlsZTo6VHJlZVJlc29sdmVyOjpjcmVhdGVBbmltYXRlZEVsZW1lbnRVcGRhdGUoKS4K
LSAgICAgICAgaWYgKGF1dG8qIGxhc3RTdHlsZUNoYW5nZUV2ZW50U3R5bGUgPSBzdHlsZWFibGUu
bGFzdFN0eWxlQ2hhbmdlRXZlbnRTdHlsZSgpKQotICAgICAgICAgICAgcmV0dXJuIFJlbmRlclN0
eWxlOjpjbG9uZSgqbGFzdFN0eWxlQ2hhbmdlRXZlbnRTdHlsZSk7Ci0KLSAgICAgICAgLy8gSWYg
d2UgaGF2ZW4ndCBjb21wdXRlZCBzdHlsZXMgZnJvbSBhbmltYXRpb25zIGZvciB0aGlzIGVsZW1l
bnQsIHRoZSBiZWZvcmUtY2hhbmdlIHN0eWxlIGlzIHRoZSBwcmV2aW91c2x5IHJlc29sdmVkIHN0
eWxlIGZvciB0aGlzIGVsZW1lbnQuCi0gICAgICAgIHJldHVybiBSZW5kZXJTdHlsZTo6Y2xvbmUo
Y3VycmVudFN0eWxlKTsKLSAgICB9KCk7Ci0KLSAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5v
cmcvY3NzLXRyYW5zaXRpb25zLTEvI2FmdGVyLWNoYW5nZS1zdHlsZQotICAgIC8vIExpa2V3aXNl
LCBkZWZpbmUgdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSBhcyB0aGUgY29tcHV0ZWQgdmFsdWVzIG9m
IGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBlbGVtZW50IGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBr
bm93biBhdCB0aGUgc3RhcnQKLSAgICAvLyBvZiB0aGF0IHN0eWxlIGNoYW5nZSBldmVudCwgYnV0
IHVzaW5nIHRoZSBjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIGFuaW1hdGlvbi0qIHByb3BlcnRpZXMg
ZnJvbSB0aGUgYmVmb3JlLWNoYW5nZSBzdHlsZSwgZXhjbHVkaW5nIGFueSBzdHlsZXMKLSAgICAv
LyBmcm9tIENTUyBUcmFuc2l0aW9ucyBpbiB0aGUgY29tcHV0YXRpb24sIGFuZCBpbmhlcml0aW5n
IGZyb20gdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSBvZiB0aGUgcGFyZW50LiBOb3RlIHRoYXQgdGhp
cyBtZWFucyB0aGUgYWZ0ZXItY2hhbmdlCi0gICAgLy8gc3R5bGUgZG9lcyBub3QgZGlmZmVyIGZy
b20gdGhlIGJlZm9yZS1jaGFuZ2Ugc3R5bGUgZHVlIHRvIG5ld2x5IGNyZWF0ZWQgb3IgY2FuY2Vs
ZWQgQ1NTIEFuaW1hdGlvbnMuCi0gICAgYXV0byBhZnRlckNoYW5nZVN0eWxlID0gWyZdKCkgLT4g
Y29uc3QgUmVuZGVyU3R5bGUgewotICAgICAgICBpZiAoaXM8Q1NTQW5pbWF0aW9uPihhbmltYXRp
b24pICYmIGFuaW1hdGlvbi0+aXNSZWxldmFudCgpKSB7Ci0gICAgICAgICAgICBhdXRvIGFuaW1h
dGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUobmV3U3R5bGUpOwotICAgICAgICAgICAgYW5p
bWF0aW9uLT5yZXNvbHZlKGFuaW1hdGVkU3R5bGUsIG51bGxwdHIpOwotICAgICAgICAgICAgcmV0
dXJuIGFuaW1hdGVkU3R5bGU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gUmVuZGVyU3R5
bGU6OmNsb25lKG5ld1N0eWxlKTsKLSAgICB9KCk7Ci0KLSAgICBpZiAoIXN0eWxlYWJsZS5oYXNS
dW5uaW5nVHJhbnNpdGlvbkZvclByb3BlcnR5KHByb3BlcnR5KQotICAgICAgICAmJiAhQ1NTUHJv
cGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgJmJlZm9yZUNoYW5nZVN0
eWxlLCAmYWZ0ZXJDaGFuZ2VTdHlsZSkKLSAgICAgICAgJiYgQ1NTUHJvcGVydHlBbmltYXRpb246
OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQocHJvcGVydHksICZiZWZvcmVDaGFuZ2VTdHlsZSwg
JmFmdGVyQ2hhbmdlU3R5bGUpCi0gICAgICAgICYmICFwcm9wZXJ0eUluU3R5bGVNYXRjaGVzVmFs
dWVGb3JUcmFuc2l0aW9uSW5NYXAocHJvcGVydHksIGFmdGVyQ2hhbmdlU3R5bGUsIHN0eWxlYWJs
ZS5lbnN1cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKSkKLSAgICAgICAgJiYgbWF0
Y2hpbmdCYWNraW5nQW5pbWF0aW9uICYmIHRyYW5zaXRpb25Db21iaW5lZER1cmF0aW9uKG1hdGNo
aW5nQmFja2luZ0FuaW1hdGlvbikgPiAwKSB7Ci0gICAgICAgIC8vIDEuIElmIGFsbCBvZiB0aGUg
Zm9sbG93aW5nIGFyZSB0cnVlOgotICAgICAgICAvLyAgIC0gdGhlIGVsZW1lbnQgZG9lcyBub3Qg
aGF2ZSBhIHJ1bm5pbmcgdHJhbnNpdGlvbiBmb3IgdGhlIHByb3BlcnR5LAotICAgICAgICAvLyAg
IC0gdGhlIGJlZm9yZS1jaGFuZ2Ugc3R5bGUgaXMgZGlmZmVyZW50IGZyb20gYW5kIGNhbiBiZSBp
bnRlcnBvbGF0ZWQgd2l0aCB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlIGZvciB0aGF0IHByb3BlcnR5
LAotICAgICAgICAvLyAgIC0gdGhlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIGNvbXBsZXRlZCB0
cmFuc2l0aW9uIGZvciB0aGUgcHJvcGVydHkgb3IgdGhlIGVuZCB2YWx1ZSBvZiB0aGUgY29tcGxl
dGVkIHRyYW5zaXRpb24gaXMgZGlmZmVyZW50IGZyb20gdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSBm
b3IgdGhlIHByb3BlcnR5LAotICAgICAgICAvLyAgIC0gdGhlcmUgaXMgYSBtYXRjaGluZyB0cmFu
c2l0aW9uLXByb3BlcnR5IHZhbHVlLCBhbmQKLSAgICAgICAgLy8gICAtIHRoZSBjb21iaW5lZCBk
dXJhdGlvbiBpcyBncmVhdGVyIHRoYW4gMHMsCi0KLSAgICAgICAgLy8gdGhlbiBpbXBsZW1lbnRh
dGlvbnMgbXVzdCByZW1vdmUgdGhlIGNvbXBsZXRlZCB0cmFuc2l0aW9uIChpZiBwcmVzZW50KSBm
cm9tIHRoZSBzZXQgb2YgY29tcGxldGVkIHRyYW5zaXRpb25zCi0gICAgICAgIHN0eWxlYWJsZS5l
bnN1cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS5yZW1vdmUocHJvcGVydHkpOwot
Ci0gICAgICAgIC8vIGFuZCBzdGFydCBhIHRyYW5zaXRpb24gd2hvc2U6Ci0gICAgICAgIC8vICAg
LSBzdGFydCB0aW1lIGlzIHRoZSB0aW1lIG9mIHRoZSBzdHlsZSBjaGFuZ2UgZXZlbnQgcGx1cyB0
aGUgbWF0Y2hpbmcgdHJhbnNpdGlvbiBkZWxheSwKLSAgICAgICAgLy8gICAtIGVuZCB0aW1lIGlz
IHRoZSBzdGFydCB0aW1lIHBsdXMgdGhlIG1hdGNoaW5nIHRyYW5zaXRpb24gZHVyYXRpb24sCi0g
ICAgICAgIC8vICAgLSBzdGFydCB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhlIHRyYW5zaXRpb25p
bmcgcHJvcGVydHkgaW4gdGhlIGJlZm9yZS1jaGFuZ2Ugc3R5bGUsCi0gICAgICAgIC8vICAgLSBl
bmQgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoZSB0cmFuc2l0aW9uaW5nIHByb3BlcnR5IGluIHRo
ZSBhZnRlci1jaGFuZ2Ugc3R5bGUsCi0gICAgICAgIC8vICAgLSByZXZlcnNpbmctYWRqdXN0ZWQg
c3RhcnQgdmFsdWUgaXMgdGhlIHNhbWUgYXMgdGhlIHN0YXJ0IHZhbHVlLCBhbmQKLSAgICAgICAg
Ly8gICAtIHJldmVyc2luZyBzaG9ydGVuaW5nIGZhY3RvciBpcyAxLgotICAgICAgICBhdXRvIGRl
bGF5ID0gU2Vjb25kcyhtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24tPmRlbGF5KCkpOwotICAgICAg
ICBhdXRvIGR1cmF0aW9uID0gU2Vjb25kcyhtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24tPmR1cmF0
aW9uKCkpOwotICAgICAgICBhdXRvJiByZXZlcnNpbmdBZGp1c3RlZFN0YXJ0U3R5bGUgPSBiZWZv
cmVDaGFuZ2VTdHlsZTsKLSAgICAgICAgYXV0byByZXZlcnNpbmdTaG9ydGVuaW5nRmFjdG9yID0g
MTsKLSAgICAgICAgc3R5bGVhYmxlLmVuc3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHko
KS5zZXQocHJvcGVydHksIENTU1RyYW5zaXRpb246OmNyZWF0ZShzdHlsZWFibGUsIHByb3BlcnR5
LCBnZW5lcmF0aW9uVGltZSwgKm1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiwgJmJlZm9yZUNoYW5n
ZVN0eWxlLCBhZnRlckNoYW5nZVN0eWxlLCBkZWxheSwgZHVyYXRpb24sIHJldmVyc2luZ0FkanVz
dGVkU3RhcnRTdHlsZSwgcmV2ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvcikpOwotICAgIH0gZWxzZSBp
ZiAoc3R5bGVhYmxlLmhhc0NvbXBsZXRlZFRyYW5zaXRpb25Gb3JQcm9wZXJ0eShwcm9wZXJ0eSkg
JiYgIXByb3BlcnR5SW5TdHlsZU1hdGNoZXNWYWx1ZUZvclRyYW5zaXRpb25Jbk1hcChwcm9wZXJ0
eSwgYWZ0ZXJDaGFuZ2VTdHlsZSwgc3R5bGVhYmxlLmVuc3VyZUNvbXBsZXRlZFRyYW5zaXRpb25z
QnlQcm9wZXJ0eSgpKSkgewotICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBlbGVtZW50
IGhhcyBhIGNvbXBsZXRlZCB0cmFuc2l0aW9uIGZvciB0aGUgcHJvcGVydHkgYW5kIHRoZSBlbmQg
dmFsdWUgb2YgdGhlIGNvbXBsZXRlZCB0cmFuc2l0aW9uIGlzIGRpZmZlcmVudCBmcm9tCi0gICAg
ICAgIC8vICAgIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUgZm9yIHRoZSBwcm9wZXJ0eSwgdGhlbiBp
bXBsZW1lbnRhdGlvbnMgbXVzdCByZW1vdmUgdGhlIGNvbXBsZXRlZCB0cmFuc2l0aW9uIGZyb20g
dGhlIHNldCBvZiBjb21wbGV0ZWQgdHJhbnNpdGlvbnMuCi0gICAgICAgIHN0eWxlYWJsZS5lbnN1
cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS5yZW1vdmUocHJvcGVydHkpOwotICAg
IH0KLQotICAgIGJvb2wgaGFzUnVubmluZ1RyYW5zaXRpb24gPSBzdHlsZWFibGUuaGFzUnVubmlu
Z1RyYW5zaXRpb25Gb3JQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgaWYgKChoYXNSdW5uaW5nVHJh
bnNpdGlvbiB8fCBzdHlsZWFibGUuaGFzQ29tcGxldGVkVHJhbnNpdGlvbkZvclByb3BlcnR5KHBy
b3BlcnR5KSkgJiYgIW1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbikgewotICAgICAgICAvLyAzLiBJ
ZiB0aGUgZWxlbWVudCBoYXMgYSBydW5uaW5nIHRyYW5zaXRpb24gb3IgY29tcGxldGVkIHRyYW5z
aXRpb24gZm9yIHRoZSBwcm9wZXJ0eSwgYW5kIHRoZXJlIGlzIG5vdCBhIG1hdGNoaW5nIHRyYW5z
aXRpb24tcHJvcGVydHkKLSAgICAgICAgLy8gICAgdmFsdWUsIHRoZW4gaW1wbGVtZW50YXRpb25z
IG11c3QgY2FuY2VsIHRoZSBydW5uaW5nIHRyYW5zaXRpb24gb3IgcmVtb3ZlIHRoZSBjb21wbGV0
ZWQgdHJhbnNpdGlvbiBmcm9tIHRoZSBzZXQgb2YgY29tcGxldGVkIHRyYW5zaXRpb25zLgotICAg
ICAgICBpZiAoaGFzUnVubmluZ1RyYW5zaXRpb24pCi0gICAgICAgICAgICBzdHlsZWFibGUuZW5z
dXJlUnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSgpLnRha2UocHJvcGVydHkpLT5jYW5jZWwo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3R5bGVhYmxlLmVuc3VyZUNvbXBsZXRlZFRy
YW5zaXRpb25zQnlQcm9wZXJ0eSgpLnJlbW92ZShwcm9wZXJ0eSk7Ci0gICAgfQotCi0gICAgaWYg
KG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiAmJiBzdHlsZWFibGUuaGFzUnVubmluZ1RyYW5zaXRp
b25Gb3JQcm9wZXJ0eShwcm9wZXJ0eSkgJiYgIXByb3BlcnR5SW5TdHlsZU1hdGNoZXNWYWx1ZUZv
clRyYW5zaXRpb25Jbk1hcChwcm9wZXJ0eSwgYWZ0ZXJDaGFuZ2VTdHlsZSwgc3R5bGVhYmxlLmVu
c3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKSkpIHsKLSAgICAgICAgYXV0byBwcmV2
aW91c2x5UnVubmluZ1RyYW5zaXRpb24gPSBzdHlsZWFibGUuZW5zdXJlUnVubmluZ1RyYW5zaXRp
b25zQnlQcm9wZXJ0eSgpLnRha2UocHJvcGVydHkpOwotICAgICAgICBhdXRvJiBwcmV2aW91c2x5
UnVubmluZ1RyYW5zaXRpb25DdXJyZW50U3R5bGUgPSBwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRp
b24tPmN1cnJlbnRTdHlsZSgpOwotICAgICAgICAvLyA0LiBJZiB0aGUgZWxlbWVudCBoYXMgYSBy
dW5uaW5nIHRyYW5zaXRpb24gZm9yIHRoZSBwcm9wZXJ0eSwgdGhlcmUgaXMgYSBtYXRjaGluZyB0
cmFuc2l0aW9uLXByb3BlcnR5IHZhbHVlLCBhbmQgdGhlIGVuZCB2YWx1ZSBvZiB0aGUgcnVubmlu
ZwotICAgICAgICAvLyAgICB0cmFuc2l0aW9uIGlzIG5vdCBlcXVhbCB0byB0aGUgdmFsdWUgb2Yg
dGhlIHByb3BlcnR5IGluIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUsIHRoZW46Ci0gICAgICAgIGlm
IChDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKHByb3BlcnR5LCAmcHJldmlv
dXNseVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlLCAmYWZ0ZXJDaGFuZ2VTdHlsZSkgfHwg
IUNTU1Byb3BlcnR5QW5pbWF0aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKHByb3BlcnR5
LCAmY3VycmVudFN0eWxlLCAmYWZ0ZXJDaGFuZ2VTdHlsZSkpIHsKLSAgICAgICAgICAgIC8vIDEu
IElmIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgcnVubmluZyB0cmFu
c2l0aW9uIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGFmdGVy
LWNoYW5nZSBzdHlsZSwKLSAgICAgICAgICAgIC8vICAgIG9yIGlmIHRoZXNlIHR3byB2YWx1ZXMg
Y2Fubm90IGJlIGludGVycG9sYXRlZCwgdGhlbiBpbXBsZW1lbnRhdGlvbnMgbXVzdCBjYW5jZWwg
dGhlIHJ1bm5pbmcgdHJhbnNpdGlvbi4KLSAgICAgICAgICAgIHByZXZpb3VzbHlSdW5uaW5nVHJh
bnNpdGlvbi0+Y2FuY2VsRnJvbVN0eWxlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodHJhbnNpdGlv
bkNvbWJpbmVkRHVyYXRpb24obWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uKSA8PSAwLjAgfHwgIUNT
U1Byb3BlcnR5QW5pbWF0aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKHByb3BlcnR5LCAm
cHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlLCAmYWZ0ZXJDaGFuZ2VTdHls
ZSkpIHsKLSAgICAgICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlIGNvbWJpbmVkIGR1cmF0
aW9uIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwcywgb3IgaWYgdGhlIGN1cnJlbnQgdmFsdWUg
b2YgdGhlIHByb3BlcnR5IGluIHRoZSBydW5uaW5nIHRyYW5zaXRpb24KLSAgICAgICAgICAgIC8v
ICAgIGNhbm5vdCBiZSBpbnRlcnBvbGF0ZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5
IGluIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUsIHRoZW4gaW1wbGVtZW50YXRpb25zIG11c3QgY2Fu
Y2VsIHRoZSBydW5uaW5nIHRyYW5zaXRpb24uCi0gICAgICAgICAgICBwcmV2aW91c2x5UnVubmlu
Z1RyYW5zaXRpb24tPmNhbmNlbEZyb21TdHlsZSgpOwotICAgICAgICB9IGVsc2UgaWYgKENTU1By
b3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcGVydHksICZwcmV2aW91c2x5UnVu
bmluZ1RyYW5zaXRpb24tPnJldmVyc2luZ0FkanVzdGVkU3RhcnRTdHlsZSgpLCAmYWZ0ZXJDaGFu
Z2VTdHlsZSkpIHsKLSAgICAgICAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgdGhlIHJldmVyc2lu
Zy1hZGp1c3RlZCBzdGFydCB2YWx1ZSBvZiB0aGUgcnVubmluZyB0cmFuc2l0aW9uIGlzIHRoZSBz
YW1lIGFzIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGFmdGVyLWNoYW5nZQotICAg
ICAgICAgICAgLy8gICAgc3R5bGUgKHNlZSB0aGUgc2VjdGlvbiBvbiByZXZlcnNpbmcgb2YgdHJh
bnNpdGlvbnMgZm9yIHdoeSB0aGVzZSBjYXNlIGV4aXN0cyksIGltcGxlbWVudGF0aW9ucyBtdXN0
IGNhbmNlbCB0aGUgcnVubmluZyB0cmFuc2l0aW9uCi0gICAgICAgICAgICBwcmV2aW91c2x5UnVu
bmluZ1RyYW5zaXRpb24tPmNhbmNlbEZyb21TdHlsZSgpOwotCi0gICAgICAgICAgICAvLyBhbmQg
c3RhcnQgYSBuZXcgdHJhbnNpdGlvbiB3aG9zZToKLSAgICAgICAgICAgIC8vICAgLSByZXZlcnNp
bmctYWRqdXN0ZWQgc3RhcnQgdmFsdWUgaXMgdGhlIGVuZCB2YWx1ZSBvZiB0aGUgcnVubmluZyB0
cmFuc2l0aW9uLAotICAgICAgICAgICAgLy8gICAtIHJldmVyc2luZyBzaG9ydGVuaW5nIGZhY3Rv
ciBpcyB0aGUgYWJzb2x1dGUgdmFsdWUsIGNsYW1wZWQgdG8gdGhlIHJhbmdlIFswLCAxXSwgb2Yg
dGhlIHN1bSBvZjoKLSAgICAgICAgICAgIC8vICAgICAgIDEuIHRoZSBvdXRwdXQgb2YgdGhlIHRp
bWluZyBmdW5jdGlvbiBvZiB0aGUgb2xkIHRyYW5zaXRpb24gYXQgdGhlIHRpbWUgb2YgdGhlIHN0
eWxlIGNoYW5nZSBldmVudCwgdGltZXMgdGhlIHJldmVyc2luZyBzaG9ydGVuaW5nIGZhY3RvciBv
ZiB0aGUgb2xkIHRyYW5zaXRpb24KLSAgICAgICAgICAgIC8vICAgICAgIDIuIDEgbWludXMgdGhl
IHJldmVyc2luZyBzaG9ydGVuaW5nIGZhY3RvciBvZiB0aGUgb2xkIHRyYW5zaXRpb24uCi0gICAg
ICAgICAgICAvLyAgIC0gc3RhcnQgdGltZSBpcyB0aGUgdGltZSBvZiB0aGUgc3R5bGUgY2hhbmdl
IGV2ZW50IHBsdXM6Ci0gICAgICAgICAgICAvLyAgICAgICAxLiBpZiB0aGUgbWF0Y2hpbmcgdHJh
bnNpdGlvbiBkZWxheSBpcyBub25uZWdhdGl2ZSwgdGhlIG1hdGNoaW5nIHRyYW5zaXRpb24gZGVs
YXksIG9yCi0gICAgICAgICAgICAvLyAgICAgICAyLiBpZiB0aGUgbWF0Y2hpbmcgdHJhbnNpdGlv
biBkZWxheSBpcyBuZWdhdGl2ZSwgdGhlIHByb2R1Y3Qgb2YgdGhlIG5ldyB0cmFuc2l0aW9u4oCZ
cyByZXZlcnNpbmcgc2hvcnRlbmluZyBmYWN0b3IgYW5kIHRoZSBtYXRjaGluZyB0cmFuc2l0aW9u
IGRlbGF5LAotICAgICAgICAgICAgLy8gICAtIGVuZCB0aW1lIGlzIHRoZSBzdGFydCB0aW1lIHBs
dXMgdGhlIHByb2R1Y3Qgb2YgdGhlIG1hdGNoaW5nIHRyYW5zaXRpb24gZHVyYXRpb24gYW5kIHRo
ZSBuZXcgdHJhbnNpdGlvbuKAmXMgcmV2ZXJzaW5nIHNob3J0ZW5pbmcgZmFjdG9yLAotICAgICAg
ICAgICAgLy8gICAtIHN0YXJ0IHZhbHVlIGlzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9w
ZXJ0eSBpbiB0aGUgcnVubmluZyB0cmFuc2l0aW9uLAotICAgICAgICAgICAgLy8gICAtIGVuZCB2
YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBhZnRlci1jaGFuZ2Ugc3R5
bGUKLSAgICAgICAgICAgIGF1dG8mIHJldmVyc2luZ0FkanVzdGVkU3RhcnRTdHlsZSA9IHByZXZp
b3VzbHlSdW5uaW5nVHJhbnNpdGlvbi0+dGFyZ2V0U3R5bGUoKTsKLSAgICAgICAgICAgIGRvdWJs
ZSB0cmFuc2Zvcm1lZFByb2dyZXNzID0gMTsKLSAgICAgICAgICAgIGlmIChhdXRvKiBlZmZlY3Qg
PSBwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb24tPmVmZmVjdCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGF1dG8gY29tcHV0ZWRUaW1pbmdQcm9ncmVzcyA9IGVmZmVjdC0+Z2V0Q29tcHV0ZWRU
aW1pbmcoKS5wcm9ncmVzcykKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRQcm9ncmVz
cyA9ICpjb21wdXRlZFRpbWluZ1Byb2dyZXNzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YXV0byByZXZlcnNpbmdTaG9ydGVuaW5nRmFjdG9yID0gc3RkOjptYXgoc3RkOjptaW4oKCh0cmFu
c2Zvcm1lZFByb2dyZXNzICogcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5yZXZlcnNpbmdT
aG9ydGVuaW5nRmFjdG9yKCkpICsgKDEgLSBwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb24tPnJl
dmVyc2luZ1Nob3J0ZW5pbmdGYWN0b3IoKSkpLCAxLjApLCAwLjApOwotICAgICAgICAgICAgYXV0
byBkZWxheSA9IG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbi0+ZGVsYXkoKSA8IDAgPyBTZWNvbmRz
KG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbi0+ZGVsYXkoKSkgKiByZXZlcnNpbmdTaG9ydGVuaW5n
RmFjdG9yIDogU2Vjb25kcyhtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24tPmRlbGF5KCkpOwotICAg
ICAgICAgICAgYXV0byBkdXJhdGlvbiA9IFNlY29uZHMobWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9u
LT5kdXJhdGlvbigpKSAqIHJldmVyc2luZ1Nob3J0ZW5pbmdGYWN0b3I7Ci0KLSAgICAgICAgICAg
IHN0eWxlYWJsZS5lbnN1cmVSdW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkuc2V0KHByb3Bl
cnR5LCBDU1NUcmFuc2l0aW9uOjpjcmVhdGUoc3R5bGVhYmxlLCBwcm9wZXJ0eSwgZ2VuZXJhdGlv
blRpbWUsICptYXRjaGluZ0JhY2tpbmdBbmltYXRpb24sICZwcmV2aW91c2x5UnVubmluZ1RyYW5z
aXRpb25DdXJyZW50U3R5bGUsIGFmdGVyQ2hhbmdlU3R5bGUsIGRlbGF5LCBkdXJhdGlvbiwgcmV2
ZXJzaW5nQWRqdXN0ZWRTdGFydFN0eWxlLCByZXZlcnNpbmdTaG9ydGVuaW5nRmFjdG9yKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyA0LiBPdGhlcndpc2UsIGltcGxlbWVudGF0
aW9ucyBtdXN0IGNhbmNlbCB0aGUgcnVubmluZyB0cmFuc2l0aW9uCi0gICAgICAgICAgICBwcmV2
aW91c2x5UnVubmluZ1RyYW5zaXRpb24tPmNhbmNlbEZyb21TdHlsZSgpOwotCi0gICAgICAgICAg
ICAvLyBhbmQgc3RhcnQgYSBuZXcgdHJhbnNpdGlvbiB3aG9zZToKLSAgICAgICAgICAgIC8vICAg
LSBzdGFydCB0aW1lIGlzIHRoZSB0aW1lIG9mIHRoZSBzdHlsZSBjaGFuZ2UgZXZlbnQgcGx1cyB0
aGUgbWF0Y2hpbmcgdHJhbnNpdGlvbiBkZWxheSwKLSAgICAgICAgICAgIC8vICAgLSBlbmQgdGlt
ZSBpcyB0aGUgc3RhcnQgdGltZSBwbHVzIHRoZSBtYXRjaGluZyB0cmFuc2l0aW9uIGR1cmF0aW9u
LAotICAgICAgICAgICAgLy8gICAtIHN0YXJ0IHZhbHVlIGlzIHRoZSBjdXJyZW50IHZhbHVlIG9m
IHRoZSBwcm9wZXJ0eSBpbiB0aGUgcnVubmluZyB0cmFuc2l0aW9uLAotICAgICAgICAgICAgLy8g
ICAtIGVuZCB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBhZnRlci1j
aGFuZ2Ugc3R5bGUsCi0gICAgICAgICAgICAvLyAgIC0gcmV2ZXJzaW5nLWFkanVzdGVkIHN0YXJ0
IHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBzdGFydCB2YWx1ZSwgYW5kCi0gICAgICAgICAgICAv
LyAgIC0gcmV2ZXJzaW5nIHNob3J0ZW5pbmcgZmFjdG9yIGlzIDEuCi0gICAgICAgICAgICBhdXRv
IGRlbGF5ID0gU2Vjb25kcyhtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24tPmRlbGF5KCkpOwotICAg
ICAgICAgICAgYXV0byBkdXJhdGlvbiA9IFNlY29uZHMobWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9u
LT5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIGF1dG8mIHJldmVyc2luZ0FkanVzdGVkU3RhcnRT
dHlsZSA9IGN1cnJlbnRTdHlsZTsKLSAgICAgICAgICAgIGF1dG8gcmV2ZXJzaW5nU2hvcnRlbmlu
Z0ZhY3RvciA9IDE7Ci0gICAgICAgICAgICBzdHlsZWFibGUuZW5zdXJlUnVubmluZ1RyYW5zaXRp
b25zQnlQcm9wZXJ0eSgpLnNldChwcm9wZXJ0eSwgQ1NTVHJhbnNpdGlvbjo6Y3JlYXRlKHN0eWxl
YWJsZSwgcHJvcGVydHksIGdlbmVyYXRpb25UaW1lLCAqbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9u
LCAmcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlLCBhZnRlckNoYW5nZVN0
eWxlLCBkZWxheSwgZHVyYXRpb24sIHJldmVyc2luZ0FkanVzdGVkU3RhcnRTdHlsZSwgcmV2ZXJz
aW5nU2hvcnRlbmluZ0ZhY3RvcikpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEFuaW1h
dGlvblRpbWVsaW5lOjp1cGRhdGVDU1NUcmFuc2l0aW9uc0ZvclN0eWxlYWJsZShjb25zdCBTdHls
ZWFibGUmIHN0eWxlYWJsZSwgY29uc3QgUmVuZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUmIG5ld1N0eWxlKQotewotICAgIC8vIEluIGNhc2UgdGhpcyBlbGVtZW50IGlz
IG5ld2x5IGdldHRpbmcgYSAiZGlzcGxheTogbm9uZSIgd2UgbmVlZCB0byBjYW5jZWwgYWxsIG9m
IGl0cyB0cmFuc2l0aW9ucyBhbmQgZGlzcmVnYXJkIG5ldyBvbmVzLgotICAgIGlmIChjdXJyZW50
U3R5bGUuaGFzVHJhbnNpdGlvbnMoKSAmJiBjdXJyZW50U3R5bGUuZGlzcGxheSgpICE9IERpc3Bs
YXlUeXBlOjpOb25lICYmIG5ld1N0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6Tm9uZSkg
ewotICAgICAgICBpZiAoc3R5bGVhYmxlLmhhc1J1bm5pbmdUcmFuc2l0aW9ucygpKSB7Ci0gICAg
ICAgICAgICBhdXRvIHJ1bm5pbmdUcmFuc2l0aW9ucyA9IHN0eWxlYWJsZS5lbnN1cmVSdW5uaW5n
VHJhbnNpdGlvbnNCeVByb3BlcnR5KCk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNz
c1RyYW5zaXRpb25zQnlDU1NQcm9wZXJ0eUlETWFwSXRlbSA6IHJ1bm5pbmdUcmFuc2l0aW9ucykK
LSAgICAgICAgICAgICAgICBjc3NUcmFuc2l0aW9uc0J5Q1NTUHJvcGVydHlJRE1hcEl0ZW0udmFs
dWUtPmNhbmNlbEZyb21TdHlsZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBTZWN0aW9uIDMgIlN0YXJ0aW5nIG9mIHRyYW5zaXRpb25zIiBmcm9tIHRoZSBD
U1MgVHJhbnNpdGlvbnMgTGV2ZWwgMSBzcGVjaWZpY2F0aW9uLgotICAgIC8vIGh0dHBzOi8vZHJh
ZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNpdGlvbnMtMS8jc3RhcnRpbmcKLQotICAgIGF1dG8gZ2Vu
ZXJhdGlvblRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLQotICAgIC8vIEZpcnN0LCBsZXQn
cyBjb21waWxlIHRoZSBsaXN0IG9mIGFsbCBDU1MgcHJvcGVydGllcyBmb3VuZCBpbiB0aGUgY3Vy
cmVudCBzdHlsZSBhbmQgdGhlIGFmdGVyLWNoYW5nZSBzdHlsZS4KLSAgICBib29sIHRyYW5zaXRp
b25Qcm9wZXJ0aWVzQ29udGFpbkFsbCA9IGZhbHNlOwotICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4gdHJhbnNpdGlvblByb3BlcnRpZXM7Ci0gICAgY29tcGlsZVRyYW5zaXRpb25Qcm9wZXJ0aWVz
SW5TdHlsZShjdXJyZW50U3R5bGUsIHRyYW5zaXRpb25Qcm9wZXJ0aWVzLCB0cmFuc2l0aW9uUHJv
cGVydGllc0NvbnRhaW5BbGwpOwotICAgIGNvbXBpbGVUcmFuc2l0aW9uUHJvcGVydGllc0luU3R5
bGUobmV3U3R5bGUsIHRyYW5zaXRpb25Qcm9wZXJ0aWVzLCB0cmFuc2l0aW9uUHJvcGVydGllc0Nv
bnRhaW5BbGwpOwotCi0gICAgaWYgKHRyYW5zaXRpb25Qcm9wZXJ0aWVzQ29udGFpbkFsbCkgewot
ICAgICAgICBhdXRvIG51bWJlck9mUHJvcGVydGllcyA9IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpn
ZXROdW1Qcm9wZXJ0aWVzKCk7Ci0gICAgICAgIGZvciAoaW50IHByb3BlcnR5SW5kZXggPSAwOyBw
cm9wZXJ0eUluZGV4IDwgbnVtYmVyT2ZQcm9wZXJ0aWVzOyArK3Byb3BlcnR5SW5kZXgpIHsKLSAg
ICAgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzU2hvcnRoYW5kOwotICAgICAgICAgICAgYXV0byBw
cm9wZXJ0eSA9IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpnZXRQcm9wZXJ0eUF0SW5kZXgocHJvcGVy
dHlJbmRleCwgaXNTaG9ydGhhbmQpOwotICAgICAgICAgICAgaWYgKGlzU2hvcnRoYW5kICYmICpp
c1Nob3J0aGFuZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHVwZGF0
ZUNTU1RyYW5zaXRpb25zRm9yU3R5bGVhYmxlQW5kUHJvcGVydHkoc3R5bGVhYmxlLCBwcm9wZXJ0
eSwgY3VycmVudFN0eWxlLCBuZXdTdHlsZSwgZ2VuZXJhdGlvblRpbWUpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8gcHJvcGVydHkgOiB0cmFuc2l0
aW9uUHJvcGVydGllcykKLSAgICAgICAgdXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGVB
bmRQcm9wZXJ0eShzdHlsZWFibGUsIHByb3BlcnR5LCBjdXJyZW50U3R5bGUsIG5ld1N0eWxlLCBn
ZW5lcmF0aW9uVGltZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5oIGIvU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmgKaW5kZXggZmEwZjlhMjYyZWYxNTE2
ODY4NzhkZTJhODVlYjhhNDQzNGExN2M4Mi4uNmFlNzY2OWY0ZTEyMzE2YTYzY2JlNGU0ZDY2NDMz
YmVkNDc2OGM1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlv
blRpbWVsaW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVs
aW5lLmgKQEAgLTI2LDE0ICsyNiw5IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ1NT
VmFsdWUuaCIKLSNpbmNsdWRlICJDb21wdXRlZEVmZmVjdFRpbWluZy5oIgogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU3R5bGVhYmxlLmgiCiAjaW5jbHVkZSAiV2ViQW5pbWF0
aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KQEAgLTQy
LDEwICszNyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTQW5pbWF0aW9u
OwotY2xhc3MgQ1NTVHJhbnNpdGlvbjsKLWNsYXNzIERlY2xhcmF0aXZlQW5pbWF0aW9uOwotCiBj
bGFzcyBBbmltYXRpb25UaW1lbGluZSA6IHB1YmxpYyBSZWZDb3VudGVkPEFuaW1hdGlvblRpbWVs
aW5lPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPEFuaW1hdGlvblRpbWVsaW5lPiB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+QW5pbWF0aW9uVGltZWxpbmUoKTsKQEAgLTYxLDE5ICs1Miw2IEBAIHB1
YmxpYzoKICAgICBPcHRpb25hbDxkb3VibGU+IGJpbmRpbmdzQ3VycmVudFRpbWUoKTsKICAgICB2
aXJ0dWFsIE9wdGlvbmFsPFNlY29uZHM+IGN1cnJlbnRUaW1lKCkgeyByZXR1cm4gbV9jdXJyZW50
VGltZTsgfQogCi0gICAgdm9pZCBlbGVtZW50V2FzUmVtb3ZlZChjb25zdCBTdHlsZWFibGUmKTsK
LQotICAgIHZvaWQgd2lsbENoYW5nZVJlbmRlcmVyRm9yU3R5bGVhYmxlKGNvbnN0IFN0eWxlYWJs
ZSYpOwotICAgIHZvaWQgY2FuY2VsRGVjbGFyYXRpdmVBbmltYXRpb25zRm9yU3R5bGVhYmxlKGNv
bnN0IFN0eWxlYWJsZSYpOwotCi0gICAgdm9pZCBhbmltYXRpb25XYXNBZGRlZFRvU3R5bGVhYmxl
KFdlYkFuaW1hdGlvbiYsIGNvbnN0IFN0eWxlYWJsZSYpOwotICAgIHZvaWQgYW5pbWF0aW9uV2Fz
UmVtb3ZlZEZyb21TdHlsZWFibGUoV2ViQW5pbWF0aW9uJiwgY29uc3QgU3R5bGVhYmxlJik7Ci0K
LSAgICB2b2lkIHJlbW92ZURlY2xhcmF0aXZlQW5pbWF0aW9uRnJvbUxpc3RzRm9yT3duaW5nRWxl
bWVudChXZWJBbmltYXRpb24mLCBjb25zdCBTdHlsZWFibGUmKTsKLQotICAgIHZvaWQgdXBkYXRl
Q1NTQW5pbWF0aW9uc0ZvclN0eWxlYWJsZShjb25zdCBTdHlsZWFibGUmLCBjb25zdCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgYWZ0ZXJDaGFuZ2VTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudEVsZW1lbnRTdHlsZSk7Ci0gICAgdm9pZCB1cGRhdGVD
U1NUcmFuc2l0aW9uc0ZvclN0eWxlYWJsZShjb25zdCBTdHlsZWFibGUmLCBjb25zdCBSZW5kZXJT
dHlsZSYgY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpOwotCiBwcm90
ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQW5pbWF0aW9uVGltZWxpbmUoKTsKIApAQCAtODIsOCArNjAs
NiBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVHbG9iYWxQb3NpdGlv
bihXZWJBbmltYXRpb24mKTsKLSAgICB2b2lkIHVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yU3R5bGVh
YmxlQW5kUHJvcGVydHkoY29uc3QgU3R5bGVhYmxlJiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVu
ZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIGFmdGVyQ2hhbmdlU3R5
bGUsIGNvbnN0IE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgcmVtb3ZlQ1NTQW5pbWF0aW9uQ3Jl
YXRlZEJ5TWFya3VwKGNvbnN0IFN0eWxlYWJsZSYsIENTU0FuaW1hdGlvbiYpOwogCiAgICAgTWFy
a2FibGU8U2Vjb25kcywgU2Vjb25kczo6TWFya2FibGVUcmFpdHM+IG1fY3VycmVudFRpbWU7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RlY2xhcmF0aXZlQW5pbWF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9EZWNsYXJhdGl2ZUFuaW1hdGlvbi5j
cHAKaW5kZXggOWFmNjRiNTVmODFjYzk0MjQ4ZDEzMjYyN2MwNGRmZDkzMmRmNmJhMC4uN2E2NDRk
M2NhZDJhOTkwMjczY2ZhYWMwYTdlMmJlNmE4OTMwN2JhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL0RlY2xhcmF0aXZlQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vRGVjbGFyYXRpdmVBbmltYXRpb24uY3BwCkBAIC05NSw4ICs5NSw3IEBA
IHZvaWQgRGVjbGFyYXRpdmVBbmltYXRpb246OmRpc2Fzc29jaWF0ZUZyb21Pd25pbmdFbGVtZW50
KCkKICAgICBpZiAoIW1fb3duaW5nRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGF1dG8qIGFuaW1hdGlvblRpbWVsaW5lID0gdGltZWxpbmUoKSkKLSAgICAgICAgYW5pbWF0aW9u
VGltZWxpbmUtPnJlbW92ZURlY2xhcmF0aXZlQW5pbWF0aW9uRnJvbUxpc3RzRm9yT3duaW5nRWxl
bWVudCgqdGhpcywgKm93bmluZ0VsZW1lbnQoKSk7CisgICAgb3duaW5nRWxlbWVudCgpLT5yZW1v
dmVEZWNsYXJhdGl2ZUFuaW1hdGlvbkZyb21MaXN0c0Zvck93bmluZ0VsZW1lbnQoKnRoaXMpOwog
ICAgIG1fb3duaW5nRWxlbWVudCA9IG51bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL1dlYkFuaW1hdGlvbi5jcHAKaW5kZXggY2QxNTllMTYyZGRmN2ZhOWIzZTA1MTA3MWRmOTNi
MTFjZDFmYmJjYi4uOTBmZTI5YWJiMzMzOTY0ODdmYmQ3NmJkZWQ2Mjg3ZWYyODQ4Y2VhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5jcHAKQEAgLTIxMiwxNSArMjEy
LDE1IEBAIHZvaWQgV2ViQW5pbWF0aW9uOjpzZXRFZmZlY3RJbnRlcm5hbChSZWZQdHI8QW5pbWF0
aW9uRWZmZWN0PiYmIG5ld0VmZmVjdCwgYm9vbCBkCiAgICAgLy8gVXBkYXRlIHRoZSBlZmZlY3Qt
dG8tYW5pbWF0aW9uIHJlbGF0aW9uc2hpcHMgYW5kIHRoZSB0aW1lbGluZSdzIGFuaW1hdGlvbiBt
YXAuCiAgICAgaWYgKG9sZEVmZmVjdCkgewogICAgICAgICBvbGRFZmZlY3QtPnNldEFuaW1hdGlv
bihudWxscHRyKTsKLSAgICAgICAgaWYgKCFkb05vdFJlbW92ZUZyb21UaW1lbGluZSAmJiBtX3Rp
bWVsaW5lICYmIHByZXZpb3VzVGFyZ2V0ICYmIHByZXZpb3VzVGFyZ2V0ICE9IG5ld1RhcmdldCkK
LSAgICAgICAgICAgIG1fdGltZWxpbmUtPmFuaW1hdGlvbldhc1JlbW92ZWRGcm9tU3R5bGVhYmxl
KCp0aGlzLCAqcHJldmlvdXNUYXJnZXQpOworICAgICAgICBpZiAoIWRvTm90UmVtb3ZlRnJvbVRp
bWVsaW5lICYmIHByZXZpb3VzVGFyZ2V0ICYmIHByZXZpb3VzVGFyZ2V0ICE9IG5ld1RhcmdldCkK
KyAgICAgICAgICAgIHByZXZpb3VzVGFyZ2V0LT5hbmltYXRpb25XYXNSZW1vdmVkKCp0aGlzKTsK
ICAgICAgICAgdXBkYXRlUmVsZXZhbmNlKCk7CiAgICAgfQogCiAgICAgaWYgKG1fZWZmZWN0KSB7
CiAgICAgICAgIG1fZWZmZWN0LT5zZXRBbmltYXRpb24odGhpcyk7Ci0gICAgICAgIGlmIChtX3Rp
bWVsaW5lICYmIG5ld1RhcmdldCAmJiBwcmV2aW91c1RhcmdldCAhPSBuZXdUYXJnZXQpCi0gICAg
ICAgICAgICBtX3RpbWVsaW5lLT5hbmltYXRpb25XYXNBZGRlZFRvU3R5bGVhYmxlKCp0aGlzLCAq
bmV3VGFyZ2V0KTsKKyAgICAgICAgaWYgKG5ld1RhcmdldCAmJiBwcmV2aW91c1RhcmdldCAhPSBu
ZXdUYXJnZXQpCisgICAgICAgICAgICBuZXdUYXJnZXQtPmFuaW1hdGlvbldhc0FkZGVkKCp0aGlz
KTsKICAgICB9CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNldFdlYkFuaW1h
dGlvbkVmZmVjdCgqdGhpcyk7CkBAIC0yNDQsMTAgKzI0NCw5IEBAIHZvaWQgV2ViQW5pbWF0aW9u
OjpzZXRUaW1lbGluZShSZWZQdHI8QW5pbWF0aW9uVGltZWxpbmU+JiYgdGltZWxpbmUpCiAgICAg
ICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIGRlY2xhcmF0aXZlIGFuaW1hdGlvbiwgd2UgZG9u
J3Qgd2FudCB0byByZW1vdmUgdGhlIGFuaW1hdGlvbiBmcm9tIHRoZSByZWxldmFudCBtYXBzIGJl
Y2F1c2UKICAgICAgICAgICAgIC8vIHdoaWxlIHRoZSB0aW1lbGluZSB3YXMgc2V0IHZpYSB0aGUg
QVBJLCB0aGUgZWxlbWVudCBzdGlsbCBoYXMgYSB0cmFuc2l0aW9uIG9yIGFuaW1hdGlvbiBzZXQg
dXAgYW5kIHdlIG11c3QKICAgICAgICAgICAgIC8vIG5vdCBicmVhayB0aGUgcmVsYXRpb25zaGlw
LgotICAgICAgICAgICAgaWYgKG1fdGltZWxpbmUgJiYgIWlzRGVjbGFyYXRpdmVBbmltYXRpb24o
KSkKLSAgICAgICAgICAgICAgICBtX3RpbWVsaW5lLT5hbmltYXRpb25XYXNSZW1vdmVkRnJvbVN0
eWxlYWJsZSgqdGhpcywgKnRhcmdldCk7Ci0gICAgICAgICAgICBpZiAodGltZWxpbmUpCi0gICAg
ICAgICAgICAgICAgdGltZWxpbmUtPmFuaW1hdGlvbldhc0FkZGVkVG9TdHlsZWFibGUoKnRoaXMs
ICp0YXJnZXQpOworICAgICAgICAgICAgaWYgKCFpc0RlY2xhcmF0aXZlQW5pbWF0aW9uKCkpCisg
ICAgICAgICAgICAgICAgdGFyZ2V0LT5hbmltYXRpb25XYXNSZW1vdmVkKCp0aGlzKTsKKyAgICAg
ICAgICAgIHRhcmdldC0+YW5pbWF0aW9uV2FzQWRkZWQoKnRoaXMpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0yODIsMTAgKzI4MSwxMCBAQCB2b2lkIFdlYkFuaW1hdGlvbjo6ZWZmZWN0VGFyZ2V0
RGlkQ2hhbmdlKGNvbnN0IE9wdGlvbmFsPGNvbnN0IFN0eWxlYWJsZT4mIHByZXZpbwogewogICAg
IGlmIChtX3RpbWVsaW5lKSB7CiAgICAgICAgIGlmIChwcmV2aW91c1RhcmdldCkKLSAgICAgICAg
ICAgIG1fdGltZWxpbmUtPmFuaW1hdGlvbldhc1JlbW92ZWRGcm9tU3R5bGVhYmxlKCp0aGlzLCAq
cHJldmlvdXNUYXJnZXQpOworICAgICAgICAgICAgcHJldmlvdXNUYXJnZXQtPmFuaW1hdGlvbldh
c1JlbW92ZWQoKnRoaXMpOwogCiAgICAgICAgIGlmIChuZXdUYXJnZXQpCi0gICAgICAgICAgICBt
X3RpbWVsaW5lLT5hbmltYXRpb25XYXNBZGRlZFRvU3R5bGVhYmxlKCp0aGlzLCAqbmV3VGFyZ2V0
KTsKKyAgICAgICAgICAgIG5ld1RhcmdldC0+YW5pbWF0aW9uV2FzQWRkZWQoKnRoaXMpOwogCiAg
ICAgICAgIC8vIFRoaXMgY291bGQgaGF2ZSBjaGFuZ2VkIHdoZXRoZXIgd2UgaGF2ZSByZXBsYWNl
ZCBhbmltYXRpb25zLCBzbyB3ZSBtYXkgbmVlZCB0byBzY2hlZHVsZSBhbiB1cGRhdGUuCiAgICAg
ICAgIG1fdGltZWxpbmUtPmFuaW1hdGlvblRpbWluZ0RpZENoYW5nZSgqdGhpcyk7CkBAIC0xMzY4
LDcgKzEzNjcsNyBAQCB2b2lkIFdlYkFuaW1hdGlvbjo6cGVyc2lzdCgpCiAgICAgICAgIGlmIChp
czxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QpKSB7CiAgICAgICAgICAgICBhdXRvJiBrZXlmcmFt
ZUVmZmVjdCA9IGRvd25jYXN0PEtleWZyYW1lRWZmZWN0PigqbV9lZmZlY3QpOwogICAgICAgICAg
ICAgYXV0byBzdHlsZWFibGUgPSBrZXlmcmFtZUVmZmVjdC50YXJnZXRTdHlsZWFibGUoKTsKLSAg
ICAgICAgICAgIG1fdGltZWxpbmUtPmFuaW1hdGlvbldhc0FkZGVkVG9TdHlsZWFibGUoKnRoaXMs
ICpzdHlsZWFibGUpOworICAgICAgICAgICAgc3R5bGVhYmxlLT5hbmltYXRpb25XYXNBZGRlZCgq
dGhpcyk7CiAgICAgICAgICAgICBzdHlsZWFibGUtPmVuc3VyZUtleWZyYW1lRWZmZWN0U3RhY2so
KS5hZGRFZmZlY3Qoa2V5ZnJhbWVFZmZlY3QpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCmluZGV4IDZlNzY3Mjc0YTU5ZTBmYmIwMTY3N2UwOWQ5YTc5MmUzOTljOWQyMDcu
LmI1OWRlZDFjN2FkOWJkMzA4YzY4ZThmZWM4ZGMxYTU5MGE1MGU1NmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKQEAgLTIzMTcsOCArMjMxNyw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb21B
bmNlc3RvcihSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgb2xkUGFyCiAg
ICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUVsZW1lbnRGcm9t
UGVuZGluZ1Jlc291cmNlcygqdGhpcyk7CiAKICAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9j
dW1lbnQoKS5mcmFtZSgpOwotICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50KCkuZXhp
c3RpbmdUaW1lbGluZSgpKQotICAgICAgICB0aW1lbGluZS0+ZWxlbWVudFdhc1JlbW92ZWQoeyAq
dGhpcywgcHNldWRvSWQoKSB9KTsKKyAgICBTdHlsZWFibGU6OmZyb21FbGVtZW50KCp0aGlzKS5l
bGVtZW50V2FzUmVtb3ZlZCgpOwogCiAjaWYgRU5BQkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQog
ICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFnZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vUHNldWRvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxl
bWVudC5jcHAKaW5kZXggMzlhMDQyOWEzM2QxNDkxN2VjNWZlOTcxYzAyMTQ0NWNjNjhkOWM4Zi4u
YjM3N2E0NGYxZjk5NWNhZmY1MjE1NTFlMDJlNTIxMGFlYTY3ZWJjYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qc2V1ZG9FbGVtZW50LmNwcApAQCAtNzUsOCArNzUsNyBAQCB2b2lkIFBzZXVkb0VsZW1lbnQ6
OmNsZWFySG9zdEVsZW1lbnQoKQogewogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cHNl
dWRvRWxlbWVudERlc3Ryb3llZChkb2N1bWVudCgpLnBhZ2UoKSwgKnRoaXMpOwogCi0gICAgaWYg
KGF1dG8qIHRpbWVsaW5lID0gZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCi0gICAgICAg
IHRpbWVsaW5lLT5lbGVtZW50V2FzUmVtb3ZlZChTdHlsZWFibGU6OmZyb21FbGVtZW50KCp0aGlz
KSk7CisgICAgU3R5bGVhYmxlOjpmcm9tRWxlbWVudCgqdGhpcykuZWxlbWVudFdhc1JlbW92ZWQo
KTsKICAgICAKICAgICBtX2hvc3RFbGVtZW50ID0gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCmlu
ZGV4IGYxYTg3YTQ2ZTVhNWQwZTFlM2VkZDE1ZTExMTllMzIzNmU3OWIxNTEuLjc1Y2I3MGViMzgz
NjY2OWE2OTM0YzJjNmFjYmQyNDE4ZDJkZGRhYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcApAQCAtNTU2LDcg
KzU1Niw2IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKEVsZW1l
bnQmIHJvb3QsIFRlYXJkb3duVHlwZSB0ZWFyZG93blR5CiAgICAgfTsKIAogICAgIGF1dG8mIGRv
Y3VtZW50ID0gcm9vdC5kb2N1bWVudCgpOwotICAgIGF1dG8qIHRpbWVsaW5lID0gZG9jdW1lbnQu
ZXhpc3RpbmdUaW1lbGluZSgpOwogCiAgICAgYXV0byBwb3AgPSBbJl0gKHVuc2lnbmVkIGRlcHRo
KSB7CiAgICAgICAgIHdoaWxlICh0ZWFyZG93blN0YWNrLnNpemUoKSA+IGRlcHRoKSB7CkBAIC01
NjksMTYgKzU2OCwxMSBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJlbmRlcmVy
cyhFbGVtZW50JiByb290LCBUZWFyZG93blR5cGUgdGVhcmRvd25UeQogICAgICAgICAgICAgc3dp
dGNoICh0ZWFyZG93blR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgVGVhcmRvd25UeXBlOjpGdWxs
OgogICAgICAgICAgICAgY2FzZSBUZWFyZG93blR5cGU6OlJlbmRlcmVyVXBkYXRlQ2FuY2VsaW5n
QW5pbWF0aW9uczoKLSAgICAgICAgICAgICAgICBpZiAodGltZWxpbmUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGRvY3VtZW50LnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZWxpbmUtPmNhbmNlbERlY2xhcmF0aXZlQW5pbWF0aW9uc0Zv
clN0eWxlYWJsZShTdHlsZWFibGU6OmZyb21FbGVtZW50KGVsZW1lbnQpKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAodGVhcmRvd25UeXBlID09IFRlYXJkb3duVHlwZTo6UmVuZGVyZXJV
cGRhdGVDYW5jZWxpbmdBbmltYXRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxp
bmUtPmNhbmNlbERlY2xhcmF0aXZlQW5pbWF0aW9uc0ZvclN0eWxlYWJsZShTdHlsZWFibGU6OmZy
b21FbGVtZW50KGVsZW1lbnQpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKGRvY3VtZW50LnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpIHx8IHRlYXJkb3duVHlwZSA9
PSBUZWFyZG93blR5cGU6OlJlbmRlcmVyVXBkYXRlQ2FuY2VsaW5nQW5pbWF0aW9ucykKKyAgICAg
ICAgICAgICAgICAgICAgU3R5bGVhYmxlOjpmcm9tRWxlbWVudChlbGVtZW50KS5jYW5jZWxEZWNs
YXJhdGl2ZUFuaW1hdGlvbnMoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgVGVhcmRvd25UeXBlOjpSZW5kZXJlclVwZGF0ZToKLSAgICAgICAgICAgICAgICBpZiAo
dGltZWxpbmUpCi0gICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLT53aWxsQ2hhbmdlUmVuZGVy
ZXJGb3JTdHlsZWFibGUoU3R5bGVhYmxlOjpmcm9tRWxlbWVudChlbGVtZW50KSk7CisgICAgICAg
ICAgICAgICAgU3R5bGVhYmxlOjpmcm9tRWxlbWVudChlbGVtZW50KS53aWxsQ2hhbmdlUmVuZGVy
ZXIoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCmluZGV4IGFjODQ5NTAxMWI2YjAyNzc2
ODcwYzQ5NjAwYTdlOWE5OTgzYzM1ZDEuLmIyZDczYjVkNjdkNTlhOTYyMjI2ZWM0NTA1NGRiNzcw
MDE3MmI3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29s
dmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAK
QEAgLTMzMiwxMyArMzMyLDEzIEBAIEVsZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVyOjpjcmVhdGVB
bmltYXRlZEVsZW1lbnRVcGRhdGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0CiAgICAgLy8gaW4g
Y2FzZSBubyBXZWIgQW5pbWF0aW9ucyBoYXZlIGJlZW4gY3JlYXRlZCB0aHJvdWdoIHRoZSBKUyBB
UEkuCiAgICAgaWYgKGRvY3VtZW50LmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50
OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUgJiYgIWRvY3VtZW50LnJlbmRlclZpZXcoKS0+cHJpbnRp
bmcoKSkgewogICAgICAgICBpZiAob2xkU3R5bGUgJiYgKG9sZFN0eWxlLT5oYXNUcmFuc2l0aW9u
cygpIHx8IG5ld1N0eWxlLT5oYXNUcmFuc2l0aW9ucygpKSkKLSAgICAgICAgICAgIGRvY3VtZW50
LnRpbWVsaW5lKCkudXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGUoc3R5bGVhYmxlLCAq
b2xkU3R5bGUsICpuZXdTdHlsZSk7CisgICAgICAgICAgICBzdHlsZWFibGUudXBkYXRlQ1NTVHJh
bnNpdGlvbnMoKm9sZFN0eWxlLCAqbmV3U3R5bGUpOwogCiAgICAgICAgIC8vIFRoZSBvcmRlciBp
biB3aGljaCBDU1MgVHJhbnNpdGlvbnMgYW5kIENTUyBBbmltYXRpb25zIGFyZSB1cGRhdGVkIG1h
dHRlcnMgc2luY2UgQ1NTIFRyYW5zaXRpb25zIGRlZmluZSB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxl
CiAgICAgICAgIC8vIHRvIHVzZSBDU1MgQW5pbWF0aW9ucyBhcyBkZWZpbmVkIGluIHRoZSBwcmV2
aW91cyBzdHlsZSBjaGFuZ2UgZXZlbnQuIEFzIHN1Y2gsIHdlIHVwZGF0ZSBDU1MgQW5pbWF0aW9u
cyBhZnRlciBDU1MgVHJhbnNpdGlvbnMKICAgICAgICAgLy8gc3VjaCB0aGF0IHdoZW4gQ1NTIFRy
YW5zaXRpb25zIGFyZSB1cGRhdGVkIHRoZSBDU1MgQW5pbWF0aW9ucyBkYXRhIGlzIHRoZSBzYW1l
IGFzIGR1cmluZyB0aGUgcHJldmlvdXMgc3R5bGUgY2hhbmdlIGV2ZW50LgogICAgICAgICBpZiAo
KG9sZFN0eWxlICYmIG9sZFN0eWxlLT5oYXNBbmltYXRpb25zKCkpIHx8IG5ld1N0eWxlLT5oYXNB
bmltYXRpb25zKCkpCi0gICAgICAgICAgICBkb2N1bWVudC50aW1lbGluZSgpLnVwZGF0ZUNTU0Fu
aW1hdGlvbnNGb3JTdHlsZWFibGUoc3R5bGVhYmxlLCBvbGRTdHlsZSwgKm5ld1N0eWxlLCAmcGFy
ZW50U3R5bGUpOworICAgICAgICAgICAgc3R5bGVhYmxlLnVwZGF0ZUNTU0FuaW1hdGlvbnMob2xk
U3R5bGUsICpuZXdTdHlsZSwgJnBhcmVudFN0eWxlKTsKICAgICB9CiAKICAgICAvLyBOb3cgd2Ug
Y2FuIHVwZGF0ZSBhbGwgV2ViIGFuaW1hdGlvbnMsIHdoaWNoIHdpbGwgaW5jbHVkZSBDU1MgQW5p
bWF0aW9ucyBhcyB3ZWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZWFi
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVhYmxlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
MmYyYzc1OWVkMzRmM2I0ZDU1OTA2YmRlNGVhZDI1YmEwZmZkZTFjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVhYmxlLmNwcApAQCAtMCwwICsxLDQ5NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTdHlsZWFibGUuaCIKKworI2luY2x1ZGUgIkFuaW1hdGlvbi5o
IgorI2luY2x1ZGUgIkFuaW1hdGlvbkVmZmVjdC5oIgorI2luY2x1ZGUgIkFuaW1hdGlvbkxpc3Qu
aCIKKyNpbmNsdWRlICJBbmltYXRpb25UaW1lbGluZS5oIgorI2luY2x1ZGUgIkNTU0FuaW1hdGlv
bi5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTVHJh
bnNpdGlvbi5oIgorI2luY2x1ZGUgIkRlY2xhcmF0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiS2V5ZnJhbWVFZmZl
Y3QuaCIKKyNpbmNsdWRlICJLZXlmcmFtZUVmZmVjdFN0YWNrLmgiCisjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJXZWJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJXZWJBbmltYXRp
b25VdGlsaXRpZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFN0eWxlYWJsZTo6
YW5pbWF0aW9uV2FzQWRkZWQoV2ViQW5pbWF0aW9uJiBhbmltYXRpb24pIGNvbnN0Cit7CisgICAg
ZW5zdXJlQW5pbWF0aW9ucygpLmFkZCgmYW5pbWF0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIHJlbW92ZUNTU1RyYW5zaXRpb25Gcm9tTWFwKENTU1RyYW5zaXRpb24mIHRyYW5zaXRpb24s
IFByb3BlcnR5VG9UcmFuc2l0aW9uTWFwJiBjc3NUcmFuc2l0aW9uc0J5UHJvcGVydHkpCit7Cisg
ICAgYXV0byB0cmFuc2l0aW9uSXRlcmF0b3IgPSBjc3NUcmFuc2l0aW9uc0J5UHJvcGVydHkuZmlu
ZCh0cmFuc2l0aW9uLnByb3BlcnR5KCkpOworICAgIGlmICh0cmFuc2l0aW9uSXRlcmF0b3IgPT0g
Y3NzVHJhbnNpdGlvbnNCeVByb3BlcnR5LmVuZCgpIHx8IHRyYW5zaXRpb25JdGVyYXRvci0+dmFs
dWUgIT0gJnRyYW5zaXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNzc1RyYW5z
aXRpb25zQnlQcm9wZXJ0eS5yZW1vdmUodHJhbnNpdGlvbkl0ZXJhdG9yKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBTdHlsZWFibGU6OnJlbW92ZURlY2xhcmF0aXZlQW5pbWF0aW9uRnJv
bUxpc3RzRm9yT3duaW5nRWxlbWVudChXZWJBbmltYXRpb24mIGFuaW1hdGlvbikgY29uc3QKK3sK
KyAgICBBU1NFUlQoaXM8RGVjbGFyYXRpdmVBbmltYXRpb24+KGFuaW1hdGlvbikpOworCisgICAg
aWYgKGlzPENTU1RyYW5zaXRpb24+KGFuaW1hdGlvbikpIHsKKyAgICAgICAgYXV0byYgdHJhbnNp
dGlvbiA9IGRvd25jYXN0PENTU1RyYW5zaXRpb24+KGFuaW1hdGlvbik7CisgICAgICAgIGlmICgh
cmVtb3ZlQ1NTVHJhbnNpdGlvbkZyb21NYXAodHJhbnNpdGlvbiwgZW5zdXJlUnVubmluZ1RyYW5z
aXRpb25zQnlQcm9wZXJ0eSgpKSkKKyAgICAgICAgICAgIHJlbW92ZUNTU1RyYW5zaXRpb25Gcm9t
TWFwKHRyYW5zaXRpb24sIGVuc3VyZUNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSgpKTsK
KyAgICB9Cit9CisKK3ZvaWQgU3R5bGVhYmxlOjphbmltYXRpb25XYXNSZW1vdmVkKFdlYkFuaW1h
dGlvbiYgYW5pbWF0aW9uKSBjb25zdAoreworICAgIGVuc3VyZUFuaW1hdGlvbnMoKS5yZW1vdmUo
JmFuaW1hdGlvbik7CisKKyAgICAvLyBOb3csIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIENTUyBU
cmFuc2l0aW9uLCB3ZSByZW1vdmUgaXQgZnJvbSB0aGUgbV9lbGVtZW50VG9SdW5uaW5nQ1NTVHJh
bnNpdGlvbkJ5Q1NTUHJvcGVydHlJRCBtYXAuCisgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyB0
aGlzIGZvciBDU1MgQW5pbWF0aW9ucyBiZWNhdXNlIHRoZWlyIHRpbWluZyBjYW4gYmUgc2V0IHZp
YSBDU1MgdG8gZW5kLCB3aGljaCB3b3VsZCBjYXVzZSB0aGlzCisgICAgLy8gZnVuY3Rpb24gdG8g
YmUgY2FsbGVkLCBidXQgdGhleSBzaG91bGQgcmVtYWluIGFzc29jaWF0ZWQgd2l0aCB0aGVpciBv
d25pbmcgZWxlbWVudCB1bnRpbCB0aGlzIGlzIGNoYW5nZWQgdmlhIGEgY2FsbAorICAgIC8vIHRv
IHRoZSBKUyBBUEkgb3IgY2hhbmdpbmcgdGhlIHRhcmdldCBlbGVtZW50J3MgYW5pbWF0aW9uLW5h
bWUgcHJvcGVydHkuCisgICAgaWYgKGlzPENTU1RyYW5zaXRpb24+KGFuaW1hdGlvbikpCisgICAg
ICAgIHJlbW92ZURlY2xhcmF0aXZlQW5pbWF0aW9uRnJvbUxpc3RzRm9yT3duaW5nRWxlbWVudChh
bmltYXRpb24pOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVDU1NBbmltYXRpb25DcmVhdGVkQnlN
YXJrdXAoY29uc3QgU3R5bGVhYmxlJiBzdHlsZWFibGUsIENTU0FuaW1hdGlvbiYgY3NzQW5pbWF0
aW9uKQoreworICAgIHN0eWxlYWJsZS5hbmltYXRpb25zQ3JlYXRlZEJ5TWFya3VwKCkucmVtb3Zl
KCZjc3NBbmltYXRpb24pOworCisgICAgaWYgKCFzdHlsZWFibGUuaGFzS2V5ZnJhbWVFZmZlY3Rz
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGtleWZyYW1lRWZmZWN0U3RhY2sgPSBz
dHlsZWFibGUuZW5zdXJlS2V5ZnJhbWVFZmZlY3RTdGFjaygpOworICAgIGF1dG8qIGNzc0FuaW1h
dGlvbkxpc3QgPSBrZXlmcmFtZUVmZmVjdFN0YWNrLmNzc0FuaW1hdGlvbkxpc3QoKTsKKyAgICBp
ZiAoIWNzc0FuaW1hdGlvbkxpc3QgfHwgY3NzQW5pbWF0aW9uTGlzdC0+aXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvJiBiYWNraW5nQW5pbWF0aW9uID0gY3NzQW5pbWF0aW9u
LmJhY2tpbmdBbmltYXRpb24oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNzc0FuaW1h
dGlvbkxpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChjc3NBbmltYXRpb25MaXN0LT5h
bmltYXRpb24oaSkgPT0gYmFja2luZ0FuaW1hdGlvbikgeworICAgICAgICAgICAgYXV0byBuZXdB
bmltYXRpb25MaXN0ID0gY3NzQW5pbWF0aW9uTGlzdC0+Y29weSgpOworICAgICAgICAgICAgbmV3
QW5pbWF0aW9uTGlzdC0+cmVtb3ZlKGkpOworICAgICAgICAgICAga2V5ZnJhbWVFZmZlY3RTdGFj
ay5zZXRDU1NBbmltYXRpb25MaXN0KFdURk1vdmUobmV3QW5pbWF0aW9uTGlzdCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFN0eWxlYWJsZTo6ZWxl
bWVudFdhc1JlbW92ZWQoKSBjb25zdAoreworICAgIGNhbmNlbERlY2xhcmF0aXZlQW5pbWF0aW9u
cygpOworfQorCit2b2lkIFN0eWxlYWJsZTo6d2lsbENoYW5nZVJlbmRlcmVyKCkgY29uc3QKK3sK
KyAgICBpZiAoYXV0byogYW5pbWF0aW9ucyA9IHRoaXMtPmFuaW1hdGlvbnMoKSkgeworICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGFuaW1hdGlvbiA6ICphbmltYXRpb25zKQorICAgICAgICAgICAg
YW5pbWF0aW9uLT53aWxsQ2hhbmdlUmVuZGVyZXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVh
YmxlOjpjYW5jZWxEZWNsYXJhdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIGlmIChhdXRv
KiBhbmltYXRpb25zID0gdGhpcy0+YW5pbWF0aW9ucygpKSB7CisgICAgICAgIGZvciAoYXV0byYg
YW5pbWF0aW9uIDogKmFuaW1hdGlvbnMpIHsKKyAgICAgICAgICAgIGlmIChpczxEZWNsYXJhdGl2
ZUFuaW1hdGlvbj4oYW5pbWF0aW9uKSkgeworICAgICAgICAgICAgICAgIGlmIChpczxDU1NBbmlt
YXRpb24+KGFuaW1hdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNTU0FuaW1hdGlv
bkNyZWF0ZWRCeU1hcmt1cCgqdGhpcywgZG93bmNhc3Q8Q1NTQW5pbWF0aW9uPigqYW5pbWF0aW9u
KSk7CisgICAgICAgICAgICAgICAgZG93bmNhc3Q8RGVjbGFyYXRpdmVBbmltYXRpb24+KCphbmlt
YXRpb24pLmNhbmNlbEZyb21TdHlsZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCitzdGF0aWMgYm9vbCBzaG91bGRDb25zaWRlckFuaW1hdGlvbihFbGVtZW50JiBlbGVt
ZW50LCBjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbikKK3sKKyAgICBpZiAoIWFuaW1hdGlvbi5p
c1ZhbGlkQW5pbWF0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGFuaW1hdGlvbk5hbWVOb25lKE1BS0VfU1RBVElD
X1NUUklOR19JTVBMKCJub25lIikpOworCisgICAgYXV0byYgbmFtZSA9IGFuaW1hdGlvbi5uYW1l
KCk7CisgICAgaWYgKG5hbWUgPT0gYW5pbWF0aW9uTmFtZU5vbmUgfHwgbmFtZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvKiBzdHlsZVNjb3BlID0gU3R5
bGU6OlNjb3BlOjpmb3JPcmRpbmFsKGVsZW1lbnQsIGFuaW1hdGlvbi5uYW1lU3R5bGVTY29wZU9y
ZGluYWwoKSkpCisgICAgICAgIHJldHVybiBzdHlsZVNjb3BlLT5yZXNvbHZlcigpLmlzQW5pbWF0
aW9uTmFtZVZhbGlkKG5hbWUpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFN0eWxl
YWJsZTo6dXBkYXRlQ1NTQW5pbWF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRF
bGVtZW50U3R5bGUpIGNvbnN0Cit7CisgICAgYXV0byYga2V5ZnJhbWVFZmZlY3RTdGFjayA9IGVu
c3VyZUtleWZyYW1lRWZmZWN0U3RhY2soKTsKKworICAgIC8vIEluIGNhc2UgdGhpcyBlbGVtZW50
IGlzIG5ld2x5IGdldHRpbmcgYSAiZGlzcGxheTogbm9uZSIgd2UgbmVlZCB0byBjYW5jZWwgYWxs
IG9mIGl0cyBhbmltYXRpb25zIGFuZCBkaXNyZWdhcmQgbmV3IG9uZXMuCisgICAgaWYgKGN1cnJl
bnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmRpc3BsYXkoKSAhPSBEaXNwbGF5VHlwZTo6Tm9uZSAm
JiBuZXdTdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6Ok5vbmUpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBjc3NBbmltYXRpb24gOiBhbmltYXRpb25zQ3JlYXRlZEJ5TWFya3VwKCkpCisgICAg
ICAgICAgICBjc3NBbmltYXRpb24tPmNhbmNlbEZyb21TdHlsZSgpOworICAgICAgICBrZXlmcmFt
ZUVmZmVjdFN0YWNrLnNldENTU0FuaW1hdGlvbkxpc3QobnVsbHB0cik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBhdXRvKiBjdXJyZW50QW5pbWF0aW9uTGlzdCA9IG5ld1N0eWxlLmFu
aW1hdGlvbnMoKTsKKyAgICBhdXRvKiBwcmV2aW91c0FuaW1hdGlvbkxpc3QgPSBrZXlmcmFtZUVm
ZmVjdFN0YWNrLmNzc0FuaW1hdGlvbkxpc3QoKTsKKyAgICBpZiAocHJldmlvdXNBbmltYXRpb25M
aXN0ICYmICFwcmV2aW91c0FuaW1hdGlvbkxpc3QtPmlzRW1wdHkoKSAmJiBuZXdTdHlsZS5oYXNB
bmltYXRpb25zKCkgJiYgKihwcmV2aW91c0FuaW1hdGlvbkxpc3QpID09ICoobmV3U3R5bGUuYW5p
bWF0aW9ucygpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTQW5pbWF0aW9uQ29sbGVjdGlv
biBuZXdBbmltYXRpb25zOworICAgIGF1dG8mIHByZXZpb3VzQW5pbWF0aW9ucyA9IGFuaW1hdGlv
bnNDcmVhdGVkQnlNYXJrdXAoKTsKKworICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mt
YW5pbWF0aW9ucy0xLyNhbmltYXRpb25zCisgICAgLy8gVGhlIHNhbWUgQGtleWZyYW1lcyBydWxl
IG5hbWUgbWF5IGJlIHJlcGVhdGVkIHdpdGhpbiBhbiBhbmltYXRpb24tbmFtZS4gQ2hhbmdlcyB0
byB0aGUgYW5pbWF0aW9uLW5hbWUgdXBkYXRlIGV4aXN0aW5nCisgICAgLy8gYW5pbWF0aW9ucyBi
eSBpdGVyYXRpbmcgb3ZlciB0aGUgbmV3IGxpc3Qgb2YgYW5pbWF0aW9ucyBmcm9tIGxhc3QgdG8g
Zmlyc3QsIGFuZCwgZm9yIGVhY2ggYW5pbWF0aW9uLCBmaW5kaW5nIHRoZSBsYXN0CisgICAgLy8g
bWF0Y2hpbmcgYW5pbWF0aW9uIGluIHRoZSBsaXN0IG9mIGV4aXN0aW5nIGFuaW1hdGlvbnMuIElm
IGEgbWF0Y2ggaXMgZm91bmQsIHRoZSBleGlzdGluZyBhbmltYXRpb24gaXMgdXBkYXRlZCB1c2lu
ZyB0aGUKKyAgICAvLyBhbmltYXRpb24gcHJvcGVydGllcyBjb3JyZXNwb25kaW5nIHRvIGl0cyBw
b3NpdGlvbiBpbiB0aGUgbmV3IGxpc3Qgb2YgYW5pbWF0aW9ucywgd2hpbHN0IG1haW50YWluaW5n
IGl0cyBjdXJyZW50IHBsYXliYWNrCisgICAgLy8gdGltZSBhcyBkZXNjcmliZWQgYWJvdmUuIFRo
ZSBtYXRjaGluZyBhbmltYXRpb24gaXMgcmVtb3ZlZCBmcm9tIHRoZSBleGlzdGluZyBsaXN0IG9m
IGFuaW1hdGlvbnMgc3VjaCB0aGF0IGl0IHdpbGwgbm90IG1hdGNoCisgICAgLy8gdHdpY2UuIElm
IGEgbWF0Y2ggaXMgbm90IGZvdW5kLCBhIG5ldyBhbmltYXRpb24gaXMgY3JlYXRlZC4gQXMgYSBy
ZXN1bHQsIHVwZGF0aW5nIGFuaW1hdGlvbi1uYW1lIGZyb20g4oCYYeKAmSB0byDigJhhLCBh4oCZ
IHdpbGwKKyAgICAvLyBjYXVzZSB0aGUgZXhpc3RpbmcgYW5pbWF0aW9uIGZvciDigJhh4oCZIHRv
IGJlY29tZSB0aGUgc2Vjb25kIGFuaW1hdGlvbiBpbiB0aGUgbGlzdCBhbmQgYSBuZXcgYW5pbWF0
aW9uIHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhlCisgICAgLy8gZmlyc3QgaXRlbSBpbiB0aGUgbGlz
dC4KKyAgICBpZiAoY3VycmVudEFuaW1hdGlvbkxpc3QpIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IGN1cnJlbnRBbmltYXRpb25MaXN0LT5zaXplKCk7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAg
ICAgIGF1dG8mIGN1cnJlbnRBbmltYXRpb24gPSBjdXJyZW50QW5pbWF0aW9uTGlzdC0+YW5pbWF0
aW9uKGkgLSAxKTsKKyAgICAgICAgICAgIGlmICghc2hvdWxkQ29uc2lkZXJBbmltYXRpb24odGhp
cy0+ZWxlbWVudCwgY3VycmVudEFuaW1hdGlvbikpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIGJvb2wgZm91bmRNYXRjaGluZ0FuaW1hdGlvbiA9IGZhbHNlOworICAg
ICAgICAgICAgZm9yIChhdXRvJiBwcmV2aW91c0FuaW1hdGlvbiA6IHByZXZpb3VzQW5pbWF0aW9u
cykgeworICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0FuaW1hdGlvbi0+YW5pbWF0aW9uTmFt
ZSgpID09IGN1cnJlbnRBbmltYXRpb24ubmFtZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFRpbWluZyBwcm9wZXJ0aWVzIG9yIHBsYXkgc3RhdGUgbWF5IGhhdmUgY2hhbmdlZCBzbyB3ZSBu
ZWVkIHRvIHVwZGF0ZSB0aGUgYmFja2luZyBhbmltYXRpb24gd2l0aAorICAgICAgICAgICAgICAg
ICAgICAvLyB0aGUgQW5pbWF0aW9uIGZvdW5kIGluIHRoZSBjdXJyZW50IHN0eWxlLgorICAgICAg
ICAgICAgICAgICAgICBwcmV2aW91c0FuaW1hdGlvbi0+c2V0QmFja2luZ0FuaW1hdGlvbihjdXJy
ZW50QW5pbWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3QW5pbWF0aW9ucy5hZGQocHJl
dmlvdXNBbmltYXRpb24pOworICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG1hdGNo
ZWQgYW5pbWF0aW9uIGZyb20gdGhlIGxpc3Qgb2YgcHJldmlvdXMgYW5pbWF0aW9ucyBzbyB3ZSBt
YXkgbm90IG1hdGNoIGl0IGFnYWluLgorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0FuaW1h
dGlvbnMucmVtb3ZlKHByZXZpb3VzQW5pbWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZm91
bmRNYXRjaGluZ0FuaW1hdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFmb3Vu
ZE1hdGNoaW5nQW5pbWF0aW9uKQorICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuYWRkKENT
U0FuaW1hdGlvbjo6Y3JlYXRlKCp0aGlzLCBjdXJyZW50QW5pbWF0aW9uLCBjdXJyZW50U3R5bGUs
IG5ld1N0eWxlLCBwYXJlbnRFbGVtZW50U3R5bGUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIEFueSBhbmltYXRpb24gZm91bmQgaW4gcHJldmlvdXNBbmltYXRpb25zIGJ1dCBub3QgZm91
bmQgaW4gbmV3QW5pbWF0aW9ucyBpcyBub3QgbG9uZ2VyIGN1cnJlbnQgYW5kIHNob3VsZCBiZSBj
YW5jZWxlZC4KKyAgICBmb3IgKGF1dG8mIHByZXZpb3VzQW5pbWF0aW9uIDogcHJldmlvdXNBbmlt
YXRpb25zKSB7CisgICAgICAgIGlmICghbmV3QW5pbWF0aW9ucy5jb250YWlucyhwcmV2aW91c0Fu
aW1hdGlvbikpIHsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c0FuaW1hdGlvbi0+b3duaW5nRWxl
bWVudCgpKQorICAgICAgICAgICAgICAgIHByZXZpb3VzQW5pbWF0aW9uLT5jYW5jZWxGcm9tU3R5
bGUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNldEFuaW1hdGlvbnNDcmVhdGVkQnlNYXJr
dXAoV1RGTW92ZShuZXdBbmltYXRpb25zKSk7CisKKyAgICBrZXlmcmFtZUVmZmVjdFN0YWNrLnNl
dENTU0FuaW1hdGlvbkxpc3QoY3VycmVudEFuaW1hdGlvbkxpc3QpOworfQorCitzdGF0aWMgS2V5
ZnJhbWVFZmZlY3QqIGtleWZyYW1lRWZmZWN0Rm9yRWxlbWVudEFuZFByb3BlcnR5KGNvbnN0IFN0
eWxlYWJsZSYgc3R5bGVhYmxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQoreworICAgIGlmIChh
dXRvKiBrZXlmcmFtZUVmZmVjdFN0YWNrID0gc3R5bGVhYmxlLmtleWZyYW1lRWZmZWN0U3RhY2so
KSkgeworICAgICAgICBhdXRvIGVmZmVjdHMgPSBrZXlmcmFtZUVmZmVjdFN0YWNrLT5zb3J0ZWRF
ZmZlY3RzKCk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWZmZWN0IDogbWFrZVJldmVyc2Vk
UmFuZ2UoZWZmZWN0cykpIHsKKyAgICAgICAgICAgIGlmIChlZmZlY3QtPmFuaW1hdGVzUHJvcGVy
dHkocHJvcGVydHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBlZmZlY3QuZ2V0KCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIGJvb2wgcHJv
cGVydHlJblN0eWxlTWF0Y2hlc1ZhbHVlRm9yVHJhbnNpdGlvbkluTWFwKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUHJvcGVydHlUb1RyYW5zaXRpb25N
YXAmIHRyYW5zaXRpb25zKQoreworICAgIGlmIChhdXRvKiB0cmFuc2l0aW9uID0gdHJhbnNpdGlv
bnMuZ2V0KHByb3BlcnR5KSkgeworICAgICAgICBpZiAoQ1NTUHJvcGVydHlBbmltYXRpb246OnBy
b3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgJnN0eWxlLCAmdHJhbnNpdGlvbi0+dGFyZ2V0U3R5bGUo
KSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitzdGF0aWMgZG91YmxlIHRyYW5zaXRpb25Db21iaW5lZER1cmF0aW9uKGNvbnN0IEFuaW1h
dGlvbiogdHJhbnNpdGlvbikKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoMC4wLCB0cmFuc2l0aW9u
LT5kdXJhdGlvbigpKSArIHRyYW5zaXRpb24tPmRlbGF5KCk7Cit9CisKK3N0YXRpYyBib29sIHRy
YW5zaXRpb25NYXRjaGVzUHJvcGVydHkoY29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5KQoreworICAgIGF1dG8gbW9kZSA9IHRyYW5zaXRpb24ucHJvcGVy
dHkoKS5tb2RlOworICAgIGlmIChtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6Ok5v
bmUgfHwgbW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpVbmtub3duUHJvcGVydHkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobW9kZSA9PSBBbmltYXRpb246OlRyYW5z
aXRpb25Nb2RlOjpTaW5nbGVQcm9wZXJ0eSkgeworICAgICAgICBhdXRvIHRyYW5zaXRpb25Qcm9w
ZXJ0eSA9IHRyYW5zaXRpb24ucHJvcGVydHkoKS5pZDsKKyAgICAgICAgaWYgKHRyYW5zaXRpb25Q
cm9wZXJ0eSAhPSBwcm9wZXJ0eSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGxvbmdoYW5kIDog
c2hvcnRoYW5kRm9yUHJvcGVydHkodHJhbnNpdGlvblByb3BlcnR5KSkgeworICAgICAgICAgICAg
ICAgIGlmIChsb25naGFuZCA9PSBwcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBpbGVUcmFu
c2l0aW9uUHJvcGVydGllc0luU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBIYXNoU2V0
PENTU1Byb3BlcnR5SUQ+JiB0cmFuc2l0aW9uUHJvcGVydGllcywgYm9vbCYgdHJhbnNpdGlvblBy
b3BlcnRpZXNDb250YWluQWxsKQoreworICAgIGlmICh0cmFuc2l0aW9uUHJvcGVydGllc0NvbnRh
aW5BbGwpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIHRyYW5zaXRpb25zID0gc3R5bGUu
dHJhbnNpdGlvbnMoKTsKKyAgICBpZiAoIXRyYW5zaXRpb25zKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYW5zaXRpb25zLT5zaXplKCk7ICsraSkgewor
ICAgICAgICBjb25zdCBhdXRvJiBhbmltYXRpb24gPSB0cmFuc2l0aW9ucy0+YW5pbWF0aW9uKGkp
OworICAgICAgICBhdXRvIG1vZGUgPSBhbmltYXRpb24ucHJvcGVydHkoKS5tb2RlOworICAgICAg
ICBpZiAobW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpTaW5nbGVQcm9wZXJ0eSkg
eworICAgICAgICAgICAgYXV0byBwcm9wZXJ0eSA9IGFuaW1hdGlvbi5wcm9wZXJ0eSgpLmlkOwor
ICAgICAgICAgICAgaWYgKGlzU2hvcnRoYW5kQ1NTUHJvcGVydHkocHJvcGVydHkpKSB7CisgICAg
ICAgICAgICAgICAgZm9yIChhdXRvIGxvbmdoYW5kIDogc2hvcnRoYW5kRm9yUHJvcGVydHkocHJv
cGVydHkpKQorICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uUHJvcGVydGllcy5hZGQobG9u
Z2hhbmQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSAhPSBDU1NQcm9wZXJ0eUlu
dmFsaWQpCisgICAgICAgICAgICAgICAgdHJhbnNpdGlvblByb3BlcnRpZXMuYWRkKHByb3BlcnR5
KTsKKyAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6
OkFsbCkgeworICAgICAgICAgICAgdHJhbnNpdGlvblByb3BlcnRpZXNDb250YWluQWxsID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZv
aWQgdXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGVBbmRQcm9wZXJ0eShjb25zdCBTdHls
ZWFibGUmIHN0eWxlYWJsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUmVuZGVyU3R5
bGUmIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBjb25zdCBNb25v
dG9uaWNUaW1lIGdlbmVyYXRpb25UaW1lKQoreworICAgIGF1dG8qIGtleWZyYW1lRWZmZWN0ID0g
a2V5ZnJhbWVFZmZlY3RGb3JFbGVtZW50QW5kUHJvcGVydHkoc3R5bGVhYmxlLCBwcm9wZXJ0eSk7
CisgICAgYXV0byogYW5pbWF0aW9uID0ga2V5ZnJhbWVFZmZlY3QgPyBrZXlmcmFtZUVmZmVjdC0+
YW5pbWF0aW9uKCkgOiBudWxscHRyOworCisgICAgYm9vbCBpc0RlY2xhcmF0aXZlID0gZmFsc2U7
CisgICAgaWYgKGlzPERlY2xhcmF0aXZlQW5pbWF0aW9uPihhbmltYXRpb24pKSB7CisgICAgICAg
IGlmIChhdXRvIG93bmluZ0VsZW1lbnQgPSBkb3duY2FzdDxEZWNsYXJhdGl2ZUFuaW1hdGlvbj4o
KmFuaW1hdGlvbikub3duaW5nRWxlbWVudCgpKQorICAgICAgICAgICAgaXNEZWNsYXJhdGl2ZSA9
ICpvd25pbmdFbGVtZW50ID09IHN0eWxlYWJsZTsKKyAgICB9CisKKyAgICBpZiAoYW5pbWF0aW9u
ICYmICFpc0RlY2xhcmF0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBBbmltYXRp
b24qIG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiA9IG51bGxwdHI7CisgICAgaWYgKGF1dG8qIHRy
YW5zaXRpb25zID0gbmV3U3R5bGUudHJhbnNpdGlvbnMoKSkgeworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHRyYW5zaXRpb25zLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0
byYgYmFja2luZ0FuaW1hdGlvbiA9IHRyYW5zaXRpb25zLT5hbmltYXRpb24oaSk7CisgICAgICAg
ICAgICBpZiAodHJhbnNpdGlvbk1hdGNoZXNQcm9wZXJ0eShiYWNraW5nQW5pbWF0aW9uLCBwcm9w
ZXJ0eSkpCisgICAgICAgICAgICAgICAgbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uID0gJmJhY2tp
bmdBbmltYXRpb247CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBIENTUyBUcmFuc2l0aW9u
IG1pZ2h0IGhhdmUgY29tcGxldGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgYW5pbWF0aW9ucyB3ZXJl
IHVwZGF0ZWQgc28gd2UgbXVzdAorICAgIC8vIHVwZGF0ZSB0aGUgcnVubmluZyBhbmQgY29tcGxl
dGVkIHRyYW5zaXRpb25zIG1lbWJlcnNoaXAgaW4gdGhhdCBjYXNlLgorICAgIGlmIChpczxDU1NU
cmFuc2l0aW9uPihhbmltYXRpb24pICYmIG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiAmJiBzdHls
ZWFibGUuaGFzUnVubmluZ1RyYW5zaXRpb25Gb3JQcm9wZXJ0eShwcm9wZXJ0eSkgJiYgYW5pbWF0
aW9uLT5wbGF5U3RhdGUoKSA9PSBXZWJBbmltYXRpb246OlBsYXlTdGF0ZTo6RmluaXNoZWQpIHsK
KyAgICAgICAgc3R5bGVhYmxlLmVuc3VyZUNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSgp
LnNldChwcm9wZXJ0eSwgc3R5bGVhYmxlLmVuc3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVy
dHkoKS50YWtlKHByb3BlcnR5KSk7CisgICAgICAgIGFuaW1hdGlvbiA9IG51bGxwdHI7CisgICAg
fQorCisgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10cmFuc2l0aW9ucy0xLyNi
ZWZvcmUtY2hhbmdlLXN0eWxlCisgICAgLy8gRGVmaW5lIHRoZSBiZWZvcmUtY2hhbmdlIHN0eWxl
IGFzIHRoZSBjb21wdXRlZCB2YWx1ZXMgb2YgYWxsIHByb3BlcnRpZXMgb24gdGhlIGVsZW1lbnQg
YXMgb2YgdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBldmVudCwgZXhjZXB0IHdpdGgKKyAgICAv
LyBhbnkgc3R5bGVzIGRlcml2ZWQgZnJvbSBkZWNsYXJhdGl2ZSBhbmltYXRpb25zIHN1Y2ggYXMg
Q1NTIFRyYW5zaXRpb25zLCBDU1MgQW5pbWF0aW9ucywgYW5kIFNNSUwgQW5pbWF0aW9ucyB1cGRh
dGVkIHRvIHRoZSBjdXJyZW50IHRpbWUuCisgICAgYXV0byBiZWZvcmVDaGFuZ2VTdHlsZSA9IFsm
XSgpIC0+IGNvbnN0IFJlbmRlclN0eWxlIHsKKyAgICAgICAgaWYgKGFuaW1hdGlvbiAmJiBhbmlt
YXRpb24tPmlzUmVsZXZhbnQoKSkgeworICAgICAgICAgICAgYXV0byBhbmltYXRlZFN0eWxlID0g
UmVuZGVyU3R5bGU6OmNsb25lKGN1cnJlbnRTdHlsZSk7CisgICAgICAgICAgICAvLyBJZiBhIHRy
YW5zaXRpb24gaGFzIG5vdCB5ZXQgc3RhcnRlZCBvciBzdGFydGVkIHdoZW4gYW5pbWF0aW9ucyB3
ZXJlIGxhc3QgdXBkYXRlZCwgdXNlIHRoZSB0aW1lbGluZSB0aW1lIGF0IGl0cyBjcmVhdGlvbgor
ICAgICAgICAgICAgLy8gYXMgaXRzIHN0YXJ0IHRpbWUgdG8gZW5zdXJlIHRoYXQgaXQgd2lsbCBw
cm9kdWNlIGEgc3R5bGUgd2l0aCBwcm9ncmVzcyA+IDAuCisgICAgICAgICAgICBib29sIHNob3Vs
ZFVzZVRpbWVsaW5lVGltZUF0Q3JlYXRpb24gPSBpczxDU1NUcmFuc2l0aW9uPihhbmltYXRpb24p
ICYmICghYW5pbWF0aW9uLT5zdGFydFRpbWUoKSB8fCAqYW5pbWF0aW9uLT5zdGFydFRpbWUoKSA9
PSBzdHlsZWFibGUuZWxlbWVudC5kb2N1bWVudCgpLnRpbWVsaW5lKCkuY3VycmVudFRpbWUoKSk7
CisgICAgICAgICAgICBhbmltYXRpb24tPnJlc29sdmUoYW5pbWF0ZWRTdHlsZSwgbnVsbHB0ciwg
c2hvdWxkVXNlVGltZWxpbmVUaW1lQXRDcmVhdGlvbiA/IGRvd25jYXN0PENTU1RyYW5zaXRpb24+
KCphbmltYXRpb24pLnRpbWVsaW5lVGltZUF0Q3JlYXRpb24oKSA6IFdURjo6bnVsbG9wdCk7Cisg
ICAgICAgICAgICByZXR1cm4gYW5pbWF0ZWRTdHlsZTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IElmIGl0IGV4aXN0cywgdXNlIHRoZSByZWNvcmRlZCBSZW5kZXJTdHlsZSBmb3IgdGhpcyBlbGVt
ZW50IGR1cmluZyBhIHByZXZpb3VzIGNhbGwgdG8gU3R5bGU6OlRyZWVSZXNvbHZlcjo6Y3JlYXRl
QW5pbWF0ZWRFbGVtZW50VXBkYXRlKCkuCisgICAgICAgIGlmIChhdXRvKiBsYXN0U3R5bGVDaGFu
Z2VFdmVudFN0eWxlID0gc3R5bGVhYmxlLmxhc3RTdHlsZUNoYW5nZUV2ZW50U3R5bGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBSZW5kZXJTdHlsZTo6Y2xvbmUoKmxhc3RTdHlsZUNoYW5nZUV2ZW50
U3R5bGUpOworCisgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgY29tcHV0ZWQgc3R5bGVzIGZyb20g
YW5pbWF0aW9ucyBmb3IgdGhpcyBlbGVtZW50LCB0aGUgYmVmb3JlLWNoYW5nZSBzdHlsZSBpcyB0
aGUgcHJldmlvdXNseSByZXNvbHZlZCBzdHlsZSBmb3IgdGhpcyBlbGVtZW50LgorICAgICAgICBy
ZXR1cm4gUmVuZGVyU3R5bGU6OmNsb25lKGN1cnJlbnRTdHlsZSk7CisgICAgfSgpOworCisgICAg
Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10cmFuc2l0aW9ucy0xLyNhZnRlci1jaGFu
Z2Utc3R5bGUKKyAgICAvLyBMaWtld2lzZSwgZGVmaW5lIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUg
YXMgdGhlIGNvbXB1dGVkIHZhbHVlcyBvZiBhbGwgcHJvcGVydGllcyBvbiB0aGUgZWxlbWVudCBi
YXNlZCBvbiB0aGUgaW5mb3JtYXRpb24ga25vd24gYXQgdGhlIHN0YXJ0CisgICAgLy8gb2YgdGhh
dCBzdHlsZSBjaGFuZ2UgZXZlbnQsIGJ1dCB1c2luZyB0aGUgY29tcHV0ZWQgdmFsdWVzIG9mIHRo
ZSBhbmltYXRpb24tKiBwcm9wZXJ0aWVzIGZyb20gdGhlIGJlZm9yZS1jaGFuZ2Ugc3R5bGUsIGV4
Y2x1ZGluZyBhbnkgc3R5bGVzCisgICAgLy8gZnJvbSBDU1MgVHJhbnNpdGlvbnMgaW4gdGhlIGNv
bXB1dGF0aW9uLCBhbmQgaW5oZXJpdGluZyBmcm9tIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUgb2Yg
dGhlIHBhcmVudC4gTm90ZSB0aGF0IHRoaXMgbWVhbnMgdGhlIGFmdGVyLWNoYW5nZQorICAgIC8v
IHN0eWxlIGRvZXMgbm90IGRpZmZlciBmcm9tIHRoZSBiZWZvcmUtY2hhbmdlIHN0eWxlIGR1ZSB0
byBuZXdseSBjcmVhdGVkIG9yIGNhbmNlbGVkIENTUyBBbmltYXRpb25zLgorICAgIGF1dG8gYWZ0
ZXJDaGFuZ2VTdHlsZSA9IFsmXSgpIC0+IGNvbnN0IFJlbmRlclN0eWxlIHsKKyAgICAgICAgaWYg
KGlzPENTU0FuaW1hdGlvbj4oYW5pbWF0aW9uKSAmJiBhbmltYXRpb24tPmlzUmVsZXZhbnQoKSkg
eworICAgICAgICAgICAgYXV0byBhbmltYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKG5l
d1N0eWxlKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+cmVzb2x2ZShhbmltYXRlZFN0eWxlLCBu
dWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBhbmltYXRlZFN0eWxlOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIFJlbmRlclN0eWxlOjpjbG9uZShuZXdTdHlsZSk7CisgICAgfSgpOwor
CisgICAgaWYgKCFzdHlsZWFibGUuaGFzUnVubmluZ1RyYW5zaXRpb25Gb3JQcm9wZXJ0eShwcm9w
ZXJ0eSkKKyAgICAgICAgJiYgIUNTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwo
cHJvcGVydHksICZiZWZvcmVDaGFuZ2VTdHlsZSwgJmFmdGVyQ2hhbmdlU3R5bGUpCisgICAgICAg
ICYmIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKHByb3Bl
cnR5LCAmYmVmb3JlQ2hhbmdlU3R5bGUsICZhZnRlckNoYW5nZVN0eWxlKQorICAgICAgICAmJiAh
cHJvcGVydHlJblN0eWxlTWF0Y2hlc1ZhbHVlRm9yVHJhbnNpdGlvbkluTWFwKHByb3BlcnR5LCBh
ZnRlckNoYW5nZVN0eWxlLCBzdHlsZWFibGUuZW5zdXJlQ29tcGxldGVkVHJhbnNpdGlvbnNCeVBy
b3BlcnR5KCkpCisgICAgICAgICYmIG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiAmJiB0cmFuc2l0
aW9uQ29tYmluZWREdXJhdGlvbihtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24pID4gMCkgeworICAg
ICAgICAvLyAxLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgICAgICAgLy8g
ICAtIHRoZSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBydW5uaW5nIHRyYW5zaXRpb24gZm9yIHRo
ZSBwcm9wZXJ0eSwKKyAgICAgICAgLy8gICAtIHRoZSBiZWZvcmUtY2hhbmdlIHN0eWxlIGlzIGRp
ZmZlcmVudCBmcm9tIGFuZCBjYW4gYmUgaW50ZXJwb2xhdGVkIHdpdGggdGhlIGFmdGVyLWNoYW5n
ZSBzdHlsZSBmb3IgdGhhdCBwcm9wZXJ0eSwKKyAgICAgICAgLy8gICAtIHRoZSBlbGVtZW50IGRv
ZXMgbm90IGhhdmUgYSBjb21wbGV0ZWQgdHJhbnNpdGlvbiBmb3IgdGhlIHByb3BlcnR5IG9yIHRo
ZSBlbmQgdmFsdWUgb2YgdGhlIGNvbXBsZXRlZCB0cmFuc2l0aW9uIGlzIGRpZmZlcmVudCBmcm9t
IHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUgZm9yIHRoZSBwcm9wZXJ0eSwKKyAgICAgICAgLy8gICAt
IHRoZXJlIGlzIGEgbWF0Y2hpbmcgdHJhbnNpdGlvbi1wcm9wZXJ0eSB2YWx1ZSwgYW5kCisgICAg
ICAgIC8vICAgLSB0aGUgY29tYmluZWQgZHVyYXRpb24gaXMgZ3JlYXRlciB0aGFuIDBzLAorCisg
ICAgICAgIC8vIHRoZW4gaW1wbGVtZW50YXRpb25zIG11c3QgcmVtb3ZlIHRoZSBjb21wbGV0ZWQg
dHJhbnNpdGlvbiAoaWYgcHJlc2VudCkgZnJvbSB0aGUgc2V0IG9mIGNvbXBsZXRlZCB0cmFuc2l0
aW9ucworICAgICAgICBzdHlsZWFibGUuZW5zdXJlQ29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3Bl
cnR5KCkucmVtb3ZlKHByb3BlcnR5KTsKKworICAgICAgICAvLyBhbmQgc3RhcnQgYSB0cmFuc2l0
aW9uIHdob3NlOgorICAgICAgICAvLyAgIC0gc3RhcnQgdGltZSBpcyB0aGUgdGltZSBvZiB0aGUg
c3R5bGUgY2hhbmdlIGV2ZW50IHBsdXMgdGhlIG1hdGNoaW5nIHRyYW5zaXRpb24gZGVsYXksCisg
ICAgICAgIC8vICAgLSBlbmQgdGltZSBpcyB0aGUgc3RhcnQgdGltZSBwbHVzIHRoZSBtYXRjaGlu
ZyB0cmFuc2l0aW9uIGR1cmF0aW9uLAorICAgICAgICAvLyAgIC0gc3RhcnQgdmFsdWUgaXMgdGhl
IHZhbHVlIG9mIHRoZSB0cmFuc2l0aW9uaW5nIHByb3BlcnR5IGluIHRoZSBiZWZvcmUtY2hhbmdl
IHN0eWxlLAorICAgICAgICAvLyAgIC0gZW5kIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGUgdHJh
bnNpdGlvbmluZyBwcm9wZXJ0eSBpbiB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlLAorICAgICAgICAv
LyAgIC0gcmV2ZXJzaW5nLWFkanVzdGVkIHN0YXJ0IHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBz
dGFydCB2YWx1ZSwgYW5kCisgICAgICAgIC8vICAgLSByZXZlcnNpbmcgc2hvcnRlbmluZyBmYWN0
b3IgaXMgMS4KKyAgICAgICAgYXV0byBkZWxheSA9IFNlY29uZHMobWF0Y2hpbmdCYWNraW5nQW5p
bWF0aW9uLT5kZWxheSgpKTsKKyAgICAgICAgYXV0byBkdXJhdGlvbiA9IFNlY29uZHMobWF0Y2hp
bmdCYWNraW5nQW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKKyAgICAgICAgYXV0byYgcmV2ZXJzaW5n
QWRqdXN0ZWRTdGFydFN0eWxlID0gYmVmb3JlQ2hhbmdlU3R5bGU7CisgICAgICAgIGF1dG8gcmV2
ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvciA9IDE7CisgICAgICAgIHN0eWxlYWJsZS5lbnN1cmVSdW5u
aW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkuc2V0KHByb3BlcnR5LCBDU1NUcmFuc2l0aW9uOjpj
cmVhdGUoc3R5bGVhYmxlLCBwcm9wZXJ0eSwgZ2VuZXJhdGlvblRpbWUsICptYXRjaGluZ0JhY2tp
bmdBbmltYXRpb24sICZiZWZvcmVDaGFuZ2VTdHlsZSwgYWZ0ZXJDaGFuZ2VTdHlsZSwgZGVsYXks
IGR1cmF0aW9uLCByZXZlcnNpbmdBZGp1c3RlZFN0YXJ0U3R5bGUsIHJldmVyc2luZ1Nob3J0ZW5p
bmdGYWN0b3IpKTsKKyAgICB9IGVsc2UgaWYgKHN0eWxlYWJsZS5oYXNDb21wbGV0ZWRUcmFuc2l0
aW9uRm9yUHJvcGVydHkocHJvcGVydHkpICYmICFwcm9wZXJ0eUluU3R5bGVNYXRjaGVzVmFsdWVG
b3JUcmFuc2l0aW9uSW5NYXAocHJvcGVydHksIGFmdGVyQ2hhbmdlU3R5bGUsIHN0eWxlYWJsZS5l
bnN1cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKSkpIHsKKyAgICAgICAgLy8gMi4g
T3RoZXJ3aXNlLCBpZiB0aGUgZWxlbWVudCBoYXMgYSBjb21wbGV0ZWQgdHJhbnNpdGlvbiBmb3Ig
dGhlIHByb3BlcnR5IGFuZCB0aGUgZW5kIHZhbHVlIG9mIHRoZSBjb21wbGV0ZWQgdHJhbnNpdGlv
biBpcyBkaWZmZXJlbnQgZnJvbQorICAgICAgICAvLyAgICB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxl
IGZvciB0aGUgcHJvcGVydHksIHRoZW4gaW1wbGVtZW50YXRpb25zIG11c3QgcmVtb3ZlIHRoZSBj
b21wbGV0ZWQgdHJhbnNpdGlvbiBmcm9tIHRoZSBzZXQgb2YgY29tcGxldGVkIHRyYW5zaXRpb25z
LgorICAgICAgICBzdHlsZWFibGUuZW5zdXJlQ29tcGxldGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5
KCkucmVtb3ZlKHByb3BlcnR5KTsKKyAgICB9CisKKyAgICBib29sIGhhc1J1bm5pbmdUcmFuc2l0
aW9uID0gc3R5bGVhYmxlLmhhc1J1bm5pbmdUcmFuc2l0aW9uRm9yUHJvcGVydHkocHJvcGVydHkp
OworICAgIGlmICgoaGFzUnVubmluZ1RyYW5zaXRpb24gfHwgc3R5bGVhYmxlLmhhc0NvbXBsZXRl
ZFRyYW5zaXRpb25Gb3JQcm9wZXJ0eShwcm9wZXJ0eSkpICYmICFtYXRjaGluZ0JhY2tpbmdBbmlt
YXRpb24pIHsKKyAgICAgICAgLy8gMy4gSWYgdGhlIGVsZW1lbnQgaGFzIGEgcnVubmluZyB0cmFu
c2l0aW9uIG9yIGNvbXBsZXRlZCB0cmFuc2l0aW9uIGZvciB0aGUgcHJvcGVydHksIGFuZCB0aGVy
ZSBpcyBub3QgYSBtYXRjaGluZyB0cmFuc2l0aW9uLXByb3BlcnR5CisgICAgICAgIC8vICAgIHZh
bHVlLCB0aGVuIGltcGxlbWVudGF0aW9ucyBtdXN0IGNhbmNlbCB0aGUgcnVubmluZyB0cmFuc2l0
aW9uIG9yIHJlbW92ZSB0aGUgY29tcGxldGVkIHRyYW5zaXRpb24gZnJvbSB0aGUgc2V0IG9mIGNv
bXBsZXRlZCB0cmFuc2l0aW9ucy4KKyAgICAgICAgaWYgKGhhc1J1bm5pbmdUcmFuc2l0aW9uKQor
ICAgICAgICAgICAgc3R5bGVhYmxlLmVuc3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHko
KS50YWtlKHByb3BlcnR5KS0+Y2FuY2VsKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0
eWxlYWJsZS5lbnN1cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS5yZW1vdmUocHJv
cGVydHkpOworICAgIH0KKworICAgIGlmIChtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24gJiYgc3R5
bGVhYmxlLmhhc1J1bm5pbmdUcmFuc2l0aW9uRm9yUHJvcGVydHkocHJvcGVydHkpICYmICFwcm9w
ZXJ0eUluU3R5bGVNYXRjaGVzVmFsdWVGb3JUcmFuc2l0aW9uSW5NYXAocHJvcGVydHksIGFmdGVy
Q2hhbmdlU3R5bGUsIHN0eWxlYWJsZS5lbnN1cmVSdW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5
KCkpKSB7CisgICAgICAgIGF1dG8gcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uID0gc3R5bGVh
YmxlLmVuc3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS50YWtlKHByb3BlcnR5KTsK
KyAgICAgICAgYXV0byYgcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlID0g
cHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5jdXJyZW50U3R5bGUoKTsKKyAgICAgICAgLy8g
NC4gSWYgdGhlIGVsZW1lbnQgaGFzIGEgcnVubmluZyB0cmFuc2l0aW9uIGZvciB0aGUgcHJvcGVy
dHksIHRoZXJlIGlzIGEgbWF0Y2hpbmcgdHJhbnNpdGlvbi1wcm9wZXJ0eSB2YWx1ZSwgYW5kIHRo
ZSBlbmQgdmFsdWUgb2YgdGhlIHJ1bm5pbmcKKyAgICAgICAgLy8gICAgdHJhbnNpdGlvbiBpcyBu
b3QgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgYWZ0ZXItY2hhbmdl
IHN0eWxlLCB0aGVuOgorICAgICAgICBpZiAoQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRp
ZXNFcXVhbChwcm9wZXJ0eSwgJnByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbkN1cnJlbnRTdHls
ZSwgJmFmdGVyQ2hhbmdlU3R5bGUpIHx8ICFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVy
dHlCZUludGVycG9sYXRlZChwcm9wZXJ0eSwgJmN1cnJlbnRTdHlsZSwgJmFmdGVyQ2hhbmdlU3R5
bGUpKSB7CisgICAgICAgICAgICAvLyAxLiBJZiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJv
cGVydHkgaW4gdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbiBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2Yg
dGhlIHByb3BlcnR5IGluIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUsCisgICAgICAgICAgICAvLyAg
ICBvciBpZiB0aGVzZSB0d28gdmFsdWVzIGNhbm5vdCBiZSBpbnRlcnBvbGF0ZWQsIHRoZW4gaW1w
bGVtZW50YXRpb25zIG11c3QgY2FuY2VsIHRoZSBydW5uaW5nIHRyYW5zaXRpb24uCisgICAgICAg
ICAgICBwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb24tPmNhbmNlbEZyb21TdHlsZSgpOworICAg
ICAgICB9IGVsc2UgaWYgKHRyYW5zaXRpb25Db21iaW5lZER1cmF0aW9uKG1hdGNoaW5nQmFja2lu
Z0FuaW1hdGlvbikgPD0gMC4wIHx8ICFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlC
ZUludGVycG9sYXRlZChwcm9wZXJ0eSwgJnByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbkN1cnJl
bnRTdHlsZSwgJmFmdGVyQ2hhbmdlU3R5bGUpKSB7CisgICAgICAgICAgICAvLyAyLiBPdGhlcndp
c2UsIGlmIHRoZSBjb21iaW5lZCBkdXJhdGlvbiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMHMs
IG9yIGlmIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgcnVubmluZyB0
cmFuc2l0aW9uCisgICAgICAgICAgICAvLyAgICBjYW5ub3QgYmUgaW50ZXJwb2xhdGVkIHdpdGgg
dGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlLCB0aGVu
IGltcGxlbWVudGF0aW9ucyBtdXN0IGNhbmNlbCB0aGUgcnVubmluZyB0cmFuc2l0aW9uLgorICAg
ICAgICAgICAgcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5jYW5jZWxGcm9tU3R5bGUoKTsK
KyAgICAgICAgfSBlbHNlIGlmIChDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFs
KHByb3BlcnR5LCAmcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5yZXZlcnNpbmdBZGp1c3Rl
ZFN0YXJ0U3R5bGUoKSwgJmFmdGVyQ2hhbmdlU3R5bGUpKSB7CisgICAgICAgICAgICAvLyAzLiBP
dGhlcndpc2UsIGlmIHRoZSByZXZlcnNpbmctYWRqdXN0ZWQgc3RhcnQgdmFsdWUgb2YgdGhlIHJ1
bm5pbmcgdHJhbnNpdGlvbiBpcyB0aGUgc2FtZSBhcyB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5
IGluIHRoZSBhZnRlci1jaGFuZ2UKKyAgICAgICAgICAgIC8vICAgIHN0eWxlIChzZWUgdGhlIHNl
Y3Rpb24gb24gcmV2ZXJzaW5nIG9mIHRyYW5zaXRpb25zIGZvciB3aHkgdGhlc2UgY2FzZSBleGlz
dHMpLCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBjYW5jZWwgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbgor
ICAgICAgICAgICAgcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5jYW5jZWxGcm9tU3R5bGUo
KTsKKworICAgICAgICAgICAgLy8gYW5kIHN0YXJ0IGEgbmV3IHRyYW5zaXRpb24gd2hvc2U6Cisg
ICAgICAgICAgICAvLyAgIC0gcmV2ZXJzaW5nLWFkanVzdGVkIHN0YXJ0IHZhbHVlIGlzIHRoZSBl
bmQgdmFsdWUgb2YgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbiwKKyAgICAgICAgICAgIC8vICAgLSBy
ZXZlcnNpbmcgc2hvcnRlbmluZyBmYWN0b3IgaXMgdGhlIGFic29sdXRlIHZhbHVlLCBjbGFtcGVk
IHRvIHRoZSByYW5nZSBbMCwgMV0sIG9mIHRoZSBzdW0gb2Y6CisgICAgICAgICAgICAvLyAgICAg
ICAxLiB0aGUgb3V0cHV0IG9mIHRoZSB0aW1pbmcgZnVuY3Rpb24gb2YgdGhlIG9sZCB0cmFuc2l0
aW9uIGF0IHRoZSB0aW1lIG9mIHRoZSBzdHlsZSBjaGFuZ2UgZXZlbnQsIHRpbWVzIHRoZSByZXZl
cnNpbmcgc2hvcnRlbmluZyBmYWN0b3Igb2YgdGhlIG9sZCB0cmFuc2l0aW9uCisgICAgICAgICAg
ICAvLyAgICAgICAyLiAxIG1pbnVzIHRoZSByZXZlcnNpbmcgc2hvcnRlbmluZyBmYWN0b3Igb2Yg
dGhlIG9sZCB0cmFuc2l0aW9uLgorICAgICAgICAgICAgLy8gICAtIHN0YXJ0IHRpbWUgaXMgdGhl
IHRpbWUgb2YgdGhlIHN0eWxlIGNoYW5nZSBldmVudCBwbHVzOgorICAgICAgICAgICAgLy8gICAg
ICAgMS4gaWYgdGhlIG1hdGNoaW5nIHRyYW5zaXRpb24gZGVsYXkgaXMgbm9ubmVnYXRpdmUsIHRo
ZSBtYXRjaGluZyB0cmFuc2l0aW9uIGRlbGF5LCBvcgorICAgICAgICAgICAgLy8gICAgICAgMi4g
aWYgdGhlIG1hdGNoaW5nIHRyYW5zaXRpb24gZGVsYXkgaXMgbmVnYXRpdmUsIHRoZSBwcm9kdWN0
IG9mIHRoZSBuZXcgdHJhbnNpdGlvbuKAmXMgcmV2ZXJzaW5nIHNob3J0ZW5pbmcgZmFjdG9yIGFu
ZCB0aGUgbWF0Y2hpbmcgdHJhbnNpdGlvbiBkZWxheSwKKyAgICAgICAgICAgIC8vICAgLSBlbmQg
dGltZSBpcyB0aGUgc3RhcnQgdGltZSBwbHVzIHRoZSBwcm9kdWN0IG9mIHRoZSBtYXRjaGluZyB0
cmFuc2l0aW9uIGR1cmF0aW9uIGFuZCB0aGUgbmV3IHRyYW5zaXRpb27igJlzIHJldmVyc2luZyBz
aG9ydGVuaW5nIGZhY3RvciwKKyAgICAgICAgICAgIC8vICAgLSBzdGFydCB2YWx1ZSBpcyB0aGUg
Y3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbiwK
KyAgICAgICAgICAgIC8vICAgLSBlbmQgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0
eSBpbiB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlCisgICAgICAgICAgICBhdXRvJiByZXZlcnNpbmdB
ZGp1c3RlZFN0YXJ0U3R5bGUgPSBwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb24tPnRhcmdldFN0
eWxlKCk7CisgICAgICAgICAgICBkb3VibGUgdHJhbnNmb3JtZWRQcm9ncmVzcyA9IDE7CisgICAg
ICAgICAgICBpZiAoYXV0byogZWZmZWN0ID0gcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5l
ZmZlY3QoKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNvbXB1dGVkVGltaW5nUHJvZ3Jl
c3MgPSBlZmZlY3QtPmdldENvbXB1dGVkVGltaW5nKCkucHJvZ3Jlc3MpCisgICAgICAgICAgICAg
ICAgICAgIHRyYW5zZm9ybWVkUHJvZ3Jlc3MgPSAqY29tcHV0ZWRUaW1pbmdQcm9ncmVzczsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gcmV2ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvciA9
IHN0ZDo6bWF4KHN0ZDo6bWluKCgodHJhbnNmb3JtZWRQcm9ncmVzcyAqIHByZXZpb3VzbHlSdW5u
aW5nVHJhbnNpdGlvbi0+cmV2ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvcigpKSArICgxIC0gcHJldmlv
dXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5yZXZlcnNpbmdTaG9ydGVuaW5nRmFjdG9yKCkpKSwgMS4w
KSwgMC4wKTsKKyAgICAgICAgICAgIGF1dG8gZGVsYXkgPSBtYXRjaGluZ0JhY2tpbmdBbmltYXRp
b24tPmRlbGF5KCkgPCAwID8gU2Vjb25kcyhtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24tPmRlbGF5
KCkpICogcmV2ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvciA6IFNlY29uZHMobWF0Y2hpbmdCYWNraW5n
QW5pbWF0aW9uLT5kZWxheSgpKTsKKyAgICAgICAgICAgIGF1dG8gZHVyYXRpb24gPSBTZWNvbmRz
KG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbi0+ZHVyYXRpb24oKSkgKiByZXZlcnNpbmdTaG9ydGVu
aW5nRmFjdG9yOworCisgICAgICAgICAgICBzdHlsZWFibGUuZW5zdXJlUnVubmluZ1RyYW5zaXRp
b25zQnlQcm9wZXJ0eSgpLnNldChwcm9wZXJ0eSwgQ1NTVHJhbnNpdGlvbjo6Y3JlYXRlKHN0eWxl
YWJsZSwgcHJvcGVydHksIGdlbmVyYXRpb25UaW1lLCAqbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9u
LCAmcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlLCBhZnRlckNoYW5nZVN0
eWxlLCBkZWxheSwgZHVyYXRpb24sIHJldmVyc2luZ0FkanVzdGVkU3RhcnRTdHlsZSwgcmV2ZXJz
aW5nU2hvcnRlbmluZ0ZhY3RvcikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
NC4gT3RoZXJ3aXNlLCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBjYW5jZWwgdGhlIHJ1bm5pbmcgdHJh
bnNpdGlvbgorICAgICAgICAgICAgcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5jYW5jZWxG
cm9tU3R5bGUoKTsKKworICAgICAgICAgICAgLy8gYW5kIHN0YXJ0IGEgbmV3IHRyYW5zaXRpb24g
d2hvc2U6CisgICAgICAgICAgICAvLyAgIC0gc3RhcnQgdGltZSBpcyB0aGUgdGltZSBvZiB0aGUg
c3R5bGUgY2hhbmdlIGV2ZW50IHBsdXMgdGhlIG1hdGNoaW5nIHRyYW5zaXRpb24gZGVsYXksCisg
ICAgICAgICAgICAvLyAgIC0gZW5kIHRpbWUgaXMgdGhlIHN0YXJ0IHRpbWUgcGx1cyB0aGUgbWF0
Y2hpbmcgdHJhbnNpdGlvbiBkdXJhdGlvbiwKKyAgICAgICAgICAgIC8vICAgLSBzdGFydCB2YWx1
ZSBpcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIHJ1bm5pbmcgdHJh
bnNpdGlvbiwKKyAgICAgICAgICAgIC8vICAgLSBlbmQgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRo
ZSBwcm9wZXJ0eSBpbiB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlLAorICAgICAgICAgICAgLy8gICAt
IHJldmVyc2luZy1hZGp1c3RlZCBzdGFydCB2YWx1ZSBpcyB0aGUgc2FtZSBhcyB0aGUgc3RhcnQg
dmFsdWUsIGFuZAorICAgICAgICAgICAgLy8gICAtIHJldmVyc2luZyBzaG9ydGVuaW5nIGZhY3Rv
ciBpcyAxLgorICAgICAgICAgICAgYXV0byBkZWxheSA9IFNlY29uZHMobWF0Y2hpbmdCYWNraW5n
QW5pbWF0aW9uLT5kZWxheSgpKTsKKyAgICAgICAgICAgIGF1dG8gZHVyYXRpb24gPSBTZWNvbmRz
KG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CisgICAgICAgICAgICBhdXRv
JiByZXZlcnNpbmdBZGp1c3RlZFN0YXJ0U3R5bGUgPSBjdXJyZW50U3R5bGU7CisgICAgICAgICAg
ICBhdXRvIHJldmVyc2luZ1Nob3J0ZW5pbmdGYWN0b3IgPSAxOworICAgICAgICAgICAgc3R5bGVh
YmxlLmVuc3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS5zZXQocHJvcGVydHksIENT
U1RyYW5zaXRpb246OmNyZWF0ZShzdHlsZWFibGUsIHByb3BlcnR5LCBnZW5lcmF0aW9uVGltZSwg
Km1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiwgJnByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbkN1
cnJlbnRTdHlsZSwgYWZ0ZXJDaGFuZ2VTdHlsZSwgZGVsYXksIGR1cmF0aW9uLCByZXZlcnNpbmdB
ZGp1c3RlZFN0YXJ0U3R5bGUsIHJldmVyc2luZ1Nob3J0ZW5pbmdGYWN0b3IpKTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBTdHlsZWFibGU6OnVwZGF0ZUNTU1RyYW5zaXRpb25zKGNvbnN0
IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkg
Y29uc3QKK3sKKyAgICAvLyBJbiBjYXNlIHRoaXMgZWxlbWVudCBpcyBuZXdseSBnZXR0aW5nIGEg
ImRpc3BsYXk6IG5vbmUiIHdlIG5lZWQgdG8gY2FuY2VsIGFsbCBvZiBpdHMgdHJhbnNpdGlvbnMg
YW5kIGRpc3JlZ2FyZCBuZXcgb25lcy4KKyAgICBpZiAoY3VycmVudFN0eWxlLmhhc1RyYW5zaXRp
b25zKCkgJiYgY3VycmVudFN0eWxlLmRpc3BsYXkoKSAhPSBEaXNwbGF5VHlwZTo6Tm9uZSAmJiBu
ZXdTdHlsZS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6Ok5vbmUpIHsKKyAgICAgICAgaWYgKGhh
c1J1bm5pbmdUcmFuc2l0aW9ucygpKSB7CisgICAgICAgICAgICBhdXRvIHJ1bm5pbmdUcmFuc2l0
aW9ucyA9IGVuc3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKTsKKyAgICAgICAgICAg
IGZvciAoY29uc3QgYXV0byYgY3NzVHJhbnNpdGlvbnNCeUNTU1Byb3BlcnR5SURNYXBJdGVtIDog
cnVubmluZ1RyYW5zaXRpb25zKQorICAgICAgICAgICAgICAgIGNzc1RyYW5zaXRpb25zQnlDU1NQ
cm9wZXJ0eUlETWFwSXRlbS52YWx1ZS0+Y2FuY2VsRnJvbVN0eWxlKCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNlY3Rpb24gMyAiU3RhcnRpbmcgb2YgdHJh
bnNpdGlvbnMiIGZyb20gdGhlIENTUyBUcmFuc2l0aW9ucyBMZXZlbCAxIHNwZWNpZmljYXRpb24u
CisgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10cmFuc2l0aW9ucy0xLyNzdGFy
dGluZworCisgICAgYXV0byBnZW5lcmF0aW9uVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwor
CisgICAgLy8gRmlyc3QsIGxldCdzIGNvbXBpbGUgdGhlIGxpc3Qgb2YgYWxsIENTUyBwcm9wZXJ0
aWVzIGZvdW5kIGluIHRoZSBjdXJyZW50IHN0eWxlIGFuZCB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxl
LgorICAgIGJvb2wgdHJhbnNpdGlvblByb3BlcnRpZXNDb250YWluQWxsID0gZmFsc2U7CisgICAg
SGFzaFNldDxDU1NQcm9wZXJ0eUlEPiB0cmFuc2l0aW9uUHJvcGVydGllczsKKyAgICBjb21waWxl
VHJhbnNpdGlvblByb3BlcnRpZXNJblN0eWxlKGN1cnJlbnRTdHlsZSwgdHJhbnNpdGlvblByb3Bl
cnRpZXMsIHRyYW5zaXRpb25Qcm9wZXJ0aWVzQ29udGFpbkFsbCk7CisgICAgY29tcGlsZVRyYW5z
aXRpb25Qcm9wZXJ0aWVzSW5TdHlsZShuZXdTdHlsZSwgdHJhbnNpdGlvblByb3BlcnRpZXMsIHRy
YW5zaXRpb25Qcm9wZXJ0aWVzQ29udGFpbkFsbCk7CisKKyAgICBpZiAodHJhbnNpdGlvblByb3Bl
cnRpZXNDb250YWluQWxsKSB7CisgICAgICAgIGF1dG8gbnVtYmVyT2ZQcm9wZXJ0aWVzID0gQ1NT
UHJvcGVydHlBbmltYXRpb246OmdldE51bVByb3BlcnRpZXMoKTsKKyAgICAgICAgZm9yIChpbnQg
cHJvcGVydHlJbmRleCA9IDA7IHByb3BlcnR5SW5kZXggPCBudW1iZXJPZlByb3BlcnRpZXM7ICsr
cHJvcGVydHlJbmRleCkgeworICAgICAgICAgICAgT3B0aW9uYWw8Ym9vbD4gaXNTaG9ydGhhbmQ7
CisgICAgICAgICAgICBhdXRvIHByb3BlcnR5ID0gQ1NTUHJvcGVydHlBbmltYXRpb246OmdldFBy
b3BlcnR5QXRJbmRleChwcm9wZXJ0eUluZGV4LCBpc1Nob3J0aGFuZCk7CisgICAgICAgICAgICBp
ZiAoaXNTaG9ydGhhbmQgJiYgKmlzU2hvcnRoYW5kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgdXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGVBbmRQcm9wZXJ0
eSgqdGhpcywgcHJvcGVydHksIGN1cnJlbnRTdHlsZSwgbmV3U3R5bGUsIGdlbmVyYXRpb25UaW1l
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChhdXRvIHBy
b3BlcnR5IDogdHJhbnNpdGlvblByb3BlcnRpZXMpCisgICAgICAgIHVwZGF0ZUNTU1RyYW5zaXRp
b25zRm9yU3R5bGVhYmxlQW5kUHJvcGVydHkoKnRoaXMsIHByb3BlcnR5LCBjdXJyZW50U3R5bGUs
IG5ld1N0eWxlLCBnZW5lcmF0aW9uVGltZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlYWJsZS5oIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVhYmxlLmgKaW5kZXggNTI2YWQ0OWUxZWU5YTIyNjlhMmFlN2Q2ZjY0
Nzc2MmNkMzI0OTc4NS4uMTdmZDYxNzk0ZGMzM2NhNTQyYjgyZDhjYmNjNzU1NWMxYmRmYjE4ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVhYmxlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVhYmxlLmgKQEAgLTMxLDExICszMSwxMyBAQAogI2luY2x1ZGUg
IlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2lu
Y2x1ZGUgIldlYkFuaW1hdGlvblR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgS2V5ZnJhbWVFZmZlY3RTdGFjazsKIGNsYXNz
IFJlbmRlclN0eWxlOworY2xhc3MgV2ViQW5pbWF0aW9uOwogCiBzdHJ1Y3QgU3R5bGVhYmxlIHsK
ICAgICBFbGVtZW50JiBlbGVtZW50OwpAQCAtMTQ3LDYgKzE0OSwxOCBAQCBzdHJ1Y3QgU3R5bGVh
YmxlIHsKICAgICAgICAgZWxlbWVudC5zZXRMYXN0U3R5bGVDaGFuZ2VFdmVudFN0eWxlKHBzZXVk
b0lkLCBXVEZNb3ZlKHN0eWxlKSk7CiAgICAgfQogCisgICAgdm9pZCBlbGVtZW50V2FzUmVtb3Zl
ZCgpIGNvbnN0OworCisgICAgdm9pZCB3aWxsQ2hhbmdlUmVuZGVyZXIoKSBjb25zdDsKKyAgICB2
b2lkIGNhbmNlbERlY2xhcmF0aXZlQW5pbWF0aW9ucygpIGNvbnN0OworCisgICAgdm9pZCBhbmlt
YXRpb25XYXNBZGRlZChXZWJBbmltYXRpb24mKSBjb25zdDsKKyAgICB2b2lkIGFuaW1hdGlvbldh
c1JlbW92ZWQoV2ViQW5pbWF0aW9uJikgY29uc3Q7CisKKyAgICB2b2lkIHJlbW92ZURlY2xhcmF0
aXZlQW5pbWF0aW9uRnJvbUxpc3RzRm9yT3duaW5nRWxlbWVudChXZWJBbmltYXRpb24mKSBjb25z
dDsKKworICAgIHZvaWQgdXBkYXRlQ1NTQW5pbWF0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSogY3Vy
cmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgYWZ0ZXJDaGFuZ2VTdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHBhcmVudEVsZW1lbnRTdHlsZSkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVDU1NU
cmFuc2l0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYgY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSYgbmV3U3R5bGUpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="commit-queue"
          id="444568"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424807</attachid>
            <date>2021-03-31 12:55:05 -0700</date>
            <delta_ts>2021-03-31 14:46:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224012-20210331215504.patch</filename>
            <type>text/plain</type>
            <size>77040</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MzAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmRkZmQ5YTc0ODNkMWUx
ZDA0ZTlmMTg5MzM4ZDg3ZjVkNGY0OTMwZS4uZDJhNzA3MWM2M2U2NjllNmY1ZDQzZTc5MjBjYjI3
ODJhYmM3ODU0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDIxLTAzLTMxICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgQW5pbWF0aW9u
VGltZWxpbmUgbWV0aG9kcyByZWxhdGVkIHRvIFN0eWxlYWJsZSB0byBTdHlsZWFibGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDAxMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgbnVtYmVyIG9mIHB1
YmxpYyBtZXRob2RzIG9uIEFuaW1hdGlvblRpbWVsaW5lIG1ha2Ugbm8gdXNlIG9mIGFueSBBbmlt
YXRpb25UaW1lbGluZSBpbnN0YW5jZQorICAgICAgICB2YXJpYWJsZXMgYW5kIGluc3RlYWQgY2Fs
bCBpbnRvIFN0eWxlYWJsZToKKworICAgICAgICAgICAgdm9pZCBlbGVtZW50V2FzUmVtb3ZlZChj
b25zdCBTdHlsZWFibGUmKTsKKyAgICAgICAgICAgIHZvaWQgd2lsbENoYW5nZVJlbmRlcmVyRm9y
U3R5bGVhYmxlKGNvbnN0IFN0eWxlYWJsZSYpOworICAgICAgICAgICAgdm9pZCBjYW5jZWxEZWNs
YXJhdGl2ZUFuaW1hdGlvbnNGb3JTdHlsZWFibGUoY29uc3QgU3R5bGVhYmxlJik7CisgICAgICAg
ICAgICB2b2lkIGFuaW1hdGlvbldhc0FkZGVkVG9TdHlsZWFibGUoV2ViQW5pbWF0aW9uJiwgY29u
c3QgU3R5bGVhYmxlJik7CisgICAgICAgICAgICB2b2lkIGFuaW1hdGlvbldhc1JlbW92ZWRGcm9t
U3R5bGVhYmxlKFdlYkFuaW1hdGlvbiYsIGNvbnN0IFN0eWxlYWJsZSYpOworICAgICAgICAgICAg
dm9pZCByZW1vdmVEZWNsYXJhdGl2ZUFuaW1hdGlvbkZyb21MaXN0c0Zvck93bmluZ0VsZW1lbnQo
V2ViQW5pbWF0aW9uJiwgY29uc3QgU3R5bGVhYmxlJik7CisgICAgICAgICAgICB2b2lkIHVwZGF0
ZUNTU0FuaW1hdGlvbnNGb3JTdHlsZWFibGUoY29uc3QgU3R5bGVhYmxlJiwgY29uc3QgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIGFmdGVyQ2hhbmdlU3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRFbGVtZW50U3R5bGUpOworICAgICAgICAgICAgdm9p
ZCB1cGRhdGVDU1NUcmFuc2l0aW9uc0ZvclN0eWxlYWJsZShjb25zdCBTdHlsZWFibGUmLCBjb25z
dCBSZW5kZXJTdHlsZSYgY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUp
OworCisgICAgICAgIFRoZXNlIHJlYWxseSBiZWxvbmcgb24gU3R5bGVhYmxlIHNvIHdlIG1vdmUg
dGhlbSBhbGwgb3ZlciB0byB0aGF0IGNsYXNzIHdpdGggYSBuZXcgLmNwcCBjbGFzcworICAgICAg
ICBmb3IgdGhlc2Ugbm9uLXRyaXZpYWwgbWV0aG9kcy4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBhbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5p
bWF0aW9uVGltZWxpbmU6OnJlbW92ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbmlt
YXRpb25UaW1lbGluZTo6YW5pbWF0aW9uV2FzQWRkZWRUb1N0eWxlYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpyZW1vdmVDU1NUcmFuc2l0aW9uRnJvbU1hcCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25UaW1lbGluZTo6YW5pbWF0aW9uV2FzUmVtb3ZlZEZy
b21TdHlsZWFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uVGltZWxp
bmU6OnJlbW92ZURlY2xhcmF0aXZlQW5pbWF0aW9uRnJvbUxpc3RzRm9yT3duaW5nRWxlbWVudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25UaW1lbGluZTo6cmVtb3ZlQ1NT
QW5pbWF0aW9uQ3JlYXRlZEJ5TWFya3VwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFu
aW1hdGlvblRpbWVsaW5lOjplbGVtZW50V2FzUmVtb3ZlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpBbmltYXRpb25UaW1lbGluZTo6d2lsbENoYW5nZVJlbmRlcmVyRm9yU3R5bGVhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lOjpjYW5jZWxE
ZWNsYXJhdGl2ZUFuaW1hdGlvbnNGb3JTdHlsZWFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkQ29uc2lkZXJBbmltYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QW5pbWF0aW9uVGltZWxpbmU6OnVwZGF0ZUNTU0FuaW1hdGlvbnNGb3JTdHlsZWFibGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6a2V5ZnJhbWVFZmZlY3RGb3JFbGVtZW50QW5kUHJv
cGVydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cHJvcGVydHlJblN0eWxlTWF0Y2hl
c1ZhbHVlRm9yVHJhbnNpdGlvbkluTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRy
YW5zaXRpb25Db21iaW5lZER1cmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRy
YW5zaXRpb25NYXRjaGVzUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29t
cGlsZVRyYW5zaXRpb25Qcm9wZXJ0aWVzSW5TdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpBbmltYXRpb25UaW1lbGluZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGVB
bmRQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25UaW1lbGlu
ZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGUpOiBEZWxldGVkLgorICAgICAgICAq
IGFuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5oOgorICAgICAgICAqIGFuaW1hdGlvbi9EZWNs
YXJhdGl2ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWNsYXJhdGl2ZUFuaW1h
dGlvbjo6ZGlzYXNzb2NpYXRlRnJvbU93bmluZ0VsZW1lbnQpOgorICAgICAgICAqIGFuaW1hdGlv
bi9XZWJBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViQW5pbWF0aW9uOjpzZXRF
ZmZlY3RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJBbmltYXRpb246OnNldFRpbWVs
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6ZWZmZWN0VGFyZ2V0RGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFuaW1hdGlvbjo6cGVyc2lzdCk6CisgICAgICAg
ICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlZEZy
b21BbmNlc3Rvcik6CisgICAgICAgICogZG9tL1BzZXVkb0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxlbWVudCk6CisgICAgICAgICogcmVu
ZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJlbmRlcmVycyk6CisgICAgICAgICogc3R5bGUv
U3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRyZWVSZXNv
bHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKToKKyAgICAgICAgKiBzdHlsZS9TdHls
ZWFibGUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9u
VGltZWxpbmUuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVhYmxlOjphbmltYXRpb25XYXNB
ZGRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVDU1NUcmFuc2l0aW9uRnJvbU1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWFibGU6OnJlbW92ZURlY2xhcmF0aXZlQW5pbWF0
aW9uRnJvbUxpc3RzRm9yT3duaW5nRWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZWFibGU6OmFuaW1hdGlvbldhc1JlbW92ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
cmVtb3ZlQ1NTQW5pbWF0aW9uQ3JlYXRlZEJ5TWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlYWJsZTo6ZWxlbWVudFdhc1JlbW92ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVhYmxlOjp3aWxsQ2hhbmdlUmVuZGVyZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVhYmxlOjpjYW5jZWxEZWNsYXJhdGl2ZUFuaW1hdGlvbnMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkQ29uc2lkZXJBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVh
YmxlOjp1cGRhdGVDU1NBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmtleWZy
YW1lRWZmZWN0Rm9yRWxlbWVudEFuZFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OnByb3Bl
cnR5SW5TdHlsZU1hdGNoZXNWYWx1ZUZvclRyYW5zaXRpb25Jbk1hcCk6CisgICAgICAgIChXZWJD
b3JlOjp0cmFuc2l0aW9uQ29tYmluZWREdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0cmFu
c2l0aW9uTWF0Y2hlc1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBpbGVUcmFuc2l0
aW9uUHJvcGVydGllc0luU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQ1NTVHJhbnNp
dGlvbnNGb3JTdHlsZWFibGVBbmRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWFi
bGU6OnVwZGF0ZUNTU1RyYW5zaXRpb25zIGNvbnN0KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZWFi
bGUuaDoKKwogMjAyMS0wMy0zMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIEFkZCBkZXByZWNhdGlvbiBtYWNyb3MuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cmlu
ZGV4IDNlMDE3NTNiNmUzYjcyNGNmZDg3MzI2Nzg4NjU3OTI1ZDc1MTQxNWYuLjBhMjQxMDYwOGIw
NGYxY2MwMDdjYWE2MTQ5NjlhZTZlZTc4YzliNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yNDk3LDYg
KzI0OTcsNyBAQCBzdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCiBzdHlsZS9TdHlsZVNoYXJp
bmdSZXNvbHZlci5jcHAKIHN0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAogc3R5bGUvU3R5bGVV
cGRhdGUuY3BwCitzdHlsZS9TdHlsZWFibGUuY3BwCiBzdHlsZS9Vc2VyQWdlbnRTdHlsZS5jcHAK
IHN2Zy9Eb2N1bWVudFNWRy5jcHAKIHN2Zy9TVkdBRWxlbWVudC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzOTcxZjMwYzA3
OTllNzQ5NTg5YTkwMDVhZTg0Mjg4NzhmMmJkY2IwLi5iZjAyOGI3NDZhOGZjMGNjYWI2OTZmMjRi
NTA1YTUzZDc2YWU1ZmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDE0OCw2ICsxMDE0OCw3IEBACiAJCTcxNzI5RjdBMjBG
M0JBM0EwMDgwMUNFNiAvKiBEb2N1bWVudFRpbWVsaW5lT3B0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEb2N1bWVudFRpbWVsaW5lT3B0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MTcyOUY3QzIwRjNCQUI5MDA4MDFDRTYgLyogSlNEb2N1bWVu
dFRpbWVsaW5lT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Rv
Y3VtZW50VGltZWxpbmVPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcx
NzI5RjdEMjBGM0JBQkEwMDgwMUNFNiAvKiBKU0RvY3VtZW50VGltZWxpbmVPcHRpb25zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9jdW1lbnRUaW1lbGluZU9w
dGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MTczREVCRDI2MTRERjA0
MDA5N0RGMzIgLyogU3R5bGVhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0eWxlYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxNzdF
MjQ2MURCODBEMkYwMDkxOUEwQiAvKiBtZWRpYS1jb250cm9sbGVyLXN1cHBvcnQuanMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSAibWVkaWEtY29udHJvbGxlci1zdXBw
b3J0LmpzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzE3N0UyNDcxREI4MEQyRjAw
OTE5QTBCIC8qIG11dGUtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9ICJtdXRlLXN1cHBvcnQuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MTc3RTI0ODFEQjgwRDJGMDA5MTlBMEIgLyogc3RhcnQtc3VwcG9ydC5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJzdGFydC1zdXBwb3J0LmpzIjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MzExLDYgKzI5MzEyLDcgQEAKIAkJCQlBNzlCQUQ5
RTE2MUU3RjNGMDBDMkU2NTIgLyogUnVsZUZlYXR1cmUuaCAqLywKIAkJCQlBNzlCQUQ5RjE2MUU3
RjNGMDBDMkU2NTIgLyogUnVsZVNldC5jcHAgKi8sCiAJCQkJQTc5QkFEQTAxNjFFN0YzRjAwQzJF
NjUyIC8qIFJ1bGVTZXQuaCAqLywKKwkJCQk3MTczREVCRDI2MTRERjA0MDA5N0RGMzIgLyogU3R5
bGVhYmxlLmNwcCAqLywKIAkJCQk3MTM5MjJCQzI1MThBQjcwMDA1REIzQzIgLyogU3R5bGVhYmxl
LmggKi8sCiAJCQkJRTQ1QkE2QjIyMzc2MjI3RTAwNERGQzA3IC8qIFN0eWxlQWRqdXN0ZXIuY3Bw
ICovLAogCQkJCUU0NUJBNkI1MjM3NjIyOUYwMDRERkMwNyAvKiBTdHlsZUFkanVzdGVyLmggKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmNwcAppbmRl
eCA4ZWRmODBlMWRjNThhYWQ1ZjEzOTliN2UxYTBlZGJhMzY0YWZiNzhkLi5hZWYzMWQzMDFlNzU4
MGFlMjRjZDViNzZhMmIxNDBjNmJiYjg1NTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9BbmltYXRpb25UaW1lbGluZS5jcHAKQEAgLTI3LDI1ICsyNywxMSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkFuaW1hdGlvblRpbWVsaW5lLmgiCiAKLSNpbmNsdWRlICJB
bmltYXRpb24uaCIKLSNpbmNsdWRlICJBbmltYXRpb25FZmZlY3QuaCIKLSNpbmNsdWRlICJBbmlt
YXRpb25MaXN0LmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUHJv
cGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDU1NUcmFuc2l0aW9uLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnRUaW1lbGluZS5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJLZXlm
cmFtZUVmZmVjdC5oIgogI2luY2x1ZGUgIktleWZyYW1lRWZmZWN0U3RhY2suaCIKLSNpbmNsdWRl
ICJQc2V1ZG9FbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgogI2luY2x1
ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZWFibGUuaCIKICNpbmNsdWRlICJX
ZWJBbmltYXRpb25VdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtODIsNyArNjgsNyBAQCB2b2lkIEFuaW1hdGlvblRpbWVsaW5lOjpyZW1vdmVBbmltYXRp
b24oV2ViQW5pbWF0aW9uJiBhbmltYXRpb24pCiAgICAgbV9hbmltYXRpb25zLnJlbW92ZSgmYW5p
bWF0aW9uKTsKICAgICBpZiAoaXM8S2V5ZnJhbWVFZmZlY3Q+KGFuaW1hdGlvbi5lZmZlY3QoKSkp
IHsKICAgICAgICAgaWYgKGF1dG8gc3R5bGVhYmxlID0gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+
KGFuaW1hdGlvbi5lZmZlY3QoKSktPnRhcmdldFN0eWxlYWJsZSgpKSB7Ci0gICAgICAgICAgICBh
bmltYXRpb25XYXNSZW1vdmVkRnJvbVN0eWxlYWJsZShhbmltYXRpb24sICpzdHlsZWFibGUpOwor
ICAgICAgICAgICAgc3R5bGVhYmxlLT5hbmltYXRpb25XYXNSZW1vdmVkKGFuaW1hdGlvbik7CiAg
ICAgICAgICAgICBzdHlsZWFibGUtPmVuc3VyZUtleWZyYW1lRWZmZWN0U3RhY2soKS5yZW1vdmVF
ZmZlY3QoKmRvd25jYXN0PEtleWZyYW1lRWZmZWN0PihhbmltYXRpb24uZWZmZWN0KCkpKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTk2LDQ1NCArODIsNCBAQCBPcHRpb25hbDxkb3VibGU+IEFuaW1h
dGlvblRpbWVsaW5lOjpiaW5kaW5nc0N1cnJlbnRUaW1lKCkKICAgICByZXR1cm4gc2Vjb25kc1Rv
V2ViQW5pbWF0aW9uc0FQSVRpbWUoKnRpbWUpOwogfQogCi12b2lkIEFuaW1hdGlvblRpbWVsaW5l
OjphbmltYXRpb25XYXNBZGRlZFRvU3R5bGVhYmxlKFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uLCBj
b25zdCBTdHlsZWFibGUmIHN0eWxlYWJsZSkKLXsKLSAgICBzdHlsZWFibGUuZW5zdXJlQW5pbWF0
aW9ucygpLmFkZCgmYW5pbWF0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIHJlbW92ZUNT
U1RyYW5zaXRpb25Gcm9tTWFwKENTU1RyYW5zaXRpb24mIHRyYW5zaXRpb24sIFByb3BlcnR5VG9U
cmFuc2l0aW9uTWFwJiBjc3NUcmFuc2l0aW9uc0J5UHJvcGVydHkpCi17Ci0gICAgYXV0byB0cmFu
c2l0aW9uSXRlcmF0b3IgPSBjc3NUcmFuc2l0aW9uc0J5UHJvcGVydHkuZmluZCh0cmFuc2l0aW9u
LnByb3BlcnR5KCkpOwotICAgIGlmICh0cmFuc2l0aW9uSXRlcmF0b3IgPT0gY3NzVHJhbnNpdGlv
bnNCeVByb3BlcnR5LmVuZCgpIHx8IHRyYW5zaXRpb25JdGVyYXRvci0+dmFsdWUgIT0gJnRyYW5z
aXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNzc1RyYW5zaXRpb25zQnlQcm9w
ZXJ0eS5yZW1vdmUodHJhbnNpdGlvbkl0ZXJhdG9yKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBBbmltYXRpb25UaW1lbGluZTo6YW5pbWF0aW9uV2FzUmVtb3ZlZEZyb21TdHlsZWFibGUo
V2ViQW5pbWF0aW9uJiBhbmltYXRpb24sIGNvbnN0IFN0eWxlYWJsZSYgc3R5bGVhYmxlKQotewot
ICAgIHN0eWxlYWJsZS5lbnN1cmVBbmltYXRpb25zKCkucmVtb3ZlKCZhbmltYXRpb24pOwotCi0g
ICAgLy8gTm93LCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBDU1MgVHJhbnNpdGlvbiwgd2UgcmVt
b3ZlIGl0IGZyb20gdGhlIG1fZWxlbWVudFRvUnVubmluZ0NTU1RyYW5zaXRpb25CeUNTU1Byb3Bl
cnR5SUQgbWFwLgotICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gdGhpcyBmb3IgQ1NTIEFuaW1h
dGlvbnMgYmVjYXVzZSB0aGVpciB0aW1pbmcgY2FuIGJlIHNldCB2aWEgQ1NTIHRvIGVuZCwgd2hp
Y2ggd291bGQgY2F1c2UgdGhpcwotICAgIC8vIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCwgYnV0IHRo
ZXkgc2hvdWxkIHJlbWFpbiBhc3NvY2lhdGVkIHdpdGggdGhlaXIgb3duaW5nIGVsZW1lbnQgdW50
aWwgdGhpcyBpcyBjaGFuZ2VkIHZpYSBhIGNhbGwKLSAgICAvLyB0byB0aGUgSlMgQVBJIG9yIGNo
YW5naW5nIHRoZSB0YXJnZXQgZWxlbWVudCdzIGFuaW1hdGlvbi1uYW1lIHByb3BlcnR5LgotICAg
IGlmIChpczxDU1NUcmFuc2l0aW9uPihhbmltYXRpb24pKQotICAgICAgICByZW1vdmVEZWNsYXJh
dGl2ZUFuaW1hdGlvbkZyb21MaXN0c0Zvck93bmluZ0VsZW1lbnQoYW5pbWF0aW9uLCBzdHlsZWFi
bGUpOwotfQotCi12b2lkIEFuaW1hdGlvblRpbWVsaW5lOjpyZW1vdmVEZWNsYXJhdGl2ZUFuaW1h
dGlvbkZyb21MaXN0c0Zvck93bmluZ0VsZW1lbnQoV2ViQW5pbWF0aW9uJiBhbmltYXRpb24sIGNv
bnN0IFN0eWxlYWJsZSYgc3R5bGVhYmxlKQotewotICAgIEFTU0VSVChpczxEZWNsYXJhdGl2ZUFu
aW1hdGlvbj4oYW5pbWF0aW9uKSk7Ci0KLSAgICBpZiAoaXM8Q1NTVHJhbnNpdGlvbj4oYW5pbWF0
aW9uKSkgewotICAgICAgICBhdXRvJiB0cmFuc2l0aW9uID0gZG93bmNhc3Q8Q1NTVHJhbnNpdGlv
bj4oYW5pbWF0aW9uKTsKLSAgICAgICAgaWYgKCFyZW1vdmVDU1NUcmFuc2l0aW9uRnJvbU1hcCh0
cmFuc2l0aW9uLCBzdHlsZWFibGUuZW5zdXJlUnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSgp
KSkKLSAgICAgICAgICAgIHJlbW92ZUNTU1RyYW5zaXRpb25Gcm9tTWFwKHRyYW5zaXRpb24sIHN0
eWxlYWJsZS5lbnN1cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKSk7Ci0gICAgfQot
fQotCi12b2lkIEFuaW1hdGlvblRpbWVsaW5lOjpyZW1vdmVDU1NBbmltYXRpb25DcmVhdGVkQnlN
YXJrdXAoY29uc3QgU3R5bGVhYmxlJiBzdHlsZWFibGUsIENTU0FuaW1hdGlvbiYgY3NzQW5pbWF0
aW9uKQotewotICAgIHN0eWxlYWJsZS5hbmltYXRpb25zQ3JlYXRlZEJ5TWFya3VwKCkucmVtb3Zl
KCZjc3NBbmltYXRpb24pOwotCi0gICAgaWYgKCFzdHlsZWFibGUuaGFzS2V5ZnJhbWVFZmZlY3Rz
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGtleWZyYW1lRWZmZWN0U3RhY2sgPSBz
dHlsZWFibGUuZW5zdXJlS2V5ZnJhbWVFZmZlY3RTdGFjaygpOwotICAgIGF1dG8qIGNzc0FuaW1h
dGlvbkxpc3QgPSBrZXlmcmFtZUVmZmVjdFN0YWNrLmNzc0FuaW1hdGlvbkxpc3QoKTsKLSAgICBp
ZiAoIWNzc0FuaW1hdGlvbkxpc3QgfHwgY3NzQW5pbWF0aW9uTGlzdC0+aXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBiYWNraW5nQW5pbWF0aW9uID0gY3NzQW5pbWF0aW9u
LmJhY2tpbmdBbmltYXRpb24oKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNzc0FuaW1h
dGlvbkxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChjc3NBbmltYXRpb25MaXN0LT5h
bmltYXRpb24oaSkgPT0gYmFja2luZ0FuaW1hdGlvbikgewotICAgICAgICAgICAgYXV0byBuZXdB
bmltYXRpb25MaXN0ID0gY3NzQW5pbWF0aW9uTGlzdC0+Y29weSgpOwotICAgICAgICAgICAgbmV3
QW5pbWF0aW9uTGlzdC0+cmVtb3ZlKGkpOwotICAgICAgICAgICAga2V5ZnJhbWVFZmZlY3RTdGFj
ay5zZXRDU1NBbmltYXRpb25MaXN0KFdURk1vdmUobmV3QW5pbWF0aW9uTGlzdCkpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEFuaW1hdGlvblRpbWVs
aW5lOjplbGVtZW50V2FzUmVtb3ZlZChjb25zdCBTdHlsZWFibGUmIHN0eWxlYWJsZSkKLXsKLSAg
ICBjYW5jZWxEZWNsYXJhdGl2ZUFuaW1hdGlvbnNGb3JTdHlsZWFibGUoc3R5bGVhYmxlKTsKLX0K
LQotdm9pZCBBbmltYXRpb25UaW1lbGluZTo6d2lsbENoYW5nZVJlbmRlcmVyRm9yU3R5bGVhYmxl
KGNvbnN0IFN0eWxlYWJsZSYgc3R5bGVhYmxlKQotewotICAgIGlmIChhdXRvKiBhbmltYXRpb25z
ID0gc3R5bGVhYmxlLmFuaW1hdGlvbnMoKSkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFu
aW1hdGlvbiA6ICphbmltYXRpb25zKQotICAgICAgICAgICAgYW5pbWF0aW9uLT53aWxsQ2hhbmdl
UmVuZGVyZXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQW5pbWF0aW9uVGltZWxpbmU6OmNhbmNlbERl
Y2xhcmF0aXZlQW5pbWF0aW9uc0ZvclN0eWxlYWJsZShjb25zdCBTdHlsZWFibGUmIHN0eWxlYWJs
ZSkKLXsKLSAgICBpZiAoYXV0byogYW5pbWF0aW9ucyA9IHN0eWxlYWJsZS5hbmltYXRpb25zKCkp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiAqYW5pbWF0aW9ucykgewotICAgICAg
ICAgICAgaWYgKGlzPERlY2xhcmF0aXZlQW5pbWF0aW9uPihhbmltYXRpb24pKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzPENTU0FuaW1hdGlvbj4oYW5pbWF0aW9uKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmVtb3ZlQ1NTQW5pbWF0aW9uQ3JlYXRlZEJ5TWFya3VwKHN0eWxlYWJsZSwgZG93bmNh
c3Q8Q1NTQW5pbWF0aW9uPigqYW5pbWF0aW9uKSk7Ci0gICAgICAgICAgICAgICAgZG93bmNhc3Q8
RGVjbGFyYXRpdmVBbmltYXRpb24+KCphbmltYXRpb24pLmNhbmNlbEZyb21TdHlsZSgpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRDb25z
aWRlckFuaW1hdGlvbihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBbmltYXRpb24mIGFuaW1hdGlv
bikKLXsKLSAgICBpZiAoIWFuaW1hdGlvbi5pc1ZhbGlkQW5pbWF0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGFu
aW1hdGlvbk5hbWVOb25lKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJub25lIikpOwotCi0gICAg
YXV0byYgbmFtZSA9IGFuaW1hdGlvbi5uYW1lKCk7Ci0gICAgaWYgKG5hbWUgPT0gYW5pbWF0aW9u
TmFtZU5vbmUgfHwgbmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChhdXRvKiBzdHlsZVNjb3BlID0gU3R5bGU6OlNjb3BlOjpmb3JPcmRpbmFsKGVsZW1lbnQs
IGFuaW1hdGlvbi5uYW1lU3R5bGVTY29wZU9yZGluYWwoKSkpCi0gICAgICAgIHJldHVybiBzdHls
ZVNjb3BlLT5yZXNvbHZlcigpLmlzQW5pbWF0aW9uTmFtZVZhbGlkKG5hbWUpOwotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIEFuaW1hdGlvblRpbWVsaW5lOjp1cGRhdGVDU1NBbmltYXRp
b25zRm9yU3R5bGVhYmxlKGNvbnN0IFN0eWxlYWJsZSYgc3R5bGVhYmxlLCBjb25zdCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlKiBwYXJlbnRFbGVtZW50U3R5bGUpCi17Ci0gICAgYXV0byYga2V5ZnJhbWVFZmZl
Y3RTdGFjayA9IHN0eWxlYWJsZS5lbnN1cmVLZXlmcmFtZUVmZmVjdFN0YWNrKCk7Ci0KLSAgICAv
LyBJbiBjYXNlIHRoaXMgZWxlbWVudCBpcyBuZXdseSBnZXR0aW5nIGEgImRpc3BsYXk6IG5vbmUi
IHdlIG5lZWQgdG8gY2FuY2VsIGFsbCBvZiBpdHMgYW5pbWF0aW9ucyBhbmQgZGlzcmVnYXJkIG5l
dyBvbmVzLgotICAgIGlmIChjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLT5kaXNwbGF5KCkg
IT0gRGlzcGxheVR5cGU6Ok5vbmUgJiYgbmV3U3R5bGUuZGlzcGxheSgpID09IERpc3BsYXlUeXBl
OjpOb25lKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY3NzQW5pbWF0aW9uIDogc3R5bGVhYmxlLmFu
aW1hdGlvbnNDcmVhdGVkQnlNYXJrdXAoKSkKLSAgICAgICAgICAgIGNzc0FuaW1hdGlvbi0+Y2Fu
Y2VsRnJvbVN0eWxlKCk7Ci0gICAgICAgIGtleWZyYW1lRWZmZWN0U3RhY2suc2V0Q1NTQW5pbWF0
aW9uTGlzdChudWxscHRyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8qIGN1
cnJlbnRBbmltYXRpb25MaXN0ID0gbmV3U3R5bGUuYW5pbWF0aW9ucygpOwotICAgIGF1dG8qIHBy
ZXZpb3VzQW5pbWF0aW9uTGlzdCA9IGtleWZyYW1lRWZmZWN0U3RhY2suY3NzQW5pbWF0aW9uTGlz
dCgpOwotICAgIGlmIChwcmV2aW91c0FuaW1hdGlvbkxpc3QgJiYgIXByZXZpb3VzQW5pbWF0aW9u
TGlzdC0+aXNFbXB0eSgpICYmIG5ld1N0eWxlLmhhc0FuaW1hdGlvbnMoKSAmJiAqKHByZXZpb3Vz
QW5pbWF0aW9uTGlzdCkgPT0gKihuZXdTdHlsZS5hbmltYXRpb25zKCkpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDU1NBbmltYXRpb25Db2xsZWN0aW9uIG5ld0FuaW1hdGlvbnM7Ci0gICAgYXV0
byYgcHJldmlvdXNBbmltYXRpb25zID0gc3R5bGVhYmxlLmFuaW1hdGlvbnNDcmVhdGVkQnlNYXJr
dXAoKTsKLQotICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtYW5pbWF0aW9ucy0xLyNh
bmltYXRpb25zCi0gICAgLy8gVGhlIHNhbWUgQGtleWZyYW1lcyBydWxlIG5hbWUgbWF5IGJlIHJl
cGVhdGVkIHdpdGhpbiBhbiBhbmltYXRpb24tbmFtZS4gQ2hhbmdlcyB0byB0aGUgYW5pbWF0aW9u
LW5hbWUgdXBkYXRlIGV4aXN0aW5nCi0gICAgLy8gYW5pbWF0aW9ucyBieSBpdGVyYXRpbmcgb3Zl
ciB0aGUgbmV3IGxpc3Qgb2YgYW5pbWF0aW9ucyBmcm9tIGxhc3QgdG8gZmlyc3QsIGFuZCwgZm9y
IGVhY2ggYW5pbWF0aW9uLCBmaW5kaW5nIHRoZSBsYXN0Ci0gICAgLy8gbWF0Y2hpbmcgYW5pbWF0
aW9uIGluIHRoZSBsaXN0IG9mIGV4aXN0aW5nIGFuaW1hdGlvbnMuIElmIGEgbWF0Y2ggaXMgZm91
bmQsIHRoZSBleGlzdGluZyBhbmltYXRpb24gaXMgdXBkYXRlZCB1c2luZyB0aGUKLSAgICAvLyBh
bmltYXRpb24gcHJvcGVydGllcyBjb3JyZXNwb25kaW5nIHRvIGl0cyBwb3NpdGlvbiBpbiB0aGUg
bmV3IGxpc3Qgb2YgYW5pbWF0aW9ucywgd2hpbHN0IG1haW50YWluaW5nIGl0cyBjdXJyZW50IHBs
YXliYWNrCi0gICAgLy8gdGltZSBhcyBkZXNjcmliZWQgYWJvdmUuIFRoZSBtYXRjaGluZyBhbmlt
YXRpb24gaXMgcmVtb3ZlZCBmcm9tIHRoZSBleGlzdGluZyBsaXN0IG9mIGFuaW1hdGlvbnMgc3Vj
aCB0aGF0IGl0IHdpbGwgbm90IG1hdGNoCi0gICAgLy8gdHdpY2UuIElmIGEgbWF0Y2ggaXMgbm90
IGZvdW5kLCBhIG5ldyBhbmltYXRpb24gaXMgY3JlYXRlZC4gQXMgYSByZXN1bHQsIHVwZGF0aW5n
IGFuaW1hdGlvbi1uYW1lIGZyb20g4oCYYeKAmSB0byDigJhhLCBh4oCZIHdpbGwKLSAgICAvLyBj
YXVzZSB0aGUgZXhpc3RpbmcgYW5pbWF0aW9uIGZvciDigJhh4oCZIHRvIGJlY29tZSB0aGUgc2Vj
b25kIGFuaW1hdGlvbiBpbiB0aGUgbGlzdCBhbmQgYSBuZXcgYW5pbWF0aW9uIHdpbGwgYmUgY3Jl
YXRlZCBmb3IgdGhlCi0gICAgLy8gZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC4KLSAgICBpZiAoY3Vy
cmVudEFuaW1hdGlvbkxpc3QpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IGN1cnJlbnRBbmlt
YXRpb25MaXN0LT5zaXplKCk7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgICAgIGF1dG8mIGN1cnJl
bnRBbmltYXRpb24gPSBjdXJyZW50QW5pbWF0aW9uTGlzdC0+YW5pbWF0aW9uKGkgLSAxKTsKLSAg
ICAgICAgICAgIGlmICghc2hvdWxkQ29uc2lkZXJBbmltYXRpb24oc3R5bGVhYmxlLmVsZW1lbnQs
IGN1cnJlbnRBbmltYXRpb24pKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICBib29sIGZvdW5kTWF0Y2hpbmdBbmltYXRpb24gPSBmYWxzZTsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgcHJldmlvdXNBbmltYXRpb24gOiBwcmV2aW91c0FuaW1hdGlvbnMpIHsKLSAgICAg
ICAgICAgICAgICBpZiAocHJldmlvdXNBbmltYXRpb24tPmFuaW1hdGlvbk5hbWUoKSA9PSBjdXJy
ZW50QW5pbWF0aW9uLm5hbWUoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaW1pbmcgcHJv
cGVydGllcyBvciBwbGF5IHN0YXRlIG1heSBoYXZlIGNoYW5nZWQgc28gd2UgbmVlZCB0byB1cGRh
dGUgdGhlIGJhY2tpbmcgYW5pbWF0aW9uIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IEFuaW1hdGlvbiBmb3VuZCBpbiB0aGUgY3VycmVudCBzdHlsZS4KLSAgICAgICAgICAgICAgICAg
ICAgcHJldmlvdXNBbmltYXRpb24tPnNldEJhY2tpbmdBbmltYXRpb24oY3VycmVudEFuaW1hdGlv
bik7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuYWRkKHByZXZpb3VzQW5pbWF0
aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBtYXRjaGVkIGFuaW1hdGlv
biBmcm9tIHRoZSBsaXN0IG9mIHByZXZpb3VzIGFuaW1hdGlvbnMgc28gd2UgbWF5IG5vdCBtYXRj
aCBpdCBhZ2Fpbi4KLSAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNBbmltYXRpb25zLnJlbW92
ZShwcmV2aW91c0FuaW1hdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kTWF0Y2hpbmdB
bmltYXRpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZm91bmRNYXRjaGluZ0Fu
aW1hdGlvbikKLSAgICAgICAgICAgICAgICBuZXdBbmltYXRpb25zLmFkZChDU1NBbmltYXRpb246
OmNyZWF0ZShzdHlsZWFibGUsIGN1cnJlbnRBbmltYXRpb24sIGN1cnJlbnRTdHlsZSwgbmV3U3R5
bGUsIHBhcmVudEVsZW1lbnRTdHlsZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQW55
IGFuaW1hdGlvbiBmb3VuZCBpbiBwcmV2aW91c0FuaW1hdGlvbnMgYnV0IG5vdCBmb3VuZCBpbiBu
ZXdBbmltYXRpb25zIGlzIG5vdCBsb25nZXIgY3VycmVudCBhbmQgc2hvdWxkIGJlIGNhbmNlbGVk
LgotICAgIGZvciAoYXV0byYgcHJldmlvdXNBbmltYXRpb24gOiBwcmV2aW91c0FuaW1hdGlvbnMp
IHsKLSAgICAgICAgaWYgKCFuZXdBbmltYXRpb25zLmNvbnRhaW5zKHByZXZpb3VzQW5pbWF0aW9u
KSkgewotICAgICAgICAgICAgaWYgKHByZXZpb3VzQW5pbWF0aW9uLT5vd25pbmdFbGVtZW50KCkp
Ci0gICAgICAgICAgICAgICAgcHJldmlvdXNBbmltYXRpb24tPmNhbmNlbEZyb21TdHlsZSgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgc3R5bGVhYmxlLnNldEFuaW1hdGlvbnNDcmVhdGVkQnlN
YXJrdXAoV1RGTW92ZShuZXdBbmltYXRpb25zKSk7Ci0KLSAgICBrZXlmcmFtZUVmZmVjdFN0YWNr
LnNldENTU0FuaW1hdGlvbkxpc3QoY3VycmVudEFuaW1hdGlvbkxpc3QpOwotfQotCi1zdGF0aWMg
S2V5ZnJhbWVFZmZlY3QqIGtleWZyYW1lRWZmZWN0Rm9yRWxlbWVudEFuZFByb3BlcnR5KGNvbnN0
IFN0eWxlYWJsZSYgc3R5bGVhYmxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQotewotICAgIGlm
IChhdXRvKiBrZXlmcmFtZUVmZmVjdFN0YWNrID0gc3R5bGVhYmxlLmtleWZyYW1lRWZmZWN0U3Rh
Y2soKSkgewotICAgICAgICBhdXRvIGVmZmVjdHMgPSBrZXlmcmFtZUVmZmVjdFN0YWNrLT5zb3J0
ZWRFZmZlY3RzKCk7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgZWZmZWN0IDogbWFrZVJldmVy
c2VkUmFuZ2UoZWZmZWN0cykpIHsKLSAgICAgICAgICAgIGlmIChlZmZlY3QtPmFuaW1hdGVzUHJv
cGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAgICAgIHJldHVybiBlZmZlY3QuZ2V0KCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIGJvb2wg
cHJvcGVydHlJblN0eWxlTWF0Y2hlc1ZhbHVlRm9yVHJhbnNpdGlvbkluTWFwKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUHJvcGVydHlUb1RyYW5zaXRp
b25NYXAmIHRyYW5zaXRpb25zKQotewotICAgIGlmIChhdXRvKiB0cmFuc2l0aW9uID0gdHJhbnNp
dGlvbnMuZ2V0KHByb3BlcnR5KSkgewotICAgICAgICBpZiAoQ1NTUHJvcGVydHlBbmltYXRpb246
OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgJnN0eWxlLCAmdHJhbnNpdGlvbi0+dGFyZ2V0U3R5
bGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1zdGF0aWMgZG91YmxlIHRyYW5zaXRpb25Db21iaW5lZER1cmF0aW9uKGNvbnN0IEFu
aW1hdGlvbiogdHJhbnNpdGlvbikKLXsKLSAgICByZXR1cm4gc3RkOjptYXgoMC4wLCB0cmFuc2l0
aW9uLT5kdXJhdGlvbigpKSArIHRyYW5zaXRpb24tPmRlbGF5KCk7Ci19Ci0KLXN0YXRpYyBib29s
IHRyYW5zaXRpb25NYXRjaGVzUHJvcGVydHkoY29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KQotewotICAgIGF1dG8gbW9kZSA9IHRyYW5zaXRpb24ucHJv
cGVydHkoKS5tb2RlOwotICAgIGlmIChtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6
Ok5vbmUgfHwgbW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpVbmtub3duUHJvcGVy
dHkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobW9kZSA9PSBBbmltYXRpb246OlRy
YW5zaXRpb25Nb2RlOjpTaW5nbGVQcm9wZXJ0eSkgewotICAgICAgICBhdXRvIHRyYW5zaXRpb25Q
cm9wZXJ0eSA9IHRyYW5zaXRpb24ucHJvcGVydHkoKS5pZDsKLSAgICAgICAgaWYgKHRyYW5zaXRp
b25Qcm9wZXJ0eSAhPSBwcm9wZXJ0eSkgewotICAgICAgICAgICAgZm9yIChhdXRvIGxvbmdoYW5k
IDogc2hvcnRoYW5kRm9yUHJvcGVydHkodHJhbnNpdGlvblByb3BlcnR5KSkgewotICAgICAgICAg
ICAgICAgIGlmIChsb25naGFuZCA9PSBwcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbXBpbGVU
cmFuc2l0aW9uUHJvcGVydGllc0luU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBIYXNo
U2V0PENTU1Byb3BlcnR5SUQ+JiB0cmFuc2l0aW9uUHJvcGVydGllcywgYm9vbCYgdHJhbnNpdGlv
blByb3BlcnRpZXNDb250YWluQWxsKQotewotICAgIGlmICh0cmFuc2l0aW9uUHJvcGVydGllc0Nv
bnRhaW5BbGwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIHRyYW5zaXRpb25zID0gc3R5
bGUudHJhbnNpdGlvbnMoKTsKLSAgICBpZiAoIXRyYW5zaXRpb25zKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYW5zaXRpb25zLT5zaXplKCk7ICsraSkg
ewotICAgICAgICBjb25zdCBhdXRvJiBhbmltYXRpb24gPSB0cmFuc2l0aW9ucy0+YW5pbWF0aW9u
KGkpOwotICAgICAgICBhdXRvIG1vZGUgPSBhbmltYXRpb24ucHJvcGVydHkoKS5tb2RlOwotICAg
ICAgICBpZiAobW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpTaW5nbGVQcm9wZXJ0
eSkgewotICAgICAgICAgICAgYXV0byBwcm9wZXJ0eSA9IGFuaW1hdGlvbi5wcm9wZXJ0eSgpLmlk
OwotICAgICAgICAgICAgaWYgKGlzU2hvcnRoYW5kQ1NTUHJvcGVydHkocHJvcGVydHkpKSB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChhdXRvIGxvbmdoYW5kIDogc2hvcnRoYW5kRm9yUHJvcGVydHko
cHJvcGVydHkpKQotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uUHJvcGVydGllcy5hZGQo
bG9uZ2hhbmQpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSAhPSBDU1NQcm9wZXJ0
eUludmFsaWQpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvblByb3BlcnRpZXMuYWRkKHByb3Bl
cnR5KTsKLSAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1v
ZGU6OkFsbCkgewotICAgICAgICAgICAgdHJhbnNpdGlvblByb3BlcnRpZXNDb250YWluQWxsID0g
dHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBB
bmltYXRpb25UaW1lbGluZTo6dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGVBbmRQcm9w
ZXJ0eShjb25zdCBTdHlsZWFibGUmIHN0eWxlYWJsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
Y29uc3QgUmVuZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0
eWxlLCBjb25zdCBNb25vdG9uaWNUaW1lIGdlbmVyYXRpb25UaW1lKQotewotICAgIGF1dG8qIGtl
eWZyYW1lRWZmZWN0ID0ga2V5ZnJhbWVFZmZlY3RGb3JFbGVtZW50QW5kUHJvcGVydHkoc3R5bGVh
YmxlLCBwcm9wZXJ0eSk7Ci0gICAgYXV0byogYW5pbWF0aW9uID0ga2V5ZnJhbWVFZmZlY3QgPyBr
ZXlmcmFtZUVmZmVjdC0+YW5pbWF0aW9uKCkgOiBudWxscHRyOwotCi0gICAgYm9vbCBpc0RlY2xh
cmF0aXZlID0gZmFsc2U7Ci0gICAgaWYgKGlzPERlY2xhcmF0aXZlQW5pbWF0aW9uPihhbmltYXRp
b24pKSB7Ci0gICAgICAgIGlmIChhdXRvIG93bmluZ0VsZW1lbnQgPSBkb3duY2FzdDxEZWNsYXJh
dGl2ZUFuaW1hdGlvbj4oKmFuaW1hdGlvbikub3duaW5nRWxlbWVudCgpKQotICAgICAgICAgICAg
aXNEZWNsYXJhdGl2ZSA9ICpvd25pbmdFbGVtZW50ID09IHN0eWxlYWJsZTsKLSAgICB9Ci0KLSAg
ICBpZiAoYW5pbWF0aW9uICYmICFpc0RlY2xhcmF0aXZlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBjb25zdCBBbmltYXRpb24qIG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiA9IG51bGxwdHI7Ci0g
ICAgaWYgKGF1dG8qIHRyYW5zaXRpb25zID0gbmV3U3R5bGUudHJhbnNpdGlvbnMoKSkgewotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYW5zaXRpb25zLT5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgYXV0byYgYmFja2luZ0FuaW1hdGlvbiA9IHRyYW5zaXRpb25zLT5hbmltYXRp
b24oaSk7Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlvbk1hdGNoZXNQcm9wZXJ0eShiYWNraW5n
QW5pbWF0aW9uLCBwcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgbWF0Y2hpbmdCYWNraW5nQW5p
bWF0aW9uID0gJmJhY2tpbmdBbmltYXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBB
IENTUyBUcmFuc2l0aW9uIG1pZ2h0IGhhdmUgY29tcGxldGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUg
YW5pbWF0aW9ucyB3ZXJlIHVwZGF0ZWQgc28gd2UgbXVzdAotICAgIC8vIHVwZGF0ZSB0aGUgcnVu
bmluZyBhbmQgY29tcGxldGVkIHRyYW5zaXRpb25zIG1lbWJlcnNoaXAgaW4gdGhhdCBjYXNlLgot
ICAgIGlmIChpczxDU1NUcmFuc2l0aW9uPihhbmltYXRpb24pICYmIG1hdGNoaW5nQmFja2luZ0Fu
aW1hdGlvbiAmJiBzdHlsZWFibGUuaGFzUnVubmluZ1RyYW5zaXRpb25Gb3JQcm9wZXJ0eShwcm9w
ZXJ0eSkgJiYgYW5pbWF0aW9uLT5wbGF5U3RhdGUoKSA9PSBXZWJBbmltYXRpb246OlBsYXlTdGF0
ZTo6RmluaXNoZWQpIHsKLSAgICAgICAgc3R5bGVhYmxlLmVuc3VyZUNvbXBsZXRlZFRyYW5zaXRp
b25zQnlQcm9wZXJ0eSgpLnNldChwcm9wZXJ0eSwgc3R5bGVhYmxlLmVuc3VyZVJ1bm5pbmdUcmFu
c2l0aW9uc0J5UHJvcGVydHkoKS50YWtlKHByb3BlcnR5KSk7Ci0gICAgICAgIGFuaW1hdGlvbiA9
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10
cmFuc2l0aW9ucy0xLyNiZWZvcmUtY2hhbmdlLXN0eWxlCi0gICAgLy8gRGVmaW5lIHRoZSBiZWZv
cmUtY2hhbmdlIHN0eWxlIGFzIHRoZSBjb21wdXRlZCB2YWx1ZXMgb2YgYWxsIHByb3BlcnRpZXMg
b24gdGhlIGVsZW1lbnQgYXMgb2YgdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBldmVudCwgZXhj
ZXB0IHdpdGgKLSAgICAvLyBhbnkgc3R5bGVzIGRlcml2ZWQgZnJvbSBkZWNsYXJhdGl2ZSBhbmlt
YXRpb25zIHN1Y2ggYXMgQ1NTIFRyYW5zaXRpb25zLCBDU1MgQW5pbWF0aW9ucywgYW5kIFNNSUwg
QW5pbWF0aW9ucyB1cGRhdGVkIHRvIHRoZSBjdXJyZW50IHRpbWUuCi0gICAgYXV0byBiZWZvcmVD
aGFuZ2VTdHlsZSA9IFsmXSgpIC0+IGNvbnN0IFJlbmRlclN0eWxlIHsKLSAgICAgICAgaWYgKGFu
aW1hdGlvbiAmJiBhbmltYXRpb24tPmlzUmVsZXZhbnQoKSkgewotICAgICAgICAgICAgYXV0byBh
bmltYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGN1cnJlbnRTdHlsZSk7Ci0gICAgICAg
ICAgICAvLyBJZiBhIHRyYW5zaXRpb24gaGFzIG5vdCB5ZXQgc3RhcnRlZCBvciBzdGFydGVkIHdo
ZW4gYW5pbWF0aW9ucyB3ZXJlIGxhc3QgdXBkYXRlZCwgdXNlIHRoZSB0aW1lbGluZSB0aW1lIGF0
IGl0cyBjcmVhdGlvbgotICAgICAgICAgICAgLy8gYXMgaXRzIHN0YXJ0IHRpbWUgdG8gZW5zdXJl
IHRoYXQgaXQgd2lsbCBwcm9kdWNlIGEgc3R5bGUgd2l0aCBwcm9ncmVzcyA+IDAuCi0gICAgICAg
ICAgICBib29sIHNob3VsZFVzZVRpbWVsaW5lVGltZUF0Q3JlYXRpb24gPSBpczxDU1NUcmFuc2l0
aW9uPihhbmltYXRpb24pICYmICghYW5pbWF0aW9uLT5zdGFydFRpbWUoKSB8fCAqYW5pbWF0aW9u
LT5zdGFydFRpbWUoKSA9PSBjdXJyZW50VGltZSgpKTsKLSAgICAgICAgICAgIGFuaW1hdGlvbi0+
cmVzb2x2ZShhbmltYXRlZFN0eWxlLCBudWxscHRyLCBzaG91bGRVc2VUaW1lbGluZVRpbWVBdENy
ZWF0aW9uID8gZG93bmNhc3Q8Q1NTVHJhbnNpdGlvbj4oKmFuaW1hdGlvbikudGltZWxpbmVUaW1l
QXRDcmVhdGlvbigpIDogV1RGOjpudWxsb3B0KTsKLSAgICAgICAgICAgIHJldHVybiBhbmltYXRl
ZFN0eWxlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgaXQgZXhpc3RzLCB1c2UgdGhlIHJl
Y29yZGVkIFJlbmRlclN0eWxlIGZvciB0aGlzIGVsZW1lbnQgZHVyaW5nIGEgcHJldmlvdXMgY2Fs
bCB0byBTdHlsZTo6VHJlZVJlc29sdmVyOjpjcmVhdGVBbmltYXRlZEVsZW1lbnRVcGRhdGUoKS4K
LSAgICAgICAgaWYgKGF1dG8qIGxhc3RTdHlsZUNoYW5nZUV2ZW50U3R5bGUgPSBzdHlsZWFibGUu
bGFzdFN0eWxlQ2hhbmdlRXZlbnRTdHlsZSgpKQotICAgICAgICAgICAgcmV0dXJuIFJlbmRlclN0
eWxlOjpjbG9uZSgqbGFzdFN0eWxlQ2hhbmdlRXZlbnRTdHlsZSk7Ci0KLSAgICAgICAgLy8gSWYg
d2UgaGF2ZW4ndCBjb21wdXRlZCBzdHlsZXMgZnJvbSBhbmltYXRpb25zIGZvciB0aGlzIGVsZW1l
bnQsIHRoZSBiZWZvcmUtY2hhbmdlIHN0eWxlIGlzIHRoZSBwcmV2aW91c2x5IHJlc29sdmVkIHN0
eWxlIGZvciB0aGlzIGVsZW1lbnQuCi0gICAgICAgIHJldHVybiBSZW5kZXJTdHlsZTo6Y2xvbmUo
Y3VycmVudFN0eWxlKTsKLSAgICB9KCk7Ci0KLSAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5v
cmcvY3NzLXRyYW5zaXRpb25zLTEvI2FmdGVyLWNoYW5nZS1zdHlsZQotICAgIC8vIExpa2V3aXNl
LCBkZWZpbmUgdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSBhcyB0aGUgY29tcHV0ZWQgdmFsdWVzIG9m
IGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBlbGVtZW50IGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBr
bm93biBhdCB0aGUgc3RhcnQKLSAgICAvLyBvZiB0aGF0IHN0eWxlIGNoYW5nZSBldmVudCwgYnV0
IHVzaW5nIHRoZSBjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIGFuaW1hdGlvbi0qIHByb3BlcnRpZXMg
ZnJvbSB0aGUgYmVmb3JlLWNoYW5nZSBzdHlsZSwgZXhjbHVkaW5nIGFueSBzdHlsZXMKLSAgICAv
LyBmcm9tIENTUyBUcmFuc2l0aW9ucyBpbiB0aGUgY29tcHV0YXRpb24sIGFuZCBpbmhlcml0aW5n
IGZyb20gdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSBvZiB0aGUgcGFyZW50LiBOb3RlIHRoYXQgdGhp
cyBtZWFucyB0aGUgYWZ0ZXItY2hhbmdlCi0gICAgLy8gc3R5bGUgZG9lcyBub3QgZGlmZmVyIGZy
b20gdGhlIGJlZm9yZS1jaGFuZ2Ugc3R5bGUgZHVlIHRvIG5ld2x5IGNyZWF0ZWQgb3IgY2FuY2Vs
ZWQgQ1NTIEFuaW1hdGlvbnMuCi0gICAgYXV0byBhZnRlckNoYW5nZVN0eWxlID0gWyZdKCkgLT4g
Y29uc3QgUmVuZGVyU3R5bGUgewotICAgICAgICBpZiAoaXM8Q1NTQW5pbWF0aW9uPihhbmltYXRp
b24pICYmIGFuaW1hdGlvbi0+aXNSZWxldmFudCgpKSB7Ci0gICAgICAgICAgICBhdXRvIGFuaW1h
dGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUobmV3U3R5bGUpOwotICAgICAgICAgICAgYW5p
bWF0aW9uLT5yZXNvbHZlKGFuaW1hdGVkU3R5bGUsIG51bGxwdHIpOwotICAgICAgICAgICAgcmV0
dXJuIGFuaW1hdGVkU3R5bGU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gUmVuZGVyU3R5
bGU6OmNsb25lKG5ld1N0eWxlKTsKLSAgICB9KCk7Ci0KLSAgICBpZiAoIXN0eWxlYWJsZS5oYXNS
dW5uaW5nVHJhbnNpdGlvbkZvclByb3BlcnR5KHByb3BlcnR5KQotICAgICAgICAmJiAhQ1NTUHJv
cGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgJmJlZm9yZUNoYW5nZVN0
eWxlLCAmYWZ0ZXJDaGFuZ2VTdHlsZSkKLSAgICAgICAgJiYgQ1NTUHJvcGVydHlBbmltYXRpb246
OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQocHJvcGVydHksICZiZWZvcmVDaGFuZ2VTdHlsZSwg
JmFmdGVyQ2hhbmdlU3R5bGUpCi0gICAgICAgICYmICFwcm9wZXJ0eUluU3R5bGVNYXRjaGVzVmFs
dWVGb3JUcmFuc2l0aW9uSW5NYXAocHJvcGVydHksIGFmdGVyQ2hhbmdlU3R5bGUsIHN0eWxlYWJs
ZS5lbnN1cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKSkKLSAgICAgICAgJiYgbWF0
Y2hpbmdCYWNraW5nQW5pbWF0aW9uICYmIHRyYW5zaXRpb25Db21iaW5lZER1cmF0aW9uKG1hdGNo
aW5nQmFja2luZ0FuaW1hdGlvbikgPiAwKSB7Ci0gICAgICAgIC8vIDEuIElmIGFsbCBvZiB0aGUg
Zm9sbG93aW5nIGFyZSB0cnVlOgotICAgICAgICAvLyAgIC0gdGhlIGVsZW1lbnQgZG9lcyBub3Qg
aGF2ZSBhIHJ1bm5pbmcgdHJhbnNpdGlvbiBmb3IgdGhlIHByb3BlcnR5LAotICAgICAgICAvLyAg
IC0gdGhlIGJlZm9yZS1jaGFuZ2Ugc3R5bGUgaXMgZGlmZmVyZW50IGZyb20gYW5kIGNhbiBiZSBp
bnRlcnBvbGF0ZWQgd2l0aCB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlIGZvciB0aGF0IHByb3BlcnR5
LAotICAgICAgICAvLyAgIC0gdGhlIGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIGNvbXBsZXRlZCB0
cmFuc2l0aW9uIGZvciB0aGUgcHJvcGVydHkgb3IgdGhlIGVuZCB2YWx1ZSBvZiB0aGUgY29tcGxl
dGVkIHRyYW5zaXRpb24gaXMgZGlmZmVyZW50IGZyb20gdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSBm
b3IgdGhlIHByb3BlcnR5LAotICAgICAgICAvLyAgIC0gdGhlcmUgaXMgYSBtYXRjaGluZyB0cmFu
c2l0aW9uLXByb3BlcnR5IHZhbHVlLCBhbmQKLSAgICAgICAgLy8gICAtIHRoZSBjb21iaW5lZCBk
dXJhdGlvbiBpcyBncmVhdGVyIHRoYW4gMHMsCi0KLSAgICAgICAgLy8gdGhlbiBpbXBsZW1lbnRh
dGlvbnMgbXVzdCByZW1vdmUgdGhlIGNvbXBsZXRlZCB0cmFuc2l0aW9uIChpZiBwcmVzZW50KSBm
cm9tIHRoZSBzZXQgb2YgY29tcGxldGVkIHRyYW5zaXRpb25zCi0gICAgICAgIHN0eWxlYWJsZS5l
bnN1cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS5yZW1vdmUocHJvcGVydHkpOwot
Ci0gICAgICAgIC8vIGFuZCBzdGFydCBhIHRyYW5zaXRpb24gd2hvc2U6Ci0gICAgICAgIC8vICAg
LSBzdGFydCB0aW1lIGlzIHRoZSB0aW1lIG9mIHRoZSBzdHlsZSBjaGFuZ2UgZXZlbnQgcGx1cyB0
aGUgbWF0Y2hpbmcgdHJhbnNpdGlvbiBkZWxheSwKLSAgICAgICAgLy8gICAtIGVuZCB0aW1lIGlz
IHRoZSBzdGFydCB0aW1lIHBsdXMgdGhlIG1hdGNoaW5nIHRyYW5zaXRpb24gZHVyYXRpb24sCi0g
ICAgICAgIC8vICAgLSBzdGFydCB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhlIHRyYW5zaXRpb25p
bmcgcHJvcGVydHkgaW4gdGhlIGJlZm9yZS1jaGFuZ2Ugc3R5bGUsCi0gICAgICAgIC8vICAgLSBl
bmQgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoZSB0cmFuc2l0aW9uaW5nIHByb3BlcnR5IGluIHRo
ZSBhZnRlci1jaGFuZ2Ugc3R5bGUsCi0gICAgICAgIC8vICAgLSByZXZlcnNpbmctYWRqdXN0ZWQg
c3RhcnQgdmFsdWUgaXMgdGhlIHNhbWUgYXMgdGhlIHN0YXJ0IHZhbHVlLCBhbmQKLSAgICAgICAg
Ly8gICAtIHJldmVyc2luZyBzaG9ydGVuaW5nIGZhY3RvciBpcyAxLgotICAgICAgICBhdXRvIGRl
bGF5ID0gU2Vjb25kcyhtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24tPmRlbGF5KCkpOwotICAgICAg
ICBhdXRvIGR1cmF0aW9uID0gU2Vjb25kcyhtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24tPmR1cmF0
aW9uKCkpOwotICAgICAgICBhdXRvJiByZXZlcnNpbmdBZGp1c3RlZFN0YXJ0U3R5bGUgPSBiZWZv
cmVDaGFuZ2VTdHlsZTsKLSAgICAgICAgYXV0byByZXZlcnNpbmdTaG9ydGVuaW5nRmFjdG9yID0g
MTsKLSAgICAgICAgc3R5bGVhYmxlLmVuc3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHko
KS5zZXQocHJvcGVydHksIENTU1RyYW5zaXRpb246OmNyZWF0ZShzdHlsZWFibGUsIHByb3BlcnR5
LCBnZW5lcmF0aW9uVGltZSwgKm1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiwgJmJlZm9yZUNoYW5n
ZVN0eWxlLCBhZnRlckNoYW5nZVN0eWxlLCBkZWxheSwgZHVyYXRpb24sIHJldmVyc2luZ0FkanVz
dGVkU3RhcnRTdHlsZSwgcmV2ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvcikpOwotICAgIH0gZWxzZSBp
ZiAoc3R5bGVhYmxlLmhhc0NvbXBsZXRlZFRyYW5zaXRpb25Gb3JQcm9wZXJ0eShwcm9wZXJ0eSkg
JiYgIXByb3BlcnR5SW5TdHlsZU1hdGNoZXNWYWx1ZUZvclRyYW5zaXRpb25Jbk1hcChwcm9wZXJ0
eSwgYWZ0ZXJDaGFuZ2VTdHlsZSwgc3R5bGVhYmxlLmVuc3VyZUNvbXBsZXRlZFRyYW5zaXRpb25z
QnlQcm9wZXJ0eSgpKSkgewotICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBlbGVtZW50
IGhhcyBhIGNvbXBsZXRlZCB0cmFuc2l0aW9uIGZvciB0aGUgcHJvcGVydHkgYW5kIHRoZSBlbmQg
dmFsdWUgb2YgdGhlIGNvbXBsZXRlZCB0cmFuc2l0aW9uIGlzIGRpZmZlcmVudCBmcm9tCi0gICAg
ICAgIC8vICAgIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUgZm9yIHRoZSBwcm9wZXJ0eSwgdGhlbiBp
bXBsZW1lbnRhdGlvbnMgbXVzdCByZW1vdmUgdGhlIGNvbXBsZXRlZCB0cmFuc2l0aW9uIGZyb20g
dGhlIHNldCBvZiBjb21wbGV0ZWQgdHJhbnNpdGlvbnMuCi0gICAgICAgIHN0eWxlYWJsZS5lbnN1
cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS5yZW1vdmUocHJvcGVydHkpOwotICAg
IH0KLQotICAgIGJvb2wgaGFzUnVubmluZ1RyYW5zaXRpb24gPSBzdHlsZWFibGUuaGFzUnVubmlu
Z1RyYW5zaXRpb25Gb3JQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgaWYgKChoYXNSdW5uaW5nVHJh
bnNpdGlvbiB8fCBzdHlsZWFibGUuaGFzQ29tcGxldGVkVHJhbnNpdGlvbkZvclByb3BlcnR5KHBy
b3BlcnR5KSkgJiYgIW1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbikgewotICAgICAgICAvLyAzLiBJ
ZiB0aGUgZWxlbWVudCBoYXMgYSBydW5uaW5nIHRyYW5zaXRpb24gb3IgY29tcGxldGVkIHRyYW5z
aXRpb24gZm9yIHRoZSBwcm9wZXJ0eSwgYW5kIHRoZXJlIGlzIG5vdCBhIG1hdGNoaW5nIHRyYW5z
aXRpb24tcHJvcGVydHkKLSAgICAgICAgLy8gICAgdmFsdWUsIHRoZW4gaW1wbGVtZW50YXRpb25z
IG11c3QgY2FuY2VsIHRoZSBydW5uaW5nIHRyYW5zaXRpb24gb3IgcmVtb3ZlIHRoZSBjb21wbGV0
ZWQgdHJhbnNpdGlvbiBmcm9tIHRoZSBzZXQgb2YgY29tcGxldGVkIHRyYW5zaXRpb25zLgotICAg
ICAgICBpZiAoaGFzUnVubmluZ1RyYW5zaXRpb24pCi0gICAgICAgICAgICBzdHlsZWFibGUuZW5z
dXJlUnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSgpLnRha2UocHJvcGVydHkpLT5jYW5jZWwo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3R5bGVhYmxlLmVuc3VyZUNvbXBsZXRlZFRy
YW5zaXRpb25zQnlQcm9wZXJ0eSgpLnJlbW92ZShwcm9wZXJ0eSk7Ci0gICAgfQotCi0gICAgaWYg
KG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiAmJiBzdHlsZWFibGUuaGFzUnVubmluZ1RyYW5zaXRp
b25Gb3JQcm9wZXJ0eShwcm9wZXJ0eSkgJiYgIXByb3BlcnR5SW5TdHlsZU1hdGNoZXNWYWx1ZUZv
clRyYW5zaXRpb25Jbk1hcChwcm9wZXJ0eSwgYWZ0ZXJDaGFuZ2VTdHlsZSwgc3R5bGVhYmxlLmVu
c3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKSkpIHsKLSAgICAgICAgYXV0byBwcmV2
aW91c2x5UnVubmluZ1RyYW5zaXRpb24gPSBzdHlsZWFibGUuZW5zdXJlUnVubmluZ1RyYW5zaXRp
b25zQnlQcm9wZXJ0eSgpLnRha2UocHJvcGVydHkpOwotICAgICAgICBhdXRvJiBwcmV2aW91c2x5
UnVubmluZ1RyYW5zaXRpb25DdXJyZW50U3R5bGUgPSBwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRp
b24tPmN1cnJlbnRTdHlsZSgpOwotICAgICAgICAvLyA0LiBJZiB0aGUgZWxlbWVudCBoYXMgYSBy
dW5uaW5nIHRyYW5zaXRpb24gZm9yIHRoZSBwcm9wZXJ0eSwgdGhlcmUgaXMgYSBtYXRjaGluZyB0
cmFuc2l0aW9uLXByb3BlcnR5IHZhbHVlLCBhbmQgdGhlIGVuZCB2YWx1ZSBvZiB0aGUgcnVubmlu
ZwotICAgICAgICAvLyAgICB0cmFuc2l0aW9uIGlzIG5vdCBlcXVhbCB0byB0aGUgdmFsdWUgb2Yg
dGhlIHByb3BlcnR5IGluIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUsIHRoZW46Ci0gICAgICAgIGlm
IChDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKHByb3BlcnR5LCAmcHJldmlv
dXNseVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlLCAmYWZ0ZXJDaGFuZ2VTdHlsZSkgfHwg
IUNTU1Byb3BlcnR5QW5pbWF0aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKHByb3BlcnR5
LCAmY3VycmVudFN0eWxlLCAmYWZ0ZXJDaGFuZ2VTdHlsZSkpIHsKLSAgICAgICAgICAgIC8vIDEu
IElmIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgcnVubmluZyB0cmFu
c2l0aW9uIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGFmdGVy
LWNoYW5nZSBzdHlsZSwKLSAgICAgICAgICAgIC8vICAgIG9yIGlmIHRoZXNlIHR3byB2YWx1ZXMg
Y2Fubm90IGJlIGludGVycG9sYXRlZCwgdGhlbiBpbXBsZW1lbnRhdGlvbnMgbXVzdCBjYW5jZWwg
dGhlIHJ1bm5pbmcgdHJhbnNpdGlvbi4KLSAgICAgICAgICAgIHByZXZpb3VzbHlSdW5uaW5nVHJh
bnNpdGlvbi0+Y2FuY2VsRnJvbVN0eWxlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodHJhbnNpdGlv
bkNvbWJpbmVkRHVyYXRpb24obWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uKSA8PSAwLjAgfHwgIUNT
U1Byb3BlcnR5QW5pbWF0aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKHByb3BlcnR5LCAm
cHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlLCAmYWZ0ZXJDaGFuZ2VTdHls
ZSkpIHsKLSAgICAgICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlIGNvbWJpbmVkIGR1cmF0
aW9uIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwcywgb3IgaWYgdGhlIGN1cnJlbnQgdmFsdWUg
b2YgdGhlIHByb3BlcnR5IGluIHRoZSBydW5uaW5nIHRyYW5zaXRpb24KLSAgICAgICAgICAgIC8v
ICAgIGNhbm5vdCBiZSBpbnRlcnBvbGF0ZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5
IGluIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUsIHRoZW4gaW1wbGVtZW50YXRpb25zIG11c3QgY2Fu
Y2VsIHRoZSBydW5uaW5nIHRyYW5zaXRpb24uCi0gICAgICAgICAgICBwcmV2aW91c2x5UnVubmlu
Z1RyYW5zaXRpb24tPmNhbmNlbEZyb21TdHlsZSgpOwotICAgICAgICB9IGVsc2UgaWYgKENTU1By
b3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcGVydHksICZwcmV2aW91c2x5UnVu
bmluZ1RyYW5zaXRpb24tPnJldmVyc2luZ0FkanVzdGVkU3RhcnRTdHlsZSgpLCAmYWZ0ZXJDaGFu
Z2VTdHlsZSkpIHsKLSAgICAgICAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgdGhlIHJldmVyc2lu
Zy1hZGp1c3RlZCBzdGFydCB2YWx1ZSBvZiB0aGUgcnVubmluZyB0cmFuc2l0aW9uIGlzIHRoZSBz
YW1lIGFzIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGFmdGVyLWNoYW5nZQotICAg
ICAgICAgICAgLy8gICAgc3R5bGUgKHNlZSB0aGUgc2VjdGlvbiBvbiByZXZlcnNpbmcgb2YgdHJh
bnNpdGlvbnMgZm9yIHdoeSB0aGVzZSBjYXNlIGV4aXN0cyksIGltcGxlbWVudGF0aW9ucyBtdXN0
IGNhbmNlbCB0aGUgcnVubmluZyB0cmFuc2l0aW9uCi0gICAgICAgICAgICBwcmV2aW91c2x5UnVu
bmluZ1RyYW5zaXRpb24tPmNhbmNlbEZyb21TdHlsZSgpOwotCi0gICAgICAgICAgICAvLyBhbmQg
c3RhcnQgYSBuZXcgdHJhbnNpdGlvbiB3aG9zZToKLSAgICAgICAgICAgIC8vICAgLSByZXZlcnNp
bmctYWRqdXN0ZWQgc3RhcnQgdmFsdWUgaXMgdGhlIGVuZCB2YWx1ZSBvZiB0aGUgcnVubmluZyB0
cmFuc2l0aW9uLAotICAgICAgICAgICAgLy8gICAtIHJldmVyc2luZyBzaG9ydGVuaW5nIGZhY3Rv
ciBpcyB0aGUgYWJzb2x1dGUgdmFsdWUsIGNsYW1wZWQgdG8gdGhlIHJhbmdlIFswLCAxXSwgb2Yg
dGhlIHN1bSBvZjoKLSAgICAgICAgICAgIC8vICAgICAgIDEuIHRoZSBvdXRwdXQgb2YgdGhlIHRp
bWluZyBmdW5jdGlvbiBvZiB0aGUgb2xkIHRyYW5zaXRpb24gYXQgdGhlIHRpbWUgb2YgdGhlIHN0
eWxlIGNoYW5nZSBldmVudCwgdGltZXMgdGhlIHJldmVyc2luZyBzaG9ydGVuaW5nIGZhY3RvciBv
ZiB0aGUgb2xkIHRyYW5zaXRpb24KLSAgICAgICAgICAgIC8vICAgICAgIDIuIDEgbWludXMgdGhl
IHJldmVyc2luZyBzaG9ydGVuaW5nIGZhY3RvciBvZiB0aGUgb2xkIHRyYW5zaXRpb24uCi0gICAg
ICAgICAgICAvLyAgIC0gc3RhcnQgdGltZSBpcyB0aGUgdGltZSBvZiB0aGUgc3R5bGUgY2hhbmdl
IGV2ZW50IHBsdXM6Ci0gICAgICAgICAgICAvLyAgICAgICAxLiBpZiB0aGUgbWF0Y2hpbmcgdHJh
bnNpdGlvbiBkZWxheSBpcyBub25uZWdhdGl2ZSwgdGhlIG1hdGNoaW5nIHRyYW5zaXRpb24gZGVs
YXksIG9yCi0gICAgICAgICAgICAvLyAgICAgICAyLiBpZiB0aGUgbWF0Y2hpbmcgdHJhbnNpdGlv
biBkZWxheSBpcyBuZWdhdGl2ZSwgdGhlIHByb2R1Y3Qgb2YgdGhlIG5ldyB0cmFuc2l0aW9u4oCZ
cyByZXZlcnNpbmcgc2hvcnRlbmluZyBmYWN0b3IgYW5kIHRoZSBtYXRjaGluZyB0cmFuc2l0aW9u
IGRlbGF5LAotICAgICAgICAgICAgLy8gICAtIGVuZCB0aW1lIGlzIHRoZSBzdGFydCB0aW1lIHBs
dXMgdGhlIHByb2R1Y3Qgb2YgdGhlIG1hdGNoaW5nIHRyYW5zaXRpb24gZHVyYXRpb24gYW5kIHRo
ZSBuZXcgdHJhbnNpdGlvbuKAmXMgcmV2ZXJzaW5nIHNob3J0ZW5pbmcgZmFjdG9yLAotICAgICAg
ICAgICAgLy8gICAtIHN0YXJ0IHZhbHVlIGlzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9w
ZXJ0eSBpbiB0aGUgcnVubmluZyB0cmFuc2l0aW9uLAotICAgICAgICAgICAgLy8gICAtIGVuZCB2
YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBhZnRlci1jaGFuZ2Ugc3R5
bGUKLSAgICAgICAgICAgIGF1dG8mIHJldmVyc2luZ0FkanVzdGVkU3RhcnRTdHlsZSA9IHByZXZp
b3VzbHlSdW5uaW5nVHJhbnNpdGlvbi0+dGFyZ2V0U3R5bGUoKTsKLSAgICAgICAgICAgIGRvdWJs
ZSB0cmFuc2Zvcm1lZFByb2dyZXNzID0gMTsKLSAgICAgICAgICAgIGlmIChhdXRvKiBlZmZlY3Qg
PSBwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb24tPmVmZmVjdCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGF1dG8gY29tcHV0ZWRUaW1pbmdQcm9ncmVzcyA9IGVmZmVjdC0+Z2V0Q29tcHV0ZWRU
aW1pbmcoKS5wcm9ncmVzcykKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRQcm9ncmVz
cyA9ICpjb21wdXRlZFRpbWluZ1Byb2dyZXNzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YXV0byByZXZlcnNpbmdTaG9ydGVuaW5nRmFjdG9yID0gc3RkOjptYXgoc3RkOjptaW4oKCh0cmFu
c2Zvcm1lZFByb2dyZXNzICogcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT5yZXZlcnNpbmdT
aG9ydGVuaW5nRmFjdG9yKCkpICsgKDEgLSBwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb24tPnJl
dmVyc2luZ1Nob3J0ZW5pbmdGYWN0b3IoKSkpLCAxLjApLCAwLjApOwotICAgICAgICAgICAgYXV0
byBkZWxheSA9IG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbi0+ZGVsYXkoKSA8IDAgPyBTZWNvbmRz
KG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbi0+ZGVsYXkoKSkgKiByZXZlcnNpbmdTaG9ydGVuaW5n
RmFjdG9yIDogU2Vjb25kcyhtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24tPmRlbGF5KCkpOwotICAg
ICAgICAgICAgYXV0byBkdXJhdGlvbiA9IFNlY29uZHMobWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9u
LT5kdXJhdGlvbigpKSAqIHJldmVyc2luZ1Nob3J0ZW5pbmdGYWN0b3I7Ci0KLSAgICAgICAgICAg
IHN0eWxlYWJsZS5lbnN1cmVSdW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkuc2V0KHByb3Bl
cnR5LCBDU1NUcmFuc2l0aW9uOjpjcmVhdGUoc3R5bGVhYmxlLCBwcm9wZXJ0eSwgZ2VuZXJhdGlv
blRpbWUsICptYXRjaGluZ0JhY2tpbmdBbmltYXRpb24sICZwcmV2aW91c2x5UnVubmluZ1RyYW5z
aXRpb25DdXJyZW50U3R5bGUsIGFmdGVyQ2hhbmdlU3R5bGUsIGRlbGF5LCBkdXJhdGlvbiwgcmV2
ZXJzaW5nQWRqdXN0ZWRTdGFydFN0eWxlLCByZXZlcnNpbmdTaG9ydGVuaW5nRmFjdG9yKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyA0LiBPdGhlcndpc2UsIGltcGxlbWVudGF0
aW9ucyBtdXN0IGNhbmNlbCB0aGUgcnVubmluZyB0cmFuc2l0aW9uCi0gICAgICAgICAgICBwcmV2
aW91c2x5UnVubmluZ1RyYW5zaXRpb24tPmNhbmNlbEZyb21TdHlsZSgpOwotCi0gICAgICAgICAg
ICAvLyBhbmQgc3RhcnQgYSBuZXcgdHJhbnNpdGlvbiB3aG9zZToKLSAgICAgICAgICAgIC8vICAg
LSBzdGFydCB0aW1lIGlzIHRoZSB0aW1lIG9mIHRoZSBzdHlsZSBjaGFuZ2UgZXZlbnQgcGx1cyB0
aGUgbWF0Y2hpbmcgdHJhbnNpdGlvbiBkZWxheSwKLSAgICAgICAgICAgIC8vICAgLSBlbmQgdGlt
ZSBpcyB0aGUgc3RhcnQgdGltZSBwbHVzIHRoZSBtYXRjaGluZyB0cmFuc2l0aW9uIGR1cmF0aW9u
LAotICAgICAgICAgICAgLy8gICAtIHN0YXJ0IHZhbHVlIGlzIHRoZSBjdXJyZW50IHZhbHVlIG9m
IHRoZSBwcm9wZXJ0eSBpbiB0aGUgcnVubmluZyB0cmFuc2l0aW9uLAotICAgICAgICAgICAgLy8g
ICAtIGVuZCB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBhZnRlci1j
aGFuZ2Ugc3R5bGUsCi0gICAgICAgICAgICAvLyAgIC0gcmV2ZXJzaW5nLWFkanVzdGVkIHN0YXJ0
IHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBzdGFydCB2YWx1ZSwgYW5kCi0gICAgICAgICAgICAv
LyAgIC0gcmV2ZXJzaW5nIHNob3J0ZW5pbmcgZmFjdG9yIGlzIDEuCi0gICAgICAgICAgICBhdXRv
IGRlbGF5ID0gU2Vjb25kcyhtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24tPmRlbGF5KCkpOwotICAg
ICAgICAgICAgYXV0byBkdXJhdGlvbiA9IFNlY29uZHMobWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9u
LT5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIGF1dG8mIHJldmVyc2luZ0FkanVzdGVkU3RhcnRT
dHlsZSA9IGN1cnJlbnRTdHlsZTsKLSAgICAgICAgICAgIGF1dG8gcmV2ZXJzaW5nU2hvcnRlbmlu
Z0ZhY3RvciA9IDE7Ci0gICAgICAgICAgICBzdHlsZWFibGUuZW5zdXJlUnVubmluZ1RyYW5zaXRp
b25zQnlQcm9wZXJ0eSgpLnNldChwcm9wZXJ0eSwgQ1NTVHJhbnNpdGlvbjo6Y3JlYXRlKHN0eWxl
YWJsZSwgcHJvcGVydHksIGdlbmVyYXRpb25UaW1lLCAqbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9u
LCAmcHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uQ3VycmVudFN0eWxlLCBhZnRlckNoYW5nZVN0
eWxlLCBkZWxheSwgZHVyYXRpb24sIHJldmVyc2luZ0FkanVzdGVkU3RhcnRTdHlsZSwgcmV2ZXJz
aW5nU2hvcnRlbmluZ0ZhY3RvcikpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEFuaW1h
dGlvblRpbWVsaW5lOjp1cGRhdGVDU1NUcmFuc2l0aW9uc0ZvclN0eWxlYWJsZShjb25zdCBTdHls
ZWFibGUmIHN0eWxlYWJsZSwgY29uc3QgUmVuZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSwgY29uc3Qg
UmVuZGVyU3R5bGUmIG5ld1N0eWxlKQotewotICAgIC8vIEluIGNhc2UgdGhpcyBlbGVtZW50IGlz
IG5ld2x5IGdldHRpbmcgYSAiZGlzcGxheTogbm9uZSIgd2UgbmVlZCB0byBjYW5jZWwgYWxsIG9m
IGl0cyB0cmFuc2l0aW9ucyBhbmQgZGlzcmVnYXJkIG5ldyBvbmVzLgotICAgIGlmIChjdXJyZW50
U3R5bGUuaGFzVHJhbnNpdGlvbnMoKSAmJiBjdXJyZW50U3R5bGUuZGlzcGxheSgpICE9IERpc3Bs
YXlUeXBlOjpOb25lICYmIG5ld1N0eWxlLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6Tm9uZSkg
ewotICAgICAgICBpZiAoc3R5bGVhYmxlLmhhc1J1bm5pbmdUcmFuc2l0aW9ucygpKSB7Ci0gICAg
ICAgICAgICBhdXRvIHJ1bm5pbmdUcmFuc2l0aW9ucyA9IHN0eWxlYWJsZS5lbnN1cmVSdW5uaW5n
VHJhbnNpdGlvbnNCeVByb3BlcnR5KCk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNz
c1RyYW5zaXRpb25zQnlDU1NQcm9wZXJ0eUlETWFwSXRlbSA6IHJ1bm5pbmdUcmFuc2l0aW9ucykK
LSAgICAgICAgICAgICAgICBjc3NUcmFuc2l0aW9uc0J5Q1NTUHJvcGVydHlJRE1hcEl0ZW0udmFs
dWUtPmNhbmNlbEZyb21TdHlsZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBTZWN0aW9uIDMgIlN0YXJ0aW5nIG9mIHRyYW5zaXRpb25zIiBmcm9tIHRoZSBD
U1MgVHJhbnNpdGlvbnMgTGV2ZWwgMSBzcGVjaWZpY2F0aW9uLgotICAgIC8vIGh0dHBzOi8vZHJh
ZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNpdGlvbnMtMS8jc3RhcnRpbmcKLQotICAgIGF1dG8gZ2Vu
ZXJhdGlvblRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLQotICAgIC8vIEZpcnN0LCBsZXQn
cyBjb21waWxlIHRoZSBsaXN0IG9mIGFsbCBDU1MgcHJvcGVydGllcyBmb3VuZCBpbiB0aGUgY3Vy
cmVudCBzdHlsZSBhbmQgdGhlIGFmdGVyLWNoYW5nZSBzdHlsZS4KLSAgICBib29sIHRyYW5zaXRp
b25Qcm9wZXJ0aWVzQ29udGFpbkFsbCA9IGZhbHNlOwotICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4gdHJhbnNpdGlvblByb3BlcnRpZXM7Ci0gICAgY29tcGlsZVRyYW5zaXRpb25Qcm9wZXJ0aWVz
SW5TdHlsZShjdXJyZW50U3R5bGUsIHRyYW5zaXRpb25Qcm9wZXJ0aWVzLCB0cmFuc2l0aW9uUHJv
cGVydGllc0NvbnRhaW5BbGwpOwotICAgIGNvbXBpbGVUcmFuc2l0aW9uUHJvcGVydGllc0luU3R5
bGUobmV3U3R5bGUsIHRyYW5zaXRpb25Qcm9wZXJ0aWVzLCB0cmFuc2l0aW9uUHJvcGVydGllc0Nv
bnRhaW5BbGwpOwotCi0gICAgaWYgKHRyYW5zaXRpb25Qcm9wZXJ0aWVzQ29udGFpbkFsbCkgewot
ICAgICAgICBhdXRvIG51bWJlck9mUHJvcGVydGllcyA9IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpn
ZXROdW1Qcm9wZXJ0aWVzKCk7Ci0gICAgICAgIGZvciAoaW50IHByb3BlcnR5SW5kZXggPSAwOyBw
cm9wZXJ0eUluZGV4IDwgbnVtYmVyT2ZQcm9wZXJ0aWVzOyArK3Byb3BlcnR5SW5kZXgpIHsKLSAg
ICAgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzU2hvcnRoYW5kOwotICAgICAgICAgICAgYXV0byBw
cm9wZXJ0eSA9IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpnZXRQcm9wZXJ0eUF0SW5kZXgocHJvcGVy
dHlJbmRleCwgaXNTaG9ydGhhbmQpOwotICAgICAgICAgICAgaWYgKGlzU2hvcnRoYW5kICYmICpp
c1Nob3J0aGFuZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHVwZGF0
ZUNTU1RyYW5zaXRpb25zRm9yU3R5bGVhYmxlQW5kUHJvcGVydHkoc3R5bGVhYmxlLCBwcm9wZXJ0
eSwgY3VycmVudFN0eWxlLCBuZXdTdHlsZSwgZ2VuZXJhdGlvblRpbWUpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8gcHJvcGVydHkgOiB0cmFuc2l0
aW9uUHJvcGVydGllcykKLSAgICAgICAgdXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGVB
bmRQcm9wZXJ0eShzdHlsZWFibGUsIHByb3BlcnR5LCBjdXJyZW50U3R5bGUsIG5ld1N0eWxlLCBn
ZW5lcmF0aW9uVGltZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5oIGIvU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmgKaW5kZXggZmEwZjlhMjYyZWYxNTE2
ODY4NzhkZTJhODVlYjhhNDQzNGExN2M4Mi4uNmFlNzY2OWY0ZTEyMzE2YTYzY2JlNGU0ZDY2NDMz
YmVkNDc2OGM1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlv
blRpbWVsaW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVs
aW5lLmgKQEAgLTI2LDE0ICsyNiw5IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ1NT
VmFsdWUuaCIKLSNpbmNsdWRlICJDb21wdXRlZEVmZmVjdFRpbWluZy5oIgogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU3R5bGVhYmxlLmgiCiAjaW5jbHVkZSAiV2ViQW5pbWF0
aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KQEAgLTQy
LDEwICszNyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTQW5pbWF0aW9u
OwotY2xhc3MgQ1NTVHJhbnNpdGlvbjsKLWNsYXNzIERlY2xhcmF0aXZlQW5pbWF0aW9uOwotCiBj
bGFzcyBBbmltYXRpb25UaW1lbGluZSA6IHB1YmxpYyBSZWZDb3VudGVkPEFuaW1hdGlvblRpbWVs
aW5lPiwgcHVibGljIENhbk1ha2VXZWFrUHRyPEFuaW1hdGlvblRpbWVsaW5lPiB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+QW5pbWF0aW9uVGltZWxpbmUoKTsKQEAgLTYxLDE5ICs1Miw2IEBAIHB1
YmxpYzoKICAgICBPcHRpb25hbDxkb3VibGU+IGJpbmRpbmdzQ3VycmVudFRpbWUoKTsKICAgICB2
aXJ0dWFsIE9wdGlvbmFsPFNlY29uZHM+IGN1cnJlbnRUaW1lKCkgeyByZXR1cm4gbV9jdXJyZW50
VGltZTsgfQogCi0gICAgdm9pZCBlbGVtZW50V2FzUmVtb3ZlZChjb25zdCBTdHlsZWFibGUmKTsK
LQotICAgIHZvaWQgd2lsbENoYW5nZVJlbmRlcmVyRm9yU3R5bGVhYmxlKGNvbnN0IFN0eWxlYWJs
ZSYpOwotICAgIHZvaWQgY2FuY2VsRGVjbGFyYXRpdmVBbmltYXRpb25zRm9yU3R5bGVhYmxlKGNv
bnN0IFN0eWxlYWJsZSYpOwotCi0gICAgdm9pZCBhbmltYXRpb25XYXNBZGRlZFRvU3R5bGVhYmxl
KFdlYkFuaW1hdGlvbiYsIGNvbnN0IFN0eWxlYWJsZSYpOwotICAgIHZvaWQgYW5pbWF0aW9uV2Fz
UmVtb3ZlZEZyb21TdHlsZWFibGUoV2ViQW5pbWF0aW9uJiwgY29uc3QgU3R5bGVhYmxlJik7Ci0K
LSAgICB2b2lkIHJlbW92ZURlY2xhcmF0aXZlQW5pbWF0aW9uRnJvbUxpc3RzRm9yT3duaW5nRWxl
bWVudChXZWJBbmltYXRpb24mLCBjb25zdCBTdHlsZWFibGUmKTsKLQotICAgIHZvaWQgdXBkYXRl
Q1NTQW5pbWF0aW9uc0ZvclN0eWxlYWJsZShjb25zdCBTdHlsZWFibGUmLCBjb25zdCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgYWZ0ZXJDaGFuZ2VTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudEVsZW1lbnRTdHlsZSk7Ci0gICAgdm9pZCB1cGRhdGVD
U1NUcmFuc2l0aW9uc0ZvclN0eWxlYWJsZShjb25zdCBTdHlsZWFibGUmLCBjb25zdCBSZW5kZXJT
dHlsZSYgY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpOwotCiBwcm90
ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQW5pbWF0aW9uVGltZWxpbmUoKTsKIApAQCAtODIsOCArNjAs
NiBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVHbG9iYWxQb3NpdGlv
bihXZWJBbmltYXRpb24mKTsKLSAgICB2b2lkIHVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yU3R5bGVh
YmxlQW5kUHJvcGVydHkoY29uc3QgU3R5bGVhYmxlJiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVu
ZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIGFmdGVyQ2hhbmdlU3R5
bGUsIGNvbnN0IE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgcmVtb3ZlQ1NTQW5pbWF0aW9uQ3Jl
YXRlZEJ5TWFya3VwKGNvbnN0IFN0eWxlYWJsZSYsIENTU0FuaW1hdGlvbiYpOwogCiAgICAgTWFy
a2FibGU8U2Vjb25kcywgU2Vjb25kczo6TWFya2FibGVUcmFpdHM+IG1fY3VycmVudFRpbWU7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RlY2xhcmF0aXZlQW5pbWF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9EZWNsYXJhdGl2ZUFuaW1hdGlvbi5j
cHAKaW5kZXggOWFmNjRiNTVmODFjYzk0MjQ4ZDEzMjYyN2MwNGRmZDkzMmRmNmJhMC4uN2E2NDRk
M2NhZDJhOTkwMjczY2ZhYWMwYTdlMmJlNmE4OTMwN2JhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL0RlY2xhcmF0aXZlQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vRGVjbGFyYXRpdmVBbmltYXRpb24uY3BwCkBAIC05NSw4ICs5NSw3IEBA
IHZvaWQgRGVjbGFyYXRpdmVBbmltYXRpb246OmRpc2Fzc29jaWF0ZUZyb21Pd25pbmdFbGVtZW50
KCkKICAgICBpZiAoIW1fb3duaW5nRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGF1dG8qIGFuaW1hdGlvblRpbWVsaW5lID0gdGltZWxpbmUoKSkKLSAgICAgICAgYW5pbWF0aW9u
VGltZWxpbmUtPnJlbW92ZURlY2xhcmF0aXZlQW5pbWF0aW9uRnJvbUxpc3RzRm9yT3duaW5nRWxl
bWVudCgqdGhpcywgKm93bmluZ0VsZW1lbnQoKSk7CisgICAgb3duaW5nRWxlbWVudCgpLT5yZW1v
dmVEZWNsYXJhdGl2ZUFuaW1hdGlvbkZyb21MaXN0c0Zvck93bmluZ0VsZW1lbnQoKnRoaXMpOwog
ICAgIG1fb3duaW5nRWxlbWVudCA9IG51bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL1dlYkFuaW1hdGlvbi5jcHAKaW5kZXggY2QxNTllMTYyZGRmN2ZhOWIzZTA1MTA3MWRmOTNi
MTFjZDFmYmJjYi4uOTBmZTI5YWJiMzMzOTY0ODdmYmQ3NmJkZWQ2Mjg3ZWYyODQ4Y2VhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5jcHAKQEAgLTIxMiwxNSArMjEy
LDE1IEBAIHZvaWQgV2ViQW5pbWF0aW9uOjpzZXRFZmZlY3RJbnRlcm5hbChSZWZQdHI8QW5pbWF0
aW9uRWZmZWN0PiYmIG5ld0VmZmVjdCwgYm9vbCBkCiAgICAgLy8gVXBkYXRlIHRoZSBlZmZlY3Qt
dG8tYW5pbWF0aW9uIHJlbGF0aW9uc2hpcHMgYW5kIHRoZSB0aW1lbGluZSdzIGFuaW1hdGlvbiBt
YXAuCiAgICAgaWYgKG9sZEVmZmVjdCkgewogICAgICAgICBvbGRFZmZlY3QtPnNldEFuaW1hdGlv
bihudWxscHRyKTsKLSAgICAgICAgaWYgKCFkb05vdFJlbW92ZUZyb21UaW1lbGluZSAmJiBtX3Rp
bWVsaW5lICYmIHByZXZpb3VzVGFyZ2V0ICYmIHByZXZpb3VzVGFyZ2V0ICE9IG5ld1RhcmdldCkK
LSAgICAgICAgICAgIG1fdGltZWxpbmUtPmFuaW1hdGlvbldhc1JlbW92ZWRGcm9tU3R5bGVhYmxl
KCp0aGlzLCAqcHJldmlvdXNUYXJnZXQpOworICAgICAgICBpZiAoIWRvTm90UmVtb3ZlRnJvbVRp
bWVsaW5lICYmIHByZXZpb3VzVGFyZ2V0ICYmIHByZXZpb3VzVGFyZ2V0ICE9IG5ld1RhcmdldCkK
KyAgICAgICAgICAgIHByZXZpb3VzVGFyZ2V0LT5hbmltYXRpb25XYXNSZW1vdmVkKCp0aGlzKTsK
ICAgICAgICAgdXBkYXRlUmVsZXZhbmNlKCk7CiAgICAgfQogCiAgICAgaWYgKG1fZWZmZWN0KSB7
CiAgICAgICAgIG1fZWZmZWN0LT5zZXRBbmltYXRpb24odGhpcyk7Ci0gICAgICAgIGlmIChtX3Rp
bWVsaW5lICYmIG5ld1RhcmdldCAmJiBwcmV2aW91c1RhcmdldCAhPSBuZXdUYXJnZXQpCi0gICAg
ICAgICAgICBtX3RpbWVsaW5lLT5hbmltYXRpb25XYXNBZGRlZFRvU3R5bGVhYmxlKCp0aGlzLCAq
bmV3VGFyZ2V0KTsKKyAgICAgICAgaWYgKG5ld1RhcmdldCAmJiBwcmV2aW91c1RhcmdldCAhPSBu
ZXdUYXJnZXQpCisgICAgICAgICAgICBuZXdUYXJnZXQtPmFuaW1hdGlvbldhc0FkZGVkKCp0aGlz
KTsKICAgICB9CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNldFdlYkFuaW1h
dGlvbkVmZmVjdCgqdGhpcyk7CkBAIC0yNDQsMTAgKzI0NCw5IEBAIHZvaWQgV2ViQW5pbWF0aW9u
OjpzZXRUaW1lbGluZShSZWZQdHI8QW5pbWF0aW9uVGltZWxpbmU+JiYgdGltZWxpbmUpCiAgICAg
ICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIGRlY2xhcmF0aXZlIGFuaW1hdGlvbiwgd2UgZG9u
J3Qgd2FudCB0byByZW1vdmUgdGhlIGFuaW1hdGlvbiBmcm9tIHRoZSByZWxldmFudCBtYXBzIGJl
Y2F1c2UKICAgICAgICAgICAgIC8vIHdoaWxlIHRoZSB0aW1lbGluZSB3YXMgc2V0IHZpYSB0aGUg
QVBJLCB0aGUgZWxlbWVudCBzdGlsbCBoYXMgYSB0cmFuc2l0aW9uIG9yIGFuaW1hdGlvbiBzZXQg
dXAgYW5kIHdlIG11c3QKICAgICAgICAgICAgIC8vIG5vdCBicmVhayB0aGUgcmVsYXRpb25zaGlw
LgotICAgICAgICAgICAgaWYgKG1fdGltZWxpbmUgJiYgIWlzRGVjbGFyYXRpdmVBbmltYXRpb24o
KSkKLSAgICAgICAgICAgICAgICBtX3RpbWVsaW5lLT5hbmltYXRpb25XYXNSZW1vdmVkRnJvbVN0
eWxlYWJsZSgqdGhpcywgKnRhcmdldCk7Ci0gICAgICAgICAgICBpZiAodGltZWxpbmUpCi0gICAg
ICAgICAgICAgICAgdGltZWxpbmUtPmFuaW1hdGlvbldhc0FkZGVkVG9TdHlsZWFibGUoKnRoaXMs
ICp0YXJnZXQpOworICAgICAgICAgICAgaWYgKCFpc0RlY2xhcmF0aXZlQW5pbWF0aW9uKCkpCisg
ICAgICAgICAgICAgICAgdGFyZ2V0LT5hbmltYXRpb25XYXNSZW1vdmVkKCp0aGlzKTsKKyAgICAg
ICAgICAgIHRhcmdldC0+YW5pbWF0aW9uV2FzQWRkZWQoKnRoaXMpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0yODIsMTAgKzI4MSwxMCBAQCB2b2lkIFdlYkFuaW1hdGlvbjo6ZWZmZWN0VGFyZ2V0
RGlkQ2hhbmdlKGNvbnN0IE9wdGlvbmFsPGNvbnN0IFN0eWxlYWJsZT4mIHByZXZpbwogewogICAg
IGlmIChtX3RpbWVsaW5lKSB7CiAgICAgICAgIGlmIChwcmV2aW91c1RhcmdldCkKLSAgICAgICAg
ICAgIG1fdGltZWxpbmUtPmFuaW1hdGlvbldhc1JlbW92ZWRGcm9tU3R5bGVhYmxlKCp0aGlzLCAq
cHJldmlvdXNUYXJnZXQpOworICAgICAgICAgICAgcHJldmlvdXNUYXJnZXQtPmFuaW1hdGlvbldh
c1JlbW92ZWQoKnRoaXMpOwogCiAgICAgICAgIGlmIChuZXdUYXJnZXQpCi0gICAgICAgICAgICBt
X3RpbWVsaW5lLT5hbmltYXRpb25XYXNBZGRlZFRvU3R5bGVhYmxlKCp0aGlzLCAqbmV3VGFyZ2V0
KTsKKyAgICAgICAgICAgIG5ld1RhcmdldC0+YW5pbWF0aW9uV2FzQWRkZWQoKnRoaXMpOwogCiAg
ICAgICAgIC8vIFRoaXMgY291bGQgaGF2ZSBjaGFuZ2VkIHdoZXRoZXIgd2UgaGF2ZSByZXBsYWNl
ZCBhbmltYXRpb25zLCBzbyB3ZSBtYXkgbmVlZCB0byBzY2hlZHVsZSBhbiB1cGRhdGUuCiAgICAg
ICAgIG1fdGltZWxpbmUtPmFuaW1hdGlvblRpbWluZ0RpZENoYW5nZSgqdGhpcyk7CkBAIC0xMzY4
LDcgKzEzNjcsNyBAQCB2b2lkIFdlYkFuaW1hdGlvbjo6cGVyc2lzdCgpCiAgICAgICAgIGlmIChp
czxLZXlmcmFtZUVmZmVjdD4obV9lZmZlY3QpKSB7CiAgICAgICAgICAgICBhdXRvJiBrZXlmcmFt
ZUVmZmVjdCA9IGRvd25jYXN0PEtleWZyYW1lRWZmZWN0PigqbV9lZmZlY3QpOwogICAgICAgICAg
ICAgYXV0byBzdHlsZWFibGUgPSBrZXlmcmFtZUVmZmVjdC50YXJnZXRTdHlsZWFibGUoKTsKLSAg
ICAgICAgICAgIG1fdGltZWxpbmUtPmFuaW1hdGlvbldhc0FkZGVkVG9TdHlsZWFibGUoKnRoaXMs
ICpzdHlsZWFibGUpOworICAgICAgICAgICAgc3R5bGVhYmxlLT5hbmltYXRpb25XYXNBZGRlZCgq
dGhpcyk7CiAgICAgICAgICAgICBzdHlsZWFibGUtPmVuc3VyZUtleWZyYW1lRWZmZWN0U3RhY2so
KS5hZGRFZmZlY3Qoa2V5ZnJhbWVFZmZlY3QpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCmluZGV4IDZlNzY3Mjc0YTU5ZTBmYmIwMTY3N2UwOWQ5YTc5MmUzOTljOWQyMDcu
LmI1OWRlZDFjN2FkOWJkMzA4YzY4ZThmZWM4ZGMxYTU5MGE1MGU1NmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKQEAgLTIzMTcsOCArMjMxNyw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb21B
bmNlc3RvcihSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgb2xkUGFyCiAg
ICAgICAgIGRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLnJlbW92ZUVsZW1lbnRGcm9t
UGVuZGluZ1Jlc291cmNlcygqdGhpcyk7CiAKICAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gZG9j
dW1lbnQoKS5mcmFtZSgpOwotICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50KCkuZXhp
c3RpbmdUaW1lbGluZSgpKQotICAgICAgICB0aW1lbGluZS0+ZWxlbWVudFdhc1JlbW92ZWQoeyAq
dGhpcywgcHNldWRvSWQoKSB9KTsKKyAgICBTdHlsZWFibGU6OmZyb21FbGVtZW50KCp0aGlzKS5l
bGVtZW50V2FzUmVtb3ZlZCgpOwogCiAjaWYgRU5BQkxFKFdIRUVMX0VWRU5UX0xBVENISU5HKQog
ICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFnZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vUHNldWRvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxl
bWVudC5jcHAKaW5kZXggMzlhMDQyOWEzM2QxNDkxN2VjNWZlOTcxYzAyMTQ0NWNjNjhkOWM4Zi4u
YjM3N2E0NGYxZjk5NWNhZmY1MjE1NTFlMDJlNTIxMGFlYTY3ZWJjYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qc2V1ZG9FbGVtZW50LmNwcApAQCAtNzUsOCArNzUsNyBAQCB2b2lkIFBzZXVkb0VsZW1lbnQ6
OmNsZWFySG9zdEVsZW1lbnQoKQogewogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cHNl
dWRvRWxlbWVudERlc3Ryb3llZChkb2N1bWVudCgpLnBhZ2UoKSwgKnRoaXMpOwogCi0gICAgaWYg
KGF1dG8qIHRpbWVsaW5lID0gZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCi0gICAgICAg
IHRpbWVsaW5lLT5lbGVtZW50V2FzUmVtb3ZlZChTdHlsZWFibGU6OmZyb21FbGVtZW50KCp0aGlz
KSk7CisgICAgU3R5bGVhYmxlOjpmcm9tRWxlbWVudCgqdGhpcykuZWxlbWVudFdhc1JlbW92ZWQo
KTsKICAgICAKICAgICBtX2hvc3RFbGVtZW50ID0gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCmlu
ZGV4IGYxYTg3YTQ2ZTVhNWQwZTFlM2VkZDE1ZTExMTllMzIzNmU3OWIxNTEuLjc1Y2I3MGViMzgz
NjY2OWE2OTM0YzJjNmFjYmQyNDE4ZDJkZGRhYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcApAQCAtNTU2LDcg
KzU1Niw2IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKEVsZW1l
bnQmIHJvb3QsIFRlYXJkb3duVHlwZSB0ZWFyZG93blR5CiAgICAgfTsKIAogICAgIGF1dG8mIGRv
Y3VtZW50ID0gcm9vdC5kb2N1bWVudCgpOwotICAgIGF1dG8qIHRpbWVsaW5lID0gZG9jdW1lbnQu
ZXhpc3RpbmdUaW1lbGluZSgpOwogCiAgICAgYXV0byBwb3AgPSBbJl0gKHVuc2lnbmVkIGRlcHRo
KSB7CiAgICAgICAgIHdoaWxlICh0ZWFyZG93blN0YWNrLnNpemUoKSA+IGRlcHRoKSB7CkBAIC01
NjksMTYgKzU2OCwxMSBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJlbmRlcmVy
cyhFbGVtZW50JiByb290LCBUZWFyZG93blR5cGUgdGVhcmRvd25UeQogICAgICAgICAgICAgc3dp
dGNoICh0ZWFyZG93blR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgVGVhcmRvd25UeXBlOjpGdWxs
OgogICAgICAgICAgICAgY2FzZSBUZWFyZG93blR5cGU6OlJlbmRlcmVyVXBkYXRlQ2FuY2VsaW5n
QW5pbWF0aW9uczoKLSAgICAgICAgICAgICAgICBpZiAodGltZWxpbmUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGRvY3VtZW50LnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZWxpbmUtPmNhbmNlbERlY2xhcmF0aXZlQW5pbWF0aW9uc0Zv
clN0eWxlYWJsZShTdHlsZWFibGU6OmZyb21FbGVtZW50KGVsZW1lbnQpKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAodGVhcmRvd25UeXBlID09IFRlYXJkb3duVHlwZTo6UmVuZGVyZXJV
cGRhdGVDYW5jZWxpbmdBbmltYXRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxp
bmUtPmNhbmNlbERlY2xhcmF0aXZlQW5pbWF0aW9uc0ZvclN0eWxlYWJsZShTdHlsZWFibGU6OmZy
b21FbGVtZW50KGVsZW1lbnQpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKGRvY3VtZW50LnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpIHx8IHRlYXJkb3duVHlwZSA9
PSBUZWFyZG93blR5cGU6OlJlbmRlcmVyVXBkYXRlQ2FuY2VsaW5nQW5pbWF0aW9ucykKKyAgICAg
ICAgICAgICAgICAgICAgU3R5bGVhYmxlOjpmcm9tRWxlbWVudChlbGVtZW50KS5jYW5jZWxEZWNs
YXJhdGl2ZUFuaW1hdGlvbnMoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgVGVhcmRvd25UeXBlOjpSZW5kZXJlclVwZGF0ZToKLSAgICAgICAgICAgICAgICBpZiAo
dGltZWxpbmUpCi0gICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLT53aWxsQ2hhbmdlUmVuZGVy
ZXJGb3JTdHlsZWFibGUoU3R5bGVhYmxlOjpmcm9tRWxlbWVudChlbGVtZW50KSk7CisgICAgICAg
ICAgICAgICAgU3R5bGVhYmxlOjpmcm9tRWxlbWVudChlbGVtZW50KS53aWxsQ2hhbmdlUmVuZGVy
ZXIoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCmluZGV4IGFjODQ5NTAxMWI2YjAyNzc2
ODcwYzQ5NjAwYTdlOWE5OTgzYzM1ZDEuLmIyZDczYjVkNjdkNTlhOTYyMjI2ZWM0NTA1NGRiNzcw
MDE3MmI3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29s
dmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAK
QEAgLTMzMiwxMyArMzMyLDEzIEBAIEVsZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVyOjpjcmVhdGVB
bmltYXRlZEVsZW1lbnRVcGRhdGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0CiAgICAgLy8gaW4g
Y2FzZSBubyBXZWIgQW5pbWF0aW9ucyBoYXZlIGJlZW4gY3JlYXRlZCB0aHJvdWdoIHRoZSBKUyBB
UEkuCiAgICAgaWYgKGRvY3VtZW50LmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50
OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUgJiYgIWRvY3VtZW50LnJlbmRlclZpZXcoKS0+cHJpbnRp
bmcoKSkgewogICAgICAgICBpZiAob2xkU3R5bGUgJiYgKG9sZFN0eWxlLT5oYXNUcmFuc2l0aW9u
cygpIHx8IG5ld1N0eWxlLT5oYXNUcmFuc2l0aW9ucygpKSkKLSAgICAgICAgICAgIGRvY3VtZW50
LnRpbWVsaW5lKCkudXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JTdHlsZWFibGUoc3R5bGVhYmxlLCAq
b2xkU3R5bGUsICpuZXdTdHlsZSk7CisgICAgICAgICAgICBzdHlsZWFibGUudXBkYXRlQ1NTVHJh
bnNpdGlvbnMoKm9sZFN0eWxlLCAqbmV3U3R5bGUpOwogCiAgICAgICAgIC8vIFRoZSBvcmRlciBp
biB3aGljaCBDU1MgVHJhbnNpdGlvbnMgYW5kIENTUyBBbmltYXRpb25zIGFyZSB1cGRhdGVkIG1h
dHRlcnMgc2luY2UgQ1NTIFRyYW5zaXRpb25zIGRlZmluZSB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxl
CiAgICAgICAgIC8vIHRvIHVzZSBDU1MgQW5pbWF0aW9ucyBhcyBkZWZpbmVkIGluIHRoZSBwcmV2
aW91cyBzdHlsZSBjaGFuZ2UgZXZlbnQuIEFzIHN1Y2gsIHdlIHVwZGF0ZSBDU1MgQW5pbWF0aW9u
cyBhZnRlciBDU1MgVHJhbnNpdGlvbnMKICAgICAgICAgLy8gc3VjaCB0aGF0IHdoZW4gQ1NTIFRy
YW5zaXRpb25zIGFyZSB1cGRhdGVkIHRoZSBDU1MgQW5pbWF0aW9ucyBkYXRhIGlzIHRoZSBzYW1l
IGFzIGR1cmluZyB0aGUgcHJldmlvdXMgc3R5bGUgY2hhbmdlIGV2ZW50LgogICAgICAgICBpZiAo
KG9sZFN0eWxlICYmIG9sZFN0eWxlLT5oYXNBbmltYXRpb25zKCkpIHx8IG5ld1N0eWxlLT5oYXNB
bmltYXRpb25zKCkpCi0gICAgICAgICAgICBkb2N1bWVudC50aW1lbGluZSgpLnVwZGF0ZUNTU0Fu
aW1hdGlvbnNGb3JTdHlsZWFibGUoc3R5bGVhYmxlLCBvbGRTdHlsZSwgKm5ld1N0eWxlLCAmcGFy
ZW50U3R5bGUpOworICAgICAgICAgICAgc3R5bGVhYmxlLnVwZGF0ZUNTU0FuaW1hdGlvbnMob2xk
U3R5bGUsICpuZXdTdHlsZSwgJnBhcmVudFN0eWxlKTsKICAgICB9CiAKICAgICAvLyBOb3cgd2Ug
Y2FuIHVwZGF0ZSBhbGwgV2ViIGFuaW1hdGlvbnMsIHdoaWNoIHdpbGwgaW5jbHVkZSBDU1MgQW5p
bWF0aW9ucyBhcyB3ZWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZWFi
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVhYmxlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
YzM5OGI4ZTA2OTk5N2Y5ODllMmY0ZmQ4NTI2YmFiYWMyZjM3NDExCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVhYmxlLmNwcApAQCAtMCwwICsxLDQ5OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJTdHlsZWFibGUuaCIKKworI2luY2x1ZGUgIkFuaW1hdGlvbi5o
IgorI2luY2x1ZGUgIkFuaW1hdGlvbkVmZmVjdC5oIgorI2luY2x1ZGUgIkFuaW1hdGlvbkxpc3Qu
aCIKKyNpbmNsdWRlICJBbmltYXRpb25UaW1lbGluZS5oIgorI2luY2x1ZGUgIkNTU0FuaW1hdGlv
bi5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTVHJh
bnNpdGlvbi5oIgorI2luY2x1ZGUgIkRlY2xhcmF0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiS2V5ZnJhbWVFZmZl
Y3QuaCIKKyNpbmNsdWRlICJLZXlmcmFtZUVmZmVjdFN0YWNrLmgiCisjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCisjaW5jbHVkZSAi
V2ViQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9uVXRpbGl0aWVzLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTdHlsZWFibGU6OmFuaW1hdGlvbldhc0FkZGVkKFdl
YkFuaW1hdGlvbiYgYW5pbWF0aW9uKSBjb25zdAoreworICAgIGVuc3VyZUFuaW1hdGlvbnMoKS5h
ZGQoJmFuaW1hdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCByZW1vdmVDU1NUcmFuc2l0
aW9uRnJvbU1hcChDU1NUcmFuc2l0aW9uJiB0cmFuc2l0aW9uLCBQcm9wZXJ0eVRvVHJhbnNpdGlv
bk1hcCYgY3NzVHJhbnNpdGlvbnNCeVByb3BlcnR5KQoreworICAgIGF1dG8gdHJhbnNpdGlvbkl0
ZXJhdG9yID0gY3NzVHJhbnNpdGlvbnNCeVByb3BlcnR5LmZpbmQodHJhbnNpdGlvbi5wcm9wZXJ0
eSgpKTsKKyAgICBpZiAodHJhbnNpdGlvbkl0ZXJhdG9yID09IGNzc1RyYW5zaXRpb25zQnlQcm9w
ZXJ0eS5lbmQoKSB8fCB0cmFuc2l0aW9uSXRlcmF0b3ItPnZhbHVlICE9ICZ0cmFuc2l0aW9uKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjc3NUcmFuc2l0aW9uc0J5UHJvcGVydHkucmVt
b3ZlKHRyYW5zaXRpb25JdGVyYXRvcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU3R5
bGVhYmxlOjpyZW1vdmVEZWNsYXJhdGl2ZUFuaW1hdGlvbkZyb21MaXN0c0Zvck93bmluZ0VsZW1l
bnQoV2ViQW5pbWF0aW9uJiBhbmltYXRpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzPERlY2xh
cmF0aXZlQW5pbWF0aW9uPihhbmltYXRpb24pKTsKKworICAgIGlmIChpczxDU1NUcmFuc2l0aW9u
PihhbmltYXRpb24pKSB7CisgICAgICAgIGF1dG8mIHRyYW5zaXRpb24gPSBkb3duY2FzdDxDU1NU
cmFuc2l0aW9uPihhbmltYXRpb24pOworICAgICAgICBpZiAoIXJlbW92ZUNTU1RyYW5zaXRpb25G
cm9tTWFwKHRyYW5zaXRpb24sIGVuc3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKSkp
CisgICAgICAgICAgICByZW1vdmVDU1NUcmFuc2l0aW9uRnJvbU1hcCh0cmFuc2l0aW9uLCBlbnN1
cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKSk7CisgICAgfQorfQorCit2b2lkIFN0
eWxlYWJsZTo6YW5pbWF0aW9uV2FzUmVtb3ZlZChXZWJBbmltYXRpb24mIGFuaW1hdGlvbikgY29u
c3QKK3sKKyAgICBlbnN1cmVBbmltYXRpb25zKCkucmVtb3ZlKCZhbmltYXRpb24pOworCisgICAg
Ly8gTm93LCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBDU1MgVHJhbnNpdGlvbiwgd2UgcmVtb3Zl
IGl0IGZyb20gdGhlIG1fZWxlbWVudFRvUnVubmluZ0NTU1RyYW5zaXRpb25CeUNTU1Byb3BlcnR5
SUQgbWFwLgorICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gdGhpcyBmb3IgQ1NTIEFuaW1hdGlv
bnMgYmVjYXVzZSB0aGVpciB0aW1pbmcgY2FuIGJlIHNldCB2aWEgQ1NTIHRvIGVuZCwgd2hpY2gg
d291bGQgY2F1c2UgdGhpcworICAgIC8vIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCwgYnV0IHRoZXkg
c2hvdWxkIHJlbWFpbiBhc3NvY2lhdGVkIHdpdGggdGhlaXIgb3duaW5nIGVsZW1lbnQgdW50aWwg
dGhpcyBpcyBjaGFuZ2VkIHZpYSBhIGNhbGwKKyAgICAvLyB0byB0aGUgSlMgQVBJIG9yIGNoYW5n
aW5nIHRoZSB0YXJnZXQgZWxlbWVudCdzIGFuaW1hdGlvbi1uYW1lIHByb3BlcnR5LgorICAgIGlm
IChpczxDU1NUcmFuc2l0aW9uPihhbmltYXRpb24pKQorICAgICAgICByZW1vdmVEZWNsYXJhdGl2
ZUFuaW1hdGlvbkZyb21MaXN0c0Zvck93bmluZ0VsZW1lbnQoYW5pbWF0aW9uKTsKK30KKworc3Rh
dGljIHZvaWQgcmVtb3ZlQ1NTQW5pbWF0aW9uQ3JlYXRlZEJ5TWFya3VwKGNvbnN0IFN0eWxlYWJs
ZSYgc3R5bGVhYmxlLCBDU1NBbmltYXRpb24mIGNzc0FuaW1hdGlvbikKK3sKKyAgICBzdHlsZWFi
bGUuYW5pbWF0aW9uc0NyZWF0ZWRCeU1hcmt1cCgpLnJlbW92ZSgmY3NzQW5pbWF0aW9uKTsKKwor
ICAgIGlmICghc3R5bGVhYmxlLmhhc0tleWZyYW1lRWZmZWN0cygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvJiBrZXlmcmFtZUVmZmVjdFN0YWNrID0gc3R5bGVhYmxlLmVuc3VyZUtleWZy
YW1lRWZmZWN0U3RhY2soKTsKKyAgICBhdXRvKiBjc3NBbmltYXRpb25MaXN0ID0ga2V5ZnJhbWVF
ZmZlY3RTdGFjay5jc3NBbmltYXRpb25MaXN0KCk7CisgICAgaWYgKCFjc3NBbmltYXRpb25MaXN0
IHx8IGNzc0FuaW1hdGlvbkxpc3QtPmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byYgYmFja2luZ0FuaW1hdGlvbiA9IGNzc0FuaW1hdGlvbi5iYWNraW5nQW5pbWF0aW9uKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjc3NBbmltYXRpb25MaXN0LT5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAoY3NzQW5pbWF0aW9uTGlzdC0+YW5pbWF0aW9uKGkpID09IGJhY2tp
bmdBbmltYXRpb24pIHsKKyAgICAgICAgICAgIGF1dG8gbmV3QW5pbWF0aW9uTGlzdCA9IGNzc0Fu
aW1hdGlvbkxpc3QtPmNvcHkoKTsKKyAgICAgICAgICAgIG5ld0FuaW1hdGlvbkxpc3QtPnJlbW92
ZShpKTsKKyAgICAgICAgICAgIGtleWZyYW1lRWZmZWN0U3RhY2suc2V0Q1NTQW5pbWF0aW9uTGlz
dChXVEZNb3ZlKG5ld0FuaW1hdGlvbkxpc3QpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBTdHlsZWFibGU6OmVsZW1lbnRXYXNSZW1vdmVkKCkgY29u
c3QKK3sKKyAgICBjYW5jZWxEZWNsYXJhdGl2ZUFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBTdHls
ZWFibGU6OndpbGxDaGFuZ2VSZW5kZXJlcigpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIGFuaW1h
dGlvbnMgPSB0aGlzLT5hbmltYXRpb25zKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBh
bmltYXRpb24gOiAqYW5pbWF0aW9ucykKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+d2lsbENoYW5n
ZVJlbmRlcmVyKCk7CisgICAgfQorfQorCit2b2lkIFN0eWxlYWJsZTo6Y2FuY2VsRGVjbGFyYXRp
dmVBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogYW5pbWF0aW9ucyA9IHRoaXMt
PmFuaW1hdGlvbnMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6ICphbmltYXRp
b25zKSB7CisgICAgICAgICAgICBpZiAoaXM8RGVjbGFyYXRpdmVBbmltYXRpb24+KGFuaW1hdGlv
bikpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTQW5pbWF0aW9uPihhbmltYXRpb24pKQor
ICAgICAgICAgICAgICAgICAgICByZW1vdmVDU1NBbmltYXRpb25DcmVhdGVkQnlNYXJrdXAoKnRo
aXMsIGRvd25jYXN0PENTU0FuaW1hdGlvbj4oKmFuaW1hdGlvbikpOworICAgICAgICAgICAgICAg
IGRvd25jYXN0PERlY2xhcmF0aXZlQW5pbWF0aW9uPigqYW5pbWF0aW9uKS5jYW5jZWxGcm9tU3R5
bGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGJvb2wg
c2hvdWxkQ29uc2lkZXJBbmltYXRpb24oRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQW5pbWF0aW9u
JiBhbmltYXRpb24pCit7CisgICAgaWYgKCFhbmltYXRpb24uaXNWYWxpZEFuaW1hdGlvbigpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
U3RyaW5nPiBhbmltYXRpb25OYW1lTm9uZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgibm9uZSIp
KTsKKworICAgIGF1dG8mIG5hbWUgPSBhbmltYXRpb24ubmFtZSgpOworICAgIGlmIChuYW1lID09
IGFuaW1hdGlvbk5hbWVOb25lIHx8IG5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoYXV0byogc3R5bGVTY29wZSA9IFN0eWxlOjpTY29wZTo6Zm9yT3JkaW5h
bChlbGVtZW50LCBhbmltYXRpb24ubmFtZVN0eWxlU2NvcGVPcmRpbmFsKCkpKQorICAgICAgICBy
ZXR1cm4gc3R5bGVTY29wZS0+cmVzb2x2ZXIoKS5pc0FuaW1hdGlvbk5hbWVWYWxpZChuYW1lKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTdHlsZWFibGU6OnVwZGF0ZUNTU0FuaW1h
dGlvbnMoY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUm
IG5ld1N0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50RWxlbWVudFN0eWxlKSBjb25zdAor
eworICAgIGF1dG8mIGtleWZyYW1lRWZmZWN0U3RhY2sgPSBlbnN1cmVLZXlmcmFtZUVmZmVjdFN0
YWNrKCk7CisKKyAgICAvLyBJbiBjYXNlIHRoaXMgZWxlbWVudCBpcyBuZXdseSBnZXR0aW5nIGEg
ImRpc3BsYXk6IG5vbmUiIHdlIG5lZWQgdG8gY2FuY2VsIGFsbCBvZiBpdHMgYW5pbWF0aW9ucyBh
bmQgZGlzcmVnYXJkIG5ldyBvbmVzLgorICAgIGlmIChjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0
eWxlLT5kaXNwbGF5KCkgIT0gRGlzcGxheVR5cGU6Ok5vbmUgJiYgbmV3U3R5bGUuZGlzcGxheSgp
ID09IERpc3BsYXlUeXBlOjpOb25lKSB7CisgICAgICAgIGZvciAoYXV0byYgY3NzQW5pbWF0aW9u
IDogYW5pbWF0aW9uc0NyZWF0ZWRCeU1hcmt1cCgpKQorICAgICAgICAgICAgY3NzQW5pbWF0aW9u
LT5jYW5jZWxGcm9tU3R5bGUoKTsKKyAgICAgICAga2V5ZnJhbWVFZmZlY3RTdGFjay5zZXRDU1NB
bmltYXRpb25MaXN0KG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byogY3VycmVudEFuaW1hdGlvbkxpc3QgPSBuZXdTdHlsZS5hbmltYXRpb25zKCk7CisgICAgYXV0
byogcHJldmlvdXNBbmltYXRpb25MaXN0ID0ga2V5ZnJhbWVFZmZlY3RTdGFjay5jc3NBbmltYXRp
b25MaXN0KCk7CisgICAgaWYgKHByZXZpb3VzQW5pbWF0aW9uTGlzdCAmJiAhcHJldmlvdXNBbmlt
YXRpb25MaXN0LT5pc0VtcHR5KCkgJiYgbmV3U3R5bGUuaGFzQW5pbWF0aW9ucygpICYmICoocHJl
dmlvdXNBbmltYXRpb25MaXN0KSA9PSAqKG5ld1N0eWxlLmFuaW1hdGlvbnMoKSkpCisgICAgICAg
IHJldHVybjsKKworICAgIENTU0FuaW1hdGlvbkNvbGxlY3Rpb24gbmV3QW5pbWF0aW9uczsKKyAg
ICBhdXRvJiBwcmV2aW91c0FuaW1hdGlvbnMgPSBhbmltYXRpb25zQ3JlYXRlZEJ5TWFya3VwKCk7
CisKKyAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLWFuaW1hdGlvbnMtMS8jYW5pbWF0
aW9ucworICAgIC8vIFRoZSBzYW1lIEBrZXlmcmFtZXMgcnVsZSBuYW1lIG1heSBiZSByZXBlYXRl
ZCB3aXRoaW4gYW4gYW5pbWF0aW9uLW5hbWUuIENoYW5nZXMgdG8gdGhlIGFuaW1hdGlvbi1uYW1l
IHVwZGF0ZSBleGlzdGluZworICAgIC8vIGFuaW1hdGlvbnMgYnkgaXRlcmF0aW5nIG92ZXIgdGhl
IG5ldyBsaXN0IG9mIGFuaW1hdGlvbnMgZnJvbSBsYXN0IHRvIGZpcnN0LCBhbmQsIGZvciBlYWNo
IGFuaW1hdGlvbiwgZmluZGluZyB0aGUgbGFzdAorICAgIC8vIG1hdGNoaW5nIGFuaW1hdGlvbiBp
biB0aGUgbGlzdCBvZiBleGlzdGluZyBhbmltYXRpb25zLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCB0
aGUgZXhpc3RpbmcgYW5pbWF0aW9uIGlzIHVwZGF0ZWQgdXNpbmcgdGhlCisgICAgLy8gYW5pbWF0
aW9uIHByb3BlcnRpZXMgY29ycmVzcG9uZGluZyB0byBpdHMgcG9zaXRpb24gaW4gdGhlIG5ldyBs
aXN0IG9mIGFuaW1hdGlvbnMsIHdoaWxzdCBtYWludGFpbmluZyBpdHMgY3VycmVudCBwbGF5YmFj
aworICAgIC8vIHRpbWUgYXMgZGVzY3JpYmVkIGFib3ZlLiBUaGUgbWF0Y2hpbmcgYW5pbWF0aW9u
IGlzIHJlbW92ZWQgZnJvbSB0aGUgZXhpc3RpbmcgbGlzdCBvZiBhbmltYXRpb25zIHN1Y2ggdGhh
dCBpdCB3aWxsIG5vdCBtYXRjaAorICAgIC8vIHR3aWNlLiBJZiBhIG1hdGNoIGlzIG5vdCBmb3Vu
ZCwgYSBuZXcgYW5pbWF0aW9uIGlzIGNyZWF0ZWQuIEFzIGEgcmVzdWx0LCB1cGRhdGluZyBhbmlt
YXRpb24tbmFtZSBmcm9tIOKAmGHigJkgdG8g4oCYYSwgYeKAmSB3aWxsCisgICAgLy8gY2F1c2Ug
dGhlIGV4aXN0aW5nIGFuaW1hdGlvbiBmb3Ig4oCYYeKAmSB0byBiZWNvbWUgdGhlIHNlY29uZCBh
bmltYXRpb24gaW4gdGhlIGxpc3QgYW5kIGEgbmV3IGFuaW1hdGlvbiB3aWxsIGJlIGNyZWF0ZWQg
Zm9yIHRoZQorICAgIC8vIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuCisgICAgaWYgKGN1cnJlbnRB
bmltYXRpb25MaXN0KSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBjdXJyZW50QW5pbWF0aW9u
TGlzdC0+c2l6ZSgpOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBhdXRvJiBjdXJyZW50QW5p
bWF0aW9uID0gY3VycmVudEFuaW1hdGlvbkxpc3QtPmFuaW1hdGlvbihpIC0gMSk7CisgICAgICAg
ICAgICBpZiAoIXNob3VsZENvbnNpZGVyQW5pbWF0aW9uKHRoaXMtPmVsZW1lbnQsIGN1cnJlbnRB
bmltYXRpb24pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBib29s
IGZvdW5kTWF0Y2hpbmdBbmltYXRpb24gPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
cHJldmlvdXNBbmltYXRpb24gOiBwcmV2aW91c0FuaW1hdGlvbnMpIHsKKyAgICAgICAgICAgICAg
ICBpZiAocHJldmlvdXNBbmltYXRpb24tPmFuaW1hdGlvbk5hbWUoKSA9PSBjdXJyZW50QW5pbWF0
aW9uLm5hbWUoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaW1pbmcgcHJvcGVydGllcyBv
ciBwbGF5IHN0YXRlIG1heSBoYXZlIGNoYW5nZWQgc28gd2UgbmVlZCB0byB1cGRhdGUgdGhlIGJh
Y2tpbmcgYW5pbWF0aW9uIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIEFuaW1hdGlv
biBmb3VuZCBpbiB0aGUgY3VycmVudCBzdHlsZS4KKyAgICAgICAgICAgICAgICAgICAgcHJldmlv
dXNBbmltYXRpb24tPnNldEJhY2tpbmdBbmltYXRpb24oY3VycmVudEFuaW1hdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuYWRkKHByZXZpb3VzQW5pbWF0aW9uKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBtYXRjaGVkIGFuaW1hdGlvbiBmcm9tIHRo
ZSBsaXN0IG9mIHByZXZpb3VzIGFuaW1hdGlvbnMgc28gd2UgbWF5IG5vdCBtYXRjaCBpdCBhZ2Fp
bi4KKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNBbmltYXRpb25zLnJlbW92ZShwcmV2aW91
c0FuaW1hdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kTWF0Y2hpbmdBbmltYXRpb24g
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZm91bmRNYXRjaGluZ0FuaW1hdGlvbikK
KyAgICAgICAgICAgICAgICBuZXdBbmltYXRpb25zLmFkZChDU1NBbmltYXRpb246OmNyZWF0ZSgq
dGhpcywgY3VycmVudEFuaW1hdGlvbiwgY3VycmVudFN0eWxlLCBuZXdTdHlsZSwgcGFyZW50RWxl
bWVudFN0eWxlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbnkgYW5pbWF0aW9uIGZv
dW5kIGluIHByZXZpb3VzQW5pbWF0aW9ucyBidXQgbm90IGZvdW5kIGluIG5ld0FuaW1hdGlvbnMg
aXMgbm90IGxvbmdlciBjdXJyZW50IGFuZCBzaG91bGQgYmUgY2FuY2VsZWQuCisgICAgZm9yIChh
dXRvJiBwcmV2aW91c0FuaW1hdGlvbiA6IHByZXZpb3VzQW5pbWF0aW9ucykgeworICAgICAgICBp
ZiAoIW5ld0FuaW1hdGlvbnMuY29udGFpbnMocHJldmlvdXNBbmltYXRpb24pKSB7CisgICAgICAg
ICAgICBpZiAocHJldmlvdXNBbmltYXRpb24tPm93bmluZ0VsZW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICBwcmV2aW91c0FuaW1hdGlvbi0+Y2FuY2VsRnJvbVN0eWxlKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzZXRBbmltYXRpb25zQ3JlYXRlZEJ5TWFya3VwKFdURk1vdmUobmV3QW5pbWF0
aW9ucykpOworCisgICAga2V5ZnJhbWVFZmZlY3RTdGFjay5zZXRDU1NBbmltYXRpb25MaXN0KGN1
cnJlbnRBbmltYXRpb25MaXN0KTsKK30KKworc3RhdGljIEtleWZyYW1lRWZmZWN0KiBrZXlmcmFt
ZUVmZmVjdEZvckVsZW1lbnRBbmRQcm9wZXJ0eShjb25zdCBTdHlsZWFibGUmIHN0eWxlYWJsZSwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKK3sKKyAgICBpZiAoYXV0byoga2V5ZnJhbWVFZmZlY3RT
dGFjayA9IHN0eWxlYWJsZS5rZXlmcmFtZUVmZmVjdFN0YWNrKCkpIHsKKyAgICAgICAgYXV0byBl
ZmZlY3RzID0ga2V5ZnJhbWVFZmZlY3RTdGFjay0+c29ydGVkRWZmZWN0cygpOworICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIGVmZmVjdCA6IG1ha2VSZXZlcnNlZFJhbmdlKGVmZmVjdHMpKSB7Cisg
ICAgICAgICAgICBpZiAoZWZmZWN0LT5hbmltYXRlc1Byb3BlcnR5KHByb3BlcnR5KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZWZmZWN0LmdldCgpOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBib29sIHByb3BlcnR5SW5TdHlsZU1hdGNoZXNW
YWx1ZUZvclRyYW5zaXRpb25Jbk1hcChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIFByb3BlcnR5VG9UcmFuc2l0aW9uTWFwJiB0cmFuc2l0aW9ucykKK3sK
KyAgICBpZiAoYXV0byogdHJhbnNpdGlvbiA9IHRyYW5zaXRpb25zLmdldChwcm9wZXJ0eSkpIHsK
KyAgICAgICAgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcGVy
dHksICZzdHlsZSwgJnRyYW5zaXRpb24tPnRhcmdldFN0eWxlKCkpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGRvdWJsZSB0
cmFuc2l0aW9uQ29tYmluZWREdXJhdGlvbihjb25zdCBBbmltYXRpb24qIHRyYW5zaXRpb24pCit7
CisgICAgcmV0dXJuIHN0ZDo6bWF4KDAuMCwgdHJhbnNpdGlvbi0+ZHVyYXRpb24oKSkgKyB0cmFu
c2l0aW9uLT5kZWxheSgpOworfQorCitzdGF0aWMgYm9vbCB0cmFuc2l0aW9uTWF0Y2hlc1Byb3Bl
cnR5KGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkK
K3sKKyAgICBhdXRvIG1vZGUgPSB0cmFuc2l0aW9uLnByb3BlcnR5KCkubW9kZTsKKyAgICBpZiAo
bW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpOb25lIHx8IG1vZGUgPT0gQW5pbWF0
aW9uOjpUcmFuc2l0aW9uTW9kZTo6VW5rbm93blByb3BlcnR5KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1vZGUgPT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9kZTo6U2luZ2xlUHJv
cGVydHkpIHsKKyAgICAgICAgYXV0byB0cmFuc2l0aW9uUHJvcGVydHkgPSB0cmFuc2l0aW9uLnBy
b3BlcnR5KCkuaWQ7CisgICAgICAgIGlmICh0cmFuc2l0aW9uUHJvcGVydHkgIT0gcHJvcGVydHkp
IHsKKyAgICAgICAgICAgIGZvciAoYXV0byBsb25naGFuZCA6IHNob3J0aGFuZEZvclByb3BlcnR5
KHRyYW5zaXRpb25Qcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9uZ2hhbmQgPT0g
cHJvcGVydHkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgdm9pZCBjb21waWxlVHJhbnNpdGlvblByb3BlcnRpZXNJblN0
eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdHJh
bnNpdGlvblByb3BlcnRpZXMsIGJvb2wmIHRyYW5zaXRpb25Qcm9wZXJ0aWVzQ29udGFpbkFsbCkK
K3sKKyAgICBpZiAodHJhbnNpdGlvblByb3BlcnRpZXNDb250YWluQWxsKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvKiB0cmFuc2l0aW9ucyA9IHN0eWxlLnRyYW5zaXRpb25zKCk7CisgICAg
aWYgKCF0cmFuc2l0aW9ucykKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0cmFuc2l0aW9ucy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgYXV0byYg
YW5pbWF0aW9uID0gdHJhbnNpdGlvbnMtPmFuaW1hdGlvbihpKTsKKyAgICAgICAgYXV0byBtb2Rl
ID0gYW5pbWF0aW9uLnByb3BlcnR5KCkubW9kZTsKKyAgICAgICAgaWYgKG1vZGUgPT0gQW5pbWF0
aW9uOjpUcmFuc2l0aW9uTW9kZTo6U2luZ2xlUHJvcGVydHkpIHsKKyAgICAgICAgICAgIGF1dG8g
cHJvcGVydHkgPSBhbmltYXRpb24ucHJvcGVydHkoKS5pZDsKKyAgICAgICAgICAgIGlmIChpc1No
b3J0aGFuZENTU1Byb3BlcnR5KHByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIGZvciAoYXV0
byBsb25naGFuZCA6IHNob3J0aGFuZEZvclByb3BlcnR5KHByb3BlcnR5KSkKKyAgICAgICAgICAg
ICAgICAgICAgdHJhbnNpdGlvblByb3BlcnRpZXMuYWRkKGxvbmdoYW5kKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAocHJvcGVydHkgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKQorICAgICAgICAgICAg
ICAgIHRyYW5zaXRpb25Qcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7CisgICAgICAgIH0gZWxzZSBp
ZiAobW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpBbGwpIHsKKyAgICAgICAgICAg
IHRyYW5zaXRpb25Qcm9wZXJ0aWVzQ29udGFpbkFsbCA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZUNTU1RyYW5zaXRp
b25zRm9yU3R5bGVhYmxlQW5kUHJvcGVydHkoY29uc3QgU3R5bGVhYmxlJiBzdHlsZWFibGUsIENT
U1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwgY29uc3QgTW9ub3RvbmljVGltZSBnZW5lcmF0aW9u
VGltZSkKK3sKKyAgICBhdXRvKiBrZXlmcmFtZUVmZmVjdCA9IGtleWZyYW1lRWZmZWN0Rm9yRWxl
bWVudEFuZFByb3BlcnR5KHN0eWxlYWJsZSwgcHJvcGVydHkpOworICAgIGF1dG8qIGFuaW1hdGlv
biA9IGtleWZyYW1lRWZmZWN0ID8ga2V5ZnJhbWVFZmZlY3QtPmFuaW1hdGlvbigpIDogbnVsbHB0
cjsKKworICAgIGJvb2wgaXNEZWNsYXJhdGl2ZSA9IGZhbHNlOworICAgIGlmIChpczxEZWNsYXJh
dGl2ZUFuaW1hdGlvbj4oYW5pbWF0aW9uKSkgeworICAgICAgICBpZiAoYXV0byBvd25pbmdFbGVt
ZW50ID0gZG93bmNhc3Q8RGVjbGFyYXRpdmVBbmltYXRpb24+KCphbmltYXRpb24pLm93bmluZ0Vs
ZW1lbnQoKSkKKyAgICAgICAgICAgIGlzRGVjbGFyYXRpdmUgPSAqb3duaW5nRWxlbWVudCA9PSBz
dHlsZWFibGU7CisgICAgfQorCisgICAgaWYgKGFuaW1hdGlvbiAmJiAhaXNEZWNsYXJhdGl2ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgQW5pbWF0aW9uKiBtYXRjaGluZ0JhY2tpbmdB
bmltYXRpb24gPSBudWxscHRyOworICAgIGlmIChhdXRvKiB0cmFuc2l0aW9ucyA9IG5ld1N0eWxl
LnRyYW5zaXRpb25zKCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2l0
aW9ucy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8mIGJhY2tpbmdBbmltYXRpb24g
PSB0cmFuc2l0aW9ucy0+YW5pbWF0aW9uKGkpOworICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25N
YXRjaGVzUHJvcGVydHkoYmFja2luZ0FuaW1hdGlvbiwgcHJvcGVydHkpKQorICAgICAgICAgICAg
ICAgIG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiA9ICZiYWNraW5nQW5pbWF0aW9uOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gQSBDU1MgVHJhbnNpdGlvbiBtaWdodCBoYXZlIGNvbXBsZXRl
ZCBzaW5jZSB0aGUgbGFzdCB0aW1lIGFuaW1hdGlvbnMgd2VyZSB1cGRhdGVkIHNvIHdlIG11c3QK
KyAgICAvLyB1cGRhdGUgdGhlIHJ1bm5pbmcgYW5kIGNvbXBsZXRlZCB0cmFuc2l0aW9ucyBtZW1i
ZXJzaGlwIGluIHRoYXQgY2FzZS4KKyAgICBpZiAoaXM8Q1NTVHJhbnNpdGlvbj4oYW5pbWF0aW9u
KSAmJiBtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24gJiYgc3R5bGVhYmxlLmhhc1J1bm5pbmdUcmFu
c2l0aW9uRm9yUHJvcGVydHkocHJvcGVydHkpICYmIGFuaW1hdGlvbi0+cGxheVN0YXRlKCkgPT0g
V2ViQW5pbWF0aW9uOjpQbGF5U3RhdGU6OkZpbmlzaGVkKSB7CisgICAgICAgIHN0eWxlYWJsZS5l
bnN1cmVDb21wbGV0ZWRUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS5zZXQocHJvcGVydHksIHN0eWxl
YWJsZS5lbnN1cmVSdW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkudGFrZShwcm9wZXJ0eSkp
OworICAgICAgICBhbmltYXRpb24gPSBudWxscHRyOworICAgIH0KKworICAgIC8vIGh0dHBzOi8v
ZHJhZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNpdGlvbnMtMS8jYmVmb3JlLWNoYW5nZS1zdHlsZQor
ICAgIC8vIERlZmluZSB0aGUgYmVmb3JlLWNoYW5nZSBzdHlsZSBhcyB0aGUgY29tcHV0ZWQgdmFs
dWVzIG9mIGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBlbGVtZW50IGFzIG9mIHRoZSBwcmV2aW91cyBz
dHlsZSBjaGFuZ2UgZXZlbnQsIGV4Y2VwdCB3aXRoCisgICAgLy8gYW55IHN0eWxlcyBkZXJpdmVk
IGZyb20gZGVjbGFyYXRpdmUgYW5pbWF0aW9ucyBzdWNoIGFzIENTUyBUcmFuc2l0aW9ucywgQ1NT
IEFuaW1hdGlvbnMsIGFuZCBTTUlMIEFuaW1hdGlvbnMgdXBkYXRlZCB0byB0aGUgY3VycmVudCB0
aW1lLgorICAgIGF1dG8gYmVmb3JlQ2hhbmdlU3R5bGUgPSBbJl0oKSAtPiBjb25zdCBSZW5kZXJT
dHlsZSB7CisgICAgICAgIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc1JlbGV2YW50KCkp
IHsKKyAgICAgICAgICAgIGF1dG8gYW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShj
dXJyZW50U3R5bGUpOworICAgICAgICAgICAgLy8gSWYgYSB0cmFuc2l0aW9uIGhhcyBub3QgeWV0
IHN0YXJ0ZWQgb3Igc3RhcnRlZCB3aGVuIGFuaW1hdGlvbnMgd2VyZSBsYXN0IHVwZGF0ZWQsIHVz
ZSB0aGUgdGltZWxpbmUgdGltZSBhdCBpdHMgY3JlYXRpb24KKyAgICAgICAgICAgIC8vIGFzIGl0
cyBzdGFydCB0aW1lIHRvIGVuc3VyZSB0aGF0IGl0IHdpbGwgcHJvZHVjZSBhIHN0eWxlIHdpdGgg
cHJvZ3Jlc3MgPiAwLgorICAgICAgICAgICAgYm9vbCBzaG91bGRVc2VUaW1lbGluZVRpbWVBdENy
ZWF0aW9uID0gaXM8Q1NTVHJhbnNpdGlvbj4oYW5pbWF0aW9uKSAmJiAoIWFuaW1hdGlvbi0+c3Rh
cnRUaW1lKCkgfHwgKmFuaW1hdGlvbi0+c3RhcnRUaW1lKCkgPT0gc3R5bGVhYmxlLmVsZW1lbnQu
ZG9jdW1lbnQoKS50aW1lbGluZSgpLmN1cnJlbnRUaW1lKCkpOworICAgICAgICAgICAgYW5pbWF0
aW9uLT5yZXNvbHZlKGFuaW1hdGVkU3R5bGUsIG51bGxwdHIsIHNob3VsZFVzZVRpbWVsaW5lVGlt
ZUF0Q3JlYXRpb24gPyBkb3duY2FzdDxDU1NUcmFuc2l0aW9uPigqYW5pbWF0aW9uKS50aW1lbGlu
ZVRpbWVBdENyZWF0aW9uKCkgOiBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgcmV0dXJuIGFu
aW1hdGVkU3R5bGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBpdCBleGlzdHMsIHVzZSB0
aGUgcmVjb3JkZWQgUmVuZGVyU3R5bGUgZm9yIHRoaXMgZWxlbWVudCBkdXJpbmcgYSBwcmV2aW91
cyBjYWxsIHRvIFN0eWxlOjpUcmVlUmVzb2x2ZXI6OmNyZWF0ZUFuaW1hdGVkRWxlbWVudFVwZGF0
ZSgpLgorICAgICAgICBpZiAoYXV0byogbGFzdFN0eWxlQ2hhbmdlRXZlbnRTdHlsZSA9IHN0eWxl
YWJsZS5sYXN0U3R5bGVDaGFuZ2VFdmVudFN0eWxlKCkpCisgICAgICAgICAgICByZXR1cm4gUmVu
ZGVyU3R5bGU6OmNsb25lKCpsYXN0U3R5bGVDaGFuZ2VFdmVudFN0eWxlKTsKKworICAgICAgICAv
LyBJZiB3ZSBoYXZlbid0IGNvbXB1dGVkIHN0eWxlcyBmcm9tIGFuaW1hdGlvbnMgZm9yIHRoaXMg
ZWxlbWVudCwgdGhlIGJlZm9yZS1jaGFuZ2Ugc3R5bGUgaXMgdGhlIHByZXZpb3VzbHkgcmVzb2x2
ZWQgc3R5bGUgZm9yIHRoaXMgZWxlbWVudC4KKyAgICAgICAgcmV0dXJuIFJlbmRlclN0eWxlOjpj
bG9uZShjdXJyZW50U3R5bGUpOworICAgIH0oKTsKKworICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNz
c3dnLm9yZy9jc3MtdHJhbnNpdGlvbnMtMS8jYWZ0ZXItY2hhbmdlLXN0eWxlCisgICAgLy8gTGlr
ZXdpc2UsIGRlZmluZSB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlIGFzIHRoZSBjb21wdXRlZCB2YWx1
ZXMgb2YgYWxsIHByb3BlcnRpZXMgb24gdGhlIGVsZW1lbnQgYmFzZWQgb24gdGhlIGluZm9ybWF0
aW9uIGtub3duIGF0IHRoZSBzdGFydAorICAgIC8vIG9mIHRoYXQgc3R5bGUgY2hhbmdlIGV2ZW50
LCBidXQgdXNpbmcgdGhlIGNvbXB1dGVkIHZhbHVlcyBvZiB0aGUgYW5pbWF0aW9uLSogcHJvcGVy
dGllcyBmcm9tIHRoZSBiZWZvcmUtY2hhbmdlIHN0eWxlLCBleGNsdWRpbmcgYW55IHN0eWxlcwor
ICAgIC8vIGZyb20gQ1NTIFRyYW5zaXRpb25zIGluIHRoZSBjb21wdXRhdGlvbiwgYW5kIGluaGVy
aXRpbmcgZnJvbSB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlIG9mIHRoZSBwYXJlbnQuIE5vdGUgdGhh
dCB0aGlzIG1lYW5zIHRoZSBhZnRlci1jaGFuZ2UKKyAgICAvLyBzdHlsZSBkb2VzIG5vdCBkaWZm
ZXIgZnJvbSB0aGUgYmVmb3JlLWNoYW5nZSBzdHlsZSBkdWUgdG8gbmV3bHkgY3JlYXRlZCBvciBj
YW5jZWxlZCBDU1MgQW5pbWF0aW9ucy4KKyAgICBhdXRvIGFmdGVyQ2hhbmdlU3R5bGUgPSBbJl0o
KSAtPiBjb25zdCBSZW5kZXJTdHlsZSB7CisgICAgICAgIGlmIChpczxDU1NBbmltYXRpb24+KGFu
aW1hdGlvbikgJiYgYW5pbWF0aW9uLT5pc1JlbGV2YW50KCkpIHsKKyAgICAgICAgICAgIGF1dG8g
YW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShuZXdTdHlsZSk7CisgICAgICAgICAg
ICBhbmltYXRpb24tPnJlc29sdmUoYW5pbWF0ZWRTdHlsZSwgbnVsbHB0cik7CisgICAgICAgICAg
ICByZXR1cm4gYW5pbWF0ZWRTdHlsZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBSZW5k
ZXJTdHlsZTo6Y2xvbmUobmV3U3R5bGUpOworICAgIH0oKTsKKworICAgIGlmICghc3R5bGVhYmxl
Lmhhc1J1bm5pbmdUcmFuc2l0aW9uRm9yUHJvcGVydHkocHJvcGVydHkpCisgICAgICAgICYmICFD
U1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKHByb3BlcnR5LCAmYmVmb3JlQ2hh
bmdlU3R5bGUsICZhZnRlckNoYW5nZVN0eWxlKQorICAgICAgICAmJiBDU1NQcm9wZXJ0eUFuaW1h
dGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wZXJ0eSwgJmJlZm9yZUNoYW5nZVN0
eWxlLCAmYWZ0ZXJDaGFuZ2VTdHlsZSkKKyAgICAgICAgJiYgIXByb3BlcnR5SW5TdHlsZU1hdGNo
ZXNWYWx1ZUZvclRyYW5zaXRpb25Jbk1hcChwcm9wZXJ0eSwgYWZ0ZXJDaGFuZ2VTdHlsZSwgc3R5
bGVhYmxlLmVuc3VyZUNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSgpKQorICAgICAgICAm
JiBtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24gJiYgdHJhbnNpdGlvbkNvbWJpbmVkRHVyYXRpb24o
bWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uKSA+IDApIHsKKyAgICAgICAgLy8gMS4gSWYgYWxsIG9m
IHRoZSBmb2xsb3dpbmcgYXJlIHRydWU6CisgICAgICAgIC8vICAgLSB0aGUgZWxlbWVudCBkb2Vz
IG5vdCBoYXZlIGEgcnVubmluZyB0cmFuc2l0aW9uIGZvciB0aGUgcHJvcGVydHksCisgICAgICAg
IC8vICAgLSB0aGUgYmVmb3JlLWNoYW5nZSBzdHlsZSBpcyBkaWZmZXJlbnQgZnJvbSBhbmQgY2Fu
IGJlIGludGVycG9sYXRlZCB3aXRoIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUgZm9yIHRoYXQgcHJv
cGVydHksCisgICAgICAgIC8vICAgLSB0aGUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgY29tcGxl
dGVkIHRyYW5zaXRpb24gZm9yIHRoZSBwcm9wZXJ0eSBvciB0aGUgZW5kIHZhbHVlIG9mIHRoZSBj
b21wbGV0ZWQgdHJhbnNpdGlvbiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgYWZ0ZXItY2hhbmdlIHN0
eWxlIGZvciB0aGUgcHJvcGVydHksCisgICAgICAgIC8vICAgLSB0aGVyZSBpcyBhIG1hdGNoaW5n
IHRyYW5zaXRpb24tcHJvcGVydHkgdmFsdWUsIGFuZAorICAgICAgICAvLyAgIC0gdGhlIGNvbWJp
bmVkIGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhhbiAwcywKKworICAgICAgICAvLyB0aGVuIGltcGxl
bWVudGF0aW9ucyBtdXN0IHJlbW92ZSB0aGUgY29tcGxldGVkIHRyYW5zaXRpb24gKGlmIHByZXNl
bnQpIGZyb20gdGhlIHNldCBvZiBjb21wbGV0ZWQgdHJhbnNpdGlvbnMKKyAgICAgICAgc3R5bGVh
YmxlLmVuc3VyZUNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSgpLnJlbW92ZShwcm9wZXJ0
eSk7CisKKyAgICAgICAgLy8gYW5kIHN0YXJ0IGEgdHJhbnNpdGlvbiB3aG9zZToKKyAgICAgICAg
Ly8gICAtIHN0YXJ0IHRpbWUgaXMgdGhlIHRpbWUgb2YgdGhlIHN0eWxlIGNoYW5nZSBldmVudCBw
bHVzIHRoZSBtYXRjaGluZyB0cmFuc2l0aW9uIGRlbGF5LAorICAgICAgICAvLyAgIC0gZW5kIHRp
bWUgaXMgdGhlIHN0YXJ0IHRpbWUgcGx1cyB0aGUgbWF0Y2hpbmcgdHJhbnNpdGlvbiBkdXJhdGlv
biwKKyAgICAgICAgLy8gICAtIHN0YXJ0IHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGUgdHJhbnNp
dGlvbmluZyBwcm9wZXJ0eSBpbiB0aGUgYmVmb3JlLWNoYW5nZSBzdHlsZSwKKyAgICAgICAgLy8g
ICAtIGVuZCB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhlIHRyYW5zaXRpb25pbmcgcHJvcGVydHkg
aW4gdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSwKKyAgICAgICAgLy8gICAtIHJldmVyc2luZy1hZGp1
c3RlZCBzdGFydCB2YWx1ZSBpcyB0aGUgc2FtZSBhcyB0aGUgc3RhcnQgdmFsdWUsIGFuZAorICAg
ICAgICAvLyAgIC0gcmV2ZXJzaW5nIHNob3J0ZW5pbmcgZmFjdG9yIGlzIDEuCisgICAgICAgIGF1
dG8gZGVsYXkgPSBTZWNvbmRzKG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbi0+ZGVsYXkoKSk7Cisg
ICAgICAgIGF1dG8gZHVyYXRpb24gPSBTZWNvbmRzKG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbi0+
ZHVyYXRpb24oKSk7CisgICAgICAgIGF1dG8mIHJldmVyc2luZ0FkanVzdGVkU3RhcnRTdHlsZSA9
IGJlZm9yZUNoYW5nZVN0eWxlOworICAgICAgICBhdXRvIHJldmVyc2luZ1Nob3J0ZW5pbmdGYWN0
b3IgPSAxOworICAgICAgICBzdHlsZWFibGUuZW5zdXJlUnVubmluZ1RyYW5zaXRpb25zQnlQcm9w
ZXJ0eSgpLnNldChwcm9wZXJ0eSwgQ1NTVHJhbnNpdGlvbjo6Y3JlYXRlKHN0eWxlYWJsZSwgcHJv
cGVydHksIGdlbmVyYXRpb25UaW1lLCAqbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uLCAmYmVmb3Jl
Q2hhbmdlU3R5bGUsIGFmdGVyQ2hhbmdlU3R5bGUsIGRlbGF5LCBkdXJhdGlvbiwgcmV2ZXJzaW5n
QWRqdXN0ZWRTdGFydFN0eWxlLCByZXZlcnNpbmdTaG9ydGVuaW5nRmFjdG9yKSk7CisgICAgfSBl
bHNlIGlmIChzdHlsZWFibGUuaGFzQ29tcGxldGVkVHJhbnNpdGlvbkZvclByb3BlcnR5KHByb3Bl
cnR5KSAmJiAhcHJvcGVydHlJblN0eWxlTWF0Y2hlc1ZhbHVlRm9yVHJhbnNpdGlvbkluTWFwKHBy
b3BlcnR5LCBhZnRlckNoYW5nZVN0eWxlLCBzdHlsZWFibGUuZW5zdXJlQ29tcGxldGVkVHJhbnNp
dGlvbnNCeVByb3BlcnR5KCkpKSB7CisgICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlIGVs
ZW1lbnQgaGFzIGEgY29tcGxldGVkIHRyYW5zaXRpb24gZm9yIHRoZSBwcm9wZXJ0eSBhbmQgdGhl
IGVuZCB2YWx1ZSBvZiB0aGUgY29tcGxldGVkIHRyYW5zaXRpb24gaXMgZGlmZmVyZW50IGZyb20K
KyAgICAgICAgLy8gICAgdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSBmb3IgdGhlIHByb3BlcnR5LCB0
aGVuIGltcGxlbWVudGF0aW9ucyBtdXN0IHJlbW92ZSB0aGUgY29tcGxldGVkIHRyYW5zaXRpb24g
ZnJvbSB0aGUgc2V0IG9mIGNvbXBsZXRlZCB0cmFuc2l0aW9ucy4KKyAgICAgICAgc3R5bGVhYmxl
LmVuc3VyZUNvbXBsZXRlZFRyYW5zaXRpb25zQnlQcm9wZXJ0eSgpLnJlbW92ZShwcm9wZXJ0eSk7
CisgICAgfQorCisgICAgYm9vbCBoYXNSdW5uaW5nVHJhbnNpdGlvbiA9IHN0eWxlYWJsZS5oYXNS
dW5uaW5nVHJhbnNpdGlvbkZvclByb3BlcnR5KHByb3BlcnR5KTsKKyAgICBpZiAoKGhhc1J1bm5p
bmdUcmFuc2l0aW9uIHx8IHN0eWxlYWJsZS5oYXNDb21wbGV0ZWRUcmFuc2l0aW9uRm9yUHJvcGVy
dHkocHJvcGVydHkpKSAmJiAhbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uKSB7CisgICAgICAgIC8v
IDMuIElmIHRoZSBlbGVtZW50IGhhcyBhIHJ1bm5pbmcgdHJhbnNpdGlvbiBvciBjb21wbGV0ZWQg
dHJhbnNpdGlvbiBmb3IgdGhlIHByb3BlcnR5LCBhbmQgdGhlcmUgaXMgbm90IGEgbWF0Y2hpbmcg
dHJhbnNpdGlvbi1wcm9wZXJ0eQorICAgICAgICAvLyAgICB2YWx1ZSwgdGhlbiBpbXBsZW1lbnRh
dGlvbnMgbXVzdCBjYW5jZWwgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbiBvciByZW1vdmUgdGhlIGNv
bXBsZXRlZCB0cmFuc2l0aW9uIGZyb20gdGhlIHNldCBvZiBjb21wbGV0ZWQgdHJhbnNpdGlvbnMu
CisgICAgICAgIGlmIChoYXNSdW5uaW5nVHJhbnNpdGlvbikKKyAgICAgICAgICAgIHN0eWxlYWJs
ZS5lbnN1cmVSdW5uaW5nVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkudGFrZShwcm9wZXJ0eSktPmNh
bmNlbCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdHlsZWFibGUuZW5zdXJlQ29tcGxl
dGVkVHJhbnNpdGlvbnNCeVByb3BlcnR5KCkucmVtb3ZlKHByb3BlcnR5KTsKKyAgICB9CisKKyAg
ICBpZiAobWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uICYmIHN0eWxlYWJsZS5oYXNSdW5uaW5nVHJh
bnNpdGlvbkZvclByb3BlcnR5KHByb3BlcnR5KSAmJiAhcHJvcGVydHlJblN0eWxlTWF0Y2hlc1Zh
bHVlRm9yVHJhbnNpdGlvbkluTWFwKHByb3BlcnR5LCBhZnRlckNoYW5nZVN0eWxlLCBzdHlsZWFi
bGUuZW5zdXJlUnVubmluZ1RyYW5zaXRpb25zQnlQcm9wZXJ0eSgpKSkgeworICAgICAgICBhdXRv
IHByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbiA9IHN0eWxlYWJsZS5lbnN1cmVSdW5uaW5nVHJh
bnNpdGlvbnNCeVByb3BlcnR5KCkudGFrZShwcm9wZXJ0eSk7CisgICAgICAgIGF1dG8mIHByZXZp
b3VzbHlSdW5uaW5nVHJhbnNpdGlvbkN1cnJlbnRTdHlsZSA9IHByZXZpb3VzbHlSdW5uaW5nVHJh
bnNpdGlvbi0+Y3VycmVudFN0eWxlKCk7CisgICAgICAgIC8vIDQuIElmIHRoZSBlbGVtZW50IGhh
cyBhIHJ1bm5pbmcgdHJhbnNpdGlvbiBmb3IgdGhlIHByb3BlcnR5LCB0aGVyZSBpcyBhIG1hdGNo
aW5nIHRyYW5zaXRpb24tcHJvcGVydHkgdmFsdWUsIGFuZCB0aGUgZW5kIHZhbHVlIG9mIHRoZSBy
dW5uaW5nCisgICAgICAgIC8vICAgIHRyYW5zaXRpb24gaXMgbm90IGVxdWFsIHRvIHRoZSB2YWx1
ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSwgdGhlbjoKKyAgICAg
ICAgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcGVydHksICZw
cmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb25DdXJyZW50U3R5bGUsICZhZnRlckNoYW5nZVN0eWxl
KSB8fCAhQ1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQocHJv
cGVydHksICZjdXJyZW50U3R5bGUsICZhZnRlckNoYW5nZVN0eWxlKSkgeworICAgICAgICAgICAg
Ly8gMS4gSWYgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBydW5uaW5n
IHRyYW5zaXRpb24gaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUg
YWZ0ZXItY2hhbmdlIHN0eWxlLAorICAgICAgICAgICAgLy8gICAgb3IgaWYgdGhlc2UgdHdvIHZh
bHVlcyBjYW5ub3QgYmUgaW50ZXJwb2xhdGVkLCB0aGVuIGltcGxlbWVudGF0aW9ucyBtdXN0IGNh
bmNlbCB0aGUgcnVubmluZyB0cmFuc2l0aW9uLgorICAgICAgICAgICAgcHJldmlvdXNseVJ1bm5p
bmdUcmFuc2l0aW9uLT5jYW5jZWxGcm9tU3R5bGUoKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cmFu
c2l0aW9uQ29tYmluZWREdXJhdGlvbihtYXRjaGluZ0JhY2tpbmdBbmltYXRpb24pIDw9IDAuMCB8
fCAhQ1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQocHJvcGVy
dHksICZwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb25DdXJyZW50U3R5bGUsICZhZnRlckNoYW5n
ZVN0eWxlKSkgeworICAgICAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGUgY29tYmluZWQg
ZHVyYXRpb24gaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDBzLCBvciBpZiB0aGUgY3VycmVudCB2
YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbgorICAgICAgICAg
ICAgLy8gICAgY2Fubm90IGJlIGludGVycG9sYXRlZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgcHJv
cGVydHkgaW4gdGhlIGFmdGVyLWNoYW5nZSBzdHlsZSwgdGhlbiBpbXBsZW1lbnRhdGlvbnMgbXVz
dCBjYW5jZWwgdGhlIHJ1bm5pbmcgdHJhbnNpdGlvbi4KKyAgICAgICAgICAgIHByZXZpb3VzbHlS
dW5uaW5nVHJhbnNpdGlvbi0+Y2FuY2VsRnJvbVN0eWxlKCk7CisgICAgICAgIH0gZWxzZSBpZiAo
Q1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wZXJ0eSwgJnByZXZpb3Vz
bHlSdW5uaW5nVHJhbnNpdGlvbi0+cmV2ZXJzaW5nQWRqdXN0ZWRTdGFydFN0eWxlKCksICZhZnRl
ckNoYW5nZVN0eWxlKSkgeworICAgICAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiB0aGUgcmV2
ZXJzaW5nLWFkanVzdGVkIHN0YXJ0IHZhbHVlIG9mIHRoZSBydW5uaW5nIHRyYW5zaXRpb24gaXMg
dGhlIHNhbWUgYXMgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgYWZ0ZXItY2hhbmdl
CisgICAgICAgICAgICAvLyAgICBzdHlsZSAoc2VlIHRoZSBzZWN0aW9uIG9uIHJldmVyc2luZyBv
ZiB0cmFuc2l0aW9ucyBmb3Igd2h5IHRoZXNlIGNhc2UgZXhpc3RzKSwgaW1wbGVtZW50YXRpb25z
IG11c3QgY2FuY2VsIHRoZSBydW5uaW5nIHRyYW5zaXRpb24KKyAgICAgICAgICAgIHByZXZpb3Vz
bHlSdW5uaW5nVHJhbnNpdGlvbi0+Y2FuY2VsRnJvbVN0eWxlKCk7CisKKyAgICAgICAgICAgIC8v
IGFuZCBzdGFydCBhIG5ldyB0cmFuc2l0aW9uIHdob3NlOgorICAgICAgICAgICAgLy8gICAtIHJl
dmVyc2luZy1hZGp1c3RlZCBzdGFydCB2YWx1ZSBpcyB0aGUgZW5kIHZhbHVlIG9mIHRoZSBydW5u
aW5nIHRyYW5zaXRpb24sCisgICAgICAgICAgICAvLyAgIC0gcmV2ZXJzaW5nIHNob3J0ZW5pbmcg
ZmFjdG9yIGlzIHRoZSBhYnNvbHV0ZSB2YWx1ZSwgY2xhbXBlZCB0byB0aGUgcmFuZ2UgWzAsIDFd
LCBvZiB0aGUgc3VtIG9mOgorICAgICAgICAgICAgLy8gICAgICAgMS4gdGhlIG91dHB1dCBvZiB0
aGUgdGltaW5nIGZ1bmN0aW9uIG9mIHRoZSBvbGQgdHJhbnNpdGlvbiBhdCB0aGUgdGltZSBvZiB0
aGUgc3R5bGUgY2hhbmdlIGV2ZW50LCB0aW1lcyB0aGUgcmV2ZXJzaW5nIHNob3J0ZW5pbmcgZmFj
dG9yIG9mIHRoZSBvbGQgdHJhbnNpdGlvbgorICAgICAgICAgICAgLy8gICAgICAgMi4gMSBtaW51
cyB0aGUgcmV2ZXJzaW5nIHNob3J0ZW5pbmcgZmFjdG9yIG9mIHRoZSBvbGQgdHJhbnNpdGlvbi4K
KyAgICAgICAgICAgIC8vICAgLSBzdGFydCB0aW1lIGlzIHRoZSB0aW1lIG9mIHRoZSBzdHlsZSBj
aGFuZ2UgZXZlbnQgcGx1czoKKyAgICAgICAgICAgIC8vICAgICAgIDEuIGlmIHRoZSBtYXRjaGlu
ZyB0cmFuc2l0aW9uIGRlbGF5IGlzIG5vbm5lZ2F0aXZlLCB0aGUgbWF0Y2hpbmcgdHJhbnNpdGlv
biBkZWxheSwgb3IKKyAgICAgICAgICAgIC8vICAgICAgIDIuIGlmIHRoZSBtYXRjaGluZyB0cmFu
c2l0aW9uIGRlbGF5IGlzIG5lZ2F0aXZlLCB0aGUgcHJvZHVjdCBvZiB0aGUgbmV3IHRyYW5zaXRp
b27igJlzIHJldmVyc2luZyBzaG9ydGVuaW5nIGZhY3RvciBhbmQgdGhlIG1hdGNoaW5nIHRyYW5z
aXRpb24gZGVsYXksCisgICAgICAgICAgICAvLyAgIC0gZW5kIHRpbWUgaXMgdGhlIHN0YXJ0IHRp
bWUgcGx1cyB0aGUgcHJvZHVjdCBvZiB0aGUgbWF0Y2hpbmcgdHJhbnNpdGlvbiBkdXJhdGlvbiBh
bmQgdGhlIG5ldyB0cmFuc2l0aW9u4oCZcyByZXZlcnNpbmcgc2hvcnRlbmluZyBmYWN0b3IsCisg
ICAgICAgICAgICAvLyAgIC0gc3RhcnQgdmFsdWUgaXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhl
IHByb3BlcnR5IGluIHRoZSBydW5uaW5nIHRyYW5zaXRpb24sCisgICAgICAgICAgICAvLyAgIC0g
ZW5kIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGFmdGVyLWNoYW5n
ZSBzdHlsZQorICAgICAgICAgICAgYXV0byYgcmV2ZXJzaW5nQWRqdXN0ZWRTdGFydFN0eWxlID0g
cHJldmlvdXNseVJ1bm5pbmdUcmFuc2l0aW9uLT50YXJnZXRTdHlsZSgpOworICAgICAgICAgICAg
ZG91YmxlIHRyYW5zZm9ybWVkUHJvZ3Jlc3MgPSAxOworICAgICAgICAgICAgaWYgKGF1dG8qIGVm
ZmVjdCA9IHByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbi0+ZWZmZWN0KCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXV0byBjb21wdXRlZFRpbWluZ1Byb2dyZXNzID0gZWZmZWN0LT5nZXRDb21w
dXRlZFRpbWluZygpLnByb2dyZXNzKQorICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFBy
b2dyZXNzID0gKmNvbXB1dGVkVGltaW5nUHJvZ3Jlc3M7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBhdXRvIHJldmVyc2luZ1Nob3J0ZW5pbmdGYWN0b3IgPSBzdGQ6Om1heChzdGQ6Om1pbigo
KHRyYW5zZm9ybWVkUHJvZ3Jlc3MgKiBwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb24tPnJldmVy
c2luZ1Nob3J0ZW5pbmdGYWN0b3IoKSkgKyAoMSAtIHByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlv
bi0+cmV2ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvcigpKSksIDEuMCksIDAuMCk7CisgICAgICAgICAg
ICBhdXRvIGRlbGF5ID0gbWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uLT5kZWxheSgpIDwgMCA/IFNl
Y29uZHMobWF0Y2hpbmdCYWNraW5nQW5pbWF0aW9uLT5kZWxheSgpKSAqIHJldmVyc2luZ1Nob3J0
ZW5pbmdGYWN0b3IgOiBTZWNvbmRzKG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbi0+ZGVsYXkoKSk7
CisgICAgICAgICAgICBhdXRvIGR1cmF0aW9uID0gU2Vjb25kcyhtYXRjaGluZ0JhY2tpbmdBbmlt
YXRpb24tPmR1cmF0aW9uKCkpICogcmV2ZXJzaW5nU2hvcnRlbmluZ0ZhY3RvcjsKKworICAgICAg
ICAgICAgc3R5bGVhYmxlLmVuc3VyZVJ1bm5pbmdUcmFuc2l0aW9uc0J5UHJvcGVydHkoKS5zZXQo
cHJvcGVydHksIENTU1RyYW5zaXRpb246OmNyZWF0ZShzdHlsZWFibGUsIHByb3BlcnR5LCBnZW5l
cmF0aW9uVGltZSwgKm1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbiwgJnByZXZpb3VzbHlSdW5uaW5n
VHJhbnNpdGlvbkN1cnJlbnRTdHlsZSwgYWZ0ZXJDaGFuZ2VTdHlsZSwgZGVsYXksIGR1cmF0aW9u
LCByZXZlcnNpbmdBZGp1c3RlZFN0YXJ0U3R5bGUsIHJldmVyc2luZ1Nob3J0ZW5pbmdGYWN0b3Ip
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIDQuIE90aGVyd2lzZSwgaW1wbGVt
ZW50YXRpb25zIG11c3QgY2FuY2VsIHRoZSBydW5uaW5nIHRyYW5zaXRpb24KKyAgICAgICAgICAg
IHByZXZpb3VzbHlSdW5uaW5nVHJhbnNpdGlvbi0+Y2FuY2VsRnJvbVN0eWxlKCk7CisKKyAgICAg
ICAgICAgIC8vIGFuZCBzdGFydCBhIG5ldyB0cmFuc2l0aW9uIHdob3NlOgorICAgICAgICAgICAg
Ly8gICAtIHN0YXJ0IHRpbWUgaXMgdGhlIHRpbWUgb2YgdGhlIHN0eWxlIGNoYW5nZSBldmVudCBw
bHVzIHRoZSBtYXRjaGluZyB0cmFuc2l0aW9uIGRlbGF5LAorICAgICAgICAgICAgLy8gICAtIGVu
ZCB0aW1lIGlzIHRoZSBzdGFydCB0aW1lIHBsdXMgdGhlIG1hdGNoaW5nIHRyYW5zaXRpb24gZHVy
YXRpb24sCisgICAgICAgICAgICAvLyAgIC0gc3RhcnQgdmFsdWUgaXMgdGhlIGN1cnJlbnQgdmFs
dWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBydW5uaW5nIHRyYW5zaXRpb24sCisgICAgICAgICAg
ICAvLyAgIC0gZW5kIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGFm
dGVyLWNoYW5nZSBzdHlsZSwKKyAgICAgICAgICAgIC8vICAgLSByZXZlcnNpbmctYWRqdXN0ZWQg
c3RhcnQgdmFsdWUgaXMgdGhlIHNhbWUgYXMgdGhlIHN0YXJ0IHZhbHVlLCBhbmQKKyAgICAgICAg
ICAgIC8vICAgLSByZXZlcnNpbmcgc2hvcnRlbmluZyBmYWN0b3IgaXMgMS4KKyAgICAgICAgICAg
IGF1dG8gZGVsYXkgPSBTZWNvbmRzKG1hdGNoaW5nQmFja2luZ0FuaW1hdGlvbi0+ZGVsYXkoKSk7
CisgICAgICAgICAgICBhdXRvIGR1cmF0aW9uID0gU2Vjb25kcyhtYXRjaGluZ0JhY2tpbmdBbmlt
YXRpb24tPmR1cmF0aW9uKCkpOworICAgICAgICAgICAgYXV0byYgcmV2ZXJzaW5nQWRqdXN0ZWRT
dGFydFN0eWxlID0gY3VycmVudFN0eWxlOworICAgICAgICAgICAgYXV0byByZXZlcnNpbmdTaG9y
dGVuaW5nRmFjdG9yID0gMTsKKyAgICAgICAgICAgIHN0eWxlYWJsZS5lbnN1cmVSdW5uaW5nVHJh
bnNpdGlvbnNCeVByb3BlcnR5KCkuc2V0KHByb3BlcnR5LCBDU1NUcmFuc2l0aW9uOjpjcmVhdGUo
c3R5bGVhYmxlLCBwcm9wZXJ0eSwgZ2VuZXJhdGlvblRpbWUsICptYXRjaGluZ0JhY2tpbmdBbmlt
YXRpb24sICZwcmV2aW91c2x5UnVubmluZ1RyYW5zaXRpb25DdXJyZW50U3R5bGUsIGFmdGVyQ2hh
bmdlU3R5bGUsIGRlbGF5LCBkdXJhdGlvbiwgcmV2ZXJzaW5nQWRqdXN0ZWRTdGFydFN0eWxlLCBy
ZXZlcnNpbmdTaG9ydGVuaW5nRmFjdG9yKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
U3R5bGVhYmxlOjp1cGRhdGVDU1NUcmFuc2l0aW9ucyhjb25zdCBSZW5kZXJTdHlsZSYgY3VycmVu
dFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpIGNvbnN0Cit7CisgICAgLy8gSW4g
Y2FzZSB0aGlzIGVsZW1lbnQgaXMgbmV3bHkgZ2V0dGluZyBhICJkaXNwbGF5OiBub25lIiB3ZSBu
ZWVkIHRvIGNhbmNlbCBhbGwgb2YgaXRzIHRyYW5zaXRpb25zIGFuZCBkaXNyZWdhcmQgbmV3IG9u
ZXMuCisgICAgaWYgKGN1cnJlbnRTdHlsZS5oYXNUcmFuc2l0aW9ucygpICYmIGN1cnJlbnRTdHls
ZS5kaXNwbGF5KCkgIT0gRGlzcGxheVR5cGU6Ok5vbmUgJiYgbmV3U3R5bGUuZGlzcGxheSgpID09
IERpc3BsYXlUeXBlOjpOb25lKSB7CisgICAgICAgIGlmIChoYXNSdW5uaW5nVHJhbnNpdGlvbnMo
KSkgeworICAgICAgICAgICAgYXV0byBydW5uaW5nVHJhbnNpdGlvbnMgPSBlbnN1cmVSdW5uaW5n
VHJhbnNpdGlvbnNCeVByb3BlcnR5KCk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNz
c1RyYW5zaXRpb25zQnlDU1NQcm9wZXJ0eUlETWFwSXRlbSA6IHJ1bm5pbmdUcmFuc2l0aW9ucykK
KyAgICAgICAgICAgICAgICBjc3NUcmFuc2l0aW9uc0J5Q1NTUHJvcGVydHlJRE1hcEl0ZW0udmFs
dWUtPmNhbmNlbEZyb21TdHlsZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBTZWN0aW9uIDMgIlN0YXJ0aW5nIG9mIHRyYW5zaXRpb25zIiBmcm9tIHRoZSBD
U1MgVHJhbnNpdGlvbnMgTGV2ZWwgMSBzcGVjaWZpY2F0aW9uLgorICAgIC8vIGh0dHBzOi8vZHJh
ZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNpdGlvbnMtMS8jc3RhcnRpbmcKKworICAgIGF1dG8gZ2Vu
ZXJhdGlvblRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKworICAgIC8vIEZpcnN0LCBsZXQn
cyBjb21waWxlIHRoZSBsaXN0IG9mIGFsbCBDU1MgcHJvcGVydGllcyBmb3VuZCBpbiB0aGUgY3Vy
cmVudCBzdHlsZSBhbmQgdGhlIGFmdGVyLWNoYW5nZSBzdHlsZS4KKyAgICBib29sIHRyYW5zaXRp
b25Qcm9wZXJ0aWVzQ29udGFpbkFsbCA9IGZhbHNlOworICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4gdHJhbnNpdGlvblByb3BlcnRpZXM7CisgICAgY29tcGlsZVRyYW5zaXRpb25Qcm9wZXJ0aWVz
SW5TdHlsZShjdXJyZW50U3R5bGUsIHRyYW5zaXRpb25Qcm9wZXJ0aWVzLCB0cmFuc2l0aW9uUHJv
cGVydGllc0NvbnRhaW5BbGwpOworICAgIGNvbXBpbGVUcmFuc2l0aW9uUHJvcGVydGllc0luU3R5
bGUobmV3U3R5bGUsIHRyYW5zaXRpb25Qcm9wZXJ0aWVzLCB0cmFuc2l0aW9uUHJvcGVydGllc0Nv
bnRhaW5BbGwpOworCisgICAgaWYgKHRyYW5zaXRpb25Qcm9wZXJ0aWVzQ29udGFpbkFsbCkgewor
ICAgICAgICBhdXRvIG51bWJlck9mUHJvcGVydGllcyA9IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpn
ZXROdW1Qcm9wZXJ0aWVzKCk7CisgICAgICAgIGZvciAoaW50IHByb3BlcnR5SW5kZXggPSAwOyBw
cm9wZXJ0eUluZGV4IDwgbnVtYmVyT2ZQcm9wZXJ0aWVzOyArK3Byb3BlcnR5SW5kZXgpIHsKKyAg
ICAgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzU2hvcnRoYW5kOworICAgICAgICAgICAgYXV0byBw
cm9wZXJ0eSA9IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpnZXRQcm9wZXJ0eUF0SW5kZXgocHJvcGVy
dHlJbmRleCwgaXNTaG9ydGhhbmQpOworICAgICAgICAgICAgaWYgKGlzU2hvcnRoYW5kICYmICpp
c1Nob3J0aGFuZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHVwZGF0
ZUNTU1RyYW5zaXRpb25zRm9yU3R5bGVhYmxlQW5kUHJvcGVydHkoKnRoaXMsIHByb3BlcnR5LCBj
dXJyZW50U3R5bGUsIG5ld1N0eWxlLCBnZW5lcmF0aW9uVGltZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoYXV0byBwcm9wZXJ0eSA6IHRyYW5zaXRpb25Q
cm9wZXJ0aWVzKQorICAgICAgICB1cGRhdGVDU1NUcmFuc2l0aW9uc0ZvclN0eWxlYWJsZUFuZFBy
b3BlcnR5KCp0aGlzLCBwcm9wZXJ0eSwgY3VycmVudFN0eWxlLCBuZXdTdHlsZSwgZ2VuZXJhdGlv
blRpbWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZWFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlYWJs
ZS5oCmluZGV4IDUyNmFkNDllMWVlOWEyMjY5YTJhZTdkNmY2NDc3NjJjZDMyNDk3ODUuLjE3ZmQ2
MTc5NGRjMzNjYTU0MmI4MmQ4Y2JjYzc1NTVjMWJkZmIxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlYWJsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
YWJsZS5oCkBAIC0zMSwxMSArMzEsMTMgQEAKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJXZWJBbmltYXRpb25U
eXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEtleWZyYW1lRWZmZWN0U3RhY2s7CiBjbGFzcyBSZW5kZXJTdHlsZTsKK2NsYXNz
IFdlYkFuaW1hdGlvbjsKIAogc3RydWN0IFN0eWxlYWJsZSB7CiAgICAgRWxlbWVudCYgZWxlbWVu
dDsKQEAgLTE0Nyw2ICsxNDksMTggQEAgc3RydWN0IFN0eWxlYWJsZSB7CiAgICAgICAgIGVsZW1l
bnQuc2V0TGFzdFN0eWxlQ2hhbmdlRXZlbnRTdHlsZShwc2V1ZG9JZCwgV1RGTW92ZShzdHlsZSkp
OwogICAgIH0KIAorICAgIHZvaWQgZWxlbWVudFdhc1JlbW92ZWQoKSBjb25zdDsKKworICAgIHZv
aWQgd2lsbENoYW5nZVJlbmRlcmVyKCkgY29uc3Q7CisgICAgdm9pZCBjYW5jZWxEZWNsYXJhdGl2
ZUFuaW1hdGlvbnMoKSBjb25zdDsKKworICAgIHZvaWQgYW5pbWF0aW9uV2FzQWRkZWQoV2ViQW5p
bWF0aW9uJikgY29uc3Q7CisgICAgdm9pZCBhbmltYXRpb25XYXNSZW1vdmVkKFdlYkFuaW1hdGlv
biYpIGNvbnN0OworCisgICAgdm9pZCByZW1vdmVEZWNsYXJhdGl2ZUFuaW1hdGlvbkZyb21MaXN0
c0Zvck93bmluZ0VsZW1lbnQoV2ViQW5pbWF0aW9uJikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0
ZUNTU0FuaW1hdGlvbnMoY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUmIGFmdGVyQ2hhbmdlU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRFbGVt
ZW50U3R5bGUpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlQ1NTVHJhbnNpdGlvbnMoY29uc3QgUmVu
ZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlKSBjb25z
dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="444565"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>