<?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>200707</bug_id>
          
          <creation_ts>2019-08-14 02:29:39 -0700</creation_ts>
          <short_desc>[GTK][WPE] Move TextureMapperAnimation to the nicosia namespace as NicosiaAnimation</short_desc>
          <delta_ts>2019-08-16 07:37:27 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Miguel Gomez">magomez</reporter>
          <assigned_to name="Miguel Gomez">magomez</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1561106</commentid>
    <comment_count>0</comment_count>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2019-08-14 02:29:39 -0700</bug_when>
    <thetext>TextureMapperAnimation&apos;s functionality is not really tied. I can be used (an will be used) by non TextureMapper implementations, so move it to a proper place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561110</commentid>
    <comment_count>1</comment_count>
      <attachid>376253</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2019-08-14 02:37:14 -0700</bug_when>
    <thetext>Created attachment 376253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561142</commentid>
    <comment_count>2</comment_count>
      <attachid>376261</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2019-08-14 06:25:11 -0700</bug_when>
    <thetext>Created attachment 376261
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561997</commentid>
    <comment_count>3</comment_count>
      <attachid>376487</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2019-08-16 02:39:02 -0700</bug_when>
    <thetext>Created attachment 376487
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562004</commentid>
    <comment_count>4</comment_count>
      <attachid>376487</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2019-08-16 04:09:18 -0700</bug_when>
    <thetext>Comment on attachment 376487
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:42
&gt;  class PaintingEngine;
&gt; +class Animations;

Nit: alphabetic ordering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562015</commentid>
    <comment_count>5</comment_count>
      <attachid>376495</attachid>
    <who name="Miguel Gomez">magomez</who>
    <bug_when>2019-08-16 06:03:23 -0700</bug_when>
    <thetext>Created attachment 376495
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562028</commentid>
    <comment_count>6</comment_count>
      <attachid>376495</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-16 07:37:26 -0700</bug_when>
    <thetext>Comment on attachment 376495
Patch

Clearing flags on attachment: 376495

Committed r248769: &lt;https://trac.webkit.org/changeset/248769&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562029</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-16 07:37:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376253</attachid>
            <date>2019-08-14 02:37:14 -0700</date>
            <delta_ts>2019-08-14 06:25:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200707-20190814113713.patch</filename>
            <type>text/plain</type>
            <size>52159</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDFkODQxNTNjZDUyZmE0
OTY1ZDFkZjM1Zjc5ZTM2ZGQwMDQzM2NlMS4uYzZmZDUyZGEzM2UzNzhlYjAwZGJiMGZlYzRjMWI5
OGFhYTg5ODZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE5LTA4LTE0ICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBNb3Zl
IFRleHR1cmVNYXBwZXJBbmltYXRpb24gdG8gdGhlIG5pY29zaWEgbmFtZXNwYWNlIGFzIE5pY29z
aWFBbmltYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMDcwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiB0byB0aGUgbmljb3NpYSBuYW1lc3BhY2Ug
YXMgTmljb3NpYUFuaW1hdGlvbiwgc28gaXQgY2FuIGJlIHVzZWQKKyAgICAgICAgYnkgaW1wbGVt
ZW50YXRpb25zIHRoYXQgZG9uJ3QgdXNlIHRoZSBUZXh0dXJlTWFwcGVyLgorCisgICAgICAgICog
cGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL05pY29zaWFBbmltYXRpb24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwLgor
ICAgICAgICAoTmljb3NpYTo6dGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZSk6CisgICAg
ICAgIChOaWNvc2lhOjpOaWNvc2lhQW5pbWF0aW9uOjpOaWNvc2lhQW5pbWF0aW9uKToKKyAgICAg
ICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRpb246OmFwcGx5KToKKyAgICAgICAgKE5pY29zaWE6
Ok5pY29zaWFBbmltYXRpb246OmFwcGx5S2VlcGluZ0ludGVybmFsU3RhdGUpOgorICAgICAgICAo
Tmljb3NpYTo6Tmljb3NpYUFuaW1hdGlvbjo6cGF1c2UpOgorICAgICAgICAoTmljb3NpYTo6Tmlj
b3NpYUFuaW1hdGlvbjo6cmVzdW1lKToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRp
b246OmNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFB
bmltYXRpb246OmlzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmlt
YXRpb246OmFwcGx5SW50ZXJuYWwpOgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUFuaW1hdGlv
bnM6OmFkZCk6CisgICAgICAgIChOaWNvc2lhOjpOaWNvc2lhQW5pbWF0aW9uczo6cmVtb3ZlKToK
KyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRpb25zOjpwYXVzZSk6CisgICAgICAgIChO
aWNvc2lhOjpOaWNvc2lhQW5pbWF0aW9uczo6c3VzcGVuZCk6CisgICAgICAgIChOaWNvc2lhOjpO
aWNvc2lhQW5pbWF0aW9uczo6cmVzdW1lKToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmlt
YXRpb25zOjphcHBseSk6CisgICAgICAgIChOaWNvc2lhOjpOaWNvc2lhQW5pbWF0aW9uczo6YXBw
bHlLZWVwaW5nSW50ZXJuYWxTdGF0ZSk6CisgICAgICAgIChOaWNvc2lhOjpOaWNvc2lhQW5pbWF0
aW9uczo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZSBjb25zdCk6CisgICAgICAgIChOaWNvc2lh
OjpOaWNvc2lhQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1hdGlvbnMgY29uc3QpOgorICAgICAg
ICAoTmljb3NpYTo6Tmljb3NpYUFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUFuaW1hdGlvbi5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJBbmltYXRpb24uaC4KKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRp
b246Ok5pY29zaWFBbmltYXRpb24pOgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUFuaW1hdGlv
bjo6a2V5ZnJhbWVzIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRpb246
OnRpbWluZ0Z1bmN0aW9uIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRp
b25zOjphbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRp
b25zOjphbmltYXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05p
Y29zaWFQbGF0Zm9ybUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c3luY0FuaW1hdGlvbnMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg6CisKIDIwMTktMDgtMTMgIFNhbSBXZWlu
aWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgV1BFIGJ1aWxkLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKaW5kZXggY2U5YWI5NmY1
MmI4OTY5YzkxMTA5ZWYwNjg1NWM1MDgzOWE1MjMyMy4uNGQwNDAyZWRiYmMwNmQ4NzExM2Q2MmJi
Zjc3YzYyNjEyMzI3MTNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4
dHVyZU1hcHBlci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFw
cGVyLmNtYWtlCkBAIC0zLDExICszLDExIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9J
TkNMVURFX0RJUkVDVE9SSUVTCiApCiAKIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAg
IHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUFuaW1hdGlvbi5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZVBvb2wuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzQ29udGV4dDNEVGV4dHVyZU1hcHBlci5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5jcHAKQEAgLTE2LDExICsx
NiwxMSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICkKIAogbGlzdChBUFBFTkQgV2Vi
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9OaWNvc2lhQW5pbWF0aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0
bWFwVGV4dHVyZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhQW5p
bWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmlj
b3NpYUFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M2NTBkYWE0NGVhNGQyMDRhMDBlODUzNTU5
MTM0YTM0YzZmYjlhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUFuaW1hdGlvbi5jcHAKQEAgLTAsMCArMSwzOTYgQEAK
Ky8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTmljb3NpYUFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSAiTGF5b3V0U2l6
ZS5oIgorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitzdGF0aWMgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKEZpbHRlck9wZXJhdGlv
biogZnJvbU9wLCBGaWx0ZXJPcGVyYXRpb24mIHRvT3AsIGRvdWJsZSBwcm9ncmVzcywgY29uc3Qg
RmxvYXRTaXplJiwgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkKK3sKKyAgICByZXR1
cm4gdG9PcC5ibGVuZChmcm9tT3AsIHByb2dyZXNzLCBibGVuZFRvUGFzc3Rocm91Z2gpOworfQor
CitzdGF0aWMgRmlsdGVyT3BlcmF0aW9ucyBhcHBseUZpbHRlckFuaW1hdGlvbihjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgZG91YmxlIHBy
b2dyZXNzLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUpCit7CisgICAgLy8gRmlyc3QgZnJhbWUg
b2YgYW4gYW5pbWF0aW9uLgorICAgIGlmICghcHJvZ3Jlc3MpCisgICAgICAgIHJldHVybiBmcm9t
OworCisgICAgLy8gTGFzdCBmcmFtZSBvZiBhbiBhbmltYXRpb24uCisgICAgaWYgKHByb2dyZXNz
ID09IDEpCisgICAgICAgIHJldHVybiB0bzsKKworICAgIGlmICghZnJvbS5pc0VtcHR5KCkgJiYg
IXRvLmlzRW1wdHkoKSAmJiAhZnJvbS5vcGVyYXRpb25zTWF0Y2godG8pKQorICAgICAgICByZXR1
cm4gdG87CisKKyAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKKworICAgIHNpemVfdCBmcm9t
U2l6ZSA9IGZyb20ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXplX3QgdG9TaXplID0gdG8u
b3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0ZDo6bWF4KGZyb21TaXpl
LCB0b1NpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAg
ICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwgZnJvbVNpemUpID8gZnJv
bS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiBudWxscHRyOworICAgICAgICBSZWZQdHI8RmlsdGVy
T3BlcmF0aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygpW2ldLmdldCgp
IDogbnVsbHB0cjsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9wID0g
dG9PcCA/IGJsZW5kRnVuYyhmcm9tT3AuZ2V0KCksICp0b09wLCBwcm9ncmVzcywgYm94U2l6ZSkg
OiAoZnJvbU9wID8gYmxlbmRGdW5jKG51bGxwdHIsICpmcm9tT3AsIHByb2dyZXNzLCBib3hTaXpl
LCB0cnVlKSA6IG51bGxwdHIpOworICAgICAgICBpZiAoYmxlbmRlZE9wKQorICAgICAgICAgICAg
cmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoYmxlbmRlZE9wKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBhdXRvIGlkZW50aXR5T3AgPSBQYXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKCk7CisgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPiAwLjUpCisgICAgICAgICAgICAg
ICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQodG9PcCA/IHRvT3AgOiBXVEZNb3ZlKGlkZW50
aXR5T3ApKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQub3BlcmF0
aW9ucygpLmFwcGVuZChmcm9tT3AgPyBmcm9tT3AgOiBXVEZNb3ZlKGlkZW50aXR5T3ApKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBib29sIHNo
b3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZShBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24sIGludCBsb29wQ291bnQpCit7CisgICAgcmV0dXJuIChkaXJlY3Rpb24gPT0gQW5p
bWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUgJiYgbG9vcENvdW50ICYgMSkKKyAg
ICAgICAgfHwgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVy
bmF0ZVJldmVyc2UgJiYgIShsb29wQ291bnQgJiAxKSkKKyAgICAgICAgfHwgZGlyZWN0aW9uID09
IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZTsKK30KKworc3RhdGljIGRvdWJs
ZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUoZG91YmxlIHJ1bm5pbmdUaW1lLCBkb3VibGUgZHVy
YXRpb24sIEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgZG91YmxlIGl0
ZXJhdGlvbkNvdW50KQoreworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiAwOwor
CisgICAgY29uc3QgaW50IGxvb3BDb3VudCA9IHJ1bm5pbmdUaW1lIC8gZHVyYXRpb247CisgICAg
Y29uc3QgZG91YmxlIGxhc3RGdWxsTG9vcCA9IGR1cmF0aW9uICogZG91YmxlKGxvb3BDb3VudCk7
CisgICAgY29uc3QgZG91YmxlIHJlbWFpbmRlciA9IHJ1bm5pbmdUaW1lIC0gbGFzdEZ1bGxMb29w
OworICAgIC8vIElnbm9yZSByZW1haW5kZXIgd2hlbiB3ZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2Yg
YW5pbWF0aW9uLgorICAgIGNvbnN0IGRvdWJsZSBub3JtYWxpemVkID0gKGxvb3BDb3VudCA9PSBp
dGVyYXRpb25Db3VudCkgPyAxLjAgOiAocmVtYWluZGVyIC8gZHVyYXRpb24pOworCisgICAgcmV0
dXJuIHNob3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZShkaXJlY3Rpb24sIGxvb3BDb3VudCkgPyAx
IC0gbm9ybWFsaXplZCA6IG5vcm1hbGl6ZWQ7Cit9CisKK3N0YXRpYyBkb3VibGUgbm9ybWFsaXpl
ZEFuaW1hdGlvblZhbHVlRm9yRmlsbHNGb3J3YXJkcyhkb3VibGUgaXRlcmF0aW9uQ291bnQsIEFu
aW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBpZiAoZGlyZWN0
aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uTm9ybWFsKQorICAgICAgICByZXR1
cm4gMTsKKyAgICBpZiAoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9u
UmV2ZXJzZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHNob3VsZFJldmVyc2VBbmlt
YXRpb25WYWx1ZShkaXJlY3Rpb24sIGl0ZXJhdGlvbkNvdW50KSA/IDEgOiAwOworfQorCitzdGF0
aWMgZmxvYXQgYXBwbHlPcGFjaXR5QW5pbWF0aW9uKGZsb2F0IGZyb21PcGFjaXR5LCBmbG9hdCB0
b09wYWNpdHksIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNp
YWwgY2FzZSB0aGUgZWRnZSB2YWx1ZXMgKDAgYW5kIDEpLgorICAgIGlmIChwcm9ncmVzcyA9PSAx
LjApCisgICAgICAgIHJldHVybiB0b09wYWNpdHk7CisKKyAgICBpZiAoIXByb2dyZXNzKQorICAg
ICAgICByZXR1cm4gZnJvbU9wYWNpdHk7CisKKyAgICByZXR1cm4gZnJvbU9wYWNpdHkgKyBwcm9n
cmVzcyAqICh0b09wYWNpdHkgLSBmcm9tT3BhY2l0eSk7Cit9CisKK3N0YXRpYyBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dyZXNz
LCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUsIGJvb2wgbGlzdHNNYXRjaCkKK3sKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisKKyAgICAvLyBGaXJzdCBmcmFtZSBvZiBhbiBhbmlt
YXRpb24uCisgICAgaWYgKCFwcm9ncmVzcykgeworICAgICAgICBmcm9tLmFwcGx5KGJveFNpemUs
IG1hdHJpeCk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgfQorCisgICAgLy8gTGFzdCBm
cmFtZSBvZiBhbiBhbmltYXRpb24uCisgICAgaWYgKHByb2dyZXNzID09IDEpIHsKKyAgICAgICAg
dG8uYXBwbHkoYm94U2l6ZSwgbWF0cml4KTsKKyAgICAgICAgcmV0dXJuIG1hdHJpeDsKKyAgICB9
CisKKyAgICAvLyBJZiB3ZSBoYXZlIGluY29tcGF0aWJsZSBvcGVyYXRpb24gbGlzdHMsIHdlIGJs
ZW5kIHRoZSByZXN1bHRpbmcgbWF0cmljZXMuCisgICAgaWYgKCFsaXN0c01hdGNoKSB7CisgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb21NYXRyaXg7CisgICAgICAgIHRvLmFwcGx5KGJv
eFNpemUsIG1hdHJpeCk7CisgICAgICAgIGZyb20uYXBwbHkoYm94U2l6ZSwgZnJvbU1hdHJpeCk7
CisgICAgICAgIG1hdHJpeC5ibGVuZChmcm9tTWF0cml4LCBwcm9ncmVzcyk7CisgICAgICAgIHJl
dHVybiBtYXRyaXg7CisgICAgfQorCisgICAgLy8gQW5pbWF0aW9uIHRvICItd2Via2l0LXRyYW5z
Zm9ybTogbm9uZSIuCisgICAgaWYgKCF0by5zaXplKCkpIHsKKyAgICAgICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyBibGVuZGVkKGZyb20pOworICAgICAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IGJs
ZW5kZWQub3BlcmF0aW9ucygpKQorICAgICAgICAgICAgb3BlcmF0aW9uLT5ibGVuZChudWxscHRy
LCBwcm9ncmVzcywgdHJ1ZSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7CisgICAgICAgIHJldHVy
biBtYXRyaXg7CisgICAgfQorCisgICAgLy8gQW5pbWF0aW9uIGZyb20gIi13ZWJraXQtdHJhbnNm
b3JtOiBub25lIi4KKyAgICBpZiAoIWZyb20uc2l6ZSgpKSB7CisgICAgICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbnMgYmxlbmRlZCh0byk7CisgICAgICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogYmxl
bmRlZC5vcGVyYXRpb25zKCkpCisgICAgICAgICAgICBvcGVyYXRpb24tPmJsZW5kKG51bGxwdHIs
IDEgLSBwcm9ncmVzcywgdHJ1ZSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7CisgICAgICAgIHJl
dHVybiBtYXRyaXg7CisgICAgfQorCisgICAgLy8gTm9ybWFsIGFuaW1hdGlvbiB3aXRoIGEgbWF0
Y2hpbmcgb3BlcmF0aW9uIGxpc3QuCisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZGVkKHRv
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsZW5kZWQub3BlcmF0aW9ucygpLnNpemUo
KTsgKytpKQorICAgICAgICBibGVuZGVkLm9wZXJhdGlvbnMoKVtpXS0+YmxlbmQoZnJvbS5hdChp
KSwgcHJvZ3Jlc3MsICFmcm9tLmF0KGkpKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKKyAgICBy
ZXR1cm4gbWF0cml4OworfQorCitzdGF0aWMgY29uc3QgVGltaW5nRnVuY3Rpb24mIHRpbWluZ0Z1
bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUoY29uc3QgQW5pbWF0aW9uVmFsdWUmIGFuaW1hdGlvblZh
bHVlLCBjb25zdCBOaWNvc2lhQW5pbWF0aW9uJiBhbmltYXRpb24pCit7CisgICAgaWYgKGFuaW1h
dGlvblZhbHVlLnRpbWluZ0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiAqYW5pbWF0aW9uVmFs
dWUudGltaW5nRnVuY3Rpb24oKTsKKyAgICBpZiAoYW5pbWF0aW9uLnRpbWluZ0Z1bmN0aW9uKCkp
CisgICAgICAgIHJldHVybiAqYW5pbWF0aW9uLnRpbWluZ0Z1bmN0aW9uKCk7CisgICAgcmV0dXJu
IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmRlZmF1bHRUaW1pbmdGdW5jdGlvbigpOworfQor
CitOaWNvc2lhQW5pbWF0aW9uOjpOaWNvc2lhQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcywgY29uc3QgRmxvYXRTaXplJiBib3hT
aXplLCBjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgYm9vbCBsaXN0c01hdGNoLCBNb25vdG9u
aWNUaW1lIHN0YXJ0VGltZSwgU2Vjb25kcyBwYXVzZVRpbWUsIEFuaW1hdGlvblN0YXRlIHN0YXRl
KQorICAgIDogbV9uYW1lKG5hbWUuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkgPyBuYW1l
IDogbmFtZS5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fa2V5ZnJhbWVzKGtleWZyYW1lcykKKyAg
ICAsIG1fYm94U2l6ZShib3hTaXplKQorICAgICwgbV90aW1pbmdGdW5jdGlvbihhbmltYXRpb24u
dGltaW5nRnVuY3Rpb24oKS0+Y2xvbmUoKSkKKyAgICAsIG1faXRlcmF0aW9uQ291bnQoYW5pbWF0
aW9uLml0ZXJhdGlvbkNvdW50KCkpCisgICAgLCBtX2R1cmF0aW9uKGFuaW1hdGlvbi5kdXJhdGlv
bigpKQorICAgICwgbV9kaXJlY3Rpb24oYW5pbWF0aW9uLmRpcmVjdGlvbigpKQorICAgICwgbV9m
aWxsc0ZvcndhcmRzKGFuaW1hdGlvbi5maWxsc0ZvcndhcmRzKCkpCisgICAgLCBtX2xpc3RzTWF0
Y2gobGlzdHNNYXRjaCkKKyAgICAsIG1fc3RhcnRUaW1lKHN0YXJ0VGltZSkKKyAgICAsIG1fcGF1
c2VUaW1lKHBhdXNlVGltZSkKKyAgICAsIG1fdG90YWxSdW5uaW5nVGltZSgwX3MpCisgICAgLCBt
X2xhc3RSZWZyZXNoZWRUaW1lKG1fc3RhcnRUaW1lKQorICAgICwgbV9zdGF0ZShzdGF0ZSkKK3sK
K30KKworTmljb3NpYUFuaW1hdGlvbjo6Tmljb3NpYUFuaW1hdGlvbihjb25zdCBOaWNvc2lhQW5p
bWF0aW9uJiBvdGhlcikKKyAgICA6IG1fbmFtZShvdGhlci5tX25hbWUuaXNTYWZlVG9TZW5kVG9B
bm90aGVyVGhyZWFkKCkgPyBvdGhlci5tX25hbWUgOiBvdGhlci5tX25hbWUuaXNvbGF0ZWRDb3B5
KCkpCisgICAgLCBtX2tleWZyYW1lcyhvdGhlci5tX2tleWZyYW1lcykKKyAgICAsIG1fYm94U2l6
ZShvdGhlci5tX2JveFNpemUpCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKG90aGVyLm1fdGltaW5n
RnVuY3Rpb24tPmNsb25lKCkpCisgICAgLCBtX2l0ZXJhdGlvbkNvdW50KG90aGVyLm1faXRlcmF0
aW9uQ291bnQpCisgICAgLCBtX2R1cmF0aW9uKG90aGVyLm1fZHVyYXRpb24pCisgICAgLCBtX2Rp
cmVjdGlvbihvdGhlci5tX2RpcmVjdGlvbikKKyAgICAsIG1fZmlsbHNGb3J3YXJkcyhvdGhlci5t
X2ZpbGxzRm9yd2FyZHMpCisgICAgLCBtX2xpc3RzTWF0Y2gob3RoZXIubV9saXN0c01hdGNoKQor
ICAgICwgbV9zdGFydFRpbWUob3RoZXIubV9zdGFydFRpbWUpCisgICAgLCBtX3BhdXNlVGltZShv
dGhlci5tX3BhdXNlVGltZSkKKyAgICAsIG1fdG90YWxSdW5uaW5nVGltZShvdGhlci5tX3RvdGFs
UnVubmluZ1RpbWUpCisgICAgLCBtX2xhc3RSZWZyZXNoZWRUaW1lKG90aGVyLm1fbGFzdFJlZnJl
c2hlZFRpbWUpCisgICAgLCBtX3N0YXRlKG90aGVyLm1fc3RhdGUpCit7Cit9CisKK3ZvaWQgTmlj
b3NpYUFuaW1hdGlvbjo6YXBwbHkoQXBwbGljYXRpb25SZXN1bHQmIGFwcGxpY2F0aW9uUmVzdWx0
cywgTW9ub3RvbmljVGltZSB0aW1lKQoreworICAgIGlmICghaXNBY3RpdmUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgU2Vjb25kcyB0b3RhbFJ1bm5pbmdUaW1lID0gY29tcHV0ZVRvdGFsUnVu
bmluZ1RpbWUodGltZSk7CisgICAgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRB
bmltYXRpb25WYWx1ZSh0b3RhbFJ1bm5pbmdUaW1lLnNlY29uZHMoKSwgbV9kdXJhdGlvbiwgbV9k
aXJlY3Rpb24sIG1faXRlcmF0aW9uQ291bnQpOworCisgICAgaWYgKG1faXRlcmF0aW9uQ291bnQg
IT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlICYmIHRvdGFsUnVubmluZ1RpbWUu
c2Vjb25kcygpID49IG1fZHVyYXRpb24gKiBtX2l0ZXJhdGlvbkNvdW50KSB7CisgICAgICAgIG1f
c3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3RvcHBlZDsKKyAgICAgICAgbV9wYXVzZVRpbWUgPSAw
X3M7CisgICAgICAgIGlmIChtX2ZpbGxzRm9yd2FyZHMpCisgICAgICAgICAgICBub3JtYWxpemVk
VmFsdWUgPSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JGaWxsc0ZvcndhcmRzKG1faXRlcmF0
aW9uQ291bnQsIG1fZGlyZWN0aW9uKTsKKyAgICB9CisKKyAgICBhcHBsaWNhdGlvblJlc3VsdHMu
aGFzUnVubmluZ0FuaW1hdGlvbnMgfD0gKG1fc3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBsYXlp
bmcpOworCisgICAgaWYgKCFub3JtYWxpemVkVmFsdWUpIHsKKyAgICAgICAgYXBwbHlJbnRlcm5h
bChhcHBsaWNhdGlvblJlc3VsdHMsIG1fa2V5ZnJhbWVzLmF0KDApLCBtX2tleWZyYW1lcy5hdCgx
KSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobm9ybWFsaXplZFZhbHVl
ID09IDEuMCkgeworICAgICAgICBhcHBseUludGVybmFsKGFwcGxpY2F0aW9uUmVzdWx0cywgbV9r
ZXlmcmFtZXMuYXQobV9rZXlmcmFtZXMuc2l6ZSgpIC0gMiksIG1fa2V5ZnJhbWVzLmF0KG1fa2V5
ZnJhbWVzLnNpemUoKSAtIDEpLCAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
bV9rZXlmcmFtZXMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAgYXV0byYgdGltaW5nRnVuY3Rpb24g
PSB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKG1fa2V5ZnJhbWVzLmF0KDApLCAqdGhp
cyk7CisgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IHRpbWluZ0Z1bmN0aW9uLnRyYW5zZm9ybVRp
bWUobm9ybWFsaXplZFZhbHVlLCBtX2R1cmF0aW9uKTsKKyAgICAgICAgYXBwbHlJbnRlcm5hbChh
cHBsaWNhdGlvblJlc3VsdHMsIG1fa2V5ZnJhbWVzLmF0KDApLCBtX2tleWZyYW1lcy5hdCgxKSwg
bm9ybWFsaXplZFZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgIGNv
bnN0IEFuaW1hdGlvblZhbHVlJiBmcm9tID0gbV9rZXlmcmFtZXMuYXQoaSk7CisgICAgICAgIGNv
bnN0IEFuaW1hdGlvblZhbHVlJiB0byA9IG1fa2V5ZnJhbWVzLmF0KGkgKyAxKTsKKyAgICAgICAg
aWYgKGZyb20ua2V5VGltZSgpID4gbm9ybWFsaXplZFZhbHVlIHx8IHRvLmtleVRpbWUoKSA8IG5v
cm1hbGl6ZWRWYWx1ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG5vcm1hbGl6
ZWRWYWx1ZSA9IChub3JtYWxpemVkVmFsdWUgLSBmcm9tLmtleVRpbWUoKSkgLyAodG8ua2V5VGlt
ZSgpIC0gZnJvbS5rZXlUaW1lKCkpOworICAgICAgICBhdXRvJiB0aW1pbmdGdW5jdGlvbiA9IHRp
bWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUoZnJvbSwgKnRoaXMpOworICAgICAgICBub3Jt
YWxpemVkVmFsdWUgPSB0aW1pbmdGdW5jdGlvbi50cmFuc2Zvcm1UaW1lKG5vcm1hbGl6ZWRWYWx1
ZSwgbV9kdXJhdGlvbik7CisgICAgICAgIGFwcGx5SW50ZXJuYWwoYXBwbGljYXRpb25SZXN1bHRz
LCBmcm9tLCB0bywgbm9ybWFsaXplZFZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
Cit2b2lkIE5pY29zaWFBbmltYXRpb246OmFwcGx5S2VlcGluZ0ludGVybmFsU3RhdGUoQXBwbGlj
YXRpb25SZXN1bHQmIGFwcGxpY2F0aW9uUmVzdWx0cywgTW9ub3RvbmljVGltZSB0aW1lKQorewor
ICAgIE1vbm90b25pY1RpbWUgb2xkTGFzdFJlZnJlc2hlZFRpbWUgPSBtX2xhc3RSZWZyZXNoZWRU
aW1lOworICAgIFNlY29uZHMgb2xkVG90YWxSdW5uaW5nVGltZSA9IG1fdG90YWxSdW5uaW5nVGlt
ZTsKKyAgICBBbmltYXRpb25TdGF0ZSBvbGRTdGF0ZSA9IG1fc3RhdGU7CisKKyAgICBhcHBseShh
cHBsaWNhdGlvblJlc3VsdHMsIHRpbWUpOworCisgICAgbV9sYXN0UmVmcmVzaGVkVGltZSA9IG9s
ZExhc3RSZWZyZXNoZWRUaW1lOworICAgIG1fdG90YWxSdW5uaW5nVGltZSA9IG9sZFRvdGFsUnVu
bmluZ1RpbWU7CisgICAgbV9zdGF0ZSA9IG9sZFN0YXRlOworfQorCit2b2lkIE5pY29zaWFBbmlt
YXRpb246OnBhdXNlKFNlY29uZHMgdGltZSkKK3sKKyAgICBtX3N0YXRlID0gQW5pbWF0aW9uU3Rh
dGU6OlBhdXNlZDsKKyAgICBtX3BhdXNlVGltZSA9IHRpbWU7Cit9CisKK3ZvaWQgTmljb3NpYUFu
aW1hdGlvbjo6cmVzdW1lKCkKK3sKKyAgICBtX3N0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBsYXlp
bmc7CisgICAgLy8gRklYTUU6IFRoaXMgc2VlbXMgd3JvbmcuIG1fdG90YWxSdW5uaW5nVGltZSBp
cyBjbGVhcmVkLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODMxMTMKKyAgICBtX3BhdXNlVGltZSA9IDBfczsKKyAgICBtX3RvdGFsUnVubmluZ1RpbWUg
PSBtX3BhdXNlVGltZTsKKyAgICBtX2xhc3RSZWZyZXNoZWRUaW1lID0gTW9ub3RvbmljVGltZTo6
bm93KCk7Cit9CisKK1NlY29uZHMgTmljb3NpYUFuaW1hdGlvbjo6Y29tcHV0ZVRvdGFsUnVubmlu
Z1RpbWUoTW9ub3RvbmljVGltZSB0aW1lKQoreworICAgIGlmIChtX3N0YXRlID09IEFuaW1hdGlv
blN0YXRlOjpQYXVzZWQpCisgICAgICAgIHJldHVybiBtX3BhdXNlVGltZTsKKworICAgIE1vbm90
b25pY1RpbWUgb2xkTGFzdFJlZnJlc2hlZFRpbWUgPSBtX2xhc3RSZWZyZXNoZWRUaW1lOworICAg
IG1fbGFzdFJlZnJlc2hlZFRpbWUgPSB0aW1lOworICAgIG1fdG90YWxSdW5uaW5nVGltZSArPSBt
X2xhc3RSZWZyZXNoZWRUaW1lIC0gb2xkTGFzdFJlZnJlc2hlZFRpbWU7CisgICAgcmV0dXJuIG1f
dG90YWxSdW5uaW5nVGltZTsKK30KKworYm9vbCBOaWNvc2lhQW5pbWF0aW9uOjppc0FjdGl2ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGUgIT0gQW5pbWF0aW9uU3RhdGU6OlN0b3BwZWQg
fHwgbV9maWxsc0ZvcndhcmRzOworfQorCit2b2lkIE5pY29zaWFBbmltYXRpb246OmFwcGx5SW50
ZXJuYWwoQXBwbGljYXRpb25SZXN1bHQmIGFwcGxpY2F0aW9uUmVzdWx0cywgY29uc3QgQW5pbWF0
aW9uVmFsdWUmIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlJiB0bywgZmxvYXQgcHJvZ3Jlc3Mp
Cit7CisgICAgc3dpdGNoIChtX2tleWZyYW1lcy5wcm9wZXJ0eSgpKSB7CisgICAgY2FzZSBBbmlt
YXRlZFByb3BlcnR5VHJhbnNmb3JtOgorICAgICAgICBhcHBsaWNhdGlvblJlc3VsdHMudHJhbnNm
b3JtID0gYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3Jt
QW5pbWF0aW9uVmFsdWUmPihmcm9tKS52YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zv
cm1BbmltYXRpb25WYWx1ZSY+KHRvKS52YWx1ZSgpLCBwcm9ncmVzcywgbV9ib3hTaXplLCBtX2xp
c3RzTWF0Y2gpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3Bh
Y2l0eToKKyAgICAgICAgYXBwbGljYXRpb25SZXN1bHRzLm9wYWNpdHkgPSBhcHBseU9wYWNpdHlB
bmltYXRpb24oKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUmPihmcm9tKS52
YWx1ZSgpKSwgKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUmPih0bykudmFs
dWUoKSksIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQW5pbWF0ZWRQcm9w
ZXJ0eUZpbHRlcjoKKyAgICAgICAgYXBwbGljYXRpb25SZXN1bHRzLmZpbHRlcnMgPSBhcHBseUZp
bHRlckFuaW1hdGlvbihzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KGZy
b20pLnZhbHVlKCksIHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlJj4odG8p
LnZhbHVlKCksIHByb2dyZXNzLCBtX2JveFNpemUpOworICAgICAgICByZXR1cm47CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIE5p
Y29zaWFBbmltYXRpb25zOjphZGQoY29uc3QgTmljb3NpYUFuaW1hdGlvbiYgYW5pbWF0aW9uKQor
eworICAgIC8vIFJlbW92ZSB0aGUgb2xkIHN0YXRlIGlmIHdlIGFyZSByZXN1bWluZyBhIHBhdXNl
ZCBhbmltYXRpb24uCisgICAgcmVtb3ZlKGFuaW1hdGlvbi5uYW1lKCksIGFuaW1hdGlvbi5rZXlm
cmFtZXMoKS5wcm9wZXJ0eSgpKTsKKworICAgIG1fYW5pbWF0aW9ucy5hcHBlbmQoYW5pbWF0aW9u
KTsKK30KKwordm9pZCBOaWNvc2lhQW5pbWF0aW9uczo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBtX2FuaW1hdGlvbnMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZuYW1lXSAoY29uc3Qg
Tmljb3NpYUFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7CisgICAgICAgIHJldHVybiBhbmltYXRpb24u
bmFtZSgpID09IG5hbWU7CisgICAgfSk7Cit9CisKK3ZvaWQgTmljb3NpYUFuaW1hdGlvbnM6OnJl
bW92ZShjb25zdCBTdHJpbmcmIG5hbWUsIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSkKK3sK
KyAgICBtX2FuaW1hdGlvbnMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZuYW1lLCBwcm9wZXJ0eV0gKGNv
bnN0IE5pY29zaWFBbmltYXRpb24mIGFuaW1hdGlvbikgeworICAgICAgICByZXR1cm4gYW5pbWF0
aW9uLm5hbWUoKSA9PSBuYW1lICYmIGFuaW1hdGlvbi5rZXlmcmFtZXMoKS5wcm9wZXJ0eSgpID09
IHByb3BlcnR5OworICAgIH0pOworfQorCit2b2lkIE5pY29zaWFBbmltYXRpb25zOjpwYXVzZShj
b25zdCBTdHJpbmcmIG5hbWUsIFNlY29uZHMgb2Zmc2V0KQoreworICAgIGZvciAoYXV0byYgYW5p
bWF0aW9uIDogbV9hbmltYXRpb25zKSB7CisgICAgICAgIGlmIChhbmltYXRpb24ubmFtZSgpID09
IG5hbWUpCisgICAgICAgICAgICBhbmltYXRpb24ucGF1c2Uob2Zmc2V0KTsKKyAgICB9Cit9CisK
K3ZvaWQgTmljb3NpYUFuaW1hdGlvbnM6OnN1c3BlbmQoTW9ub3RvbmljVGltZSB0aW1lKQorewor
ICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIHdyb25nLiBgcGF1c2VgIHRha2VzIHRpbWUgb2Zmc2V0
IChTZWNvbmRzKSwgbm90IE1vbm90b25pY1RpbWUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MzExMgorICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDog
bV9hbmltYXRpb25zKQorICAgICAgICBhbmltYXRpb24ucGF1c2UodGltZS5zZWNvbmRzU2luY2VF
cG9jaCgpKTsKK30KKwordm9pZCBOaWNvc2lhQW5pbWF0aW9uczo6cmVzdW1lKCkKK3sKKyAgICBm
b3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykKKyAgICAgICAgYW5pbWF0aW9uLnJl
c3VtZSgpOworfQorCit2b2lkIE5pY29zaWFBbmltYXRpb25zOjphcHBseShOaWNvc2lhQW5pbWF0
aW9uOjpBcHBsaWNhdGlvblJlc3VsdCYgYXBwbGljYXRpb25SZXN1bHRzLCBNb25vdG9uaWNUaW1l
IHRpbWUpCit7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnMpCisgICAg
ICAgIGFuaW1hdGlvbi5hcHBseShhcHBsaWNhdGlvblJlc3VsdHMsIHRpbWUpOworfQorCit2b2lk
IE5pY29zaWFBbmltYXRpb25zOjphcHBseUtlZXBpbmdJbnRlcm5hbFN0YXRlKE5pY29zaWFBbmlt
YXRpb246OkFwcGxpY2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIE1vbm90b25pY1Rp
bWUgdGltZSkKK3sKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykKKyAg
ICAgICAgYW5pbWF0aW9uLmFwcGx5S2VlcGluZ0ludGVybmFsU3RhdGUoYXBwbGljYXRpb25SZXN1
bHRzLCB0aW1lKTsKK30KKworYm9vbCBOaWNvc2lhQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5pbWF0
aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4g
c3RkOjphbnlfb2YobV9hbmltYXRpb25zLmJlZ2luKCksIG1fYW5pbWF0aW9ucy5lbmQoKSwKKyAg
ICAgICAgWyZ0eXBlXShjb25zdCBOaWNvc2lhQW5pbWF0aW9uJiBhbmltYXRpb24pIHsKKyAgICAg
ICAgICAgIHJldHVybiBhbmltYXRpb24uaXNBY3RpdmUoKSAmJiBhbmltYXRpb24ua2V5ZnJhbWVz
KCkucHJvcGVydHkoKSA9PSB0eXBlOworICAgICAgICB9KTsKK30KKworYm9vbCBOaWNvc2lhQW5p
bWF0aW9uczo6aGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6
OmFueV9vZihtX2FuaW1hdGlvbnMuYmVnaW4oKSwgbV9hbmltYXRpb25zLmVuZCgpLAorICAgICAg
ICBbXShjb25zdCBOaWNvc2lhQW5pbWF0aW9uJiBhbmltYXRpb24pIHsKKyAgICAgICAgICAgIHJl
dHVybiBhbmltYXRpb24uc3RhdGUoKSA9PSBOaWNvc2lhQW5pbWF0aW9uOjpBbmltYXRpb25TdGF0
ZTo6UGxheWluZzsKKyAgICAgICAgfSk7Cit9CisKK05pY29zaWFBbmltYXRpb25zIE5pY29zaWFB
bmltYXRpb25zOjpnZXRBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBOaWNvc2lhQW5p
bWF0aW9ucyBhY3RpdmU7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnMp
IHsKKyAgICAgICAgaWYgKGFuaW1hdGlvbi5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgYWN0aXZl
LmFkZChhbmltYXRpb24pOworICAgIH0KKyAgICByZXR1cm4gYWN0aXZlOworfQorCit9IC8vIG5h
bWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlODBmNWJi
MWVjMTgyMGViMzhkYzIwNzk2Y2IwOTFmNWFiMTMxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRpb24uaApA
QCAtMCwwICsxLDEwNSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKK30KKworbmFtZXNwYWNlIE5p
Y29zaWEgeworCitjbGFzcyBOaWNvc2lhQW5pbWF0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNs
YXNzIEFuaW1hdGlvblN0YXRlIHsgUGxheWluZywgUGF1c2VkLCBTdG9wcGVkIH07CisKKyAgICBz
dHJ1Y3QgQXBwbGljYXRpb25SZXN1bHQgeworICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpUcmFu
c2Zvcm1hdGlvbk1hdHJpeD4gdHJhbnNmb3JtOworICAgICAgICBPcHRpb25hbDxkb3VibGU+IG9w
YWNpdHk7CisgICAgICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+IGZpbHRl
cnM7CisgICAgICAgIGJvb2wgaGFzUnVubmluZ0FuaW1hdGlvbnMgeyBmYWxzZSB9OworICAgIH07
CisKKyAgICBOaWNvc2lhQW5pbWF0aW9uKCkKKyAgICAgICAgOiBtX2tleWZyYW1lcyhXZWJDb3Jl
OjpBbmltYXRlZFByb3BlcnR5SW52YWxpZCkKKyAgICB7IH0KKyAgICBOaWNvc2lhQW5pbWF0aW9u
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0JiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiwgY29uc3QgV2ViQ29yZTo6QW5pbWF0aW9uJiwgYm9vbCwgTW9u
b3RvbmljVGltZSwgU2Vjb25kcywgQW5pbWF0aW9uU3RhdGUpOworICAgIFdFQkNPUkVfRVhQT1JU
IE5pY29zaWFBbmltYXRpb24oY29uc3QgTmljb3NpYUFuaW1hdGlvbiYpOworCisgICAgdm9pZCBh
cHBseShBcHBsaWNhdGlvblJlc3VsdCYsIE1vbm90b25pY1RpbWUpOworICAgIHZvaWQgYXBwbHlL
ZWVwaW5nSW50ZXJuYWxTdGF0ZShBcHBsaWNhdGlvblJlc3VsdCYsIE1vbm90b25pY1RpbWUpOwor
ICAgIHZvaWQgcGF1c2UoU2Vjb25kcyk7CisgICAgdm9pZCByZXN1bWUoKTsKKyAgICBib29sIGlz
QWN0aXZlKCkgY29uc3Q7CisKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KKyAgICBjb25zdCBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJh
bWVzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXM7IH0KKyAgICBBbmltYXRpb25TdGF0ZSBz
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBXZWJDb3JlOjpUaW1pbmdGdW5j
dGlvbiogdGltaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpbWluZ0Z1bmN0aW9uLmdl
dCgpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBhcHBseUludGVybmFsKEFwcGxpY2F0aW9uUmVz
dWx0JiwgY29uc3QgV2ViQ29yZTo6QW5pbWF0aW9uVmFsdWUmIGZyb20sIGNvbnN0IFdlYkNvcmU6
OkFuaW1hdGlvblZhbHVlJiB0bywgZmxvYXQgcHJvZ3Jlc3MpOworICAgIFNlY29uZHMgY29tcHV0
ZVRvdGFsUnVubmluZ1RpbWUoTW9ub3RvbmljVGltZSk7CisKKyAgICBTdHJpbmcgbV9uYW1lOwor
ICAgIFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0IG1fa2V5ZnJhbWVzOworICAgIFdlYkNvcmU6
OkZsb2F0U2l6ZSBtX2JveFNpemU7CisgICAgUmVmUHRyPFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9u
PiBtX3RpbWluZ0Z1bmN0aW9uOworICAgIGRvdWJsZSBtX2l0ZXJhdGlvbkNvdW50OworICAgIGRv
dWJsZSBtX2R1cmF0aW9uOworICAgIFdlYkNvcmU6OkFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0
aW9uIG1fZGlyZWN0aW9uOworICAgIGJvb2wgbV9maWxsc0ZvcndhcmRzOworICAgIGJvb2wgbV9s
aXN0c01hdGNoOworICAgIE1vbm90b25pY1RpbWUgbV9zdGFydFRpbWU7CisgICAgU2Vjb25kcyBt
X3BhdXNlVGltZTsKKyAgICBTZWNvbmRzIG1fdG90YWxSdW5uaW5nVGltZTsKKyAgICBNb25vdG9u
aWNUaW1lIG1fbGFzdFJlZnJlc2hlZFRpbWU7CisgICAgQW5pbWF0aW9uU3RhdGUgbV9zdGF0ZTsK
K307CisKK2NsYXNzIE5pY29zaWFBbmltYXRpb25zIHsKK3B1YmxpYzoKKyAgICBOaWNvc2lhQW5p
bWF0aW9ucygpID0gZGVmYXVsdDsKKworICAgIHZvaWQgYWRkKGNvbnN0IE5pY29zaWFBbmltYXRp
b24mKTsKKyAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZvaWQgcmVt
b3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgV2ViQ29yZTo6QW5pbWF0ZWRQcm9wZXJ0eUlEKTsKKyAg
ICB2b2lkIHBhdXNlKGNvbnN0IFN0cmluZyYsIFNlY29uZHMpOworICAgIHZvaWQgc3VzcGVuZChN
b25vdG9uaWNUaW1lKTsKKyAgICB2b2lkIHJlc3VtZSgpOworCisgICAgdm9pZCBhcHBseShOaWNv
c2lhQW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3VsdCYsIE1vbm90b25pY1RpbWUpOworICAgIHZv
aWQgYXBwbHlLZWVwaW5nSW50ZXJuYWxTdGF0ZShOaWNvc2lhQW5pbWF0aW9uOjpBcHBsaWNhdGlv
blJlc3VsdCYsIE1vbm90b25pY1RpbWUpOworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmltYXRpb25zLmlzRW1wdHkoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9hbmltYXRpb25zLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxOaWNvc2lh
QW5pbWF0aW9uPiYgYW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uczsgfQor
ICAgIFZlY3RvcjxOaWNvc2lhQW5pbWF0aW9uPiYgYW5pbWF0aW9ucygpIHsgcmV0dXJuIG1fYW5p
bWF0aW9uczsgfQorCisgICAgYm9vbCBoYXNSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0OworICAg
IGJvb2wgaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShXZWJDb3JlOjpBbmltYXRlZFByb3BlcnR5
SUQgdHlwZSkgY29uc3Q7CisgICAgTmljb3NpYUFuaW1hdGlvbnMgZ2V0QWN0aXZlQW5pbWF0aW9u
cygpIGNvbnN0OworCitwcml2YXRlOgorICAgIFZlY3RvcjxOaWNvc2lhQW5pbWF0aW9uPiBtX2Fu
aW1hdGlvbnM7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL05pY29zaWFQbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQbGF0Zm9ybUxheWVyLmgKaW5kZXggMTFj
NjA1OTg2NjczM2U3ZGM3NWY4OTJiYmYzOGZkMmNiMGUyMzNiMC4uYWY5ZjMwNTJiMGQ5MTQzNDBm
MzkwZDQwNTJkOGM2MzQzMmI5MzQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1MYXllci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBsYXRmb3JtTGF5ZXIuaApA
QCAtMzUsOCArMzUsOCBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgogI2luY2x1ZGUgIk5pY29zaWFBbmltYXRlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgor
I2luY2x1ZGUgIk5pY29zaWFBbmltYXRpb24uaCIKICNpbmNsdWRlICJOaWNvc2lhU2NlbmVJbnRl
Z3JhdGlvbi5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJBbmltYXRpb24uaCIKICNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CkBAIC0xNzEsNyArMTcxLDcgQEAgcHVibGljOgogICAgICAgICBX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CiAgICAgICAgIC8vIEZJWE1FOiBEZXNw
aXRlIHRoZSBuYW1lLCB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5vdAogICAgICAgICAvLyBUZXh0
dXJlTWFwcGVyLXNwZWNpZmljLiBTaG91bGQgYmUgcmVuYW1lZCB3aGVuIG5lY2Vzc2FyeS4KLSAg
ICAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgYW5pbWF0aW9uczsKKyAgICAg
ICAgTmljb3NpYUFuaW1hdGlvbnMgYW5pbWF0aW9uczsKIAogICAgICAgICBWZWN0b3I8UmVmUHRy
PENvbXBvc2l0aW9uTGF5ZXI+PiBjaGlsZHJlbjsKICAgICAgICAgUmVmUHRyPENvbXBvc2l0aW9u
TGF5ZXI+IHJlcGxpY2E7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNw
cAppbmRleCBlYWRmYmEwZjZjNjc4Njg2NmU4MjQ4MWQ5MmUzMjZjNzY4ZmJkNWY2Li5mZmRlMGRl
NzQxYzg0YWU1NGZkZmE1ODExYmVmMDRhNmNiZDYzZjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyRmFjdG9yeS5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIgor
I2luY2x1ZGUgIk5pY29zaWFBbmltYXRpb24uaCIKIAogI2lmICFVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCiAKQEAgLTU3Miw3ICs1NzIsNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdAogICAg
ICAgICBsaXN0c01hdGNoID0gdmFsaWRhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlTGlzdCwg
aGFzQmlnUm90YXRpb24pID49IDA7CiAKICAgICBjb25zdCBNb25vdG9uaWNUaW1lIGN1cnJlbnRU
aW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgbV9hbmltYXRpb25zLmFkZChUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uKGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgKmFuaW0s
IGxpc3RzTWF0Y2gsIGN1cnJlbnRUaW1lIC0gU2Vjb25kcyh0aW1lT2Zmc2V0KSwgMF9zLCBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6UGxheWluZykpOworICAgIG1fYW5p
bWF0aW9ucy5hZGQoTmljb3NpYTo6Tmljb3NpYUFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1
ZUxpc3QsIGJveFNpemUsICphbmltLCBsaXN0c01hdGNoLCBjdXJyZW50VGltZSAtIFNlY29uZHMo
dGltZU9mZnNldCksIDBfcywgTmljb3NpYTo6Tmljb3NpYUFuaW1hdGlvbjo6QW5pbWF0aW9uU3Rh
dGU6OlBsYXlpbmcpKTsKICAgICAvLyBtX2FuaW1hdGlvblN0YXJ0VGltZSBpcyB0aGUgdGltZSBv
ZiB0aGUgZmlyc3QgcmVhbCBmcmFtZSBvZiBhbmltYXRpb24sIG5vdyBvciBkZWxheWVkIGJ5IGEg
bmVnYXRpdmUgb2Zmc2V0LgogICAgIGlmIChTZWNvbmRzKHRpbWVPZmZzZXQpID4gMF9zKQogICAg
ICAgICBtX2FuaW1hdGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuaAppbmRleCA5ODAwNDFlZWQ5MThjYzcwZTY5NWUyMTVjY2Mw
NDg3ZGMxNzdiMzc3Li5lYjRhNWQwMDQ4ZTNkYWVhNzg4Nzk3ODkxZmY1YzlhZjNiNTlhYzZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtMTYyLDcgKzE2Miw3
IEBAIHByaXZhdGU6CiAKICAgICBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogbV9jb250ZW50
c0xheWVyOwogICAgIEZsb2F0UmVjdCBtX25lZWRzRGlzcGxheVJlY3Q7Ci0gICAgVGV4dHVyZU1h
cHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOworICAgIE5pY29zaWE6Ok5pY29zaWFBbmltYXRp
b25zIG1fYW5pbWF0aW9uczsKICAgICBNb25vdG9uaWNUaW1lIG1fYW5pbWF0aW9uU3RhcnRUaW1l
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlZTU0OWNhYmUyMWE1ZjAwZThlYjcwYTEwY2U0NTkxZDU4OTg1ZjM4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDM5MCArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAx
MiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJBbmltYXRpb24uaCIKLQotI2luY2x1ZGUgIkxheW91dFNpemUuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1zdGF0aWMgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKEZp
bHRlck9wZXJhdGlvbiogZnJvbU9wLCBGaWx0ZXJPcGVyYXRpb24mIHRvT3AsIGRvdWJsZSBwcm9n
cmVzcywgY29uc3QgRmxvYXRTaXplJiwgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkK
LXsKLSAgICByZXR1cm4gdG9PcC5ibGVuZChmcm9tT3AsIHByb2dyZXNzLCBibGVuZFRvUGFzc3Ro
cm91Z2gpOwotfQotCi1zdGF0aWMgRmlsdGVyT3BlcmF0aW9ucyBhcHBseUZpbHRlckFuaW1hdGlv
bihjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0
bywgZG91YmxlIHByb2dyZXNzLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUpCi17Ci0gICAgLy8g
Rmlyc3QgZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgotICAgIGlmICghcHJvZ3Jlc3MpCi0gICAgICAg
IHJldHVybiBmcm9tOwotCi0gICAgLy8gTGFzdCBmcmFtZSBvZiBhbiBhbmltYXRpb24uCi0gICAg
aWYgKHByb2dyZXNzID09IDEpCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIGlmICghZnJvbS5p
c0VtcHR5KCkgJiYgIXRvLmlzRW1wdHkoKSAmJiAhZnJvbS5vcGVyYXRpb25zTWF0Y2godG8pKQot
ICAgICAgICByZXR1cm4gdG87Ci0KLSAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKLQotICAg
IHNpemVfdCBmcm9tU2l6ZSA9IGZyb20ub3BlcmF0aW9ucygpLnNpemUoKTsKLSAgICBzaXplX3Qg
dG9TaXplID0gdG8ub3BlcmF0aW9ucygpLnNpemUoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0ZDo6
bWF4KGZyb21TaXplLCB0b1NpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwgZnJv
bVNpemUpID8gZnJvbS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiBudWxscHRyOwotICAgICAgICBS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9u
cygpW2ldLmdldCgpIDogbnVsbHB0cjsKLSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4g
YmxlbmRlZE9wID0gdG9PcCA/IGJsZW5kRnVuYyhmcm9tT3AuZ2V0KCksICp0b09wLCBwcm9ncmVz
cywgYm94U2l6ZSkgOiAoZnJvbU9wID8gYmxlbmRGdW5jKG51bGxwdHIsICpmcm9tT3AsIHByb2dy
ZXNzLCBib3hTaXplLCB0cnVlKSA6IG51bGxwdHIpOwotICAgICAgICBpZiAoYmxlbmRlZE9wKQot
ICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoYmxlbmRlZE9wKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIGlkZW50aXR5T3AgPSBQYXNzdGhyb3VnaEZpbHRl
ck9wZXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPiAwLjUpCi0g
ICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQodG9PcCA/IHRvT3AgOiBX
VEZNb3ZlKGlkZW50aXR5T3ApKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBy
ZXN1bHQub3BlcmF0aW9ucygpLmFwcGVuZChmcm9tT3AgPyBmcm9tT3AgOiBXVEZNb3ZlKGlkZW50
aXR5T3ApKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0
YXRpYyBib29sIHNob3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZShBbmltYXRpb246OkFuaW1hdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24sIGludCBsb29wQ291bnQpCi17Ci0gICAgcmV0dXJuIChkaXJl
Y3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGUgJiYgbG9vcENv
dW50ICYgMSkKLSAgICAgICAgfHwgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvbkFsdGVybmF0ZVJldmVyc2UgJiYgIShsb29wQ291bnQgJiAxKSkKLSAgICAgICAgfHwg
ZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZTsKLX0KLQot
c3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUoZG91YmxlIHJ1bm5pbmdUaW1l
LCBkb3VibGUgZHVyYXRpb24sIEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
biwgZG91YmxlIGl0ZXJhdGlvbkNvdW50KQotewotICAgIGlmICghZHVyYXRpb24pCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgY29uc3QgaW50IGxvb3BDb3VudCA9IHJ1bm5pbmdUaW1lIC8gZHVy
YXRpb247Ci0gICAgY29uc3QgZG91YmxlIGxhc3RGdWxsTG9vcCA9IGR1cmF0aW9uICogZG91Ymxl
KGxvb3BDb3VudCk7Ci0gICAgY29uc3QgZG91YmxlIHJlbWFpbmRlciA9IHJ1bm5pbmdUaW1lIC0g
bGFzdEZ1bGxMb29wOwotICAgIC8vIElnbm9yZSByZW1haW5kZXIgd2hlbiB3ZSd2ZSByZWFjaGVk
IHRoZSBlbmQgb2YgYW5pbWF0aW9uLgotICAgIGNvbnN0IGRvdWJsZSBub3JtYWxpemVkID0gKGxv
b3BDb3VudCA9PSBpdGVyYXRpb25Db3VudCkgPyAxLjAgOiAocmVtYWluZGVyIC8gZHVyYXRpb24p
OwotCi0gICAgcmV0dXJuIHNob3VsZFJldmVyc2VBbmltYXRpb25WYWx1ZShkaXJlY3Rpb24sIGxv
b3BDb3VudCkgPyAxIC0gbm9ybWFsaXplZCA6IG5vcm1hbGl6ZWQ7Ci19Ci0KLXN0YXRpYyBkb3Vi
bGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yRmlsbHNGb3J3YXJkcyhkb3VibGUgaXRlcmF0
aW9uQ291bnQsIEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAg
ICBpZiAoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uTm9ybWFsKQot
ICAgICAgICByZXR1cm4gMTsKLSAgICBpZiAoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0
aW9uRGlyZWN0aW9uUmV2ZXJzZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHNob3Vs
ZFJldmVyc2VBbmltYXRpb25WYWx1ZShkaXJlY3Rpb24sIGl0ZXJhdGlvbkNvdW50KSA/IDEgOiAw
OwotfQotCi1zdGF0aWMgZmxvYXQgYXBwbHlPcGFjaXR5QW5pbWF0aW9uKGZsb2F0IGZyb21PcGFj
aXR5LCBmbG9hdCB0b09wYWNpdHksIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICAvLyBPcHRpbWl6
YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2YWx1ZXMgKDAgYW5kIDEpLgotICAgIGlmIChw
cm9ncmVzcyA9PSAxLjApCi0gICAgICAgIHJldHVybiB0b09wYWNpdHk7Ci0KLSAgICBpZiAoIXBy
b2dyZXNzKQotICAgICAgICByZXR1cm4gZnJvbU9wYWNpdHk7Ci0KLSAgICByZXR1cm4gZnJvbU9w
YWNpdHkgKyBwcm9ncmVzcyAqICh0b09wYWNpdHkgLSBmcm9tT3BhY2l0eSk7Ci19Ci0KLXN0YXRp
YyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0bywgZG91
YmxlIHByb2dyZXNzLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUsIGJvb2wgbGlzdHNNYXRjaCkK
LXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7Ci0KLSAgICAvLyBGaXJzdCBmcmFt
ZSBvZiBhbiBhbmltYXRpb24uCi0gICAgaWYgKCFwcm9ncmVzcykgewotICAgICAgICBmcm9tLmFw
cGx5KGJveFNpemUsIG1hdHJpeCk7Ci0gICAgICAgIHJldHVybiBtYXRyaXg7Ci0gICAgfQotCi0g
ICAgLy8gTGFzdCBmcmFtZSBvZiBhbiBhbmltYXRpb24uCi0gICAgaWYgKHByb2dyZXNzID09IDEp
IHsKLSAgICAgICAgdG8uYXBwbHkoYm94U2l6ZSwgbWF0cml4KTsKLSAgICAgICAgcmV0dXJuIG1h
dHJpeDsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGluY29tcGF0aWJsZSBvcGVyYXRpb24g
bGlzdHMsIHdlIGJsZW5kIHRoZSByZXN1bHRpbmcgbWF0cmljZXMuCi0gICAgaWYgKCFsaXN0c01h
dGNoKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb21NYXRyaXg7Ci0gICAgICAg
IHRvLmFwcGx5KGJveFNpemUsIG1hdHJpeCk7Ci0gICAgICAgIGZyb20uYXBwbHkoYm94U2l6ZSwg
ZnJvbU1hdHJpeCk7Ci0gICAgICAgIG1hdHJpeC5ibGVuZChmcm9tTWF0cml4LCBwcm9ncmVzcyk7
Ci0gICAgICAgIHJldHVybiBtYXRyaXg7Ci0gICAgfQotCi0gICAgLy8gQW5pbWF0aW9uIHRvICIt
d2Via2l0LXRyYW5zZm9ybTogbm9uZSIuCi0gICAgaWYgKCF0by5zaXplKCkpIHsKLSAgICAgICAg
VHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZGVkKGZyb20pOwotICAgICAgICBmb3IgKGF1dG8mIG9w
ZXJhdGlvbiA6IGJsZW5kZWQub3BlcmF0aW9ucygpKQotICAgICAgICAgICAgb3BlcmF0aW9uLT5i
bGVuZChudWxscHRyLCBwcm9ncmVzcywgdHJ1ZSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7Ci0g
ICAgICAgIHJldHVybiBtYXRyaXg7Ci0gICAgfQotCi0gICAgLy8gQW5pbWF0aW9uIGZyb20gIi13
ZWJraXQtdHJhbnNmb3JtOiBub25lIi4KLSAgICBpZiAoIWZyb20uc2l6ZSgpKSB7Ci0gICAgICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZCh0byk7Ci0gICAgICAgIGZvciAoYXV0byYgb3Bl
cmF0aW9uIDogYmxlbmRlZC5vcGVyYXRpb25zKCkpCi0gICAgICAgICAgICBvcGVyYXRpb24tPmJs
ZW5kKG51bGxwdHIsIDEgLSBwcm9ncmVzcywgdHJ1ZSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7
Ci0gICAgICAgIHJldHVybiBtYXRyaXg7Ci0gICAgfQotCi0gICAgLy8gTm9ybWFsIGFuaW1hdGlv
biB3aXRoIGEgbWF0Y2hpbmcgb3BlcmF0aW9uIGxpc3QuCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9u
cyBibGVuZGVkKHRvKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsZW5kZWQub3BlcmF0
aW9ucygpLnNpemUoKTsgKytpKQotICAgICAgICBibGVuZGVkLm9wZXJhdGlvbnMoKVtpXS0+Ymxl
bmQoZnJvbS5hdChpKSwgcHJvZ3Jlc3MsICFmcm9tLmF0KGkpKS0+YXBwbHkobWF0cml4LCBib3hT
aXplKTsKLSAgICByZXR1cm4gbWF0cml4OwotfQotCi1zdGF0aWMgY29uc3QgVGltaW5nRnVuY3Rp
b24mIHRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUoY29uc3QgQW5pbWF0aW9uVmFsdWUm
IGFuaW1hdGlvblZhbHVlLCBjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24p
Ci17Ci0gICAgaWYgKGFuaW1hdGlvblZhbHVlLnRpbWluZ0Z1bmN0aW9uKCkpCi0gICAgICAgIHJl
dHVybiAqYW5pbWF0aW9uVmFsdWUudGltaW5nRnVuY3Rpb24oKTsKLSAgICBpZiAoYW5pbWF0aW9u
LnRpbWluZ0Z1bmN0aW9uKCkpCi0gICAgICAgIHJldHVybiAqYW5pbWF0aW9uLnRpbWluZ0Z1bmN0
aW9uKCk7Ci0gICAgcmV0dXJuIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmRlZmF1bHRUaW1p
bmdGdW5jdGlvbigpOwotfQotCi1UZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtl
eWZyYW1lcywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24mIGFuaW1h
dGlvbiwgYm9vbCBsaXN0c01hdGNoLCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSwgU2Vjb25kcyBw
YXVzZVRpbWUsIEFuaW1hdGlvblN0YXRlIHN0YXRlKQotICAgIDogbV9uYW1lKG5hbWUuaXNTYWZl
VG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkgPyBuYW1lIDogbmFtZS5pc29sYXRlZENvcHkoKSkKLSAg
ICAsIG1fa2V5ZnJhbWVzKGtleWZyYW1lcykKLSAgICAsIG1fYm94U2l6ZShib3hTaXplKQotICAg
ICwgbV90aW1pbmdGdW5jdGlvbihhbmltYXRpb24udGltaW5nRnVuY3Rpb24oKS0+Y2xvbmUoKSkK
LSAgICAsIG1faXRlcmF0aW9uQ291bnQoYW5pbWF0aW9uLml0ZXJhdGlvbkNvdW50KCkpCi0gICAg
LCBtX2R1cmF0aW9uKGFuaW1hdGlvbi5kdXJhdGlvbigpKQotICAgICwgbV9kaXJlY3Rpb24oYW5p
bWF0aW9uLmRpcmVjdGlvbigpKQotICAgICwgbV9maWxsc0ZvcndhcmRzKGFuaW1hdGlvbi5maWxs
c0ZvcndhcmRzKCkpCi0gICAgLCBtX2xpc3RzTWF0Y2gobGlzdHNNYXRjaCkKLSAgICAsIG1fc3Rh
cnRUaW1lKHN0YXJ0VGltZSkKLSAgICAsIG1fcGF1c2VUaW1lKHBhdXNlVGltZSkKLSAgICAsIG1f
dG90YWxSdW5uaW5nVGltZSgwX3MpCi0gICAgLCBtX2xhc3RSZWZyZXNoZWRUaW1lKG1fc3RhcnRU
aW1lKQotICAgICwgbV9zdGF0ZShzdGF0ZSkKLXsKLX0KLQotVGV4dHVyZU1hcHBlckFuaW1hdGlv
bjo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBv
dGhlcikKLSAgICA6IG1fbmFtZShvdGhlci5tX25hbWUuaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhy
ZWFkKCkgPyBvdGhlci5tX25hbWUgOiBvdGhlci5tX25hbWUuaXNvbGF0ZWRDb3B5KCkpCi0gICAg
LCBtX2tleWZyYW1lcyhvdGhlci5tX2tleWZyYW1lcykKLSAgICAsIG1fYm94U2l6ZShvdGhlci5t
X2JveFNpemUpCi0gICAgLCBtX3RpbWluZ0Z1bmN0aW9uKG90aGVyLm1fdGltaW5nRnVuY3Rpb24t
PmNsb25lKCkpCi0gICAgLCBtX2l0ZXJhdGlvbkNvdW50KG90aGVyLm1faXRlcmF0aW9uQ291bnQp
Ci0gICAgLCBtX2R1cmF0aW9uKG90aGVyLm1fZHVyYXRpb24pCi0gICAgLCBtX2RpcmVjdGlvbihv
dGhlci5tX2RpcmVjdGlvbikKLSAgICAsIG1fZmlsbHNGb3J3YXJkcyhvdGhlci5tX2ZpbGxzRm9y
d2FyZHMpCi0gICAgLCBtX2xpc3RzTWF0Y2gob3RoZXIubV9saXN0c01hdGNoKQotICAgICwgbV9z
dGFydFRpbWUob3RoZXIubV9zdGFydFRpbWUpCi0gICAgLCBtX3BhdXNlVGltZShvdGhlci5tX3Bh
dXNlVGltZSkKLSAgICAsIG1fdG90YWxSdW5uaW5nVGltZShvdGhlci5tX3RvdGFsUnVubmluZ1Rp
bWUpCi0gICAgLCBtX2xhc3RSZWZyZXNoZWRUaW1lKG90aGVyLm1fbGFzdFJlZnJlc2hlZFRpbWUp
Ci0gICAgLCBtX3N0YXRlKG90aGVyLm1fc3RhdGUpCi17Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbjo6YXBwbHkoQXBwbGljYXRpb25SZXN1bHQmIGFwcGxpY2F0aW9uUmVzdWx0cywg
TW9ub3RvbmljVGltZSB0aW1lKQotewotICAgIGlmICghaXNBY3RpdmUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgU2Vjb25kcyB0b3RhbFJ1bm5pbmdUaW1lID0gY29tcHV0ZVRvdGFsUnVubmlu
Z1RpbWUodGltZSk7Ci0gICAgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRBbmlt
YXRpb25WYWx1ZSh0b3RhbFJ1bm5pbmdUaW1lLnNlY29uZHMoKSwgbV9kdXJhdGlvbiwgbV9kaXJl
Y3Rpb24sIG1faXRlcmF0aW9uQ291bnQpOwotCi0gICAgaWYgKG1faXRlcmF0aW9uQ291bnQgIT0g
QW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlICYmIHRvdGFsUnVubmluZ1RpbWUuc2Vj
b25kcygpID49IG1fZHVyYXRpb24gKiBtX2l0ZXJhdGlvbkNvdW50KSB7Ci0gICAgICAgIG1fc3Rh
dGUgPSBBbmltYXRpb25TdGF0ZTo6U3RvcHBlZDsKLSAgICAgICAgbV9wYXVzZVRpbWUgPSAwX3M7
Ci0gICAgICAgIGlmIChtX2ZpbGxzRm9yd2FyZHMpCi0gICAgICAgICAgICBub3JtYWxpemVkVmFs
dWUgPSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JGaWxsc0ZvcndhcmRzKG1faXRlcmF0aW9u
Q291bnQsIG1fZGlyZWN0aW9uKTsKLSAgICB9Ci0KLSAgICBhcHBsaWNhdGlvblJlc3VsdHMuaGFz
UnVubmluZ0FuaW1hdGlvbnMgfD0gKG1fc3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBsYXlpbmcp
OwotCi0gICAgaWYgKCFub3JtYWxpemVkVmFsdWUpIHsKLSAgICAgICAgYXBwbHlJbnRlcm5hbChh
cHBsaWNhdGlvblJlc3VsdHMsIG1fa2V5ZnJhbWVzLmF0KDApLCBtX2tleWZyYW1lcy5hdCgxKSwg
MCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobm9ybWFsaXplZFZhbHVlID09
IDEuMCkgewotICAgICAgICBhcHBseUludGVybmFsKGFwcGxpY2F0aW9uUmVzdWx0cywgbV9rZXlm
cmFtZXMuYXQobV9rZXlmcmFtZXMuc2l6ZSgpIC0gMiksIG1fa2V5ZnJhbWVzLmF0KG1fa2V5ZnJh
bWVzLnNpemUoKSAtIDEpLCAxKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobV9r
ZXlmcmFtZXMuc2l6ZSgpID09IDIpIHsKLSAgICAgICAgYXV0byYgdGltaW5nRnVuY3Rpb24gPSB0
aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKG1fa2V5ZnJhbWVzLmF0KDApLCAqdGhpcyk7
Ci0gICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IHRpbWluZ0Z1bmN0aW9uLnRyYW5zZm9ybVRpbWUo
bm9ybWFsaXplZFZhbHVlLCBtX2R1cmF0aW9uKTsKLSAgICAgICAgYXBwbHlJbnRlcm5hbChhcHBs
aWNhdGlvblJlc3VsdHMsIG1fa2V5ZnJhbWVzLmF0KDApLCBtX2tleWZyYW1lcy5hdCgxKSwgbm9y
bWFsaXplZFZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IEFuaW1hdGlvblZhbHVlJiBmcm9tID0gbV9rZXlmcmFtZXMuYXQoaSk7Ci0gICAgICAgIGNvbnN0
IEFuaW1hdGlvblZhbHVlJiB0byA9IG1fa2V5ZnJhbWVzLmF0KGkgKyAxKTsKLSAgICAgICAgaWYg
KGZyb20ua2V5VGltZSgpID4gbm9ybWFsaXplZFZhbHVlIHx8IHRvLmtleVRpbWUoKSA8IG5vcm1h
bGl6ZWRWYWx1ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIG5vcm1hbGl6ZWRW
YWx1ZSA9IChub3JtYWxpemVkVmFsdWUgLSBmcm9tLmtleVRpbWUoKSkgLyAodG8ua2V5VGltZSgp
IC0gZnJvbS5rZXlUaW1lKCkpOwotICAgICAgICBhdXRvJiB0aW1pbmdGdW5jdGlvbiA9IHRpbWlu
Z0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUoZnJvbSwgKnRoaXMpOwotICAgICAgICBub3JtYWxp
emVkVmFsdWUgPSB0aW1pbmdGdW5jdGlvbi50cmFuc2Zvcm1UaW1lKG5vcm1hbGl6ZWRWYWx1ZSwg
bV9kdXJhdGlvbik7Ci0gICAgICAgIGFwcGx5SW50ZXJuYWwoYXBwbGljYXRpb25SZXN1bHRzLCBm
cm9tLCB0bywgbm9ybWFsaXplZFZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12
b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb246OmFwcGx5S2VlcGluZ0ludGVybmFsU3RhdGUoQXBw
bGljYXRpb25SZXN1bHQmIGFwcGxpY2F0aW9uUmVzdWx0cywgTW9ub3RvbmljVGltZSB0aW1lKQot
ewotICAgIE1vbm90b25pY1RpbWUgb2xkTGFzdFJlZnJlc2hlZFRpbWUgPSBtX2xhc3RSZWZyZXNo
ZWRUaW1lOwotICAgIFNlY29uZHMgb2xkVG90YWxSdW5uaW5nVGltZSA9IG1fdG90YWxSdW5uaW5n
VGltZTsKLSAgICBBbmltYXRpb25TdGF0ZSBvbGRTdGF0ZSA9IG1fc3RhdGU7Ci0KLSAgICBhcHBs
eShhcHBsaWNhdGlvblJlc3VsdHMsIHRpbWUpOwotCi0gICAgbV9sYXN0UmVmcmVzaGVkVGltZSA9
IG9sZExhc3RSZWZyZXNoZWRUaW1lOwotICAgIG1fdG90YWxSdW5uaW5nVGltZSA9IG9sZFRvdGFs
UnVubmluZ1RpbWU7Ci0gICAgbV9zdGF0ZSA9IG9sZFN0YXRlOwotfQotCi12b2lkIFRleHR1cmVN
YXBwZXJBbmltYXRpb246OnBhdXNlKFNlY29uZHMgdGltZSkKLXsKLSAgICBtX3N0YXRlID0gQW5p
bWF0aW9uU3RhdGU6OlBhdXNlZDsKLSAgICBtX3BhdXNlVGltZSA9IHRpbWU7Ci19Ci0KLXZvaWQg
VGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6cmVzdW1lKCkKLXsKLSAgICBtX3N0YXRlID0gQW5pbWF0
aW9uU3RhdGU6OlBsYXlpbmc7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2VlbXMgd3JvbmcuIG1fdG90
YWxSdW5uaW5nVGltZSBpcyBjbGVhcmVkLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODMxMTMKLSAgICBtX3BhdXNlVGltZSA9IDBfczsKLSAgICBtX3Rv
dGFsUnVubmluZ1RpbWUgPSBtX3BhdXNlVGltZTsKLSAgICBtX2xhc3RSZWZyZXNoZWRUaW1lID0g
TW9ub3RvbmljVGltZTo6bm93KCk7Ci19Ci0KLVNlY29uZHMgVGV4dHVyZU1hcHBlckFuaW1hdGlv
bjo6Y29tcHV0ZVRvdGFsUnVubmluZ1RpbWUoTW9ub3RvbmljVGltZSB0aW1lKQotewotICAgIGlm
IChtX3N0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQYXVzZWQpCi0gICAgICAgIHJldHVybiBtX3Bh
dXNlVGltZTsKLQotICAgIE1vbm90b25pY1RpbWUgb2xkTGFzdFJlZnJlc2hlZFRpbWUgPSBtX2xh
c3RSZWZyZXNoZWRUaW1lOwotICAgIG1fbGFzdFJlZnJlc2hlZFRpbWUgPSB0aW1lOwotICAgIG1f
dG90YWxSdW5uaW5nVGltZSArPSBtX2xhc3RSZWZyZXNoZWRUaW1lIC0gb2xkTGFzdFJlZnJlc2hl
ZFRpbWU7Ci0gICAgcmV0dXJuIG1fdG90YWxSdW5uaW5nVGltZTsKLX0KLQotYm9vbCBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RhdGUg
IT0gQW5pbWF0aW9uU3RhdGU6OlN0b3BwZWQgfHwgbV9maWxsc0ZvcndhcmRzOwotfQotCi12b2lk
IFRleHR1cmVNYXBwZXJBbmltYXRpb246OmFwcGx5SW50ZXJuYWwoQXBwbGljYXRpb25SZXN1bHQm
IGFwcGxpY2F0aW9uUmVzdWx0cywgY29uc3QgQW5pbWF0aW9uVmFsdWUmIGZyb20sIGNvbnN0IEFu
aW1hdGlvblZhbHVlJiB0bywgZmxvYXQgcHJvZ3Jlc3MpCi17Ci0gICAgc3dpdGNoIChtX2tleWZy
YW1lcy5wcm9wZXJ0eSgpKSB7Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5VHJhbnNmb3JtOgot
ICAgICAgICBhcHBsaWNhdGlvblJlc3VsdHMudHJhbnNmb3JtID0gYXBwbHlUcmFuc2Zvcm1Bbmlt
YXRpb24oc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUmPihmcm9tKS52
YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSY+KHRvKS52
YWx1ZSgpLCBwcm9ncmVzcywgbV9ib3hTaXplLCBtX2xpc3RzTWF0Y2gpOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eToKLSAgICAgICAgYXBwbGljYXRp
b25SZXN1bHRzLm9wYWNpdHkgPSBhcHBseU9wYWNpdHlBbmltYXRpb24oKHN0YXRpY19jYXN0PGNv
bnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUmPihmcm9tKS52YWx1ZSgpKSwgKHN0YXRpY19jYXN0PGNv
bnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUmPih0bykudmFsdWUoKSksIHByb2dyZXNzKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eUZpbHRlcjoKLSAgICAgICAgYXBw
bGljYXRpb25SZXN1bHRzLmZpbHRlcnMgPSBhcHBseUZpbHRlckFuaW1hdGlvbihzdGF0aWNfY2Fz
dDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KGZyb20pLnZhbHVlKCksIHN0YXRpY19jYXN0
PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlJj4odG8pLnZhbHVlKCksIHByb2dyZXNzLCBtX2Jv
eFNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjph
ZGQoY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKQotewotICAgIC8vIFJl
bW92ZSB0aGUgb2xkIHN0YXRlIGlmIHdlIGFyZSByZXN1bWluZyBhIHBhdXNlZCBhbmltYXRpb24u
Ci0gICAgcmVtb3ZlKGFuaW1hdGlvbi5uYW1lKCksIGFuaW1hdGlvbi5rZXlmcmFtZXMoKS5wcm9w
ZXJ0eSgpKTsKLQotICAgIG1fYW5pbWF0aW9ucy5hcHBlbmQoYW5pbWF0aW9uKTsKLX0KLQotdm9p
ZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsK
LSAgICBtX2FuaW1hdGlvbnMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZuYW1lXSAoY29uc3QgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7Ci0gICAgICAgIHJldHVybiBhbmltYXRpb24u
bmFtZSgpID09IG5hbWU7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlv
bnM6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUsIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0
eSkKLXsKLSAgICBtX2FuaW1hdGlvbnMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZuYW1lLCBwcm9wZXJ0
eV0gKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbikgewotICAgICAgICBy
ZXR1cm4gYW5pbWF0aW9uLm5hbWUoKSA9PSBuYW1lICYmIGFuaW1hdGlvbi5rZXlmcmFtZXMoKS5w
cm9wZXJ0eSgpID09IHByb3BlcnR5OwotICAgIH0pOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJB
bmltYXRpb25zOjpwYXVzZShjb25zdCBTdHJpbmcmIG5hbWUsIFNlY29uZHMgb2Zmc2V0KQotewot
ICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25zKSB7Ci0gICAgICAgIGlmIChh
bmltYXRpb24ubmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICBhbmltYXRpb24ucGF1c2Uob2Zm
c2V0KTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnN1c3BlbmQo
TW9ub3RvbmljVGltZSB0aW1lKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIHdyb25nLiBg
cGF1c2VgIHRha2VzIHRpbWUgb2Zmc2V0IChTZWNvbmRzKSwgbm90IE1vbm90b25pY1RpbWUuCi0g
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MzExMgotICAg
IGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25zKQotICAgICAgICBhbmltYXRpb24u
cGF1c2UodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uczo6cmVzdW1lKCkKLXsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5p
bWF0aW9ucykKLSAgICAgICAgYW5pbWF0aW9uLnJlc3VtZSgpOwotfQotCi12b2lkIFRleHR1cmVN
YXBwZXJBbmltYXRpb25zOjphcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpBcHBsaWNhdGlv
blJlc3VsdCYgYXBwbGljYXRpb25SZXN1bHRzLCBNb25vdG9uaWNUaW1lIHRpbWUpCi17Ci0gICAg
Zm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnMpCi0gICAgICAgIGFuaW1hdGlvbi5h
cHBseShhcHBsaWNhdGlvblJlc3VsdHMsIHRpbWUpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJB
bmltYXRpb25zOjphcHBseUtlZXBpbmdJbnRlcm5hbFN0YXRlKFRleHR1cmVNYXBwZXJBbmltYXRp
b246OkFwcGxpY2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIE1vbm90b25pY1RpbWUg
dGltZSkKLXsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykKLSAgICAg
ICAgYW5pbWF0aW9uLmFwcGx5S2VlcGluZ0ludGVybmFsU3RhdGUoYXBwbGljYXRpb25SZXN1bHRz
LCB0aW1lKTsKLX0KLQotYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzQWN0aXZlQW5p
bWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkgY29uc3QKLXsKLSAgICByZXR1
cm4gc3RkOjphbnlfb2YobV9hbmltYXRpb25zLmJlZ2luKCksIG1fYW5pbWF0aW9ucy5lbmQoKSwK
LSAgICAgICAgWyZ0eXBlXShjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24p
IHsgcmV0dXJuIGFuaW1hdGlvbi5pc0FjdGl2ZSgpICYmIGFuaW1hdGlvbi5rZXlmcmFtZXMoKS5w
cm9wZXJ0eSgpID09IHR5cGU7IH0pOwotfQotCi1ib29sIFRleHR1cmVNYXBwZXJBbmltYXRpb25z
OjpoYXNSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0ZDo6YW55X29m
KG1fYW5pbWF0aW9ucy5iZWdpbigpLCBtX2FuaW1hdGlvbnMuZW5kKCksCi0gICAgICAgIFtdKGNv
bnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbikgeyByZXR1cm4gYW5pbWF0aW9u
LnN0YXRlKCkgPT0gVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlBsYXlp
bmc7IH0pOwotfQotCi1UZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uczo6Z2V0QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbnMgYWN0aXZlOwotICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25z
KSB7Ci0gICAgICAgIGlmIChhbmltYXRpb24uaXNBY3RpdmUoKSkKLSAgICAgICAgICAgIGFjdGl2
ZS5hZGQoYW5pbWF0aW9uKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFjdGl2ZTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMmUyMDQ3ZjllMWY2MWQwMTk2YzcwY2U2NGNjN2E4MTYz
ZjMxMDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRp
b24uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKLSNk
ZWZpbmUgVGV4dHVyZU1hcHBlckFuaW1hdGlvbl9oCi0KLSNpbmNsdWRlICJHcmFwaGljc0xheWVy
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7
Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb24gewotcHVibGljOgotICAgIGVudW0gY2xh
c3MgQW5pbWF0aW9uU3RhdGUgeyBQbGF5aW5nLCBQYXVzZWQsIFN0b3BwZWQgfTsKLQotICAgIHN0
cnVjdCBBcHBsaWNhdGlvblJlc3VsdCB7Ci0gICAgICAgIE9wdGlvbmFsPFRyYW5zZm9ybWF0aW9u
TWF0cml4PiB0cmFuc2Zvcm07Ci0gICAgICAgIE9wdGlvbmFsPGRvdWJsZT4gb3BhY2l0eTsKLSAg
ICAgICAgT3B0aW9uYWw8RmlsdGVyT3BlcmF0aW9ucz4gZmlsdGVyczsKLSAgICAgICAgYm9vbCBo
YXNSdW5uaW5nQW5pbWF0aW9ucyB7IGZhbHNlIH07Ci0gICAgfTsKLQotICAgIFRleHR1cmVNYXBw
ZXJBbmltYXRpb24oKQotICAgICAgICA6IG1fa2V5ZnJhbWVzKEFuaW1hdGVkUHJvcGVydHlJbnZh
bGlkKQotICAgIHsgfQotICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgU3RyaW5nJiwg
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBBbmltYXRp
b24mLCBib29sLCBNb25vdG9uaWNUaW1lLCBTZWNvbmRzLCBBbmltYXRpb25TdGF0ZSk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uJik7Ci0KLSAgICB2b2lkIGFwcGx5KEFwcGxpY2F0aW9uUmVzdWx0JiwgTW9ub3Rv
bmljVGltZSk7Ci0gICAgdm9pZCBhcHBseUtlZXBpbmdJbnRlcm5hbFN0YXRlKEFwcGxpY2F0aW9u
UmVzdWx0JiwgTW9ub3RvbmljVGltZSk7Ci0gICAgdm9pZCBwYXVzZShTZWNvbmRzKTsKLSAgICB2
b2lkIHJlc3VtZSgpOwotICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLQotICAgIGNvbnN0IFN0
cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIGNvbnN0IEtleWZyYW1l
VmFsdWVMaXN0JiBrZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lczsgfQotICAg
IEFuaW1hdGlvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIFRp
bWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGltaW5nRnVu
Y3Rpb24uZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGFwcGx5SW50ZXJuYWwoQXBwbGlj
YXRpb25SZXN1bHQmLCBjb25zdCBBbmltYXRpb25WYWx1ZSYgZnJvbSwgY29uc3QgQW5pbWF0aW9u
VmFsdWUmIHRvLCBmbG9hdCBwcm9ncmVzcyk7Ci0gICAgU2Vjb25kcyBjb21wdXRlVG90YWxSdW5u
aW5nVGltZShNb25vdG9uaWNUaW1lKTsKLQotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgS2V5ZnJh
bWVWYWx1ZUxpc3QgbV9rZXlmcmFtZXM7Ci0gICAgRmxvYXRTaXplIG1fYm94U2l6ZTsKLSAgICBS
ZWZQdHI8VGltaW5nRnVuY3Rpb24+IG1fdGltaW5nRnVuY3Rpb247Ci0gICAgZG91YmxlIG1faXRl
cmF0aW9uQ291bnQ7Ci0gICAgZG91YmxlIG1fZHVyYXRpb247Ci0gICAgQW5pbWF0aW9uOjpBbmlt
YXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247Ci0gICAgYm9vbCBtX2ZpbGxzRm9yd2FyZHM7Ci0g
ICAgYm9vbCBtX2xpc3RzTWF0Y2g7Ci0gICAgTW9ub3RvbmljVGltZSBtX3N0YXJ0VGltZTsKLSAg
ICBTZWNvbmRzIG1fcGF1c2VUaW1lOwotICAgIFNlY29uZHMgbV90b3RhbFJ1bm5pbmdUaW1lOwot
ICAgIE1vbm90b25pY1RpbWUgbV9sYXN0UmVmcmVzaGVkVGltZTsKLSAgICBBbmltYXRpb25TdGF0
ZSBtX3N0YXRlOwotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgewotcHVibGlj
OgotICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zKCkgPSBkZWZhdWx0OwotCi0gICAgdm9pZCBh
ZGQoY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYpOwotICAgIHZvaWQgcmVtb3ZlKGNvbnN0
IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBBbmlt
YXRlZFByb3BlcnR5SUQpOwotICAgIHZvaWQgcGF1c2UoY29uc3QgU3RyaW5nJiwgU2Vjb25kcyk7
Ci0gICAgdm9pZCBzdXNwZW5kKE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgcmVzdW1lKCk7Ci0K
LSAgICB2b2lkIGFwcGx5KFRleHR1cmVNYXBwZXJBbmltYXRpb246OkFwcGxpY2F0aW9uUmVzdWx0
JiwgTW9ub3RvbmljVGltZSk7Ci0gICAgdm9pZCBhcHBseUtlZXBpbmdJbnRlcm5hbFN0YXRlKFRl
eHR1cmVNYXBwZXJBbmltYXRpb246OkFwcGxpY2F0aW9uUmVzdWx0JiwgTW9ub3RvbmljVGltZSk7
Ci0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbnMuaXNFbXB0
eSgpOyB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbnMuc2l6
ZSgpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFRleHR1cmVNYXBwZXJBbmltYXRpb24+JiBhbmltYXRp
b25zKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zOyB9Ci0gICAgVmVjdG9yPFRleHR1cmVN
YXBwZXJBbmltYXRpb24+JiBhbmltYXRpb25zKCkgeyByZXR1cm4gbV9hbmltYXRpb25zOyB9Ci0K
LSAgICBib29sIGhhc1J1bm5pbmdBbmltYXRpb25zKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNBY3Rp
dmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0eXBlKSBjb25zdDsKLSAgICBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyBnZXRBY3RpdmVBbmltYXRpb25zKCkgY29uc3Q7Ci0KLXBy
aXZhdGU6Ci0gICAgVmVjdG9yPFRleHR1cmVNYXBwZXJBbmltYXRpb24+IG1fYW5pbWF0aW9uczsK
LX07Ci0KLX0KLQotI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJBbmltYXRpb25faApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckxheWVyLmNwcAppbmRleCAzNDI4YzY3NGZjMjY2OGM0Mzg1YjRkOTM3NDM5ZDMwYWNm
NzE5MWQ0Li5mZDQzNjVhYTcyZmU1NjljNWRmYjljMjM0OWEyMjYyMDc3MTYxYjc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckxheWVyLmNwcApAQCAtNjQwLDcgKzY0MCw3IEBAIHZvaWQgVGV4dHVyZU1h
cHBlckxheWVyOjpzZXRDb250ZW50c0xheWVyKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxhCiAgICAgbV9jb250ZW50c0xheWVyID0gcGxhdGZvcm1MYXllcjsKIH0KIAotdm9p
ZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldEFuaW1hdGlvbnMoY29uc3QgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbnMmIGFuaW1hdGlvbnMpCit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6c2V0QW5pbWF0
aW9ucyhjb25zdCBOaWNvc2lhOjpOaWNvc2lhQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKIHsKICAg
ICBtX2FuaW1hdGlvbnMgPSBhbmltYXRpb25zOwogfQpAQCAtNjc4LDcgKzY3OCw3IEBAIGJvb2wg
VGV4dHVyZU1hcHBlckxheWVyOjphcHBseUFuaW1hdGlvbnNSZWN1cnNpdmVseShNb25vdG9uaWNU
aW1lIHRpbWUpCiAKIGJvb2wgVGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQW5pbWF0aW9ucyhNb25v
dG9uaWNUaW1lIHRpbWUpCiB7Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6QXBwbGljYXRp
b25SZXN1bHQgYXBwbGljYXRpb25SZXN1bHRzOworICAgIE5pY29zaWE6Ok5pY29zaWFBbmltYXRp
b246OkFwcGxpY2F0aW9uUmVzdWx0IGFwcGxpY2F0aW9uUmVzdWx0czsKICAgICBtX2FuaW1hdGlv
bnMuYXBwbHkoYXBwbGljYXRpb25SZXN1bHRzLCB0aW1lKTsKIAogICAgIG1fbGF5ZXJUcmFuc2Zv
cm1zLmxvY2FsVHJhbnNmb3JtID0gYXBwbGljYXRpb25SZXN1bHRzLnRyYW5zZm9ybS52YWx1ZU9y
KG1fc3RhdGUudHJhbnNmb3JtKTsKQEAgLTY4Nyw3ICs2ODcsNyBAQCBib29sIFRleHR1cmVNYXBw
ZXJMYXllcjo6c3luY0FuaW1hdGlvbnMoTW9ub3RvbmljVGltZSB0aW1lKQogCiAjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQogICAgIC8vIENhbGN1bGF0ZSBsb2NhbFRyYW5zZm9ybSA1MG1z
IGluIHRoZSBmdXR1cmUuCi0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6QXBwbGljYXRpb25S
ZXN1bHQgZnV0dXJlQXBwbGljYXRpb25SZXN1bHRzOworICAgIE5pY29zaWE6Ok5pY29zaWFBbmlt
YXRpb246OkFwcGxpY2F0aW9uUmVzdWx0IGZ1dHVyZUFwcGxpY2F0aW9uUmVzdWx0czsKICAgICBt
X2FuaW1hdGlvbnMuYXBwbHlLZWVwaW5nSW50ZXJuYWxTdGF0ZShmdXR1cmVBcHBsaWNhdGlvblJl
c3VsdHMsIHRpbWUgKyA1MF9tcyk7CiAgICAgbV9sYXllclRyYW5zZm9ybXMuZnV0dXJlTG9jYWxU
cmFuc2Zvcm0gPSBmdXR1cmVBcHBsaWNhdGlvblJlc3VsdHMudHJhbnNmb3JtLnZhbHVlT3IobV9s
YXllclRyYW5zZm9ybXMubG9jYWxUcmFuc2Zvcm0pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxh
eWVyLmgKaW5kZXggNTBiMjRhYTcxZTJkY2FlODAxNjIzZjBlYjJkZTFiOTMwNGExNGQ4MS4uYWU5
ODM5ZDNmYzliMGRjNjE0YTE0ZTBkNmIyYzUwZWMwMjBjMjJjMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
TGF5ZXIuaApAQCAtMjIsOCArMjIsOCBAQAogCiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIk5pY29zaWFBbmltYXRpb24uaCIK
ICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckFuaW1h
dGlvbi5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgogCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dERlYnVnVmlzdWFscyhib29sIHNob3dEZWJ1Z0JvcmRlcnMsIGNvbnN0IENvbG9yJiBkZWJ1Z0Jv
cmRlckNvbG9yLCBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoKTsKICAgICB2b2lkIHNldFJlcGFpbnRD
b3VudGVyKGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyLCBpbnQgcmVwYWludENvdW50KTsKICAgICB2
b2lkIHNldENvbnRlbnRzTGF5ZXIoVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqKTsKLSAgICB2
b2lkIHNldEFuaW1hdGlvbnMoY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMmKTsKKyAgICB2
b2lkIHNldEFuaW1hdGlvbnMoY29uc3QgTmljb3NpYTo6Tmljb3NpYUFuaW1hdGlvbnMmKTsKICAg
ICB2b2lkIHNldEJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlKik7CiAjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHZvaWQgc2V0QW5pbWF0ZWRCYWNraW5nU3Rv
cmVDbGllbnQoTmljb3NpYTo6QW5pbWF0ZWRCYWNraW5nU3RvcmVDbGllbnQqKTsKQEAgLTIwMiw3
ICsyMDIsNyBAQCBwcml2YXRlOgogCiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBUZXh0dXJlTWFw
cGVyKiBtX3RleHR1cmVNYXBwZXIgeyBudWxscHRyIH07Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbnMgbV9hbmltYXRpb25zOworICAgIE5pY29zaWE6Ok5pY29zaWFBbmltYXRpb25zIG1fYW5p
bWF0aW9uczsKICAgICB1aW50MzJfdCBtX2lkIHsgMCB9OwogI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKICAgICBSZWZQdHI8Tmljb3NpYTo6QW5pbWF0ZWRCYWNraW5nU3RvcmVDbGllbnQ+
IG1fYW5pbWF0ZWRCYWNraW5nU3RvcmVDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDM2N2Q4YTUzY2YzNzBk
MjIwMmQ2ZjM0MDFjZGNiM2EwMmZmNDJjMmIuLmY2M2UzODU0MDU3Nzg4MjdmYjM4ODE1ZThkNTNi
ZTcyOWZjN2VmYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0xMjU3LDcgKzEyNTcsNyBAQCBib29sIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2
YWx1ZUxpc3QsCiAgICAgICAgIGxpc3RzTWF0Y2ggPSB2YWxpZGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bnModmFsdWVMaXN0LCBpZ25vcmVkSGFzQmlnUm90YXRpb24pID49IDA7CiAKICAgICBtX2xhc3RB
bmltYXRpb25TdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKSAtIFNlY29uZHMoZGVsYXlB
c05lZ2F0aXZlVGltZU9mZnNldCk7Ci0gICAgbV9hbmltYXRpb25zLmFkZChUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uKGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgKmFuaW0sIGxpc3Rz
TWF0Y2gsIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZSwgMF9zLCBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uOjpBbmltYXRpb25TdGF0ZTo6UGxheWluZykpOworICAgIG1fYW5pbWF0aW9ucy5hZGQoTmlj
b3NpYTo6Tmljb3NpYUFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUs
ICphbmltLCBsaXN0c01hdGNoLCBtX2xhc3RBbmltYXRpb25TdGFydFRpbWUsIDBfcywgTmljb3Np
YTo6Tmljb3NpYUFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlBsYXlpbmcpKTsKICAgICBtX2Fu
aW1hdGlvblN0YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKICAgICBkaWRDaGFuZ2VBbmlt
YXRpb25zKCk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggZTZjNTg2NjczN2RhYTMxYjdmZDJh
MTYxYmViY2MxYTRhOGJiOTY4ZS4uYzg0NWI2OWZkNzJkOWNhNjUyMzRjY2ZiZWY5NzViM2U1OTZk
N2ZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaApAQCAtMzAsMjAgKzMwLDIwIEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNs
dWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTmljb3NpYUFuaW1hdGVkQmFja2luZ1N0b3JlQ2xp
ZW50LmgiCisjaW5jbHVkZSAiTmljb3NpYUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIk5pY29zaWFC
dWZmZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgogCiBuYW1lc3BhY2UgTmljb3NpYSB7CiBjbGFzcyBQYWludGluZ0VuZ2luZTsKK2NsYXNz
IE5pY29zaWFBbmltYXRpb25zOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczsKIAog
Y2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IHsKIHB1YmxpYzoKQEAgLTIxMCw3
ICsyMTAsNyBAQCBwcml2YXRlOgogCiAgICAgVGltZXIgbV9hbmltYXRpb25TdGFydGVkVGltZXI7
CiAgICAgUnVuTG9vcDo6VGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPiBtX3JlcXVlc3RQ
ZW5kaW5nVGlsZUNyZWF0aW9uVGltZXI7Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9h
bmltYXRpb25zOworICAgIE5pY29zaWE6Ok5pY29zaWFBbmltYXRpb25zIG1fYW5pbWF0aW9uczsK
ICAgICBNb25vdG9uaWNUaW1lIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZTsKIAogICAgIHN0cnVj
dCB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376261</attachid>
            <date>2019-08-14 06:25:11 -0700</date>
            <delta_ts>2019-08-16 02:38:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200707-20190814152509.patch</filename>
            <type>text/plain</type>
            <size>52622</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NjYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDFkODQxNTNjZDUyZmE0
OTY1ZDFkZjM1Zjc5ZTM2ZGQwMDQzM2NlMS4uYzZmZDUyZGEzM2UzNzhlYjAwZGJiMGZlYzRjMWI5
OGFhYTg5ODZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE5LTA4LTE0ICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBNb3Zl
IFRleHR1cmVNYXBwZXJBbmltYXRpb24gdG8gdGhlIG5pY29zaWEgbmFtZXNwYWNlIGFzIE5pY29z
aWFBbmltYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMDcwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiB0byB0aGUgbmljb3NpYSBuYW1lc3BhY2Ug
YXMgTmljb3NpYUFuaW1hdGlvbiwgc28gaXQgY2FuIGJlIHVzZWQKKyAgICAgICAgYnkgaW1wbGVt
ZW50YXRpb25zIHRoYXQgZG9uJ3QgdXNlIHRoZSBUZXh0dXJlTWFwcGVyLgorCisgICAgICAgICog
cGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL05pY29zaWFBbmltYXRpb24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwLgor
ICAgICAgICAoTmljb3NpYTo6dGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZSk6CisgICAg
ICAgIChOaWNvc2lhOjpOaWNvc2lhQW5pbWF0aW9uOjpOaWNvc2lhQW5pbWF0aW9uKToKKyAgICAg
ICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRpb246OmFwcGx5KToKKyAgICAgICAgKE5pY29zaWE6
Ok5pY29zaWFBbmltYXRpb246OmFwcGx5S2VlcGluZ0ludGVybmFsU3RhdGUpOgorICAgICAgICAo
Tmljb3NpYTo6Tmljb3NpYUFuaW1hdGlvbjo6cGF1c2UpOgorICAgICAgICAoTmljb3NpYTo6Tmlj
b3NpYUFuaW1hdGlvbjo6cmVzdW1lKToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRp
b246OmNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFB
bmltYXRpb246OmlzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmlt
YXRpb246OmFwcGx5SW50ZXJuYWwpOgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUFuaW1hdGlv
bnM6OmFkZCk6CisgICAgICAgIChOaWNvc2lhOjpOaWNvc2lhQW5pbWF0aW9uczo6cmVtb3ZlKToK
KyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRpb25zOjpwYXVzZSk6CisgICAgICAgIChO
aWNvc2lhOjpOaWNvc2lhQW5pbWF0aW9uczo6c3VzcGVuZCk6CisgICAgICAgIChOaWNvc2lhOjpO
aWNvc2lhQW5pbWF0aW9uczo6cmVzdW1lKToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmlt
YXRpb25zOjphcHBseSk6CisgICAgICAgIChOaWNvc2lhOjpOaWNvc2lhQW5pbWF0aW9uczo6YXBw
bHlLZWVwaW5nSW50ZXJuYWxTdGF0ZSk6CisgICAgICAgIChOaWNvc2lhOjpOaWNvc2lhQW5pbWF0
aW9uczo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZSBjb25zdCk6CisgICAgICAgIChOaWNvc2lh
OjpOaWNvc2lhQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1hdGlvbnMgY29uc3QpOgorICAgICAg
ICAoTmljb3NpYTo6Tmljb3NpYUFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUFuaW1hdGlvbi5o
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJBbmltYXRpb24uaC4KKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRp
b246Ok5pY29zaWFBbmltYXRpb24pOgorICAgICAgICAoTmljb3NpYTo6Tmljb3NpYUFuaW1hdGlv
bjo6a2V5ZnJhbWVzIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRpb246
OnRpbWluZ0Z1bmN0aW9uIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRp
b25zOjphbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6Ok5pY29zaWFBbmltYXRp
b25zOjphbmltYXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05p
Y29zaWFQbGF0Zm9ybUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c3luY0FuaW1hdGlvbnMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
YWRkQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg6CisKIDIwMTktMDgtMTMgIFNhbSBXZWlu
aWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgV1BFIGJ1aWxkLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKaW5kZXggY2U5YWI5NmY1
MmI4OTY5YzkxMTA5ZWYwNjg1NWM1MDgzOWE1MjMyMy4uNGYzZDZlYWI1ZDcyZmM5NWMyMGE0NTNh
Y2ViNTlkNGMzZDRhZGEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4
dHVyZU1hcHBlci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFw
cGVyLmNtYWtlCkBAIC0xLDEzICsxLDE0IEBACiBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
SU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEi
CiApCiAKIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgIHBsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvTmljb3NpYUFuaW1hdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvQml0bWFwVGV4dHVyZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFw
VGV4dHVyZVBvb2wuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29u
dGV4dDNEVGV4dHVyZU1hcHBlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlci5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckJhY2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckZQU0NvdW50ZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHQzNEUGxhdGZvcm1MYXllci5jcHAKQEAgLTE2LDExICsxNywxMSBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICkKIAogbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhQW5pbWF0
aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0NsaXBTdGFjay5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJBbmltYXRpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuaApAQCAtNzAsNyArNzEsNiBAQCBpZiAoVVNF
X0NPT1JESU5BVEVEX0dSQVBISUNTKQogCiAgICAgIyBGSVhNRTogTW92ZSB0aGlzIGludG8gTmlj
b3NpYS5jbWFrZSBvbmNlIHRoZSBjb21wb25lbnQgaXMgc2V0IGZvciBsb25nLXRlcm0gdXNlLgog
ICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAg
ICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhIgogICAgICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlybyIKICAgICAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwIgogICAgICkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmlj
b3NpYUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL05pY29zaWFBbmltYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjNjUwZGFhNDRlYTRkMjA0YTAw
ZTg1MzU1OTEzNGEzNGM2ZmI5YTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEs
Mzk2IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk5pY29zaWFBbmltYXRpb24uaCIKKworI2luY2x1ZGUgIkxh
eW91dFNpemUuaCIKKworbmFtZXNwYWNlIE5pY29zaWEgeworCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworc3RhdGljIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kRnVuYyhGaWx0ZXJP
cGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uJiB0b09wLCBkb3VibGUgcHJvZ3Jlc3Ms
IGNvbnN0IEZsb2F0U2l6ZSYsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCit7Cisg
ICAgcmV0dXJuIHRvT3AuYmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgYmxlbmRUb1Bhc3N0aHJvdWdo
KTsKK30KKworc3RhdGljIEZpbHRlck9wZXJhdGlvbnMgYXBwbHlGaWx0ZXJBbmltYXRpb24oY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRv
dWJsZSBwcm9ncmVzcywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQoreworICAgIC8vIEZpcnN0
IGZyYW1lIG9mIGFuIGFuaW1hdGlvbi4KKyAgICBpZiAoIXByb2dyZXNzKQorICAgICAgICByZXR1
cm4gZnJvbTsKKworICAgIC8vIExhc3QgZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgorICAgIGlmIChw
cm9ncmVzcyA9PSAxKQorICAgICAgICByZXR1cm4gdG87CisKKyAgICBpZiAoIWZyb20uaXNFbXB0
eSgpICYmICF0by5pc0VtcHR5KCkgJiYgIWZyb20ub3BlcmF0aW9uc01hdGNoKHRvKSkKKyAgICAg
ICAgcmV0dXJuIHRvOworCisgICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7CisKKyAgICBzaXpl
X3QgZnJvbVNpemUgPSBmcm9tLm9wZXJhdGlvbnMoKS5zaXplKCk7CisgICAgc2l6ZV90IHRvU2l6
ZSA9IHRvLm9wZXJhdGlvbnMoKS5zaXplKCk7CisgICAgc2l6ZV90IHNpemUgPSBzdGQ6Om1heChm
cm9tU2l6ZSwgdG9TaXplKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykg
eworICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9tT3AgPSAoaSA8IGZyb21TaXpl
KSA/IGZyb20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogbnVsbHB0cjsKKyAgICAgICAgUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRvLm9wZXJhdGlvbnMoKVtp
XS5nZXQoKSA6IG51bGxwdHI7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5k
ZWRPcCA9IHRvT3AgPyBibGVuZEZ1bmMoZnJvbU9wLmdldCgpLCAqdG9PcCwgcHJvZ3Jlc3MsIGJv
eFNpemUpIDogKGZyb21PcCA/IGJsZW5kRnVuYyhudWxscHRyLCAqZnJvbU9wLCBwcm9ncmVzcywg
Ym94U2l6ZSwgdHJ1ZSkgOiBudWxscHRyKTsKKyAgICAgICAgaWYgKGJsZW5kZWRPcCkKKyAgICAg
ICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJPcGVy
YXRpb246OmNyZWF0ZSgpOworICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQorICAgICAg
ICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3AgPyB0b09wIDogV1RGTW92
ZShpZGVudGl0eU9wKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoZnJvbU9wID8gZnJvbU9wIDogV1RGTW92ZShpZGVudGl0eU9w
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMg
Ym9vbCBzaG91bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUoQW5pbWF0aW9uOjpBbmltYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uLCBpbnQgbG9vcENvdW50KQoreworICAgIHJldHVybiAoZGlyZWN0aW9u
ID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlICYmIGxvb3BDb3VudCAm
IDEpCisgICAgICAgIHx8IChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rp
b25BbHRlcm5hdGVSZXZlcnNlICYmICEobG9vcENvdW50ICYgMSkpCisgICAgICAgIHx8IGRpcmVj
dGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2U7Cit9CisKK3N0YXRp
YyBkb3VibGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKGRvdWJsZSBydW5uaW5nVGltZSwgZG91
YmxlIGR1cmF0aW9uLCBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIGRv
dWJsZSBpdGVyYXRpb25Db3VudCkKK3sKKyAgICBpZiAoIWR1cmF0aW9uKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGNvbnN0IGludCBsb29wQ291bnQgPSBydW5uaW5nVGltZSAvIGR1cmF0aW9u
OworICAgIGNvbnN0IGRvdWJsZSBsYXN0RnVsbExvb3AgPSBkdXJhdGlvbiAqIGRvdWJsZShsb29w
Q291bnQpOworICAgIGNvbnN0IGRvdWJsZSByZW1haW5kZXIgPSBydW5uaW5nVGltZSAtIGxhc3RG
dWxsTG9vcDsKKyAgICAvLyBJZ25vcmUgcmVtYWluZGVyIHdoZW4gd2UndmUgcmVhY2hlZCB0aGUg
ZW5kIG9mIGFuaW1hdGlvbi4KKyAgICBjb25zdCBkb3VibGUgbm9ybWFsaXplZCA9IChsb29wQ291
bnQgPT0gaXRlcmF0aW9uQ291bnQpID8gMS4wIDogKHJlbWFpbmRlciAvIGR1cmF0aW9uKTsKKwor
ICAgIHJldHVybiBzaG91bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUoZGlyZWN0aW9uLCBsb29wQ291
bnQpID8gMSAtIG5vcm1hbGl6ZWQgOiBub3JtYWxpemVkOworfQorCitzdGF0aWMgZG91YmxlIG5v
cm1hbGl6ZWRBbmltYXRpb25WYWx1ZUZvckZpbGxzRm9yd2FyZHMoZG91YmxlIGl0ZXJhdGlvbkNv
dW50LCBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgaWYg
KGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbk5vcm1hbCkKKyAgICAg
ICAgcmV0dXJuIDE7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvblJldmVyc2UpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzaG91bGRSZXZl
cnNlQW5pbWF0aW9uVmFsdWUoZGlyZWN0aW9uLCBpdGVyYXRpb25Db3VudCkgPyAxIDogMDsKK30K
Kworc3RhdGljIGZsb2F0IGFwcGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBmcm9tT3BhY2l0eSwg
ZmxvYXQgdG9PcGFjaXR5LCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gT3B0aW1pemF0aW9u
OiBzcGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KKyAgICBpZiAocHJvZ3Jl
c3MgPT0gMS4wKQorICAgICAgICByZXR1cm4gdG9PcGFjaXR5OworCisgICAgaWYgKCFwcm9ncmVz
cykKKyAgICAgICAgcmV0dXJuIGZyb21PcGFjaXR5OworCisgICAgcmV0dXJuIGZyb21PcGFjaXR5
ICsgcHJvZ3Jlc3MgKiAodG9PcGFjaXR5IC0gZnJvbU9wYWNpdHkpOworfQorCitzdGF0aWMgVHJh
bnNmb3JtYXRpb25NYXRyaXggYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBw
cm9ncmVzcywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplLCBib29sIGxpc3RzTWF0Y2gpCit7Cisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworCisgICAgLy8gRmlyc3QgZnJhbWUgb2Yg
YW4gYW5pbWF0aW9uLgorICAgIGlmICghcHJvZ3Jlc3MpIHsKKyAgICAgICAgZnJvbS5hcHBseShi
b3hTaXplLCBtYXRyaXgpOworICAgICAgICByZXR1cm4gbWF0cml4OworICAgIH0KKworICAgIC8v
IExhc3QgZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgorICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7Cisg
ICAgICAgIHRvLmFwcGx5KGJveFNpemUsIG1hdHJpeCk7CisgICAgICAgIHJldHVybiBtYXRyaXg7
CisgICAgfQorCisgICAgLy8gSWYgd2UgaGF2ZSBpbmNvbXBhdGlibGUgb3BlcmF0aW9uIGxpc3Rz
LCB3ZSBibGVuZCB0aGUgcmVzdWx0aW5nIG1hdHJpY2VzLgorICAgIGlmICghbGlzdHNNYXRjaCkg
eworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tTWF0cml4OworICAgICAgICB0by5h
cHBseShib3hTaXplLCBtYXRyaXgpOworICAgICAgICBmcm9tLmFwcGx5KGJveFNpemUsIGZyb21N
YXRyaXgpOworICAgICAgICBtYXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpOworICAg
ICAgICByZXR1cm4gbWF0cml4OworICAgIH0KKworICAgIC8vIEFuaW1hdGlvbiB0byAiLXdlYmtp
dC10cmFuc2Zvcm06IG5vbmUiLgorICAgIGlmICghdG8uc2l6ZSgpKSB7CisgICAgICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgYmxlbmRlZChmcm9tKTsKKyAgICAgICAgZm9yIChhdXRvJiBvcGVyYXRp
b24gOiBibGVuZGVkLm9wZXJhdGlvbnMoKSkKKyAgICAgICAgICAgIG9wZXJhdGlvbi0+YmxlbmQo
bnVsbHB0ciwgcHJvZ3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOworICAgICAg
ICByZXR1cm4gbWF0cml4OworICAgIH0KKworICAgIC8vIEFuaW1hdGlvbiBmcm9tICItd2Via2l0
LXRyYW5zZm9ybTogbm9uZSIuCisgICAgaWYgKCFmcm9tLnNpemUoKSkgeworICAgICAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQodG8pOworICAgICAgICBmb3IgKGF1dG8mIG9wZXJhdGlv
biA6IGJsZW5kZWQub3BlcmF0aW9ucygpKQorICAgICAgICAgICAgb3BlcmF0aW9uLT5ibGVuZChu
dWxscHRyLCAxIC0gcHJvZ3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOworICAg
ICAgICByZXR1cm4gbWF0cml4OworICAgIH0KKworICAgIC8vIE5vcm1hbCBhbmltYXRpb24gd2l0
aCBhIG1hdGNoaW5nIG9wZXJhdGlvbiBsaXN0LgorICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxl
bmRlZCh0byk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibGVuZGVkLm9wZXJhdGlvbnMo
KS5zaXplKCk7ICsraSkKKyAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5kKGZy
b20uYXQoaSksIHByb2dyZXNzLCAhZnJvbS5hdChpKSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7
CisgICAgcmV0dXJuIG1hdHJpeDsKK30KKworc3RhdGljIGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiB0
aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvblZhbHVlJiBhbmlt
YXRpb25WYWx1ZSwgY29uc3QgTmljb3NpYUFuaW1hdGlvbiYgYW5pbWF0aW9uKQoreworICAgIGlm
IChhbmltYXRpb25WYWx1ZS50aW1pbmdGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gKmFuaW1h
dGlvblZhbHVlLnRpbWluZ0Z1bmN0aW9uKCk7CisgICAgaWYgKGFuaW1hdGlvbi50aW1pbmdGdW5j
dGlvbigpKQorICAgICAgICByZXR1cm4gKmFuaW1hdGlvbi50aW1pbmdGdW5jdGlvbigpOworICAg
IHJldHVybiBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpkZWZhdWx0VGltaW5nRnVuY3Rpb24o
KTsKK30KKworTmljb3NpYUFuaW1hdGlvbjo6Tmljb3NpYUFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMsIGNvbnN0IEZsb2F0U2l6
ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIGJvb2wgbGlzdHNNYXRjaCwg
TW9ub3RvbmljVGltZSBzdGFydFRpbWUsIFNlY29uZHMgcGF1c2VUaW1lLCBBbmltYXRpb25TdGF0
ZSBzdGF0ZSkKKyAgICA6IG1fbmFtZShuYW1lLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgp
ID8gbmFtZSA6IG5hbWUuaXNvbGF0ZWRDb3B5KCkpCisgICAgLCBtX2tleWZyYW1lcyhrZXlmcmFt
ZXMpCisgICAgLCBtX2JveFNpemUoYm94U2l6ZSkKKyAgICAsIG1fdGltaW5nRnVuY3Rpb24oYW5p
bWF0aW9uLnRpbWluZ0Z1bmN0aW9uKCktPmNsb25lKCkpCisgICAgLCBtX2l0ZXJhdGlvbkNvdW50
KGFuaW1hdGlvbi5pdGVyYXRpb25Db3VudCgpKQorICAgICwgbV9kdXJhdGlvbihhbmltYXRpb24u
ZHVyYXRpb24oKSkKKyAgICAsIG1fZGlyZWN0aW9uKGFuaW1hdGlvbi5kaXJlY3Rpb24oKSkKKyAg
ICAsIG1fZmlsbHNGb3J3YXJkcyhhbmltYXRpb24uZmlsbHNGb3J3YXJkcygpKQorICAgICwgbV9s
aXN0c01hdGNoKGxpc3RzTWF0Y2gpCisgICAgLCBtX3N0YXJ0VGltZShzdGFydFRpbWUpCisgICAg
LCBtX3BhdXNlVGltZShwYXVzZVRpbWUpCisgICAgLCBtX3RvdGFsUnVubmluZ1RpbWUoMF9zKQor
ICAgICwgbV9sYXN0UmVmcmVzaGVkVGltZShtX3N0YXJ0VGltZSkKKyAgICAsIG1fc3RhdGUoc3Rh
dGUpCit7Cit9CisKK05pY29zaWFBbmltYXRpb246Ok5pY29zaWFBbmltYXRpb24oY29uc3QgTmlj
b3NpYUFuaW1hdGlvbiYgb3RoZXIpCisgICAgOiBtX25hbWUob3RoZXIubV9uYW1lLmlzU2FmZVRv
U2VuZFRvQW5vdGhlclRocmVhZCgpID8gb3RoZXIubV9uYW1lIDogb3RoZXIubV9uYW1lLmlzb2xh
dGVkQ29weSgpKQorICAgICwgbV9rZXlmcmFtZXMob3RoZXIubV9rZXlmcmFtZXMpCisgICAgLCBt
X2JveFNpemUob3RoZXIubV9ib3hTaXplKQorICAgICwgbV90aW1pbmdGdW5jdGlvbihvdGhlci5t
X3RpbWluZ0Z1bmN0aW9uLT5jbG9uZSgpKQorICAgICwgbV9pdGVyYXRpb25Db3VudChvdGhlci5t
X2l0ZXJhdGlvbkNvdW50KQorICAgICwgbV9kdXJhdGlvbihvdGhlci5tX2R1cmF0aW9uKQorICAg
ICwgbV9kaXJlY3Rpb24ob3RoZXIubV9kaXJlY3Rpb24pCisgICAgLCBtX2ZpbGxzRm9yd2FyZHMo
b3RoZXIubV9maWxsc0ZvcndhcmRzKQorICAgICwgbV9saXN0c01hdGNoKG90aGVyLm1fbGlzdHNN
YXRjaCkKKyAgICAsIG1fc3RhcnRUaW1lKG90aGVyLm1fc3RhcnRUaW1lKQorICAgICwgbV9wYXVz
ZVRpbWUob3RoZXIubV9wYXVzZVRpbWUpCisgICAgLCBtX3RvdGFsUnVubmluZ1RpbWUob3RoZXIu
bV90b3RhbFJ1bm5pbmdUaW1lKQorICAgICwgbV9sYXN0UmVmcmVzaGVkVGltZShvdGhlci5tX2xh
c3RSZWZyZXNoZWRUaW1lKQorICAgICwgbV9zdGF0ZShvdGhlci5tX3N0YXRlKQoreworfQorCit2
b2lkIE5pY29zaWFBbmltYXRpb246OmFwcGx5KEFwcGxpY2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlv
blJlc3VsdHMsIE1vbm90b25pY1RpbWUgdGltZSkKK3sKKyAgICBpZiAoIWlzQWN0aXZlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFNlY29uZHMgdG90YWxSdW5uaW5nVGltZSA9IGNvbXB1dGVU
b3RhbFJ1bm5pbmdUaW1lKHRpbWUpOworICAgIGRvdWJsZSBub3JtYWxpemVkVmFsdWUgPSBub3Jt
YWxpemVkQW5pbWF0aW9uVmFsdWUodG90YWxSdW5uaW5nVGltZS5zZWNvbmRzKCksIG1fZHVyYXRp
b24sIG1fZGlyZWN0aW9uLCBtX2l0ZXJhdGlvbkNvdW50KTsKKworICAgIGlmIChtX2l0ZXJhdGlv
bkNvdW50ICE9IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSAmJiB0b3RhbFJ1bm5p
bmdUaW1lLnNlY29uZHMoKSA+PSBtX2R1cmF0aW9uICogbV9pdGVyYXRpb25Db3VudCkgeworICAg
ICAgICBtX3N0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0b3BwZWQ7CisgICAgICAgIG1fcGF1c2VU
aW1lID0gMF9zOworICAgICAgICBpZiAobV9maWxsc0ZvcndhcmRzKQorICAgICAgICAgICAgbm9y
bWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yRmlsbHNGb3J3YXJkcyht
X2l0ZXJhdGlvbkNvdW50LCBtX2RpcmVjdGlvbik7CisgICAgfQorCisgICAgYXBwbGljYXRpb25S
ZXN1bHRzLmhhc1J1bm5pbmdBbmltYXRpb25zIHw9IChtX3N0YXRlID09IEFuaW1hdGlvblN0YXRl
OjpQbGF5aW5nKTsKKworICAgIGlmICghbm9ybWFsaXplZFZhbHVlKSB7CisgICAgICAgIGFwcGx5
SW50ZXJuYWwoYXBwbGljYXRpb25SZXN1bHRzLCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFt
ZXMuYXQoMSksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG5vcm1hbGl6
ZWRWYWx1ZSA9PSAxLjApIHsKKyAgICAgICAgYXBwbHlJbnRlcm5hbChhcHBsaWNhdGlvblJlc3Vs
dHMsIG1fa2V5ZnJhbWVzLmF0KG1fa2V5ZnJhbWVzLnNpemUoKSAtIDIpLCBtX2tleWZyYW1lcy5h
dChtX2tleWZyYW1lcy5zaXplKCkgLSAxKSwgMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKG1fa2V5ZnJhbWVzLnNpemUoKSA9PSAyKSB7CisgICAgICAgIGF1dG8mIHRpbWluZ0Z1
bmN0aW9uID0gdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShtX2tleWZyYW1lcy5hdCgw
KSwgKnRoaXMpOworICAgICAgICBub3JtYWxpemVkVmFsdWUgPSB0aW1pbmdGdW5jdGlvbi50cmFu
c2Zvcm1UaW1lKG5vcm1hbGl6ZWRWYWx1ZSwgbV9kdXJhdGlvbik7CisgICAgICAgIGFwcGx5SW50
ZXJuYWwoYXBwbGljYXRpb25SZXN1bHRzLCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMu
YXQoMSksIG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgeworICAg
ICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSYgZnJvbSA9IG1fa2V5ZnJhbWVzLmF0KGkpOworICAg
ICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSYgdG8gPSBtX2tleWZyYW1lcy5hdChpICsgMSk7Cisg
ICAgICAgIGlmIChmcm9tLmtleVRpbWUoKSA+IG5vcm1hbGl6ZWRWYWx1ZSB8fCB0by5rZXlUaW1l
KCkgPCBub3JtYWxpemVkVmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBu
b3JtYWxpemVkVmFsdWUgPSAobm9ybWFsaXplZFZhbHVlIC0gZnJvbS5rZXlUaW1lKCkpIC8gKHRv
LmtleVRpbWUoKSAtIGZyb20ua2V5VGltZSgpKTsKKyAgICAgICAgYXV0byYgdGltaW5nRnVuY3Rp
b24gPSB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGZyb20sICp0aGlzKTsKKyAgICAg
ICAgbm9ybWFsaXplZFZhbHVlID0gdGltaW5nRnVuY3Rpb24udHJhbnNmb3JtVGltZShub3JtYWxp
emVkVmFsdWUsIG1fZHVyYXRpb24pOworICAgICAgICBhcHBseUludGVybmFsKGFwcGxpY2F0aW9u
UmVzdWx0cywgZnJvbSwgdG8sIG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKwordm9pZCBOaWNvc2lhQW5pbWF0aW9uOjphcHBseUtlZXBpbmdJbnRlcm5hbFN0YXRl
KEFwcGxpY2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIE1vbm90b25pY1RpbWUgdGlt
ZSkKK3sKKyAgICBNb25vdG9uaWNUaW1lIG9sZExhc3RSZWZyZXNoZWRUaW1lID0gbV9sYXN0UmVm
cmVzaGVkVGltZTsKKyAgICBTZWNvbmRzIG9sZFRvdGFsUnVubmluZ1RpbWUgPSBtX3RvdGFsUnVu
bmluZ1RpbWU7CisgICAgQW5pbWF0aW9uU3RhdGUgb2xkU3RhdGUgPSBtX3N0YXRlOworCisgICAg
YXBwbHkoYXBwbGljYXRpb25SZXN1bHRzLCB0aW1lKTsKKworICAgIG1fbGFzdFJlZnJlc2hlZFRp
bWUgPSBvbGRMYXN0UmVmcmVzaGVkVGltZTsKKyAgICBtX3RvdGFsUnVubmluZ1RpbWUgPSBvbGRU
b3RhbFJ1bm5pbmdUaW1lOworICAgIG1fc3RhdGUgPSBvbGRTdGF0ZTsKK30KKwordm9pZCBOaWNv
c2lhQW5pbWF0aW9uOjpwYXVzZShTZWNvbmRzIHRpbWUpCit7CisgICAgbV9zdGF0ZSA9IEFuaW1h
dGlvblN0YXRlOjpQYXVzZWQ7CisgICAgbV9wYXVzZVRpbWUgPSB0aW1lOworfQorCit2b2lkIE5p
Y29zaWFBbmltYXRpb246OnJlc3VtZSgpCit7CisgICAgbV9zdGF0ZSA9IEFuaW1hdGlvblN0YXRl
OjpQbGF5aW5nOworICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIHdyb25nLiBtX3RvdGFsUnVubmlu
Z1RpbWUgaXMgY2xlYXJlZC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgzMTEzCisgICAgbV9wYXVzZVRpbWUgPSAwX3M7CisgICAgbV90b3RhbFJ1bm5p
bmdUaW1lID0gbV9wYXVzZVRpbWU7CisgICAgbV9sYXN0UmVmcmVzaGVkVGltZSA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOworfQorCitTZWNvbmRzIE5pY29zaWFBbmltYXRpb246OmNvbXB1dGVUb3Rh
bFJ1bm5pbmdUaW1lKE1vbm90b25pY1RpbWUgdGltZSkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBB
bmltYXRpb25TdGF0ZTo6UGF1c2VkKQorICAgICAgICByZXR1cm4gbV9wYXVzZVRpbWU7CisKKyAg
ICBNb25vdG9uaWNUaW1lIG9sZExhc3RSZWZyZXNoZWRUaW1lID0gbV9sYXN0UmVmcmVzaGVkVGlt
ZTsKKyAgICBtX2xhc3RSZWZyZXNoZWRUaW1lID0gdGltZTsKKyAgICBtX3RvdGFsUnVubmluZ1Rp
bWUgKz0gbV9sYXN0UmVmcmVzaGVkVGltZSAtIG9sZExhc3RSZWZyZXNoZWRUaW1lOworICAgIHJl
dHVybiBtX3RvdGFsUnVubmluZ1RpbWU7Cit9CisKK2Jvb2wgTmljb3NpYUFuaW1hdGlvbjo6aXNB
Y3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpT
dG9wcGVkIHx8IG1fZmlsbHNGb3J3YXJkczsKK30KKwordm9pZCBOaWNvc2lhQW5pbWF0aW9uOjph
cHBseUludGVybmFsKEFwcGxpY2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIGNvbnN0
IEFuaW1hdGlvblZhbHVlJiBmcm9tLCBjb25zdCBBbmltYXRpb25WYWx1ZSYgdG8sIGZsb2F0IHBy
b2dyZXNzKQoreworICAgIHN3aXRjaCAobV9rZXlmcmFtZXMucHJvcGVydHkoKSkgeworICAgIGNh
c2UgQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybToKKyAgICAgICAgYXBwbGljYXRpb25SZXN1bHRz
LnRyYW5zZm9ybSA9IGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKHN0YXRpY19jYXN0PGNvbnN0IFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlJj4oZnJvbSkudmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3Qg
VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUmPih0bykudmFsdWUoKSwgcHJvZ3Jlc3MsIG1fYm94U2l6
ZSwgbV9saXN0c01hdGNoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHk6CisgICAgICAgIGFwcGxpY2F0aW9uUmVzdWx0cy5vcGFjaXR5ID0gYXBwbHlP
cGFjaXR5QW5pbWF0aW9uKChzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlJj4o
ZnJvbSkudmFsdWUoKSksIChzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlJj4o
dG8pLnZhbHVlKCkpLCBwcm9ncmVzcyk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFuaW1h
dGVkUHJvcGVydHlGaWx0ZXI6CisgICAgICAgIGFwcGxpY2F0aW9uUmVzdWx0cy5maWx0ZXJzID0g
YXBwbHlGaWx0ZXJBbmltYXRpb24oc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFs
dWUmPihmcm9tKS52YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1
ZSY+KHRvKS52YWx1ZSgpLCBwcm9ncmVzcywgbV9ib3hTaXplKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwor
dm9pZCBOaWNvc2lhQW5pbWF0aW9uczo6YWRkKGNvbnN0IE5pY29zaWFBbmltYXRpb24mIGFuaW1h
dGlvbikKK3sKKyAgICAvLyBSZW1vdmUgdGhlIG9sZCBzdGF0ZSBpZiB3ZSBhcmUgcmVzdW1pbmcg
YSBwYXVzZWQgYW5pbWF0aW9uLgorICAgIHJlbW92ZShhbmltYXRpb24ubmFtZSgpLCBhbmltYXRp
b24ua2V5ZnJhbWVzKCkucHJvcGVydHkoKSk7CisKKyAgICBtX2FuaW1hdGlvbnMuYXBwZW5kKGFu
aW1hdGlvbik7Cit9CisKK3ZvaWQgTmljb3NpYUFuaW1hdGlvbnM6OnJlbW92ZShjb25zdCBTdHJp
bmcmIG5hbWUpCit7CisgICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFtZV0g
KGNvbnN0IE5pY29zaWFBbmltYXRpb24mIGFuaW1hdGlvbikgeworICAgICAgICByZXR1cm4gYW5p
bWF0aW9uLm5hbWUoKSA9PSBuYW1lOworICAgIH0pOworfQorCit2b2lkIE5pY29zaWFBbmltYXRp
b25zOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVy
dHkpCit7CisgICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFtZSwgcHJvcGVy
dHldIChjb25zdCBOaWNvc2lhQW5pbWF0aW9uJiBhbmltYXRpb24pIHsKKyAgICAgICAgcmV0dXJu
IGFuaW1hdGlvbi5uYW1lKCkgPT0gbmFtZSAmJiBhbmltYXRpb24ua2V5ZnJhbWVzKCkucHJvcGVy
dHkoKSA9PSBwcm9wZXJ0eTsKKyAgICB9KTsKK30KKwordm9pZCBOaWNvc2lhQW5pbWF0aW9uczo6
cGF1c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWNvbmRzIG9mZnNldCkKK3sKKyAgICBmb3IgKGF1
dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykgeworICAgICAgICBpZiAoYW5pbWF0aW9uLm5h
bWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgYW5pbWF0aW9uLnBhdXNlKG9mZnNldCk7CisgICAg
fQorfQorCit2b2lkIE5pY29zaWFBbmltYXRpb25zOjpzdXNwZW5kKE1vbm90b25pY1RpbWUgdGlt
ZSkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyB3cm9uZy4gYHBhdXNlYCB0YWtlcyB0aW1l
IG9mZnNldCAoU2Vjb25kcyksIG5vdCBNb25vdG9uaWNUaW1lLgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODMxMTIKKyAgICBmb3IgKGF1dG8mIGFuaW1h
dGlvbiA6IG1fYW5pbWF0aW9ucykKKyAgICAgICAgYW5pbWF0aW9uLnBhdXNlKHRpbWUuc2Vjb25k
c1NpbmNlRXBvY2goKSk7Cit9CisKK3ZvaWQgTmljb3NpYUFuaW1hdGlvbnM6OnJlc3VtZSgpCit7
CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnMpCisgICAgICAgIGFuaW1h
dGlvbi5yZXN1bWUoKTsKK30KKwordm9pZCBOaWNvc2lhQW5pbWF0aW9uczo6YXBwbHkoTmljb3Np
YUFuaW1hdGlvbjo6QXBwbGljYXRpb25SZXN1bHQmIGFwcGxpY2F0aW9uUmVzdWx0cywgTW9ub3Rv
bmljVGltZSB0aW1lKQoreworICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25z
KQorICAgICAgICBhbmltYXRpb24uYXBwbHkoYXBwbGljYXRpb25SZXN1bHRzLCB0aW1lKTsKK30K
Kwordm9pZCBOaWNvc2lhQW5pbWF0aW9uczo6YXBwbHlLZWVwaW5nSW50ZXJuYWxTdGF0ZShOaWNv
c2lhQW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3VsdCYgYXBwbGljYXRpb25SZXN1bHRzLCBNb25v
dG9uaWNUaW1lIHRpbWUpCit7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlv
bnMpCisgICAgICAgIGFuaW1hdGlvbi5hcHBseUtlZXBpbmdJbnRlcm5hbFN0YXRlKGFwcGxpY2F0
aW9uUmVzdWx0cywgdGltZSk7Cit9CisKK2Jvb2wgTmljb3NpYUFuaW1hdGlvbnM6Omhhc0FjdGl2
ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eUlEIHR5cGUpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHN0ZDo6YW55X29mKG1fYW5pbWF0aW9ucy5iZWdpbigpLCBtX2FuaW1hdGlvbnMuZW5k
KCksCisgICAgICAgIFsmdHlwZV0oY29uc3QgTmljb3NpYUFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7
CisgICAgICAgICAgICByZXR1cm4gYW5pbWF0aW9uLmlzQWN0aXZlKCkgJiYgYW5pbWF0aW9uLmtl
eWZyYW1lcygpLnByb3BlcnR5KCkgPT0gdHlwZTsKKyAgICAgICAgfSk7Cit9CisKK2Jvb2wgTmlj
b3NpYUFuaW1hdGlvbnM6Omhhc1J1bm5pbmdBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gc3RkOjphbnlfb2YobV9hbmltYXRpb25zLmJlZ2luKCksIG1fYW5pbWF0aW9ucy5lbmQoKSwK
KyAgICAgICAgW10oY29uc3QgTmljb3NpYUFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7CisgICAgICAg
ICAgICByZXR1cm4gYW5pbWF0aW9uLnN0YXRlKCkgPT0gTmljb3NpYUFuaW1hdGlvbjo6QW5pbWF0
aW9uU3RhdGU6OlBsYXlpbmc7CisgICAgICAgIH0pOworfQorCitOaWNvc2lhQW5pbWF0aW9ucyBO
aWNvc2lhQW5pbWF0aW9uczo6Z2V0QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAgTmlj
b3NpYUFuaW1hdGlvbnMgYWN0aXZlOworICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmlt
YXRpb25zKSB7CisgICAgICAgIGlmIChhbmltYXRpb24uaXNBY3RpdmUoKSkKKyAgICAgICAgICAg
IGFjdGl2ZS5hZGQoYW5pbWF0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIGFjdGl2ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgTmljb3NpYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRpb24uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
ZTgwZjViYjFlYzE4MjBlYjM4ZGMyMDc5NmNiMDkxZjVhYjEzMTZjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhQW5pbWF0
aW9uLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Cit9CisKK25hbWVz
cGFjZSBOaWNvc2lhIHsKKworY2xhc3MgTmljb3NpYUFuaW1hdGlvbiB7CitwdWJsaWM6CisgICAg
ZW51bSBjbGFzcyBBbmltYXRpb25TdGF0ZSB7IFBsYXlpbmcsIFBhdXNlZCwgU3RvcHBlZCB9Owor
CisgICAgc3RydWN0IEFwcGxpY2F0aW9uUmVzdWx0IHsKKyAgICAgICAgT3B0aW9uYWw8V2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg+IHRyYW5zZm9ybTsKKyAgICAgICAgT3B0aW9uYWw8ZG91
YmxlPiBvcGFjaXR5OworICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25z
PiBmaWx0ZXJzOworICAgICAgICBib29sIGhhc1J1bm5pbmdBbmltYXRpb25zIHsgZmFsc2UgfTsK
KyAgICB9OworCisgICAgTmljb3NpYUFuaW1hdGlvbigpCisgICAgICAgIDogbV9rZXlmcmFtZXMo
V2ViQ29yZTo6QW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQpCisgICAgeyB9CisgICAgTmljb3NpYUFu
aW1hdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkFuaW1hdGlvbiYsIGJv
b2wsIE1vbm90b25pY1RpbWUsIFNlY29uZHMsIEFuaW1hdGlvblN0YXRlKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBOaWNvc2lhQW5pbWF0aW9uKGNvbnN0IE5pY29zaWFBbmltYXRpb24mKTsKKworICAg
IHZvaWQgYXBwbHkoQXBwbGljYXRpb25SZXN1bHQmLCBNb25vdG9uaWNUaW1lKTsKKyAgICB2b2lk
IGFwcGx5S2VlcGluZ0ludGVybmFsU3RhdGUoQXBwbGljYXRpb25SZXN1bHQmLCBNb25vdG9uaWNU
aW1lKTsKKyAgICB2b2lkIHBhdXNlKFNlY29uZHMpOworICAgIHZvaWQgcmVzdW1lKCk7CisgICAg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0OworCisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9CisgICAgY29uc3QgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3Qm
IGtleWZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzOyB9CisgICAgQW5pbWF0aW9u
U3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgV2ViQ29yZTo6VGlt
aW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90aW1pbmdGdW5j
dGlvbi5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgYXBwbHlJbnRlcm5hbChBcHBsaWNh
dGlvblJlc3VsdCYsIGNvbnN0IFdlYkNvcmU6OkFuaW1hdGlvblZhbHVlJiBmcm9tLCBjb25zdCBX
ZWJDb3JlOjpBbmltYXRpb25WYWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKTsKKyAgICBTZWNvbmRz
IGNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKE1vbm90b25pY1RpbWUpOworCisgICAgU3RyaW5nIG1f
bmFtZTsKKyAgICBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCBtX2tleWZyYW1lczsKKyAgICBX
ZWJDb3JlOjpGbG9hdFNpemUgbV9ib3hTaXplOworICAgIFJlZlB0cjxXZWJDb3JlOjpUaW1pbmdG
dW5jdGlvbj4gbV90aW1pbmdGdW5jdGlvbjsKKyAgICBkb3VibGUgbV9pdGVyYXRpb25Db3VudDsK
KyAgICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBXZWJDb3JlOjpBbmltYXRpb246OkFuaW1hdGlv
bkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKKyAgICBib29sIG1fZmlsbHNGb3J3YXJkczsKKyAgICBi
b29sIG1fbGlzdHNNYXRjaDsKKyAgICBNb25vdG9uaWNUaW1lIG1fc3RhcnRUaW1lOworICAgIFNl
Y29uZHMgbV9wYXVzZVRpbWU7CisgICAgU2Vjb25kcyBtX3RvdGFsUnVubmluZ1RpbWU7CisgICAg
TW9ub3RvbmljVGltZSBtX2xhc3RSZWZyZXNoZWRUaW1lOworICAgIEFuaW1hdGlvblN0YXRlIG1f
c3RhdGU7Cit9OworCitjbGFzcyBOaWNvc2lhQW5pbWF0aW9ucyB7CitwdWJsaWM6CisgICAgTmlj
b3NpYUFuaW1hdGlvbnMoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIGFkZChjb25zdCBOaWNvc2lh
QW5pbWF0aW9uJik7CisgICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2
b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkFuaW1hdGVkUHJvcGVydHlJ
RCk7CisgICAgdm9pZCBwYXVzZShjb25zdCBTdHJpbmcmLCBTZWNvbmRzKTsKKyAgICB2b2lkIHN1
c3BlbmQoTW9ub3RvbmljVGltZSk7CisgICAgdm9pZCByZXN1bWUoKTsKKworICAgIHZvaWQgYXBw
bHkoTmljb3NpYUFuaW1hdGlvbjo6QXBwbGljYXRpb25SZXN1bHQmLCBNb25vdG9uaWNUaW1lKTsK
KyAgICB2b2lkIGFwcGx5S2VlcGluZ0ludGVybmFsU3RhdGUoTmljb3NpYUFuaW1hdGlvbjo6QXBw
bGljYXRpb25SZXN1bHQmLCBNb25vdG9uaWNUaW1lKTsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9ucy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8
Tmljb3NpYUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlv
bnM7IH0KKyAgICBWZWN0b3I8Tmljb3NpYUFuaW1hdGlvbj4mIGFuaW1hdGlvbnMoKSB7IHJldHVy
biBtX2FuaW1hdGlvbnM7IH0KKworICAgIGJvb2wgaGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25z
dDsKKyAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoV2ViQ29yZTo6QW5pbWF0ZWRQ
cm9wZXJ0eUlEIHR5cGUpIGNvbnN0OworICAgIE5pY29zaWFBbmltYXRpb25zIGdldEFjdGl2ZUFu
aW1hdGlvbnMoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8Tmljb3NpYUFuaW1hdGlv
bj4gbV9hbmltYXRpb25zOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1MYXllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1MYXllci5oCmlu
ZGV4IDExYzYwNTk4NjY3MzNlN2RjNzVmODkyYmJmMzhmZDJjYjBlMjMzYjAuLmFmOWYzMDUyYjBk
OTE0MzQwZjM5MGQ0MDUyZDhjNjM0MzJiOTM0OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBsYXRmb3JtTGF5ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQbGF0Zm9ybUxh
eWVyLmgKQEAgLTM1LDggKzM1LDggQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJOaWNvc2lhQW5pbWF0ZWRCYWNraW5nU3RvcmVDbGll
bnQuaCIKKyNpbmNsdWRlICJOaWNvc2lhQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiTmljb3NpYVNj
ZW5lSW50ZWdyYXRpb24uaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgiCiAj
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24u
aD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgpAQCAtMTcxLDcgKzE3MSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOwogICAgICAgICAvLyBGSVhN
RTogRGVzcGl0ZSB0aGUgbmFtZSwgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QKICAgICAgICAg
Ly8gVGV4dHVyZU1hcHBlci1zcGVjaWZpYy4gU2hvdWxkIGJlIHJlbmFtZWQgd2hlbiBuZWNlc3Nh
cnkuCi0gICAgICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zIGFuaW1hdGlvbnM7
CisgICAgICAgIE5pY29zaWFBbmltYXRpb25zIGFuaW1hdGlvbnM7CiAKICAgICAgICAgVmVjdG9y
PFJlZlB0cjxDb21wb3NpdGlvbkxheWVyPj4gY2hpbGRyZW47CiAgICAgICAgIFJlZlB0cjxDb21w
b3NpdGlvbkxheWVyPiByZXBsaWNhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlci5jcHAKaW5kZXggZWFkZmJhMGY2YzY3ODY4NjZlODI0ODFkOTJlMzI2Yzc2OGZiZDVmNi4u
ZmZkZTBkZTc0MWM4NGFlNTRmZGZhNTgxMWJlZjA0YTZjYmQ2M2Y0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckZhY3RvcnkuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJBbmltYXRp
b24uaCIKKyNpbmNsdWRlICJOaWNvc2lhQW5pbWF0aW9uLmgiCiAKICNpZiAhVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQogCkBAIC01NzIsNyArNTcyLDcgQEAgYm9vbCBHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxp
c3QKICAgICAgICAgbGlzdHNNYXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1
ZUxpc3QsIGhhc0JpZ1JvdGF0aW9uKSA+PSAwOwogCiAgICAgY29uc3QgTW9ub3RvbmljVGltZSBj
dXJyZW50VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgIG1fYW5pbWF0aW9ucy5hZGQo
VGV4dHVyZU1hcHBlckFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUs
ICphbmltLCBsaXN0c01hdGNoLCBjdXJyZW50VGltZSAtIFNlY29uZHModGltZU9mZnNldCksIDBf
cywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlBsYXlpbmcpKTsKKyAg
ICBtX2FuaW1hdGlvbnMuYWRkKE5pY29zaWE6Ok5pY29zaWFBbmltYXRpb24oa2V5ZnJhbWVzTmFt
ZSwgdmFsdWVMaXN0LCBib3hTaXplLCAqYW5pbSwgbGlzdHNNYXRjaCwgY3VycmVudFRpbWUgLSBT
ZWNvbmRzKHRpbWVPZmZzZXQpLCAwX3MsIE5pY29zaWE6Ok5pY29zaWFBbmltYXRpb246OkFuaW1h
dGlvblN0YXRlOjpQbGF5aW5nKSk7CiAgICAgLy8gbV9hbmltYXRpb25TdGFydFRpbWUgaXMgdGhl
IHRpbWUgb2YgdGhlIGZpcnN0IHJlYWwgZnJhbWUgb2YgYW5pbWF0aW9uLCBub3cgb3IgZGVsYXll
ZCBieSBhIG5lZ2F0aXZlIG9mZnNldC4KICAgICBpZiAoU2Vjb25kcyh0aW1lT2Zmc2V0KSA+IDBf
cykKICAgICAgICAgbV9hbmltYXRpb25TdGFydFRpbWUgPSBjdXJyZW50VGltZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKaW5kZXggOTgwMDQxZWVkOTE4Y2M3MGU2OTVl
MjE1Y2NjMDQ4N2RjMTc3YjM3Ny4uZWI0YTVkMDA0OGUzZGFlYTc4ODc5Nzg5MWZmNWM5YWYzYjU5
YWM2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTE2Miw3
ICsxNjIsNyBAQCBwcml2YXRlOgogCiAgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIG1f
Y29udGVudHNMYXllcjsKICAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0OwotICAgIFRl
eHR1cmVNYXBwZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsKKyAgICBOaWNvc2lhOjpOaWNvc2lh
QW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CiAgICAgTW9ub3RvbmljVGltZSBtX2FuaW1hdGlvblN0
YXJ0VGltZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU1NDljYWJlMjFhNWYwMGU4ZWI3MGExMGNlNDU5MWQ1
ODk4NWYzOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1h
dGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0K
LSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJMYXlvdXRTaXplLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5k
RnVuYyhGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uJiB0b09wLCBkb3Vi
bGUgcHJvZ3Jlc3MsIGNvbnN0IEZsb2F0U2l6ZSYsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0g
ZmFsc2UpCi17Ci0gICAgcmV0dXJuIHRvT3AuYmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgYmxlbmRU
b1Bhc3N0aHJvdWdoKTsKLX0KLQotc3RhdGljIEZpbHRlck9wZXJhdGlvbnMgYXBwbHlGaWx0ZXJB
bmltYXRpb24oY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQotewot
ICAgIC8vIEZpcnN0IGZyYW1lIG9mIGFuIGFuaW1hdGlvbi4KLSAgICBpZiAoIXByb2dyZXNzKQot
ICAgICAgICByZXR1cm4gZnJvbTsKLQotICAgIC8vIExhc3QgZnJhbWUgb2YgYW4gYW5pbWF0aW9u
LgotICAgIGlmIChwcm9ncmVzcyA9PSAxKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICBpZiAo
IWZyb20uaXNFbXB0eSgpICYmICF0by5pc0VtcHR5KCkgJiYgIWZyb20ub3BlcmF0aW9uc01hdGNo
KHRvKSkKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7
Ci0KLSAgICBzaXplX3QgZnJvbVNpemUgPSBmcm9tLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAg
c2l6ZV90IHRvU2l6ZSA9IHRvLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHNpemUg
PSBzdGQ6Om1heChmcm9tU2l6ZSwgdG9TaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7IGkrKykgewotICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9tT3AgPSAo
aSA8IGZyb21TaXplKSA/IGZyb20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogbnVsbHB0cjsKLSAg
ICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRvLm9w
ZXJhdGlvbnMoKVtpXS5nZXQoKSA6IG51bGxwdHI7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVy
YXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyBibGVuZEZ1bmMoZnJvbU9wLmdldCgpLCAqdG9PcCwg
cHJvZ3Jlc3MsIGJveFNpemUpIDogKGZyb21PcCA/IGJsZW5kRnVuYyhudWxscHRyLCAqZnJvbU9w
LCBwcm9ncmVzcywgYm94U2l6ZSwgdHJ1ZSkgOiBudWxscHRyKTsKLSAgICAgICAgaWYgKGJsZW5k
ZWRPcCkKLSAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91
Z2hGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgpOwotICAgICAgICAgICAgaWYgKHByb2dyZXNzID4g
MC41KQotICAgICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3AgPyB0
b09wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoZnJvbU9wID8gZnJvbU9wIDogV1RGTW92
ZShpZGVudGl0eU9wKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1zdGF0aWMgYm9vbCBzaG91bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUoQW5pbWF0aW9uOjpB
bmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbG9vcENvdW50KQotewotICAgIHJldHVy
biAoZGlyZWN0aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlICYm
IGxvb3BDb3VudCAmIDEpCi0gICAgICAgIHx8IChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmlt
YXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNlICYmICEobG9vcENvdW50ICYgMSkpCi0gICAg
ICAgIHx8IGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2U7
Ci19Ci0KLXN0YXRpYyBkb3VibGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKGRvdWJsZSBydW5u
aW5nVGltZSwgZG91YmxlIGR1cmF0aW9uLCBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24sIGRvdWJsZSBpdGVyYXRpb25Db3VudCkKLXsKLSAgICBpZiAoIWR1cmF0aW9uKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIGNvbnN0IGludCBsb29wQ291bnQgPSBydW5uaW5nVGlt
ZSAvIGR1cmF0aW9uOwotICAgIGNvbnN0IGRvdWJsZSBsYXN0RnVsbExvb3AgPSBkdXJhdGlvbiAq
IGRvdWJsZShsb29wQ291bnQpOwotICAgIGNvbnN0IGRvdWJsZSByZW1haW5kZXIgPSBydW5uaW5n
VGltZSAtIGxhc3RGdWxsTG9vcDsKLSAgICAvLyBJZ25vcmUgcmVtYWluZGVyIHdoZW4gd2UndmUg
cmVhY2hlZCB0aGUgZW5kIG9mIGFuaW1hdGlvbi4KLSAgICBjb25zdCBkb3VibGUgbm9ybWFsaXpl
ZCA9IChsb29wQ291bnQgPT0gaXRlcmF0aW9uQ291bnQpID8gMS4wIDogKHJlbWFpbmRlciAvIGR1
cmF0aW9uKTsKLQotICAgIHJldHVybiBzaG91bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUoZGlyZWN0
aW9uLCBsb29wQ291bnQpID8gMSAtIG5vcm1hbGl6ZWQgOiBub3JtYWxpemVkOwotfQotCi1zdGF0
aWMgZG91YmxlIG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZUZvckZpbGxzRm9yd2FyZHMoZG91Ymxl
IGl0ZXJhdGlvbkNvdW50LCBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24p
Ci17Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbk5v
cm1hbCkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246
OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBzaG91bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUoZGlyZWN0aW9uLCBpdGVyYXRpb25Db3VudCkg
PyAxIDogMDsKLX0KLQotc3RhdGljIGZsb2F0IGFwcGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBm
cm9tT3BhY2l0eSwgZmxvYXQgdG9PcGFjaXR5LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8g
T3B0aW1pemF0aW9uOiBzcGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KLSAg
ICBpZiAocHJvZ3Jlc3MgPT0gMS4wKQotICAgICAgICByZXR1cm4gdG9PcGFjaXR5OwotCi0gICAg
aWYgKCFwcm9ncmVzcykKLSAgICAgICAgcmV0dXJuIGZyb21PcGFjaXR5OwotCi0gICAgcmV0dXJu
IGZyb21PcGFjaXR5ICsgcHJvZ3Jlc3MgKiAodG9PcGFjaXR5IC0gZnJvbU9wYWNpdHkpOwotfQot
Ci1zdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYg
dG8sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplLCBib29sIGxpc3Rz
TWF0Y2gpCi17Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotCi0gICAgLy8gRmly
c3QgZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgotICAgIGlmICghcHJvZ3Jlc3MpIHsKLSAgICAgICAg
ZnJvbS5hcHBseShib3hTaXplLCBtYXRyaXgpOwotICAgICAgICByZXR1cm4gbWF0cml4OwotICAg
IH0KLQotICAgIC8vIExhc3QgZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgotICAgIGlmIChwcm9ncmVz
cyA9PSAxKSB7Ci0gICAgICAgIHRvLmFwcGx5KGJveFNpemUsIG1hdHJpeCk7Ci0gICAgICAgIHJl
dHVybiBtYXRyaXg7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgaGF2ZSBpbmNvbXBhdGlibGUgb3Bl
cmF0aW9uIGxpc3RzLCB3ZSBibGVuZCB0aGUgcmVzdWx0aW5nIG1hdHJpY2VzLgotICAgIGlmICgh
bGlzdHNNYXRjaCkgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tTWF0cml4Owot
ICAgICAgICB0by5hcHBseShib3hTaXplLCBtYXRyaXgpOwotICAgICAgICBmcm9tLmFwcGx5KGJv
eFNpemUsIGZyb21NYXRyaXgpOwotICAgICAgICBtYXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJv
Z3Jlc3MpOwotICAgICAgICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAgIC8vIEFuaW1hdGlv
biB0byAiLXdlYmtpdC10cmFuc2Zvcm06IG5vbmUiLgotICAgIGlmICghdG8uc2l6ZSgpKSB7Ci0g
ICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZChmcm9tKTsKLSAgICAgICAgZm9yIChh
dXRvJiBvcGVyYXRpb24gOiBibGVuZGVkLm9wZXJhdGlvbnMoKSkKLSAgICAgICAgICAgIG9wZXJh
dGlvbi0+YmxlbmQobnVsbHB0ciwgcHJvZ3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJveFNp
emUpOwotICAgICAgICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAgIC8vIEFuaW1hdGlvbiBm
cm9tICItd2Via2l0LXRyYW5zZm9ybTogbm9uZSIuCi0gICAgaWYgKCFmcm9tLnNpemUoKSkgewot
ICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQodG8pOwotICAgICAgICBmb3IgKGF1
dG8mIG9wZXJhdGlvbiA6IGJsZW5kZWQub3BlcmF0aW9ucygpKQotICAgICAgICAgICAgb3BlcmF0
aW9uLT5ibGVuZChudWxscHRyLCAxIC0gcHJvZ3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJv
eFNpemUpOwotICAgICAgICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAgIC8vIE5vcm1hbCBh
bmltYXRpb24gd2l0aCBhIG1hdGNoaW5nIG9wZXJhdGlvbiBsaXN0LgotICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbnMgYmxlbmRlZCh0byk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibGVuZGVk
Lm9wZXJhdGlvbnMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClb
aV0tPmJsZW5kKGZyb20uYXQoaSksIHByb2dyZXNzLCAhZnJvbS5hdChpKSktPmFwcGx5KG1hdHJp
eCwgYm94U2l6ZSk7Ci0gICAgcmV0dXJuIG1hdHJpeDsKLX0KLQotc3RhdGljIGNvbnN0IFRpbWlu
Z0Z1bmN0aW9uJiB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGNvbnN0IEFuaW1hdGlv
blZhbHVlJiBhbmltYXRpb25WYWx1ZSwgY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5p
bWF0aW9uKQotewotICAgIGlmIChhbmltYXRpb25WYWx1ZS50aW1pbmdGdW5jdGlvbigpKQotICAg
ICAgICByZXR1cm4gKmFuaW1hdGlvblZhbHVlLnRpbWluZ0Z1bmN0aW9uKCk7Ci0gICAgaWYgKGFu
aW1hdGlvbi50aW1pbmdGdW5jdGlvbigpKQotICAgICAgICByZXR1cm4gKmFuaW1hdGlvbi50aW1p
bmdGdW5jdGlvbigpOwotICAgIHJldHVybiBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpkZWZh
dWx0VGltaW5nRnVuY3Rpb24oKTsKLX0KLQotVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4dHVy
ZU1hcHBlckFuaW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiBrZXlmcmFtZXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9u
JiBhbmltYXRpb24sIGJvb2wgbGlzdHNNYXRjaCwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUsIFNl
Y29uZHMgcGF1c2VUaW1lLCBBbmltYXRpb25TdGF0ZSBzdGF0ZSkKLSAgICA6IG1fbmFtZShuYW1l
LmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpID8gbmFtZSA6IG5hbWUuaXNvbGF0ZWRDb3B5
KCkpCi0gICAgLCBtX2tleWZyYW1lcyhrZXlmcmFtZXMpCi0gICAgLCBtX2JveFNpemUoYm94U2l6
ZSkKLSAgICAsIG1fdGltaW5nRnVuY3Rpb24oYW5pbWF0aW9uLnRpbWluZ0Z1bmN0aW9uKCktPmNs
b25lKCkpCi0gICAgLCBtX2l0ZXJhdGlvbkNvdW50KGFuaW1hdGlvbi5pdGVyYXRpb25Db3VudCgp
KQotICAgICwgbV9kdXJhdGlvbihhbmltYXRpb24uZHVyYXRpb24oKSkKLSAgICAsIG1fZGlyZWN0
aW9uKGFuaW1hdGlvbi5kaXJlY3Rpb24oKSkKLSAgICAsIG1fZmlsbHNGb3J3YXJkcyhhbmltYXRp
b24uZmlsbHNGb3J3YXJkcygpKQotICAgICwgbV9saXN0c01hdGNoKGxpc3RzTWF0Y2gpCi0gICAg
LCBtX3N0YXJ0VGltZShzdGFydFRpbWUpCi0gICAgLCBtX3BhdXNlVGltZShwYXVzZVRpbWUpCi0g
ICAgLCBtX3RvdGFsUnVubmluZ1RpbWUoMF9zKQotICAgICwgbV9sYXN0UmVmcmVzaGVkVGltZSht
X3N0YXJ0VGltZSkKLSAgICAsIG1fc3RhdGUoc3RhdGUpCi17Ci19Ci0KLVRleHR1cmVNYXBwZXJB
bmltYXRpb246OlRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbiYgb3RoZXIpCi0gICAgOiBtX25hbWUob3RoZXIubV9uYW1lLmlzU2FmZVRvU2VuZFRvQW5v
dGhlclRocmVhZCgpID8gb3RoZXIubV9uYW1lIDogb3RoZXIubV9uYW1lLmlzb2xhdGVkQ29weSgp
KQotICAgICwgbV9rZXlmcmFtZXMob3RoZXIubV9rZXlmcmFtZXMpCi0gICAgLCBtX2JveFNpemUo
b3RoZXIubV9ib3hTaXplKQotICAgICwgbV90aW1pbmdGdW5jdGlvbihvdGhlci5tX3RpbWluZ0Z1
bmN0aW9uLT5jbG9uZSgpKQotICAgICwgbV9pdGVyYXRpb25Db3VudChvdGhlci5tX2l0ZXJhdGlv
bkNvdW50KQotICAgICwgbV9kdXJhdGlvbihvdGhlci5tX2R1cmF0aW9uKQotICAgICwgbV9kaXJl
Y3Rpb24ob3RoZXIubV9kaXJlY3Rpb24pCi0gICAgLCBtX2ZpbGxzRm9yd2FyZHMob3RoZXIubV9m
aWxsc0ZvcndhcmRzKQotICAgICwgbV9saXN0c01hdGNoKG90aGVyLm1fbGlzdHNNYXRjaCkKLSAg
ICAsIG1fc3RhcnRUaW1lKG90aGVyLm1fc3RhcnRUaW1lKQotICAgICwgbV9wYXVzZVRpbWUob3Ro
ZXIubV9wYXVzZVRpbWUpCi0gICAgLCBtX3RvdGFsUnVubmluZ1RpbWUob3RoZXIubV90b3RhbFJ1
bm5pbmdUaW1lKQotICAgICwgbV9sYXN0UmVmcmVzaGVkVGltZShvdGhlci5tX2xhc3RSZWZyZXNo
ZWRUaW1lKQotICAgICwgbV9zdGF0ZShvdGhlci5tX3N0YXRlKQotewotfQotCi12b2lkIFRleHR1
cmVNYXBwZXJBbmltYXRpb246OmFwcGx5KEFwcGxpY2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJl
c3VsdHMsIE1vbm90b25pY1RpbWUgdGltZSkKLXsKLSAgICBpZiAoIWlzQWN0aXZlKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFNlY29uZHMgdG90YWxSdW5uaW5nVGltZSA9IGNvbXB1dGVUb3Rh
bFJ1bm5pbmdUaW1lKHRpbWUpOwotICAgIGRvdWJsZSBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxp
emVkQW5pbWF0aW9uVmFsdWUodG90YWxSdW5uaW5nVGltZS5zZWNvbmRzKCksIG1fZHVyYXRpb24s
IG1fZGlyZWN0aW9uLCBtX2l0ZXJhdGlvbkNvdW50KTsKLQotICAgIGlmIChtX2l0ZXJhdGlvbkNv
dW50ICE9IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSAmJiB0b3RhbFJ1bm5pbmdU
aW1lLnNlY29uZHMoKSA+PSBtX2R1cmF0aW9uICogbV9pdGVyYXRpb25Db3VudCkgewotICAgICAg
ICBtX3N0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0b3BwZWQ7Ci0gICAgICAgIG1fcGF1c2VUaW1l
ID0gMF9zOwotICAgICAgICBpZiAobV9maWxsc0ZvcndhcmRzKQotICAgICAgICAgICAgbm9ybWFs
aXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yRmlsbHNGb3J3YXJkcyhtX2l0
ZXJhdGlvbkNvdW50LCBtX2RpcmVjdGlvbik7Ci0gICAgfQotCi0gICAgYXBwbGljYXRpb25SZXN1
bHRzLmhhc1J1bm5pbmdBbmltYXRpb25zIHw9IChtX3N0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQ
bGF5aW5nKTsKLQotICAgIGlmICghbm9ybWFsaXplZFZhbHVlKSB7Ci0gICAgICAgIGFwcGx5SW50
ZXJuYWwoYXBwbGljYXRpb25SZXN1bHRzLCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMu
YXQoMSksIDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG5vcm1hbGl6ZWRW
YWx1ZSA9PSAxLjApIHsKLSAgICAgICAgYXBwbHlJbnRlcm5hbChhcHBsaWNhdGlvblJlc3VsdHMs
IG1fa2V5ZnJhbWVzLmF0KG1fa2V5ZnJhbWVzLnNpemUoKSAtIDIpLCBtX2tleWZyYW1lcy5hdCht
X2tleWZyYW1lcy5zaXplKCkgLSAxKSwgMSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKG1fa2V5ZnJhbWVzLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgIGF1dG8mIHRpbWluZ0Z1bmN0
aW9uID0gdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShtX2tleWZyYW1lcy5hdCgwKSwg
KnRoaXMpOwotICAgICAgICBub3JtYWxpemVkVmFsdWUgPSB0aW1pbmdGdW5jdGlvbi50cmFuc2Zv
cm1UaW1lKG5vcm1hbGl6ZWRWYWx1ZSwgbV9kdXJhdGlvbik7Ci0gICAgICAgIGFwcGx5SW50ZXJu
YWwoYXBwbGljYXRpb25SZXN1bHRzLCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQo
MSksIG5vcm1hbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgewotICAgICAg
ICBjb25zdCBBbmltYXRpb25WYWx1ZSYgZnJvbSA9IG1fa2V5ZnJhbWVzLmF0KGkpOwotICAgICAg
ICBjb25zdCBBbmltYXRpb25WYWx1ZSYgdG8gPSBtX2tleWZyYW1lcy5hdChpICsgMSk7Ci0gICAg
ICAgIGlmIChmcm9tLmtleVRpbWUoKSA+IG5vcm1hbGl6ZWRWYWx1ZSB8fCB0by5rZXlUaW1lKCkg
PCBub3JtYWxpemVkVmFsdWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBub3Jt
YWxpemVkVmFsdWUgPSAobm9ybWFsaXplZFZhbHVlIC0gZnJvbS5rZXlUaW1lKCkpIC8gKHRvLmtl
eVRpbWUoKSAtIGZyb20ua2V5VGltZSgpKTsKLSAgICAgICAgYXV0byYgdGltaW5nRnVuY3Rpb24g
PSB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGZyb20sICp0aGlzKTsKLSAgICAgICAg
bm9ybWFsaXplZFZhbHVlID0gdGltaW5nRnVuY3Rpb24udHJhbnNmb3JtVGltZShub3JtYWxpemVk
VmFsdWUsIG1fZHVyYXRpb24pOwotICAgICAgICBhcHBseUludGVybmFsKGFwcGxpY2F0aW9uUmVz
dWx0cywgZnJvbSwgdG8sIG5vcm1hbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphcHBseUtlZXBpbmdJbnRlcm5hbFN0
YXRlKEFwcGxpY2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIE1vbm90b25pY1RpbWUg
dGltZSkKLXsKLSAgICBNb25vdG9uaWNUaW1lIG9sZExhc3RSZWZyZXNoZWRUaW1lID0gbV9sYXN0
UmVmcmVzaGVkVGltZTsKLSAgICBTZWNvbmRzIG9sZFRvdGFsUnVubmluZ1RpbWUgPSBtX3RvdGFs
UnVubmluZ1RpbWU7Ci0gICAgQW5pbWF0aW9uU3RhdGUgb2xkU3RhdGUgPSBtX3N0YXRlOwotCi0g
ICAgYXBwbHkoYXBwbGljYXRpb25SZXN1bHRzLCB0aW1lKTsKLQotICAgIG1fbGFzdFJlZnJlc2hl
ZFRpbWUgPSBvbGRMYXN0UmVmcmVzaGVkVGltZTsKLSAgICBtX3RvdGFsUnVubmluZ1RpbWUgPSBv
bGRUb3RhbFJ1bm5pbmdUaW1lOwotICAgIG1fc3RhdGUgPSBvbGRTdGF0ZTsKLX0KLQotdm9pZCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpwYXVzZShTZWNvbmRzIHRpbWUpCi17Ci0gICAgbV9zdGF0
ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWQ7Ci0gICAgbV9wYXVzZVRpbWUgPSB0aW1lOwotfQot
Ci12b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb246OnJlc3VtZSgpCi17Ci0gICAgbV9zdGF0ZSA9
IEFuaW1hdGlvblN0YXRlOjpQbGF5aW5nOwotICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIHdyb25n
LiBtX3RvdGFsUnVubmluZ1RpbWUgaXMgY2xlYXJlZC4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzMTEzCi0gICAgbV9wYXVzZVRpbWUgPSAwX3M7Ci0g
ICAgbV90b3RhbFJ1bm5pbmdUaW1lID0gbV9wYXVzZVRpbWU7Ci0gICAgbV9sYXN0UmVmcmVzaGVk
VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotfQotCi1TZWNvbmRzIFRleHR1cmVNYXBwZXJB
bmltYXRpb246OmNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKE1vbm90b25pY1RpbWUgdGltZSkKLXsK
LSAgICBpZiAobV9zdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkKQotICAgICAgICByZXR1
cm4gbV9wYXVzZVRpbWU7Ci0KLSAgICBNb25vdG9uaWNUaW1lIG9sZExhc3RSZWZyZXNoZWRUaW1l
ID0gbV9sYXN0UmVmcmVzaGVkVGltZTsKLSAgICBtX2xhc3RSZWZyZXNoZWRUaW1lID0gdGltZTsK
LSAgICBtX3RvdGFsUnVubmluZ1RpbWUgKz0gbV9sYXN0UmVmcmVzaGVkVGltZSAtIG9sZExhc3RS
ZWZyZXNoZWRUaW1lOwotICAgIHJldHVybiBtX3RvdGFsUnVubmluZ1RpbWU7Ci19Ci0KLWJvb2wg
VGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBt
X3N0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpTdG9wcGVkIHx8IG1fZmlsbHNGb3J3YXJkczsKLX0K
LQotdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphcHBseUludGVybmFsKEFwcGxpY2F0aW9u
UmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIGNvbnN0IEFuaW1hdGlvblZhbHVlJiBmcm9tLCBj
b25zdCBBbmltYXRpb25WYWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKQotewotICAgIHN3aXRjaCAo
bV9rZXlmcmFtZXMucHJvcGVydHkoKSkgewotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVRyYW5z
Zm9ybToKLSAgICAgICAgYXBwbGljYXRpb25SZXN1bHRzLnRyYW5zZm9ybSA9IGFwcGx5VHJhbnNm
b3JtQW5pbWF0aW9uKHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlJj4o
ZnJvbSkudmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUm
Pih0bykudmFsdWUoKSwgcHJvZ3Jlc3MsIG1fYm94U2l6ZSwgbV9saXN0c01hdGNoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgICAgIGFw
cGxpY2F0aW9uUmVzdWx0cy5vcGFjaXR5ID0gYXBwbHlPcGFjaXR5QW5pbWF0aW9uKChzdGF0aWNf
Y2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlJj4oZnJvbSkudmFsdWUoKSksIChzdGF0aWNf
Y2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlJj4odG8pLnZhbHVlKCkpLCBwcm9ncmVzcyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlGaWx0ZXI6Ci0gICAg
ICAgIGFwcGxpY2F0aW9uUmVzdWx0cy5maWx0ZXJzID0gYXBwbHlGaWx0ZXJBbmltYXRpb24oc3Rh
dGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUmPihmcm9tKS52YWx1ZSgpLCBzdGF0
aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KHRvKS52YWx1ZSgpLCBwcm9ncmVz
cywgbV9ib3hTaXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uczo6YWRkKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbikKLXsKLSAg
ICAvLyBSZW1vdmUgdGhlIG9sZCBzdGF0ZSBpZiB3ZSBhcmUgcmVzdW1pbmcgYSBwYXVzZWQgYW5p
bWF0aW9uLgotICAgIHJlbW92ZShhbmltYXRpb24ubmFtZSgpLCBhbmltYXRpb24ua2V5ZnJhbWVz
KCkucHJvcGVydHkoKSk7Ci0KLSAgICBtX2FuaW1hdGlvbnMuYXBwZW5kKGFuaW1hdGlvbik7Ci19
Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5h
bWUpCi17Ci0gICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFtZV0gKGNvbnN0
IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbikgewotICAgICAgICByZXR1cm4gYW5p
bWF0aW9uLm5hbWUoKSA9PSBuYW1lOwotICAgIH0pOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJB
bmltYXRpb25zOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBBbmltYXRlZFByb3BlcnR5SUQg
cHJvcGVydHkpCi17Ci0gICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFtZSwg
cHJvcGVydHldIChjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsKLSAg
ICAgICAgcmV0dXJuIGFuaW1hdGlvbi5uYW1lKCkgPT0gbmFtZSAmJiBhbmltYXRpb24ua2V5ZnJh
bWVzKCkucHJvcGVydHkoKSA9PSBwcm9wZXJ0eTsKLSAgICB9KTsKLX0KLQotdm9pZCBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uczo6cGF1c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWNvbmRzIG9mZnNl
dCkKLXsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykgewotICAgICAg
ICBpZiAoYW5pbWF0aW9uLm5hbWUoKSA9PSBuYW1lKQotICAgICAgICAgICAgYW5pbWF0aW9uLnBh
dXNlKG9mZnNldCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpz
dXNwZW5kKE1vbm90b25pY1RpbWUgdGltZSkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyB3
cm9uZy4gYHBhdXNlYCB0YWtlcyB0aW1lIG9mZnNldCAoU2Vjb25kcyksIG5vdCBNb25vdG9uaWNU
aW1lLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODMx
MTIKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykKLSAgICAgICAgYW5p
bWF0aW9uLnBhdXNlKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKSk7Ci19Ci0KLXZvaWQgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbnM6OnJlc3VtZSgpCi17Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24g
OiBtX2FuaW1hdGlvbnMpCi0gICAgICAgIGFuaW1hdGlvbi5yZXN1bWUoKTsKLX0KLQotdm9pZCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6YXBwbHkoVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6QXBw
bGljYXRpb25SZXN1bHQmIGFwcGxpY2F0aW9uUmVzdWx0cywgTW9ub3RvbmljVGltZSB0aW1lKQot
ewotICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25zKQotICAgICAgICBhbmlt
YXRpb24uYXBwbHkoYXBwbGljYXRpb25SZXN1bHRzLCB0aW1lKTsKLX0KLQotdm9pZCBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uczo6YXBwbHlLZWVwaW5nSW50ZXJuYWxTdGF0ZShUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3VsdCYgYXBwbGljYXRpb25SZXN1bHRzLCBNb25vdG9u
aWNUaW1lIHRpbWUpCi17Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnMp
Ci0gICAgICAgIGFuaW1hdGlvbi5hcHBseUtlZXBpbmdJbnRlcm5hbFN0YXRlKGFwcGxpY2F0aW9u
UmVzdWx0cywgdGltZSk7Ci19Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6Omhhc0Fj
dGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eUlEIHR5cGUpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHN0ZDo6YW55X29mKG1fYW5pbWF0aW9ucy5iZWdpbigpLCBtX2FuaW1hdGlvbnMu
ZW5kKCksCi0gICAgICAgIFsmdHlwZV0oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5p
bWF0aW9uKSB7IHJldHVybiBhbmltYXRpb24uaXNBY3RpdmUoKSAmJiBhbmltYXRpb24ua2V5ZnJh
bWVzKCkucHJvcGVydHkoKSA9PSB0eXBlOyB9KTsKLX0KLQotYm9vbCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uczo6aGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiBzdGQ6
OmFueV9vZihtX2FuaW1hdGlvbnMuYmVnaW4oKSwgbV9hbmltYXRpb25zLmVuZCgpLAotICAgICAg
ICBbXShjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgcmV0dXJuIGFu
aW1hdGlvbi5zdGF0ZSgpID09IFRleHR1cmVNYXBwZXJBbmltYXRpb246OkFuaW1hdGlvblN0YXRl
OjpQbGF5aW5nOyB9KTsKLX0KLQotVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAotewotICAgIFRleHR1cmVN
YXBwZXJBbmltYXRpb25zIGFjdGl2ZTsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5p
bWF0aW9ucykgewotICAgICAgICBpZiAoYW5pbWF0aW9uLmlzQWN0aXZlKCkpCi0gICAgICAgICAg
ICBhY3RpdmUuYWRkKGFuaW1hdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBhY3RpdmU7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjJlMjA0N2Y5ZTFmNjFkMDE5NmM3MGNlNjRj
YzdhODE2M2YzMTAwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
QW5pbWF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgVGV4dHVyZU1hcHBlckFuaW1hdGlv
bl9oCi0jZGVmaW5lIFRleHR1cmVNYXBwZXJBbmltYXRpb25faAotCi0jaW5jbHVkZSAiR3JhcGhp
Y3NMYXllci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFRyYW5zZm9ybWF0aW9u
TWF0cml4OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uIHsKLXB1YmxpYzoKLSAgICBl
bnVtIGNsYXNzIEFuaW1hdGlvblN0YXRlIHsgUGxheWluZywgUGF1c2VkLCBTdG9wcGVkIH07Ci0K
LSAgICBzdHJ1Y3QgQXBwbGljYXRpb25SZXN1bHQgewotICAgICAgICBPcHRpb25hbDxUcmFuc2Zv
cm1hdGlvbk1hdHJpeD4gdHJhbnNmb3JtOwotICAgICAgICBPcHRpb25hbDxkb3VibGU+IG9wYWNp
dHk7Ci0gICAgICAgIE9wdGlvbmFsPEZpbHRlck9wZXJhdGlvbnM+IGZpbHRlcnM7Ci0gICAgICAg
IGJvb2wgaGFzUnVubmluZ0FuaW1hdGlvbnMgeyBmYWxzZSB9OwotICAgIH07Ci0KLSAgICBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uKCkKLSAgICAgICAgOiBtX2tleWZyYW1lcyhBbmltYXRlZFByb3Bl
cnR5SW52YWxpZCkKLSAgICB7IH0KLSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNvbnN0IFN0
cmluZyYsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
QW5pbWF0aW9uJiwgYm9vbCwgTW9ub3RvbmljVGltZSwgU2Vjb25kcywgQW5pbWF0aW9uU3RhdGUp
OwotICAgIFdFQkNPUkVfRVhQT1JUIFRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbiYpOwotCi0gICAgdm9pZCBhcHBseShBcHBsaWNhdGlvblJlc3VsdCYs
IE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgYXBwbHlLZWVwaW5nSW50ZXJuYWxTdGF0ZShBcHBs
aWNhdGlvblJlc3VsdCYsIE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgcGF1c2UoU2Vjb25kcyk7
Ci0gICAgdm9pZCByZXN1bWUoKTsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0KLSAgICBj
b25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBL
ZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXM7
IH0KLSAgICBBbmltYXRpb25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0K
LSAgICBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3Rp
bWluZ0Z1bmN0aW9uLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBhcHBseUludGVybmFs
KEFwcGxpY2F0aW9uUmVzdWx0JiwgY29uc3QgQW5pbWF0aW9uVmFsdWUmIGZyb20sIGNvbnN0IEFu
aW1hdGlvblZhbHVlJiB0bywgZmxvYXQgcHJvZ3Jlc3MpOwotICAgIFNlY29uZHMgY29tcHV0ZVRv
dGFsUnVubmluZ1RpbWUoTW9ub3RvbmljVGltZSk7Ci0KLSAgICBTdHJpbmcgbV9uYW1lOwotICAg
IEtleWZyYW1lVmFsdWVMaXN0IG1fa2V5ZnJhbWVzOwotICAgIEZsb2F0U2l6ZSBtX2JveFNpemU7
Ci0gICAgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiBtX3RpbWluZ0Z1bmN0aW9uOwotICAgIGRvdWJs
ZSBtX2l0ZXJhdGlvbkNvdW50OwotICAgIGRvdWJsZSBtX2R1cmF0aW9uOwotICAgIEFuaW1hdGlv
bjo6QW5pbWF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwotICAgIGJvb2wgbV9maWxsc0Zvcndh
cmRzOwotICAgIGJvb2wgbV9saXN0c01hdGNoOwotICAgIE1vbm90b25pY1RpbWUgbV9zdGFydFRp
bWU7Ci0gICAgU2Vjb25kcyBtX3BhdXNlVGltZTsKLSAgICBTZWNvbmRzIG1fdG90YWxSdW5uaW5n
VGltZTsKLSAgICBNb25vdG9uaWNUaW1lIG1fbGFzdFJlZnJlc2hlZFRpbWU7Ci0gICAgQW5pbWF0
aW9uU3RhdGUgbV9zdGF0ZTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIHsK
LXB1YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucygpID0gZGVmYXVsdDsKLQotICAg
IHZvaWQgYWRkKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mKTsKLSAgICB2b2lkIHJlbW92
ZShjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgQW5pbWF0ZWRQcm9wZXJ0eUlEKTsKLSAgICB2b2lkIHBhdXNlKGNvbnN0IFN0cmluZyYsIFNl
Y29uZHMpOwotICAgIHZvaWQgc3VzcGVuZChNb25vdG9uaWNUaW1lKTsKLSAgICB2b2lkIHJlc3Vt
ZSgpOwotCi0gICAgdm9pZCBhcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpBcHBsaWNhdGlv
blJlc3VsdCYsIE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgYXBwbHlLZWVwaW5nSW50ZXJuYWxT
dGF0ZShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3VsdCYsIE1vbm90b25p
Y1RpbWUpOwotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25z
LmlzRW1wdHkoKTsgfQotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRp
b25zLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiYg
YW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uczsgfQotICAgIFZlY3RvcjxU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiYgYW5pbWF0aW9ucygpIHsgcmV0dXJuIG1fYW5pbWF0aW9u
czsgfQotCi0gICAgYm9vbCBoYXNSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0OwotICAgIGJvb2wg
aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkgY29uc3Q7
Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgZ2V0QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0
OwotCi1wcml2YXRlOgotICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiBtX2FuaW1h
dGlvbnM7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJMYXllci5jcHAKaW5kZXggMzQyOGM2NzRmYzI2NjhjNDM4NWI0ZDkzNzQz
OWQzMGFjZjcxOTFkNC4uZmQ0MzY1YWE3MmZlNTY5YzVkZmI5YzIzNDlhMjI2MjA3NzE2MWI3NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKQEAgLTY0MCw3ICs2NDAsNyBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJMYXllcjo6c2V0Q29udGVudHNMYXllcihUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYQogICAgIG1fY29udGVudHNMYXllciA9IHBsYXRmb3JtTGF5ZXI7CiB9
CiAKLXZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpzZXRBbmltYXRpb25zKGNvbnN0IFRleHR1cmVN
YXBwZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNl
dEFuaW1hdGlvbnMoY29uc3QgTmljb3NpYTo6Tmljb3NpYUFuaW1hdGlvbnMmIGFuaW1hdGlvbnMp
CiB7CiAgICAgbV9hbmltYXRpb25zID0gYW5pbWF0aW9uczsKIH0KQEAgLTY3OCw3ICs2NzgsNyBA
QCBib29sIFRleHR1cmVNYXBwZXJMYXllcjo6YXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoTW9u
b3RvbmljVGltZSB0aW1lKQogCiBib29sIFRleHR1cmVNYXBwZXJMYXllcjo6c3luY0FuaW1hdGlv
bnMoTW9ub3RvbmljVGltZSB0aW1lKQogewotICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb246OkFw
cGxpY2F0aW9uUmVzdWx0IGFwcGxpY2F0aW9uUmVzdWx0czsKKyAgICBOaWNvc2lhOjpOaWNvc2lh
QW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3VsdCBhcHBsaWNhdGlvblJlc3VsdHM7CiAgICAgbV9h
bmltYXRpb25zLmFwcGx5KGFwcGxpY2F0aW9uUmVzdWx0cywgdGltZSk7CiAKICAgICBtX2xheWVy
VHJhbnNmb3Jtcy5sb2NhbFRyYW5zZm9ybSA9IGFwcGxpY2F0aW9uUmVzdWx0cy50cmFuc2Zvcm0u
dmFsdWVPcihtX3N0YXRlLnRyYW5zZm9ybSk7CkBAIC02ODcsNyArNjg3LDcgQEAgYm9vbCBUZXh0
dXJlTWFwcGVyTGF5ZXI6OnN5bmNBbmltYXRpb25zKE1vbm90b25pY1RpbWUgdGltZSkKIAogI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICAvLyBDYWxjdWxhdGUgbG9jYWxUcmFuc2Zv
cm0gNTBtcyBpbiB0aGUgZnV0dXJlLgotICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb246OkFwcGxp
Y2F0aW9uUmVzdWx0IGZ1dHVyZUFwcGxpY2F0aW9uUmVzdWx0czsKKyAgICBOaWNvc2lhOjpOaWNv
c2lhQW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3VsdCBmdXR1cmVBcHBsaWNhdGlvblJlc3VsdHM7
CiAgICAgbV9hbmltYXRpb25zLmFwcGx5S2VlcGluZ0ludGVybmFsU3RhdGUoZnV0dXJlQXBwbGlj
YXRpb25SZXN1bHRzLCB0aW1lICsgNTBfbXMpOwogICAgIG1fbGF5ZXJUcmFuc2Zvcm1zLmZ1dHVy
ZUxvY2FsVHJhbnNmb3JtID0gZnV0dXJlQXBwbGljYXRpb25SZXN1bHRzLnRyYW5zZm9ybS52YWx1
ZU9yKG1fbGF5ZXJUcmFuc2Zvcm1zLmxvY2FsVHJhbnNmb3JtKTsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllci5oCmluZGV4IDUwYjI0YWE3MWUyZGNhZTgwMTYyM2YwZWIyZGUxYjkzMDRhMTRk
ODEuLmFlOTgzOWQzZmM5YjBkYzYxNGExNGUwZDZiMmM1MGVjMDIwYzIyYzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckxheWVyLmgKQEAgLTIyLDggKzIyLDggQEAKIAogI2luY2x1ZGUgIkZpbHRlck9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJOaWNvc2lhQW5pbWF0
aW9uLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCiAj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAtOTAsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXREZWJ1Z1Zpc3VhbHMoYm9vbCBzaG93RGVidWdCb3JkZXJzLCBjb25zdCBDb2xvciYg
ZGVidWdCb3JkZXJDb2xvciwgZmxvYXQgZGVidWdCb3JkZXJXaWR0aCk7CiAgICAgdm9pZCBzZXRS
ZXBhaW50Q291bnRlcihib29sIHNob3dSZXBhaW50Q291bnRlciwgaW50IHJlcGFpbnRDb3VudCk7
CiAgICAgdm9pZCBzZXRDb250ZW50c0xheWVyKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKik7
Ci0gICAgdm9pZCBzZXRBbmltYXRpb25zKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb25zJik7
CisgICAgdm9pZCBzZXRBbmltYXRpb25zKGNvbnN0IE5pY29zaWE6Ok5pY29zaWFBbmltYXRpb25z
Jik7CiAgICAgdm9pZCBzZXRCYWNraW5nU3RvcmUoVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSop
OwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICB2b2lkIHNldEFuaW1hdGVkQmFj
a2luZ1N0b3JlQ2xpZW50KE5pY29zaWE6OkFuaW1hdGVkQmFja2luZ1N0b3JlQ2xpZW50Kik7CkBA
IC0yMDIsNyArMjAyLDcgQEAgcHJpdmF0ZToKIAogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgVGV4
dHVyZU1hcHBlciogbV90ZXh0dXJlTWFwcGVyIHsgbnVsbHB0ciB9OwotICAgIFRleHR1cmVNYXBw
ZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsKKyAgICBOaWNvc2lhOjpOaWNvc2lhQW5pbWF0aW9u
cyBtX2FuaW1hdGlvbnM7CiAgICAgdWludDMyX3QgbV9pZCB7IDAgfTsKICNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCiAgICAgUmVmUHRyPE5pY29zaWE6OkFuaW1hdGVkQmFja2luZ1N0b3Jl
Q2xpZW50PiBtX2FuaW1hdGVkQmFja2luZ1N0b3JlQ2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCAzNjdkOGE1
M2NmMzcwZDIyMDJkNmYzNDAxY2RjYjNhMDJmZjQyYzJiLi5mNjNlMzg1NDA1Nzc4ODI3ZmIzODgx
NWU4ZDUzYmU3MjlmYzdlZmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgYm9vbCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYgdmFsdWVMaXN0LAogICAgICAgICBsaXN0c01hdGNoID0gdmFsaWRhdGVUcmFuc2Zvcm1P
cGVyYXRpb25zKHZhbHVlTGlzdCwgaWdub3JlZEhhc0JpZ1JvdGF0aW9uKSA+PSAwOwogCiAgICAg
bV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCkgLSBTZWNvbmRz
KGRlbGF5QXNOZWdhdGl2ZVRpbWVPZmZzZXQpOwotICAgIG1fYW5pbWF0aW9ucy5hZGQoVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsICphbmlt
LCBsaXN0c01hdGNoLCBtX2xhc3RBbmltYXRpb25TdGFydFRpbWUsIDBfcywgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlBsYXlpbmcpKTsKKyAgICBtX2FuaW1hdGlvbnMu
YWRkKE5pY29zaWE6Ok5pY29zaWFBbmltYXRpb24oa2V5ZnJhbWVzTmFtZSwgdmFsdWVMaXN0LCBi
b3hTaXplLCAqYW5pbSwgbGlzdHNNYXRjaCwgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lLCAwX3Ms
IE5pY29zaWE6Ok5pY29zaWFBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpQbGF5aW5nKSk7CiAg
ICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAgICAgZGlkQ2hh
bmdlQW5pbWF0aW9ucygpOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IGU2YzU4NjY3MzdkYWEz
MWI3ZmQyYTE2MWJlYmNjMWE0YThiYjk2OGUuLmM4NDViNjlmZDcyZDljYTY1MjM0Y2NmYmVmOTc1
YjNlNTk2ZDdmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmgKQEAgLTMwLDIwICszMCwyMCBAQAogI2luY2x1ZGUgIkltYWdlLmgi
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIk5pY29zaWFBbmltYXRlZEJhY2tpbmdT
dG9yZUNsaWVudC5oIgorI2luY2x1ZGUgIk5pY29zaWFBbmltYXRpb24uaCIKICNpbmNsdWRlICJO
aWNvc2lhQnVmZmVyLmgiCiAjaW5jbHVkZSAiTmljb3NpYVBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIE5pY29zaWEgewogY2xhc3MgUGFpbnRpbmdFbmdpbmU7
CitjbGFzcyBOaWNvc2lhQW5pbWF0aW9uczsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOwotY2xhc3MgVGV4dHVyZU1hcHBlckFuaW1hdGlv
bnM7CiAKIGNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6CkBA
IC0yMTAsNyArMjEwLDcgQEAgcHJpdmF0ZToKIAogICAgIFRpbWVyIG1fYW5pbWF0aW9uU3RhcnRl
ZFRpbWVyOwogICAgIFJ1bkxvb3A6OlRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4gbV9y
ZXF1ZXN0UGVuZGluZ1RpbGVDcmVhdGlvblRpbWVyOwotICAgIFRleHR1cmVNYXBwZXJBbmltYXRp
b25zIG1fYW5pbWF0aW9uczsKKyAgICBOaWNvc2lhOjpOaWNvc2lhQW5pbWF0aW9ucyBtX2FuaW1h
dGlvbnM7CiAgICAgTW9ub3RvbmljVGltZSBtX2xhc3RBbmltYXRpb25TdGFydFRpbWU7CiAKICAg
ICBzdHJ1Y3Qgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376487</attachid>
            <date>2019-08-16 02:39:02 -0700</date>
            <delta_ts>2019-08-16 06:03:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200707-20190816113901.patch</filename>
            <type>text/plain</type>
            <size>52265</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTVlYTE4ZGFmYTdiMTEy
MzE2MWVlZGVjZGU2ZGY3YWU0YTlmNDA2ZS4uOTUzMWZjMDA4NGM1OGE0NzJiZjY1MDg2ZWQyNzJl
NGMwMzI3OWQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDE5LTA4LTE2ICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBNb3Zl
IFRleHR1cmVNYXBwZXJBbmltYXRpb24gdG8gdGhlIG5pY29zaWEgbmFtZXNwYWNlIGFzIE5pY29z
aWE6OkFuaW1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjAwNzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTW92ZSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uIHRvIE5pY29zaWE6OkFuaW1hdGlvbiBz
byBpdCBjYW4gYmUgdXNlZCBieSBub24gVGV4dHVyZU1hcHBlcgorICAgICAgICBjb2RlIHBhdGhz
LgorCisgICAgICAgICogcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRpb24uY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJB
bmltYXRpb24uY3BwLgorICAgICAgICAoTmljb3NpYTo6c2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZh
bHVlKToKKyAgICAgICAgKE5pY29zaWE6Om5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZSk6CisgICAg
ICAgIChOaWNvc2lhOjpub3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JGaWxsc0ZvcndhcmRzKToK
KyAgICAgICAgKE5pY29zaWE6OnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUpOgorICAg
ICAgICAoTmljb3NpYTo6QW5pbWF0aW9uOjpBbmltYXRpb24pOgorICAgICAgICAoTmljb3NpYTo6
QW5pbWF0aW9uOjphcHBseSk6CisgICAgICAgIChOaWNvc2lhOjpBbmltYXRpb246OmFwcGx5S2Vl
cGluZ0ludGVybmFsU3RhdGUpOgorICAgICAgICAoTmljb3NpYTo6QW5pbWF0aW9uOjpwYXVzZSk6
CisgICAgICAgIChOaWNvc2lhOjpBbmltYXRpb246OnJlc3VtZSk6CisgICAgICAgIChOaWNvc2lh
OjpBbmltYXRpb246OmNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKToKKyAgICAgICAgKE5pY29zaWE6
OkFuaW1hdGlvbjo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoTmljb3NpYTo6QW5pbWF0aW9u
OjphcHBseUludGVybmFsKToKKyAgICAgICAgKE5pY29zaWE6OkFuaW1hdGlvbnM6OmFkZCk6Cisg
ICAgICAgIChOaWNvc2lhOjpBbmltYXRpb25zOjpyZW1vdmUpOgorICAgICAgICAoTmljb3NpYTo6
QW5pbWF0aW9uczo6cGF1c2UpOgorICAgICAgICAoTmljb3NpYTo6QW5pbWF0aW9uczo6c3VzcGVu
ZCk6CisgICAgICAgIChOaWNvc2lhOjpBbmltYXRpb25zOjpyZXN1bWUpOgorICAgICAgICAoTmlj
b3NpYTo6QW5pbWF0aW9uczo6YXBwbHkpOgorICAgICAgICAoTmljb3NpYTo6QW5pbWF0aW9uczo6
YXBwbHlLZWVwaW5nSW50ZXJuYWxTdGF0ZSk6CisgICAgICAgIChOaWNvc2lhOjpBbmltYXRpb25z
OjpoYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6OkFu
aW1hdGlvbnM6Omhhc1J1bm5pbmdBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6
OkFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUFuaW1hdGlvbi5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRp
b24uaC4KKyAgICAgICAgKE5pY29zaWE6OkFuaW1hdGlvbjo6QW5pbWF0aW9uKToKKyAgICAgICAg
KE5pY29zaWE6OkFuaW1hdGlvbjo6a2V5ZnJhbWVzIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6
OkFuaW1hdGlvbjo6dGltaW5nRnVuY3Rpb24gY29uc3QpOgorICAgICAgICAoTmljb3NpYTo6QW5p
bWF0aW9uczo6YW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChOaWNvc2lhOjpBbmltYXRpb25z
OjphbmltYXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29z
aWFQbGF0Zm9ybUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRBbmltYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c3luY0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRk
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg6CisKIDIwMTktMDgtMTYgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBzcGVjdWxhdGl2
ZSBidWlsZCBmaXggZm9yIFdpbkNhaXJvLCBwYXJ0IDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0dXJlTWFwcGVyLmNtYWtlCmluZGV4IGNlOWFiOTZmNTJiODk2OWM5MTEwOWVmMDY4NTVj
NTA4MzlhNTIzMjMuLjRmM2Q2ZWFiNWQ3MmZjOTVjMjBhNDUzYWNlYjU5ZDRjM2Q0YWRhMjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQpAQCAtMSwxMyAr
MSwxNCBAQAogbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIgorICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhIgogKQogCiBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmlt
YXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVQb29sLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHQzRFRleHR1cmVNYXBwZXIu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJGUFNDb3VudGVyLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5
ZXIuY3BwCkBAIC0xNiwxMSArMTcsMTEgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAp
CiAKIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUworICAgIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUFuaW1hdGlvbi5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9DbGlwU3RhY2suaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0
aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb250ZXh0
QXR0cmlidXRlcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJG
UFNDb3VudGVyLmgKQEAgLTcwLDcgKzcxLDYgQEAgaWYgKFVTRV9DT09SRElOQVRFRF9HUkFQSElD
UykKIAogICAgICMgRklYTUU6IE1vdmUgdGhpcyBpbnRvIE5pY29zaWEuY21ha2Ugb25jZSB0aGUg
Y29tcG9uZW50IGlzIHNldCBmb3IgbG9uZy10ZXJtIHVzZS4KICAgICBsaXN0KEFQUEVORCBXZWJD
b3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYSIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8iCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcCIKICAgICApCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhQW5pbWF0aW9u
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yYmFlODhlZTk0ZWJlZGMxMmFhN2ExZjczYTlmYmY4NjZjYmMxMDc1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9OaWNvc2lhQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDM5NiBAQAorLyoKKyBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJOaWNvc2lhQW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCisKK25hbWVz
cGFjZSBOaWNvc2lhIHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoRmlsdGVyT3BlcmF0aW9uKiBmcm9tT3AsIEZp
bHRlck9wZXJhdGlvbiYgdG9PcCwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBGbG9hdFNpemUmLCBi
b29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQoreworICAgIHJldHVybiB0b09wLmJsZW5k
KGZyb21PcCwgcHJvZ3Jlc3MsIGJsZW5kVG9QYXNzdGhyb3VnaCk7Cit9CisKK3N0YXRpYyBGaWx0
ZXJPcGVyYXRpb25zIGFwcGx5RmlsdGVyQW5pbWF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0
IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK3sKKyAgICAvLyBGaXJzdCBmcmFtZSBvZiBhbiBhbmltYXRp
b24uCisgICAgaWYgKCFwcm9ncmVzcykKKyAgICAgICAgcmV0dXJuIGZyb207CisKKyAgICAvLyBM
YXN0IGZyYW1lIG9mIGFuIGFuaW1hdGlvbi4KKyAgICBpZiAocHJvZ3Jlc3MgPT0gMSkKKyAgICAg
ICAgcmV0dXJuIHRvOworCisgICAgaWYgKCFmcm9tLmlzRW1wdHkoKSAmJiAhdG8uaXNFbXB0eSgp
ICYmICFmcm9tLm9wZXJhdGlvbnNNYXRjaCh0bykpCisgICAgICAgIHJldHVybiB0bzsKKworICAg
IEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0OworCisgICAgc2l6ZV90IGZyb21TaXplID0gZnJvbS5v
cGVyYXRpb25zKCkuc2l6ZSgpOworICAgIHNpemVfdCB0b1NpemUgPSB0by5vcGVyYXRpb25zKCku
c2l6ZSgpOworICAgIHNpemVfdCBzaXplID0gc3RkOjptYXgoZnJvbVNpemUsIHRvU2l6ZSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgUmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gZnJvbU9wID0gKGkgPCBmcm9tU2l6ZSkgPyBmcm9tLm9wZXJhdGlvbnMo
KVtpXS5nZXQoKSA6IG51bGxwdHI7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IHRv
T3AgPSAoaSA8IHRvU2l6ZSkgPyB0by5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiBudWxscHRyOwor
ICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZGVkT3AgPSB0b09wID8gYmxlbmRG
dW5jKGZyb21PcC5nZXQoKSwgKnRvT3AsIHByb2dyZXNzLCBib3hTaXplKSA6IChmcm9tT3AgPyBi
bGVuZEZ1bmMobnVsbHB0ciwgKmZyb21PcCwgcHJvZ3Jlc3MsIGJveFNpemUsIHRydWUpIDogbnVs
bHB0cik7CisgICAgICAgIGlmIChibGVuZGVkT3ApCisgICAgICAgICAgICByZXN1bHQub3BlcmF0
aW9ucygpLmFwcGVuZChibGVuZGVkT3ApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1
dG8gaWRlbnRpdHlPcCA9IFBhc3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKTsKKyAg
ICAgICAgICAgIGlmIChwcm9ncmVzcyA+IDAuNSkKKyAgICAgICAgICAgICAgICByZXN1bHQub3Bl
cmF0aW9ucygpLmFwcGVuZCh0b09wID8gdG9PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5k
KGZyb21PcCA/IGZyb21PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkUmV2ZXJzZUFu
aW1hdGlvblZhbHVlKFdlYkNvcmU6OkFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbiwgaW50IGxvb3BDb3VudCkKK3sKKyAgICByZXR1cm4gKGRpcmVjdGlvbiA9PSBXZWJDb3Jl
OjpBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSAmJiBsb29wQ291bnQgJiAx
KQorICAgICAgICB8fCAoZGlyZWN0aW9uID09IFdlYkNvcmU6OkFuaW1hdGlvbjo6QW5pbWF0aW9u
RGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSAmJiAhKGxvb3BDb3VudCAmIDEpKQorICAgICAgICB8
fCBkaXJlY3Rpb24gPT0gV2ViQ29yZTo6QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZl
cnNlOworfQorCitzdGF0aWMgZG91YmxlIG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZShkb3VibGUg
cnVubmluZ1RpbWUsIGRvdWJsZSBkdXJhdGlvbiwgV2ViQ29yZTo6QW5pbWF0aW9uOjpBbmltYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uLCBkb3VibGUgaXRlcmF0aW9uQ291bnQpCit7CisgICAgaWYg
KCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBpbnQgbG9vcENvdW50
ID0gcnVubmluZ1RpbWUgLyBkdXJhdGlvbjsKKyAgICBjb25zdCBkb3VibGUgbGFzdEZ1bGxMb29w
ID0gZHVyYXRpb24gKiBkb3VibGUobG9vcENvdW50KTsKKyAgICBjb25zdCBkb3VibGUgcmVtYWlu
ZGVyID0gcnVubmluZ1RpbWUgLSBsYXN0RnVsbExvb3A7CisgICAgLy8gSWdub3JlIHJlbWFpbmRl
ciB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiBhbmltYXRpb24uCisgICAgY29uc3QgZG91
YmxlIG5vcm1hbGl6ZWQgPSAobG9vcENvdW50ID09IGl0ZXJhdGlvbkNvdW50KSA/IDEuMCA6IChy
ZW1haW5kZXIgLyBkdXJhdGlvbik7CisKKyAgICByZXR1cm4gc2hvdWxkUmV2ZXJzZUFuaW1hdGlv
blZhbHVlKGRpcmVjdGlvbiwgbG9vcENvdW50KSA/IDEgLSBub3JtYWxpemVkIDogbm9ybWFsaXpl
ZDsKK30KKworc3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JGaWxsc0Zv
cndhcmRzKGRvdWJsZSBpdGVyYXRpb25Db3VudCwgV2ViQ29yZTo6QW5pbWF0aW9uOjpBbmltYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIGlmIChkaXJlY3Rpb24gPT0gV2ViQ29yZTo6
QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25Ob3JtYWwpCisgICAgICAgIHJldHVybiAxOwor
ICAgIGlmIChkaXJlY3Rpb24gPT0gV2ViQ29yZTo6QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rp
b25SZXZlcnNlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc2hvdWxkUmV2ZXJzZUFu
aW1hdGlvblZhbHVlKGRpcmVjdGlvbiwgaXRlcmF0aW9uQ291bnQpID8gMSA6IDA7Cit9CisKK3N0
YXRpYyBmbG9hdCBhcHBseU9wYWNpdHlBbmltYXRpb24oZmxvYXQgZnJvbU9wYWNpdHksIGZsb2F0
IHRvT3BhY2l0eSwgZG91YmxlIHByb2dyZXNzKQoreworICAgIC8vIE9wdGltaXphdGlvbjogc3Bl
Y2lhbCBjYXNlIHRoZSBlZGdlIHZhbHVlcyAoMCBhbmQgMSkuCisgICAgaWYgKHByb2dyZXNzID09
IDEuMCkKKyAgICAgICAgcmV0dXJuIHRvT3BhY2l0eTsKKworICAgIGlmICghcHJvZ3Jlc3MpCisg
ICAgICAgIHJldHVybiBmcm9tT3BhY2l0eTsKKworICAgIHJldHVybiBmcm9tT3BhY2l0eSArIHBy
b2dyZXNzICogKHRvT3BhY2l0eSAtIGZyb21PcGFjaXR5KTsKK30KKworc3RhdGljIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jl
c3MsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSwgYm9vbCBsaXN0c01hdGNoKQoreworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKworICAgIC8vIEZpcnN0IGZyYW1lIG9mIGFuIGFu
aW1hdGlvbi4KKyAgICBpZiAoIXByb2dyZXNzKSB7CisgICAgICAgIGZyb20uYXBwbHkoYm94U2l6
ZSwgbWF0cml4KTsKKyAgICAgICAgcmV0dXJuIG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBMYXN0
IGZyYW1lIG9mIGFuIGFuaW1hdGlvbi4KKyAgICBpZiAocHJvZ3Jlc3MgPT0gMSkgeworICAgICAg
ICB0by5hcHBseShib3hTaXplLCBtYXRyaXgpOworICAgICAgICByZXR1cm4gbWF0cml4OworICAg
IH0KKworICAgIC8vIElmIHdlIGhhdmUgaW5jb21wYXRpYmxlIG9wZXJhdGlvbiBsaXN0cywgd2Ug
YmxlbmQgdGhlIHJlc3VsdGluZyBtYXRyaWNlcy4KKyAgICBpZiAoIWxpc3RzTWF0Y2gpIHsKKyAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbU1hdHJpeDsKKyAgICAgICAgdG8uYXBwbHko
Ym94U2l6ZSwgbWF0cml4KTsKKyAgICAgICAgZnJvbS5hcHBseShib3hTaXplLCBmcm9tTWF0cml4
KTsKKyAgICAgICAgbWF0cml4LmJsZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsKKyAgICAgICAg
cmV0dXJuIG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBBbmltYXRpb24gdG8gIi13ZWJraXQtdHJh
bnNmb3JtOiBub25lIi4KKyAgICBpZiAoIXRvLnNpemUoKSkgeworICAgICAgICBUcmFuc2Zvcm1P
cGVyYXRpb25zIGJsZW5kZWQoZnJvbSk7CisgICAgICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDog
YmxlbmRlZC5vcGVyYXRpb25zKCkpCisgICAgICAgICAgICBvcGVyYXRpb24tPmJsZW5kKG51bGxw
dHIsIHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKKyAgICAgICAgcmV0
dXJuIG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBBbmltYXRpb24gZnJvbSAiLXdlYmtpdC10cmFu
c2Zvcm06IG5vbmUiLgorICAgIGlmICghZnJvbS5zaXplKCkpIHsKKyAgICAgICAgVHJhbnNmb3Jt
T3BlcmF0aW9ucyBibGVuZGVkKHRvKTsKKyAgICAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBi
bGVuZGVkLm9wZXJhdGlvbnMoKSkKKyAgICAgICAgICAgIG9wZXJhdGlvbi0+YmxlbmQobnVsbHB0
ciwgMSAtIHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKKyAgICAgICAg
cmV0dXJuIG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBOb3JtYWwgYW5pbWF0aW9uIHdpdGggYSBt
YXRjaGluZyBvcGVyYXRpb24gbGlzdC4KKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQo
dG8pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxlbmRlZC5vcGVyYXRpb25zKCkuc2l6
ZSgpOyArK2kpCisgICAgICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZChmcm9tLmF0
KGkpLCBwcm9ncmVzcywgIWZyb20uYXQoaSkpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOworICAg
IHJldHVybiBtYXRyaXg7Cit9CisKK3N0YXRpYyBjb25zdCBUaW1pbmdGdW5jdGlvbiYgdGltaW5n
RnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShjb25zdCBBbmltYXRpb25WYWx1ZSYgYW5pbWF0aW9u
VmFsdWUsIGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKQoreworICAgIGlmIChhbmltYXRpb25W
YWx1ZS50aW1pbmdGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gKmFuaW1hdGlvblZhbHVlLnRp
bWluZ0Z1bmN0aW9uKCk7CisgICAgaWYgKGFuaW1hdGlvbi50aW1pbmdGdW5jdGlvbigpKQorICAg
ICAgICByZXR1cm4gKmFuaW1hdGlvbi50aW1pbmdGdW5jdGlvbigpOworICAgIHJldHVybiBDdWJp
Y0JlemllclRpbWluZ0Z1bmN0aW9uOjpkZWZhdWx0VGltaW5nRnVuY3Rpb24oKTsKK30KKworQW5p
bWF0aW9uOjpBbmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYga2V5ZnJhbWVzLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUsIGNvbnN0IFdlYkNvcmU6
OkFuaW1hdGlvbiYgYW5pbWF0aW9uLCBib29sIGxpc3RzTWF0Y2gsIE1vbm90b25pY1RpbWUgc3Rh
cnRUaW1lLCBTZWNvbmRzIHBhdXNlVGltZSwgQW5pbWF0aW9uU3RhdGUgc3RhdGUpCisgICAgOiBt
X25hbWUobmFtZS5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSA/IG5hbWUgOiBuYW1lLmlz
b2xhdGVkQ29weSgpKQorICAgICwgbV9rZXlmcmFtZXMoa2V5ZnJhbWVzKQorICAgICwgbV9ib3hT
aXplKGJveFNpemUpCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKGFuaW1hdGlvbi50aW1pbmdGdW5j
dGlvbigpLT5jbG9uZSgpKQorICAgICwgbV9pdGVyYXRpb25Db3VudChhbmltYXRpb24uaXRlcmF0
aW9uQ291bnQoKSkKKyAgICAsIG1fZHVyYXRpb24oYW5pbWF0aW9uLmR1cmF0aW9uKCkpCisgICAg
LCBtX2RpcmVjdGlvbihhbmltYXRpb24uZGlyZWN0aW9uKCkpCisgICAgLCBtX2ZpbGxzRm9yd2Fy
ZHMoYW5pbWF0aW9uLmZpbGxzRm9yd2FyZHMoKSkKKyAgICAsIG1fbGlzdHNNYXRjaChsaXN0c01h
dGNoKQorICAgICwgbV9zdGFydFRpbWUoc3RhcnRUaW1lKQorICAgICwgbV9wYXVzZVRpbWUocGF1
c2VUaW1lKQorICAgICwgbV90b3RhbFJ1bm5pbmdUaW1lKDBfcykKKyAgICAsIG1fbGFzdFJlZnJl
c2hlZFRpbWUobV9zdGFydFRpbWUpCisgICAgLCBtX3N0YXRlKHN0YXRlKQoreworfQorCitBbmlt
YXRpb246OkFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIG90aGVyKQorICAgIDogbV9uYW1lKG90
aGVyLm1fbmFtZS5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSA/IG90aGVyLm1fbmFtZSA6
IG90aGVyLm1fbmFtZS5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fa2V5ZnJhbWVzKG90aGVyLm1f
a2V5ZnJhbWVzKQorICAgICwgbV9ib3hTaXplKG90aGVyLm1fYm94U2l6ZSkKKyAgICAsIG1fdGlt
aW5nRnVuY3Rpb24ob3RoZXIubV90aW1pbmdGdW5jdGlvbi0+Y2xvbmUoKSkKKyAgICAsIG1faXRl
cmF0aW9uQ291bnQob3RoZXIubV9pdGVyYXRpb25Db3VudCkKKyAgICAsIG1fZHVyYXRpb24ob3Ro
ZXIubV9kdXJhdGlvbikKKyAgICAsIG1fZGlyZWN0aW9uKG90aGVyLm1fZGlyZWN0aW9uKQorICAg
ICwgbV9maWxsc0ZvcndhcmRzKG90aGVyLm1fZmlsbHNGb3J3YXJkcykKKyAgICAsIG1fbGlzdHNN
YXRjaChvdGhlci5tX2xpc3RzTWF0Y2gpCisgICAgLCBtX3N0YXJ0VGltZShvdGhlci5tX3N0YXJ0
VGltZSkKKyAgICAsIG1fcGF1c2VUaW1lKG90aGVyLm1fcGF1c2VUaW1lKQorICAgICwgbV90b3Rh
bFJ1bm5pbmdUaW1lKG90aGVyLm1fdG90YWxSdW5uaW5nVGltZSkKKyAgICAsIG1fbGFzdFJlZnJl
c2hlZFRpbWUob3RoZXIubV9sYXN0UmVmcmVzaGVkVGltZSkKKyAgICAsIG1fc3RhdGUob3RoZXIu
bV9zdGF0ZSkKK3sKK30KKwordm9pZCBBbmltYXRpb246OmFwcGx5KEFwcGxpY2F0aW9uUmVzdWx0
JiBhcHBsaWNhdGlvblJlc3VsdHMsIE1vbm90b25pY1RpbWUgdGltZSkKK3sKKyAgICBpZiAoIWlz
QWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNlY29uZHMgdG90YWxSdW5uaW5nVGlt
ZSA9IGNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKHRpbWUpOworICAgIGRvdWJsZSBub3JtYWxpemVk
VmFsdWUgPSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUodG90YWxSdW5uaW5nVGltZS5zZWNvbmRz
KCksIG1fZHVyYXRpb24sIG1fZGlyZWN0aW9uLCBtX2l0ZXJhdGlvbkNvdW50KTsKKworICAgIGlm
IChtX2l0ZXJhdGlvbkNvdW50ICE9IFdlYkNvcmU6OkFuaW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJ
bmZpbml0ZSAmJiB0b3RhbFJ1bm5pbmdUaW1lLnNlY29uZHMoKSA+PSBtX2R1cmF0aW9uICogbV9p
dGVyYXRpb25Db3VudCkgeworICAgICAgICBtX3N0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0b3Bw
ZWQ7CisgICAgICAgIG1fcGF1c2VUaW1lID0gMF9zOworICAgICAgICBpZiAobV9maWxsc0Zvcndh
cmRzKQorICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZh
bHVlRm9yRmlsbHNGb3J3YXJkcyhtX2l0ZXJhdGlvbkNvdW50LCBtX2RpcmVjdGlvbik7CisgICAg
fQorCisgICAgYXBwbGljYXRpb25SZXN1bHRzLmhhc1J1bm5pbmdBbmltYXRpb25zIHw9IChtX3N0
YXRlID09IEFuaW1hdGlvblN0YXRlOjpQbGF5aW5nKTsKKworICAgIGlmICghbm9ybWFsaXplZFZh
bHVlKSB7CisgICAgICAgIGFwcGx5SW50ZXJuYWwoYXBwbGljYXRpb25SZXN1bHRzLCBtX2tleWZy
YW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSksIDApOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZSA9PSAxLjApIHsKKyAgICAgICAgYXBwbHlJbnRl
cm5hbChhcHBsaWNhdGlvblJlc3VsdHMsIG1fa2V5ZnJhbWVzLmF0KG1fa2V5ZnJhbWVzLnNpemUo
KSAtIDIpLCBtX2tleWZyYW1lcy5hdChtX2tleWZyYW1lcy5zaXplKCkgLSAxKSwgMSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fa2V5ZnJhbWVzLnNpemUoKSA9PSAyKSB7Cisg
ICAgICAgIGF1dG8mIHRpbWluZ0Z1bmN0aW9uID0gdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25W
YWx1ZShtX2tleWZyYW1lcy5hdCgwKSwgKnRoaXMpOworICAgICAgICBub3JtYWxpemVkVmFsdWUg
PSB0aW1pbmdGdW5jdGlvbi50cmFuc2Zvcm1UaW1lKG5vcm1hbGl6ZWRWYWx1ZSwgbV9kdXJhdGlv
bik7CisgICAgICAgIGFwcGx5SW50ZXJuYWwoYXBwbGljYXRpb25SZXN1bHRzLCBtX2tleWZyYW1l
cy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSksIG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fa2V5ZnJhbWVzLnNp
emUoKSAtIDE7ICsraSkgeworICAgICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSYgZnJvbSA9IG1f
a2V5ZnJhbWVzLmF0KGkpOworICAgICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSYgdG8gPSBtX2tl
eWZyYW1lcy5hdChpICsgMSk7CisgICAgICAgIGlmIChmcm9tLmtleVRpbWUoKSA+IG5vcm1hbGl6
ZWRWYWx1ZSB8fCB0by5rZXlUaW1lKCkgPCBub3JtYWxpemVkVmFsdWUpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBub3JtYWxpemVkVmFsdWUgPSAobm9ybWFsaXplZFZhbHVlIC0g
ZnJvbS5rZXlUaW1lKCkpIC8gKHRvLmtleVRpbWUoKSAtIGZyb20ua2V5VGltZSgpKTsKKyAgICAg
ICAgYXV0byYgdGltaW5nRnVuY3Rpb24gPSB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVl
KGZyb20sICp0aGlzKTsKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gdGltaW5nRnVuY3Rpb24u
dHJhbnNmb3JtVGltZShub3JtYWxpemVkVmFsdWUsIG1fZHVyYXRpb24pOworICAgICAgICBhcHBs
eUludGVybmFsKGFwcGxpY2F0aW9uUmVzdWx0cywgZnJvbSwgdG8sIG5vcm1hbGl6ZWRWYWx1ZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBBbmltYXRpb246OmFwcGx5S2VlcGlu
Z0ludGVybmFsU3RhdGUoQXBwbGljYXRpb25SZXN1bHQmIGFwcGxpY2F0aW9uUmVzdWx0cywgTW9u
b3RvbmljVGltZSB0aW1lKQoreworICAgIE1vbm90b25pY1RpbWUgb2xkTGFzdFJlZnJlc2hlZFRp
bWUgPSBtX2xhc3RSZWZyZXNoZWRUaW1lOworICAgIFNlY29uZHMgb2xkVG90YWxSdW5uaW5nVGlt
ZSA9IG1fdG90YWxSdW5uaW5nVGltZTsKKyAgICBBbmltYXRpb25TdGF0ZSBvbGRTdGF0ZSA9IG1f
c3RhdGU7CisKKyAgICBhcHBseShhcHBsaWNhdGlvblJlc3VsdHMsIHRpbWUpOworCisgICAgbV9s
YXN0UmVmcmVzaGVkVGltZSA9IG9sZExhc3RSZWZyZXNoZWRUaW1lOworICAgIG1fdG90YWxSdW5u
aW5nVGltZSA9IG9sZFRvdGFsUnVubmluZ1RpbWU7CisgICAgbV9zdGF0ZSA9IG9sZFN0YXRlOwor
fQorCit2b2lkIEFuaW1hdGlvbjo6cGF1c2UoU2Vjb25kcyB0aW1lKQoreworICAgIG1fc3RhdGUg
PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkOworICAgIG1fcGF1c2VUaW1lID0gdGltZTsKK30KKwor
dm9pZCBBbmltYXRpb246OnJlc3VtZSgpCit7CisgICAgbV9zdGF0ZSA9IEFuaW1hdGlvblN0YXRl
OjpQbGF5aW5nOworICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIHdyb25nLiBtX3RvdGFsUnVubmlu
Z1RpbWUgaXMgY2xlYXJlZC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgzMTEzCisgICAgbV9wYXVzZVRpbWUgPSAwX3M7CisgICAgbV90b3RhbFJ1bm5p
bmdUaW1lID0gbV9wYXVzZVRpbWU7CisgICAgbV9sYXN0UmVmcmVzaGVkVGltZSA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOworfQorCitTZWNvbmRzIEFuaW1hdGlvbjo6Y29tcHV0ZVRvdGFsUnVubmlu
Z1RpbWUoTW9ub3RvbmljVGltZSB0aW1lKQoreworICAgIGlmIChtX3N0YXRlID09IEFuaW1hdGlv
blN0YXRlOjpQYXVzZWQpCisgICAgICAgIHJldHVybiBtX3BhdXNlVGltZTsKKworICAgIE1vbm90
b25pY1RpbWUgb2xkTGFzdFJlZnJlc2hlZFRpbWUgPSBtX2xhc3RSZWZyZXNoZWRUaW1lOworICAg
IG1fbGFzdFJlZnJlc2hlZFRpbWUgPSB0aW1lOworICAgIG1fdG90YWxSdW5uaW5nVGltZSArPSBt
X2xhc3RSZWZyZXNoZWRUaW1lIC0gb2xkTGFzdFJlZnJlc2hlZFRpbWU7CisgICAgcmV0dXJuIG1f
dG90YWxSdW5uaW5nVGltZTsKK30KKworYm9vbCBBbmltYXRpb246OmlzQWN0aXZlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9zdGF0ZSAhPSBBbmltYXRpb25TdGF0ZTo6U3RvcHBlZCB8fCBtX2Zp
bGxzRm9yd2FyZHM7Cit9CisKK3ZvaWQgQW5pbWF0aW9uOjphcHBseUludGVybmFsKEFwcGxpY2F0
aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIGNvbnN0IEFuaW1hdGlvblZhbHVlJiBmcm9t
LCBjb25zdCBBbmltYXRpb25WYWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKQoreworICAgIHN3aXRj
aCAobV9rZXlmcmFtZXMucHJvcGVydHkoKSkgeworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVRy
YW5zZm9ybToKKyAgICAgICAgYXBwbGljYXRpb25SZXN1bHRzLnRyYW5zZm9ybSA9IGFwcGx5VHJh
bnNmb3JtQW5pbWF0aW9uKHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVl
Jj4oZnJvbSkudmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFs
dWUmPih0bykudmFsdWUoKSwgcHJvZ3Jlc3MsIG1fYm94U2l6ZSwgbV9saXN0c01hdGNoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6CisgICAgICAg
IGFwcGxpY2F0aW9uUmVzdWx0cy5vcGFjaXR5ID0gYXBwbHlPcGFjaXR5QW5pbWF0aW9uKChzdGF0
aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlJj4oZnJvbSkudmFsdWUoKSksIChzdGF0
aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlJj4odG8pLnZhbHVlKCkpLCBwcm9ncmVz
cyk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlGaWx0ZXI6Cisg
ICAgICAgIGFwcGxpY2F0aW9uUmVzdWx0cy5maWx0ZXJzID0gYXBwbHlGaWx0ZXJBbmltYXRpb24o
c3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUmPihmcm9tKS52YWx1ZSgpLCBz
dGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KHRvKS52YWx1ZSgpLCBwcm9n
cmVzcywgbV9ib3hTaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBBbmltYXRpb25zOjphZGQo
Y29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pCit7CisgICAgLy8gUmVtb3ZlIHRoZSBvbGQgc3Rh
dGUgaWYgd2UgYXJlIHJlc3VtaW5nIGEgcGF1c2VkIGFuaW1hdGlvbi4KKyAgICByZW1vdmUoYW5p
bWF0aW9uLm5hbWUoKSwgYW5pbWF0aW9uLmtleWZyYW1lcygpLnByb3BlcnR5KCkpOworCisgICAg
bV9hbmltYXRpb25zLmFwcGVuZChhbmltYXRpb24pOworfQorCit2b2lkIEFuaW1hdGlvbnM6OnJl
bW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1h
dGNoaW5nKFsmbmFtZV0gKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7CisgICAgICAgIHJl
dHVybiBhbmltYXRpb24ubmFtZSgpID09IG5hbWU7CisgICAgfSk7Cit9CisKK3ZvaWQgQW5pbWF0
aW9uczo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3Bl
cnR5KQoreworICAgIG1fYW5pbWF0aW9ucy5yZW1vdmVBbGxNYXRjaGluZyhbJm5hbWUsIHByb3Bl
cnR5XSAoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIHsKKyAgICAgICAgcmV0dXJuIGFuaW1h
dGlvbi5uYW1lKCkgPT0gbmFtZSAmJiBhbmltYXRpb24ua2V5ZnJhbWVzKCkucHJvcGVydHkoKSA9
PSBwcm9wZXJ0eTsKKyAgICB9KTsKK30KKwordm9pZCBBbmltYXRpb25zOjpwYXVzZShjb25zdCBT
dHJpbmcmIG5hbWUsIFNlY29uZHMgb2Zmc2V0KQoreworICAgIGZvciAoYXV0byYgYW5pbWF0aW9u
IDogbV9hbmltYXRpb25zKSB7CisgICAgICAgIGlmIChhbmltYXRpb24ubmFtZSgpID09IG5hbWUp
CisgICAgICAgICAgICBhbmltYXRpb24ucGF1c2Uob2Zmc2V0KTsKKyAgICB9Cit9CisKK3ZvaWQg
QW5pbWF0aW9uczo6c3VzcGVuZChNb25vdG9uaWNUaW1lIHRpbWUpCit7CisgICAgLy8gRklYTUU6
IFRoaXMgc2VlbXMgd3JvbmcuIGBwYXVzZWAgdGFrZXMgdGltZSBvZmZzZXQgKFNlY29uZHMpLCBu
b3QgTW9ub3RvbmljVGltZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgzMTEyCisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnMp
CisgICAgICAgIGFuaW1hdGlvbi5wYXVzZSh0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkpOworfQor
Cit2b2lkIEFuaW1hdGlvbnM6OnJlc3VtZSgpCit7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24g
OiBtX2FuaW1hdGlvbnMpCisgICAgICAgIGFuaW1hdGlvbi5yZXN1bWUoKTsKK30KKwordm9pZCBB
bmltYXRpb25zOjphcHBseShBbmltYXRpb246OkFwcGxpY2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlv
blJlc3VsdHMsIE1vbm90b25pY1RpbWUgdGltZSkKK3sKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGlv
biA6IG1fYW5pbWF0aW9ucykKKyAgICAgICAgYW5pbWF0aW9uLmFwcGx5KGFwcGxpY2F0aW9uUmVz
dWx0cywgdGltZSk7Cit9CisKK3ZvaWQgQW5pbWF0aW9uczo6YXBwbHlLZWVwaW5nSW50ZXJuYWxT
dGF0ZShBbmltYXRpb246OkFwcGxpY2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIE1v
bm90b25pY1RpbWUgdGltZSkKK3sKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0
aW9ucykKKyAgICAgICAgYW5pbWF0aW9uLmFwcGx5S2VlcGluZ0ludGVybmFsU3RhdGUoYXBwbGlj
YXRpb25SZXN1bHRzLCB0aW1lKTsKK30KKworYm9vbCBBbmltYXRpb25zOjpoYXNBY3RpdmVBbmlt
YXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0eXBlKSBjb25zdAoreworICAgIHJldHVy
biBzdGQ6OmFueV9vZihtX2FuaW1hdGlvbnMuYmVnaW4oKSwgbV9hbmltYXRpb25zLmVuZCgpLAor
ICAgICAgICBbJnR5cGVdKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7CisgICAgICAgICAg
ICByZXR1cm4gYW5pbWF0aW9uLmlzQWN0aXZlKCkgJiYgYW5pbWF0aW9uLmtleWZyYW1lcygpLnBy
b3BlcnR5KCkgPT0gdHlwZTsKKyAgICAgICAgfSk7Cit9CisKK2Jvb2wgQW5pbWF0aW9uczo6aGFz
UnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6OmFueV9vZihtX2Fu
aW1hdGlvbnMuYmVnaW4oKSwgbV9hbmltYXRpb25zLmVuZCgpLAorICAgICAgICBbXShjb25zdCBB
bmltYXRpb24mIGFuaW1hdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGlvbi5zdGF0
ZSgpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlBsYXlpbmc7CisgICAgICAgIH0pOwor
fQorCitBbmltYXRpb25zIEFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAor
eworICAgIEFuaW1hdGlvbnMgYWN0aXZlOworICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9h
bmltYXRpb25zKSB7CisgICAgICAgIGlmIChhbmltYXRpb24uaXNBY3RpdmUoKSkKKyAgICAgICAg
ICAgIGFjdGl2ZS5hZGQoYW5pbWF0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIGFjdGl2ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgTmljb3NpYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wZTBiZGNhZjQ4MjhiMjQ4YmQwOTE0MzVjMWIzOTEwZDAyMjYzMDliCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhQW5p
bWF0aW9uLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Cit9CisKK25h
bWVzcGFjZSBOaWNvc2lhIHsKKworY2xhc3MgQW5pbWF0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVt
IGNsYXNzIEFuaW1hdGlvblN0YXRlIHsgUGxheWluZywgUGF1c2VkLCBTdG9wcGVkIH07CisKKyAg
ICBzdHJ1Y3QgQXBwbGljYXRpb25SZXN1bHQgeworICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpU
cmFuc2Zvcm1hdGlvbk1hdHJpeD4gdHJhbnNmb3JtOworICAgICAgICBPcHRpb25hbDxkb3VibGU+
IG9wYWNpdHk7CisgICAgICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+IGZp
bHRlcnM7CisgICAgICAgIGJvb2wgaGFzUnVubmluZ0FuaW1hdGlvbnMgeyBmYWxzZSB9OworICAg
IH07CisKKyAgICBBbmltYXRpb24oKQorICAgICAgICA6IG1fa2V5ZnJhbWVzKFdlYkNvcmU6OkFu
aW1hdGVkUHJvcGVydHlJbnZhbGlkKQorICAgIHsgfQorICAgIEFuaW1hdGlvbihjb25zdCBTdHJp
bmcmLCBjb25zdCBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkFuaW1hdGlvbiYsIGJvb2wsIE1vbm90b25pY1RpbWUs
IFNlY29uZHMsIEFuaW1hdGlvblN0YXRlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBBbmltYXRpb24o
Y29uc3QgQW5pbWF0aW9uJik7CisKKyAgICB2b2lkIGFwcGx5KEFwcGxpY2F0aW9uUmVzdWx0Jiwg
TW9ub3RvbmljVGltZSk7CisgICAgdm9pZCBhcHBseUtlZXBpbmdJbnRlcm5hbFN0YXRlKEFwcGxp
Y2F0aW9uUmVzdWx0JiwgTW9ub3RvbmljVGltZSk7CisgICAgdm9pZCBwYXVzZShTZWNvbmRzKTsK
KyAgICB2b2lkIHJlc3VtZSgpOworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKKworICAgIGNv
bnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IFdl
YkNvcmU6OktleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tl
eWZyYW1lczsgfQorICAgIEFuaW1hdGlvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZTsgfQorICAgIFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdGltaW5nRnVuY3Rpb24uZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICB2
b2lkIGFwcGx5SW50ZXJuYWwoQXBwbGljYXRpb25SZXN1bHQmLCBjb25zdCBXZWJDb3JlOjpBbmlt
YXRpb25WYWx1ZSYgZnJvbSwgY29uc3QgV2ViQ29yZTo6QW5pbWF0aW9uVmFsdWUmIHRvLCBmbG9h
dCBwcm9ncmVzcyk7CisgICAgU2Vjb25kcyBjb21wdXRlVG90YWxSdW5uaW5nVGltZShNb25vdG9u
aWNUaW1lKTsKKworICAgIFN0cmluZyBtX25hbWU7CisgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1
ZUxpc3QgbV9rZXlmcmFtZXM7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fYm94U2l6ZTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rpb24+IG1fdGltaW5nRnVuY3Rpb247CisgICAg
ZG91YmxlIG1faXRlcmF0aW9uQ291bnQ7CisgICAgZG91YmxlIG1fZHVyYXRpb247CisgICAgV2Vi
Q29yZTo6QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CisgICAgYm9v
bCBtX2ZpbGxzRm9yd2FyZHM7CisgICAgYm9vbCBtX2xpc3RzTWF0Y2g7CisgICAgTW9ub3Rvbmlj
VGltZSBtX3N0YXJ0VGltZTsKKyAgICBTZWNvbmRzIG1fcGF1c2VUaW1lOworICAgIFNlY29uZHMg
bV90b3RhbFJ1bm5pbmdUaW1lOworICAgIE1vbm90b25pY1RpbWUgbV9sYXN0UmVmcmVzaGVkVGlt
ZTsKKyAgICBBbmltYXRpb25TdGF0ZSBtX3N0YXRlOworfTsKKworY2xhc3MgQW5pbWF0aW9ucyB7
CitwdWJsaWM6CisgICAgQW5pbWF0aW9ucygpID0gZGVmYXVsdDsKKworICAgIHZvaWQgYWRkKGNv
bnN0IEFuaW1hdGlvbiYpOworICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSk7Cisg
ICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpBbmltYXRlZFByb3Bl
cnR5SUQpOworICAgIHZvaWQgcGF1c2UoY29uc3QgU3RyaW5nJiwgU2Vjb25kcyk7CisgICAgdm9p
ZCBzdXNwZW5kKE1vbm90b25pY1RpbWUpOworICAgIHZvaWQgcmVzdW1lKCk7CisKKyAgICB2b2lk
IGFwcGx5KEFuaW1hdGlvbjo6QXBwbGljYXRpb25SZXN1bHQmLCBNb25vdG9uaWNUaW1lKTsKKyAg
ICB2b2lkIGFwcGx5S2VlcGluZ0ludGVybmFsU3RhdGUoQW5pbWF0aW9uOjpBcHBsaWNhdGlvblJl
c3VsdCYsIE1vbm90b25pY1RpbWUpOworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9hbmltYXRpb25zLmlzRW1wdHkoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmltYXRpb25zLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxBbmltYXRpb24+
JiBhbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zOyB9CisgICAgVmVjdG9y
PEFuaW1hdGlvbj4mIGFuaW1hdGlvbnMoKSB7IHJldHVybiBtX2FuaW1hdGlvbnM7IH0KKworICAg
IGJvb2wgaGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdDsKKyAgICBib29sIGhhc0FjdGl2ZUFu
aW1hdGlvbnNPZlR5cGUoV2ViQ29yZTo6QW5pbWF0ZWRQcm9wZXJ0eUlEIHR5cGUpIGNvbnN0Owor
ICAgIEFuaW1hdGlvbnMgZ2V0QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIFZlY3RvcjxBbmltYXRpb24+IG1fYW5pbWF0aW9uczsKK307CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBsYXRmb3Jt
TGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3Np
YVBsYXRmb3JtTGF5ZXIuaAppbmRleCAxMWM2MDU5ODY2NzMzZTdkYzc1Zjg5MmJiZjM4ZmQyY2Iw
ZTIzM2IwLi4zY2NmZTYwOTM4NjEwZjZjZDFiMjJhYzliZWY4N2FlYzVlNWFkMWVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQbGF0
Zm9ybUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9OaWNvc2lhUGxhdGZvcm1MYXllci5oCkBAIC0zNSw4ICszNSw4IEBACiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiTmljb3NpYUFuaW1h
dGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCisjaW5jbHVkZSAiTmljb3NpYUFuaW1hdGlvbi5oIgog
I2luY2x1ZGUgIk5pY29zaWFTY2VuZUludGVncmF0aW9uLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1h
cHBlckFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTE3MSw3ICsx
NzEsNyBAQCBwdWJsaWM6CiAgICAgICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVy
czsKICAgICAgICAgLy8gRklYTUU6IERlc3BpdGUgdGhlIG5hbWUsIHRoaXMgaW1wbGVtZW50YXRp
b24gaXMgbm90CiAgICAgICAgIC8vIFRleHR1cmVNYXBwZXItc3BlY2lmaWMuIFNob3VsZCBiZSBy
ZW5hbWVkIHdoZW4gbmVjZXNzYXJ5LgotICAgICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5p
bWF0aW9ucyBhbmltYXRpb25zOworICAgICAgICBBbmltYXRpb25zIGFuaW1hdGlvbnM7CiAKICAg
ICAgICAgVmVjdG9yPFJlZlB0cjxDb21wb3NpdGlvbkxheWVyPj4gY2hpbGRyZW47CiAgICAgICAg
IFJlZlB0cjxDb21wb3NpdGlvbkxheWVyPiByZXBsaWNhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggZWFkZmJhMGY2YzY3ODY4NjZlODI0ODFkOTJlMzI2
Yzc2OGZiZDVmNi4uYjcyNDNlOTk0YzAwNGQyMjE1ZGNiOTRjMWU0ZWViZGEwZTkyNTQwOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBAIC0yMyw3ICsyMyw3
IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ckZhY3RvcnkuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJOaWNvc2lhQW5pbWF0aW9uLmgiCiAKICNpZiAh
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCkBAIC01NzIsNyArNTcyLDcgQEAgYm9vbCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiB2YWx1ZUxpc3QKICAgICAgICAgbGlzdHNNYXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3Bl
cmF0aW9ucyh2YWx1ZUxpc3QsIGhhc0JpZ1JvdGF0aW9uKSA+PSAwOwogCiAgICAgY29uc3QgTW9u
b3RvbmljVGltZSBjdXJyZW50VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgIG1fYW5p
bWF0aW9ucy5hZGQoVGV4dHVyZU1hcHBlckFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxp
c3QsIGJveFNpemUsICphbmltLCBsaXN0c01hdGNoLCBjdXJyZW50VGltZSAtIFNlY29uZHModGlt
ZU9mZnNldCksIDBfcywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlBs
YXlpbmcpKTsKKyAgICBtX2FuaW1hdGlvbnMuYWRkKE5pY29zaWE6OkFuaW1hdGlvbihrZXlmcmFt
ZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsICphbmltLCBsaXN0c01hdGNoLCBjdXJyZW50VGlt
ZSAtIFNlY29uZHModGltZU9mZnNldCksIDBfcywgTmljb3NpYTo6QW5pbWF0aW9uOjpBbmltYXRp
b25TdGF0ZTo6UGxheWluZykpOwogICAgIC8vIG1fYW5pbWF0aW9uU3RhcnRUaW1lIGlzIHRoZSB0
aW1lIG9mIHRoZSBmaXJzdCByZWFsIGZyYW1lIG9mIGFuaW1hdGlvbiwgbm93IG9yIGRlbGF5ZWQg
YnkgYSBuZWdhdGl2ZSBvZmZzZXQuCiAgICAgaWYgKFNlY29uZHModGltZU9mZnNldCkgPiAwX3Mp
CiAgICAgICAgIG1fYW5pbWF0aW9uU3RhcnRUaW1lID0gY3VycmVudFRpbWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IDk4MDA0MWVlZDkxOGNjNzBlNjk1ZTIx
NWNjYzA0ODdkYzE3N2IzNzcuLmU2NjE1ZTFjZDY4NjI0YWYzZThhOTlhY2RhZGIyZTU4ODg1NDQ1
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBAIC0xNjIsNyAr
MTYyLDcgQEAgcHJpdmF0ZToKIAogICAgIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBtX2Nv
bnRlbnRzTGF5ZXI7CiAgICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKLSAgICBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CisgICAgTmljb3NpYTo6QW5pbWF0aW9u
cyBtX2FuaW1hdGlvbnM7CiAgICAgTW9ub3RvbmljVGltZSBtX2FuaW1hdGlvblN0YXJ0VGltZTsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZWU1NDljYWJlMjFhNWYwMGU4ZWI3MGExMGNlNDU5MWQ1ODk4NWYzOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJMYXlvdXRTaXplLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotc3RhdGljIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kRnVuYyhGaWx0
ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uJiB0b09wLCBkb3VibGUgcHJvZ3Jl
c3MsIGNvbnN0IEZsb2F0U2l6ZSYsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCi17
Ci0gICAgcmV0dXJuIHRvT3AuYmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgYmxlbmRUb1Bhc3N0aHJv
dWdoKTsKLX0KLQotc3RhdGljIEZpbHRlck9wZXJhdGlvbnMgYXBwbHlGaWx0ZXJBbmltYXRpb24o
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8s
IGRvdWJsZSBwcm9ncmVzcywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQotewotICAgIC8vIEZp
cnN0IGZyYW1lIG9mIGFuIGFuaW1hdGlvbi4KLSAgICBpZiAoIXByb2dyZXNzKQotICAgICAgICBy
ZXR1cm4gZnJvbTsKLQotICAgIC8vIExhc3QgZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgotICAgIGlm
IChwcm9ncmVzcyA9PSAxKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICBpZiAoIWZyb20uaXNF
bXB0eSgpICYmICF0by5pc0VtcHR5KCkgJiYgIWZyb20ub3BlcmF0aW9uc01hdGNoKHRvKSkKLSAg
ICAgICAgcmV0dXJuIHRvOwotCi0gICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7Ci0KLSAgICBz
aXplX3QgZnJvbVNpemUgPSBmcm9tLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHRv
U2l6ZSA9IHRvLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBzdGQ6Om1h
eChmcm9tU2l6ZSwgdG9TaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkr
KykgewotICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9tT3AgPSAoaSA8IGZyb21T
aXplKSA/IGZyb20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogbnVsbHB0cjsKLSAgICAgICAgUmVm
UHRyPEZpbHRlck9wZXJhdGlvbj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRvLm9wZXJhdGlvbnMo
KVtpXS5nZXQoKSA6IG51bGxwdHI7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJs
ZW5kZWRPcCA9IHRvT3AgPyBibGVuZEZ1bmMoZnJvbU9wLmdldCgpLCAqdG9PcCwgcHJvZ3Jlc3Ms
IGJveFNpemUpIDogKGZyb21PcCA/IGJsZW5kRnVuYyhudWxscHRyLCAqZnJvbU9wLCBwcm9ncmVz
cywgYm94U2l6ZSwgdHJ1ZSkgOiBudWxscHRyKTsKLSAgICAgICAgaWYgKGJsZW5kZWRPcCkKLSAg
ICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZSgpOwotICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQotICAg
ICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3AgPyB0b09wIDogV1RG
TW92ZShpZGVudGl0eU9wKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVz
dWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoZnJvbU9wID8gZnJvbU9wIDogV1RGTW92ZShpZGVudGl0
eU9wKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0
aWMgYm9vbCBzaG91bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUoQW5pbWF0aW9uOjpBbmltYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbG9vcENvdW50KQotewotICAgIHJldHVybiAoZGlyZWN0
aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlICYmIGxvb3BDb3Vu
dCAmIDEpCi0gICAgICAgIHx8IChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJl
Y3Rpb25BbHRlcm5hdGVSZXZlcnNlICYmICEobG9vcENvdW50ICYgMSkpCi0gICAgICAgIHx8IGRp
cmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2U7Ci19Ci0KLXN0
YXRpYyBkb3VibGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKGRvdWJsZSBydW5uaW5nVGltZSwg
ZG91YmxlIGR1cmF0aW9uLCBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24s
IGRvdWJsZSBpdGVyYXRpb25Db3VudCkKLXsKLSAgICBpZiAoIWR1cmF0aW9uKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIGNvbnN0IGludCBsb29wQ291bnQgPSBydW5uaW5nVGltZSAvIGR1cmF0
aW9uOwotICAgIGNvbnN0IGRvdWJsZSBsYXN0RnVsbExvb3AgPSBkdXJhdGlvbiAqIGRvdWJsZShs
b29wQ291bnQpOwotICAgIGNvbnN0IGRvdWJsZSByZW1haW5kZXIgPSBydW5uaW5nVGltZSAtIGxh
c3RGdWxsTG9vcDsKLSAgICAvLyBJZ25vcmUgcmVtYWluZGVyIHdoZW4gd2UndmUgcmVhY2hlZCB0
aGUgZW5kIG9mIGFuaW1hdGlvbi4KLSAgICBjb25zdCBkb3VibGUgbm9ybWFsaXplZCA9IChsb29w
Q291bnQgPT0gaXRlcmF0aW9uQ291bnQpID8gMS4wIDogKHJlbWFpbmRlciAvIGR1cmF0aW9uKTsK
LQotICAgIHJldHVybiBzaG91bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUoZGlyZWN0aW9uLCBsb29w
Q291bnQpID8gMSAtIG5vcm1hbGl6ZWQgOiBub3JtYWxpemVkOwotfQotCi1zdGF0aWMgZG91Ymxl
IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZUZvckZpbGxzRm9yd2FyZHMoZG91YmxlIGl0ZXJhdGlv
bkNvdW50LCBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAg
aWYgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbk5vcm1hbCkKLSAg
ICAgICAgcmV0dXJuIDE7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlv
bkRpcmVjdGlvblJldmVyc2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzaG91bGRS
ZXZlcnNlQW5pbWF0aW9uVmFsdWUoZGlyZWN0aW9uLCBpdGVyYXRpb25Db3VudCkgPyAxIDogMDsK
LX0KLQotc3RhdGljIGZsb2F0IGFwcGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBmcm9tT3BhY2l0
eSwgZmxvYXQgdG9PcGFjaXR5LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gT3B0aW1pemF0
aW9uOiBzcGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KLSAgICBpZiAocHJv
Z3Jlc3MgPT0gMS4wKQotICAgICAgICByZXR1cm4gdG9PcGFjaXR5OwotCi0gICAgaWYgKCFwcm9n
cmVzcykKLSAgICAgICAgcmV0dXJuIGZyb21PcGFjaXR5OwotCi0gICAgcmV0dXJuIGZyb21PcGFj
aXR5ICsgcHJvZ3Jlc3MgKiAodG9PcGFjaXR5IC0gZnJvbU9wYWNpdHkpOwotfQotCi1zdGF0aWMg
VHJhbnNmb3JtYXRpb25NYXRyaXggYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdG8sIGRvdWJs
ZSBwcm9ncmVzcywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplLCBib29sIGxpc3RzTWF0Y2gpCi17
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotCi0gICAgLy8gRmlyc3QgZnJhbWUg
b2YgYW4gYW5pbWF0aW9uLgotICAgIGlmICghcHJvZ3Jlc3MpIHsKLSAgICAgICAgZnJvbS5hcHBs
eShib3hTaXplLCBtYXRyaXgpOwotICAgICAgICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAg
IC8vIExhc3QgZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgotICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7
Ci0gICAgICAgIHRvLmFwcGx5KGJveFNpemUsIG1hdHJpeCk7Ci0gICAgICAgIHJldHVybiBtYXRy
aXg7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgaGF2ZSBpbmNvbXBhdGlibGUgb3BlcmF0aW9uIGxp
c3RzLCB3ZSBibGVuZCB0aGUgcmVzdWx0aW5nIG1hdHJpY2VzLgotICAgIGlmICghbGlzdHNNYXRj
aCkgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tTWF0cml4OwotICAgICAgICB0
by5hcHBseShib3hTaXplLCBtYXRyaXgpOwotICAgICAgICBmcm9tLmFwcGx5KGJveFNpemUsIGZy
b21NYXRyaXgpOwotICAgICAgICBtYXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpOwot
ICAgICAgICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAgIC8vIEFuaW1hdGlvbiB0byAiLXdl
YmtpdC10cmFuc2Zvcm06IG5vbmUiLgotICAgIGlmICghdG8uc2l6ZSgpKSB7Ci0gICAgICAgIFRy
YW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZChmcm9tKTsKLSAgICAgICAgZm9yIChhdXRvJiBvcGVy
YXRpb24gOiBibGVuZGVkLm9wZXJhdGlvbnMoKSkKLSAgICAgICAgICAgIG9wZXJhdGlvbi0+Ymxl
bmQobnVsbHB0ciwgcHJvZ3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOwotICAg
ICAgICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAgIC8vIEFuaW1hdGlvbiBmcm9tICItd2Vi
a2l0LXRyYW5zZm9ybTogbm9uZSIuCi0gICAgaWYgKCFmcm9tLnNpemUoKSkgewotICAgICAgICBU
cmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQodG8pOwotICAgICAgICBmb3IgKGF1dG8mIG9wZXJh
dGlvbiA6IGJsZW5kZWQub3BlcmF0aW9ucygpKQotICAgICAgICAgICAgb3BlcmF0aW9uLT5ibGVu
ZChudWxscHRyLCAxIC0gcHJvZ3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOwot
ICAgICAgICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAgIC8vIE5vcm1hbCBhbmltYXRpb24g
d2l0aCBhIG1hdGNoaW5nIG9wZXJhdGlvbiBsaXN0LgotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
YmxlbmRlZCh0byk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibGVuZGVkLm9wZXJhdGlv
bnMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5k
KGZyb20uYXQoaSksIHByb2dyZXNzLCAhZnJvbS5hdChpKSktPmFwcGx5KG1hdHJpeCwgYm94U2l6
ZSk7Ci0gICAgcmV0dXJuIG1hdHJpeDsKLX0KLQotc3RhdGljIGNvbnN0IFRpbWluZ0Z1bmN0aW9u
JiB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvblZhbHVlJiBh
bmltYXRpb25WYWx1ZSwgY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKQot
ewotICAgIGlmIChhbmltYXRpb25WYWx1ZS50aW1pbmdGdW5jdGlvbigpKQotICAgICAgICByZXR1
cm4gKmFuaW1hdGlvblZhbHVlLnRpbWluZ0Z1bmN0aW9uKCk7Ci0gICAgaWYgKGFuaW1hdGlvbi50
aW1pbmdGdW5jdGlvbigpKQotICAgICAgICByZXR1cm4gKmFuaW1hdGlvbi50aW1pbmdGdW5jdGlv
bigpOwotICAgIHJldHVybiBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpkZWZhdWx0VGltaW5n
RnVuY3Rpb24oKTsKLX0KLQotVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4dHVyZU1hcHBlckFu
aW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlm
cmFtZXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRp
b24sIGJvb2wgbGlzdHNNYXRjaCwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUsIFNlY29uZHMgcGF1
c2VUaW1lLCBBbmltYXRpb25TdGF0ZSBzdGF0ZSkKLSAgICA6IG1fbmFtZShuYW1lLmlzU2FmZVRv
U2VuZFRvQW5vdGhlclRocmVhZCgpID8gbmFtZSA6IG5hbWUuaXNvbGF0ZWRDb3B5KCkpCi0gICAg
LCBtX2tleWZyYW1lcyhrZXlmcmFtZXMpCi0gICAgLCBtX2JveFNpemUoYm94U2l6ZSkKLSAgICAs
IG1fdGltaW5nRnVuY3Rpb24oYW5pbWF0aW9uLnRpbWluZ0Z1bmN0aW9uKCktPmNsb25lKCkpCi0g
ICAgLCBtX2l0ZXJhdGlvbkNvdW50KGFuaW1hdGlvbi5pdGVyYXRpb25Db3VudCgpKQotICAgICwg
bV9kdXJhdGlvbihhbmltYXRpb24uZHVyYXRpb24oKSkKLSAgICAsIG1fZGlyZWN0aW9uKGFuaW1h
dGlvbi5kaXJlY3Rpb24oKSkKLSAgICAsIG1fZmlsbHNGb3J3YXJkcyhhbmltYXRpb24uZmlsbHNG
b3J3YXJkcygpKQotICAgICwgbV9saXN0c01hdGNoKGxpc3RzTWF0Y2gpCi0gICAgLCBtX3N0YXJ0
VGltZShzdGFydFRpbWUpCi0gICAgLCBtX3BhdXNlVGltZShwYXVzZVRpbWUpCi0gICAgLCBtX3Rv
dGFsUnVubmluZ1RpbWUoMF9zKQotICAgICwgbV9sYXN0UmVmcmVzaGVkVGltZShtX3N0YXJ0VGlt
ZSkKLSAgICAsIG1fc3RhdGUoc3RhdGUpCi17Ci19Ci0KLVRleHR1cmVNYXBwZXJBbmltYXRpb246
OlRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgb3Ro
ZXIpCi0gICAgOiBtX25hbWUob3RoZXIubV9uYW1lLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVh
ZCgpID8gb3RoZXIubV9uYW1lIDogb3RoZXIubV9uYW1lLmlzb2xhdGVkQ29weSgpKQotICAgICwg
bV9rZXlmcmFtZXMob3RoZXIubV9rZXlmcmFtZXMpCi0gICAgLCBtX2JveFNpemUob3RoZXIubV9i
b3hTaXplKQotICAgICwgbV90aW1pbmdGdW5jdGlvbihvdGhlci5tX3RpbWluZ0Z1bmN0aW9uLT5j
bG9uZSgpKQotICAgICwgbV9pdGVyYXRpb25Db3VudChvdGhlci5tX2l0ZXJhdGlvbkNvdW50KQot
ICAgICwgbV9kdXJhdGlvbihvdGhlci5tX2R1cmF0aW9uKQotICAgICwgbV9kaXJlY3Rpb24ob3Ro
ZXIubV9kaXJlY3Rpb24pCi0gICAgLCBtX2ZpbGxzRm9yd2FyZHMob3RoZXIubV9maWxsc0Zvcndh
cmRzKQotICAgICwgbV9saXN0c01hdGNoKG90aGVyLm1fbGlzdHNNYXRjaCkKLSAgICAsIG1fc3Rh
cnRUaW1lKG90aGVyLm1fc3RhcnRUaW1lKQotICAgICwgbV9wYXVzZVRpbWUob3RoZXIubV9wYXVz
ZVRpbWUpCi0gICAgLCBtX3RvdGFsUnVubmluZ1RpbWUob3RoZXIubV90b3RhbFJ1bm5pbmdUaW1l
KQotICAgICwgbV9sYXN0UmVmcmVzaGVkVGltZShvdGhlci5tX2xhc3RSZWZyZXNoZWRUaW1lKQot
ICAgICwgbV9zdGF0ZShvdGhlci5tX3N0YXRlKQotewotfQotCi12b2lkIFRleHR1cmVNYXBwZXJB
bmltYXRpb246OmFwcGx5KEFwcGxpY2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIE1v
bm90b25pY1RpbWUgdGltZSkKLXsKLSAgICBpZiAoIWlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFNlY29uZHMgdG90YWxSdW5uaW5nVGltZSA9IGNvbXB1dGVUb3RhbFJ1bm5pbmdU
aW1lKHRpbWUpOwotICAgIGRvdWJsZSBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVkQW5pbWF0
aW9uVmFsdWUodG90YWxSdW5uaW5nVGltZS5zZWNvbmRzKCksIG1fZHVyYXRpb24sIG1fZGlyZWN0
aW9uLCBtX2l0ZXJhdGlvbkNvdW50KTsKLQotICAgIGlmIChtX2l0ZXJhdGlvbkNvdW50ICE9IEFu
aW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSAmJiB0b3RhbFJ1bm5pbmdUaW1lLnNlY29u
ZHMoKSA+PSBtX2R1cmF0aW9uICogbV9pdGVyYXRpb25Db3VudCkgewotICAgICAgICBtX3N0YXRl
ID0gQW5pbWF0aW9uU3RhdGU6OlN0b3BwZWQ7Ci0gICAgICAgIG1fcGF1c2VUaW1lID0gMF9zOwot
ICAgICAgICBpZiAobV9maWxsc0ZvcndhcmRzKQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVl
ID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yRmlsbHNGb3J3YXJkcyhtX2l0ZXJhdGlvbkNv
dW50LCBtX2RpcmVjdGlvbik7Ci0gICAgfQotCi0gICAgYXBwbGljYXRpb25SZXN1bHRzLmhhc1J1
bm5pbmdBbmltYXRpb25zIHw9IChtX3N0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQbGF5aW5nKTsK
LQotICAgIGlmICghbm9ybWFsaXplZFZhbHVlKSB7Ci0gICAgICAgIGFwcGx5SW50ZXJuYWwoYXBw
bGljYXRpb25SZXN1bHRzLCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSksIDAp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZSA9PSAx
LjApIHsKLSAgICAgICAgYXBwbHlJbnRlcm5hbChhcHBsaWNhdGlvblJlc3VsdHMsIG1fa2V5ZnJh
bWVzLmF0KG1fa2V5ZnJhbWVzLnNpemUoKSAtIDIpLCBtX2tleWZyYW1lcy5hdChtX2tleWZyYW1l
cy5zaXplKCkgLSAxKSwgMSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1fa2V5
ZnJhbWVzLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgIGF1dG8mIHRpbWluZ0Z1bmN0aW9uID0gdGlt
aW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShtX2tleWZyYW1lcy5hdCgwKSwgKnRoaXMpOwot
ICAgICAgICBub3JtYWxpemVkVmFsdWUgPSB0aW1pbmdGdW5jdGlvbi50cmFuc2Zvcm1UaW1lKG5v
cm1hbGl6ZWRWYWx1ZSwgbV9kdXJhdGlvbik7Ci0gICAgICAgIGFwcGx5SW50ZXJuYWwoYXBwbGlj
YXRpb25SZXN1bHRzLCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSksIG5vcm1h
bGl6ZWRWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgewotICAgICAgICBjb25zdCBB
bmltYXRpb25WYWx1ZSYgZnJvbSA9IG1fa2V5ZnJhbWVzLmF0KGkpOwotICAgICAgICBjb25zdCBB
bmltYXRpb25WYWx1ZSYgdG8gPSBtX2tleWZyYW1lcy5hdChpICsgMSk7Ci0gICAgICAgIGlmIChm
cm9tLmtleVRpbWUoKSA+IG5vcm1hbGl6ZWRWYWx1ZSB8fCB0by5rZXlUaW1lKCkgPCBub3JtYWxp
emVkVmFsdWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBub3JtYWxpemVkVmFs
dWUgPSAobm9ybWFsaXplZFZhbHVlIC0gZnJvbS5rZXlUaW1lKCkpIC8gKHRvLmtleVRpbWUoKSAt
IGZyb20ua2V5VGltZSgpKTsKLSAgICAgICAgYXV0byYgdGltaW5nRnVuY3Rpb24gPSB0aW1pbmdG
dW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGZyb20sICp0aGlzKTsKLSAgICAgICAgbm9ybWFsaXpl
ZFZhbHVlID0gdGltaW5nRnVuY3Rpb24udHJhbnNmb3JtVGltZShub3JtYWxpemVkVmFsdWUsIG1f
ZHVyYXRpb24pOwotICAgICAgICBhcHBseUludGVybmFsKGFwcGxpY2F0aW9uUmVzdWx0cywgZnJv
bSwgdG8sIG5vcm1hbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9p
ZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphcHBseUtlZXBpbmdJbnRlcm5hbFN0YXRlKEFwcGxp
Y2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIE1vbm90b25pY1RpbWUgdGltZSkKLXsK
LSAgICBNb25vdG9uaWNUaW1lIG9sZExhc3RSZWZyZXNoZWRUaW1lID0gbV9sYXN0UmVmcmVzaGVk
VGltZTsKLSAgICBTZWNvbmRzIG9sZFRvdGFsUnVubmluZ1RpbWUgPSBtX3RvdGFsUnVubmluZ1Rp
bWU7Ci0gICAgQW5pbWF0aW9uU3RhdGUgb2xkU3RhdGUgPSBtX3N0YXRlOwotCi0gICAgYXBwbHko
YXBwbGljYXRpb25SZXN1bHRzLCB0aW1lKTsKLQotICAgIG1fbGFzdFJlZnJlc2hlZFRpbWUgPSBv
bGRMYXN0UmVmcmVzaGVkVGltZTsKLSAgICBtX3RvdGFsUnVubmluZ1RpbWUgPSBvbGRUb3RhbFJ1
bm5pbmdUaW1lOwotICAgIG1fc3RhdGUgPSBvbGRTdGF0ZTsKLX0KLQotdm9pZCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uOjpwYXVzZShTZWNvbmRzIHRpbWUpCi17Ci0gICAgbV9zdGF0ZSA9IEFuaW1h
dGlvblN0YXRlOjpQYXVzZWQ7Ci0gICAgbV9wYXVzZVRpbWUgPSB0aW1lOwotfQotCi12b2lkIFRl
eHR1cmVNYXBwZXJBbmltYXRpb246OnJlc3VtZSgpCi17Ci0gICAgbV9zdGF0ZSA9IEFuaW1hdGlv
blN0YXRlOjpQbGF5aW5nOwotICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIHdyb25nLiBtX3RvdGFs
UnVubmluZ1RpbWUgaXMgY2xlYXJlZC4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgzMTEzCi0gICAgbV9wYXVzZVRpbWUgPSAwX3M7Ci0gICAgbV90b3Rh
bFJ1bm5pbmdUaW1lID0gbV9wYXVzZVRpbWU7Ci0gICAgbV9sYXN0UmVmcmVzaGVkVGltZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOwotfQotCi1TZWNvbmRzIFRleHR1cmVNYXBwZXJBbmltYXRpb246
OmNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKE1vbm90b25pY1RpbWUgdGltZSkKLXsKLSAgICBpZiAo
bV9zdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkKQotICAgICAgICByZXR1cm4gbV9wYXVz
ZVRpbWU7Ci0KLSAgICBNb25vdG9uaWNUaW1lIG9sZExhc3RSZWZyZXNoZWRUaW1lID0gbV9sYXN0
UmVmcmVzaGVkVGltZTsKLSAgICBtX2xhc3RSZWZyZXNoZWRUaW1lID0gdGltZTsKLSAgICBtX3Rv
dGFsUnVubmluZ1RpbWUgKz0gbV9sYXN0UmVmcmVzaGVkVGltZSAtIG9sZExhc3RSZWZyZXNoZWRU
aW1lOwotICAgIHJldHVybiBtX3RvdGFsUnVubmluZ1RpbWU7Ci19Ci0KLWJvb2wgVGV4dHVyZU1h
cHBlckFuaW1hdGlvbjo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRlICE9
IEFuaW1hdGlvblN0YXRlOjpTdG9wcGVkIHx8IG1fZmlsbHNGb3J3YXJkczsKLX0KLQotdm9pZCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphcHBseUludGVybmFsKEFwcGxpY2F0aW9uUmVzdWx0JiBh
cHBsaWNhdGlvblJlc3VsdHMsIGNvbnN0IEFuaW1hdGlvblZhbHVlJiBmcm9tLCBjb25zdCBBbmlt
YXRpb25WYWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKQotewotICAgIHN3aXRjaCAobV9rZXlmcmFt
ZXMucHJvcGVydHkoKSkgewotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybToKLSAg
ICAgICAgYXBwbGljYXRpb25SZXN1bHRzLnRyYW5zZm9ybSA9IGFwcGx5VHJhbnNmb3JtQW5pbWF0
aW9uKHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlJj4oZnJvbSkudmFs
dWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUmPih0bykudmFs
dWUoKSwgcHJvZ3Jlc3MsIG1fYm94U2l6ZSwgbV9saXN0c01hdGNoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgICAgIGFwcGxpY2F0aW9u
UmVzdWx0cy5vcGFjaXR5ID0gYXBwbHlPcGFjaXR5QW5pbWF0aW9uKChzdGF0aWNfY2FzdDxjb25z
dCBGbG9hdEFuaW1hdGlvblZhbHVlJj4oZnJvbSkudmFsdWUoKSksIChzdGF0aWNfY2FzdDxjb25z
dCBGbG9hdEFuaW1hdGlvblZhbHVlJj4odG8pLnZhbHVlKCkpLCBwcm9ncmVzcyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlGaWx0ZXI6Ci0gICAgICAgIGFwcGxp
Y2F0aW9uUmVzdWx0cy5maWx0ZXJzID0gYXBwbHlGaWx0ZXJBbmltYXRpb24oc3RhdGljX2Nhc3Q8
Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUmPihmcm9tKS52YWx1ZSgpLCBzdGF0aWNfY2FzdDxj
b25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KHRvKS52YWx1ZSgpLCBwcm9ncmVzcywgbV9ib3hT
aXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6YWRk
KGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbikKLXsKLSAgICAvLyBSZW1v
dmUgdGhlIG9sZCBzdGF0ZSBpZiB3ZSBhcmUgcmVzdW1pbmcgYSBwYXVzZWQgYW5pbWF0aW9uLgot
ICAgIHJlbW92ZShhbmltYXRpb24ubmFtZSgpLCBhbmltYXRpb24ua2V5ZnJhbWVzKCkucHJvcGVy
dHkoKSk7Ci0KLSAgICBtX2FuaW1hdGlvbnMuYXBwZW5kKGFuaW1hdGlvbik7Ci19Ci0KLXZvaWQg
VGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFtZV0gKGNvbnN0IFRleHR1cmVN
YXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbikgewotICAgICAgICByZXR1cm4gYW5pbWF0aW9uLm5h
bWUoKSA9PSBuYW1lOwotICAgIH0pOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25z
OjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkp
Ci17Ci0gICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFtZSwgcHJvcGVydHld
IChjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsKLSAgICAgICAgcmV0
dXJuIGFuaW1hdGlvbi5uYW1lKCkgPT0gbmFtZSAmJiBhbmltYXRpb24ua2V5ZnJhbWVzKCkucHJv
cGVydHkoKSA9PSBwcm9wZXJ0eTsKLSAgICB9KTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uczo6cGF1c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWNvbmRzIG9mZnNldCkKLXsKLSAg
ICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykgewotICAgICAgICBpZiAoYW5p
bWF0aW9uLm5hbWUoKSA9PSBuYW1lKQotICAgICAgICAgICAgYW5pbWF0aW9uLnBhdXNlKG9mZnNl
dCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpzdXNwZW5kKE1v
bm90b25pY1RpbWUgdGltZSkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyB3cm9uZy4gYHBh
dXNlYCB0YWtlcyB0aW1lIG9mZnNldCAoU2Vjb25kcyksIG5vdCBNb25vdG9uaWNUaW1lLgotICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODMxMTIKLSAgICBm
b3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykKLSAgICAgICAgYW5pbWF0aW9uLnBh
dXNlKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKSk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbnM6OnJlc3VtZSgpCi17Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1h
dGlvbnMpCi0gICAgICAgIGFuaW1hdGlvbi5yZXN1bWUoKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uczo6YXBwbHkoVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6QXBwbGljYXRpb25S
ZXN1bHQmIGFwcGxpY2F0aW9uUmVzdWx0cywgTW9ub3RvbmljVGltZSB0aW1lKQotewotICAgIGZv
ciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25zKQotICAgICAgICBhbmltYXRpb24uYXBw
bHkoYXBwbGljYXRpb25SZXN1bHRzLCB0aW1lKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uczo6YXBwbHlLZWVwaW5nSW50ZXJuYWxTdGF0ZShUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
OjpBcHBsaWNhdGlvblJlc3VsdCYgYXBwbGljYXRpb25SZXN1bHRzLCBNb25vdG9uaWNUaW1lIHRp
bWUpCi17Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnMpCi0gICAgICAg
IGFuaW1hdGlvbi5hcHBseUtlZXBpbmdJbnRlcm5hbFN0YXRlKGFwcGxpY2F0aW9uUmVzdWx0cywg
dGltZSk7Ci19Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6Omhhc0FjdGl2ZUFuaW1h
dGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eUlEIHR5cGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHN0ZDo6YW55X29mKG1fYW5pbWF0aW9ucy5iZWdpbigpLCBtX2FuaW1hdGlvbnMuZW5kKCksCi0g
ICAgICAgIFsmdHlwZV0oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7
IHJldHVybiBhbmltYXRpb24uaXNBY3RpdmUoKSAmJiBhbmltYXRpb24ua2V5ZnJhbWVzKCkucHJv
cGVydHkoKSA9PSB0eXBlOyB9KTsKLX0KLQotYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6
aGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiBzdGQ6OmFueV9vZiht
X2FuaW1hdGlvbnMuYmVnaW4oKSwgbV9hbmltYXRpb25zLmVuZCgpLAotICAgICAgICBbXShjb25z
dCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgcmV0dXJuIGFuaW1hdGlvbi5z
dGF0ZSgpID09IFRleHR1cmVNYXBwZXJBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpQbGF5aW5n
OyB9KTsKLX0KLQotVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgVGV4dHVyZU1hcHBlckFuaW1hdGlv
bnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAotewotICAgIFRleHR1cmVNYXBwZXJBbmlt
YXRpb25zIGFjdGl2ZTsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykg
ewotICAgICAgICBpZiAoYW5pbWF0aW9uLmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBhY3RpdmUu
YWRkKGFuaW1hdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBhY3RpdmU7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlMjJlMjA0N2Y5ZTFmNjFkMDE5NmM3MGNlNjRjYzdhODE2M2Yz
MTAwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgVGV4dHVyZU1hcHBlckFuaW1hdGlvbl9oCi0jZGVm
aW5lIFRleHR1cmVNYXBwZXJBbmltYXRpb25faAotCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4Owot
Ci1jbGFzcyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uIHsKLXB1YmxpYzoKLSAgICBlbnVtIGNsYXNz
IEFuaW1hdGlvblN0YXRlIHsgUGxheWluZywgUGF1c2VkLCBTdG9wcGVkIH07Ci0KLSAgICBzdHJ1
Y3QgQXBwbGljYXRpb25SZXN1bHQgewotICAgICAgICBPcHRpb25hbDxUcmFuc2Zvcm1hdGlvbk1h
dHJpeD4gdHJhbnNmb3JtOwotICAgICAgICBPcHRpb25hbDxkb3VibGU+IG9wYWNpdHk7Ci0gICAg
ICAgIE9wdGlvbmFsPEZpbHRlck9wZXJhdGlvbnM+IGZpbHRlcnM7Ci0gICAgICAgIGJvb2wgaGFz
UnVubmluZ0FuaW1hdGlvbnMgeyBmYWxzZSB9OwotICAgIH07Ci0KLSAgICBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uKCkKLSAgICAgICAgOiBtX2tleWZyYW1lcyhBbmltYXRlZFByb3BlcnR5SW52YWxp
ZCkKLSAgICB7IH0KLSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYsIGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgQW5pbWF0aW9u
JiwgYm9vbCwgTW9ub3RvbmljVGltZSwgU2Vjb25kcywgQW5pbWF0aW9uU3RhdGUpOwotICAgIFdF
QkNPUkVfRVhQT1JUIFRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbiYpOwotCi0gICAgdm9pZCBhcHBseShBcHBsaWNhdGlvblJlc3VsdCYsIE1vbm90b25p
Y1RpbWUpOwotICAgIHZvaWQgYXBwbHlLZWVwaW5nSW50ZXJuYWxTdGF0ZShBcHBsaWNhdGlvblJl
c3VsdCYsIE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgcGF1c2UoU2Vjb25kcyk7Ci0gICAgdm9p
ZCByZXN1bWUoKTsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBTdHJp
bmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBLZXlmcmFtZVZh
bHVlTGlzdCYga2V5ZnJhbWVzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXM7IH0KLSAgICBB
bmltYXRpb25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KLSAgICBUaW1p
bmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpbWluZ0Z1bmN0
aW9uLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBhcHBseUludGVybmFsKEFwcGxpY2F0
aW9uUmVzdWx0JiwgY29uc3QgQW5pbWF0aW9uVmFsdWUmIGZyb20sIGNvbnN0IEFuaW1hdGlvblZh
bHVlJiB0bywgZmxvYXQgcHJvZ3Jlc3MpOwotICAgIFNlY29uZHMgY29tcHV0ZVRvdGFsUnVubmlu
Z1RpbWUoTW9ub3RvbmljVGltZSk7Ci0KLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIEtleWZyYW1l
VmFsdWVMaXN0IG1fa2V5ZnJhbWVzOwotICAgIEZsb2F0U2l6ZSBtX2JveFNpemU7Ci0gICAgUmVm
UHRyPFRpbWluZ0Z1bmN0aW9uPiBtX3RpbWluZ0Z1bmN0aW9uOwotICAgIGRvdWJsZSBtX2l0ZXJh
dGlvbkNvdW50OwotICAgIGRvdWJsZSBtX2R1cmF0aW9uOwotICAgIEFuaW1hdGlvbjo6QW5pbWF0
aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwotICAgIGJvb2wgbV9maWxsc0ZvcndhcmRzOwotICAg
IGJvb2wgbV9saXN0c01hdGNoOwotICAgIE1vbm90b25pY1RpbWUgbV9zdGFydFRpbWU7Ci0gICAg
U2Vjb25kcyBtX3BhdXNlVGltZTsKLSAgICBTZWNvbmRzIG1fdG90YWxSdW5uaW5nVGltZTsKLSAg
ICBNb25vdG9uaWNUaW1lIG1fbGFzdFJlZnJlc2hlZFRpbWU7Ci0gICAgQW5pbWF0aW9uU3RhdGUg
bV9zdGF0ZTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIHsKLXB1YmxpYzoK
LSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucygpID0gZGVmYXVsdDsKLQotICAgIHZvaWQgYWRk
KGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mKTsKLSAgICB2b2lkIHJlbW92ZShjb25zdCBT
dHJpbmcmIG5hbWUpOwotICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgQW5pbWF0
ZWRQcm9wZXJ0eUlEKTsKLSAgICB2b2lkIHBhdXNlKGNvbnN0IFN0cmluZyYsIFNlY29uZHMpOwot
ICAgIHZvaWQgc3VzcGVuZChNb25vdG9uaWNUaW1lKTsKLSAgICB2b2lkIHJlc3VtZSgpOwotCi0g
ICAgdm9pZCBhcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3VsdCYs
IE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgYXBwbHlLZWVwaW5nSW50ZXJuYWxTdGF0ZShUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3VsdCYsIE1vbm90b25pY1RpbWUpOwot
Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zLmlzRW1wdHko
KTsgfQotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zLnNpemUo
KTsgfQotICAgIGNvbnN0IFZlY3RvcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiYgYW5pbWF0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uczsgfQotICAgIFZlY3RvcjxUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uPiYgYW5pbWF0aW9ucygpIHsgcmV0dXJuIG1fYW5pbWF0aW9uczsgfQotCi0g
ICAgYm9vbCBoYXNSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0OwotICAgIGJvb2wgaGFzQWN0aXZl
QW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkgY29uc3Q7Ci0gICAgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbnMgZ2V0QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiBtX2FuaW1hdGlvbnM7Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllci5jcHAKaW5kZXggMzQyOGM2NzRmYzI2NjhjNDM4NWI0ZDkzNzQzOWQzMGFjZjcx
OTFkNC4uYjY2MzJjMDBjZTczMDQwNWZjY2ZiYjg5YWFlYmM5ZjIzYzU3MDg5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5jcHAKQEAgLTY0MCw3ICs2NDAsNyBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJMYXllcjo6c2V0Q29udGVudHNMYXllcihUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYQogICAgIG1fY29udGVudHNMYXllciA9IHBsYXRmb3JtTGF5ZXI7CiB9CiAKLXZvaWQg
VGV4dHVyZU1hcHBlckxheWVyOjpzZXRBbmltYXRpb25zKGNvbnN0IFRleHR1cmVNYXBwZXJBbmlt
YXRpb25zJiBhbmltYXRpb25zKQordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldEFuaW1hdGlv
bnMoY29uc3QgTmljb3NpYTo6QW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKIHsKICAgICBtX2FuaW1h
dGlvbnMgPSBhbmltYXRpb25zOwogfQpAQCAtNjc4LDcgKzY3OCw3IEBAIGJvb2wgVGV4dHVyZU1h
cHBlckxheWVyOjphcHBseUFuaW1hdGlvbnNSZWN1cnNpdmVseShNb25vdG9uaWNUaW1lIHRpbWUp
CiAKIGJvb2wgVGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQW5pbWF0aW9ucyhNb25vdG9uaWNUaW1l
IHRpbWUpCiB7Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6QXBwbGljYXRpb25SZXN1bHQg
YXBwbGljYXRpb25SZXN1bHRzOworICAgIE5pY29zaWE6OkFuaW1hdGlvbjo6QXBwbGljYXRpb25S
ZXN1bHQgYXBwbGljYXRpb25SZXN1bHRzOwogICAgIG1fYW5pbWF0aW9ucy5hcHBseShhcHBsaWNh
dGlvblJlc3VsdHMsIHRpbWUpOwogCiAgICAgbV9sYXllclRyYW5zZm9ybXMubG9jYWxUcmFuc2Zv
cm0gPSBhcHBsaWNhdGlvblJlc3VsdHMudHJhbnNmb3JtLnZhbHVlT3IobV9zdGF0ZS50cmFuc2Zv
cm0pOwpAQCAtNjg3LDcgKzY4Nyw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQW5p
bWF0aW9ucyhNb25vdG9uaWNUaW1lIHRpbWUpCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCiAgICAgLy8gQ2FsY3VsYXRlIGxvY2FsVHJhbnNmb3JtIDUwbXMgaW4gdGhlIGZ1dHVyZS4K
LSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3VsdCBmdXR1cmVBcHBs
aWNhdGlvblJlc3VsdHM7CisgICAgTmljb3NpYTo6QW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3Vs
dCBmdXR1cmVBcHBsaWNhdGlvblJlc3VsdHM7CiAgICAgbV9hbmltYXRpb25zLmFwcGx5S2VlcGlu
Z0ludGVybmFsU3RhdGUoZnV0dXJlQXBwbGljYXRpb25SZXN1bHRzLCB0aW1lICsgNTBfbXMpOwog
ICAgIG1fbGF5ZXJUcmFuc2Zvcm1zLmZ1dHVyZUxvY2FsVHJhbnNmb3JtID0gZnV0dXJlQXBwbGlj
YXRpb25SZXN1bHRzLnRyYW5zZm9ybS52YWx1ZU9yKG1fbGF5ZXJUcmFuc2Zvcm1zLmxvY2FsVHJh
bnNmb3JtKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCmluZGV4IDUwYjI0YWE3MWUy
ZGNhZTgwMTYyM2YwZWIyZGUxYjkzMDRhMTRkODEuLmYzYzI4NmNjMjU1OTQyNjkwOWE1NzA0ZWUw
YzkyMDkxN2FiMzc2NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKQEAgLTIyLDggKzIyLDgg
QEAKIAogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJOaWNvc2lhQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAt
OTAsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREZWJ1Z1Zpc3VhbHMoYm9vbCBzaG93
RGVidWdCb3JkZXJzLCBjb25zdCBDb2xvciYgZGVidWdCb3JkZXJDb2xvciwgZmxvYXQgZGVidWdC
b3JkZXJXaWR0aCk7CiAgICAgdm9pZCBzZXRSZXBhaW50Q291bnRlcihib29sIHNob3dSZXBhaW50
Q291bnRlciwgaW50IHJlcGFpbnRDb3VudCk7CiAgICAgdm9pZCBzZXRDb250ZW50c0xheWVyKFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKik7Ci0gICAgdm9pZCBzZXRBbmltYXRpb25zKGNvbnN0
IFRleHR1cmVNYXBwZXJBbmltYXRpb25zJik7CisgICAgdm9pZCBzZXRBbmltYXRpb25zKGNvbnN0
IE5pY29zaWE6OkFuaW1hdGlvbnMmKTsKICAgICB2b2lkIHNldEJhY2tpbmdTdG9yZShUZXh0dXJl
TWFwcGVyQmFja2luZ1N0b3JlKik7CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAg
IHZvaWQgc2V0QW5pbWF0ZWRCYWNraW5nU3RvcmVDbGllbnQoTmljb3NpYTo6QW5pbWF0ZWRCYWNr
aW5nU3RvcmVDbGllbnQqKTsKQEAgLTIwMiw3ICsyMDIsNyBAQCBwcml2YXRlOgogCiAgICAgU3Rh
dGUgbV9zdGF0ZTsKICAgICBUZXh0dXJlTWFwcGVyKiBtX3RleHR1cmVNYXBwZXIgeyBudWxscHRy
IH07Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOworICAgIE5pY29z
aWE6OkFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwogICAgIHVpbnQzMl90IG1faWQgeyAwIH07CiAj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIFJlZlB0cjxOaWNvc2lhOjpBbmltYXRl
ZEJhY2tpbmdTdG9yZUNsaWVudD4gbV9hbmltYXRlZEJhY2tpbmdTdG9yZUNsaWVudDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAK
aW5kZXggMzY3ZDhhNTNjZjM3MGQyMjAyZDZmMzQwMWNkY2IzYTAyZmY0MmMyYi4uYzczZjAxYjJk
ZjU3OTFiNTA1ZDZmN2Q0MGYzMmFlMDJlZTY0MjYzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKQEAgLTEyNTcsNyArMTI1
Nyw3IEBAIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRBbmltYXRpb24oY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKICAgICAgICAgbGlzdHNNYXRjaCA9IHZhbGlk
YXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZUxpc3QsIGlnbm9yZWRIYXNCaWdSb3RhdGlvbikg
Pj0gMDsKIAogICAgIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5v
dygpIC0gU2Vjb25kcyhkZWxheUFzTmVnYXRpdmVUaW1lT2Zmc2V0KTsKLSAgICBtX2FuaW1hdGlv
bnMuYWRkKFRleHR1cmVNYXBwZXJBbmltYXRpb24oa2V5ZnJhbWVzTmFtZSwgdmFsdWVMaXN0LCBi
b3hTaXplLCAqYW5pbSwgbGlzdHNNYXRjaCwgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lLCAwX3Ms
IFRleHR1cmVNYXBwZXJBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpQbGF5aW5nKSk7CisgICAg
bV9hbmltYXRpb25zLmFkZChOaWNvc2lhOjpBbmltYXRpb24oa2V5ZnJhbWVzTmFtZSwgdmFsdWVM
aXN0LCBib3hTaXplLCAqYW5pbSwgbGlzdHNNYXRjaCwgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1l
LCAwX3MsIE5pY29zaWE6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlBsYXlpbmcpKTsKICAg
ICBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKICAgICBkaWRDaGFu
Z2VBbmltYXRpb25zKCk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggZTZjNTg2NjczN2RhYTMx
YjdmZDJhMTYxYmViY2MxYTRhOGJiOTY4ZS4uNmQ3MzEzOTFkN2EyNWM2OWU1NWNjNDQxMmI5YjZh
NWQ1N2I1MGE5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuaApAQCAtMzAsMjAgKzMwLDIwIEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTmljb3NpYUFuaW1hdGVkQmFja2luZ1N0
b3JlQ2xpZW50LmgiCisjaW5jbHVkZSAiTmljb3NpYUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIk5p
Y29zaWFCdWZmZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhUGxhdGZvcm1MYXllci5oIgotI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgTmljb3NpYSB7CiBjbGFzcyBQYWludGluZ0VuZ2luZTsK
K2NsYXNzIEFuaW1hdGlvbnM7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjsKLWNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOwogCiBj
bGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgewogcHVibGljOgpAQCAtMjEwLDcg
KzIxMCw3IEBAIHByaXZhdGU6CiAKICAgICBUaW1lciBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsK
ICAgICBSdW5Mb29wOjpUaW1lcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+IG1fcmVxdWVzdFBl
bmRpbmdUaWxlQ3JlYXRpb25UaW1lcjsKLSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyBtX2Fu
aW1hdGlvbnM7CisgICAgTmljb3NpYTo6QW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CiAgICAgTW9u
b3RvbmljVGltZSBtX2xhc3RBbmltYXRpb25TdGFydFRpbWU7CiAKICAgICBzdHJ1Y3Qgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376495</attachid>
            <date>2019-08-16 06:03:23 -0700</date>
            <delta_ts>2019-08-16 07:37:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200707-20190816150321.patch</filename>
            <type>text/plain</type>
            <size>52265</size>
            <attacher name="Miguel Gomez">magomez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTVlYTE4ZGFmYTdiMTEy
MzE2MWVlZGVjZGU2ZGY3YWU0YTlmNDA2ZS4uYTE4MWRkNTFlODVjNDUyMmI1ZTU3ZTVjNDhkNjI4
NzYyMDBmNmI3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDE5LTA4LTE2ICBNaWd1
ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBNb3Zl
IFRleHR1cmVNYXBwZXJBbmltYXRpb24gdG8gdGhlIG5pY29zaWEgbmFtZXNwYWNlIGFzIE5pY29z
aWE6OkFuaW1hdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjAwNzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgxb1hbiBEb2JlcsWhZWsuCisKKyAg
ICAgICAgTW92ZSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uIHRvIE5pY29zaWE6OkFuaW1hdGlvbiBz
byBpdCBjYW4gYmUgdXNlZCBieSBub24gVGV4dHVyZU1hcHBlcgorICAgICAgICBjb2RlIHBhdGhz
LgorCisgICAgICAgICogcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRpb24uY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJB
bmltYXRpb24uY3BwLgorICAgICAgICAoTmljb3NpYTo6c2hvdWxkUmV2ZXJzZUFuaW1hdGlvblZh
bHVlKToKKyAgICAgICAgKE5pY29zaWE6Om5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZSk6CisgICAg
ICAgIChOaWNvc2lhOjpub3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JGaWxsc0ZvcndhcmRzKToK
KyAgICAgICAgKE5pY29zaWE6OnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUpOgorICAg
ICAgICAoTmljb3NpYTo6QW5pbWF0aW9uOjpBbmltYXRpb24pOgorICAgICAgICAoTmljb3NpYTo6
QW5pbWF0aW9uOjphcHBseSk6CisgICAgICAgIChOaWNvc2lhOjpBbmltYXRpb246OmFwcGx5S2Vl
cGluZ0ludGVybmFsU3RhdGUpOgorICAgICAgICAoTmljb3NpYTo6QW5pbWF0aW9uOjpwYXVzZSk6
CisgICAgICAgIChOaWNvc2lhOjpBbmltYXRpb246OnJlc3VtZSk6CisgICAgICAgIChOaWNvc2lh
OjpBbmltYXRpb246OmNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKToKKyAgICAgICAgKE5pY29zaWE6
OkFuaW1hdGlvbjo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoTmljb3NpYTo6QW5pbWF0aW9u
OjphcHBseUludGVybmFsKToKKyAgICAgICAgKE5pY29zaWE6OkFuaW1hdGlvbnM6OmFkZCk6Cisg
ICAgICAgIChOaWNvc2lhOjpBbmltYXRpb25zOjpyZW1vdmUpOgorICAgICAgICAoTmljb3NpYTo6
QW5pbWF0aW9uczo6cGF1c2UpOgorICAgICAgICAoTmljb3NpYTo6QW5pbWF0aW9uczo6c3VzcGVu
ZCk6CisgICAgICAgIChOaWNvc2lhOjpBbmltYXRpb25zOjpyZXN1bWUpOgorICAgICAgICAoTmlj
b3NpYTo6QW5pbWF0aW9uczo6YXBwbHkpOgorICAgICAgICAoTmljb3NpYTo6QW5pbWF0aW9uczo6
YXBwbHlLZWVwaW5nSW50ZXJuYWxTdGF0ZSk6CisgICAgICAgIChOaWNvc2lhOjpBbmltYXRpb25z
OjpoYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6OkFu
aW1hdGlvbnM6Omhhc1J1bm5pbmdBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6
OkFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUFuaW1hdGlvbi5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRp
b24uaC4KKyAgICAgICAgKE5pY29zaWE6OkFuaW1hdGlvbjo6QW5pbWF0aW9uKToKKyAgICAgICAg
KE5pY29zaWE6OkFuaW1hdGlvbjo6a2V5ZnJhbWVzIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6
OkFuaW1hdGlvbjo6dGltaW5nRnVuY3Rpb24gY29uc3QpOgorICAgICAgICAoTmljb3NpYTo6QW5p
bWF0aW9uczo6YW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChOaWNvc2lhOjpBbmltYXRpb25z
OjphbmltYXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29z
aWFQbGF0Zm9ybUxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRBbmltYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c3luY0FuaW1hdGlvbnMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRk
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg6CisKIDIwMTktMDgtMTYgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBzcGVjdWxhdGl2
ZSBidWlsZCBmaXggZm9yIFdpbkNhaXJvLCBwYXJ0IDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0dXJlTWFwcGVyLmNtYWtlCmluZGV4IGNlOWFiOTZmNTJiODk2OWM5MTEwOWVmMDY4NTVj
NTA4MzlhNTIzMjMuLjRmM2Q2ZWFiNWQ3MmZjOTVjMjBhNDUzYWNlYjU5ZDRjM2Q0YWRhMjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQpAQCAtMSwxMyAr
MSwxNCBAQAogbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIgorICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhIgogKQogCiBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmlt
YXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVQb29sLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHQzRFRleHR1cmVNYXBwZXIu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJGUFNDb3VudGVyLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5
ZXIuY3BwCkBAIC0xNiwxMSArMTcsMTEgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAp
CiAKIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUworICAgIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUFuaW1hdGlvbi5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9DbGlwU3RhY2suaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0
aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJDb250ZXh0
QXR0cmlidXRlcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJG
UFNDb3VudGVyLmgKQEAgLTcwLDcgKzcxLDYgQEAgaWYgKFVTRV9DT09SRElOQVRFRF9HUkFQSElD
UykKIAogICAgICMgRklYTUU6IE1vdmUgdGhpcyBpbnRvIE5pY29zaWEuY21ha2Ugb25jZSB0aGUg
Y29tcG9uZW50IGlzIHNldCBmb3IgbG9uZy10ZXJtIHVzZS4KICAgICBsaXN0KEFQUEVORCBXZWJD
b3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYSIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8iCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcCIKICAgICApCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhQW5pbWF0aW9u
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yYmFlODhlZTk0ZWJlZGMxMmFhN2ExZjczYTlmYmY4NjZjYmMxMDc1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9OaWNvc2lhQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDM5NiBAQAorLyoKKyBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJOaWNvc2lhQW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlICJMYXlvdXRTaXplLmgiCisKK25hbWVz
cGFjZSBOaWNvc2lhIHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoRmlsdGVyT3BlcmF0aW9uKiBmcm9tT3AsIEZp
bHRlck9wZXJhdGlvbiYgdG9PcCwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBGbG9hdFNpemUmLCBi
b29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQoreworICAgIHJldHVybiB0b09wLmJsZW5k
KGZyb21PcCwgcHJvZ3Jlc3MsIGJsZW5kVG9QYXNzdGhyb3VnaCk7Cit9CisKK3N0YXRpYyBGaWx0
ZXJPcGVyYXRpb25zIGFwcGx5RmlsdGVyQW5pbWF0aW9uKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0
IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK3sKKyAgICAvLyBGaXJzdCBmcmFtZSBvZiBhbiBhbmltYXRp
b24uCisgICAgaWYgKCFwcm9ncmVzcykKKyAgICAgICAgcmV0dXJuIGZyb207CisKKyAgICAvLyBM
YXN0IGZyYW1lIG9mIGFuIGFuaW1hdGlvbi4KKyAgICBpZiAocHJvZ3Jlc3MgPT0gMSkKKyAgICAg
ICAgcmV0dXJuIHRvOworCisgICAgaWYgKCFmcm9tLmlzRW1wdHkoKSAmJiAhdG8uaXNFbXB0eSgp
ICYmICFmcm9tLm9wZXJhdGlvbnNNYXRjaCh0bykpCisgICAgICAgIHJldHVybiB0bzsKKworICAg
IEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0OworCisgICAgc2l6ZV90IGZyb21TaXplID0gZnJvbS5v
cGVyYXRpb25zKCkuc2l6ZSgpOworICAgIHNpemVfdCB0b1NpemUgPSB0by5vcGVyYXRpb25zKCku
c2l6ZSgpOworICAgIHNpemVfdCBzaXplID0gc3RkOjptYXgoZnJvbVNpemUsIHRvU2l6ZSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgUmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gZnJvbU9wID0gKGkgPCBmcm9tU2l6ZSkgPyBmcm9tLm9wZXJhdGlvbnMo
KVtpXS5nZXQoKSA6IG51bGxwdHI7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IHRv
T3AgPSAoaSA8IHRvU2l6ZSkgPyB0by5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiBudWxscHRyOwor
ICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZGVkT3AgPSB0b09wID8gYmxlbmRG
dW5jKGZyb21PcC5nZXQoKSwgKnRvT3AsIHByb2dyZXNzLCBib3hTaXplKSA6IChmcm9tT3AgPyBi
bGVuZEZ1bmMobnVsbHB0ciwgKmZyb21PcCwgcHJvZ3Jlc3MsIGJveFNpemUsIHRydWUpIDogbnVs
bHB0cik7CisgICAgICAgIGlmIChibGVuZGVkT3ApCisgICAgICAgICAgICByZXN1bHQub3BlcmF0
aW9ucygpLmFwcGVuZChibGVuZGVkT3ApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1
dG8gaWRlbnRpdHlPcCA9IFBhc3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKTsKKyAg
ICAgICAgICAgIGlmIChwcm9ncmVzcyA+IDAuNSkKKyAgICAgICAgICAgICAgICByZXN1bHQub3Bl
cmF0aW9ucygpLmFwcGVuZCh0b09wID8gdG9PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5k
KGZyb21PcCA/IGZyb21PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkUmV2ZXJzZUFu
aW1hdGlvblZhbHVlKFdlYkNvcmU6OkFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVj
dGlvbiwgaW50IGxvb3BDb3VudCkKK3sKKyAgICByZXR1cm4gKGRpcmVjdGlvbiA9PSBXZWJDb3Jl
OjpBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSAmJiBsb29wQ291bnQgJiAx
KQorICAgICAgICB8fCAoZGlyZWN0aW9uID09IFdlYkNvcmU6OkFuaW1hdGlvbjo6QW5pbWF0aW9u
RGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSAmJiAhKGxvb3BDb3VudCAmIDEpKQorICAgICAgICB8
fCBkaXJlY3Rpb24gPT0gV2ViQ29yZTo6QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZl
cnNlOworfQorCitzdGF0aWMgZG91YmxlIG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZShkb3VibGUg
cnVubmluZ1RpbWUsIGRvdWJsZSBkdXJhdGlvbiwgV2ViQ29yZTo6QW5pbWF0aW9uOjpBbmltYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uLCBkb3VibGUgaXRlcmF0aW9uQ291bnQpCit7CisgICAgaWYg
KCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBpbnQgbG9vcENvdW50
ID0gcnVubmluZ1RpbWUgLyBkdXJhdGlvbjsKKyAgICBjb25zdCBkb3VibGUgbGFzdEZ1bGxMb29w
ID0gZHVyYXRpb24gKiBkb3VibGUobG9vcENvdW50KTsKKyAgICBjb25zdCBkb3VibGUgcmVtYWlu
ZGVyID0gcnVubmluZ1RpbWUgLSBsYXN0RnVsbExvb3A7CisgICAgLy8gSWdub3JlIHJlbWFpbmRl
ciB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiBhbmltYXRpb24uCisgICAgY29uc3QgZG91
YmxlIG5vcm1hbGl6ZWQgPSAobG9vcENvdW50ID09IGl0ZXJhdGlvbkNvdW50KSA/IDEuMCA6IChy
ZW1haW5kZXIgLyBkdXJhdGlvbik7CisKKyAgICByZXR1cm4gc2hvdWxkUmV2ZXJzZUFuaW1hdGlv
blZhbHVlKGRpcmVjdGlvbiwgbG9vcENvdW50KSA/IDEgLSBub3JtYWxpemVkIDogbm9ybWFsaXpl
ZDsKK30KKworc3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWVGb3JGaWxsc0Zv
cndhcmRzKGRvdWJsZSBpdGVyYXRpb25Db3VudCwgV2ViQ29yZTo6QW5pbWF0aW9uOjpBbmltYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIGlmIChkaXJlY3Rpb24gPT0gV2ViQ29yZTo6
QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25Ob3JtYWwpCisgICAgICAgIHJldHVybiAxOwor
ICAgIGlmIChkaXJlY3Rpb24gPT0gV2ViQ29yZTo6QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rp
b25SZXZlcnNlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc2hvdWxkUmV2ZXJzZUFu
aW1hdGlvblZhbHVlKGRpcmVjdGlvbiwgaXRlcmF0aW9uQ291bnQpID8gMSA6IDA7Cit9CisKK3N0
YXRpYyBmbG9hdCBhcHBseU9wYWNpdHlBbmltYXRpb24oZmxvYXQgZnJvbU9wYWNpdHksIGZsb2F0
IHRvT3BhY2l0eSwgZG91YmxlIHByb2dyZXNzKQoreworICAgIC8vIE9wdGltaXphdGlvbjogc3Bl
Y2lhbCBjYXNlIHRoZSBlZGdlIHZhbHVlcyAoMCBhbmQgMSkuCisgICAgaWYgKHByb2dyZXNzID09
IDEuMCkKKyAgICAgICAgcmV0dXJuIHRvT3BhY2l0eTsKKworICAgIGlmICghcHJvZ3Jlc3MpCisg
ICAgICAgIHJldHVybiBmcm9tT3BhY2l0eTsKKworICAgIHJldHVybiBmcm9tT3BhY2l0eSArIHBy
b2dyZXNzICogKHRvT3BhY2l0eSAtIGZyb21PcGFjaXR5KTsKK30KKworc3RhdGljIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jl
c3MsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSwgYm9vbCBsaXN0c01hdGNoKQoreworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKworICAgIC8vIEZpcnN0IGZyYW1lIG9mIGFuIGFu
aW1hdGlvbi4KKyAgICBpZiAoIXByb2dyZXNzKSB7CisgICAgICAgIGZyb20uYXBwbHkoYm94U2l6
ZSwgbWF0cml4KTsKKyAgICAgICAgcmV0dXJuIG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBMYXN0
IGZyYW1lIG9mIGFuIGFuaW1hdGlvbi4KKyAgICBpZiAocHJvZ3Jlc3MgPT0gMSkgeworICAgICAg
ICB0by5hcHBseShib3hTaXplLCBtYXRyaXgpOworICAgICAgICByZXR1cm4gbWF0cml4OworICAg
IH0KKworICAgIC8vIElmIHdlIGhhdmUgaW5jb21wYXRpYmxlIG9wZXJhdGlvbiBsaXN0cywgd2Ug
YmxlbmQgdGhlIHJlc3VsdGluZyBtYXRyaWNlcy4KKyAgICBpZiAoIWxpc3RzTWF0Y2gpIHsKKyAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbU1hdHJpeDsKKyAgICAgICAgdG8uYXBwbHko
Ym94U2l6ZSwgbWF0cml4KTsKKyAgICAgICAgZnJvbS5hcHBseShib3hTaXplLCBmcm9tTWF0cml4
KTsKKyAgICAgICAgbWF0cml4LmJsZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsKKyAgICAgICAg
cmV0dXJuIG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBBbmltYXRpb24gdG8gIi13ZWJraXQtdHJh
bnNmb3JtOiBub25lIi4KKyAgICBpZiAoIXRvLnNpemUoKSkgeworICAgICAgICBUcmFuc2Zvcm1P
cGVyYXRpb25zIGJsZW5kZWQoZnJvbSk7CisgICAgICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDog
YmxlbmRlZC5vcGVyYXRpb25zKCkpCisgICAgICAgICAgICBvcGVyYXRpb24tPmJsZW5kKG51bGxw
dHIsIHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKKyAgICAgICAgcmV0
dXJuIG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBBbmltYXRpb24gZnJvbSAiLXdlYmtpdC10cmFu
c2Zvcm06IG5vbmUiLgorICAgIGlmICghZnJvbS5zaXplKCkpIHsKKyAgICAgICAgVHJhbnNmb3Jt
T3BlcmF0aW9ucyBibGVuZGVkKHRvKTsKKyAgICAgICAgZm9yIChhdXRvJiBvcGVyYXRpb24gOiBi
bGVuZGVkLm9wZXJhdGlvbnMoKSkKKyAgICAgICAgICAgIG9wZXJhdGlvbi0+YmxlbmQobnVsbHB0
ciwgMSAtIHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKKyAgICAgICAg
cmV0dXJuIG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBOb3JtYWwgYW5pbWF0aW9uIHdpdGggYSBt
YXRjaGluZyBvcGVyYXRpb24gbGlzdC4KKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQo
dG8pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxlbmRlZC5vcGVyYXRpb25zKCkuc2l6
ZSgpOyArK2kpCisgICAgICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZChmcm9tLmF0
KGkpLCBwcm9ncmVzcywgIWZyb20uYXQoaSkpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOworICAg
IHJldHVybiBtYXRyaXg7Cit9CisKK3N0YXRpYyBjb25zdCBUaW1pbmdGdW5jdGlvbiYgdGltaW5n
RnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShjb25zdCBBbmltYXRpb25WYWx1ZSYgYW5pbWF0aW9u
VmFsdWUsIGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKQoreworICAgIGlmIChhbmltYXRpb25W
YWx1ZS50aW1pbmdGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gKmFuaW1hdGlvblZhbHVlLnRp
bWluZ0Z1bmN0aW9uKCk7CisgICAgaWYgKGFuaW1hdGlvbi50aW1pbmdGdW5jdGlvbigpKQorICAg
ICAgICByZXR1cm4gKmFuaW1hdGlvbi50aW1pbmdGdW5jdGlvbigpOworICAgIHJldHVybiBDdWJp
Y0JlemllclRpbWluZ0Z1bmN0aW9uOjpkZWZhdWx0VGltaW5nRnVuY3Rpb24oKTsKK30KKworQW5p
bWF0aW9uOjpBbmltYXRpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYga2V5ZnJhbWVzLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUsIGNvbnN0IFdlYkNvcmU6
OkFuaW1hdGlvbiYgYW5pbWF0aW9uLCBib29sIGxpc3RzTWF0Y2gsIE1vbm90b25pY1RpbWUgc3Rh
cnRUaW1lLCBTZWNvbmRzIHBhdXNlVGltZSwgQW5pbWF0aW9uU3RhdGUgc3RhdGUpCisgICAgOiBt
X25hbWUobmFtZS5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSA/IG5hbWUgOiBuYW1lLmlz
b2xhdGVkQ29weSgpKQorICAgICwgbV9rZXlmcmFtZXMoa2V5ZnJhbWVzKQorICAgICwgbV9ib3hT
aXplKGJveFNpemUpCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uKGFuaW1hdGlvbi50aW1pbmdGdW5j
dGlvbigpLT5jbG9uZSgpKQorICAgICwgbV9pdGVyYXRpb25Db3VudChhbmltYXRpb24uaXRlcmF0
aW9uQ291bnQoKSkKKyAgICAsIG1fZHVyYXRpb24oYW5pbWF0aW9uLmR1cmF0aW9uKCkpCisgICAg
LCBtX2RpcmVjdGlvbihhbmltYXRpb24uZGlyZWN0aW9uKCkpCisgICAgLCBtX2ZpbGxzRm9yd2Fy
ZHMoYW5pbWF0aW9uLmZpbGxzRm9yd2FyZHMoKSkKKyAgICAsIG1fbGlzdHNNYXRjaChsaXN0c01h
dGNoKQorICAgICwgbV9zdGFydFRpbWUoc3RhcnRUaW1lKQorICAgICwgbV9wYXVzZVRpbWUocGF1
c2VUaW1lKQorICAgICwgbV90b3RhbFJ1bm5pbmdUaW1lKDBfcykKKyAgICAsIG1fbGFzdFJlZnJl
c2hlZFRpbWUobV9zdGFydFRpbWUpCisgICAgLCBtX3N0YXRlKHN0YXRlKQoreworfQorCitBbmlt
YXRpb246OkFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIG90aGVyKQorICAgIDogbV9uYW1lKG90
aGVyLm1fbmFtZS5pc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSA/IG90aGVyLm1fbmFtZSA6
IG90aGVyLm1fbmFtZS5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fa2V5ZnJhbWVzKG90aGVyLm1f
a2V5ZnJhbWVzKQorICAgICwgbV9ib3hTaXplKG90aGVyLm1fYm94U2l6ZSkKKyAgICAsIG1fdGlt
aW5nRnVuY3Rpb24ob3RoZXIubV90aW1pbmdGdW5jdGlvbi0+Y2xvbmUoKSkKKyAgICAsIG1faXRl
cmF0aW9uQ291bnQob3RoZXIubV9pdGVyYXRpb25Db3VudCkKKyAgICAsIG1fZHVyYXRpb24ob3Ro
ZXIubV9kdXJhdGlvbikKKyAgICAsIG1fZGlyZWN0aW9uKG90aGVyLm1fZGlyZWN0aW9uKQorICAg
ICwgbV9maWxsc0ZvcndhcmRzKG90aGVyLm1fZmlsbHNGb3J3YXJkcykKKyAgICAsIG1fbGlzdHNN
YXRjaChvdGhlci5tX2xpc3RzTWF0Y2gpCisgICAgLCBtX3N0YXJ0VGltZShvdGhlci5tX3N0YXJ0
VGltZSkKKyAgICAsIG1fcGF1c2VUaW1lKG90aGVyLm1fcGF1c2VUaW1lKQorICAgICwgbV90b3Rh
bFJ1bm5pbmdUaW1lKG90aGVyLm1fdG90YWxSdW5uaW5nVGltZSkKKyAgICAsIG1fbGFzdFJlZnJl
c2hlZFRpbWUob3RoZXIubV9sYXN0UmVmcmVzaGVkVGltZSkKKyAgICAsIG1fc3RhdGUob3RoZXIu
bV9zdGF0ZSkKK3sKK30KKwordm9pZCBBbmltYXRpb246OmFwcGx5KEFwcGxpY2F0aW9uUmVzdWx0
JiBhcHBsaWNhdGlvblJlc3VsdHMsIE1vbm90b25pY1RpbWUgdGltZSkKK3sKKyAgICBpZiAoIWlz
QWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNlY29uZHMgdG90YWxSdW5uaW5nVGlt
ZSA9IGNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKHRpbWUpOworICAgIGRvdWJsZSBub3JtYWxpemVk
VmFsdWUgPSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUodG90YWxSdW5uaW5nVGltZS5zZWNvbmRz
KCksIG1fZHVyYXRpb24sIG1fZGlyZWN0aW9uLCBtX2l0ZXJhdGlvbkNvdW50KTsKKworICAgIGlm
IChtX2l0ZXJhdGlvbkNvdW50ICE9IFdlYkNvcmU6OkFuaW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJ
bmZpbml0ZSAmJiB0b3RhbFJ1bm5pbmdUaW1lLnNlY29uZHMoKSA+PSBtX2R1cmF0aW9uICogbV9p
dGVyYXRpb25Db3VudCkgeworICAgICAgICBtX3N0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0b3Bw
ZWQ7CisgICAgICAgIG1fcGF1c2VUaW1lID0gMF9zOworICAgICAgICBpZiAobV9maWxsc0Zvcndh
cmRzKQorICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZh
bHVlRm9yRmlsbHNGb3J3YXJkcyhtX2l0ZXJhdGlvbkNvdW50LCBtX2RpcmVjdGlvbik7CisgICAg
fQorCisgICAgYXBwbGljYXRpb25SZXN1bHRzLmhhc1J1bm5pbmdBbmltYXRpb25zIHw9IChtX3N0
YXRlID09IEFuaW1hdGlvblN0YXRlOjpQbGF5aW5nKTsKKworICAgIGlmICghbm9ybWFsaXplZFZh
bHVlKSB7CisgICAgICAgIGFwcGx5SW50ZXJuYWwoYXBwbGljYXRpb25SZXN1bHRzLCBtX2tleWZy
YW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSksIDApOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZSA9PSAxLjApIHsKKyAgICAgICAgYXBwbHlJbnRl
cm5hbChhcHBsaWNhdGlvblJlc3VsdHMsIG1fa2V5ZnJhbWVzLmF0KG1fa2V5ZnJhbWVzLnNpemUo
KSAtIDIpLCBtX2tleWZyYW1lcy5hdChtX2tleWZyYW1lcy5zaXplKCkgLSAxKSwgMSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fa2V5ZnJhbWVzLnNpemUoKSA9PSAyKSB7Cisg
ICAgICAgIGF1dG8mIHRpbWluZ0Z1bmN0aW9uID0gdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25W
YWx1ZShtX2tleWZyYW1lcy5hdCgwKSwgKnRoaXMpOworICAgICAgICBub3JtYWxpemVkVmFsdWUg
PSB0aW1pbmdGdW5jdGlvbi50cmFuc2Zvcm1UaW1lKG5vcm1hbGl6ZWRWYWx1ZSwgbV9kdXJhdGlv
bik7CisgICAgICAgIGFwcGx5SW50ZXJuYWwoYXBwbGljYXRpb25SZXN1bHRzLCBtX2tleWZyYW1l
cy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSksIG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fa2V5ZnJhbWVzLnNp
emUoKSAtIDE7ICsraSkgeworICAgICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSYgZnJvbSA9IG1f
a2V5ZnJhbWVzLmF0KGkpOworICAgICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSYgdG8gPSBtX2tl
eWZyYW1lcy5hdChpICsgMSk7CisgICAgICAgIGlmIChmcm9tLmtleVRpbWUoKSA+IG5vcm1hbGl6
ZWRWYWx1ZSB8fCB0by5rZXlUaW1lKCkgPCBub3JtYWxpemVkVmFsdWUpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBub3JtYWxpemVkVmFsdWUgPSAobm9ybWFsaXplZFZhbHVlIC0g
ZnJvbS5rZXlUaW1lKCkpIC8gKHRvLmtleVRpbWUoKSAtIGZyb20ua2V5VGltZSgpKTsKKyAgICAg
ICAgYXV0byYgdGltaW5nRnVuY3Rpb24gPSB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVl
KGZyb20sICp0aGlzKTsKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gdGltaW5nRnVuY3Rpb24u
dHJhbnNmb3JtVGltZShub3JtYWxpemVkVmFsdWUsIG1fZHVyYXRpb24pOworICAgICAgICBhcHBs
eUludGVybmFsKGFwcGxpY2F0aW9uUmVzdWx0cywgZnJvbSwgdG8sIG5vcm1hbGl6ZWRWYWx1ZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBBbmltYXRpb246OmFwcGx5S2VlcGlu
Z0ludGVybmFsU3RhdGUoQXBwbGljYXRpb25SZXN1bHQmIGFwcGxpY2F0aW9uUmVzdWx0cywgTW9u
b3RvbmljVGltZSB0aW1lKQoreworICAgIE1vbm90b25pY1RpbWUgb2xkTGFzdFJlZnJlc2hlZFRp
bWUgPSBtX2xhc3RSZWZyZXNoZWRUaW1lOworICAgIFNlY29uZHMgb2xkVG90YWxSdW5uaW5nVGlt
ZSA9IG1fdG90YWxSdW5uaW5nVGltZTsKKyAgICBBbmltYXRpb25TdGF0ZSBvbGRTdGF0ZSA9IG1f
c3RhdGU7CisKKyAgICBhcHBseShhcHBsaWNhdGlvblJlc3VsdHMsIHRpbWUpOworCisgICAgbV9s
YXN0UmVmcmVzaGVkVGltZSA9IG9sZExhc3RSZWZyZXNoZWRUaW1lOworICAgIG1fdG90YWxSdW5u
aW5nVGltZSA9IG9sZFRvdGFsUnVubmluZ1RpbWU7CisgICAgbV9zdGF0ZSA9IG9sZFN0YXRlOwor
fQorCit2b2lkIEFuaW1hdGlvbjo6cGF1c2UoU2Vjb25kcyB0aW1lKQoreworICAgIG1fc3RhdGUg
PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkOworICAgIG1fcGF1c2VUaW1lID0gdGltZTsKK30KKwor
dm9pZCBBbmltYXRpb246OnJlc3VtZSgpCit7CisgICAgbV9zdGF0ZSA9IEFuaW1hdGlvblN0YXRl
OjpQbGF5aW5nOworICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIHdyb25nLiBtX3RvdGFsUnVubmlu
Z1RpbWUgaXMgY2xlYXJlZC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgzMTEzCisgICAgbV9wYXVzZVRpbWUgPSAwX3M7CisgICAgbV90b3RhbFJ1bm5p
bmdUaW1lID0gbV9wYXVzZVRpbWU7CisgICAgbV9sYXN0UmVmcmVzaGVkVGltZSA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOworfQorCitTZWNvbmRzIEFuaW1hdGlvbjo6Y29tcHV0ZVRvdGFsUnVubmlu
Z1RpbWUoTW9ub3RvbmljVGltZSB0aW1lKQoreworICAgIGlmIChtX3N0YXRlID09IEFuaW1hdGlv
blN0YXRlOjpQYXVzZWQpCisgICAgICAgIHJldHVybiBtX3BhdXNlVGltZTsKKworICAgIE1vbm90
b25pY1RpbWUgb2xkTGFzdFJlZnJlc2hlZFRpbWUgPSBtX2xhc3RSZWZyZXNoZWRUaW1lOworICAg
IG1fbGFzdFJlZnJlc2hlZFRpbWUgPSB0aW1lOworICAgIG1fdG90YWxSdW5uaW5nVGltZSArPSBt
X2xhc3RSZWZyZXNoZWRUaW1lIC0gb2xkTGFzdFJlZnJlc2hlZFRpbWU7CisgICAgcmV0dXJuIG1f
dG90YWxSdW5uaW5nVGltZTsKK30KKworYm9vbCBBbmltYXRpb246OmlzQWN0aXZlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9zdGF0ZSAhPSBBbmltYXRpb25TdGF0ZTo6U3RvcHBlZCB8fCBtX2Zp
bGxzRm9yd2FyZHM7Cit9CisKK3ZvaWQgQW5pbWF0aW9uOjphcHBseUludGVybmFsKEFwcGxpY2F0
aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIGNvbnN0IEFuaW1hdGlvblZhbHVlJiBmcm9t
LCBjb25zdCBBbmltYXRpb25WYWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKQoreworICAgIHN3aXRj
aCAobV9rZXlmcmFtZXMucHJvcGVydHkoKSkgeworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVRy
YW5zZm9ybToKKyAgICAgICAgYXBwbGljYXRpb25SZXN1bHRzLnRyYW5zZm9ybSA9IGFwcGx5VHJh
bnNmb3JtQW5pbWF0aW9uKHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVl
Jj4oZnJvbSkudmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFs
dWUmPih0bykudmFsdWUoKSwgcHJvZ3Jlc3MsIG1fYm94U2l6ZSwgbV9saXN0c01hdGNoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6CisgICAgICAg
IGFwcGxpY2F0aW9uUmVzdWx0cy5vcGFjaXR5ID0gYXBwbHlPcGFjaXR5QW5pbWF0aW9uKChzdGF0
aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlJj4oZnJvbSkudmFsdWUoKSksIChzdGF0
aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlJj4odG8pLnZhbHVlKCkpLCBwcm9ncmVz
cyk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlGaWx0ZXI6Cisg
ICAgICAgIGFwcGxpY2F0aW9uUmVzdWx0cy5maWx0ZXJzID0gYXBwbHlGaWx0ZXJBbmltYXRpb24o
c3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUmPihmcm9tKS52YWx1ZSgpLCBz
dGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KHRvKS52YWx1ZSgpLCBwcm9n
cmVzcywgbV9ib3hTaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBBbmltYXRpb25zOjphZGQo
Y29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pCit7CisgICAgLy8gUmVtb3ZlIHRoZSBvbGQgc3Rh
dGUgaWYgd2UgYXJlIHJlc3VtaW5nIGEgcGF1c2VkIGFuaW1hdGlvbi4KKyAgICByZW1vdmUoYW5p
bWF0aW9uLm5hbWUoKSwgYW5pbWF0aW9uLmtleWZyYW1lcygpLnByb3BlcnR5KCkpOworCisgICAg
bV9hbmltYXRpb25zLmFwcGVuZChhbmltYXRpb24pOworfQorCit2b2lkIEFuaW1hdGlvbnM6OnJl
bW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1h
dGNoaW5nKFsmbmFtZV0gKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7CisgICAgICAgIHJl
dHVybiBhbmltYXRpb24ubmFtZSgpID09IG5hbWU7CisgICAgfSk7Cit9CisKK3ZvaWQgQW5pbWF0
aW9uczo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgQW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3Bl
cnR5KQoreworICAgIG1fYW5pbWF0aW9ucy5yZW1vdmVBbGxNYXRjaGluZyhbJm5hbWUsIHByb3Bl
cnR5XSAoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIHsKKyAgICAgICAgcmV0dXJuIGFuaW1h
dGlvbi5uYW1lKCkgPT0gbmFtZSAmJiBhbmltYXRpb24ua2V5ZnJhbWVzKCkucHJvcGVydHkoKSA9
PSBwcm9wZXJ0eTsKKyAgICB9KTsKK30KKwordm9pZCBBbmltYXRpb25zOjpwYXVzZShjb25zdCBT
dHJpbmcmIG5hbWUsIFNlY29uZHMgb2Zmc2V0KQoreworICAgIGZvciAoYXV0byYgYW5pbWF0aW9u
IDogbV9hbmltYXRpb25zKSB7CisgICAgICAgIGlmIChhbmltYXRpb24ubmFtZSgpID09IG5hbWUp
CisgICAgICAgICAgICBhbmltYXRpb24ucGF1c2Uob2Zmc2V0KTsKKyAgICB9Cit9CisKK3ZvaWQg
QW5pbWF0aW9uczo6c3VzcGVuZChNb25vdG9uaWNUaW1lIHRpbWUpCit7CisgICAgLy8gRklYTUU6
IFRoaXMgc2VlbXMgd3JvbmcuIGBwYXVzZWAgdGFrZXMgdGltZSBvZmZzZXQgKFNlY29uZHMpLCBu
b3QgTW9ub3RvbmljVGltZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgzMTEyCisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnMp
CisgICAgICAgIGFuaW1hdGlvbi5wYXVzZSh0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkpOworfQor
Cit2b2lkIEFuaW1hdGlvbnM6OnJlc3VtZSgpCit7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24g
OiBtX2FuaW1hdGlvbnMpCisgICAgICAgIGFuaW1hdGlvbi5yZXN1bWUoKTsKK30KKwordm9pZCBB
bmltYXRpb25zOjphcHBseShBbmltYXRpb246OkFwcGxpY2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlv
blJlc3VsdHMsIE1vbm90b25pY1RpbWUgdGltZSkKK3sKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGlv
biA6IG1fYW5pbWF0aW9ucykKKyAgICAgICAgYW5pbWF0aW9uLmFwcGx5KGFwcGxpY2F0aW9uUmVz
dWx0cywgdGltZSk7Cit9CisKK3ZvaWQgQW5pbWF0aW9uczo6YXBwbHlLZWVwaW5nSW50ZXJuYWxT
dGF0ZShBbmltYXRpb246OkFwcGxpY2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIE1v
bm90b25pY1RpbWUgdGltZSkKK3sKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0
aW9ucykKKyAgICAgICAgYW5pbWF0aW9uLmFwcGx5S2VlcGluZ0ludGVybmFsU3RhdGUoYXBwbGlj
YXRpb25SZXN1bHRzLCB0aW1lKTsKK30KKworYm9vbCBBbmltYXRpb25zOjpoYXNBY3RpdmVBbmlt
YXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0eXBlKSBjb25zdAoreworICAgIHJldHVy
biBzdGQ6OmFueV9vZihtX2FuaW1hdGlvbnMuYmVnaW4oKSwgbV9hbmltYXRpb25zLmVuZCgpLAor
ICAgICAgICBbJnR5cGVdKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7CisgICAgICAgICAg
ICByZXR1cm4gYW5pbWF0aW9uLmlzQWN0aXZlKCkgJiYgYW5pbWF0aW9uLmtleWZyYW1lcygpLnBy
b3BlcnR5KCkgPT0gdHlwZTsKKyAgICAgICAgfSk7Cit9CisKK2Jvb2wgQW5pbWF0aW9uczo6aGFz
UnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6OmFueV9vZihtX2Fu
aW1hdGlvbnMuYmVnaW4oKSwgbV9hbmltYXRpb25zLmVuZCgpLAorICAgICAgICBbXShjb25zdCBB
bmltYXRpb24mIGFuaW1hdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGlvbi5zdGF0
ZSgpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlBsYXlpbmc7CisgICAgICAgIH0pOwor
fQorCitBbmltYXRpb25zIEFuaW1hdGlvbnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAor
eworICAgIEFuaW1hdGlvbnMgYWN0aXZlOworICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9h
bmltYXRpb25zKSB7CisgICAgICAgIGlmIChhbmltYXRpb24uaXNBY3RpdmUoKSkKKyAgICAgICAg
ICAgIGFjdGl2ZS5hZGQoYW5pbWF0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIGFjdGl2ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgTmljb3NpYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFBbmltYXRpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wZTBiZGNhZjQ4MjhiMjQ4YmQwOTE0MzVjMWIzOTEwZDAyMjYzMDliCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhQW5p
bWF0aW9uLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Cit9CisKK25h
bWVzcGFjZSBOaWNvc2lhIHsKKworY2xhc3MgQW5pbWF0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVt
IGNsYXNzIEFuaW1hdGlvblN0YXRlIHsgUGxheWluZywgUGF1c2VkLCBTdG9wcGVkIH07CisKKyAg
ICBzdHJ1Y3QgQXBwbGljYXRpb25SZXN1bHQgeworICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpU
cmFuc2Zvcm1hdGlvbk1hdHJpeD4gdHJhbnNmb3JtOworICAgICAgICBPcHRpb25hbDxkb3VibGU+
IG9wYWNpdHk7CisgICAgICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+IGZp
bHRlcnM7CisgICAgICAgIGJvb2wgaGFzUnVubmluZ0FuaW1hdGlvbnMgeyBmYWxzZSB9OworICAg
IH07CisKKyAgICBBbmltYXRpb24oKQorICAgICAgICA6IG1fa2V5ZnJhbWVzKFdlYkNvcmU6OkFu
aW1hdGVkUHJvcGVydHlJbnZhbGlkKQorICAgIHsgfQorICAgIEFuaW1hdGlvbihjb25zdCBTdHJp
bmcmLCBjb25zdCBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkFuaW1hdGlvbiYsIGJvb2wsIE1vbm90b25pY1RpbWUs
IFNlY29uZHMsIEFuaW1hdGlvblN0YXRlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBBbmltYXRpb24o
Y29uc3QgQW5pbWF0aW9uJik7CisKKyAgICB2b2lkIGFwcGx5KEFwcGxpY2F0aW9uUmVzdWx0Jiwg
TW9ub3RvbmljVGltZSk7CisgICAgdm9pZCBhcHBseUtlZXBpbmdJbnRlcm5hbFN0YXRlKEFwcGxp
Y2F0aW9uUmVzdWx0JiwgTW9ub3RvbmljVGltZSk7CisgICAgdm9pZCBwYXVzZShTZWNvbmRzKTsK
KyAgICB2b2lkIHJlc3VtZSgpOworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKKworICAgIGNv
bnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IFdl
YkNvcmU6OktleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tl
eWZyYW1lczsgfQorICAgIEFuaW1hdGlvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZTsgfQorICAgIFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdGltaW5nRnVuY3Rpb24uZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICB2
b2lkIGFwcGx5SW50ZXJuYWwoQXBwbGljYXRpb25SZXN1bHQmLCBjb25zdCBXZWJDb3JlOjpBbmlt
YXRpb25WYWx1ZSYgZnJvbSwgY29uc3QgV2ViQ29yZTo6QW5pbWF0aW9uVmFsdWUmIHRvLCBmbG9h
dCBwcm9ncmVzcyk7CisgICAgU2Vjb25kcyBjb21wdXRlVG90YWxSdW5uaW5nVGltZShNb25vdG9u
aWNUaW1lKTsKKworICAgIFN0cmluZyBtX25hbWU7CisgICAgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1
ZUxpc3QgbV9rZXlmcmFtZXM7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fYm94U2l6ZTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rpb24+IG1fdGltaW5nRnVuY3Rpb247CisgICAg
ZG91YmxlIG1faXRlcmF0aW9uQ291bnQ7CisgICAgZG91YmxlIG1fZHVyYXRpb247CisgICAgV2Vi
Q29yZTo6QW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CisgICAgYm9v
bCBtX2ZpbGxzRm9yd2FyZHM7CisgICAgYm9vbCBtX2xpc3RzTWF0Y2g7CisgICAgTW9ub3Rvbmlj
VGltZSBtX3N0YXJ0VGltZTsKKyAgICBTZWNvbmRzIG1fcGF1c2VUaW1lOworICAgIFNlY29uZHMg
bV90b3RhbFJ1bm5pbmdUaW1lOworICAgIE1vbm90b25pY1RpbWUgbV9sYXN0UmVmcmVzaGVkVGlt
ZTsKKyAgICBBbmltYXRpb25TdGF0ZSBtX3N0YXRlOworfTsKKworY2xhc3MgQW5pbWF0aW9ucyB7
CitwdWJsaWM6CisgICAgQW5pbWF0aW9ucygpID0gZGVmYXVsdDsKKworICAgIHZvaWQgYWRkKGNv
bnN0IEFuaW1hdGlvbiYpOworICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSk7Cisg
ICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpBbmltYXRlZFByb3Bl
cnR5SUQpOworICAgIHZvaWQgcGF1c2UoY29uc3QgU3RyaW5nJiwgU2Vjb25kcyk7CisgICAgdm9p
ZCBzdXNwZW5kKE1vbm90b25pY1RpbWUpOworICAgIHZvaWQgcmVzdW1lKCk7CisKKyAgICB2b2lk
IGFwcGx5KEFuaW1hdGlvbjo6QXBwbGljYXRpb25SZXN1bHQmLCBNb25vdG9uaWNUaW1lKTsKKyAg
ICB2b2lkIGFwcGx5S2VlcGluZ0ludGVybmFsU3RhdGUoQW5pbWF0aW9uOjpBcHBsaWNhdGlvblJl
c3VsdCYsIE1vbm90b25pY1RpbWUpOworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9hbmltYXRpb25zLmlzRW1wdHkoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmltYXRpb25zLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxBbmltYXRpb24+
JiBhbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zOyB9CisgICAgVmVjdG9y
PEFuaW1hdGlvbj4mIGFuaW1hdGlvbnMoKSB7IHJldHVybiBtX2FuaW1hdGlvbnM7IH0KKworICAg
IGJvb2wgaGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdDsKKyAgICBib29sIGhhc0FjdGl2ZUFu
aW1hdGlvbnNPZlR5cGUoV2ViQ29yZTo6QW5pbWF0ZWRQcm9wZXJ0eUlEIHR5cGUpIGNvbnN0Owor
ICAgIEFuaW1hdGlvbnMgZ2V0QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIFZlY3RvcjxBbmltYXRpb24+IG1fYW5pbWF0aW9uczsKK307CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBsYXRmb3Jt
TGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3Np
YVBsYXRmb3JtTGF5ZXIuaAppbmRleCAxMWM2MDU5ODY2NzMzZTdkYzc1Zjg5MmJiZjM4ZmQyY2Iw
ZTIzM2IwLi4zY2NmZTYwOTM4NjEwZjZjZDFiMjJhYzliZWY4N2FlYzVlNWFkMWVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQbGF0
Zm9ybUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9OaWNvc2lhUGxhdGZvcm1MYXllci5oCkBAIC0zNSw4ICszNSw4IEBACiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiTmljb3NpYUFuaW1h
dGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCisjaW5jbHVkZSAiTmljb3NpYUFuaW1hdGlvbi5oIgog
I2luY2x1ZGUgIk5pY29zaWFTY2VuZUludGVncmF0aW9uLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1h
cHBlckFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTE3MSw3ICsx
NzEsNyBAQCBwdWJsaWM6CiAgICAgICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVy
czsKICAgICAgICAgLy8gRklYTUU6IERlc3BpdGUgdGhlIG5hbWUsIHRoaXMgaW1wbGVtZW50YXRp
b24gaXMgbm90CiAgICAgICAgIC8vIFRleHR1cmVNYXBwZXItc3BlY2lmaWMuIFNob3VsZCBiZSBy
ZW5hbWVkIHdoZW4gbmVjZXNzYXJ5LgotICAgICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQW5p
bWF0aW9ucyBhbmltYXRpb25zOworICAgICAgICBBbmltYXRpb25zIGFuaW1hdGlvbnM7CiAKICAg
ICAgICAgVmVjdG9yPFJlZlB0cjxDb21wb3NpdGlvbkxheWVyPj4gY2hpbGRyZW47CiAgICAgICAg
IFJlZlB0cjxDb21wb3NpdGlvbkxheWVyPiByZXBsaWNhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggZWFkZmJhMGY2YzY3ODY4NjZlODI0ODFkOTJlMzI2
Yzc2OGZiZDVmNi4uYjcyNDNlOTk0YzAwNGQyMjE1ZGNiOTRjMWU0ZWViZGEwZTkyNTQwOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBAIC0yMyw3ICsyMyw3
IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ckZhY3RvcnkuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJOaWNvc2lhQW5pbWF0aW9uLmgiCiAKICNpZiAh
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCkBAIC01NzIsNyArNTcyLDcgQEAgYm9vbCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiB2YWx1ZUxpc3QKICAgICAgICAgbGlzdHNNYXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3Bl
cmF0aW9ucyh2YWx1ZUxpc3QsIGhhc0JpZ1JvdGF0aW9uKSA+PSAwOwogCiAgICAgY29uc3QgTW9u
b3RvbmljVGltZSBjdXJyZW50VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotICAgIG1fYW5p
bWF0aW9ucy5hZGQoVGV4dHVyZU1hcHBlckFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxp
c3QsIGJveFNpemUsICphbmltLCBsaXN0c01hdGNoLCBjdXJyZW50VGltZSAtIFNlY29uZHModGlt
ZU9mZnNldCksIDBfcywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlBs
YXlpbmcpKTsKKyAgICBtX2FuaW1hdGlvbnMuYWRkKE5pY29zaWE6OkFuaW1hdGlvbihrZXlmcmFt
ZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsICphbmltLCBsaXN0c01hdGNoLCBjdXJyZW50VGlt
ZSAtIFNlY29uZHModGltZU9mZnNldCksIDBfcywgTmljb3NpYTo6QW5pbWF0aW9uOjpBbmltYXRp
b25TdGF0ZTo6UGxheWluZykpOwogICAgIC8vIG1fYW5pbWF0aW9uU3RhcnRUaW1lIGlzIHRoZSB0
aW1lIG9mIHRoZSBmaXJzdCByZWFsIGZyYW1lIG9mIGFuaW1hdGlvbiwgbm93IG9yIGRlbGF5ZWQg
YnkgYSBuZWdhdGl2ZSBvZmZzZXQuCiAgICAgaWYgKFNlY29uZHModGltZU9mZnNldCkgPiAwX3Mp
CiAgICAgICAgIG1fYW5pbWF0aW9uU3RhcnRUaW1lID0gY3VycmVudFRpbWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IDk4MDA0MWVlZDkxOGNjNzBlNjk1ZTIx
NWNjYzA0ODdkYzE3N2IzNzcuLmU2NjE1ZTFjZDY4NjI0YWYzZThhOTlhY2RhZGIyZTU4ODg1NDQ1
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBAIC0xNjIsNyAr
MTYyLDcgQEAgcHJpdmF0ZToKIAogICAgIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBtX2Nv
bnRlbnRzTGF5ZXI7CiAgICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKLSAgICBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CisgICAgTmljb3NpYTo6QW5pbWF0aW9u
cyBtX2FuaW1hdGlvbnM7CiAgICAgTW9ub3RvbmljVGltZSBtX2FuaW1hdGlvblN0YXJ0VGltZTsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZWU1NDljYWJlMjFhNWYwMGU4ZWI3MGExMGNlNDU5MWQ1ODk4NWYzOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJMYXlvdXRTaXplLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotc3RhdGljIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kRnVuYyhGaWx0
ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uJiB0b09wLCBkb3VibGUgcHJvZ3Jl
c3MsIGNvbnN0IEZsb2F0U2l6ZSYsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCi17
Ci0gICAgcmV0dXJuIHRvT3AuYmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgYmxlbmRUb1Bhc3N0aHJv
dWdoKTsKLX0KLQotc3RhdGljIEZpbHRlck9wZXJhdGlvbnMgYXBwbHlGaWx0ZXJBbmltYXRpb24o
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8s
IGRvdWJsZSBwcm9ncmVzcywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplKQotewotICAgIC8vIEZp
cnN0IGZyYW1lIG9mIGFuIGFuaW1hdGlvbi4KLSAgICBpZiAoIXByb2dyZXNzKQotICAgICAgICBy
ZXR1cm4gZnJvbTsKLQotICAgIC8vIExhc3QgZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgotICAgIGlm
IChwcm9ncmVzcyA9PSAxKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICBpZiAoIWZyb20uaXNF
bXB0eSgpICYmICF0by5pc0VtcHR5KCkgJiYgIWZyb20ub3BlcmF0aW9uc01hdGNoKHRvKSkKLSAg
ICAgICAgcmV0dXJuIHRvOwotCi0gICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7Ci0KLSAgICBz
aXplX3QgZnJvbVNpemUgPSBmcm9tLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHRv
U2l6ZSA9IHRvLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBzdGQ6Om1h
eChmcm9tU2l6ZSwgdG9TaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkr
KykgewotICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9tT3AgPSAoaSA8IGZyb21T
aXplKSA/IGZyb20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogbnVsbHB0cjsKLSAgICAgICAgUmVm
UHRyPEZpbHRlck9wZXJhdGlvbj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRvLm9wZXJhdGlvbnMo
KVtpXS5nZXQoKSA6IG51bGxwdHI7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJs
ZW5kZWRPcCA9IHRvT3AgPyBibGVuZEZ1bmMoZnJvbU9wLmdldCgpLCAqdG9PcCwgcHJvZ3Jlc3Ms
IGJveFNpemUpIDogKGZyb21PcCA/IGJsZW5kRnVuYyhudWxscHRyLCAqZnJvbU9wLCBwcm9ncmVz
cywgYm94U2l6ZSwgdHJ1ZSkgOiBudWxscHRyKTsKLSAgICAgICAgaWYgKGJsZW5kZWRPcCkKLSAg
ICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZSgpOwotICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQotICAg
ICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3AgPyB0b09wIDogV1RG
TW92ZShpZGVudGl0eU9wKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVz
dWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoZnJvbU9wID8gZnJvbU9wIDogV1RGTW92ZShpZGVudGl0
eU9wKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0
aWMgYm9vbCBzaG91bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUoQW5pbWF0aW9uOjpBbmltYXRpb25E
aXJlY3Rpb24gZGlyZWN0aW9uLCBpbnQgbG9vcENvdW50KQotewotICAgIHJldHVybiAoZGlyZWN0
aW9uID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlICYmIGxvb3BDb3Vu
dCAmIDEpCi0gICAgICAgIHx8IChkaXJlY3Rpb24gPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJl
Y3Rpb25BbHRlcm5hdGVSZXZlcnNlICYmICEobG9vcENvdW50ICYgMSkpCi0gICAgICAgIHx8IGRp
cmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2U7Ci19Ci0KLXN0
YXRpYyBkb3VibGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKGRvdWJsZSBydW5uaW5nVGltZSwg
ZG91YmxlIGR1cmF0aW9uLCBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24s
IGRvdWJsZSBpdGVyYXRpb25Db3VudCkKLXsKLSAgICBpZiAoIWR1cmF0aW9uKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIGNvbnN0IGludCBsb29wQ291bnQgPSBydW5uaW5nVGltZSAvIGR1cmF0
aW9uOwotICAgIGNvbnN0IGRvdWJsZSBsYXN0RnVsbExvb3AgPSBkdXJhdGlvbiAqIGRvdWJsZShs
b29wQ291bnQpOwotICAgIGNvbnN0IGRvdWJsZSByZW1haW5kZXIgPSBydW5uaW5nVGltZSAtIGxh
c3RGdWxsTG9vcDsKLSAgICAvLyBJZ25vcmUgcmVtYWluZGVyIHdoZW4gd2UndmUgcmVhY2hlZCB0
aGUgZW5kIG9mIGFuaW1hdGlvbi4KLSAgICBjb25zdCBkb3VibGUgbm9ybWFsaXplZCA9IChsb29w
Q291bnQgPT0gaXRlcmF0aW9uQ291bnQpID8gMS4wIDogKHJlbWFpbmRlciAvIGR1cmF0aW9uKTsK
LQotICAgIHJldHVybiBzaG91bGRSZXZlcnNlQW5pbWF0aW9uVmFsdWUoZGlyZWN0aW9uLCBsb29w
Q291bnQpID8gMSAtIG5vcm1hbGl6ZWQgOiBub3JtYWxpemVkOwotfQotCi1zdGF0aWMgZG91Ymxl
IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZUZvckZpbGxzRm9yd2FyZHMoZG91YmxlIGl0ZXJhdGlv
bkNvdW50LCBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAg
aWYgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbk5vcm1hbCkKLSAg
ICAgICAgcmV0dXJuIDE7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBBbmltYXRpb246OkFuaW1hdGlv
bkRpcmVjdGlvblJldmVyc2UpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzaG91bGRS
ZXZlcnNlQW5pbWF0aW9uVmFsdWUoZGlyZWN0aW9uLCBpdGVyYXRpb25Db3VudCkgPyAxIDogMDsK
LX0KLQotc3RhdGljIGZsb2F0IGFwcGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBmcm9tT3BhY2l0
eSwgZmxvYXQgdG9PcGFjaXR5LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gT3B0aW1pemF0
aW9uOiBzcGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KLSAgICBpZiAocHJv
Z3Jlc3MgPT0gMS4wKQotICAgICAgICByZXR1cm4gdG9PcGFjaXR5OwotCi0gICAgaWYgKCFwcm9n
cmVzcykKLSAgICAgICAgcmV0dXJuIGZyb21PcGFjaXR5OwotCi0gICAgcmV0dXJuIGZyb21PcGFj
aXR5ICsgcHJvZ3Jlc3MgKiAodG9PcGFjaXR5IC0gZnJvbU9wYWNpdHkpOwotfQotCi1zdGF0aWMg
VHJhbnNmb3JtYXRpb25NYXRyaXggYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdG8sIGRvdWJs
ZSBwcm9ncmVzcywgY29uc3QgRmxvYXRTaXplJiBib3hTaXplLCBib29sIGxpc3RzTWF0Y2gpCi17
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotCi0gICAgLy8gRmlyc3QgZnJhbWUg
b2YgYW4gYW5pbWF0aW9uLgotICAgIGlmICghcHJvZ3Jlc3MpIHsKLSAgICAgICAgZnJvbS5hcHBs
eShib3hTaXplLCBtYXRyaXgpOwotICAgICAgICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAg
IC8vIExhc3QgZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgotICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7
Ci0gICAgICAgIHRvLmFwcGx5KGJveFNpemUsIG1hdHJpeCk7Ci0gICAgICAgIHJldHVybiBtYXRy
aXg7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgaGF2ZSBpbmNvbXBhdGlibGUgb3BlcmF0aW9uIGxp
c3RzLCB3ZSBibGVuZCB0aGUgcmVzdWx0aW5nIG1hdHJpY2VzLgotICAgIGlmICghbGlzdHNNYXRj
aCkgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tTWF0cml4OwotICAgICAgICB0
by5hcHBseShib3hTaXplLCBtYXRyaXgpOwotICAgICAgICBmcm9tLmFwcGx5KGJveFNpemUsIGZy
b21NYXRyaXgpOwotICAgICAgICBtYXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpOwot
ICAgICAgICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAgIC8vIEFuaW1hdGlvbiB0byAiLXdl
YmtpdC10cmFuc2Zvcm06IG5vbmUiLgotICAgIGlmICghdG8uc2l6ZSgpKSB7Ci0gICAgICAgIFRy
YW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZChmcm9tKTsKLSAgICAgICAgZm9yIChhdXRvJiBvcGVy
YXRpb24gOiBibGVuZGVkLm9wZXJhdGlvbnMoKSkKLSAgICAgICAgICAgIG9wZXJhdGlvbi0+Ymxl
bmQobnVsbHB0ciwgcHJvZ3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOwotICAg
ICAgICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAgIC8vIEFuaW1hdGlvbiBmcm9tICItd2Vi
a2l0LXRyYW5zZm9ybTogbm9uZSIuCi0gICAgaWYgKCFmcm9tLnNpemUoKSkgewotICAgICAgICBU
cmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQodG8pOwotICAgICAgICBmb3IgKGF1dG8mIG9wZXJh
dGlvbiA6IGJsZW5kZWQub3BlcmF0aW9ucygpKQotICAgICAgICAgICAgb3BlcmF0aW9uLT5ibGVu
ZChudWxscHRyLCAxIC0gcHJvZ3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOwot
ICAgICAgICByZXR1cm4gbWF0cml4OwotICAgIH0KLQotICAgIC8vIE5vcm1hbCBhbmltYXRpb24g
d2l0aCBhIG1hdGNoaW5nIG9wZXJhdGlvbiBsaXN0LgotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
YmxlbmRlZCh0byk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibGVuZGVkLm9wZXJhdGlv
bnMoKS5zaXplKCk7ICsraSkKLSAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5k
KGZyb20uYXQoaSksIHByb2dyZXNzLCAhZnJvbS5hdChpKSktPmFwcGx5KG1hdHJpeCwgYm94U2l6
ZSk7Ci0gICAgcmV0dXJuIG1hdHJpeDsKLX0KLQotc3RhdGljIGNvbnN0IFRpbWluZ0Z1bmN0aW9u
JiB0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvblZhbHVlJiBh
bmltYXRpb25WYWx1ZSwgY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKQot
ewotICAgIGlmIChhbmltYXRpb25WYWx1ZS50aW1pbmdGdW5jdGlvbigpKQotICAgICAgICByZXR1
cm4gKmFuaW1hdGlvblZhbHVlLnRpbWluZ0Z1bmN0aW9uKCk7Ci0gICAgaWYgKGFuaW1hdGlvbi50
aW1pbmdGdW5jdGlvbigpKQotICAgICAgICByZXR1cm4gKmFuaW1hdGlvbi50aW1pbmdGdW5jdGlv
bigpOwotICAgIHJldHVybiBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpkZWZhdWx0VGltaW5n
RnVuY3Rpb24oKTsKLX0KLQotVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4dHVyZU1hcHBlckFu
aW1hdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlm
cmFtZXMsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRp
b24sIGJvb2wgbGlzdHNNYXRjaCwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUsIFNlY29uZHMgcGF1
c2VUaW1lLCBBbmltYXRpb25TdGF0ZSBzdGF0ZSkKLSAgICA6IG1fbmFtZShuYW1lLmlzU2FmZVRv
U2VuZFRvQW5vdGhlclRocmVhZCgpID8gbmFtZSA6IG5hbWUuaXNvbGF0ZWRDb3B5KCkpCi0gICAg
LCBtX2tleWZyYW1lcyhrZXlmcmFtZXMpCi0gICAgLCBtX2JveFNpemUoYm94U2l6ZSkKLSAgICAs
IG1fdGltaW5nRnVuY3Rpb24oYW5pbWF0aW9uLnRpbWluZ0Z1bmN0aW9uKCktPmNsb25lKCkpCi0g
ICAgLCBtX2l0ZXJhdGlvbkNvdW50KGFuaW1hdGlvbi5pdGVyYXRpb25Db3VudCgpKQotICAgICwg
bV9kdXJhdGlvbihhbmltYXRpb24uZHVyYXRpb24oKSkKLSAgICAsIG1fZGlyZWN0aW9uKGFuaW1h
dGlvbi5kaXJlY3Rpb24oKSkKLSAgICAsIG1fZmlsbHNGb3J3YXJkcyhhbmltYXRpb24uZmlsbHNG
b3J3YXJkcygpKQotICAgICwgbV9saXN0c01hdGNoKGxpc3RzTWF0Y2gpCi0gICAgLCBtX3N0YXJ0
VGltZShzdGFydFRpbWUpCi0gICAgLCBtX3BhdXNlVGltZShwYXVzZVRpbWUpCi0gICAgLCBtX3Rv
dGFsUnVubmluZ1RpbWUoMF9zKQotICAgICwgbV9sYXN0UmVmcmVzaGVkVGltZShtX3N0YXJ0VGlt
ZSkKLSAgICAsIG1fc3RhdGUoc3RhdGUpCi17Ci19Ci0KLVRleHR1cmVNYXBwZXJBbmltYXRpb246
OlRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgb3Ro
ZXIpCi0gICAgOiBtX25hbWUob3RoZXIubV9uYW1lLmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVh
ZCgpID8gb3RoZXIubV9uYW1lIDogb3RoZXIubV9uYW1lLmlzb2xhdGVkQ29weSgpKQotICAgICwg
bV9rZXlmcmFtZXMob3RoZXIubV9rZXlmcmFtZXMpCi0gICAgLCBtX2JveFNpemUob3RoZXIubV9i
b3hTaXplKQotICAgICwgbV90aW1pbmdGdW5jdGlvbihvdGhlci5tX3RpbWluZ0Z1bmN0aW9uLT5j
bG9uZSgpKQotICAgICwgbV9pdGVyYXRpb25Db3VudChvdGhlci5tX2l0ZXJhdGlvbkNvdW50KQot
ICAgICwgbV9kdXJhdGlvbihvdGhlci5tX2R1cmF0aW9uKQotICAgICwgbV9kaXJlY3Rpb24ob3Ro
ZXIubV9kaXJlY3Rpb24pCi0gICAgLCBtX2ZpbGxzRm9yd2FyZHMob3RoZXIubV9maWxsc0Zvcndh
cmRzKQotICAgICwgbV9saXN0c01hdGNoKG90aGVyLm1fbGlzdHNNYXRjaCkKLSAgICAsIG1fc3Rh
cnRUaW1lKG90aGVyLm1fc3RhcnRUaW1lKQotICAgICwgbV9wYXVzZVRpbWUob3RoZXIubV9wYXVz
ZVRpbWUpCi0gICAgLCBtX3RvdGFsUnVubmluZ1RpbWUob3RoZXIubV90b3RhbFJ1bm5pbmdUaW1l
KQotICAgICwgbV9sYXN0UmVmcmVzaGVkVGltZShvdGhlci5tX2xhc3RSZWZyZXNoZWRUaW1lKQot
ICAgICwgbV9zdGF0ZShvdGhlci5tX3N0YXRlKQotewotfQotCi12b2lkIFRleHR1cmVNYXBwZXJB
bmltYXRpb246OmFwcGx5KEFwcGxpY2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIE1v
bm90b25pY1RpbWUgdGltZSkKLXsKLSAgICBpZiAoIWlzQWN0aXZlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFNlY29uZHMgdG90YWxSdW5uaW5nVGltZSA9IGNvbXB1dGVUb3RhbFJ1bm5pbmdU
aW1lKHRpbWUpOwotICAgIGRvdWJsZSBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVkQW5pbWF0
aW9uVmFsdWUodG90YWxSdW5uaW5nVGltZS5zZWNvbmRzKCksIG1fZHVyYXRpb24sIG1fZGlyZWN0
aW9uLCBtX2l0ZXJhdGlvbkNvdW50KTsKLQotICAgIGlmIChtX2l0ZXJhdGlvbkNvdW50ICE9IEFu
aW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSAmJiB0b3RhbFJ1bm5pbmdUaW1lLnNlY29u
ZHMoKSA+PSBtX2R1cmF0aW9uICogbV9pdGVyYXRpb25Db3VudCkgewotICAgICAgICBtX3N0YXRl
ID0gQW5pbWF0aW9uU3RhdGU6OlN0b3BwZWQ7Ci0gICAgICAgIG1fcGF1c2VUaW1lID0gMF9zOwot
ICAgICAgICBpZiAobV9maWxsc0ZvcndhcmRzKQotICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVl
ID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlRm9yRmlsbHNGb3J3YXJkcyhtX2l0ZXJhdGlvbkNv
dW50LCBtX2RpcmVjdGlvbik7Ci0gICAgfQotCi0gICAgYXBwbGljYXRpb25SZXN1bHRzLmhhc1J1
bm5pbmdBbmltYXRpb25zIHw9IChtX3N0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQbGF5aW5nKTsK
LQotICAgIGlmICghbm9ybWFsaXplZFZhbHVlKSB7Ci0gICAgICAgIGFwcGx5SW50ZXJuYWwoYXBw
bGljYXRpb25SZXN1bHRzLCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSksIDAp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZSA9PSAx
LjApIHsKLSAgICAgICAgYXBwbHlJbnRlcm5hbChhcHBsaWNhdGlvblJlc3VsdHMsIG1fa2V5ZnJh
bWVzLmF0KG1fa2V5ZnJhbWVzLnNpemUoKSAtIDIpLCBtX2tleWZyYW1lcy5hdChtX2tleWZyYW1l
cy5zaXplKCkgLSAxKSwgMSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG1fa2V5
ZnJhbWVzLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgIGF1dG8mIHRpbWluZ0Z1bmN0aW9uID0gdGlt
aW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShtX2tleWZyYW1lcy5hdCgwKSwgKnRoaXMpOwot
ICAgICAgICBub3JtYWxpemVkVmFsdWUgPSB0aW1pbmdGdW5jdGlvbi50cmFuc2Zvcm1UaW1lKG5v
cm1hbGl6ZWRWYWx1ZSwgbV9kdXJhdGlvbik7Ci0gICAgICAgIGFwcGx5SW50ZXJuYWwoYXBwbGlj
YXRpb25SZXN1bHRzLCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSksIG5vcm1h
bGl6ZWRWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgewotICAgICAgICBjb25zdCBB
bmltYXRpb25WYWx1ZSYgZnJvbSA9IG1fa2V5ZnJhbWVzLmF0KGkpOwotICAgICAgICBjb25zdCBB
bmltYXRpb25WYWx1ZSYgdG8gPSBtX2tleWZyYW1lcy5hdChpICsgMSk7Ci0gICAgICAgIGlmIChm
cm9tLmtleVRpbWUoKSA+IG5vcm1hbGl6ZWRWYWx1ZSB8fCB0by5rZXlUaW1lKCkgPCBub3JtYWxp
emVkVmFsdWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBub3JtYWxpemVkVmFs
dWUgPSAobm9ybWFsaXplZFZhbHVlIC0gZnJvbS5rZXlUaW1lKCkpIC8gKHRvLmtleVRpbWUoKSAt
IGZyb20ua2V5VGltZSgpKTsKLSAgICAgICAgYXV0byYgdGltaW5nRnVuY3Rpb24gPSB0aW1pbmdG
dW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGZyb20sICp0aGlzKTsKLSAgICAgICAgbm9ybWFsaXpl
ZFZhbHVlID0gdGltaW5nRnVuY3Rpb24udHJhbnNmb3JtVGltZShub3JtYWxpemVkVmFsdWUsIG1f
ZHVyYXRpb24pOwotICAgICAgICBhcHBseUludGVybmFsKGFwcGxpY2F0aW9uUmVzdWx0cywgZnJv
bSwgdG8sIG5vcm1hbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9p
ZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphcHBseUtlZXBpbmdJbnRlcm5hbFN0YXRlKEFwcGxp
Y2F0aW9uUmVzdWx0JiBhcHBsaWNhdGlvblJlc3VsdHMsIE1vbm90b25pY1RpbWUgdGltZSkKLXsK
LSAgICBNb25vdG9uaWNUaW1lIG9sZExhc3RSZWZyZXNoZWRUaW1lID0gbV9sYXN0UmVmcmVzaGVk
VGltZTsKLSAgICBTZWNvbmRzIG9sZFRvdGFsUnVubmluZ1RpbWUgPSBtX3RvdGFsUnVubmluZ1Rp
bWU7Ci0gICAgQW5pbWF0aW9uU3RhdGUgb2xkU3RhdGUgPSBtX3N0YXRlOwotCi0gICAgYXBwbHko
YXBwbGljYXRpb25SZXN1bHRzLCB0aW1lKTsKLQotICAgIG1fbGFzdFJlZnJlc2hlZFRpbWUgPSBv
bGRMYXN0UmVmcmVzaGVkVGltZTsKLSAgICBtX3RvdGFsUnVubmluZ1RpbWUgPSBvbGRUb3RhbFJ1
bm5pbmdUaW1lOwotICAgIG1fc3RhdGUgPSBvbGRTdGF0ZTsKLX0KLQotdm9pZCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uOjpwYXVzZShTZWNvbmRzIHRpbWUpCi17Ci0gICAgbV9zdGF0ZSA9IEFuaW1h
dGlvblN0YXRlOjpQYXVzZWQ7Ci0gICAgbV9wYXVzZVRpbWUgPSB0aW1lOwotfQotCi12b2lkIFRl
eHR1cmVNYXBwZXJBbmltYXRpb246OnJlc3VtZSgpCi17Ci0gICAgbV9zdGF0ZSA9IEFuaW1hdGlv
blN0YXRlOjpQbGF5aW5nOwotICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIHdyb25nLiBtX3RvdGFs
UnVubmluZ1RpbWUgaXMgY2xlYXJlZC4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTgzMTEzCi0gICAgbV9wYXVzZVRpbWUgPSAwX3M7Ci0gICAgbV90b3Rh
bFJ1bm5pbmdUaW1lID0gbV9wYXVzZVRpbWU7Ci0gICAgbV9sYXN0UmVmcmVzaGVkVGltZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOwotfQotCi1TZWNvbmRzIFRleHR1cmVNYXBwZXJBbmltYXRpb246
OmNvbXB1dGVUb3RhbFJ1bm5pbmdUaW1lKE1vbm90b25pY1RpbWUgdGltZSkKLXsKLSAgICBpZiAo
bV9zdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkKQotICAgICAgICByZXR1cm4gbV9wYXVz
ZVRpbWU7Ci0KLSAgICBNb25vdG9uaWNUaW1lIG9sZExhc3RSZWZyZXNoZWRUaW1lID0gbV9sYXN0
UmVmcmVzaGVkVGltZTsKLSAgICBtX2xhc3RSZWZyZXNoZWRUaW1lID0gdGltZTsKLSAgICBtX3Rv
dGFsUnVubmluZ1RpbWUgKz0gbV9sYXN0UmVmcmVzaGVkVGltZSAtIG9sZExhc3RSZWZyZXNoZWRU
aW1lOwotICAgIHJldHVybiBtX3RvdGFsUnVubmluZ1RpbWU7Ci19Ci0KLWJvb2wgVGV4dHVyZU1h
cHBlckFuaW1hdGlvbjo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRlICE9
IEFuaW1hdGlvblN0YXRlOjpTdG9wcGVkIHx8IG1fZmlsbHNGb3J3YXJkczsKLX0KLQotdm9pZCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphcHBseUludGVybmFsKEFwcGxpY2F0aW9uUmVzdWx0JiBh
cHBsaWNhdGlvblJlc3VsdHMsIGNvbnN0IEFuaW1hdGlvblZhbHVlJiBmcm9tLCBjb25zdCBBbmlt
YXRpb25WYWx1ZSYgdG8sIGZsb2F0IHByb2dyZXNzKQotewotICAgIHN3aXRjaCAobV9rZXlmcmFt
ZXMucHJvcGVydHkoKSkgewotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybToKLSAg
ICAgICAgYXBwbGljYXRpb25SZXN1bHRzLnRyYW5zZm9ybSA9IGFwcGx5VHJhbnNmb3JtQW5pbWF0
aW9uKHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlJj4oZnJvbSkudmFs
dWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUmPih0bykudmFs
dWUoKSwgcHJvZ3Jlc3MsIG1fYm94U2l6ZSwgbV9saXN0c01hdGNoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgICAgIGFwcGxpY2F0aW9u
UmVzdWx0cy5vcGFjaXR5ID0gYXBwbHlPcGFjaXR5QW5pbWF0aW9uKChzdGF0aWNfY2FzdDxjb25z
dCBGbG9hdEFuaW1hdGlvblZhbHVlJj4oZnJvbSkudmFsdWUoKSksIChzdGF0aWNfY2FzdDxjb25z
dCBGbG9hdEFuaW1hdGlvblZhbHVlJj4odG8pLnZhbHVlKCkpLCBwcm9ncmVzcyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlGaWx0ZXI6Ci0gICAgICAgIGFwcGxp
Y2F0aW9uUmVzdWx0cy5maWx0ZXJzID0gYXBwbHlGaWx0ZXJBbmltYXRpb24oc3RhdGljX2Nhc3Q8
Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUmPihmcm9tKS52YWx1ZSgpLCBzdGF0aWNfY2FzdDxj
b25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSY+KHRvKS52YWx1ZSgpLCBwcm9ncmVzcywgbV9ib3hT
aXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6YWRk
KGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbikKLXsKLSAgICAvLyBSZW1v
dmUgdGhlIG9sZCBzdGF0ZSBpZiB3ZSBhcmUgcmVzdW1pbmcgYSBwYXVzZWQgYW5pbWF0aW9uLgot
ICAgIHJlbW92ZShhbmltYXRpb24ubmFtZSgpLCBhbmltYXRpb24ua2V5ZnJhbWVzKCkucHJvcGVy
dHkoKSk7Ci0KLSAgICBtX2FuaW1hdGlvbnMuYXBwZW5kKGFuaW1hdGlvbik7Ci19Ci0KLXZvaWQg
VGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFtZV0gKGNvbnN0IFRleHR1cmVN
YXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbikgewotICAgICAgICByZXR1cm4gYW5pbWF0aW9uLm5h
bWUoKSA9PSBuYW1lOwotICAgIH0pOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25z
OjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkp
Ci17Ci0gICAgbV9hbmltYXRpb25zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFtZSwgcHJvcGVydHld
IChjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsKLSAgICAgICAgcmV0
dXJuIGFuaW1hdGlvbi5uYW1lKCkgPT0gbmFtZSAmJiBhbmltYXRpb24ua2V5ZnJhbWVzKCkucHJv
cGVydHkoKSA9PSBwcm9wZXJ0eTsKLSAgICB9KTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uczo6cGF1c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBTZWNvbmRzIG9mZnNldCkKLXsKLSAg
ICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykgewotICAgICAgICBpZiAoYW5p
bWF0aW9uLm5hbWUoKSA9PSBuYW1lKQotICAgICAgICAgICAgYW5pbWF0aW9uLnBhdXNlKG9mZnNl
dCk7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpzdXNwZW5kKE1v
bm90b25pY1RpbWUgdGltZSkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyB3cm9uZy4gYHBh
dXNlYCB0YWtlcyB0aW1lIG9mZnNldCAoU2Vjb25kcyksIG5vdCBNb25vdG9uaWNUaW1lLgotICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODMxMTIKLSAgICBm
b3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykKLSAgICAgICAgYW5pbWF0aW9uLnBh
dXNlKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKSk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbnM6OnJlc3VtZSgpCi17Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1h
dGlvbnMpCi0gICAgICAgIGFuaW1hdGlvbi5yZXN1bWUoKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uczo6YXBwbHkoVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6QXBwbGljYXRpb25S
ZXN1bHQmIGFwcGxpY2F0aW9uUmVzdWx0cywgTW9ub3RvbmljVGltZSB0aW1lKQotewotICAgIGZv
ciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25zKQotICAgICAgICBhbmltYXRpb24uYXBw
bHkoYXBwbGljYXRpb25SZXN1bHRzLCB0aW1lKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uczo6YXBwbHlLZWVwaW5nSW50ZXJuYWxTdGF0ZShUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
OjpBcHBsaWNhdGlvblJlc3VsdCYgYXBwbGljYXRpb25SZXN1bHRzLCBNb25vdG9uaWNUaW1lIHRp
bWUpCi17Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnMpCi0gICAgICAg
IGFuaW1hdGlvbi5hcHBseUtlZXBpbmdJbnRlcm5hbFN0YXRlKGFwcGxpY2F0aW9uUmVzdWx0cywg
dGltZSk7Ci19Ci0KLWJvb2wgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6Omhhc0FjdGl2ZUFuaW1h
dGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eUlEIHR5cGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHN0ZDo6YW55X29mKG1fYW5pbWF0aW9ucy5iZWdpbigpLCBtX2FuaW1hdGlvbnMuZW5kKCksCi0g
ICAgICAgIFsmdHlwZV0oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7
IHJldHVybiBhbmltYXRpb24uaXNBY3RpdmUoKSAmJiBhbmltYXRpb24ua2V5ZnJhbWVzKCkucHJv
cGVydHkoKSA9PSB0eXBlOyB9KTsKLX0KLQotYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6
aGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiBzdGQ6OmFueV9vZiht
X2FuaW1hdGlvbnMuYmVnaW4oKSwgbV9hbmltYXRpb25zLmVuZCgpLAotICAgICAgICBbXShjb25z
dCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgcmV0dXJuIGFuaW1hdGlvbi5z
dGF0ZSgpID09IFRleHR1cmVNYXBwZXJBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpQbGF5aW5n
OyB9KTsKLX0KLQotVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgVGV4dHVyZU1hcHBlckFuaW1hdGlv
bnM6OmdldEFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAotewotICAgIFRleHR1cmVNYXBwZXJBbmlt
YXRpb25zIGFjdGl2ZTsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9ucykg
ewotICAgICAgICBpZiAoYW5pbWF0aW9uLmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBhY3RpdmUu
YWRkKGFuaW1hdGlvbik7Ci0gICAgfQotICAgIHJldHVybiBhY3RpdmU7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlMjJlMjA0N2Y5ZTFmNjFkMDE5NmM3MGNlNjRjYzdhODE2M2Yz
MTAwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgVGV4dHVyZU1hcHBlckFuaW1hdGlvbl9oCi0jZGVm
aW5lIFRleHR1cmVNYXBwZXJBbmltYXRpb25faAotCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4Owot
Ci1jbGFzcyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uIHsKLXB1YmxpYzoKLSAgICBlbnVtIGNsYXNz
IEFuaW1hdGlvblN0YXRlIHsgUGxheWluZywgUGF1c2VkLCBTdG9wcGVkIH07Ci0KLSAgICBzdHJ1
Y3QgQXBwbGljYXRpb25SZXN1bHQgewotICAgICAgICBPcHRpb25hbDxUcmFuc2Zvcm1hdGlvbk1h
dHJpeD4gdHJhbnNmb3JtOwotICAgICAgICBPcHRpb25hbDxkb3VibGU+IG9wYWNpdHk7Ci0gICAg
ICAgIE9wdGlvbmFsPEZpbHRlck9wZXJhdGlvbnM+IGZpbHRlcnM7Ci0gICAgICAgIGJvb2wgaGFz
UnVubmluZ0FuaW1hdGlvbnMgeyBmYWxzZSB9OwotICAgIH07Ci0KLSAgICBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uKCkKLSAgICAgICAgOiBtX2tleWZyYW1lcyhBbmltYXRlZFByb3BlcnR5SW52YWxp
ZCkKLSAgICB7IH0KLSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYsIGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgQW5pbWF0aW9u
JiwgYm9vbCwgTW9ub3RvbmljVGltZSwgU2Vjb25kcywgQW5pbWF0aW9uU3RhdGUpOwotICAgIFdF
QkNPUkVfRVhQT1JUIFRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbiYpOwotCi0gICAgdm9pZCBhcHBseShBcHBsaWNhdGlvblJlc3VsdCYsIE1vbm90b25p
Y1RpbWUpOwotICAgIHZvaWQgYXBwbHlLZWVwaW5nSW50ZXJuYWxTdGF0ZShBcHBsaWNhdGlvblJl
c3VsdCYsIE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgcGF1c2UoU2Vjb25kcyk7Ci0gICAgdm9p
ZCByZXN1bWUoKTsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBTdHJp
bmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBLZXlmcmFtZVZh
bHVlTGlzdCYga2V5ZnJhbWVzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXM7IH0KLSAgICBB
bmltYXRpb25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KLSAgICBUaW1p
bmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpbWluZ0Z1bmN0
aW9uLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBhcHBseUludGVybmFsKEFwcGxpY2F0
aW9uUmVzdWx0JiwgY29uc3QgQW5pbWF0aW9uVmFsdWUmIGZyb20sIGNvbnN0IEFuaW1hdGlvblZh
bHVlJiB0bywgZmxvYXQgcHJvZ3Jlc3MpOwotICAgIFNlY29uZHMgY29tcHV0ZVRvdGFsUnVubmlu
Z1RpbWUoTW9ub3RvbmljVGltZSk7Ci0KLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIEtleWZyYW1l
VmFsdWVMaXN0IG1fa2V5ZnJhbWVzOwotICAgIEZsb2F0U2l6ZSBtX2JveFNpemU7Ci0gICAgUmVm
UHRyPFRpbWluZ0Z1bmN0aW9uPiBtX3RpbWluZ0Z1bmN0aW9uOwotICAgIGRvdWJsZSBtX2l0ZXJh
dGlvbkNvdW50OwotICAgIGRvdWJsZSBtX2R1cmF0aW9uOwotICAgIEFuaW1hdGlvbjo6QW5pbWF0
aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwotICAgIGJvb2wgbV9maWxsc0ZvcndhcmRzOwotICAg
IGJvb2wgbV9saXN0c01hdGNoOwotICAgIE1vbm90b25pY1RpbWUgbV9zdGFydFRpbWU7Ci0gICAg
U2Vjb25kcyBtX3BhdXNlVGltZTsKLSAgICBTZWNvbmRzIG1fdG90YWxSdW5uaW5nVGltZTsKLSAg
ICBNb25vdG9uaWNUaW1lIG1fbGFzdFJlZnJlc2hlZFRpbWU7Ci0gICAgQW5pbWF0aW9uU3RhdGUg
bV9zdGF0ZTsKLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIHsKLXB1YmxpYzoK
LSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucygpID0gZGVmYXVsdDsKLQotICAgIHZvaWQgYWRk
KGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mKTsKLSAgICB2b2lkIHJlbW92ZShjb25zdCBT
dHJpbmcmIG5hbWUpOwotICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSwgQW5pbWF0
ZWRQcm9wZXJ0eUlEKTsKLSAgICB2b2lkIHBhdXNlKGNvbnN0IFN0cmluZyYsIFNlY29uZHMpOwot
ICAgIHZvaWQgc3VzcGVuZChNb25vdG9uaWNUaW1lKTsKLSAgICB2b2lkIHJlc3VtZSgpOwotCi0g
ICAgdm9pZCBhcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3VsdCYs
IE1vbm90b25pY1RpbWUpOwotICAgIHZvaWQgYXBwbHlLZWVwaW5nSW50ZXJuYWxTdGF0ZShUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3VsdCYsIE1vbm90b25pY1RpbWUpOwot
Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zLmlzRW1wdHko
KTsgfQotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zLnNpemUo
KTsgfQotICAgIGNvbnN0IFZlY3RvcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiYgYW5pbWF0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uczsgfQotICAgIFZlY3RvcjxUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uPiYgYW5pbWF0aW9ucygpIHsgcmV0dXJuIG1fYW5pbWF0aW9uczsgfQotCi0g
ICAgYm9vbCBoYXNSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0OwotICAgIGJvb2wgaGFzQWN0aXZl
QW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkgY29uc3Q7Ci0gICAgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbnMgZ2V0QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiBtX2FuaW1hdGlvbnM7Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllci5jcHAKaW5kZXggMzQyOGM2NzRmYzI2NjhjNDM4NWI0ZDkzNzQzOWQzMGFjZjcx
OTFkNC4uYjY2MzJjMDBjZTczMDQwNWZjY2ZiYjg5YWFlYmM5ZjIzYzU3MDg5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJM
YXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5jcHAKQEAgLTY0MCw3ICs2NDAsNyBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJMYXllcjo6c2V0Q29udGVudHNMYXllcihUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYQogICAgIG1fY29udGVudHNMYXllciA9IHBsYXRmb3JtTGF5ZXI7CiB9CiAKLXZvaWQg
VGV4dHVyZU1hcHBlckxheWVyOjpzZXRBbmltYXRpb25zKGNvbnN0IFRleHR1cmVNYXBwZXJBbmlt
YXRpb25zJiBhbmltYXRpb25zKQordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldEFuaW1hdGlv
bnMoY29uc3QgTmljb3NpYTo6QW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKIHsKICAgICBtX2FuaW1h
dGlvbnMgPSBhbmltYXRpb25zOwogfQpAQCAtNjc4LDcgKzY3OCw3IEBAIGJvb2wgVGV4dHVyZU1h
cHBlckxheWVyOjphcHBseUFuaW1hdGlvbnNSZWN1cnNpdmVseShNb25vdG9uaWNUaW1lIHRpbWUp
CiAKIGJvb2wgVGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQW5pbWF0aW9ucyhNb25vdG9uaWNUaW1l
IHRpbWUpCiB7Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6QXBwbGljYXRpb25SZXN1bHQg
YXBwbGljYXRpb25SZXN1bHRzOworICAgIE5pY29zaWE6OkFuaW1hdGlvbjo6QXBwbGljYXRpb25S
ZXN1bHQgYXBwbGljYXRpb25SZXN1bHRzOwogICAgIG1fYW5pbWF0aW9ucy5hcHBseShhcHBsaWNh
dGlvblJlc3VsdHMsIHRpbWUpOwogCiAgICAgbV9sYXllclRyYW5zZm9ybXMubG9jYWxUcmFuc2Zv
cm0gPSBhcHBsaWNhdGlvblJlc3VsdHMudHJhbnNmb3JtLnZhbHVlT3IobV9zdGF0ZS50cmFuc2Zv
cm0pOwpAQCAtNjg3LDcgKzY4Nyw3IEBAIGJvb2wgVGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQW5p
bWF0aW9ucyhNb25vdG9uaWNUaW1lIHRpbWUpCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCiAgICAgLy8gQ2FsY3VsYXRlIGxvY2FsVHJhbnNmb3JtIDUwbXMgaW4gdGhlIGZ1dHVyZS4K
LSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3VsdCBmdXR1cmVBcHBs
aWNhdGlvblJlc3VsdHM7CisgICAgTmljb3NpYTo6QW5pbWF0aW9uOjpBcHBsaWNhdGlvblJlc3Vs
dCBmdXR1cmVBcHBsaWNhdGlvblJlc3VsdHM7CiAgICAgbV9hbmltYXRpb25zLmFwcGx5S2VlcGlu
Z0ludGVybmFsU3RhdGUoZnV0dXJlQXBwbGljYXRpb25SZXN1bHRzLCB0aW1lICsgNTBfbXMpOwog
ICAgIG1fbGF5ZXJUcmFuc2Zvcm1zLmZ1dHVyZUxvY2FsVHJhbnNmb3JtID0gZnV0dXJlQXBwbGlj
YXRpb25SZXN1bHRzLnRyYW5zZm9ybS52YWx1ZU9yKG1fbGF5ZXJUcmFuc2Zvcm1zLmxvY2FsVHJh
bnNmb3JtKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCmluZGV4IDUwYjI0YWE3MWUy
ZGNhZTgwMTYyM2YwZWIyZGUxYjkzMDRhMTRkODEuLmYzYzI4NmNjMjU1OTQyNjkwOWE1NzA0ZWUw
YzkyMDkxN2FiMzc2NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKQEAgLTIyLDggKzIyLDgg
QEAKIAogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJOaWNvc2lhQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAt
OTAsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREZWJ1Z1Zpc3VhbHMoYm9vbCBzaG93
RGVidWdCb3JkZXJzLCBjb25zdCBDb2xvciYgZGVidWdCb3JkZXJDb2xvciwgZmxvYXQgZGVidWdC
b3JkZXJXaWR0aCk7CiAgICAgdm9pZCBzZXRSZXBhaW50Q291bnRlcihib29sIHNob3dSZXBhaW50
Q291bnRlciwgaW50IHJlcGFpbnRDb3VudCk7CiAgICAgdm9pZCBzZXRDb250ZW50c0xheWVyKFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKik7Ci0gICAgdm9pZCBzZXRBbmltYXRpb25zKGNvbnN0
IFRleHR1cmVNYXBwZXJBbmltYXRpb25zJik7CisgICAgdm9pZCBzZXRBbmltYXRpb25zKGNvbnN0
IE5pY29zaWE6OkFuaW1hdGlvbnMmKTsKICAgICB2b2lkIHNldEJhY2tpbmdTdG9yZShUZXh0dXJl
TWFwcGVyQmFja2luZ1N0b3JlKik7CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAg
IHZvaWQgc2V0QW5pbWF0ZWRCYWNraW5nU3RvcmVDbGllbnQoTmljb3NpYTo6QW5pbWF0ZWRCYWNr
aW5nU3RvcmVDbGllbnQqKTsKQEAgLTIwMiw3ICsyMDIsNyBAQCBwcml2YXRlOgogCiAgICAgU3Rh
dGUgbV9zdGF0ZTsKICAgICBUZXh0dXJlTWFwcGVyKiBtX3RleHR1cmVNYXBwZXIgeyBudWxscHRy
IH07Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOworICAgIE5pY29z
aWE6OkFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwogICAgIHVpbnQzMl90IG1faWQgeyAwIH07CiAj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIFJlZlB0cjxOaWNvc2lhOjpBbmltYXRl
ZEJhY2tpbmdTdG9yZUNsaWVudD4gbV9hbmltYXRlZEJhY2tpbmdTdG9yZUNsaWVudDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAK
aW5kZXggMzY3ZDhhNTNjZjM3MGQyMjAyZDZmMzQwMWNkY2IzYTAyZmY0MmMyYi4uYzczZjAxYjJk
ZjU3OTFiNTA1ZDZmN2Q0MGYzMmFlMDJlZTY0MjYzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKQEAgLTEyNTcsNyArMTI1
Nyw3IEBAIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRBbmltYXRpb24oY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKICAgICAgICAgbGlzdHNNYXRjaCA9IHZhbGlk
YXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZUxpc3QsIGlnbm9yZWRIYXNCaWdSb3RhdGlvbikg
Pj0gMDsKIAogICAgIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5v
dygpIC0gU2Vjb25kcyhkZWxheUFzTmVnYXRpdmVUaW1lT2Zmc2V0KTsKLSAgICBtX2FuaW1hdGlv
bnMuYWRkKFRleHR1cmVNYXBwZXJBbmltYXRpb24oa2V5ZnJhbWVzTmFtZSwgdmFsdWVMaXN0LCBi
b3hTaXplLCAqYW5pbSwgbGlzdHNNYXRjaCwgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lLCAwX3Ms
IFRleHR1cmVNYXBwZXJBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpQbGF5aW5nKSk7CisgICAg
bV9hbmltYXRpb25zLmFkZChOaWNvc2lhOjpBbmltYXRpb24oa2V5ZnJhbWVzTmFtZSwgdmFsdWVM
aXN0LCBib3hTaXplLCAqYW5pbSwgbGlzdHNNYXRjaCwgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1l
LCAwX3MsIE5pY29zaWE6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlBsYXlpbmcpKTsKICAg
ICBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKICAgICBkaWRDaGFu
Z2VBbmltYXRpb25zKCk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggZTZjNTg2NjczN2RhYTMx
YjdmZDJhMTYxYmViY2MxYTRhOGJiOTY4ZS4uZjJkN2NmM2QxYTlmY2NhNjhhY2RlMGI2OGM5MjM3
YjkzYTNmNGE4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuaApAQCAtMzAsMjAgKzMwLDIwIEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTmljb3NpYUFuaW1hdGVkQmFja2luZ1N0
b3JlQ2xpZW50LmgiCisjaW5jbHVkZSAiTmljb3NpYUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIk5p
Y29zaWFCdWZmZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhUGxhdGZvcm1MYXllci5oIgotI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgTmljb3NpYSB7CitjbGFzcyBBbmltYXRpb25zOwogY2xh
c3MgUGFpbnRpbmdFbmdpbmU7CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjsKLWNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOwogCiBj
bGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgewogcHVibGljOgpAQCAtMjEwLDcg
KzIxMCw3IEBAIHByaXZhdGU6CiAKICAgICBUaW1lciBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsK
ICAgICBSdW5Mb29wOjpUaW1lcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+IG1fcmVxdWVzdFBl
bmRpbmdUaWxlQ3JlYXRpb25UaW1lcjsKLSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyBtX2Fu
aW1hdGlvbnM7CisgICAgTmljb3NpYTo6QW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CiAgICAgTW9u
b3RvbmljVGltZSBtX2xhc3RBbmltYXRpb25TdGFydFRpbWU7CiAKICAgICBzdHJ1Y3Qgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>