<?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>88668</bug_id>
          
          <creation_ts>2012-06-08 10:36:40 -0700</creation_ts>
          <short_desc>[chromium] Single thread proxy&apos;s animation timer should short circuit if the layer renderer has not been initialized</short_desc>
          <delta_ts>2012-06-08 19:26:56 -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>WebKit Misc.</component>
          <version>528+ (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>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>vollick</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>644793</commentid>
    <comment_count>0</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-06-08 10:36:40 -0700</bug_when>
    <thetext>It can currently happen that the single thread proxy&apos;s animation timer can fire before initialization starts. We should early out in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644812</commentid>
    <comment_count>1</comment_count>
      <attachid>146603</attachid>
    <who name="">vollick</who>
    <bug_when>2012-06-08 10:46:33 -0700</bug_when>
    <thetext>Created attachment 146603
Patch

This ended up being a 2 line change, but the testing required some more work.
Rather than adding yet more tests to CCLayerTreeHostTest that don&apos;t belong
there, I refactored the code required for running threaded tests into
CCThreadedTest.h/cpp, added a CCSingleThreadProxyTest.cpp and moved the proxy-
related tests into that file. This will allow us to more easily create new tests
that require simulating the threaded environment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644920</commentid>
    <comment_count>2</comment_count>
      <attachid>146623</attachid>
    <who name="">vollick</who>
    <bug_when>2012-06-08 12:06:42 -0700</bug_when>
    <thetext>Created attachment 146623
Patch

Sorry for the spam. Making clang happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644955</commentid>
    <comment_count>3</comment_count>
      <attachid>146623</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-08 12:51:32 -0700</bug_when>
    <thetext>Comment on attachment 146623
Patch

OMG Proxy tests yay!

R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645209</commentid>
    <comment_count>4</comment_count>
      <attachid>146623</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-08 19:26:53 -0700</bug_when>
    <thetext>Comment on attachment 146623
Patch

Clearing flags on attachment: 146623

Committed r119886: &lt;http://trac.webkit.org/changeset/119886&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645210</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-08 19:26:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146603</attachid>
            <date>2012-06-08 10:46:33 -0700</date>
            <delta_ts>2012-06-08 13:16:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88668-20120608134632.patch</filename>
            <type>text/plain</type>
            <size>72777</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWFkYjQzMTNiZjBiYWZh
NTY3MjA2ZmRhYWM4Y2ZmZjQzN2U5YjY3Ny4uZmNjMGQ3N2VmMThlNjYxNTRjNTljNzg2Y2E4NmEy
NTI2M2UxODdmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTA4ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2lu
Z2xlIHRocmVhZCBwcm94eSdzIGFuaW1hdGlvbiB0aW1lciBzaG91bGQgc2hvcnQgY2lyY3VpdCBp
ZiB0aGUgbGF5ZXIgcmVuZGVyZXIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODY2OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdDogQ0NTaW5nbGVU
aHJlYWRQcm94eVRlc3REaWRBZGRBbmltYXRpb25CZWZvcmVJbml0aWFsaXppbmdMYXllclJlbmRl
cmVyLnJ1blNpbmdsZVRocmVhZGVkCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmg6CisKIDIwMTItMDYtMDggIEJy
eWFuIE1jUXVhZGUgIDxibWNxdWFkZUBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IEFubm90YXRlIHRpbWVsaW5lIHJlY29yZHMgd2l0aCBhIGZyYW1lIGlkZW50aWZpZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMzRmYjZmZTNiNWI1NTg4ZmQ5ZDRkMTNhOWU4NzM5
YWQ3YzE0NGUwMi4uYWJmYTNkMTMwYzIzMDI4YTc5NDI1MzcxMzdkMTYxNDk4ZWQ2NjMzOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMzcgQEAKKzIwMTItMDYtMDggIElh
biBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
aW5nbGUgdGhyZWFkIHByb3h5J3MgYW5pbWF0aW9uIHRpbWVyIHNob3VsZCBzaG9ydCBjaXJjdWl0
IGlmIHRoZSBsYXllciByZW5kZXJlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjY4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAg
ICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdFdyaXRlTGF5ZXJzUmVkcmF3OjpiZWdpblRlc3QpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0V3JpdGVMYXllcnNBZnRlclZpc2libGU6OmNvbW1pdENv
bXBsZXRlT25DQ1RocmVhZCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpDQ0xheWVy
VHJlZUhvc3RUZXN0TGF5ZXJBZGRlZFdpdGhBbmltYXRpb246OkNDTGF5ZXJUcmVlSG9zdFRlc3RM
YXllckFkZGVkV2l0aEFuaW1hdGlvbik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RMYXllckFkZGVkV2l0aEFuaW1hdGlvbjo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdExheWVyQWRkZWRXaXRoQW5pbWF0aW9uOjpkaWRBZGRBbmltYXRpb24p
OgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0VGVzdExheWVyQWRkZWRXaXRoQW5pbWF0aW9uKToK
KyAgICAgICAgKiB0ZXN0cy9DQ1NpbmdsZVRocmVhZFByb3h5VGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNETWFrZUN1cnJlbnRGYWlscyk6CisgICAgICAg
IChGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RNYWtlQ3VycmVudEZhaWxzOjptYWtlQ29udGV4dEN1
cnJlbnQpOgorICAgICAgICAoQ0NTaW5nbGVUaHJlYWRQcm94eVRlc3RJbml0aWFsaXplTGF5ZXJS
ZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb24pOgorICAgICAgICAoQ0NTaW5nbGVUaHJlYWRQ
cm94eVRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb246OkND
U2luZ2xlVGhyZWFkUHJveHlUZXN0SW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRk
QW5pbWF0aW9uKToKKyAgICAgICAgKENDU2luZ2xlVGhyZWFkUHJveHlUZXN0SW5pdGlhbGl6ZUxh
eWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uOjpiZWdpblRlc3QpOgorICAgICAgICAo
Q0NTaW5nbGVUaHJlYWRQcm94eVRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJB
ZGRBbmltYXRpb246OmFuaW1hdGVMYXllcnMpOgorICAgICAgICAoQ0NTaW5nbGVUaHJlYWRQcm94
eVRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb246OmRpZFJl
Y3JlYXRlQ29udGV4dCk6CisgICAgICAgIChDQ1NpbmdsZVRocmVhZFByb3h5VGVzdEluaXRpYWxp
emVMYXllclJlbmRlcmVyRmFpbHNBZnRlckFkZEFuaW1hdGlvbjo6YWZ0ZXJUZXN0KToKKyAgICAg
ICAgKFRFU1RfRik6CisgICAgICAgIChDQ1NpbmdsZVRocmVhZFByb3h5VGVzdERpZEFkZEFuaW1h
dGlvbkJlZm9yZUluaXRpYWxpemluZ0xheWVyUmVuZGVyZXIpOgorICAgICAgICAoQ0NTaW5nbGVU
aHJlYWRQcm94eVRlc3REaWRBZGRBbmltYXRpb25CZWZvcmVJbml0aWFsaXppbmdMYXllclJlbmRl
cmVyOjpDQ1NpbmdsZVRocmVhZFByb3h5VGVzdERpZEFkZEFuaW1hdGlvbkJlZm9yZUluaXRpYWxp
emluZ0xheWVyUmVuZGVyZXIpOgorICAgICAgICAoQ0NTaW5nbGVUaHJlYWRQcm94eVRlc3REaWRB
ZGRBbmltYXRpb25CZWZvcmVJbml0aWFsaXppbmdMYXllclJlbmRlcmVyOjpiZWdpblRlc3QpOgor
ICAgICAgICAoQ0NTaW5nbGVUaHJlYWRQcm94eVRlc3REaWRBZGRBbmltYXRpb25CZWZvcmVJbml0
aWFsaXppbmdMYXllclJlbmRlcmVyOjphbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKENDU2luZ2xl
VGhyZWFkUHJveHlUZXN0RGlkQWRkQW5pbWF0aW9uQmVmb3JlSW5pdGlhbGl6aW5nTGF5ZXJSZW5k
ZXJlcjo6ZGlkUmVjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKENDU2luZ2xlVGhyZWFkUHJveHlU
ZXN0RGlkQWRkQW5pbWF0aW9uQmVmb3JlSW5pdGlhbGl6aW5nTGF5ZXJSZW5kZXJlcjo6ZGlkQWRk
QW5pbWF0aW9uKToKKyAgICAgICAgKENDU2luZ2xlVGhyZWFkUHJveHlUZXN0RGlkQWRkQW5pbWF0
aW9uQmVmb3JlSW5pdGlhbGl6aW5nTGF5ZXJSZW5kZXJlcjo6YWZ0ZXJUZXN0KToKKyAgICAgICAg
KiB0ZXN0cy9DQ1RocmVhZGVkVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHMp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0
M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNv
bXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpjcmVh
dGVUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDb21wb3NpdG9yRmFrZVdlYkdyYXBo
aWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0
dXJlVHJhY2tpbmc6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDb21wb3Np
dG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6bnVtVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250
ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjp0ZXh0dXJlKToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6
cmVzZXRUZXh0dXJlcyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q29tcG9zaXRvckZha2VXZWJH
cmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc6Om51bVVzZWRUZXh0dXJlcyk6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdp
dGhUZXh0dXJlVHJhY2tpbmc6OnVzZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpD
b21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6cmVz
ZXRVc2VkVGV4dHVyZXMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNvbXBvc2l0b3JGYWtlV2Vi
R3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpDb21wb3NpdG9yRmFrZVdlYkdy
YXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZyk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6VGVzdEhvb2tzOjpjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpNb2Nr
TGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9ja0xh
eWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9j
a0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpsb3dGcmVxdWVuY3lBbmltYXRp
b25JbnRlcnZhbCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9ja0xheWVyVHJlZUhvc3RJbXBs
OjpNb2NrTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoTW9ja0xheWVyVHJlZUhvc3QpOgor
ICAgICAgICAoV2ViS2l0VGVzdHM6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1w
bCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9ja0xheWVyVHJlZUhvc3Q6Ok1vY2tMYXllclRy
ZWVIb3N0KToKKyAgICAgICAgKE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6TW9ja0xheWVyVHJlZUhvc3RDbGll
bnQpOgorICAgICAgICAoVGltZW91dFRhc2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRpbWVv
dXRUYXNrOjpUaW1lb3V0VGFzayk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VGltZW91dFRhc2s6
OmNsZWFyVGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VGltZW91dFRhc2s6On5UaW1lb3V0
VGFzayk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VGltZW91dFRhc2s6OnJ1bik6CisgICAgICAg
IChCZWdpblRhc2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkJlZ2luVGFzazo6QmVnaW5UYXNr
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpCZWdpblRhc2s6On5CZWdpblRhc2spOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkJlZ2luVGFzazo6cnVuKToKKyAgICAgICAgKEVuZFRlc3RUYXNrKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpFbmRUZXN0VGFzazo6RW5kVGVzdFRhc2spOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkVuZFRlc3RUYXNrOjp+RW5kVGVzdFRhc2spOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OkVuZFRlc3RUYXNrOjpjbGVhclRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkVuZFRlc3RUYXNrOjpydW4pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0
OjpDQ1RocmVhZGVkVGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NUaHJlYWRlZFRlc3Q6
OmVuZFRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0OjplbmRUZXN0
QWZ0ZXJEZWxheSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NUaHJlYWRlZFRlc3Q6OnBvc3RT
ZXROZWVkc0FuaW1hdGVUb01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhy
ZWFkZWRUZXN0Ojpwb3N0QWRkQW5pbWF0aW9uVG9NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpDQ1RocmVhZGVkVGVzdDo6cG9zdEFkZEluc3RhbnRBbmltYXRpb25Ub01haW5UaHJl
YWQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0Ojpwb3N0U2V0TmVlZHND
b21taXRUb01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0
Ojpwb3N0QWNxdWlyZUxheWVyVGV4dHVyZXMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhy
ZWFkZWRUZXN0Ojpwb3N0U2V0TmVlZHNSZWRyYXdUb01haW5UaHJlYWQpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0Ojpwb3N0U2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0VG9N
YWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ1RocmVhZGVkVGVzdDo6cG9zdFNl
dFZpc2libGVUb01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRU
ZXN0Ojpwb3N0RGlkQWRkQW5pbWF0aW9uVG9NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpDQ1RocmVhZGVkVGVzdDo6ZG9CZWdpblRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkNDVGhyZWFkZWRUZXN0Ojp0aW1lb3V0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ1RocmVh
ZGVkVGVzdDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhy
ZWFkZWRUZXN0OjpvbkVuZFRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRU
ZXN0OjpkaXNwYXRjaFNldE5lZWRzQW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NU
aHJlYWRlZFRlc3Q6OmRpc3BhdGNoQWRkSW5zdGFudEFuaW1hdGlvbik6CisgICAgICAgIChXZWJL
aXRUZXN0czo6Q0NUaHJlYWRlZFRlc3Q6OmRpc3BhdGNoQWRkQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYktpdFRlc3RzOjpDQ1RocmVhZGVkVGVzdDo6ZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGVBbmRD
b21taXQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaFNl
dE5lZWRzQ29tbWl0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ1RocmVhZGVkVGVzdDo6ZGlz
cGF0Y2hBY3F1aXJlTGF5ZXJUZXh0dXJlcyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NUaHJl
YWRlZFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkNDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaFNldFZpc2libGUpOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkNDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaFNldEludmlzaWJsZSk6CisgICAgICAgIChXZWJL
aXRUZXN0czo6Q0NUaHJlYWRlZFRlc3Q6OmRpc3BhdGNoQ29tcG9zaXRlKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpDQ1RocmVhZGVkVGVzdDo6ZGlzcGF0Y2hEaWRBZGRBbmltYXRpb24pOgorICAg
ICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0OjpydW5UZXN0KToKKyAgICAgICAgKiB0
ZXN0cy9DQ1RocmVhZGVkVGVzdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdFRlc3RzKToKKyAgICAgICAgKFRlc3RIb29rcyk6
CisgICAgICAgIChXZWJLaXRUZXN0czo6VGVzdEhvb2tzOjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRlc3RIb29rczo6Y29tbWl0Q29tcGxldGVPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpUZXN0SG9va3M6OnByZXBhcmVUb0RyYXdPbkND
VGhyZWFkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpUZXN0SG9va3M6OmRyYXdMYXllcnNPbkND
VGhyZWFkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpUZXN0SG9va3M6OmFuaW1hdGVMYXllcnMp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRlc3RIb29rczo6d2lsbEFuaW1hdGVMYXllcnMpOgor
ICAgICAgICAoV2ViS2l0VGVzdHM6OlRlc3RIb29rczo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6VGVzdEhvb2tzOjp1cGRhdGVBbmltYXRpb25zKToKKyAgICAg
ICAgKFdlYktpdFRlc3RzOjpUZXN0SG9va3M6OmxheW91dCk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6VGVzdEhvb2tzOjpkaWRSZWNyZWF0ZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OlRlc3RIb29rczo6ZGlkQWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpUZXN0
SG9va3M6OmRpZENvbW1pdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VGVzdEhvb2tzOjpkaWRD
b21taXRBbmREcmF3RnJhbWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRlc3RIb29rczo6c2No
ZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRlc3RIb29rczo6bm90aWZ5
QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VGVzdEhvb2tzOjpub3Rp
ZnlBbmltYXRpb25GaW5pc2hlZCk6CisgICAgICAgIChDQ1RocmVhZGVkVGVzdCk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6Q0NUaHJlYWRlZFRlc3Q6OmNsZWFyVGltZW91dCk6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6Q0NUaHJlYWRlZFRlc3Q6OmNsZWFyRW5kVGVzdFRhc2spOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0OjpsYXllclRyZWVIb3N0KToKKyAgICAgICAgKEND
VGhyZWFkZWRUZXN0VGhyZWFkT25seSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NUaHJlYWRl
ZFRlc3RUaHJlYWRPbmx5OjpydW5UZXN0VGhyZWFkZWQpOgorICAgICAgICAoTW9ja0xheWVyVHJl
ZUhvc3RJbXBsKToKKyAgICAgICAgKENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RX
aXRoVGV4dHVyZVRyYWNraW5nKToKKwogMjAxMi0wNi0wOCAgVGFpanUgVHN1aWtpICA8dHppa0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIEZpbGVTeXN0ZW0gaXRlbSB0byBzdG9yYWdlIHRy
ZWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IGE2MmNkNmIz
Yjc3NWNjNjg4ZGQ4NzViZjk2NjQ2MTEyYzQ0YTNhY2YuLjhmMzA1MmQ5MzE2YzQ3YTg4Y2ViMWUw
Yjk2ZjNjMDE4MTk0N2ZhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwCkBAIC00NCw3ICs0NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBvblRpbWVy
RmlyZWQoKSBPVkVSUklERQogICAgIHsKLSAgICAgICAgbV9wcm94eS0+Y29tcG9zaXRlSW1tZWRp
YXRlbHkoKTsKKyAgICAgICAgaWYgKG1fcHJveHktPm1fbGF5ZXJSZW5kZXJlckluaXRpYWxpemVk
KQorICAgICAgICAgICAgbV9wcm94eS0+Y29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKICAgICB9CiAK
IHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKaW5kZXggNjQ1YThh
OWE0YWQxMTc0YzM2ZTFlZDIwNzE5ZWQxN2ViM2U4ZjdlZi4uZDMyNTNlMjVjN2YyOGYwY2FjOTRl
OTQ2OThkYWE2NmE5MDk2OTFiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
aApAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGRvdWJsZSBhbmltYXRpb25U
aW1lckRlbGF5KCk7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENDU2luZ2xlVGhyZWFk
UHJveHlBbmltYXRpb25UaW1lcjsKKwogICAgIGV4cGxpY2l0IENDU2luZ2xlVGhyZWFkUHJveHko
Q0NMYXllclRyZWVIb3N0Kik7CiAKICAgICBib29sIGNvbW1pdEFuZENvbXBvc2l0ZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZjIzMTU0YWU0MDQ1N2I3ZTgwNzk5NzM4NzMx
OTRiY2EyMGE2N2I3MS4uYzE4NzI4YjAwOTMwYWFiMGEyMzRlMTIzODVmYjE2NTdlNGQwZTE0YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC04NiwxMSArODYsMTQgQEAKICAgICAg
ICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NTY2hlZHVsZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NTaW5nbGVUaHJlYWRQ
cm94eVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NvbGlkQ29sb3JMYXllckltcGxU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ1RocmVhZFRhc2tUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRlZFRl
c3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZGVkVGVzdC5oJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ1RpbWVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NsaXBib2Fy
ZENocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NvbXBvc2l0b3JGYWtlR3Jh
cGhpY3NDb250ZXh0M0QuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBhYTI3ZTg4ZjdkYzNlZDgwODAyMTA2NDlj
Y2QwYmUzMDAyN2NmMGJmLi5hOWVjOTFjZTcxMWZhY2E5MmIxMDkzMzBkMmIzNTM2MDE5MjIzMGRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKQEAgLTI3LDM4ICsyNywxOSBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdC5oIgogCiAjaW5jbHVkZSAiQW5pbWF0aW9uSWRWZW5kb3IuaCIKLSNpbmNsdWRlICJDQ0Fu
aW1hdGlvblRlc3RDb21tb24uaCIKICNpbmNsdWRlICJDQ09jY2x1c2lvblRyYWNrZXJUZXN0Q29t
bW9uLmgiCi0jaW5jbHVkZSAiQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgIkNv
bXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJDQ1RocmVhZGVk
VGVzdC5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiRmFr
ZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgiCi0jaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYW5h
Z2VyLmgiCi0jaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgotI2luY2x1ZGUgIldlYktpdC5oIgot
I2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdh
dGUuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaCIKLSNpbmNsdWRlICJjYy9DQ1Njb3BlZFRocmVhZFByb3h5LmgiCi0jaW5j
bHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVw
ZGF0ZXIuaCIKLSNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJjYy9DQ1Rp
bWluZ0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVGhyZWFkLmgiCiAjaW5jbHVk
ZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHB1
YmxpYy9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaD4K
LSNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9M
b2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKQEAgLTczLDcxNCArNTQs
OCBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgewogCi1jbGFzcyBDb21wb3Np
dG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZyA6IHB1YmxpYyBD
b21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVU
cmFja2luZz4gY3JlYXRlKEF0dHJpYnV0ZXMgYXR0cnMpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVy
ZVRyYWNraW5nKGF0dHJzKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVRl
eHR1cmUoKQotICAgIHsKLSAgICAgICAgV2ViR0xJZCB0ZXh0dXJlID0gbV90ZXh0dXJlcy5zaXpl
KCkgKyAxOwotICAgICAgICBtX3RleHR1cmVzLmFwcGVuZCh0ZXh0dXJlKTsKLSAgICAgICAgcmV0
dXJuIHRleHR1cmU7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUoV2Vi
R0xJZCB0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Rl
eHR1cmVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlc1tpXSA9PSB0
ZXh0dXJlKSB7Ci0gICAgICAgICAgICAgICAgbV90ZXh0dXJlcy5yZW1vdmUoaSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYmluZFRleHR1cmUoV0dDM0RlbnVtIC8qIHRhcmdldCAqLywgV2ViR0xJZCB0
ZXh0dXJlKQotICAgIHsKLSAgICAgICAgbV91c2VkVGV4dHVyZXMuYWRkKHRleHR1cmUpOwotICAg
IH0KLQotICAgIGludCBudW1UZXh0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4obV90ZXh0dXJlcy5zaXplKCkpOyB9Ci0gICAgaW50IHRleHR1cmUoaW50IGkpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dHVyZXNbaV07IH0KLSAgICB2b2lkIHJlc2V0VGV4dHVyZXMoKSB7IG1fdGV4
dHVyZXMuY2xlYXIoKTsgfQotCi0gICAgaW50IG51bVVzZWRUZXh0dXJlcygpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4obV91c2VkVGV4dHVyZXMuc2l6ZSgpKTsgfQotICAgIGJvb2wg
dXNlZFRleHR1cmUoaW50IHRleHR1cmUpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFRleHR1cmVzLmZp
bmQodGV4dHVyZSkgIT0gbV91c2VkVGV4dHVyZXMuZW5kKCk7IH0KLSAgICB2b2lkIHJlc2V0VXNl
ZFRleHR1cmVzKCkgeyBtX3VzZWRUZXh0dXJlcy5jbGVhcigpOyB9Ci0KLXByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJh
Y2tpbmcoQXR0cmlidXRlcyBhdHRycykgOiBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4
dDNEKGF0dHJzKQotICAgIHsKLSAgICB9Ci0KLSAgICBWZWN0b3I8V2ViR0xJZD4gbV90ZXh0dXJl
czsKLSAgICBIYXNoU2V0PFdlYkdMSWQsIERlZmF1bHRIYXNoPFdlYkdMSWQ+OjpIYXNoLCBVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxXZWJHTElkPiA+IG1fdXNlZFRleHR1cmVzOwotfTsK
LQotLy8gVXNlZCBieSB0ZXN0IHN0dWJzIHRvIG5vdGlmeSB0aGUgdGVzdCB3aGVuIHNvbWV0aGlu
ZyBpbnRlcmVzdGluZyBoYXBwZW5zLgotY2xhc3MgVGVzdEhvb2tzIDogcHVibGljIENDTGF5ZXJB
bmltYXRpb25EZWxlZ2F0ZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0
T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNv
bW1pdENvbXBsZXRlT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHByZXBhcmVUb0RyYXdPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0
SW1wbCopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9z
dEltcGwqLCBkb3VibGUgbW9ub3RvbmljVGltZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxB
bmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGwqLCBkb3VibGUgbW9ub3RvbmljVGltZSkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYs
IGZsb2F0KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgbW9u
b3RvbmljVGltZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNyZWF0ZUNvbnRleHQoYm9vbCBzdWNjZWVkZWQpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21taXQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJh
d0ZyYW1lKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgeyB9Ci0K
LSAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUKLSAgICB2
aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgdGltZSkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGRvdWJsZSB0aW1lKSB7IH0KLQot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlQ29udGV4dCgp
Ci0gICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKLSAg
ICAgICAgV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgd2ViQXR0cnM7Ci0gICAgICAg
IHdlYkF0dHJzLmFscGhhID0gYXR0cnMuYWxwaGE7Ci0KLSAgICAgICAgT3duUHRyPFdlYkdyYXBo
aWNzQ29udGV4dDNEPiB3ZWJDb250ZXh0ID0gQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRl
eHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc6OmNyZWF0ZSh3ZWJBdHRycyk7Ci0gICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJD
b250ZXh0KHdlYkNvbnRleHQucmVsZWFzZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGly
ZWN0bHlUb0hvc3RXaW5kb3cpOwotICAgIH0KLX07Ci0KLS8vIEFkYXB0cyBDQ0xheWVyVHJlZUhv
c3RJbXBsIGZvciB0ZXN0LiBSdW5zIHJlYWwgY29kZSwgdGhlbiBpbnZva2VzIHRlc3QgaG9va3Mu
Ci1jbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdEltcGwgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1w
bCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyVHJlZUhvc3RJbXBs
PiBjcmVhdGUoVGVzdEhvb2tzKiB0ZXN0SG9va3MsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdz
LCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVIb3N0SW1wbCh0ZXN0SG9va3MsIHNldHRpbmdz
LCBjbGllbnQpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKQotICAg
IHsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5Db21taXQoKTsKLSAgICAgICAg
bV90ZXN0SG9va3MtPmJlZ2luQ29tbWl0T25DQ1RocmVhZCh0aGlzKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKQotICAgIHsKLSAgICAgICAgQ0NMYXllclRyZWVI
b3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKTsKLSAgICAgICAgbV90ZXN0SG9va3MtPmNvbW1pdENv
bXBsZXRlT25DQ1RocmVhZCh0aGlzKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcHJlcGFy
ZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQotICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KGZyYW1lKTsKLSAgICAgICAgbV90ZXN0
SG9va3MtPnByZXBhcmVUb0RyYXdPbkNDVGhyZWFkKHRoaXMpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IEZyYW1lRGF0
YSYgZnJhbWUpCi0gICAgewotICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
KGZyYW1lKTsKLSAgICAgICAgbV90ZXN0SG9va3MtPmRyYXdMYXllcnNPbkNDVGhyZWFkKHRoaXMp
OwotICAgIH0KLQotICAgIC8vIE1ha2UgdGhlc2UgcHVibGljLgotICAgIHR5cGVkZWYgVmVjdG9y
PENDTGF5ZXJJbXBsKj4gQ0NMYXllckxpc3Q7Ci0gICAgdXNpbmcgQ0NMYXllclRyZWVIb3N0SW1w
bDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLQotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2Fs
bENsb2NrVGltZSkKLSAgICB7Ci0gICAgICAgIG1fdGVzdEhvb2tzLT53aWxsQW5pbWF0ZUxheWVy
cyh0aGlzLCBtb25vdG9uaWNUaW1lKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5p
bWF0ZUxheWVycyhtb25vdG9uaWNUaW1lLCB3YWxsQ2xvY2tUaW1lKTsKLSAgICAgICAgbV90ZXN0
SG9va3MtPmFuaW1hdGVMYXllcnModGhpcywgbW9ub3RvbmljVGltZSk7Ci0gICAgfQotCi0gICAg
dmlydHVhbCBkb3VibGUgbG93RnJlcXVlbmN5QW5pbWF0aW9uSW50ZXJ2YWwoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIDEuMCAvIDYwOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNb2Nr
TGF5ZXJUcmVlSG9zdEltcGwoVGVzdEhvb2tzKiB0ZXN0SG9va3MsIGNvbnN0IENDU2V0dGluZ3Mm
IHNldHRpbmdzLCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCi0gICAgICAgIDog
Q0NMYXllclRyZWVIb3N0SW1wbChzZXR0aW5ncywgY2xpZW50KQotICAgICAgICAsIG1fdGVzdEhv
b2tzKHRlc3RIb29rcykKLSAgICB7Ci0gICAgfQotCi0gICAgVGVzdEhvb2tzKiBtX3Rlc3RIb29r
czsKLX07Ci0KLS8vIEFkYXB0cyBDQ0xheWVyVHJlZUhvc3QgZm9yIHRlc3QuIEluamVjdHMgTW9j
a0xheWVyVHJlZUhvc3RJbXBsLgotY2xhc3MgTW9ja0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0NM
YXllclRyZWVIb3N0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJU
cmVlSG9zdD4gY3JlYXRlKFRlc3RIb29rcyogdGVzdEhvb2tzLCBDQ0xheWVyVHJlZUhvc3RDbGll
bnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXIsIGNvbnN0IEND
U2V0dGluZ3MmIHNldHRpbmdzKQotICAgIHsKLSAgICAgICAgLy8gRm9yIHRoZXNlIHRlc3RzLCB3
ZSB3aWxsIGVuYWJsZSB0aHJlYWRlZCBhbmltYXRpb25zLgotICAgICAgICBDQ1NldHRpbmdzIHNl
dHRpbmdzQ29weSA9IHNldHRpbmdzOwotICAgICAgICBzZXR0aW5nc0NvcHkudGhyZWFkZWRBbmlt
YXRpb25FbmFibGVkID0gdHJ1ZTsKLQotICAgICAgICBPd25QdHI8TW9ja0xheWVyVHJlZUhvc3Q+
IGxheWVyVHJlZUhvc3QoYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVIb3N0KHRlc3RIb29rcywg
Y2xpZW50LCBzZXR0aW5nc0NvcHkpKSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGxheWVyVHJl
ZUhvc3QtPmluaXRpYWxpemUoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7Ci0gICAg
ICAgIGxheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290TGF5ZXIpOwotCi0gICAgICAgIC8v
IExheWVyVHJlZUhvc3RJbXBsIHdvbid0IGRyYXcgaWYgaXQgaGFzIDF4MSB2aWV3cG9ydC4KLSAg
ICAgICAgbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMSwgMSkpOwotCi0g
ICAgICAgIGxheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5zZXRMYXllckFuaW1hdGlvbkRlbGVn
YXRlKHRlc3RIb29rcyk7Ci0KLSAgICAgICAgcmV0dXJuIGxheWVyVHJlZUhvc3QucmVsZWFzZSgp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBj
cmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQp
Ci0gICAgewotICAgICAgICAvLyBGb3IgdGhlc2UgdGVzdHMsIHdlIHdpbGwgZW5hYmxlIHRocmVh
ZGVkIGFuaW1hdGlvbnMuCi0gICAgICAgIENDU2V0dGluZ3MgY29weVNldHRpbmdzID0gc2V0dGlu
Z3MoKTsKLSAgICAgICAgY29weVNldHRpbmdzLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCA9IHRy
dWU7Ci0gICAgICAgIHJldHVybiBNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShtX3Rlc3RI
b29rcywgY29weVNldHRpbmdzLCBjbGllbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBk
aWRBZGRBbmltYXRpb24oKSBPVkVSUklERQotICAgIHsKLSAgICAgICAgbV9kaWRBZGRBbmltYXRp
b25XYXNDYWxsZWQgPSB0cnVlOwotICAgICAgICBDQ0xheWVyVHJlZUhvc3Q6OmRpZEFkZEFuaW1h
dGlvbigpOwotICAgIH0KLQotICAgIGJvb2wgZGlkQWRkQW5pbWF0aW9uV2FzQ2FsbGVkKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2RpZEFkZEFuaW1hdGlvbldhc0NhbGxlZDsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgTW9ja0xheWVyVHJlZUhvc3QoVGVzdEhvb2tzKiB0ZXN0SG9va3MsIEND
TGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykK
LSAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xpZW50LCBzZXR0aW5ncykKLSAgICAgICAgLCBt
X3Rlc3RIb29rcyh0ZXN0SG9va3MpCi0gICAgICAgICwgbV9kaWRBZGRBbmltYXRpb25XYXNDYWxs
ZWQoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIFRlc3RIb29rcyogbV90ZXN0SG9va3M7Ci0g
ICAgYm9vbCBtX2RpZEFkZEFuaW1hdGlvbldhc0NhbGxlZDsKLX07Ci0KLS8vIEltcGxlbWVudGF0
aW9uIG9mIENDTGF5ZXJUcmVlSG9zdCBjYWxsYmFjayBpbnRlcmZhY2UuCi1jbGFzcyBNb2NrTGF5
ZXJUcmVlSG9zdENsaWVudCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tMYXllclRyZWVIb3N0Q2xpZW50PiBjcmVhdGUo
VGVzdEhvb2tzKiB0ZXN0SG9va3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KHRlc3RIb29rcykpOwotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCB3aWxsQmVnaW5GcmFtZSgpIE9WRVJSSURFCi0gICAgewotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCBkaWRCZWdpbkZyYW1lKCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1RpbWUpIE9WRVJS
SURFCi0gICAgewotICAgICAgICBtX3Rlc3RIb29rcy0+dXBkYXRlQW5pbWF0aW9ucyhtb25vdG9u
aWNUaW1lKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgT1ZFUlJJREUKLSAg
ICB7Ci0gICAgICAgIG1fdGVzdEhvb2tzLT5sYXlvdXQoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxv
YXQgc2NhbGUpIE9WRVJSSURFCi0gICAgewotICAgICAgICBtX3Rlc3RIb29rcy0+YXBwbHlTY3Jv
bGxBbmRTY2FsZShzY3JvbGxEZWx0YSwgc2NhbGUpOwotICAgIH0KLQotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlQ29udGV4dDNEKCkgT1ZFUlJJREUKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3Rlc3RIb29rcy0+Y3JlYXRlQ29udGV4dCgpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB3aWxsQ29tbWl0KCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdCgpIE9WRVJSSURFCi0gICAgewotICAgICAgICBt
X3Rlc3RIb29rcy0+ZGlkQ29tbWl0KCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZENv
bW1pdEFuZERyYXdGcmFtZSgpIE9WRVJSSURFCi0gICAgewotICAgICAgICBtX3Rlc3RIb29rcy0+
ZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZENv
bXBsZXRlU3dhcEJ1ZmZlcnMoKSBPVkVSUklERQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjcmVhdGVDb250ZXh0KGJvb2wgc3VjY2VlZGVkKSBPVkVSUklERQotICAgIHsK
LSAgICAgICAgbV90ZXN0SG9va3MtPmRpZFJlY3JlYXRlQ29udGV4dChzdWNjZWVkZWQpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIE9WRVJSSURFCi0gICAg
ewotICAgICAgICBtX3Rlc3RIb29rcy0+c2NoZWR1bGVDb21wb3NpdGUoKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgZXhwbGljaXQgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQoVGVzdEhvb2tzKiB0
ZXN0SG9va3MpIDogbV90ZXN0SG9va3ModGVzdEhvb2tzKSB7IH0KLQotICAgIFRlc3RIb29rcyog
bV90ZXN0SG9va3M7Ci19OwotCi0vLyBUaGUgQ0NMYXllclRyZWVIb3N0VGVzdCBydW5zIHdpdGgg
dGhlIG1haW4gbG9vcCBydW5uaW5nLiBJdCBpbnN0YW50aWF0ZXMgYSBzaW5nbGUgTW9ja0xheWVy
VHJlZUhvc3QgYW5kIGFzc29jaWF0ZWQKLS8vIE1vY2tMYXllclRyZWVIb3N0SW1wbC9Nb2NrTGF5
ZXJUcmVlSG9zdENsaWVudC4KLS8vCi0vLyBiZWdpblRlc3QoKSBpcyBjYWxsZWQgb25jZSB0aGUg
bWFpbiBtZXNzYWdlIGxvb3AgaXMgcnVubmluZyBhbmQgdGhlIGxheWVyIHRyZWUgaG9zdCBpcyBp
bml0aWFsaXplZC4KLS8vCi0vLyBLZXkgc3RhZ2VzIG9mIHRoZSBkcmF3aW5nIGxvb3AsIGUuZy4g
ZHJhd2luZyBvciBjb21taXRpbmcsIHJlZGlyZWN0IHRvIENDTGF5ZXJUcmVlSG9zdFRlc3QgbWV0
aG9kcyBvZiBzaW1pbGFyIG5hbWVzLgotLy8gVG8gdHJhY2sgdGhlIGNvbW1pdCBwcm9jZXNzLCBv
dmVycmlkZSB0aGVzZSBmdW5jdGlvbnMuCi0vLwotLy8gVGhlIHRlc3QgY29udGludWVzIHVudGls
IHNvbWVvbmUgY2FsbHMgZW5kVGVzdC4gZW5kVGVzdCBjYW4gYmUgY2FsbGVkIG9uIGFueSB0aHJl
YWQsIGJ1dCBiZSBhd2FyZSB0aGF0Ci0vLyBlbmRpbmcgdGhlIHRlc3QgaXMgYW4gYXN5bmNocm9u
b3VzIHByb2Nlc3MuCi1jbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0IDogcHVibGljIHRlc3Rpbmc6
OlRlc3QsIFRlc3RIb29rcyB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkgPSAwOwotCi0gICAgdm9pZCBlbmRU
ZXN0KCk7Ci0gICAgdm9pZCBlbmRUZXN0QWZ0ZXJEZWxheShpbnQgZGVsYXlNaWxsaXNlY29uZHMp
OwotCi0gICAgdm9pZCBwb3N0U2V0TmVlZHNBbmltYXRlVG9NYWluVGhyZWFkKCkKLSAgICB7Ci0g
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXRO
ZWVkc0FuaW1hdGUsIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgcG9zdEFkZEFuaW1hdGlvblRv
TWFpblRocmVhZCgpCi0gICAgewotICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVl
SG9zdFRlc3Q6OmRpc3BhdGNoQWRkQW5pbWF0aW9uLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHBvc3RBZGRJbnN0YW50QW5pbWF0aW9uVG9NYWluVGhyZWFkKCkKLSAgICB7Ci0gICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hBZGRJbnN0YW50QW5p
bWF0aW9uLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHBvc3RTZXROZWVkc0NvbW1pdFRvTWFp
blRocmVhZCgpCi0gICAgewotICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9z
dFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNDb21taXQsIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQg
QWNxdWlyZUxheWVyVGV4dHVyZXMoKQotICAgIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChD
Q0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaEFjcXVpcmVMYXllclRleHR1cmVzLCB0aGlzKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHBvc3RTZXROZWVkc1JlZHJhd1RvTWFpblRocmVhZCgpCi0gICAg
ewotICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNo
U2V0TmVlZHNSZWRyYXcsIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgcG9zdFNldE5lZWRzQW5p
bWF0ZUFuZENvbW1pdFRvTWFpblRocmVhZCgpCi0gICAgewotICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0
LCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHBvc3RTZXRWaXNpYmxlVG9NYWluVGhyZWFkKGJv
b2wgdmlzaWJsZSkKLSAgICB7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQodmlzaWJsZSA/IEND
TGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoU2V0VmlzaWJsZSA6IENDTGF5ZXJUcmVlSG9zdFRl
c3Q6OmRpc3BhdGNoU2V0SW52aXNpYmxlLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRpbWVv
dXQoKQotICAgIHsKLSAgICAgICAgbV90aW1lZE91dCA9IHRydWU7Ci0gICAgICAgIGVuZFRlc3Qo
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyVGltZW91dCgpCi0gICAgewotICAgICAgICBtX3Rp
bWVvdXRUYXNrID0gMDsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyRW5kVGVzdFRhc2soKQotICAg
IHsKLSAgICAgICAgbV9lbmRUZXN0VGFzayA9IDA7Ci0gICAgfQotCi0gICAgQ0NMYXllclRyZWVI
b3N0KiBsYXllclRyZWVIb3N0KCkgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0LmdldCgpOyB9Ci0K
LQotcHJvdGVjdGVkOgotICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QoKQotICAgICAgICA6IG1fYmVn
aW5uaW5nKGZhbHNlKQotICAgICAgICAsIG1fZW5kV2hlbkJlZ2luUmV0dXJucyhmYWxzZSkKLSAg
ICAgICAgLCBtX3RpbWVkT3V0KGZhbHNlKQotICAgICAgICAsIG1fZmluaXNoZWQoZmFsc2UpCi0g
ICAgICAgICwgbV9zY2hlZHVsZWQoZmFsc2UpCi0gICAgICAgICwgbV9zdGFydGVkKGZhbHNlKQot
ICAgICAgICAsIG1fZW5kVGVzdFRhc2soMCkKLSAgICB7IH0KLQotICAgIHZvaWQgZG9CZWdpblRl
c3QoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpCi0gICAgewotICAg
ICAgICBpZiAoIW1fc3RhcnRlZCB8fCBtX3NjaGVkdWxlZCB8fCBtX2ZpbmlzaGVkKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBtX3NjaGVkdWxlZCA9IHRydWU7Ci0gICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoJkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoQ29tcG9zaXRlLCB0aGlz
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBvbkVuZFRlc3Qodm9pZCogc2VsZikKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgICAgIFdlYktpdDo6UGxhdGZv
cm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5leGl0UnVuTG9vcCgpOwotICAgIH0KLQot
ICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2V0TmVlZHNBbmltYXRlKHZvaWQqIHNlbGYpCi0gICAg
ewotICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7
Ci0gICAgICAgIEFTU0VSVCh0ZXN0KTsKLSAgICAgICAgaWYgKHRlc3QtPm1fZmluaXNoZWQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9zdCkK
LSAgICAgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNBbmltYXRlKCk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hBZGRJbnN0YW50QW5pbWF0aW9uKHZvaWQq
IHNlbGYpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgICAg
IENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RU
ZXN0Kj4oc2VsZik7Ci0gICAgICAgIEFTU0VSVCh0ZXN0KTsKLSAgICAgICAgaWYgKHRlc3QtPm1f
ZmluaXNoZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRlc3QtPm1fbGF5
ZXJUcmVlSG9zdCAmJiB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpKQotICAgICAg
ICAgICAgYWRkT3BhY2l0eVRyYW5zaXRpb25Ub0xheWVyKCp0ZXN0LT5tX2xheWVyVHJlZUhvc3Qt
PnJvb3RMYXllcigpLCAwLCAwLCAwLjUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9p
ZCBkaXNwYXRjaEFkZEFuaW1hdGlvbih2b2lkKiBzZWxmKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLQotICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0g
c3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOwotICAgICAgICBBU1NFUlQo
dGVzdCk7Ci0gICAgICAgIGlmICh0ZXN0LT5tX2ZpbmlzaGVkKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmICh0ZXN0LT5tX2xheWVyVHJlZUhvc3QgJiYgdGVzdC0+bV9sYXllclRy
ZWVIb3N0LT5yb290TGF5ZXIoKSkKLSAgICAgICAgICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9M
YXllcigqdGVzdC0+bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSwgMTAsIDAsIDAuNSwgdHJ1
ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGVBbmRD
b21taXQodm9pZCogc2VsZikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENDTGF5
ZXJUcmVlSG9zdFRlc3QqPihzZWxmKTsKLSAgICAgICAgQVNTRVJUKHRlc3QpOwotICAgICAgICBp
ZiAodGVzdC0+bV9maW5pc2hlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAo
dGVzdC0+bV9sYXllclRyZWVIb3N0KSB7Ci0gICAgICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhv
c3QtPnNldE5lZWRzQW5pbWF0ZSgpOwotICAgICAgICAgICAgdGVzdC0+bV9sYXllclRyZWVIb3N0
LT5zZXROZWVkc0NvbW1pdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQg
ZGlzcGF0Y2hTZXROZWVkc0NvbW1pdCh2b2lkKiBzZWxmKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLQotICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0g
c3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOwotICAgICAgICBBU1NFUlRf
VFJVRSh0ZXN0KTsKLSAgICAgICAgaWYgKHRlc3QtPm1fZmluaXNoZWQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgICAg
IHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21taXQoKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgdm9pZCBkaXNwYXRjaEFjcXVpcmVMYXllclRleHR1cmVzKHZvaWQqIHNlbGYpCi0gICAg
ewotICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7
Ci0gICAgICAgIEFTU0VSVF9UUlVFKHRlc3QpOwotICAgICAgICBpZiAodGVzdC0+bV9maW5pc2hl
ZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAodGVzdC0+bV9sYXllclRyZWVI
b3N0KQotICAgICAgICAgICAgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5hY3F1aXJlTGF5ZXJUZXh0
dXJlcygpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2V0TmVlZHNSZWRyYXco
dm9pZCogc2VsZikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENDTGF5ZXJUcmVl
SG9zdFRlc3QqPihzZWxmKTsKLSAgICAgICAgQVNTRVJUX1RSVUUodGVzdCk7Ci0gICAgICAgIGlm
ICh0ZXN0LT5tX2ZpbmlzaGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0
ZXN0LT5tX2xheWVyVHJlZUhvc3QpCi0gICAgICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3Qt
PnNldE5lZWRzUmVkcmF3KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTZXRW
aXNpYmxlKHZvaWQqIHNlbGYpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xh
eWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7Ci0gICAgICAgIEFTU0VSVCh0ZXN0KTsKLSAgICAgICAg
aWYgKHRlc3QtPm1fZmluaXNoZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KHRlc3QtPm1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9z
dC0+c2V0VmlzaWJsZSh0cnVlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNl
dEludmlzaWJsZSh2b2lkKiBzZWxmKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLQotICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8
Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOwotICAgICAgICBBU1NFUlQodGVzdCk7Ci0gICAg
ICAgIGlmICh0ZXN0LT5tX2ZpbmlzaGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGlmICh0ZXN0LT5tX2xheWVyVHJlZUhvc3QpCi0gICAgICAgICAgICB0ZXN0LT5tX2xheWVyVHJl
ZUhvc3QtPnNldFZpc2libGUoZmFsc2UpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRpc3Bh
dGNoQ29tcG9zaXRlKHZvaWQqIHNlbGYpCi0gICAgewotICAgICAgICBDQ0xheWVyVHJlZUhvc3RU
ZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOwotICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgICAgICBBU1NFUlQodGVzdCk7Ci0gICAg
ICAgIHRlc3QtPm1fc2NoZWR1bGVkID0gZmFsc2U7Ci0gICAgICAgIGlmICh0ZXN0LT5tX2xheWVy
VHJlZUhvc3QgJiYgIXRlc3QtPm1fZmluaXNoZWQpCi0gICAgICAgICAgICB0ZXN0LT5tX2xheWVy
VHJlZUhvc3QtPmNvbXBvc2l0ZSgpOwotICAgIH0KLQotICAgIGNsYXNzIFRpbWVvdXRUYXNrIDog
cHVibGljIFdlYlRocmVhZDo6VGFzayB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBU
aW1lb3V0VGFzayhDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KQotICAgICAgICAgICAgOiBtX3Rl
c3QodGVzdCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjbGVhclRlc3Qo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3Rlc3QgPSAwOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdmlydHVhbCB+VGltZW91dFRhc2soKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV90
ZXN0KQotICAgICAgICAgICAgICAgIG1fdGVzdC0+Y2xlYXJUaW1lb3V0KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KG1fdGVzdCkKLSAgICAgICAgICAgICAgICBtX3Rlc3QtPnRpbWVvdXQoKTsKLSAgICAgICAgfQot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OwotICAg
IH07Ci0KLSAgICBjbGFzcyBCZWdpblRhc2sgOiBwdWJsaWMgV2ViVGhyZWFkOjpUYXNrIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IEJlZ2luVGFzayhDQ0xheWVyVHJlZUhvc3RUZXN0
KiB0ZXN0KQotICAgICAgICAgICAgOiBtX3Rlc3QodGVzdCkKLSAgICAgICAgewotICAgICAgICB9
Ci0KLSAgICAgICAgdmlydHVhbCB+QmVnaW5UYXNrKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBydW4oKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3Rlc3QtPmRvQmVnaW5UZXN0KCk7Ci0g
ICAgICAgIH0KLSAgICBwcml2YXRlOgotICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rl
c3Q7Ci0gICAgfTsKLQotICAgIGNsYXNzIEVuZFRlc3RUYXNrIDogcHVibGljIFdlYlRocmVhZDo6
VGFzayB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBFbmRUZXN0VGFzayhDQ0xheWVy
VHJlZUhvc3RUZXN0KiB0ZXN0KQotICAgICAgICAgICAgOiBtX3Rlc3QodGVzdCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB+RW5kVGVzdFRhc2soKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobV90ZXN0KQotICAgICAgICAgICAgICAgIG1fdGVzdC0+Y2xlYXJF
bmRUZXN0VGFzaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjbGVhclRlc3QoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX3Rlc3QgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIHJ1bigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3Rlc3QpCi0gICAg
ICAgICAgICAgICAgbV90ZXN0LT5lbmRUZXN0KCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKLSAgICB9OwotCi0gICAgdmly
dHVhbCB2b2lkIHJ1blRlc3QoYm9vbCB0aHJlYWRlZCkKLSAgICB7Ci0gICAgICAgIGlmICh0aHJl
YWRlZCkgewotICAgICAgICAgICAgbV93ZWJUaHJlYWQgPSBhZG9wdFB0cihXZWJLaXQ6OlBsYXRm
b3JtOjpjdXJyZW50KCktPmNyZWF0ZVRocmVhZCgiQ0NMYXllclRyZWVIb3N0VGVzdCIpKTsKLSAg
ICAgICAgICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUobV93ZWJUaHJlYWQuZ2V0KCkpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7
Ci0KLSAgICAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgbV9t
YWluVGhyZWFkUHJveHkgPSBDQ1Njb3BlZFRocmVhZFByb3h5OjpjcmVhdGUoQ0NQcm94eTo6bWFp
blRocmVhZCgpKTsKLQotICAgICAgICBtX2JlZ2luVGFzayA9IG5ldyBCZWdpblRhc2sodGhpcyk7
Ci0gICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5w
b3N0RGVsYXllZFRhc2sobV9iZWdpblRhc2ssIDApOyAvLyBwb3N0RGVsYXllZFRhc2sgdGFrZXMg
b3duZXJzaGlwIG9mIHRoZSB0YXNrCi0gICAgICAgIG1fdGltZW91dFRhc2sgPSBuZXcgVGltZW91
dFRhc2sodGhpcyk7Ci0gICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVu
dFRocmVhZCgpLT5wb3N0RGVsYXllZFRhc2sobV90aW1lb3V0VGFzaywgNTAwMCk7Ci0gICAgICAg
IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5lbnRlclJ1bkxv
b3AoKTsKLQotICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0ICYmIG1fbGF5ZXJUcmVlSG9zdC0+
cm9vdExheWVyKCkpCi0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5z
ZXRMYXllclRyZWVIb3N0KDApOwotICAgICAgICBtX2xheWVyVHJlZUhvc3QuY2xlYXIoKTsKLQot
ICAgICAgICBpZiAobV90aW1lb3V0VGFzaykKLSAgICAgICAgICAgIG1fdGltZW91dFRhc2stPmNs
ZWFyVGVzdCgpOwotCi0gICAgICAgIGlmIChtX2VuZFRlc3RUYXNrKQotICAgICAgICAgICAgbV9l
bmRUZXN0VGFzay0+Y2xlYXJUZXN0KCk7Ci0KLSAgICAgICAgQVNTRVJUX0ZBTFNFKG1fbGF5ZXJU
cmVlSG9zdC5nZXQoKSk7Ci0gICAgICAgIG1fY2xpZW50LmNsZWFyKCk7Ci0gICAgICAgIGlmICht
X3RpbWVkT3V0KSB7Ci0gICAgICAgICAgICBGQUlMKCkgPDwgIlRlc3QgdGltZWQgb3V0IjsKLSAg
ICAgICAgICAgIFdlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgYWZ0ZXJUZXN0KCk7Ci0gICAgICAgIFdlYkNvbXBvc2l0b3I6
OnNodXRkb3duKCk7Ci0gICAgfQotCi0gICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwotICAgIE93
blB0cjxNb2NrTGF5ZXJUcmVlSG9zdENsaWVudD4gbV9jbGllbnQ7Ci0gICAgT3duUHRyPENDTGF5
ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVIb3N0OwotCi1wcml2YXRlOgotICAgIGJvb2wgbV9iZWdp
bm5pbmc7Ci0gICAgYm9vbCBtX2VuZFdoZW5CZWdpblJldHVybnM7Ci0gICAgYm9vbCBtX3RpbWVk
T3V0OwotICAgIGJvb2wgbV9maW5pc2hlZDsKLSAgICBib29sIG1fc2NoZWR1bGVkOwotICAgIGJv
b2wgbV9zdGFydGVkOwotCi0gICAgT3duUHRyPFdlYlRocmVhZD4gbV93ZWJUaHJlYWQ7Ci0gICAg
UmVmUHRyPENDU2NvcGVkVGhyZWFkUHJveHk+IG1fbWFpblRocmVhZFByb3h5OwotICAgIFRpbWVv
dXRUYXNrKiBtX3RpbWVvdXRUYXNrOwotICAgIEJlZ2luVGFzayogbV9iZWdpblRhc2s7Ci0gICAg
RW5kVGVzdFRhc2sqIG1fZW5kVGVzdFRhc2s7Ci19OwotCi12b2lkIENDTGF5ZXJUcmVlSG9zdFRl
c3Q6OmRvQmVnaW5UZXN0KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1f
Y2xpZW50ID0gTW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmNyZWF0ZSh0aGlzKTsKLQotICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
LSAgICBtX2xheWVyVHJlZUhvc3QgPSBNb2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKHRoaXMsIG1f
Y2xpZW50LmdldCgpLCByb290TGF5ZXIsIG1fc2V0dGluZ3MpOwotICAgIEFTU0VSVF9UUlVFKG1f
bGF5ZXJUcmVlSG9zdCk7Ci0gICAgcm9vdExheWVyLT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJU
cmVlSG9zdC5nZXQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0LT5zZXRTdXJmYWNlUmVhZHkoKTsK
LQotICAgIG1fc3RhcnRlZCA9IHRydWU7Ci0gICAgbV9iZWdpbm5pbmcgPSB0cnVlOwotICAgIGJl
Z2luVGVzdCgpOwotICAgIG1fYmVnaW5uaW5nID0gZmFsc2U7Ci0gICAgaWYgKG1fZW5kV2hlbkJl
Z2luUmV0dXJucykKLSAgICAgICAgb25FbmRUZXN0KHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7
Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0VGVzdDo6ZW5kVGVzdCgpCi17Ci0gICAgbV9maW5p
c2hlZCA9IHRydWU7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgY2FsbGVkIGZyb20gdGhlIENDVGhyZWFk
LCByZS1jYWxsIGVuZFRlc3Qgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIGlmICghaXNNYWluVGhy
ZWFkKCkpCi0gICAgICAgIG1fbWFpblRocmVhZFByb3h5LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVh
ZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmVuZFRlc3QpKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgLy8gRm9yIHRoZSBjYXNlIHdoZXJlIHdlIGVuZFRlc3QgZHVyaW5nIGJlZ2luVGVz
dCgpLCBzZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQKLSAgICAgICAgLy8gdGhlIHRlc3Qgc2hv
dWxkIGVuZCB0aGUgc2Vjb25kIGJlZ2luVGVzdCByZWdhaW5zIGNvbnRyb2wuCi0gICAgICAgIGlm
IChtX2JlZ2lubmluZykKLSAgICAgICAgICAgIG1fZW5kV2hlbkJlZ2luUmV0dXJucyA9IHRydWU7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9uRW5kVGVzdChzdGF0aWNfY2FzdDx2b2lkKj4o
dGhpcykpOwotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0QWZ0
ZXJEZWxheShpbnQgZGVsYXlNaWxsaXNlY29uZHMpCi17Ci0gICAgLy8gSWYgd2UgYXJlIGNhbGxl
ZCBmcm9tIHRoZSBDQ1RocmVhZCwgcmUtY2FsbCBlbmRUZXN0IG9uIHRoZSBtYWluIHRocmVhZC4K
LSAgICBpZiAoIWlzTWFpblRocmVhZCgpKQotICAgICAgICBtX21haW5UaHJlYWRQcm94eS0+cG9z
dFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRU
ZXN0QWZ0ZXJEZWxheSwgZGVsYXlNaWxsaXNlY29uZHMpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
bV9lbmRUZXN0VGFzayA9IG5ldyBFbmRUZXN0VGFzayh0aGlzKTsKLSAgICAgICAgV2ViS2l0OjpQ
bGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3REZWxheWVkVGFzayhtX2Vu
ZFRlc3RUYXNrLCBkZWxheU1pbGxpc2Vjb25kcyk7Ci0gICAgfQotfQotCi1jbGFzcyBDQ0xheWVy
VHJlZUhvc3RUZXN0VGhyZWFkT25seSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKLXB1
YmxpYzoKLSAgICB2b2lkIHJ1blRlc3RUaHJlYWRlZCgpCi0gICAgewotICAgICAgICBDQ0xheWVy
VHJlZUhvc3RUZXN0OjpydW5UZXN0KHRydWUpOwotICAgIH0KLX07Ci0KLS8vIFNob3J0bGl2ZWQg
bGF5ZXJUcmVlSG9zdHMgc2hvdWxkbid0IGRpZS4KLWNsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RT
aG9ydGxpdmVkMSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKLXB1YmxpYzoKLSAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRlc3QoKQotICAgIHsKLSAgICAgICAgLy8gS2lsbCB0aGUgbGF5ZXJUcmVlSG9zdCBpbW1l
ZGlhdGVseS4KLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7Ci0gICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC5jbGVhcigpOwotCi0gICAgICAgIGVuZFRlc3QoKTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKLSAgICB7Ci0gICAgfQotfTsKLQotI2Rl
ZmluZSBTSU5HTEVfQU5EX01VTFRJX1RIUkVBRF9URVNUX0YoVEVTVF9GSVhUVVJFX05BTUUpIFwK
LSAgICBURVNUX0YoVEVTVF9GSVhUVVJFX05BTUUsIHJ1blNpbmdsZVRocmVhZCkgICAgICAgICAg
ICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBydW5UZXN0KGZhbHNlKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgVEVTVF9GKFRFU1RfRklYVFVSRV9OQU1FLCBydW5NdWx0aVRo
cmVhZCkgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcnVuVGVzdCh0cnVlKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotCi1TSU5HTEVfQU5EX01VTFRJX1RI
UkVBRF9URVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxKQorY2xhc3MgQ0NMYXll
clRyZWVIb3N0VGVzdCA6IHB1YmxpYyBDQ1RocmVhZGVkVGVzdCB7IH07CitjbGFzcyBDQ0xheWVy
VHJlZUhvc3RUZXN0VGhyZWFkT25seSA6IHB1YmxpYyBDQ1RocmVhZGVkVGVzdFRocmVhZE9ubHkg
eyB9OwogCiAvLyBTaG9ydGxpdmVkIGxheWVyVHJlZUhvc3RzIHNob3VsZG4ndCBkaWUgd2l0aCBh
IGNvbW1pdCBpbiBmbGlnaHQuCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIg
OiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CkBAIC0xMDc2LDcgKzM1MSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQogICAgIHsKLSAgICAgICAgQWNxdWly
ZUxheWVyVGV4dHVyZXMoKTsKKyAgICAgICAgcG9zdEFjcXVpcmVMYXllclRleHR1cmVzKCk7CiAg
ICAgICAgIHBvc3RTZXROZWVkc1JlZHJhd1RvTWFpblRocmVhZCgpOyAvLyBzaG91bGQgYmUgaW5o
aWJpdGVkIHdpdGhvdXQgYmxvY2tpbmcKICAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWlu
VGhyZWFkKCk7CiAgICAgfQpAQCAtMTEzMyw3ICs0MDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgcG9zdFNldFZpc2libGVUb01haW5UaHJlYWQoZmFsc2UpOwogICAg
ICAgICAgICAgcG9zdFNldFZpc2libGVUb01haW5UaHJlYWQodHJ1ZSk7Ci0gICAgICAgICAgICBB
Y3F1aXJlTGF5ZXJUZXh0dXJlcygpOworICAgICAgICAgICAgcG9zdEFjcXVpcmVMYXllclRleHR1
cmVzKCk7CiAgICAgICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTE0NDYsNTYgKzcyMSw2IEBAIHByaXZhdGU6CiAKIFNJTkdMRV9B
TkRfTVVMVElfVEhSRUFEX1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U3luY2hyb25pemVBbmlt
YXRpb25TdGFydFRpbWVzKQogCi1jbGFzcyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RNYWtlQ3Vy
cmVudEZhaWxzIDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci19
OwotCi0vLyBFbnN1cmVzIHRoYXQgd2UgZG8gbm90IGFuaW1hdGUKLWNsYXNzIENDTGF5ZXJUcmVl
SG9zdFRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb24gOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7Ci1wdWJsaWM6Ci0gICAgQ0NMYXllclRyZWVIb3N0
VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFpbHNBZnRlckFkZEFuaW1hdGlvbigpCi0gICAg
ewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQotICAgIHsKLSAgICAgICAg
Ly8gVGhpcyB3aWxsIGNhdXNlIHRoZSBhbmltYXRpb24gdGltZXIgdG8gYmUgc2V0IHdoaWNoIHdp
bGwgZmlyZSBpbgotICAgICAgICAvLyBDQ1NpbmdsZVRocmVhZFByb3h5OjphbmltYXRpb25UaW1l
ckRlbGF5KCkgc2Vjb25kcy4KLSAgICAgICAgcG9zdEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9z
dEltcGwqIGxheWVyVHJlZUhvc3RJbXBsLCBkb3VibGUgbW9ub3RvbmljVGltZSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNyZWF0ZUNvbnRleHQoYm9vbCBzdWNjZWVkZWQpCi0gICAgewotICAgICAgICBFWFBFQ1Rf
RkFMU0Uoc3VjY2VlZGVkKTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugd2FpdCBDQ1Npbmds
ZVRocmVhZFByb3h5OjphbmltYXRpb25UaW1lckRlbGF5KCkgc2Vjb25kcwotICAgICAgICAvLyAo
dXNlIGNlaWwganVzdCB0byBiZSBzdXJlKS4gSWYgdGhlIHRpbWVyIHdhcyBub3QgZGlzYWJsZWQs
IHdlIHdpbGwKLSAgICAgICAgLy8gYXR0ZW1wdCB0byBjYWxsIENDU2luZ2xlVGhyZWFkUHJveHk6
OmNvbXBvc2l0ZUltbWVkaWF0ZWx5IGFuZCB0aGUKLSAgICAgICAgLy8gdGVzdCB3aWxsIGZhaWwu
Ci0gICAgICAgIGVuZFRlc3RBZnRlckRlbGF5KGNlaWwoQ0NTaW5nbGVUaHJlYWRQcm94eTo6YW5p
bWF0aW9uVGltZXJEZWxheSgpICogMTAwMCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlQ29udGV4dCgpIE9WRVJSSURFCi0gICAgewot
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNE
TWFrZUN1cnJlbnRGYWlscyksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdyk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCi0gICAgewot
ICAgIH0KLX07Ci0KLVRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uLCBydW5TaW5nbGVUaHJlYWQpCi17Ci0gICAgcnVu
VGVzdChmYWxzZSk7Ci19Ci0KIC8vIEVuc3VyZXMgdGhhdCBtYWluIHRocmVhZCBhbmltYXRpb25z
IGhhdmUgdGhlaXIgc3RhcnQgdGltZXMgc3luY2hyb25pemVkIHdpdGggaW1wbCB0aHJlYWQgYW5p
bWF0aW9ucy4KIGNsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RBbmltYXRpb25GaW5pc2hlZEV2ZW50
cyA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0VGhyZWFkT25seSB7CiBwdWJsaWM6CkBAIC0y
OTQwLDE0ICsyMTY1LDE3IEBAIFNJTkdMRV9BTkRfTVVMVElfVEhSRUFEX1RFU1RfRihDQ0xheWVy
VHJlZUhvc3RUZXN0RmluaXNoQWxsUmVuZGVyaW5nKQogLy8gY29ycmVjdGx5IHJlY29nbml6ZWQu
CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJBZGRlZFdpdGhBbmltYXRpb24gOiBwdWJs
aWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CiBwdWJsaWM6Ci0gICAgQ0NMYXllclRyZWVIb3N0VGVz
dExheWVyQWRkZWRXaXRoQW5pbWF0aW9uKCkgeyB9CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdExh
eWVyQWRkZWRXaXRoQW5pbWF0aW9uKCkKKyAgICAgICAgOiBtX2FkZGVkQW5pbWF0aW9uKGZhbHNl
KQorICAgIHsKKyAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKICAgICB7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShzdGF0aWNfY2FzdDxNb2NrTGF5ZXJUcmVlSG9zdCo+KGxheWVy
VHJlZUhvc3QoKSktPmRpZEFkZEFuaW1hdGlvbldhc0NhbGxlZCgpKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKG1fYWRkZWRBbmltYXRpb24pOwogCiAgICAgICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBsYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwotICAgICAgICBsYXllci0+c2V0TGF5
ZXJBbmltYXRpb25EZWxlZ2F0ZSgmbV9hbmltYXRpb25EZWxlZ2F0ZSk7CisgICAgICAgIGxheWVy
LT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKHRoaXMpOwogCiAgICAgICAgIC8vIEFueSB2YWxp
ZCBDQ0FuaW1hdGlvbkN1cnZlIHdpbGwgZG8gaGVyZS4KICAgICAgICAgT3duUHRyPENDQW5pbWF0
aW9uQ3VydmU+IGN1cnZlKENDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CkBAIC0yOTU2
LDE1ICsyMTg0LDIwIEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBXZSBhZGQgdGhlIGFuaW1hdGlv
biAqYmVmb3JlKiBhdHRhY2hpbmcgdGhlIGxheWVyIHRvIHRoZSB0cmVlLgogICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZChsYXllcik7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKHN0YXRpY19jYXN0PE1vY2tMYXllclRyZWVIb3N0Kj4obGF5ZXJUcmVlSG9zdCgpKS0+
ZGlkQWRkQW5pbWF0aW9uV2FzQ2FsbGVkKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShtX2FkZGVk
QW5pbWF0aW9uKTsKIAogICAgICAgICBlbmRUZXN0KCk7CiAgICAgfQogCisgICAgdmlydHVhbCB2
b2lkIGRpZEFkZEFuaW1hdGlvbigpCisgICAgeworICAgICAgICBtX2FkZGVkQW5pbWF0aW9uID0g
dHJ1ZTsKKyAgICB9CisKICAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkgeyB9CiAKIHByaXZh
dGU6Ci0gICAgOjpUZXN0SG9va3MgbV9hbmltYXRpb25EZWxlZ2F0ZTsKKyAgICBib29sIG1fYWRk
ZWRBbmltYXRpb247CiB9OwogCiBTSU5HTEVfQU5EX01VTFRJX1RIUkVBRF9URVNUX0YoQ0NMYXll
clRyZWVIb3N0VGVzdExheWVyQWRkZWRXaXRoQW5pbWF0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NpbmdsZVRocmVhZFByb3h5VGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2luZ2xlVGhyZWFkUHJveHlUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ZmU0MGYyNDE4N2NmMDFhM2ZkNGUwN2VjMzQ2ZmVlMWJlNDYwZGQ5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NpbmdsZVRocmVhZFBy
b3h5VGVzdC5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKworI2luY2x1
ZGUgIkNDVGhyZWFkZWRUZXN0LmgiCisjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VXZWJHcmFwaGlj
c0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlRocmVhZC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CisKK2NsYXNzIEZha2VXZWJHcmFw
aGljc0NvbnRleHQzRE1ha2VDdXJyZW50RmFpbHMgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29u
dGV4dDNEIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkg
eyByZXR1cm4gZmFsc2U7IH0KK307CisKK2NsYXNzIENDU2luZ2xlVGhyZWFkUHJveHlUZXN0SW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uIDogcHVibGljIENDVGhy
ZWFkZWRUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ1NpbmdsZVRocmVhZFByb3h5VGVzdEluaXRpYWxp
emVMYXllclJlbmRlcmVyRmFpbHNBZnRlckFkZEFuaW1hdGlvbigpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxs
IGNhdXNlIHRoZSBhbmltYXRpb24gdGltZXIgdG8gYmUgc2V0IHdoaWNoIHdpbGwgZmlyZSBpbgor
ICAgICAgICAvLyBDQ1NpbmdsZVRocmVhZFByb3h5OjphbmltYXRpb25UaW1lckRlbGF5KCkgc2Vj
b25kcy4KKyAgICAgICAgcG9zdEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVy
VHJlZUhvc3RJbXBsLCBkb3VibGUgbW9ub3RvbmljVGltZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUNv
bnRleHQoYm9vbCBzdWNjZWVkZWQpCisgICAgeworICAgICAgICBFWFBFQ1RfRkFMU0Uoc3VjY2Vl
ZGVkKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugd2FpdCBDQ1NpbmdsZVRocmVhZFByb3h5
OjphbmltYXRpb25UaW1lckRlbGF5KCkgc2Vjb25kcworICAgICAgICAvLyAodXNlIGNlaWwganVz
dCB0byBiZSBzdXJlKS4gSWYgdGhlIHRpbWVyIHdhcyBub3QgZGlzYWJsZWQsIHdlIHdpbGwKKyAg
ICAgICAgLy8gYXR0ZW1wdCB0byBjYWxsIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUlt
bWVkaWF0ZWx5IGFuZCB0aGUKKyAgICAgICAgLy8gdGVzdCB3aWxsIGZhaWwuCisgICAgICAgIGVu
ZFRlc3RBZnRlckRlbGF5KGNlaWwoQ0NTaW5nbGVUaHJlYWRQcm94eTo6YW5pbWF0aW9uVGltZXJE
ZWxheSgpICogMTAwMCkpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY3JlYXRlQ29udGV4dCgpIE9WRVJSSURFCisgICAgeworICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2Vi
Q29udGV4dChhZG9wdFB0cihuZXcgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNETWFrZUN1cnJlbnRG
YWlscyksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KK307CisK
K1RFU1RfRihDQ1NpbmdsZVRocmVhZFByb3h5VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFp
bHNBZnRlckFkZEFuaW1hdGlvbiwgcnVuU2luZ2xlVGhyZWFkKQoreworICAgIHJ1blRlc3QoZmFs
c2UpOworfQorCitjbGFzcyBDQ1NpbmdsZVRocmVhZFByb3h5VGVzdERpZEFkZEFuaW1hdGlvbkJl
Zm9yZUluaXRpYWxpemluZ0xheWVyUmVuZGVyZXIgOiBwdWJsaWMgQ0NUaHJlYWRlZFRlc3Qgewor
cHVibGljOgorICAgIENDU2luZ2xlVGhyZWFkUHJveHlUZXN0RGlkQWRkQW5pbWF0aW9uQmVmb3Jl
SW5pdGlhbGl6aW5nTGF5ZXJSZW5kZXJlcigpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGNhdXNlIHRoZSBh
bmltYXRpb24gdGltZXIgdG8gYmUgc2V0IHdoaWNoIHdpbGwgZmlyZSBpbgorICAgICAgICAvLyBD
Q1NpbmdsZVRocmVhZFByb3h5OjphbmltYXRpb25UaW1lckRlbGF5KCkgc2Vjb25kcy4KKyAgICAg
ICAgcG9zdERpZEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGwqLCBkb3VibGUpCisgICAg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjcmVhdGVDb250ZXh0KGJvb2wpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQW5pbWF0aW9uKCkKKyAg
ICB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSB3YWl0IENDU2luZ2xlVGhyZWFkUHJveHk6OmFu
aW1hdGlvblRpbWVyRGVsYXkoKSBzZWNvbmRzCisgICAgICAgIC8vICh1c2UgY2VpbCBqdXN0IHRv
IGJlIHN1cmUpLiBJZiB0aGUgdGltZXIgd2FzIG5vdCBkaXNhYmxlZCwgd2Ugd2lsbAorICAgICAg
ICAvLyBhdHRlbXB0IHRvIGNhbGwgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRp
YXRlbHkgYW5kIHRoZQorICAgICAgICAvLyB0ZXN0IHdpbGwgZmFpbC4KKyAgICAgICAgZW5kVGVz
dEFmdGVyRGVsYXkoY2VpbChDQ1NpbmdsZVRocmVhZFByb3h5OjphbmltYXRpb25UaW1lckRlbGF5
KCkgKiAxMDAwKSk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjcmVhdGVDb250ZXh0KCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250
ZXh0KGFkb3B0UHRyKG5ldyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RNYWtlQ3VycmVudEZhaWxz
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKKworVEVT
VF9GKENDU2luZ2xlVGhyZWFkUHJveHlUZXN0RGlkQWRkQW5pbWF0aW9uQmVmb3JlSW5pdGlhbGl6
aW5nTGF5ZXJSZW5kZXJlciwgcnVuU2luZ2xlVGhyZWFkKQoreworICAgIHJ1blRlc3QoZmFsc2Up
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVk
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkZWRUZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jOWViYmExMjJmZmFlY2FiNGMwYzIwOTdlZmY3MDI4MDk0YTU2MTI2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVk
VGVzdC5jcHAKQEAgLTAsMCArMSw2NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkNDVGhyZWFkZWRUZXN0LmgiCisKKyNpbmNsdWRlICJBbmltYXRp
b25JZFZlbmRvci5oIgorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgorI2luY2x1
ZGUgIkNDT2NjbHVzaW9uVHJhY2tlclRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJDQ1RpbGVkTGF5
ZXJUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaCIKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiVGV4
dHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiV2Vi
S2l0LmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRp
b25EZWxlZ2F0ZS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2NvcGVkVGhyZWFkUHJveHku
aCIKKyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NU
ZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorI2luY2x1ZGUg
ImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJUaHJlYWQuaCIK
KyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgor
I2luY2x1ZGUgPHB1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaD4KKyNpbmNsdWRlIDxwdWJsaWMv
V2ViRmlsdGVyT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5n
IG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJLaXRUZXN0cyB7CisKK1Bhc3NPd25QdHI8
Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc+IENv
bXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpjcmVh
dGUoQXR0cmlidXRlcyBhdHRycykKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENvbXBvc2l0
b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nKGF0dHJzKSk7Cit9
CisKK1dlYkdMSWQgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJl
VHJhY2tpbmc6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIFdlYkdMSWQgdGV4dHVyZSA9IG1fdGV4
dHVyZXMuc2l6ZSgpICsgMTsKKyAgICBtX3RleHR1cmVzLmFwcGVuZCh0ZXh0dXJlKTsKKyAgICBy
ZXR1cm4gdGV4dHVyZTsKK30KKwordm9pZCBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4
dDNEV2l0aFRleHR1cmVUcmFja2luZzo6ZGVsZXRlVGV4dHVyZShXZWJHTElkIHRleHR1cmUpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVzLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIGlmIChtX3RleHR1cmVzW2ldID09IHRleHR1cmUpIHsKKyAgICAgICAgICAgIG1fdGV4
dHVyZXMucmVtb3ZlKGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJh
Y2tpbmc6OmJpbmRUZXh0dXJlKFdHQzNEZW51bSAvKiB0YXJnZXQgKi8sIFdlYkdMSWQgdGV4dHVy
ZSkKK3sKKyAgICBtX3VzZWRUZXh0dXJlcy5hZGQodGV4dHVyZSk7Cit9CisKK2ludCBDb21wb3Np
dG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6bnVtVGV4dHVy
ZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZXMuc2l6ZSgpKTsg
fQoraW50IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNr
aW5nOjp0ZXh0dXJlKGludCBpKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVzW2ldOyB9Cit2b2lk
IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpy
ZXNldFRleHR1cmVzKCkgeyBtX3RleHR1cmVzLmNsZWFyKCk7IH0KKworaW50IENvbXBvc2l0b3JG
YWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpudW1Vc2VkVGV4dHVy
ZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fdXNlZFRleHR1cmVzLnNpemUo
KSk7IH0KK2Jvb2wgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJl
VHJhY2tpbmc6OnVzZWRUZXh0dXJlKGludCB0ZXh0dXJlKSBjb25zdCB7IHJldHVybiBtX3VzZWRU
ZXh0dXJlcy5maW5kKHRleHR1cmUpICE9IG1fdXNlZFRleHR1cmVzLmVuZCgpOyB9Cit2b2lkIENv
bXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpyZXNl
dFVzZWRUZXh0dXJlcygpIHsgbV91c2VkVGV4dHVyZXMuY2xlYXIoKTsgfQorCitDb21wb3NpdG9y
RmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6Q29tcG9zaXRvckZh
a2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmcoQXR0cmlidXRlcyBhdHRy
cykgOiBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEKGF0dHJzKQoreworfQorCitQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBUZXN0SG9va3M6OmNyZWF0ZUNvbnRleHQoKQor
eworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOworICAgIFdlYkdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJzOworICAgIHdlYkF0dHJzLmFscGhhID0g
YXR0cnMuYWxwaGE7CisKKyAgICBPd25QdHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNvbnRl
eHQgPSBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2lu
Zzo6Y3JlYXRlKHdlYkF0dHJzKTsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCh3ZWJDb250ZXh0LnJlbGVhc2Uo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKK30KKwor
UGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdEltcGw+IE1vY2tMYXllclRyZWVIb3N0SW1wbDo6
Y3JlYXRlKFRlc3RIb29rcyogdGVzdEhvb2tzLCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywg
Q0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgTW9ja0xheWVyVHJlZUhvc3RJbXBsKHRlc3RIb29rcywgc2V0dGluZ3MsIGNsaWVudCkp
OworfQorCit2b2lkIE1vY2tMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5Db21taXQoKQoreworICAg
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KCk7CisgICAgbV90ZXN0SG9va3MtPmJl
Z2luQ29tbWl0T25DQ1RocmVhZCh0aGlzKTsKK30KKwordm9pZCBNb2NrTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbW1pdENvbXBsZXRlKCkKK3sKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRD
b21wbGV0ZSgpOworICAgIG1fdGVzdEhvb2tzLT5jb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQodGhp
cyk7Cit9CisKK2Jvb2wgTW9ja0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KEZyYW1l
RGF0YSYgZnJhbWUpCit7CisgICAgYm9vbCByZXN1bHQgPSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpw
cmVwYXJlVG9EcmF3KGZyYW1lKTsKKyAgICBtX3Rlc3RIb29rcy0+cHJlcGFyZVRvRHJhd09uQ0NU
aHJlYWQodGhpcyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBNb2NrTGF5ZXJUcmVl
SG9zdEltcGw6OmRyYXdMYXllcnMoY29uc3QgRnJhbWVEYXRhJiBmcmFtZSkKK3sKKyAgICBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBtX3Rlc3RIb29rcy0+ZHJh
d0xheWVyc09uQ0NUaHJlYWQodGhpcyk7Cit9CisKK3ZvaWQgTW9ja0xheWVyVHJlZUhvc3RJbXBs
OjphbmltYXRlTGF5ZXJzKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGlt
ZSkKK3sKKyAgICBtX3Rlc3RIb29rcy0+d2lsbEFuaW1hdGVMYXllcnModGhpcywgbW9ub3Rvbmlj
VGltZSk7CisgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyhtb25vdG9uaWNU
aW1lLCB3YWxsQ2xvY2tUaW1lKTsKKyAgICBtX3Rlc3RIb29rcy0+YW5pbWF0ZUxheWVycyh0aGlz
LCBtb25vdG9uaWNUaW1lKTsKK30KKworZG91YmxlIE1vY2tMYXllclRyZWVIb3N0SW1wbDo6bG93
RnJlcXVlbmN5QW5pbWF0aW9uSW50ZXJ2YWwoKSBjb25zdAoreworICAgIHJldHVybiAxLjAgLyA2
MDsKK30KKworTW9ja0xheWVyVHJlZUhvc3RJbXBsOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGwoVGVz
dEhvb2tzKiB0ZXN0SG9va3MsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgOiBDQ0xheWVyVHJlZUhvc3RJbXBsKHNldHRp
bmdzLCBjbGllbnQpCisgICAgLCBtX3Rlc3RIb29rcyh0ZXN0SG9va3MpCit7Cit9CisKKy8vIEFk
YXB0cyBDQ0xheWVyVHJlZUhvc3QgZm9yIHRlc3QuIEluamVjdHMgTW9ja0xheWVyVHJlZUhvc3RJ
bXBsLgorY2xhc3MgTW9ja0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9z
dD4gY3JlYXRlKFRlc3RIb29rcyogdGVzdEhvb2tzLCBXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RD
bGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpMYXllckNocm9taXVtPiByb290TGF5
ZXIsIGNvbnN0IFdlYkNvcmU6OkNDU2V0dGluZ3MmIHNldHRpbmdzKQorICAgIHsKKyAgICAgICAg
Ly8gRm9yIHRoZXNlIHRlc3RzLCB3ZSB3aWxsIGVuYWJsZSB0aHJlYWRlZCBhbmltYXRpb25zLgor
ICAgICAgICBDQ1NldHRpbmdzIHNldHRpbmdzQ29weSA9IHNldHRpbmdzOworICAgICAgICBzZXR0
aW5nc0NvcHkudGhyZWFkZWRBbmltYXRpb25FbmFibGVkID0gdHJ1ZTsKKworICAgICAgICBPd25Q
dHI8TW9ja0xheWVyVHJlZUhvc3Q+IGxheWVyVHJlZUhvc3QoYWRvcHRQdHIobmV3IE1vY2tMYXll
clRyZWVIb3N0KHRlc3RIb29rcywgY2xpZW50LCBzZXR0aW5nc0NvcHkpKSk7CisgICAgICAgIGJv
b2wgc3VjY2VzcyA9IGxheWVyVHJlZUhvc3QtPmluaXRpYWxpemUoKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGxheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290
TGF5ZXIpOworCisgICAgICAgIC8vIExheWVyVHJlZUhvc3RJbXBsIHdvbid0IGRyYXcgaWYgaXQg
aGFzIDF4MSB2aWV3cG9ydC4KKyAgICAgICAgbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXpl
KEludFNpemUoMSwgMSkpOworCisgICAgICAgIGxheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5z
ZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKHRlc3RIb29rcyk7CisKKyAgICAgICAgcmV0dXJuIGxh
eWVyVHJlZUhvc3QucmVsZWFzZSgpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICAv
LyBGb3IgdGhlc2UgdGVzdHMsIHdlIHdpbGwgZW5hYmxlIHRocmVhZGVkIGFuaW1hdGlvbnMuCisg
ICAgICAgIENDU2V0dGluZ3MgY29weVNldHRpbmdzID0gc2V0dGluZ3MoKTsKKyAgICAgICAgY29w
eVNldHRpbmdzLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCA9IHRydWU7CisgICAgICAgIHJldHVy
biBNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShtX3Rlc3RIb29rcywgY29weVNldHRpbmdz
LCBjbGllbnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRBbmltYXRpb24oKSBP
VkVSUklERQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0OjpkaWRBZGRBbmltYXRpb24o
KTsKKyAgICAgICAgbV90ZXN0SG9va3MtPmRpZEFkZEFuaW1hdGlvbigpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdChUZXN0SG9va3MqIHRlc3RIb29rcywgV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OkNDU2V0dGlu
Z3MmIHNldHRpbmdzKQorICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdChjbGllbnQsIHNldHRpbmdz
KQorICAgICAgICAsIG1fdGVzdEhvb2tzKHRlc3RIb29rcykKKyAgICB7CisgICAgfQorCisgICAg
VGVzdEhvb2tzKiBtX3Rlc3RIb29rczsKK307CisKKy8vIEltcGxlbWVudGF0aW9uIG9mIENDTGF5
ZXJUcmVlSG9zdCBjYWxsYmFjayBpbnRlcmZhY2UuCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdENs
aWVudCA6IHB1YmxpYyBNb2NrQ0NMYXllclRyZWVIb3N0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdENsaWVudD4gY3JlYXRlKFRlc3RIb29r
cyogdGVzdEhvb2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2NrTGF5
ZXJUcmVlSG9zdENsaWVudCh0ZXN0SG9va3MpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
d2lsbEJlZ2luRnJhbWUoKSBPVkVSUklERQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkQmVnaW5GcmFtZSgpIE9WRVJSSURFCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKSBPVkVSUklERQorICAg
IHsKKyAgICAgICAgbV90ZXN0SG9va3MtPnVwZGF0ZUFuaW1hdGlvbnMobW9ub3RvbmljVGltZSk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIE9WRVJSSURFCisgICAgeworICAg
ICAgICBtX3Rlc3RIb29rcy0+bGF5b3V0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHNjYWxl
KSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV90ZXN0SG9va3MtPmFwcGx5U2Nyb2xsQW5kU2Nh
bGUoc2Nyb2xsRGVsdGEsIHNjYWxlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUNvbnRleHQzRCgpIE9WRVJSSURFCisgICAgeworICAg
ICAgICByZXR1cm4gbV90ZXN0SG9va3MtPmNyZWF0ZUNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgd2lsbENvbW1pdCgpIE9WRVJSSURFCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBkaWRDb21taXQoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV90ZXN0SG9v
a3MtPmRpZENvbW1pdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmRE
cmF3RnJhbWUoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV90ZXN0SG9va3MtPmRpZENvbW1p
dEFuZERyYXdGcmFtZSgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVN3
YXBCdWZmZXJzKCkgT1ZFUlJJREUKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY3JlYXRlQ29udGV4dChib29sIHN1Y2NlZWRlZCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAg
IG1fdGVzdEhvb2tzLT5kaWRSZWNyZWF0ZUNvbnRleHQoc3VjY2VlZGVkKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSBPVkVSUklERQorICAgIHsKKyAgICAg
ICAgbV90ZXN0SG9va3MtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KFRlc3RIb29rcyogdGVzdEhvb2tz
KSA6IG1fdGVzdEhvb2tzKHRlc3RIb29rcykgeyB9CisKKyAgICBUZXN0SG9va3MqIG1fdGVzdEhv
b2tzOworfTsKKworY2xhc3MgVGltZW91dFRhc2sgOiBwdWJsaWMgV2ViVGhyZWFkOjpUYXNrIHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBUaW1lb3V0VGFzayhDQ1RocmVhZGVkVGVzdCogdGVzdCkK
KyAgICAgICAgOiBtX3Rlc3QodGVzdCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjbGVhclRl
c3QoKQorICAgIHsKKyAgICAgICAgbV90ZXN0ID0gMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5U
aW1lb3V0VGFzaygpCisgICAgeworICAgICAgICBpZiAobV90ZXN0KQorICAgICAgICAgICAgbV90
ZXN0LT5jbGVhclRpbWVvdXQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkKKyAg
ICB7CisgICAgICAgIGlmIChtX3Rlc3QpCisgICAgICAgICAgICBtX3Rlc3QtPnRpbWVvdXQoKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NUaHJlYWRlZFRlc3QqIG1fdGVzdDsKK307CisKK2Ns
YXNzIEJlZ2luVGFzayA6IHB1YmxpYyBXZWJUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIGV4
cGxpY2l0IEJlZ2luVGFzayhDQ1RocmVhZGVkVGVzdCogdGVzdCkKKyAgICAgICAgOiBtX3Rlc3Qo
dGVzdCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+QmVnaW5UYXNrKCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBtX3Rlc3QtPmRvQmVnaW5UZXN0KCk7
CisgICAgfQorcHJpdmF0ZToKKyAgICBDQ1RocmVhZGVkVGVzdCogbV90ZXN0OworfTsKKworY2xh
c3MgRW5kVGVzdFRhc2sgOiBwdWJsaWMgV2ViVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBFbmRUZXN0VGFzayhDQ1RocmVhZGVkVGVzdCogdGVzdCkKKyAgICAgICAgOiBtX3Rl
c3QodGVzdCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RW5kVGVzdFRhc2soKQorICAg
IHsKKyAgICAgICAgaWYgKG1fdGVzdCkKKyAgICAgICAgICAgIG1fdGVzdC0+Y2xlYXJFbmRUZXN0
VGFzaygpOworICAgIH0KKworICAgIHZvaWQgY2xlYXJUZXN0KCkKKyAgICB7CisgICAgICAgIG1f
dGVzdCA9IDA7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJ1bigpCisgICAgeworICAgICAg
ICBpZiAobV90ZXN0KQorICAgICAgICAgICAgbV90ZXN0LT5lbmRUZXN0KCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIENDVGhyZWFkZWRUZXN0KiBtX3Rlc3Q7Cit9OworCitDQ1RocmVhZGVkVGVz
dDo6Q0NUaHJlYWRlZFRlc3QoKQorICAgIDogbV9iZWdpbm5pbmcoZmFsc2UpCisgICAgLCBtX2Vu
ZFdoZW5CZWdpblJldHVybnMoZmFsc2UpCisgICAgLCBtX3RpbWVkT3V0KGZhbHNlKQorICAgICwg
bV9maW5pc2hlZChmYWxzZSkKKyAgICAsIG1fc2NoZWR1bGVkKGZhbHNlKQorICAgICwgbV9zdGFy
dGVkKGZhbHNlKQorICAgICwgbV9lbmRUZXN0VGFzaygwKQoreyB9CisKK3ZvaWQgQ0NUaHJlYWRl
ZFRlc3Q6OmVuZFRlc3QoKQoreworICAgIG1fZmluaXNoZWQgPSB0cnVlOworCisgICAgLy8gSWYg
d2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBDQ1RocmVhZCwgcmUtY2FsbCBlbmRUZXN0IG9uIHRoZSBt
YWluIHRocmVhZC4KKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICBtX21haW5UaHJl
YWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZGVkVGVz
dDo6ZW5kVGVzdCkpOworICAgIGVsc2UgeworICAgICAgICAvLyBGb3IgdGhlIGNhc2Ugd2hlcmUg
d2UgZW5kVGVzdCBkdXJpbmcgYmVnaW5UZXN0KCksIHNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhh
dAorICAgICAgICAvLyB0aGUgdGVzdCBzaG91bGQgZW5kIHRoZSBzZWNvbmQgYmVnaW5UZXN0IHJl
Z2FpbnMgY29udHJvbC4KKyAgICAgICAgaWYgKG1fYmVnaW5uaW5nKQorICAgICAgICAgICAgbV9l
bmRXaGVuQmVnaW5SZXR1cm5zID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb25F
bmRUZXN0KHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7CisgICAgfQorfQorCit2b2lkIENDVGhy
ZWFkZWRUZXN0OjplbmRUZXN0QWZ0ZXJEZWxheShpbnQgZGVsYXlNaWxsaXNlY29uZHMpCit7Cisg
ICAgLy8gSWYgd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBDQ1RocmVhZCwgcmUtY2FsbCBlbmRUZXN0
IG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICBt
X21haW5UaHJlYWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1Ro
cmVhZGVkVGVzdDo6ZW5kVGVzdEFmdGVyRGVsYXksIGRlbGF5TWlsbGlzZWNvbmRzKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZW5kVGVzdFRhc2sgPSBuZXcgRW5kVGVzdFRhc2sodGhpcyk7Cisg
ICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5wb3N0
RGVsYXllZFRhc2sobV9lbmRUZXN0VGFzaywgZGVsYXlNaWxsaXNlY29uZHMpOworICAgIH0KK30K
Kwordm9pZCBDQ1RocmVhZGVkVGVzdDo6cG9zdFNldE5lZWRzQW5pbWF0ZVRvTWFpblRocmVhZCgp
Cit7CisgICAgY2FsbE9uTWFpblRocmVhZChDQ1RocmVhZGVkVGVzdDo6ZGlzcGF0Y2hTZXROZWVk
c0FuaW1hdGUsIHRoaXMpOworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0Ojpwb3N0QWRkQW5pbWF0
aW9uVG9NYWluVGhyZWFkKCkKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKENDVGhyZWFkZWRUZXN0
OjpkaXNwYXRjaEFkZEFuaW1hdGlvbiwgdGhpcyk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRlZFRlc3Q6
OnBvc3RBZGRJbnN0YW50QW5pbWF0aW9uVG9NYWluVGhyZWFkKCkKK3sKKyAgICBjYWxsT25NYWlu
VGhyZWFkKENDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaEFkZEluc3RhbnRBbmltYXRpb24sIHRoaXMp
OworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0Ojpwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJl
YWQoKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NUaHJlYWRlZFRlc3Q6OmRpc3BhdGNoU2V0
TmVlZHNDb21taXQsIHRoaXMpOworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0Ojpwb3N0QWNxdWly
ZUxheWVyVGV4dHVyZXMoKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NUaHJlYWRlZFRlc3Q6
OmRpc3BhdGNoQWNxdWlyZUxheWVyVGV4dHVyZXMsIHRoaXMpOworfQorCit2b2lkIENDVGhyZWFk
ZWRUZXN0Ojpwb3N0U2V0TmVlZHNSZWRyYXdUb01haW5UaHJlYWQoKQoreworICAgIGNhbGxPbk1h
aW5UaHJlYWQoQ0NUaHJlYWRlZFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNSZWRyYXcsIHRoaXMpOwor
fQorCit2b2lkIENDVGhyZWFkZWRUZXN0Ojpwb3N0U2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0VG9N
YWluVGhyZWFkKCkKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKENDVGhyZWFkZWRUZXN0OjpkaXNw
YXRjaFNldE5lZWRzQW5pbWF0ZUFuZENvbW1pdCwgdGhpcyk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRl
ZFRlc3Q6OnBvc3RTZXRWaXNpYmxlVG9NYWluVGhyZWFkKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBj
YWxsT25NYWluVGhyZWFkKHZpc2libGUgPyBDQ1RocmVhZGVkVGVzdDo6ZGlzcGF0Y2hTZXRWaXNp
YmxlIDogQ0NUaHJlYWRlZFRlc3Q6OmRpc3BhdGNoU2V0SW52aXNpYmxlLCB0aGlzKTsKK30KKwor
dm9pZCBDQ1RocmVhZGVkVGVzdDo6cG9zdERpZEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgpCit7
CisgICAgY2FsbE9uTWFpblRocmVhZChDQ1RocmVhZGVkVGVzdDo6ZGlzcGF0Y2hEaWRBZGRBbmlt
YXRpb24sIHRoaXMpOworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0Ojpkb0JlZ2luVGVzdCgpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2NsaWVudCA9IE1vY2tMYXllclRy
ZWVIb3N0Q2xpZW50OjpjcmVhdGUodGhpcyk7CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cm9vdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgbV9sYXllclRyZWVIb3N0
ID0gTW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBtX2NsaWVudC5nZXQoKSwgcm9vdExh
eWVyLCBtX3NldHRpbmdzKTsKKyAgICBBU1NFUlRfVFJVRShtX2xheWVyVHJlZUhvc3QpOworICAg
IHJvb3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOworICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0U3VyZmFjZVJlYWR5KCk7CisKKyAgICBtX3N0YXJ0ZWQgPSB0
cnVlOworICAgIG1fYmVnaW5uaW5nID0gdHJ1ZTsKKyAgICBiZWdpblRlc3QoKTsKKyAgICBtX2Jl
Z2lubmluZyA9IGZhbHNlOworICAgIGlmIChtX2VuZFdoZW5CZWdpblJldHVybnMpCisgICAgICAg
IG9uRW5kVGVzdChzdGF0aWNfY2FzdDx2b2lkKj4odGhpcykpOworfQorCit2b2lkIENDVGhyZWFk
ZWRUZXN0Ojp0aW1lb3V0KCkKK3sKKyAgICBtX3RpbWVkT3V0ID0gdHJ1ZTsKKyAgICBlbmRUZXN0
KCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRlZFRlc3Q6OnNjaGVkdWxlQ29tcG9zaXRlKCkKK3sKKyAg
ICBpZiAoIW1fc3RhcnRlZCB8fCBtX3NjaGVkdWxlZCB8fCBtX2ZpbmlzaGVkKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zY2hlZHVsZWQgPSB0cnVlOworICAgIGNhbGxPbk1haW5UaHJlYWQoJkND
VGhyZWFkZWRUZXN0OjpkaXNwYXRjaENvbXBvc2l0ZSwgdGhpcyk7Cit9CisKK3ZvaWQgQ0NUaHJl
YWRlZFRlc3Q6Om9uRW5kVGVzdCh2b2lkKiBzZWxmKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCkt
PmV4aXRSdW5Mb29wKCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRlZFRlc3Q6OmRpc3BhdGNoU2V0TmVl
ZHNBbmltYXRlKHZvaWQqIHNlbGYpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwor
ICAgIENDVGhyZWFkZWRUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NUaHJlYWRlZFRlc3QqPihz
ZWxmKTsKKyAgICBBU1NFUlQodGVzdCk7CisgICAgaWYgKHRlc3QtPm1fZmluaXNoZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICh0ZXN0LT5tX2xheWVyVHJlZUhvc3QpCisgICAgICAgIHRl
c3QtPm1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNBbmltYXRlKCk7Cit9CisKK3ZvaWQgQ0NUaHJl
YWRlZFRlc3Q6OmRpc3BhdGNoQWRkSW5zdGFudEFuaW1hdGlvbih2b2lkKiBzZWxmKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBDQ1RocmVhZGVkVGVzdCogdGVzdCA9IHN0
YXRpY19jYXN0PENDVGhyZWFkZWRUZXN0Kj4oc2VsZik7CisgICAgQVNTRVJUKHRlc3QpOworICAg
IGlmICh0ZXN0LT5tX2ZpbmlzaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodGVzdC0+
bV9sYXllclRyZWVIb3N0ICYmIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkpCisg
ICAgICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9MYXllcigqdGVzdC0+bV9sYXllclRyZWVIb3N0
LT5yb290TGF5ZXIoKSwgMCwgMCwgMC41LCBmYWxzZSk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRlZFRl
c3Q6OmRpc3BhdGNoQWRkQW5pbWF0aW9uKHZvaWQqIHNlbGYpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIENDVGhyZWFkZWRUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NU
aHJlYWRlZFRlc3QqPihzZWxmKTsKKyAgICBBU1NFUlQodGVzdCk7CisgICAgaWYgKHRlc3QtPm1f
ZmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0ZXN0LT5tX2xheWVyVHJlZUhv
c3QgJiYgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSkKKyAgICAgICAgYWRkT3Bh
Y2l0eVRyYW5zaXRpb25Ub0xheWVyKCp0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigp
LCAxMCwgMCwgMC41LCB0cnVlKTsKK30KKwordm9pZCBDQ1RocmVhZGVkVGVzdDo6ZGlzcGF0Y2hT
ZXROZWVkc0FuaW1hdGVBbmRDb21taXQodm9pZCogc2VsZikKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgQ0NUaHJlYWRlZFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ1Ro
cmVhZGVkVGVzdCo+KHNlbGYpOworICAgIEFTU0VSVCh0ZXN0KTsKKyAgICBpZiAodGVzdC0+bV9m
aW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9z
dCkgeworICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQW5pbWF0ZSgpOwor
ICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0KCk7CisgICAgfQor
fQorCit2b2lkIENDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaFNldE5lZWRzQ29tbWl0KHZvaWQqIHNl
bGYpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIENDVGhyZWFkZWRUZXN0
KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NUaHJlYWRlZFRlc3QqPihzZWxmKTsKKyAgICBBU1NFUlRf
VFJVRSh0ZXN0KTsKKyAgICBpZiAodGVzdC0+bV9maW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgdGVzdC0+bV9sYXllclRy
ZWVIb3N0LT5zZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0OjpkaXNw
YXRjaEFjcXVpcmVMYXllclRleHR1cmVzKHZvaWQqIHNlbGYpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIENDVGhyZWFkZWRUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NU
aHJlYWRlZFRlc3QqPihzZWxmKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0KTsKKyAgICBpZiAodGVz
dC0+bV9maW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRlc3QtPm1fbGF5ZXJU
cmVlSG9zdCkKKyAgICAgICAgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5hY3F1aXJlTGF5ZXJUZXh0
dXJlcygpOworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaFNldE5lZWRzUmVkcmF3
KHZvaWQqIHNlbGYpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIENDVGhy
ZWFkZWRUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NUaHJlYWRlZFRlc3QqPihzZWxmKTsKKyAg
ICBBU1NFUlRfVFJVRSh0ZXN0KTsKKyAgICBpZiAodGVzdC0+bV9maW5pc2hlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgdGVzdC0+
bV9sYXllclRyZWVIb3N0LT5zZXROZWVkc1JlZHJhdygpOworfQorCit2b2lkIENDVGhyZWFkZWRU
ZXN0OjpkaXNwYXRjaFNldFZpc2libGUodm9pZCogc2VsZikKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgQ0NUaHJlYWRlZFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ1Ro
cmVhZGVkVGVzdCo+KHNlbGYpOworICAgIEFTU0VSVCh0ZXN0KTsKKyAgICBpZiAodGVzdC0+bV9m
aW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9z
dCkKKyAgICAgICAgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5zZXRWaXNpYmxlKHRydWUpOworfQor
Cit2b2lkIENDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaFNldEludmlzaWJsZSh2b2lkKiBzZWxmKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBDQ1RocmVhZGVkVGVzdCogdGVz
dCA9IHN0YXRpY19jYXN0PENDVGhyZWFkZWRUZXN0Kj4oc2VsZik7CisgICAgQVNTRVJUKHRlc3Qp
OworICAgIGlmICh0ZXN0LT5tX2ZpbmlzaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
dGVzdC0+bV9sYXllclRyZWVIb3N0KQorICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnNl
dFZpc2libGUoZmFsc2UpOworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaENvbXBv
c2l0ZSh2b2lkKiBzZWxmKQoreworICAgIENDVGhyZWFkZWRUZXN0KiB0ZXN0ID0gc3RhdGljX2Nh
c3Q8Q0NUaHJlYWRlZFRlc3QqPihzZWxmKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVCh0ZXN0KTsKKyAgICB0ZXN0LT5tX3NjaGVkdWxlZCA9IGZhbHNlOworICAgIGlm
ICh0ZXN0LT5tX2xheWVyVHJlZUhvc3QgJiYgIXRlc3QtPm1fZmluaXNoZWQpCisgICAgICAgIHRl
c3QtPm1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRlKCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRlZFRl
c3Q6OmRpc3BhdGNoRGlkQWRkQW5pbWF0aW9uKHZvaWQqIHNlbGYpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKworICAgIENDVGhyZWFkZWRUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8
Q0NUaHJlYWRlZFRlc3QqPihzZWxmKTsKKyAgICBBU1NFUlQodGVzdCk7CisgICAgaWYgKHRlc3Qt
Pm1fZmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0ZXN0LT5tX2xheWVyVHJl
ZUhvc3QpCisgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+ZGlkQWRkQW5pbWF0aW9uKCk7
Cit9CisKK3ZvaWQgQ0NUaHJlYWRlZFRlc3Q6OnJ1blRlc3QoYm9vbCB0aHJlYWRlZCkKK3sKKyAg
ICBpZiAodGhyZWFkZWQpIHsKKyAgICAgICAgbV93ZWJUaHJlYWQgPSBhZG9wdFB0cihXZWJLaXQ6
OlBsYXRmb3JtOjpjdXJyZW50KCktPmNyZWF0ZVRocmVhZCgiQ0NUaHJlYWRlZFRlc3QiKSk7Cisg
ICAgICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUobV93ZWJUaHJlYWQuZ2V0KCkpOworICAg
IH0gZWxzZQorICAgICAgICBXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworCisgICAgQVNT
RVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICBtX21haW5UaHJlYWRQcm94eSA9IEND
U2NvcGVkVGhyZWFkUHJveHk6OmNyZWF0ZShDQ1Byb3h5OjptYWluVGhyZWFkKCkpOworCisgICAg
bV9iZWdpblRhc2sgPSBuZXcgQmVnaW5UYXNrKHRoaXMpOworICAgIFdlYktpdDo6UGxhdGZvcm06
OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5wb3N0RGVsYXllZFRhc2sobV9iZWdpblRhc2ss
IDApOyAvLyBwb3N0RGVsYXllZFRhc2sgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSB0YXNrCisgICAg
bV90aW1lb3V0VGFzayA9IG5ldyBUaW1lb3V0VGFzayh0aGlzKTsKKyAgICBXZWJLaXQ6OlBsYXRm
b3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9zdERlbGF5ZWRUYXNrKG1fdGltZW91
dFRhc2ssIDUwMDApOworICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRo
cmVhZCgpLT5lbnRlclJ1bkxvb3AoKTsKKworICAgIGlmIChtX2xheWVyVHJlZUhvc3QgJiYgbV9s
YXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290
TGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCgwKTsKKyAgICBtX2xheWVyVHJlZUhvc3QuY2xlYXIo
KTsKKworICAgIGlmIChtX3RpbWVvdXRUYXNrKQorICAgICAgICBtX3RpbWVvdXRUYXNrLT5jbGVh
clRlc3QoKTsKKworICAgIGlmIChtX2VuZFRlc3RUYXNrKQorICAgICAgICBtX2VuZFRlc3RUYXNr
LT5jbGVhclRlc3QoKTsKKworICAgIEFTU0VSVF9GQUxTRShtX2xheWVyVHJlZUhvc3QuZ2V0KCkp
OworICAgIG1fY2xpZW50LmNsZWFyKCk7CisgICAgaWYgKG1fdGltZWRPdXQpIHsKKyAgICAgICAg
RkFJTCgpIDw8ICJUZXN0IHRpbWVkIG91dCI7CisgICAgICAgIFdlYkNvbXBvc2l0b3I6OnNodXRk
b3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWZ0ZXJUZXN0KCk7CisgICAgV2Vi
Q29tcG9zaXRvcjo6c2h1dGRvd24oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0VGVzdHMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRlZFRlc3Qu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRlZFRlc3QuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44MDc2MTM1MWE4MTNiYWJjMzc3MmY1MzA4OGZlMWIzOWY3OGI3NzE5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVkVGVzdC5oCkBA
IC0wLDAgKzEsMjI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGhyZWFkZWRUZXN0X2gK
KyNkZWZpbmUgQ0NUaHJlYWRlZFRlc3RfaAorCisjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VXZWJH
cmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25EZWxlZ2F0
ZS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1Njb3BlZFRocmVhZFByb3h5LmgiCisj
aW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ0NM
YXllckltcGw7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RD
bGllbnQ7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOworY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7CitzdHJ1Y3QgSW50U2l6ZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJU
aHJlYWQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXRUZXN0cyB7CisKKy8vIFVzZWQgYnkgdGVzdCBz
dHVicyB0byBub3RpZnkgdGhlIHRlc3Qgd2hlbiBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVu
cy4KK2NsYXNzIFRlc3RIb29rcyA6IHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyQW5pbWF0aW9uRGVs
ZWdhdGUgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21t
aXRDb21wbGV0ZU9uQ0NUaHJlYWQoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbCopIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9EcmF3T25DQ1RocmVhZChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFk
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGwqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYW5p
bWF0ZUxheWVycyhXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsKiwgZG91YmxlIG1vbm90b25p
Y1RpbWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsQW5pbWF0ZUxheWVycyhXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsKiwgZG91YmxlIG1vbm90b25pY1RpbWUpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBmbG9h
dCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25p
Y1RpbWUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjcmVhdGVDb250ZXh0KGJvb2wgc3VjY2VlZGVkKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkQWRkQW5pbWF0aW9uKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdCgpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KKworICAgIC8vIEltcGxlbWVudGF0aW9u
IG9mIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmlt
YXRpb25TdGFydGVkKGRvdWJsZSB0aW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5p
bWF0aW9uRmluaXNoZWQoZG91YmxlIHRpbWUpIHsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVDb250ZXh0KCk7Cit9OworCitjbGFz
cyBUaW1lb3V0VGFzazsKK2NsYXNzIEJlZ2luVGFzazsKK2NsYXNzIEVuZFRlc3RUYXNrOworCitj
bGFzcyBNb2NrQ0NMYXllclRyZWVIb3N0Q2xpZW50IDogcHVibGljIFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdENsaWVudCB7Cit9OworCisvLyBUaGUgQ0NUaHJlYWRlZFRlc3RzIHJ1bnMgd2l0aCB0
aGUgbWFpbiBsb29wIHJ1bm5pbmcuIEl0IGluc3RhbnRpYXRlcyBhIHNpbmdsZSBNb2NrTGF5ZXJU
cmVlSG9zdCBhbmQgYXNzb2NpYXRlZAorLy8gTW9ja0xheWVyVHJlZUhvc3RJbXBsL01vY2tMYXll
clRyZWVIb3N0Q2xpZW50LgorLy8KKy8vIGJlZ2luVGVzdCgpIGlzIGNhbGxlZCBvbmNlIHRoZSBt
YWluIG1lc3NhZ2UgbG9vcCBpcyBydW5uaW5nIGFuZCB0aGUgbGF5ZXIgdHJlZSBob3N0IGlzIGlu
aXRpYWxpemVkLgorLy8KKy8vIEtleSBzdGFnZXMgb2YgdGhlIGRyYXdpbmcgbG9vcCwgZS5nLiBk
cmF3aW5nIG9yIGNvbW1pdGluZywgcmVkaXJlY3QgdG8gQ0NUaHJlYWRlZFRlc3QgbWV0aG9kcyBv
ZiBzaW1pbGFyIG5hbWVzLgorLy8gVG8gdHJhY2sgdGhlIGNvbW1pdCBwcm9jZXNzLCBvdmVycmlk
ZSB0aGVzZSBmdW5jdGlvbnMuCisvLworLy8gVGhlIHRlc3QgY29udGludWVzIHVudGlsIHNvbWVv
bmUgY2FsbHMgZW5kVGVzdC4gZW5kVGVzdCBjYW4gYmUgY2FsbGVkIG9uIGFueSB0aHJlYWQsIGJ1
dCBiZSBhd2FyZSB0aGF0CisvLyBlbmRpbmcgdGhlIHRlc3QgaXMgYW4gYXN5bmNocm9ub3VzIHBy
b2Nlc3MuCitjbGFzcyBDQ1RocmVhZGVkVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0LCBwdWJs
aWMgVGVzdEhvb2tzIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKSA9IDA7CisKKyAgICB2b2lkIGVuZFRlc3Qo
KTsKKyAgICB2b2lkIGVuZFRlc3RBZnRlckRlbGF5KGludCBkZWxheU1pbGxpc2Vjb25kcyk7CisK
KyAgICB2b2lkIHBvc3RTZXROZWVkc0FuaW1hdGVUb01haW5UaHJlYWQoKTsKKyAgICB2b2lkIHBv
c3RBZGRBbmltYXRpb25Ub01haW5UaHJlYWQoKTsKKyAgICB2b2lkIHBvc3RBZGRJbnN0YW50QW5p
bWF0aW9uVG9NYWluVGhyZWFkKCk7CisgICAgdm9pZCBwb3N0U2V0TmVlZHNDb21taXRUb01haW5U
aHJlYWQoKTsKKyAgICB2b2lkIHBvc3RBY3F1aXJlTGF5ZXJUZXh0dXJlcygpOworICAgIHZvaWQg
cG9zdFNldE5lZWRzUmVkcmF3VG9NYWluVGhyZWFkKCk7CisgICAgdm9pZCBwb3N0U2V0TmVlZHNB
bmltYXRlQW5kQ29tbWl0VG9NYWluVGhyZWFkKCk7CisgICAgdm9pZCBwb3N0U2V0VmlzaWJsZVRv
TWFpblRocmVhZChib29sIHZpc2libGUpOworICAgIHZvaWQgcG9zdERpZEFkZEFuaW1hdGlvblRv
TWFpblRocmVhZCgpOworCisgICAgdm9pZCBkb0JlZ2luVGVzdCgpOworICAgIHZvaWQgdGltZW91
dCgpOworCisgICAgdm9pZCBjbGVhclRpbWVvdXQoKSB7IG1fdGltZW91dFRhc2sgPSAwOyB9Cisg
ICAgdm9pZCBjbGVhckVuZFRlc3RUYXNrKCkgeyBtX2VuZFRlc3RUYXNrID0gMDsgfQorCisgICAg
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KCkgeyByZXR1cm4gbV9sYXll
clRyZWVIb3N0LmdldCgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBDQ1RocmVhZGVkVGVzdCgpOwor
CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7CisKKyAgICBzdGF0aWMgdm9p
ZCBvbkVuZFRlc3Qodm9pZCogc2VsZik7CisKKyAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNldE5l
ZWRzQW5pbWF0ZSh2b2lkKiBzZWxmKTsKKyAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaEFkZEluc3Rh
bnRBbmltYXRpb24odm9pZCogc2VsZik7CisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hBZGRBbmlt
YXRpb24odm9pZCogc2VsZik7CisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTZXROZWVkc0FuaW1h
dGVBbmRDb21taXQodm9pZCogc2VsZik7CisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTZXROZWVk
c0NvbW1pdCh2b2lkKiBzZWxmKTsKKyAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaEFjcXVpcmVMYXll
clRleHR1cmVzKHZvaWQqIHNlbGYpOworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2V0TmVlZHNS
ZWRyYXcodm9pZCogc2VsZik7CisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTZXRWaXNpYmxlKHZv
aWQqIHNlbGYpOworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2V0SW52aXNpYmxlKHZvaWQqIHNl
bGYpOworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ29tcG9zaXRlKHZvaWQqIHNlbGYpOworICAg
IHN0YXRpYyB2b2lkIGRpc3BhdGNoRGlkQWRkQW5pbWF0aW9uKHZvaWQqIHNlbGYpOworCisgICAg
dmlydHVhbCB2b2lkIHJ1blRlc3QoYm9vbCB0aHJlYWRlZCk7CisKKyAgICBXZWJDb3JlOjpDQ1Nl
dHRpbmdzIG1fc2V0dGluZ3M7CisgICAgT3duUHRyPE1vY2tDQ0xheWVyVHJlZUhvc3RDbGllbnQ+
IG1fY2xpZW50OworICAgIE93blB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJU
cmVlSG9zdDsKKworcHJpdmF0ZToKKyAgICBib29sIG1fYmVnaW5uaW5nOworICAgIGJvb2wgbV9l
bmRXaGVuQmVnaW5SZXR1cm5zOworICAgIGJvb2wgbV90aW1lZE91dDsKKyAgICBib29sIG1fZmlu
aXNoZWQ7CisgICAgYm9vbCBtX3NjaGVkdWxlZDsKKyAgICBib29sIG1fc3RhcnRlZDsKKworICAg
IE93blB0cjxXZWJLaXQ6OldlYlRocmVhZD4gbV93ZWJUaHJlYWQ7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkNDU2NvcGVkVGhyZWFkUHJveHk+IG1fbWFpblRocmVhZFByb3h5OworICAgIFRpbWVvdXRU
YXNrKiBtX3RpbWVvdXRUYXNrOworICAgIEJlZ2luVGFzayogbV9iZWdpblRhc2s7CisgICAgRW5k
VGVzdFRhc2sqIG1fZW5kVGVzdFRhc2s7Cit9OworCitjbGFzcyBDQ1RocmVhZGVkVGVzdFRocmVh
ZE9ubHkgOiBwdWJsaWMgQ0NUaHJlYWRlZFRlc3QgeworcHVibGljOgorICAgIHZvaWQgcnVuVGVz
dFRocmVhZGVkKCkKKyAgICB7CisgICAgICAgIENDVGhyZWFkZWRUZXN0OjpydW5UZXN0KHRydWUp
OworICAgIH0KK307CisKKy8vIEFkYXB0cyBDQ0xheWVyVHJlZUhvc3RJbXBsIGZvciB0ZXN0LiBS
dW5zIHJlYWwgY29kZSwgdGhlbiBpbnZva2VzIHRlc3QgaG9va3MuCitjbGFzcyBNb2NrTGF5ZXJU
cmVlSG9zdEltcGwgOiBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGUo
VGVzdEhvb2tzKiwgY29uc3QgV2ViQ29yZTo6Q0NTZXR0aW5ncyYsIFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGxDbGllbnQqKTsKKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOworICAgIHZpcnR1YWwgYm9vbCBwcmVw
YXJlVG9EcmF3KEZyYW1lRGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0
IEZyYW1lRGF0YSYpOworCisgICAgLy8gTWFrZSB0aGVzZSBwdWJsaWMuCisgICAgdHlwZWRlZiBW
ZWN0b3I8V2ViQ29yZTo6Q0NMYXllckltcGwqPiBDQ0xheWVyTGlzdDsKKyAgICB1c2luZyBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVMYXllcnMoZG91YmxlIG1vbm90b25pY1Rp
bWUsIGRvdWJsZSB3YWxsQ2xvY2tUaW1lKTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBsb3dGcmVxdWVu
Y3lBbmltYXRpb25JbnRlcnZhbCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIE1vY2tMYXllclRy
ZWVIb3N0SW1wbChUZXN0SG9va3MqLCBjb25zdCBXZWJDb3JlOjpDQ1NldHRpbmdzJiwgV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOworCisgICAgVGVzdEhvb2tzKiBtX3Rlc3RI
b29rczsKK307CisKK2NsYXNzIENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRo
VGV4dHVyZVRyYWNraW5nIDogcHVibGljIFdlYktpdDo6Q29tcG9zaXRvckZha2VXZWJHcmFwaGlj
c0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q29tcG9zaXRvckZh
a2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc+IGNyZWF0ZShBdHRyaWJ1
dGVzKTsKKworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJHTElkIGNyZWF0ZVRleHR1cmUoKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKFdlYktpdDo6V2ViR0xJZCB0ZXh0dXJlKTsK
KworICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVyZShXZWJLaXQ6OldHQzNEZW51bSB0YXJnZXQs
IFdlYktpdDo6V2ViR0xJZCB0ZXh0dXJlKTsKKworICAgIGludCBudW1UZXh0dXJlcygpIGNvbnN0
OworICAgIGludCB0ZXh0dXJlKGludCB0ZXh0dXJlKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0VGV4
dHVyZXMoKTsKKworICAgIGludCBudW1Vc2VkVGV4dHVyZXMoKSBjb25zdDsKKyAgICBib29sIHVz
ZWRUZXh0dXJlKGludCB0ZXh0dXJlKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0VXNlZFRleHR1cmVz
KCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0Nv
bnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmcoQXR0cmlidXRlcyBhdHRycyk7CisKKyAgICBWZWN0
b3I8V2ViS2l0OjpXZWJHTElkPiBtX3RleHR1cmVzOworICAgIEhhc2hTZXQ8V2ViS2l0OjpXZWJH
TElkLCBEZWZhdWx0SGFzaDxXZWJLaXQ6OldlYkdMSWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPFdlYktpdDo6V2ViR0xJZD4gPiBtX3VzZWRUZXh0dXJlczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdFRlc3RzCisKKyNkZWZpbmUgU0lOR0xFX0FORF9NVUxU
SV9USFJFQURfVEVTVF9GKFRFU1RfRklYVFVSRV9OQU1FKSBcCisgICAgVEVTVF9GKFRFU1RfRklY
VFVSRV9OQU1FLCBydW5TaW5nbGVUaHJlYWQpICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcnVu
VGVzdChmYWxzZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IFRFU1RfRihURVNUX0ZJWFRVUkVfTkFNRSwgcnVuTXVsdGlUaHJlYWQpICAgICAgICAgICAgIFwK
KyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIHJ1blRlc3QodHJ1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIH0KKworI2VuZGlmIC8vIENDVGhyZWFkZWRUZXN0X2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146623</attachid>
            <date>2012-06-08 12:06:42 -0700</date>
            <delta_ts>2012-06-08 19:26:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88668-20120608150641.patch</filename>
            <type>text/plain</type>
            <size>72760</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWFkYjQzMTNiZjBiYWZh
NTY3MjA2ZmRhYWM4Y2ZmZjQzN2U5YjY3Ny4uZmNjMGQ3N2VmMThlNjYxNTRjNTljNzg2Y2E4NmEy
NTI2M2UxODdmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA2LTA4ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2lu
Z2xlIHRocmVhZCBwcm94eSdzIGFuaW1hdGlvbiB0aW1lciBzaG91bGQgc2hvcnQgY2lyY3VpdCBp
ZiB0aGUgbGF5ZXIgcmVuZGVyZXIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODY2OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdDogQ0NTaW5nbGVU
aHJlYWRQcm94eVRlc3REaWRBZGRBbmltYXRpb25CZWZvcmVJbml0aWFsaXppbmdMYXllclJlbmRl
cmVyLnJ1blNpbmdsZVRocmVhZGVkCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmg6CisKIDIwMTItMDYtMDggIEJy
eWFuIE1jUXVhZGUgIDxibWNxdWFkZUBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IEFubm90YXRlIHRpbWVsaW5lIHJlY29yZHMgd2l0aCBhIGZyYW1lIGlkZW50aWZpZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMzRmYjZmZTNiNWI1NTg4ZmQ5ZDRkMTNhOWU4NzM5
YWQ3YzE0NGUwMi4uYWJmYTNkMTMwYzIzMDI4YTc5NDI1MzcxMzdkMTYxNDk4ZWQ2NjMzOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMzcgQEAKKzIwMTItMDYtMDggIElh
biBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBT
aW5nbGUgdGhyZWFkIHByb3h5J3MgYW5pbWF0aW9uIHRpbWVyIHNob3VsZCBzaG9ydCBjaXJjdWl0
IGlmIHRoZSBsYXllciByZW5kZXJlciBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjY4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAg
ICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcDoKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdFdyaXRlTGF5ZXJzUmVkcmF3OjpiZWdpblRlc3QpOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0V3JpdGVMYXllcnNBZnRlclZpc2libGU6OmNvbW1pdENv
bXBsZXRlT25DQ1RocmVhZCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpDQ0xheWVy
VHJlZUhvc3RUZXN0TGF5ZXJBZGRlZFdpdGhBbmltYXRpb246OkNDTGF5ZXJUcmVlSG9zdFRlc3RM
YXllckFkZGVkV2l0aEFuaW1hdGlvbik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RMYXllckFkZGVkV2l0aEFuaW1hdGlvbjo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NM
YXllclRyZWVIb3N0VGVzdExheWVyQWRkZWRXaXRoQW5pbWF0aW9uOjpkaWRBZGRBbmltYXRpb24p
OgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0VGVzdExheWVyQWRkZWRXaXRoQW5pbWF0aW9uKToK
KyAgICAgICAgKiB0ZXN0cy9DQ1NpbmdsZVRocmVhZFByb3h5VGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNETWFrZUN1cnJlbnRGYWlscyk6CisgICAgICAg
IChGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RNYWtlQ3VycmVudEZhaWxzOjptYWtlQ29udGV4dEN1
cnJlbnQpOgorICAgICAgICAoQ0NTaW5nbGVUaHJlYWRQcm94eVRlc3RJbml0aWFsaXplTGF5ZXJS
ZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb24pOgorICAgICAgICAoQ0NTaW5nbGVUaHJlYWRQ
cm94eVRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb246OkND
U2luZ2xlVGhyZWFkUHJveHlUZXN0SW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRk
QW5pbWF0aW9uKToKKyAgICAgICAgKENDU2luZ2xlVGhyZWFkUHJveHlUZXN0SW5pdGlhbGl6ZUxh
eWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uOjpiZWdpblRlc3QpOgorICAgICAgICAo
Q0NTaW5nbGVUaHJlYWRQcm94eVRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJB
ZGRBbmltYXRpb246OmFuaW1hdGVMYXllcnMpOgorICAgICAgICAoQ0NTaW5nbGVUaHJlYWRQcm94
eVRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb246OmRpZFJl
Y3JlYXRlQ29udGV4dCk6CisgICAgICAgIChDQ1NpbmdsZVRocmVhZFByb3h5VGVzdEluaXRpYWxp
emVMYXllclJlbmRlcmVyRmFpbHNBZnRlckFkZEFuaW1hdGlvbjo6YWZ0ZXJUZXN0KToKKyAgICAg
ICAgKFRFU1RfRik6CisgICAgICAgIChDQ1NpbmdsZVRocmVhZFByb3h5VGVzdERpZEFkZEFuaW1h
dGlvbkJlZm9yZUluaXRpYWxpemluZ0xheWVyUmVuZGVyZXIpOgorICAgICAgICAoQ0NTaW5nbGVU
aHJlYWRQcm94eVRlc3REaWRBZGRBbmltYXRpb25CZWZvcmVJbml0aWFsaXppbmdMYXllclJlbmRl
cmVyOjpDQ1NpbmdsZVRocmVhZFByb3h5VGVzdERpZEFkZEFuaW1hdGlvbkJlZm9yZUluaXRpYWxp
emluZ0xheWVyUmVuZGVyZXIpOgorICAgICAgICAoQ0NTaW5nbGVUaHJlYWRQcm94eVRlc3REaWRB
ZGRBbmltYXRpb25CZWZvcmVJbml0aWFsaXppbmdMYXllclJlbmRlcmVyOjpiZWdpblRlc3QpOgor
ICAgICAgICAoQ0NTaW5nbGVUaHJlYWRQcm94eVRlc3REaWRBZGRBbmltYXRpb25CZWZvcmVJbml0
aWFsaXppbmdMYXllclJlbmRlcmVyOjphbmltYXRlTGF5ZXJzKToKKyAgICAgICAgKENDU2luZ2xl
VGhyZWFkUHJveHlUZXN0RGlkQWRkQW5pbWF0aW9uQmVmb3JlSW5pdGlhbGl6aW5nTGF5ZXJSZW5k
ZXJlcjo6ZGlkUmVjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKENDU2luZ2xlVGhyZWFkUHJveHlU
ZXN0RGlkQWRkQW5pbWF0aW9uQmVmb3JlSW5pdGlhbGl6aW5nTGF5ZXJSZW5kZXJlcjo6ZGlkQWRk
QW5pbWF0aW9uKToKKyAgICAgICAgKENDU2luZ2xlVGhyZWFkUHJveHlUZXN0RGlkQWRkQW5pbWF0
aW9uQmVmb3JlSW5pdGlhbGl6aW5nTGF5ZXJSZW5kZXJlcjo6YWZ0ZXJUZXN0KToKKyAgICAgICAg
KiB0ZXN0cy9DQ1RocmVhZGVkVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0VGVzdHMp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0
M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNv
bXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpjcmVh
dGVUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDb21wb3NpdG9yRmFrZVdlYkdyYXBo
aWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0
dXJlVHJhY2tpbmc6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDb21wb3Np
dG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6bnVtVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250
ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjp0ZXh0dXJlKToKKyAgICAgICAgKFdlYktpdFRlc3Rz
OjpDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6
cmVzZXRUZXh0dXJlcyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q29tcG9zaXRvckZha2VXZWJH
cmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc6Om51bVVzZWRUZXh0dXJlcyk6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdp
dGhUZXh0dXJlVHJhY2tpbmc6OnVzZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpD
b21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6cmVz
ZXRVc2VkVGV4dHVyZXMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNvbXBvc2l0b3JGYWtlV2Vi
R3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpDb21wb3NpdG9yRmFrZVdlYkdy
YXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZyk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6VGVzdEhvb2tzOjpjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpNb2Nr
TGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9ja0xh
eWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9j
a0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6Ok1vY2tMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpsb3dGcmVxdWVuY3lBbmltYXRp
b25JbnRlcnZhbCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9ja0xheWVyVHJlZUhvc3RJbXBs
OjpNb2NrTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoTW9ja0xheWVyVHJlZUhvc3QpOgor
ICAgICAgICAoV2ViS2l0VGVzdHM6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6Ok1vY2tMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1w
bCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6TW9ja0xheWVyVHJlZUhvc3Q6Ok1vY2tMYXllclRy
ZWVIb3N0KToKKyAgICAgICAgKE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpNb2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6TW9ja0xheWVyVHJlZUhvc3RDbGll
bnQpOgorICAgICAgICAoVGltZW91dFRhc2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRpbWVv
dXRUYXNrOjpUaW1lb3V0VGFzayk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VGltZW91dFRhc2s6
OmNsZWFyVGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VGltZW91dFRhc2s6On5UaW1lb3V0
VGFzayk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VGltZW91dFRhc2s6OnJ1bik6CisgICAgICAg
IChCZWdpblRhc2spOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkJlZ2luVGFzazo6QmVnaW5UYXNr
KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpCZWdpblRhc2s6On5CZWdpblRhc2spOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkJlZ2luVGFzazo6cnVuKToKKyAgICAgICAgKEVuZFRlc3RUYXNrKToK
KyAgICAgICAgKFdlYktpdFRlc3RzOjpFbmRUZXN0VGFzazo6RW5kVGVzdFRhc2spOgorICAgICAg
ICAoV2ViS2l0VGVzdHM6OkVuZFRlc3RUYXNrOjp+RW5kVGVzdFRhc2spOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OkVuZFRlc3RUYXNrOjpjbGVhclRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkVuZFRlc3RUYXNrOjpydW4pOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0
OjpDQ1RocmVhZGVkVGVzdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NUaHJlYWRlZFRlc3Q6
OmVuZFRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0OjplbmRUZXN0
QWZ0ZXJEZWxheSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NUaHJlYWRlZFRlc3Q6OnBvc3RT
ZXROZWVkc0FuaW1hdGVUb01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhy
ZWFkZWRUZXN0Ojpwb3N0QWRkQW5pbWF0aW9uVG9NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktp
dFRlc3RzOjpDQ1RocmVhZGVkVGVzdDo6cG9zdEFkZEluc3RhbnRBbmltYXRpb25Ub01haW5UaHJl
YWQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0Ojpwb3N0U2V0TmVlZHND
b21taXRUb01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0
Ojpwb3N0QWNxdWlyZUxheWVyVGV4dHVyZXMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhy
ZWFkZWRUZXN0Ojpwb3N0U2V0TmVlZHNSZWRyYXdUb01haW5UaHJlYWQpOgorICAgICAgICAoV2Vi
S2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0Ojpwb3N0U2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0VG9N
YWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ1RocmVhZGVkVGVzdDo6cG9zdFNl
dFZpc2libGVUb01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRU
ZXN0Ojpwb3N0RGlkQWRkQW5pbWF0aW9uVG9NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdFRl
c3RzOjpDQ1RocmVhZGVkVGVzdDo6ZG9CZWdpblRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkNDVGhyZWFkZWRUZXN0Ojp0aW1lb3V0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ1RocmVh
ZGVkVGVzdDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhy
ZWFkZWRUZXN0OjpvbkVuZFRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRU
ZXN0OjpkaXNwYXRjaFNldE5lZWRzQW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NU
aHJlYWRlZFRlc3Q6OmRpc3BhdGNoQWRkSW5zdGFudEFuaW1hdGlvbik6CisgICAgICAgIChXZWJL
aXRUZXN0czo6Q0NUaHJlYWRlZFRlc3Q6OmRpc3BhdGNoQWRkQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYktpdFRlc3RzOjpDQ1RocmVhZGVkVGVzdDo6ZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGVBbmRD
b21taXQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaFNl
dE5lZWRzQ29tbWl0KToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpDQ1RocmVhZGVkVGVzdDo6ZGlz
cGF0Y2hBY3F1aXJlTGF5ZXJUZXh0dXJlcyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NUaHJl
YWRlZFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkNDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaFNldFZpc2libGUpOgorICAgICAgICAoV2ViS2l0VGVz
dHM6OkNDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaFNldEludmlzaWJsZSk6CisgICAgICAgIChXZWJL
aXRUZXN0czo6Q0NUaHJlYWRlZFRlc3Q6OmRpc3BhdGNoQ29tcG9zaXRlKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpDQ1RocmVhZGVkVGVzdDo6ZGlzcGF0Y2hEaWRBZGRBbmltYXRpb24pOgorICAg
ICAgICAoV2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0OjpydW5UZXN0KToKKyAgICAgICAgKiB0
ZXN0cy9DQ1RocmVhZGVkVGVzdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdFRlc3RzKToKKyAgICAgICAgKFRlc3RIb29rcyk6
CisgICAgICAgIChXZWJLaXRUZXN0czo6VGVzdEhvb2tzOjpiZWdpbkNvbW1pdE9uQ0NUaHJlYWQp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRlc3RIb29rczo6Y29tbWl0Q29tcGxldGVPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpUZXN0SG9va3M6OnByZXBhcmVUb0RyYXdPbkND
VGhyZWFkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpUZXN0SG9va3M6OmRyYXdMYXllcnNPbkND
VGhyZWFkKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpUZXN0SG9va3M6OmFuaW1hdGVMYXllcnMp
OgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRlc3RIb29rczo6d2lsbEFuaW1hdGVMYXllcnMpOgor
ICAgICAgICAoV2ViS2l0VGVzdHM6OlRlc3RIb29rczo6YXBwbHlTY3JvbGxBbmRTY2FsZSk6Cisg
ICAgICAgIChXZWJLaXRUZXN0czo6VGVzdEhvb2tzOjp1cGRhdGVBbmltYXRpb25zKToKKyAgICAg
ICAgKFdlYktpdFRlc3RzOjpUZXN0SG9va3M6OmxheW91dCk6CisgICAgICAgIChXZWJLaXRUZXN0
czo6VGVzdEhvb2tzOjpkaWRSZWNyZWF0ZUNvbnRleHQpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OlRlc3RIb29rczo6ZGlkQWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpUZXN0
SG9va3M6OmRpZENvbW1pdCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VGVzdEhvb2tzOjpkaWRD
b21taXRBbmREcmF3RnJhbWUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRlc3RIb29rczo6c2No
ZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRlc3RIb29rczo6bm90aWZ5
QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VGVzdEhvb2tzOjpub3Rp
ZnlBbmltYXRpb25GaW5pc2hlZCk6CisgICAgICAgIChDQ1RocmVhZGVkVGVzdCk6CisgICAgICAg
IChXZWJLaXRUZXN0czo6Q0NUaHJlYWRlZFRlc3Q6OmNsZWFyVGltZW91dCk6CisgICAgICAgIChX
ZWJLaXRUZXN0czo6Q0NUaHJlYWRlZFRlc3Q6OmNsZWFyRW5kVGVzdFRhc2spOgorICAgICAgICAo
V2ViS2l0VGVzdHM6OkNDVGhyZWFkZWRUZXN0OjpsYXllclRyZWVIb3N0KToKKyAgICAgICAgKEND
VGhyZWFkZWRUZXN0VGhyZWFkT25seSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NUaHJlYWRl
ZFRlc3RUaHJlYWRPbmx5OjpydW5UZXN0VGhyZWFkZWQpOgorICAgICAgICAoTW9ja0xheWVyVHJl
ZUhvc3RJbXBsKToKKyAgICAgICAgKENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RX
aXRoVGV4dHVyZVRyYWNraW5nKToKKwogMjAxMi0wNi0wOCAgVGFpanUgVHN1aWtpICA8dHppa0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIEZpbGVTeXN0ZW0gaXRlbSB0byBzdG9yYWdlIHRy
ZWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IGE2MmNkNmIz
Yjc3NWNjNjg4ZGQ4NzViZjk2NjQ2MTEyYzQ0YTNhY2YuLjhmMzA1MmQ5MzE2YzQ3YTg4Y2ViMWUw
Yjk2ZjNjMDE4MTk0N2ZhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwCkBAIC00NCw3ICs0NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBvblRpbWVy
RmlyZWQoKSBPVkVSUklERQogICAgIHsKLSAgICAgICAgbV9wcm94eS0+Y29tcG9zaXRlSW1tZWRp
YXRlbHkoKTsKKyAgICAgICAgaWYgKG1fcHJveHktPm1fbGF5ZXJSZW5kZXJlckluaXRpYWxpemVk
KQorICAgICAgICAgICAgbV9wcm94eS0+Y29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKICAgICB9CiAK
IHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKaW5kZXggNjQ1YThh
OWE0YWQxMTc0YzM2ZTFlZDIwNzE5ZWQxN2ViM2U4ZjdlZi4uZDMyNTNlMjVjN2YyOGYwY2FjOTRl
OTQ2OThkYWE2NmE5MDk2OTFiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
aApAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGRvdWJsZSBhbmltYXRpb25U
aW1lckRlbGF5KCk7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENDU2luZ2xlVGhyZWFk
UHJveHlBbmltYXRpb25UaW1lcjsKKwogICAgIGV4cGxpY2l0IENDU2luZ2xlVGhyZWFkUHJveHko
Q0NMYXllclRyZWVIb3N0Kik7CiAKICAgICBib29sIGNvbW1pdEFuZENvbXBvc2l0ZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZjIzMTU0YWU0MDQ1N2I3ZTgwNzk5NzM4NzMx
OTRiY2EyMGE2N2I3MS4uYzE4NzI4YjAwOTMwYWFiMGEyMzRlMTIzODVmYjE2NTdlNGQwZTE0YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC04NiwxMSArODYsMTQgQEAKICAgICAg
ICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclN0YXRlTWFjaGluZVRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NTY2hlZHVsZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NTaW5nbGVUaHJlYWRQ
cm94eVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NvbGlkQ29sb3JMYXllckltcGxU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9DQ1RpbGVkTGF5ZXJUZXN0Q29tbW9uLmgnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21tb24uY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ1RocmVhZFRhc2tUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRlZFRl
c3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZGVkVGVzdC5oJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ1RpbWVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NsaXBib2Fy
ZENocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NvbXBvc2l0b3JGYWtlR3Jh
cGhpY3NDb250ZXh0M0QuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCBhYTI3ZTg4ZjdkYzNlZDgwODAyMTA2NDlj
Y2QwYmUzMDAyN2NmMGJmLi5hOWVjOTFjZTcxMWZhY2E5MmIxMDkzMzBkMmIzNTM2MDE5MjIzMGRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVI
b3N0VGVzdC5jcHAKQEAgLTI3LDM4ICsyNywxOSBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdC5oIgogCiAjaW5jbHVkZSAiQW5pbWF0aW9uSWRWZW5kb3IuaCIKLSNpbmNsdWRlICJDQ0Fu
aW1hdGlvblRlc3RDb21tb24uaCIKICNpbmNsdWRlICJDQ09jY2x1c2lvblRyYWNrZXJUZXN0Q29t
bW9uLmgiCi0jaW5jbHVkZSAiQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgIkNv
bXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJDQ1RocmVhZGVk
VGVzdC5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiRmFr
ZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgiCi0jaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYW5h
Z2VyLmgiCi0jaW5jbHVkZSAiV2ViQ29tcG9zaXRvci5oIgotI2luY2x1ZGUgIldlYktpdC5oIgot
I2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uRGVsZWdh
dGUuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaCIKLSNpbmNsdWRlICJjYy9DQ1Njb3BlZFRocmVhZFByb3h5LmgiCi0jaW5j
bHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVw
ZGF0ZXIuaCIKLSNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJjYy9DQ1Rp
bWluZ0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVGhyZWFkLmgiCiAjaW5jbHVk
ZSA8Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHB1
YmxpYy9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaD4K
LSNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9M
b2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKQEAgLTczLDcxNCArNTQs
OCBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgewogCi1jbGFzcyBDb21wb3Np
dG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZyA6IHB1YmxpYyBD
b21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVU
cmFja2luZz4gY3JlYXRlKEF0dHJpYnV0ZXMgYXR0cnMpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVy
ZVRyYWNraW5nKGF0dHJzKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBXZWJHTElkIGNyZWF0ZVRl
eHR1cmUoKQotICAgIHsKLSAgICAgICAgV2ViR0xJZCB0ZXh0dXJlID0gbV90ZXh0dXJlcy5zaXpl
KCkgKyAxOwotICAgICAgICBtX3RleHR1cmVzLmFwcGVuZCh0ZXh0dXJlKTsKLSAgICAgICAgcmV0
dXJuIHRleHR1cmU7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUoV2Vi
R0xJZCB0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Rl
eHR1cmVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlc1tpXSA9PSB0
ZXh0dXJlKSB7Ci0gICAgICAgICAgICAgICAgbV90ZXh0dXJlcy5yZW1vdmUoaSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYmluZFRleHR1cmUoV0dDM0RlbnVtIC8qIHRhcmdldCAqLywgV2ViR0xJZCB0
ZXh0dXJlKQotICAgIHsKLSAgICAgICAgbV91c2VkVGV4dHVyZXMuYWRkKHRleHR1cmUpOwotICAg
IH0KLQotICAgIGludCBudW1UZXh0dXJlcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4obV90ZXh0dXJlcy5zaXplKCkpOyB9Ci0gICAgaW50IHRleHR1cmUoaW50IGkpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dHVyZXNbaV07IH0KLSAgICB2b2lkIHJlc2V0VGV4dHVyZXMoKSB7IG1fdGV4
dHVyZXMuY2xlYXIoKTsgfQotCi0gICAgaW50IG51bVVzZWRUZXh0dXJlcygpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4obV91c2VkVGV4dHVyZXMuc2l6ZSgpKTsgfQotICAgIGJvb2wg
dXNlZFRleHR1cmUoaW50IHRleHR1cmUpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFRleHR1cmVzLmZp
bmQodGV4dHVyZSkgIT0gbV91c2VkVGV4dHVyZXMuZW5kKCk7IH0KLSAgICB2b2lkIHJlc2V0VXNl
ZFRleHR1cmVzKCkgeyBtX3VzZWRUZXh0dXJlcy5jbGVhcigpOyB9Ci0KLXByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJh
Y2tpbmcoQXR0cmlidXRlcyBhdHRycykgOiBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4
dDNEKGF0dHJzKQotICAgIHsKLSAgICB9Ci0KLSAgICBWZWN0b3I8V2ViR0xJZD4gbV90ZXh0dXJl
czsKLSAgICBIYXNoU2V0PFdlYkdMSWQsIERlZmF1bHRIYXNoPFdlYkdMSWQ+OjpIYXNoLCBVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxXZWJHTElkPiA+IG1fdXNlZFRleHR1cmVzOwotfTsK
LQotLy8gVXNlZCBieSB0ZXN0IHN0dWJzIHRvIG5vdGlmeSB0aGUgdGVzdCB3aGVuIHNvbWV0aGlu
ZyBpbnRlcmVzdGluZyBoYXBwZW5zLgotY2xhc3MgVGVzdEhvb2tzIDogcHVibGljIENDTGF5ZXJB
bmltYXRpb25EZWxlZ2F0ZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0
T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNv
bW1pdENvbXBsZXRlT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHByZXBhcmVUb0RyYXdPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0
SW1wbCopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9z
dEltcGwqLCBkb3VibGUgbW9ub3RvbmljVGltZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxB
bmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGwqLCBkb3VibGUgbW9ub3RvbmljVGltZSkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYs
IGZsb2F0KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgbW9u
b3RvbmljVGltZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNyZWF0ZUNvbnRleHQoYm9vbCBzdWNjZWVkZWQpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21taXQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJh
d0ZyYW1lKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgeyB9Ci0K
LSAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUKLSAgICB2
aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgdGltZSkgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGRvdWJsZSB0aW1lKSB7IH0KLQot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlQ29udGV4dCgp
Ci0gICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKLSAg
ICAgICAgV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgd2ViQXR0cnM7Ci0gICAgICAg
IHdlYkF0dHJzLmFscGhhID0gYXR0cnMuYWxwaGE7Ci0KLSAgICAgICAgT3duUHRyPFdlYkdyYXBo
aWNzQ29udGV4dDNEPiB3ZWJDb250ZXh0ID0gQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRl
eHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc6OmNyZWF0ZSh3ZWJBdHRycyk7Ci0gICAgICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJD
b250ZXh0KHdlYkNvbnRleHQucmVsZWFzZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGly
ZWN0bHlUb0hvc3RXaW5kb3cpOwotICAgIH0KLX07Ci0KLS8vIEFkYXB0cyBDQ0xheWVyVHJlZUhv
c3RJbXBsIGZvciB0ZXN0LiBSdW5zIHJlYWwgY29kZSwgdGhlbiBpbnZva2VzIHRlc3QgaG9va3Mu
Ci1jbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdEltcGwgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1w
bCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8TW9ja0xheWVyVHJlZUhvc3RJbXBs
PiBjcmVhdGUoVGVzdEhvb2tzKiB0ZXN0SG9va3MsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdz
LCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVIb3N0SW1wbCh0ZXN0SG9va3MsIHNldHRpbmdz
LCBjbGllbnQpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKQotICAg
IHsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5Db21taXQoKTsKLSAgICAgICAg
bV90ZXN0SG9va3MtPmJlZ2luQ29tbWl0T25DQ1RocmVhZCh0aGlzKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKQotICAgIHsKLSAgICAgICAgQ0NMYXllclRyZWVI
b3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKTsKLSAgICAgICAgbV90ZXN0SG9va3MtPmNvbW1pdENv
bXBsZXRlT25DQ1RocmVhZCh0aGlzKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcHJlcGFy
ZVRvRHJhdyhGcmFtZURhdGEmIGZyYW1lKQotICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KGZyYW1lKTsKLSAgICAgICAgbV90ZXN0
SG9va3MtPnByZXBhcmVUb0RyYXdPbkNDVGhyZWFkKHRoaXMpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IEZyYW1lRGF0
YSYgZnJhbWUpCi0gICAgewotICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
KGZyYW1lKTsKLSAgICAgICAgbV90ZXN0SG9va3MtPmRyYXdMYXllcnNPbkNDVGhyZWFkKHRoaXMp
OwotICAgIH0KLQotICAgIC8vIE1ha2UgdGhlc2UgcHVibGljLgotICAgIHR5cGVkZWYgVmVjdG9y
PENDTGF5ZXJJbXBsKj4gQ0NMYXllckxpc3Q7Ci0gICAgdXNpbmcgQ0NMYXllclRyZWVIb3N0SW1w
bDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLQotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2Fs
bENsb2NrVGltZSkKLSAgICB7Ci0gICAgICAgIG1fdGVzdEhvb2tzLT53aWxsQW5pbWF0ZUxheWVy
cyh0aGlzLCBtb25vdG9uaWNUaW1lKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5p
bWF0ZUxheWVycyhtb25vdG9uaWNUaW1lLCB3YWxsQ2xvY2tUaW1lKTsKLSAgICAgICAgbV90ZXN0
SG9va3MtPmFuaW1hdGVMYXllcnModGhpcywgbW9ub3RvbmljVGltZSk7Ci0gICAgfQotCi0gICAg
dmlydHVhbCBkb3VibGUgbG93RnJlcXVlbmN5QW5pbWF0aW9uSW50ZXJ2YWwoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIDEuMCAvIDYwOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNb2Nr
TGF5ZXJUcmVlSG9zdEltcGwoVGVzdEhvb2tzKiB0ZXN0SG9va3MsIGNvbnN0IENDU2V0dGluZ3Mm
IHNldHRpbmdzLCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCi0gICAgICAgIDog
Q0NMYXllclRyZWVIb3N0SW1wbChzZXR0aW5ncywgY2xpZW50KQotICAgICAgICAsIG1fdGVzdEhv
b2tzKHRlc3RIb29rcykKLSAgICB7Ci0gICAgfQotCi0gICAgVGVzdEhvb2tzKiBtX3Rlc3RIb29r
czsKLX07Ci0KLS8vIEFkYXB0cyBDQ0xheWVyVHJlZUhvc3QgZm9yIHRlc3QuIEluamVjdHMgTW9j
a0xheWVyVHJlZUhvc3RJbXBsLgotY2xhc3MgTW9ja0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgQ0NM
YXllclRyZWVIb3N0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJU
cmVlSG9zdD4gY3JlYXRlKFRlc3RIb29rcyogdGVzdEhvb2tzLCBDQ0xheWVyVHJlZUhvc3RDbGll
bnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXIsIGNvbnN0IEND
U2V0dGluZ3MmIHNldHRpbmdzKQotICAgIHsKLSAgICAgICAgLy8gRm9yIHRoZXNlIHRlc3RzLCB3
ZSB3aWxsIGVuYWJsZSB0aHJlYWRlZCBhbmltYXRpb25zLgotICAgICAgICBDQ1NldHRpbmdzIHNl
dHRpbmdzQ29weSA9IHNldHRpbmdzOwotICAgICAgICBzZXR0aW5nc0NvcHkudGhyZWFkZWRBbmlt
YXRpb25FbmFibGVkID0gdHJ1ZTsKLQotICAgICAgICBPd25QdHI8TW9ja0xheWVyVHJlZUhvc3Q+
IGxheWVyVHJlZUhvc3QoYWRvcHRQdHIobmV3IE1vY2tMYXllclRyZWVIb3N0KHRlc3RIb29rcywg
Y2xpZW50LCBzZXR0aW5nc0NvcHkpKSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGxheWVyVHJl
ZUhvc3QtPmluaXRpYWxpemUoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoc3VjY2Vzcyk7Ci0gICAg
ICAgIGxheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290TGF5ZXIpOwotCi0gICAgICAgIC8v
IExheWVyVHJlZUhvc3RJbXBsIHdvbid0IGRyYXcgaWYgaXQgaGFzIDF4MSB2aWV3cG9ydC4KLSAg
ICAgICAgbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKEludFNpemUoMSwgMSkpOwotCi0g
ICAgICAgIGxheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5zZXRMYXllckFuaW1hdGlvbkRlbGVn
YXRlKHRlc3RIb29rcyk7Ci0KLSAgICAgICAgcmV0dXJuIGxheWVyVHJlZUhvc3QucmVsZWFzZSgp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBj
cmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQp
Ci0gICAgewotICAgICAgICAvLyBGb3IgdGhlc2UgdGVzdHMsIHdlIHdpbGwgZW5hYmxlIHRocmVh
ZGVkIGFuaW1hdGlvbnMuCi0gICAgICAgIENDU2V0dGluZ3MgY29weVNldHRpbmdzID0gc2V0dGlu
Z3MoKTsKLSAgICAgICAgY29weVNldHRpbmdzLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCA9IHRy
dWU7Ci0gICAgICAgIHJldHVybiBNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShtX3Rlc3RI
b29rcywgY29weVNldHRpbmdzLCBjbGllbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBk
aWRBZGRBbmltYXRpb24oKSBPVkVSUklERQotICAgIHsKLSAgICAgICAgbV9kaWRBZGRBbmltYXRp
b25XYXNDYWxsZWQgPSB0cnVlOwotICAgICAgICBDQ0xheWVyVHJlZUhvc3Q6OmRpZEFkZEFuaW1h
dGlvbigpOwotICAgIH0KLQotICAgIGJvb2wgZGlkQWRkQW5pbWF0aW9uV2FzQ2FsbGVkKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2RpZEFkZEFuaW1hdGlvbldhc0NhbGxlZDsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgTW9ja0xheWVyVHJlZUhvc3QoVGVzdEhvb2tzKiB0ZXN0SG9va3MsIEND
TGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykK
LSAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xpZW50LCBzZXR0aW5ncykKLSAgICAgICAgLCBt
X3Rlc3RIb29rcyh0ZXN0SG9va3MpCi0gICAgICAgICwgbV9kaWRBZGRBbmltYXRpb25XYXNDYWxs
ZWQoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIFRlc3RIb29rcyogbV90ZXN0SG9va3M7Ci0g
ICAgYm9vbCBtX2RpZEFkZEFuaW1hdGlvbldhc0NhbGxlZDsKLX07Ci0KLS8vIEltcGxlbWVudGF0
aW9uIG9mIENDTGF5ZXJUcmVlSG9zdCBjYWxsYmFjayBpbnRlcmZhY2UuCi1jbGFzcyBNb2NrTGF5
ZXJUcmVlSG9zdENsaWVudCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tMYXllclRyZWVIb3N0Q2xpZW50PiBjcmVhdGUo
VGVzdEhvb2tzKiB0ZXN0SG9va3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KHRlc3RIb29rcykpOwotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCB3aWxsQmVnaW5GcmFtZSgpIE9WRVJSSURFCi0gICAgewotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCBkaWRCZWdpbkZyYW1lKCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1RpbWUpIE9WRVJS
SURFCi0gICAgewotICAgICAgICBtX3Rlc3RIb29rcy0+dXBkYXRlQW5pbWF0aW9ucyhtb25vdG9u
aWNUaW1lKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgT1ZFUlJJREUKLSAg
ICB7Ci0gICAgICAgIG1fdGVzdEhvb2tzLT5sYXlvdXQoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxv
YXQgc2NhbGUpIE9WRVJSSURFCi0gICAgewotICAgICAgICBtX3Rlc3RIb29rcy0+YXBwbHlTY3Jv
bGxBbmRTY2FsZShzY3JvbGxEZWx0YSwgc2NhbGUpOwotICAgIH0KLQotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlQ29udGV4dDNEKCkgT1ZFUlJJREUKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3Rlc3RIb29rcy0+Y3JlYXRlQ29udGV4dCgpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB3aWxsQ29tbWl0KCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdCgpIE9WRVJSSURFCi0gICAgewotICAgICAgICBt
X3Rlc3RIb29rcy0+ZGlkQ29tbWl0KCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZENv
bW1pdEFuZERyYXdGcmFtZSgpIE9WRVJSSURFCi0gICAgewotICAgICAgICBtX3Rlc3RIb29rcy0+
ZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZENv
bXBsZXRlU3dhcEJ1ZmZlcnMoKSBPVkVSUklERQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjcmVhdGVDb250ZXh0KGJvb2wgc3VjY2VlZGVkKSBPVkVSUklERQotICAgIHsK
LSAgICAgICAgbV90ZXN0SG9va3MtPmRpZFJlY3JlYXRlQ29udGV4dChzdWNjZWVkZWQpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIE9WRVJSSURFCi0gICAg
ewotICAgICAgICBtX3Rlc3RIb29rcy0+c2NoZWR1bGVDb21wb3NpdGUoKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgZXhwbGljaXQgTW9ja0xheWVyVHJlZUhvc3RDbGllbnQoVGVzdEhvb2tzKiB0
ZXN0SG9va3MpIDogbV90ZXN0SG9va3ModGVzdEhvb2tzKSB7IH0KLQotICAgIFRlc3RIb29rcyog
bV90ZXN0SG9va3M7Ci19OwotCi0vLyBUaGUgQ0NMYXllclRyZWVIb3N0VGVzdCBydW5zIHdpdGgg
dGhlIG1haW4gbG9vcCBydW5uaW5nLiBJdCBpbnN0YW50aWF0ZXMgYSBzaW5nbGUgTW9ja0xheWVy
VHJlZUhvc3QgYW5kIGFzc29jaWF0ZWQKLS8vIE1vY2tMYXllclRyZWVIb3N0SW1wbC9Nb2NrTGF5
ZXJUcmVlSG9zdENsaWVudC4KLS8vCi0vLyBiZWdpblRlc3QoKSBpcyBjYWxsZWQgb25jZSB0aGUg
bWFpbiBtZXNzYWdlIGxvb3AgaXMgcnVubmluZyBhbmQgdGhlIGxheWVyIHRyZWUgaG9zdCBpcyBp
bml0aWFsaXplZC4KLS8vCi0vLyBLZXkgc3RhZ2VzIG9mIHRoZSBkcmF3aW5nIGxvb3AsIGUuZy4g
ZHJhd2luZyBvciBjb21taXRpbmcsIHJlZGlyZWN0IHRvIENDTGF5ZXJUcmVlSG9zdFRlc3QgbWV0
aG9kcyBvZiBzaW1pbGFyIG5hbWVzLgotLy8gVG8gdHJhY2sgdGhlIGNvbW1pdCBwcm9jZXNzLCBv
dmVycmlkZSB0aGVzZSBmdW5jdGlvbnMuCi0vLwotLy8gVGhlIHRlc3QgY29udGludWVzIHVudGls
IHNvbWVvbmUgY2FsbHMgZW5kVGVzdC4gZW5kVGVzdCBjYW4gYmUgY2FsbGVkIG9uIGFueSB0aHJl
YWQsIGJ1dCBiZSBhd2FyZSB0aGF0Ci0vLyBlbmRpbmcgdGhlIHRlc3QgaXMgYW4gYXN5bmNocm9u
b3VzIHByb2Nlc3MuCi1jbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0IDogcHVibGljIHRlc3Rpbmc6
OlRlc3QsIFRlc3RIb29rcyB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkgPSAwOwotCi0gICAgdm9pZCBlbmRU
ZXN0KCk7Ci0gICAgdm9pZCBlbmRUZXN0QWZ0ZXJEZWxheShpbnQgZGVsYXlNaWxsaXNlY29uZHMp
OwotCi0gICAgdm9pZCBwb3N0U2V0TmVlZHNBbmltYXRlVG9NYWluVGhyZWFkKCkKLSAgICB7Ci0g
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hTZXRO
ZWVkc0FuaW1hdGUsIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgcG9zdEFkZEFuaW1hdGlvblRv
TWFpblRocmVhZCgpCi0gICAgewotICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVl
SG9zdFRlc3Q6OmRpc3BhdGNoQWRkQW5pbWF0aW9uLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHBvc3RBZGRJbnN0YW50QW5pbWF0aW9uVG9NYWluVGhyZWFkKCkKLSAgICB7Ci0gICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoQ0NMYXllclRyZWVIb3N0VGVzdDo6ZGlzcGF0Y2hBZGRJbnN0YW50QW5p
bWF0aW9uLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHBvc3RTZXROZWVkc0NvbW1pdFRvTWFp
blRocmVhZCgpCi0gICAgewotICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9z
dFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNDb21taXQsIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQg
QWNxdWlyZUxheWVyVGV4dHVyZXMoKQotICAgIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChD
Q0xheWVyVHJlZUhvc3RUZXN0OjpkaXNwYXRjaEFjcXVpcmVMYXllclRleHR1cmVzLCB0aGlzKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHBvc3RTZXROZWVkc1JlZHJhd1RvTWFpblRocmVhZCgpCi0gICAg
ewotICAgICAgICBjYWxsT25NYWluVGhyZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNo
U2V0TmVlZHNSZWRyYXcsIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgcG9zdFNldE5lZWRzQW5p
bWF0ZUFuZENvbW1pdFRvTWFpblRocmVhZCgpCi0gICAgewotICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0
LCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHBvc3RTZXRWaXNpYmxlVG9NYWluVGhyZWFkKGJv
b2wgdmlzaWJsZSkKLSAgICB7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQodmlzaWJsZSA/IEND
TGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoU2V0VmlzaWJsZSA6IENDTGF5ZXJUcmVlSG9zdFRl
c3Q6OmRpc3BhdGNoU2V0SW52aXNpYmxlLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRpbWVv
dXQoKQotICAgIHsKLSAgICAgICAgbV90aW1lZE91dCA9IHRydWU7Ci0gICAgICAgIGVuZFRlc3Qo
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyVGltZW91dCgpCi0gICAgewotICAgICAgICBtX3Rp
bWVvdXRUYXNrID0gMDsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyRW5kVGVzdFRhc2soKQotICAg
IHsKLSAgICAgICAgbV9lbmRUZXN0VGFzayA9IDA7Ci0gICAgfQotCi0gICAgQ0NMYXllclRyZWVI
b3N0KiBsYXllclRyZWVIb3N0KCkgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0LmdldCgpOyB9Ci0K
LQotcHJvdGVjdGVkOgotICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QoKQotICAgICAgICA6IG1fYmVn
aW5uaW5nKGZhbHNlKQotICAgICAgICAsIG1fZW5kV2hlbkJlZ2luUmV0dXJucyhmYWxzZSkKLSAg
ICAgICAgLCBtX3RpbWVkT3V0KGZhbHNlKQotICAgICAgICAsIG1fZmluaXNoZWQoZmFsc2UpCi0g
ICAgICAgICwgbV9zY2hlZHVsZWQoZmFsc2UpCi0gICAgICAgICwgbV9zdGFydGVkKGZhbHNlKQot
ICAgICAgICAsIG1fZW5kVGVzdFRhc2soMCkKLSAgICB7IH0KLQotICAgIHZvaWQgZG9CZWdpblRl
c3QoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpCi0gICAgewotICAg
ICAgICBpZiAoIW1fc3RhcnRlZCB8fCBtX3NjaGVkdWxlZCB8fCBtX2ZpbmlzaGVkKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBtX3NjaGVkdWxlZCA9IHRydWU7Ci0gICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoJkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoQ29tcG9zaXRlLCB0aGlz
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBvbkVuZFRlc3Qodm9pZCogc2VsZikKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgICAgIFdlYktpdDo6UGxhdGZv
cm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5leGl0UnVuTG9vcCgpOwotICAgIH0KLQot
ICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2V0TmVlZHNBbmltYXRlKHZvaWQqIHNlbGYpCi0gICAg
ewotICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7
Ci0gICAgICAgIEFTU0VSVCh0ZXN0KTsKLSAgICAgICAgaWYgKHRlc3QtPm1fZmluaXNoZWQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9zdCkK
LSAgICAgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNBbmltYXRlKCk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hBZGRJbnN0YW50QW5pbWF0aW9uKHZvaWQq
IHNlbGYpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgICAg
IENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RU
ZXN0Kj4oc2VsZik7Ci0gICAgICAgIEFTU0VSVCh0ZXN0KTsKLSAgICAgICAgaWYgKHRlc3QtPm1f
ZmluaXNoZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRlc3QtPm1fbGF5
ZXJUcmVlSG9zdCAmJiB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpKQotICAgICAg
ICAgICAgYWRkT3BhY2l0eVRyYW5zaXRpb25Ub0xheWVyKCp0ZXN0LT5tX2xheWVyVHJlZUhvc3Qt
PnJvb3RMYXllcigpLCAwLCAwLCAwLjUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9p
ZCBkaXNwYXRjaEFkZEFuaW1hdGlvbih2b2lkKiBzZWxmKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLQotICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0g
c3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOwotICAgICAgICBBU1NFUlQo
dGVzdCk7Ci0gICAgICAgIGlmICh0ZXN0LT5tX2ZpbmlzaGVkKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmICh0ZXN0LT5tX2xheWVyVHJlZUhvc3QgJiYgdGVzdC0+bV9sYXllclRy
ZWVIb3N0LT5yb290TGF5ZXIoKSkKLSAgICAgICAgICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9M
YXllcigqdGVzdC0+bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSwgMTAsIDAsIDAuNSwgdHJ1
ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGVBbmRD
b21taXQodm9pZCogc2VsZikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENDTGF5
ZXJUcmVlSG9zdFRlc3QqPihzZWxmKTsKLSAgICAgICAgQVNTRVJUKHRlc3QpOwotICAgICAgICBp
ZiAodGVzdC0+bV9maW5pc2hlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAo
dGVzdC0+bV9sYXllclRyZWVIb3N0KSB7Ci0gICAgICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhv
c3QtPnNldE5lZWRzQW5pbWF0ZSgpOwotICAgICAgICAgICAgdGVzdC0+bV9sYXllclRyZWVIb3N0
LT5zZXROZWVkc0NvbW1pdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQg
ZGlzcGF0Y2hTZXROZWVkc0NvbW1pdCh2b2lkKiBzZWxmKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLQotICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0g
c3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOwotICAgICAgICBBU1NFUlRf
VFJVRSh0ZXN0KTsKLSAgICAgICAgaWYgKHRlc3QtPm1fZmluaXNoZWQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgICAg
IHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21taXQoKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgdm9pZCBkaXNwYXRjaEFjcXVpcmVMYXllclRleHR1cmVzKHZvaWQqIHNlbGYpCi0gICAg
ewotICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgICAgIENDTGF5ZXJUcmVl
SG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7
Ci0gICAgICAgIEFTU0VSVF9UUlVFKHRlc3QpOwotICAgICAgICBpZiAodGVzdC0+bV9maW5pc2hl
ZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAodGVzdC0+bV9sYXllclRyZWVI
b3N0KQotICAgICAgICAgICAgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5hY3F1aXJlTGF5ZXJUZXh0
dXJlcygpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2V0TmVlZHNSZWRyYXco
dm9pZCogc2VsZikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PENDTGF5ZXJUcmVl
SG9zdFRlc3QqPihzZWxmKTsKLSAgICAgICAgQVNTRVJUX1RSVUUodGVzdCk7Ci0gICAgICAgIGlm
ICh0ZXN0LT5tX2ZpbmlzaGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0
ZXN0LT5tX2xheWVyVHJlZUhvc3QpCi0gICAgICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3Qt
PnNldE5lZWRzUmVkcmF3KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTZXRW
aXNpYmxlKHZvaWQqIHNlbGYpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ0xh
eWVyVHJlZUhvc3RUZXN0Kj4oc2VsZik7Ci0gICAgICAgIEFTU0VSVCh0ZXN0KTsKLSAgICAgICAg
aWYgKHRlc3QtPm1fZmluaXNoZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KHRlc3QtPm1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9z
dC0+c2V0VmlzaWJsZSh0cnVlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNl
dEludmlzaWJsZSh2b2lkKiBzZWxmKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLQotICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8
Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOwotICAgICAgICBBU1NFUlQodGVzdCk7Ci0gICAg
ICAgIGlmICh0ZXN0LT5tX2ZpbmlzaGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGlmICh0ZXN0LT5tX2xheWVyVHJlZUhvc3QpCi0gICAgICAgICAgICB0ZXN0LT5tX2xheWVyVHJl
ZUhvc3QtPnNldFZpc2libGUoZmFsc2UpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGRpc3Bh
dGNoQ29tcG9zaXRlKHZvaWQqIHNlbGYpCi0gICAgewotICAgICAgICBDQ0xheWVyVHJlZUhvc3RU
ZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0VGVzdCo+KHNlbGYpOwotICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgICAgICBBU1NFUlQodGVzdCk7Ci0gICAg
ICAgIHRlc3QtPm1fc2NoZWR1bGVkID0gZmFsc2U7Ci0gICAgICAgIGlmICh0ZXN0LT5tX2xheWVy
VHJlZUhvc3QgJiYgIXRlc3QtPm1fZmluaXNoZWQpCi0gICAgICAgICAgICB0ZXN0LT5tX2xheWVy
VHJlZUhvc3QtPmNvbXBvc2l0ZSgpOwotICAgIH0KLQotICAgIGNsYXNzIFRpbWVvdXRUYXNrIDog
cHVibGljIFdlYlRocmVhZDo6VGFzayB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBU
aW1lb3V0VGFzayhDQ0xheWVyVHJlZUhvc3RUZXN0KiB0ZXN0KQotICAgICAgICAgICAgOiBtX3Rl
c3QodGVzdCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjbGVhclRlc3Qo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3Rlc3QgPSAwOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdmlydHVhbCB+VGltZW91dFRhc2soKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV90
ZXN0KQotICAgICAgICAgICAgICAgIG1fdGVzdC0+Y2xlYXJUaW1lb3V0KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KG1fdGVzdCkKLSAgICAgICAgICAgICAgICBtX3Rlc3QtPnRpbWVvdXQoKTsKLSAgICAgICAgfQot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0OwotICAg
IH07Ci0KLSAgICBjbGFzcyBCZWdpblRhc2sgOiBwdWJsaWMgV2ViVGhyZWFkOjpUYXNrIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IEJlZ2luVGFzayhDQ0xheWVyVHJlZUhvc3RUZXN0
KiB0ZXN0KQotICAgICAgICAgICAgOiBtX3Rlc3QodGVzdCkKLSAgICAgICAgewotICAgICAgICB9
Ci0KLSAgICAgICAgdmlydHVhbCB+QmVnaW5UYXNrKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBydW4oKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3Rlc3QtPmRvQmVnaW5UZXN0KCk7Ci0g
ICAgICAgIH0KLSAgICBwcml2YXRlOgotICAgICAgICBDQ0xheWVyVHJlZUhvc3RUZXN0KiBtX3Rl
c3Q7Ci0gICAgfTsKLQotICAgIGNsYXNzIEVuZFRlc3RUYXNrIDogcHVibGljIFdlYlRocmVhZDo6
VGFzayB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBFbmRUZXN0VGFzayhDQ0xheWVy
VHJlZUhvc3RUZXN0KiB0ZXN0KQotICAgICAgICAgICAgOiBtX3Rlc3QodGVzdCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVhbCB+RW5kVGVzdFRhc2soKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobV90ZXN0KQotICAgICAgICAgICAgICAgIG1fdGVzdC0+Y2xlYXJF
bmRUZXN0VGFzaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjbGVhclRlc3QoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX3Rlc3QgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIHJ1bigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3Rlc3QpCi0gICAg
ICAgICAgICAgICAgbV90ZXN0LT5lbmRUZXN0KCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3QqIG1fdGVzdDsKLSAgICB9OwotCi0gICAgdmly
dHVhbCB2b2lkIHJ1blRlc3QoYm9vbCB0aHJlYWRlZCkKLSAgICB7Ci0gICAgICAgIGlmICh0aHJl
YWRlZCkgewotICAgICAgICAgICAgbV93ZWJUaHJlYWQgPSBhZG9wdFB0cihXZWJLaXQ6OlBsYXRm
b3JtOjpjdXJyZW50KCktPmNyZWF0ZVRocmVhZCgiQ0NMYXllclRyZWVIb3N0VGVzdCIpKTsKLSAg
ICAgICAgICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUobV93ZWJUaHJlYWQuZ2V0KCkpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7
Ci0KLSAgICAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgbV9t
YWluVGhyZWFkUHJveHkgPSBDQ1Njb3BlZFRocmVhZFByb3h5OjpjcmVhdGUoQ0NQcm94eTo6bWFp
blRocmVhZCgpKTsKLQotICAgICAgICBtX2JlZ2luVGFzayA9IG5ldyBCZWdpblRhc2sodGhpcyk7
Ci0gICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5w
b3N0RGVsYXllZFRhc2sobV9iZWdpblRhc2ssIDApOyAvLyBwb3N0RGVsYXllZFRhc2sgdGFrZXMg
b3duZXJzaGlwIG9mIHRoZSB0YXNrCi0gICAgICAgIG1fdGltZW91dFRhc2sgPSBuZXcgVGltZW91
dFRhc2sodGhpcyk7Ci0gICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVu
dFRocmVhZCgpLT5wb3N0RGVsYXllZFRhc2sobV90aW1lb3V0VGFzaywgNTAwMCk7Ci0gICAgICAg
IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5lbnRlclJ1bkxv
b3AoKTsKLQotICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0ICYmIG1fbGF5ZXJUcmVlSG9zdC0+
cm9vdExheWVyKCkpCi0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5z
ZXRMYXllclRyZWVIb3N0KDApOwotICAgICAgICBtX2xheWVyVHJlZUhvc3QuY2xlYXIoKTsKLQot
ICAgICAgICBpZiAobV90aW1lb3V0VGFzaykKLSAgICAgICAgICAgIG1fdGltZW91dFRhc2stPmNs
ZWFyVGVzdCgpOwotCi0gICAgICAgIGlmIChtX2VuZFRlc3RUYXNrKQotICAgICAgICAgICAgbV9l
bmRUZXN0VGFzay0+Y2xlYXJUZXN0KCk7Ci0KLSAgICAgICAgQVNTRVJUX0ZBTFNFKG1fbGF5ZXJU
cmVlSG9zdC5nZXQoKSk7Ci0gICAgICAgIG1fY2xpZW50LmNsZWFyKCk7Ci0gICAgICAgIGlmICht
X3RpbWVkT3V0KSB7Ci0gICAgICAgICAgICBGQUlMKCkgPDwgIlRlc3QgdGltZWQgb3V0IjsKLSAg
ICAgICAgICAgIFdlYkNvbXBvc2l0b3I6OnNodXRkb3duKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgYWZ0ZXJUZXN0KCk7Ci0gICAgICAgIFdlYkNvbXBvc2l0b3I6
OnNodXRkb3duKCk7Ci0gICAgfQotCi0gICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwotICAgIE93
blB0cjxNb2NrTGF5ZXJUcmVlSG9zdENsaWVudD4gbV9jbGllbnQ7Ci0gICAgT3duUHRyPENDTGF5
ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVIb3N0OwotCi1wcml2YXRlOgotICAgIGJvb2wgbV9iZWdp
bm5pbmc7Ci0gICAgYm9vbCBtX2VuZFdoZW5CZWdpblJldHVybnM7Ci0gICAgYm9vbCBtX3RpbWVk
T3V0OwotICAgIGJvb2wgbV9maW5pc2hlZDsKLSAgICBib29sIG1fc2NoZWR1bGVkOwotICAgIGJv
b2wgbV9zdGFydGVkOwotCi0gICAgT3duUHRyPFdlYlRocmVhZD4gbV93ZWJUaHJlYWQ7Ci0gICAg
UmVmUHRyPENDU2NvcGVkVGhyZWFkUHJveHk+IG1fbWFpblRocmVhZFByb3h5OwotICAgIFRpbWVv
dXRUYXNrKiBtX3RpbWVvdXRUYXNrOwotICAgIEJlZ2luVGFzayogbV9iZWdpblRhc2s7Ci0gICAg
RW5kVGVzdFRhc2sqIG1fZW5kVGVzdFRhc2s7Ci19OwotCi12b2lkIENDTGF5ZXJUcmVlSG9zdFRl
c3Q6OmRvQmVnaW5UZXN0KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1f
Y2xpZW50ID0gTW9ja0xheWVyVHJlZUhvc3RDbGllbnQ6OmNyZWF0ZSh0aGlzKTsKLQotICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
LSAgICBtX2xheWVyVHJlZUhvc3QgPSBNb2NrTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKHRoaXMsIG1f
Y2xpZW50LmdldCgpLCByb290TGF5ZXIsIG1fc2V0dGluZ3MpOwotICAgIEFTU0VSVF9UUlVFKG1f
bGF5ZXJUcmVlSG9zdCk7Ci0gICAgcm9vdExheWVyLT5zZXRMYXllclRyZWVIb3N0KG1fbGF5ZXJU
cmVlSG9zdC5nZXQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0LT5zZXRTdXJmYWNlUmVhZHkoKTsK
LQotICAgIG1fc3RhcnRlZCA9IHRydWU7Ci0gICAgbV9iZWdpbm5pbmcgPSB0cnVlOwotICAgIGJl
Z2luVGVzdCgpOwotICAgIG1fYmVnaW5uaW5nID0gZmFsc2U7Ci0gICAgaWYgKG1fZW5kV2hlbkJl
Z2luUmV0dXJucykKLSAgICAgICAgb25FbmRUZXN0KHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7
Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0VGVzdDo6ZW5kVGVzdCgpCi17Ci0gICAgbV9maW5p
c2hlZCA9IHRydWU7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgY2FsbGVkIGZyb20gdGhlIENDVGhyZWFk
LCByZS1jYWxsIGVuZFRlc3Qgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIGlmICghaXNNYWluVGhy
ZWFkKCkpCi0gICAgICAgIG1fbWFpblRocmVhZFByb3h5LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVh
ZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmVuZFRlc3QpKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgLy8gRm9yIHRoZSBjYXNlIHdoZXJlIHdlIGVuZFRlc3QgZHVyaW5nIGJlZ2luVGVz
dCgpLCBzZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQKLSAgICAgICAgLy8gdGhlIHRlc3Qgc2hv
dWxkIGVuZCB0aGUgc2Vjb25kIGJlZ2luVGVzdCByZWdhaW5zIGNvbnRyb2wuCi0gICAgICAgIGlm
IChtX2JlZ2lubmluZykKLSAgICAgICAgICAgIG1fZW5kV2hlbkJlZ2luUmV0dXJucyA9IHRydWU7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9uRW5kVGVzdChzdGF0aWNfY2FzdDx2b2lkKj4o
dGhpcykpOwotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0QWZ0
ZXJEZWxheShpbnQgZGVsYXlNaWxsaXNlY29uZHMpCi17Ci0gICAgLy8gSWYgd2UgYXJlIGNhbGxl
ZCBmcm9tIHRoZSBDQ1RocmVhZCwgcmUtY2FsbCBlbmRUZXN0IG9uIHRoZSBtYWluIHRocmVhZC4K
LSAgICBpZiAoIWlzTWFpblRocmVhZCgpKQotICAgICAgICBtX21haW5UaHJlYWRQcm94eS0+cG9z
dFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRU
ZXN0QWZ0ZXJEZWxheSwgZGVsYXlNaWxsaXNlY29uZHMpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
bV9lbmRUZXN0VGFzayA9IG5ldyBFbmRUZXN0VGFzayh0aGlzKTsKLSAgICAgICAgV2ViS2l0OjpQ
bGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3REZWxheWVkVGFzayhtX2Vu
ZFRlc3RUYXNrLCBkZWxheU1pbGxpc2Vjb25kcyk7Ci0gICAgfQotfQotCi1jbGFzcyBDQ0xheWVy
VHJlZUhvc3RUZXN0VGhyZWFkT25seSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKLXB1
YmxpYzoKLSAgICB2b2lkIHJ1blRlc3RUaHJlYWRlZCgpCi0gICAgewotICAgICAgICBDQ0xheWVy
VHJlZUhvc3RUZXN0OjpydW5UZXN0KHRydWUpOwotICAgIH0KLX07Ci0KLS8vIFNob3J0bGl2ZWQg
bGF5ZXJUcmVlSG9zdHMgc2hvdWxkbid0IGRpZS4KLWNsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RT
aG9ydGxpdmVkMSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKLXB1YmxpYzoKLSAgICBD
Q0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRlc3QoKQotICAgIHsKLSAgICAgICAgLy8gS2lsbCB0aGUgbGF5ZXJUcmVlSG9zdCBpbW1l
ZGlhdGVseS4KLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIoMCk7Ci0gICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC5jbGVhcigpOwotCi0gICAgICAgIGVuZFRlc3QoKTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKLSAgICB7Ci0gICAgfQotfTsKLQotI2Rl
ZmluZSBTSU5HTEVfQU5EX01VTFRJX1RIUkVBRF9URVNUX0YoVEVTVF9GSVhUVVJFX05BTUUpIFwK
LSAgICBURVNUX0YoVEVTVF9GSVhUVVJFX05BTUUsIHJ1blNpbmdsZVRocmVhZCkgICAgICAgICAg
ICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBydW5UZXN0KGZhbHNlKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgVEVTVF9GKFRFU1RfRklYVFVSRV9OQU1FLCBydW5NdWx0aVRo
cmVhZCkgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcnVuVGVzdCh0cnVlKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotCi1TSU5HTEVfQU5EX01VTFRJX1RI
UkVBRF9URVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFNob3J0bGl2ZWQxKQorY2xhc3MgQ0NMYXll
clRyZWVIb3N0VGVzdCA6IHB1YmxpYyBDQ1RocmVhZGVkVGVzdCB7IH07CitjbGFzcyBDQ0xheWVy
VHJlZUhvc3RUZXN0VGhyZWFkT25seSA6IHB1YmxpYyBDQ1RocmVhZGVkVGVzdFRocmVhZE9ubHkg
eyB9OwogCiAvLyBTaG9ydGxpdmVkIGxheWVyVHJlZUhvc3RzIHNob3VsZG4ndCBkaWUgd2l0aCBh
IGNvbW1pdCBpbiBmbGlnaHQuCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDIg
OiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CkBAIC0xMDc2LDcgKzM1MSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQogICAgIHsKLSAgICAgICAgQWNxdWly
ZUxheWVyVGV4dHVyZXMoKTsKKyAgICAgICAgcG9zdEFjcXVpcmVMYXllclRleHR1cmVzKCk7CiAg
ICAgICAgIHBvc3RTZXROZWVkc1JlZHJhd1RvTWFpblRocmVhZCgpOyAvLyBzaG91bGQgYmUgaW5o
aWJpdGVkIHdpdGhvdXQgYmxvY2tpbmcKICAgICAgICAgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWlu
VGhyZWFkKCk7CiAgICAgfQpAQCAtMTEzMyw3ICs0MDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgcG9zdFNldFZpc2libGVUb01haW5UaHJlYWQoZmFsc2UpOwogICAg
ICAgICAgICAgcG9zdFNldFZpc2libGVUb01haW5UaHJlYWQodHJ1ZSk7Ci0gICAgICAgICAgICBB
Y3F1aXJlTGF5ZXJUZXh0dXJlcygpOworICAgICAgICAgICAgcG9zdEFjcXVpcmVMYXllclRleHR1
cmVzKCk7CiAgICAgICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJlYWQoKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTE0NDYsNTYgKzcyMSw2IEBAIHByaXZhdGU6CiAKIFNJTkdMRV9B
TkRfTVVMVElfVEhSRUFEX1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U3luY2hyb25pemVBbmlt
YXRpb25TdGFydFRpbWVzKQogCi1jbGFzcyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RNYWtlQ3Vy
cmVudEZhaWxzIDogcHVibGljIEZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci19
OwotCi0vLyBFbnN1cmVzIHRoYXQgd2UgZG8gbm90IGFuaW1hdGUKLWNsYXNzIENDTGF5ZXJUcmVl
SG9zdFRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb24gOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7Ci1wdWJsaWM6Ci0gICAgQ0NMYXllclRyZWVIb3N0
VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFpbHNBZnRlckFkZEFuaW1hdGlvbigpCi0gICAg
ewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQotICAgIHsKLSAgICAgICAg
Ly8gVGhpcyB3aWxsIGNhdXNlIHRoZSBhbmltYXRpb24gdGltZXIgdG8gYmUgc2V0IHdoaWNoIHdp
bGwgZmlyZSBpbgotICAgICAgICAvLyBDQ1NpbmdsZVRocmVhZFByb3h5OjphbmltYXRpb25UaW1l
ckRlbGF5KCkgc2Vjb25kcy4KLSAgICAgICAgcG9zdEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9z
dEltcGwqIGxheWVyVHJlZUhvc3RJbXBsLCBkb3VibGUgbW9ub3RvbmljVGltZSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNyZWF0ZUNvbnRleHQoYm9vbCBzdWNjZWVkZWQpCi0gICAgewotICAgICAgICBFWFBFQ1Rf
RkFMU0Uoc3VjY2VlZGVkKTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugd2FpdCBDQ1Npbmds
ZVRocmVhZFByb3h5OjphbmltYXRpb25UaW1lckRlbGF5KCkgc2Vjb25kcwotICAgICAgICAvLyAo
dXNlIGNlaWwganVzdCB0byBiZSBzdXJlKS4gSWYgdGhlIHRpbWVyIHdhcyBub3QgZGlzYWJsZWQs
IHdlIHdpbGwKLSAgICAgICAgLy8gYXR0ZW1wdCB0byBjYWxsIENDU2luZ2xlVGhyZWFkUHJveHk6
OmNvbXBvc2l0ZUltbWVkaWF0ZWx5IGFuZCB0aGUKLSAgICAgICAgLy8gdGVzdCB3aWxsIGZhaWwu
Ci0gICAgICAgIGVuZFRlc3RBZnRlckRlbGF5KGNlaWwoQ0NTaW5nbGVUaHJlYWRQcm94eTo6YW5p
bWF0aW9uVGltZXJEZWxheSgpICogMTAwMCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlQ29udGV4dCgpIE9WRVJSSURFCi0gICAgewot
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHRGcm9tV2ViQ29udGV4dChhZG9wdFB0cihuZXcgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNE
TWFrZUN1cnJlbnRGYWlscyksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9z
dFdpbmRvdyk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCi0gICAgewot
ICAgIH0KLX07Ci0KLVRFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uLCBydW5TaW5nbGVUaHJlYWQpCi17Ci0gICAgcnVu
VGVzdChmYWxzZSk7Ci19Ci0KIC8vIEVuc3VyZXMgdGhhdCBtYWluIHRocmVhZCBhbmltYXRpb25z
IGhhdmUgdGhlaXIgc3RhcnQgdGltZXMgc3luY2hyb25pemVkIHdpdGggaW1wbCB0aHJlYWQgYW5p
bWF0aW9ucy4KIGNsYXNzIENDTGF5ZXJUcmVlSG9zdFRlc3RBbmltYXRpb25GaW5pc2hlZEV2ZW50
cyA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0VGhyZWFkT25seSB7CiBwdWJsaWM6CkBAIC0y
OTQwLDE0ICsyMTY1LDE3IEBAIFNJTkdMRV9BTkRfTVVMVElfVEhSRUFEX1RFU1RfRihDQ0xheWVy
VHJlZUhvc3RUZXN0RmluaXNoQWxsUmVuZGVyaW5nKQogLy8gY29ycmVjdGx5IHJlY29nbml6ZWQu
CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0TGF5ZXJBZGRlZFdpdGhBbmltYXRpb24gOiBwdWJs
aWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CiBwdWJsaWM6Ci0gICAgQ0NMYXllclRyZWVIb3N0VGVz
dExheWVyQWRkZWRXaXRoQW5pbWF0aW9uKCkgeyB9CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdExh
eWVyQWRkZWRXaXRoQW5pbWF0aW9uKCkKKyAgICAgICAgOiBtX2FkZGVkQW5pbWF0aW9uKGZhbHNl
KQorICAgIHsKKyAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKICAgICB7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShzdGF0aWNfY2FzdDxNb2NrTGF5ZXJUcmVlSG9zdCo+KGxheWVy
VHJlZUhvc3QoKSktPmRpZEFkZEFuaW1hdGlvbldhc0NhbGxlZCgpKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKG1fYWRkZWRBbmltYXRpb24pOwogCiAgICAgICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBsYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwotICAgICAgICBsYXllci0+c2V0TGF5
ZXJBbmltYXRpb25EZWxlZ2F0ZSgmbV9hbmltYXRpb25EZWxlZ2F0ZSk7CisgICAgICAgIGxheWVy
LT5zZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKHRoaXMpOwogCiAgICAgICAgIC8vIEFueSB2YWxp
ZCBDQ0FuaW1hdGlvbkN1cnZlIHdpbGwgZG8gaGVyZS4KICAgICAgICAgT3duUHRyPENDQW5pbWF0
aW9uQ3VydmU+IGN1cnZlKENDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CkBAIC0yOTU2
LDE1ICsyMTg0LDIwIEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBXZSBhZGQgdGhlIGFuaW1hdGlv
biAqYmVmb3JlKiBhdHRhY2hpbmcgdGhlIGxheWVyIHRvIHRoZSB0cmVlLgogICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5hZGRDaGlsZChsYXllcik7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKHN0YXRpY19jYXN0PE1vY2tMYXllclRyZWVIb3N0Kj4obGF5ZXJUcmVlSG9zdCgpKS0+
ZGlkQWRkQW5pbWF0aW9uV2FzQ2FsbGVkKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShtX2FkZGVk
QW5pbWF0aW9uKTsKIAogICAgICAgICBlbmRUZXN0KCk7CiAgICAgfQogCisgICAgdmlydHVhbCB2
b2lkIGRpZEFkZEFuaW1hdGlvbigpCisgICAgeworICAgICAgICBtX2FkZGVkQW5pbWF0aW9uID0g
dHJ1ZTsKKyAgICB9CisKICAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkgeyB9CiAKIHByaXZh
dGU6Ci0gICAgOjpUZXN0SG9va3MgbV9hbmltYXRpb25EZWxlZ2F0ZTsKKyAgICBib29sIG1fYWRk
ZWRBbmltYXRpb247CiB9OwogCiBTSU5HTEVfQU5EX01VTFRJX1RIUkVBRF9URVNUX0YoQ0NMYXll
clRyZWVIb3N0VGVzdExheWVyQWRkZWRXaXRoQW5pbWF0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NpbmdsZVRocmVhZFByb3h5VGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2luZ2xlVGhyZWFkUHJveHlUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40ZmU0MGYyNDE4N2NmMDFhM2ZkNGUwN2VjMzQ2ZmVlMWJlNDYwZGQ5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NpbmdsZVRocmVhZFBy
b3h5VGVzdC5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKworI2luY2x1
ZGUgIkNDVGhyZWFkZWRUZXN0LmgiCisjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VXZWJHcmFwaGlj
c0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkZha2VXZWJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlRocmVhZC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7CisKK2NsYXNzIEZha2VXZWJHcmFw
aGljc0NvbnRleHQzRE1ha2VDdXJyZW50RmFpbHMgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29u
dGV4dDNEIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkg
eyByZXR1cm4gZmFsc2U7IH0KK307CisKK2NsYXNzIENDU2luZ2xlVGhyZWFkUHJveHlUZXN0SW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uIDogcHVibGljIENDVGhy
ZWFkZWRUZXN0IHsKK3B1YmxpYzoKKyAgICBDQ1NpbmdsZVRocmVhZFByb3h5VGVzdEluaXRpYWxp
emVMYXllclJlbmRlcmVyRmFpbHNBZnRlckFkZEFuaW1hdGlvbigpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxs
IGNhdXNlIHRoZSBhbmltYXRpb24gdGltZXIgdG8gYmUgc2V0IHdoaWNoIHdpbGwgZmlyZSBpbgor
ICAgICAgICAvLyBDQ1NpbmdsZVRocmVhZFByb3h5OjphbmltYXRpb25UaW1lckRlbGF5KCkgc2Vj
b25kcy4KKyAgICAgICAgcG9zdEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVy
VHJlZUhvc3RJbXBsLCBkb3VibGUgbW9ub3RvbmljVGltZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUNv
bnRleHQoYm9vbCBzdWNjZWVkZWQpCisgICAgeworICAgICAgICBFWFBFQ1RfRkFMU0Uoc3VjY2Vl
ZGVkKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugd2FpdCBDQ1NpbmdsZVRocmVhZFByb3h5
OjphbmltYXRpb25UaW1lckRlbGF5KCkgc2Vjb25kcworICAgICAgICAvLyAodXNlIGNlaWwganVz
dCB0byBiZSBzdXJlKS4gSWYgdGhlIHRpbWVyIHdhcyBub3QgZGlzYWJsZWQsIHdlIHdpbGwKKyAg
ICAgICAgLy8gYXR0ZW1wdCB0byBjYWxsIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUlt
bWVkaWF0ZWx5IGFuZCB0aGUKKyAgICAgICAgLy8gdGVzdCB3aWxsIGZhaWwuCisgICAgICAgIGVu
ZFRlc3RBZnRlckRlbGF5KGNlaWwoQ0NTaW5nbGVUaHJlYWRQcm94eTo6YW5pbWF0aW9uVGltZXJE
ZWxheSgpICogMTAwMCkpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY3JlYXRlQ29udGV4dCgpIE9WRVJSSURFCisgICAgeworICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2Vi
Q29udGV4dChhZG9wdFB0cihuZXcgRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNETWFrZUN1cnJlbnRG
YWlscyksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgIH0KK307CisK
K1RFU1RfRihDQ1NpbmdsZVRocmVhZFByb3h5VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFp
bHNBZnRlckFkZEFuaW1hdGlvbiwgcnVuU2luZ2xlVGhyZWFkKQoreworICAgIHJ1blRlc3QoZmFs
c2UpOworfQorCitjbGFzcyBDQ1NpbmdsZVRocmVhZFByb3h5VGVzdERpZEFkZEFuaW1hdGlvbkJl
Zm9yZUluaXRpYWxpemluZ0xheWVyUmVuZGVyZXIgOiBwdWJsaWMgQ0NUaHJlYWRlZFRlc3Qgewor
cHVibGljOgorICAgIENDU2luZ2xlVGhyZWFkUHJveHlUZXN0RGlkQWRkQW5pbWF0aW9uQmVmb3Jl
SW5pdGlhbGl6aW5nTGF5ZXJSZW5kZXJlcigpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGNhdXNlIHRoZSBh
bmltYXRpb24gdGltZXIgdG8gYmUgc2V0IHdoaWNoIHdpbGwgZmlyZSBpbgorICAgICAgICAvLyBD
Q1NpbmdsZVRocmVhZFByb3h5OjphbmltYXRpb25UaW1lckRlbGF5KCkgc2Vjb25kcy4KKyAgICAg
ICAgcG9zdERpZEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGwqLCBkb3VibGUpCisgICAg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjcmVhdGVDb250ZXh0KGJvb2wpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQW5pbWF0aW9uKCkKKyAg
ICB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSB3YWl0IENDU2luZ2xlVGhyZWFkUHJveHk6OmFu
aW1hdGlvblRpbWVyRGVsYXkoKSBzZWNvbmRzCisgICAgICAgIC8vICh1c2UgY2VpbCBqdXN0IHRv
IGJlIHN1cmUpLiBJZiB0aGUgdGltZXIgd2FzIG5vdCBkaXNhYmxlZCwgd2Ugd2lsbAorICAgICAg
ICAvLyBhdHRlbXB0IHRvIGNhbGwgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRp
YXRlbHkgYW5kIHRoZQorICAgICAgICAvLyB0ZXN0IHdpbGwgZmFpbC4KKyAgICAgICAgZW5kVGVz
dEFmdGVyRGVsYXkoY2VpbChDQ1NpbmdsZVRocmVhZFByb3h5OjphbmltYXRpb25UaW1lckRlbGF5
KCkgKiAxMDAwKSk7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjcmVhdGVDb250ZXh0KCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250
ZXh0KGFkb3B0UHRyKG5ldyBGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RNYWtlQ3VycmVudEZhaWxz
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKKworVEVT
VF9GKENDU2luZ2xlVGhyZWFkUHJveHlUZXN0RGlkQWRkQW5pbWF0aW9uQmVmb3JlSW5pdGlhbGl6
aW5nTGF5ZXJSZW5kZXJlciwgcnVuU2luZ2xlVGhyZWFkKQoreworICAgIHJ1blRlc3QoZmFsc2Up
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVk
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkZWRUZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jOWViYmExMjJmZmFlY2FiNGMwYzIwOTdlZmY3MDI4MDk0YTU2MTI2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVk
VGVzdC5jcHAKQEAgLTAsMCArMSw2NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIkNDVGhyZWFkZWRUZXN0LmgiCisKKyNpbmNsdWRlICJBbmltYXRp
b25JZFZlbmRvci5oIgorI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgorI2luY2x1
ZGUgIkNDT2NjbHVzaW9uVHJhY2tlclRlc3RDb21tb24uaCIKKyNpbmNsdWRlICJDQ1RpbGVkTGF5
ZXJUZXN0Q29tbW9uLmgiCisjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKKyNpbmNs
dWRlICJGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaCIKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiVGV4
dHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJXZWJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiV2Vi
S2l0LmgiCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRp
b25EZWxlZ2F0ZS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2NvcGVkVGhyZWFkUHJveHku
aCIKKyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NU
ZXh0dXJlVXBkYXRlci5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorI2luY2x1ZGUg
ImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJUaHJlYWQuaCIK
KyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgor
I2luY2x1ZGUgPHB1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaD4KKyNpbmNsdWRlIDxwdWJsaWMv
V2ViRmlsdGVyT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5n
IG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJLaXRUZXN0cyB7CisKK1Bhc3NPd25QdHI8
Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc+IENv
bXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpjcmVh
dGUoQXR0cmlidXRlcyBhdHRycykKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENvbXBvc2l0
b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nKGF0dHJzKSk7Cit9
CisKK1dlYkdMSWQgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJl
VHJhY2tpbmc6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIFdlYkdMSWQgdGV4dHVyZSA9IG1fdGV4
dHVyZXMuc2l6ZSgpICsgMTsKKyAgICBtX3RleHR1cmVzLmFwcGVuZCh0ZXh0dXJlKTsKKyAgICBy
ZXR1cm4gdGV4dHVyZTsKK30KKwordm9pZCBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4
dDNEV2l0aFRleHR1cmVUcmFja2luZzo6ZGVsZXRlVGV4dHVyZShXZWJHTElkIHRleHR1cmUpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVzLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIGlmIChtX3RleHR1cmVzW2ldID09IHRleHR1cmUpIHsKKyAgICAgICAgICAgIG1fdGV4
dHVyZXMucmVtb3ZlKGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJh
Y2tpbmc6OmJpbmRUZXh0dXJlKFdHQzNEZW51bSAvKiB0YXJnZXQgKi8sIFdlYkdMSWQgdGV4dHVy
ZSkKK3sKKyAgICBtX3VzZWRUZXh0dXJlcy5hZGQodGV4dHVyZSk7Cit9CisKK2ludCBDb21wb3Np
dG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6bnVtVGV4dHVy
ZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZXMuc2l6ZSgpKTsg
fQoraW50IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNr
aW5nOjp0ZXh0dXJlKGludCBpKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVzW2ldOyB9Cit2b2lk
IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpy
ZXNldFRleHR1cmVzKCkgeyBtX3RleHR1cmVzLmNsZWFyKCk7IH0KKworaW50IENvbXBvc2l0b3JG
YWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpudW1Vc2VkVGV4dHVy
ZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fdXNlZFRleHR1cmVzLnNpemUo
KSk7IH0KK2Jvb2wgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJl
VHJhY2tpbmc6OnVzZWRUZXh0dXJlKGludCB0ZXh0dXJlKSBjb25zdCB7IHJldHVybiBtX3VzZWRU
ZXh0dXJlcy5maW5kKHRleHR1cmUpICE9IG1fdXNlZFRleHR1cmVzLmVuZCgpOyB9Cit2b2lkIENv
bXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpyZXNl
dFVzZWRUZXh0dXJlcygpIHsgbV91c2VkVGV4dHVyZXMuY2xlYXIoKTsgfQorCitDb21wb3NpdG9y
RmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6Q29tcG9zaXRvckZh
a2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmcoQXR0cmlidXRlcyBhdHRy
cykgOiBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEKGF0dHJzKQoreworfQorCitQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBUZXN0SG9va3M6OmNyZWF0ZUNvbnRleHQoKQor
eworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzOworICAgIFdlYkdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJzOworICAgIHdlYkF0dHJzLmFscGhhID0g
YXR0cnMuYWxwaGE7CisKKyAgICBPd25QdHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNvbnRl
eHQgPSBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2lu
Zzo6Y3JlYXRlKHdlYkF0dHJzKTsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCh3ZWJDb250ZXh0LnJlbGVhc2Uo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKK30KKwor
UGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdEltcGw+IE1vY2tMYXllclRyZWVIb3N0SW1wbDo6
Y3JlYXRlKFRlc3RIb29rcyogdGVzdEhvb2tzLCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncywg
Q0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgTW9ja0xheWVyVHJlZUhvc3RJbXBsKHRlc3RIb29rcywgc2V0dGluZ3MsIGNsaWVudCkp
OworfQorCit2b2lkIE1vY2tMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5Db21taXQoKQoreworICAg
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KCk7CisgICAgbV90ZXN0SG9va3MtPmJl
Z2luQ29tbWl0T25DQ1RocmVhZCh0aGlzKTsKK30KKwordm9pZCBNb2NrTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbW1pdENvbXBsZXRlKCkKK3sKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRD
b21wbGV0ZSgpOworICAgIG1fdGVzdEhvb2tzLT5jb21taXRDb21wbGV0ZU9uQ0NUaHJlYWQodGhp
cyk7Cit9CisKK2Jvb2wgTW9ja0xheWVyVHJlZUhvc3RJbXBsOjpwcmVwYXJlVG9EcmF3KEZyYW1l
RGF0YSYgZnJhbWUpCit7CisgICAgYm9vbCByZXN1bHQgPSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpw
cmVwYXJlVG9EcmF3KGZyYW1lKTsKKyAgICBtX3Rlc3RIb29rcy0+cHJlcGFyZVRvRHJhd09uQ0NU
aHJlYWQodGhpcyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBNb2NrTGF5ZXJUcmVl
SG9zdEltcGw6OmRyYXdMYXllcnMoY29uc3QgRnJhbWVEYXRhJiBmcmFtZSkKK3sKKyAgICBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKGZyYW1lKTsKKyAgICBtX3Rlc3RIb29rcy0+ZHJh
d0xheWVyc09uQ0NUaHJlYWQodGhpcyk7Cit9CisKK3ZvaWQgTW9ja0xheWVyVHJlZUhvc3RJbXBs
OjphbmltYXRlTGF5ZXJzKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2FsbENsb2NrVGlt
ZSkKK3sKKyAgICBtX3Rlc3RIb29rcy0+d2lsbEFuaW1hdGVMYXllcnModGhpcywgbW9ub3Rvbmlj
VGltZSk7CisgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6YW5pbWF0ZUxheWVycyhtb25vdG9uaWNU
aW1lLCB3YWxsQ2xvY2tUaW1lKTsKKyAgICBtX3Rlc3RIb29rcy0+YW5pbWF0ZUxheWVycyh0aGlz
LCBtb25vdG9uaWNUaW1lKTsKK30KKworZG91YmxlIE1vY2tMYXllclRyZWVIb3N0SW1wbDo6bG93
RnJlcXVlbmN5QW5pbWF0aW9uSW50ZXJ2YWwoKSBjb25zdAoreworICAgIHJldHVybiAxLjAgLyA2
MDsKK30KKworTW9ja0xheWVyVHJlZUhvc3RJbXBsOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGwoVGVz
dEhvb2tzKiB0ZXN0SG9va3MsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzLCBDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgOiBDQ0xheWVyVHJlZUhvc3RJbXBsKHNldHRp
bmdzLCBjbGllbnQpCisgICAgLCBtX3Rlc3RIb29rcyh0ZXN0SG9va3MpCit7Cit9CisKKy8vIEFk
YXB0cyBDQ0xheWVyVHJlZUhvc3QgZm9yIHRlc3QuIEluamVjdHMgTW9ja0xheWVyVHJlZUhvc3RJ
bXBsLgorY2xhc3MgTW9ja0xheWVyVHJlZUhvc3QgOiBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9z
dD4gY3JlYXRlKFRlc3RIb29rcyogdGVzdEhvb2tzLCBXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RD
bGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpMYXllckNocm9taXVtPiByb290TGF5
ZXIsIGNvbnN0IFdlYkNvcmU6OkNDU2V0dGluZ3MmIHNldHRpbmdzKQorICAgIHsKKyAgICAgICAg
Ly8gRm9yIHRoZXNlIHRlc3RzLCB3ZSB3aWxsIGVuYWJsZSB0aHJlYWRlZCBhbmltYXRpb25zLgor
ICAgICAgICBDQ1NldHRpbmdzIHNldHRpbmdzQ29weSA9IHNldHRpbmdzOworICAgICAgICBzZXR0
aW5nc0NvcHkudGhyZWFkZWRBbmltYXRpb25FbmFibGVkID0gdHJ1ZTsKKworICAgICAgICBPd25Q
dHI8TW9ja0xheWVyVHJlZUhvc3Q+IGxheWVyVHJlZUhvc3QoYWRvcHRQdHIobmV3IE1vY2tMYXll
clRyZWVIb3N0KHRlc3RIb29rcywgY2xpZW50LCBzZXR0aW5nc0NvcHkpKSk7CisgICAgICAgIGJv
b2wgc3VjY2VzcyA9IGxheWVyVHJlZUhvc3QtPmluaXRpYWxpemUoKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoc3VjY2Vzcyk7CisgICAgICAgIGxheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihyb290
TGF5ZXIpOworCisgICAgICAgIC8vIExheWVyVHJlZUhvc3RJbXBsIHdvbid0IGRyYXcgaWYgaXQg
aGFzIDF4MSB2aWV3cG9ydC4KKyAgICAgICAgbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXpl
KEludFNpemUoMSwgMSkpOworCisgICAgICAgIGxheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5z
ZXRMYXllckFuaW1hdGlvbkRlbGVnYXRlKHRlc3RIb29rcyk7CisKKyAgICAgICAgcmV0dXJuIGxh
eWVyVHJlZUhvc3QucmVsZWFzZSgpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICAv
LyBGb3IgdGhlc2UgdGVzdHMsIHdlIHdpbGwgZW5hYmxlIHRocmVhZGVkIGFuaW1hdGlvbnMuCisg
ICAgICAgIENDU2V0dGluZ3MgY29weVNldHRpbmdzID0gc2V0dGluZ3MoKTsKKyAgICAgICAgY29w
eVNldHRpbmdzLnRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZCA9IHRydWU7CisgICAgICAgIHJldHVy
biBNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShtX3Rlc3RIb29rcywgY29weVNldHRpbmdz
LCBjbGllbnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRBbmltYXRpb24oKSBP
VkVSUklERQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0OjpkaWRBZGRBbmltYXRpb24o
KTsKKyAgICAgICAgbV90ZXN0SG9va3MtPmRpZEFkZEFuaW1hdGlvbigpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdChUZXN0SG9va3MqIHRlc3RIb29rcywgV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OkNDU2V0dGlu
Z3MmIHNldHRpbmdzKQorICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdChjbGllbnQsIHNldHRpbmdz
KQorICAgICAgICAsIG1fdGVzdEhvb2tzKHRlc3RIb29rcykKKyAgICB7CisgICAgfQorCisgICAg
VGVzdEhvb2tzKiBtX3Rlc3RIb29rczsKK307CisKKy8vIEltcGxlbWVudGF0aW9uIG9mIENDTGF5
ZXJUcmVlSG9zdCBjYWxsYmFjayBpbnRlcmZhY2UuCitjbGFzcyBNb2NrTGF5ZXJUcmVlSG9zdENs
aWVudCA6IHB1YmxpYyBNb2NrQ0NMYXllclRyZWVIb3N0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxNb2NrTGF5ZXJUcmVlSG9zdENsaWVudD4gY3JlYXRlKFRlc3RIb29r
cyogdGVzdEhvb2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBNb2NrTGF5
ZXJUcmVlSG9zdENsaWVudCh0ZXN0SG9va3MpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
d2lsbEJlZ2luRnJhbWUoKSBPVkVSUklERQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkQmVnaW5GcmFtZSgpIE9WRVJSSURFCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKSBPVkVSUklERQorICAg
IHsKKyAgICAgICAgbV90ZXN0SG9va3MtPnVwZGF0ZUFuaW1hdGlvbnMobW9ub3RvbmljVGltZSk7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIE9WRVJSSURFCisgICAgeworICAg
ICAgICBtX3Rlc3RIb29rcy0+bGF5b3V0KCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFw
cGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHNjYWxl
KSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV90ZXN0SG9va3MtPmFwcGx5U2Nyb2xsQW5kU2Nh
bGUoc2Nyb2xsRGVsdGEsIHNjYWxlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUNvbnRleHQzRCgpIE9WRVJSSURFCisgICAgeworICAg
ICAgICByZXR1cm4gbV90ZXN0SG9va3MtPmNyZWF0ZUNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgd2lsbENvbW1pdCgpIE9WRVJSSURFCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBkaWRDb21taXQoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV90ZXN0SG9v
a3MtPmRpZENvbW1pdCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmRE
cmF3RnJhbWUoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV90ZXN0SG9va3MtPmRpZENvbW1p
dEFuZERyYXdGcmFtZSgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVN3
YXBCdWZmZXJzKCkgT1ZFUlJJREUKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY3JlYXRlQ29udGV4dChib29sIHN1Y2NlZWRlZCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAg
IG1fdGVzdEhvb2tzLT5kaWRSZWNyZWF0ZUNvbnRleHQoc3VjY2VlZGVkKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSBPVkVSUklERQorICAgIHsKKyAgICAg
ICAgbV90ZXN0SG9va3MtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50KFRlc3RIb29rcyogdGVzdEhvb2tz
KSA6IG1fdGVzdEhvb2tzKHRlc3RIb29rcykgeyB9CisKKyAgICBUZXN0SG9va3MqIG1fdGVzdEhv
b2tzOworfTsKKworY2xhc3MgVGltZW91dFRhc2sgOiBwdWJsaWMgV2ViVGhyZWFkOjpUYXNrIHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBUaW1lb3V0VGFzayhDQ1RocmVhZGVkVGVzdCogdGVzdCkK
KyAgICAgICAgOiBtX3Rlc3QodGVzdCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjbGVhclRl
c3QoKQorICAgIHsKKyAgICAgICAgbV90ZXN0ID0gMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5U
aW1lb3V0VGFzaygpCisgICAgeworICAgICAgICBpZiAobV90ZXN0KQorICAgICAgICAgICAgbV90
ZXN0LT5jbGVhclRpbWVvdXQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkKKyAg
ICB7CisgICAgICAgIGlmIChtX3Rlc3QpCisgICAgICAgICAgICBtX3Rlc3QtPnRpbWVvdXQoKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NUaHJlYWRlZFRlc3QqIG1fdGVzdDsKK307CisKK2Ns
YXNzIEJlZ2luVGFzayA6IHB1YmxpYyBXZWJUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIGV4
cGxpY2l0IEJlZ2luVGFzayhDQ1RocmVhZGVkVGVzdCogdGVzdCkKKyAgICAgICAgOiBtX3Rlc3Qo
dGVzdCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+QmVnaW5UYXNrKCkgeyB9CisgICAg
dmlydHVhbCB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBtX3Rlc3QtPmRvQmVnaW5UZXN0KCk7
CisgICAgfQorcHJpdmF0ZToKKyAgICBDQ1RocmVhZGVkVGVzdCogbV90ZXN0OworfTsKKworY2xh
c3MgRW5kVGVzdFRhc2sgOiBwdWJsaWMgV2ViVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBFbmRUZXN0VGFzayhDQ1RocmVhZGVkVGVzdCogdGVzdCkKKyAgICAgICAgOiBtX3Rl
c3QodGVzdCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RW5kVGVzdFRhc2soKQorICAg
IHsKKyAgICAgICAgaWYgKG1fdGVzdCkKKyAgICAgICAgICAgIG1fdGVzdC0+Y2xlYXJFbmRUZXN0
VGFzaygpOworICAgIH0KKworICAgIHZvaWQgY2xlYXJUZXN0KCkKKyAgICB7CisgICAgICAgIG1f
dGVzdCA9IDA7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJ1bigpCisgICAgeworICAgICAg
ICBpZiAobV90ZXN0KQorICAgICAgICAgICAgbV90ZXN0LT5lbmRUZXN0KCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIENDVGhyZWFkZWRUZXN0KiBtX3Rlc3Q7Cit9OworCitDQ1RocmVhZGVkVGVz
dDo6Q0NUaHJlYWRlZFRlc3QoKQorICAgIDogbV9iZWdpbm5pbmcoZmFsc2UpCisgICAgLCBtX2Vu
ZFdoZW5CZWdpblJldHVybnMoZmFsc2UpCisgICAgLCBtX3RpbWVkT3V0KGZhbHNlKQorICAgICwg
bV9maW5pc2hlZChmYWxzZSkKKyAgICAsIG1fc2NoZWR1bGVkKGZhbHNlKQorICAgICwgbV9zdGFy
dGVkKGZhbHNlKQorICAgICwgbV9lbmRUZXN0VGFzaygwKQoreyB9CisKK3ZvaWQgQ0NUaHJlYWRl
ZFRlc3Q6OmVuZFRlc3QoKQoreworICAgIG1fZmluaXNoZWQgPSB0cnVlOworCisgICAgLy8gSWYg
d2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBDQ1RocmVhZCwgcmUtY2FsbCBlbmRUZXN0IG9uIHRoZSBt
YWluIHRocmVhZC4KKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICBtX21haW5UaHJl
YWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZGVkVGVz
dDo6ZW5kVGVzdCkpOworICAgIGVsc2UgeworICAgICAgICAvLyBGb3IgdGhlIGNhc2Ugd2hlcmUg
d2UgZW5kVGVzdCBkdXJpbmcgYmVnaW5UZXN0KCksIHNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhh
dAorICAgICAgICAvLyB0aGUgdGVzdCBzaG91bGQgZW5kIHRoZSBzZWNvbmQgYmVnaW5UZXN0IHJl
Z2FpbnMgY29udHJvbC4KKyAgICAgICAgaWYgKG1fYmVnaW5uaW5nKQorICAgICAgICAgICAgbV9l
bmRXaGVuQmVnaW5SZXR1cm5zID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb25F
bmRUZXN0KHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSk7CisgICAgfQorfQorCit2b2lkIENDVGhy
ZWFkZWRUZXN0OjplbmRUZXN0QWZ0ZXJEZWxheShpbnQgZGVsYXlNaWxsaXNlY29uZHMpCit7Cisg
ICAgLy8gSWYgd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBDQ1RocmVhZCwgcmUtY2FsbCBlbmRUZXN0
IG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICBt
X21haW5UaHJlYWRQcm94eS0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1Ro
cmVhZGVkVGVzdDo6ZW5kVGVzdEFmdGVyRGVsYXksIGRlbGF5TWlsbGlzZWNvbmRzKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIG1fZW5kVGVzdFRhc2sgPSBuZXcgRW5kVGVzdFRhc2sodGhpcyk7Cisg
ICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5wb3N0
RGVsYXllZFRhc2sobV9lbmRUZXN0VGFzaywgZGVsYXlNaWxsaXNlY29uZHMpOworICAgIH0KK30K
Kwordm9pZCBDQ1RocmVhZGVkVGVzdDo6cG9zdFNldE5lZWRzQW5pbWF0ZVRvTWFpblRocmVhZCgp
Cit7CisgICAgY2FsbE9uTWFpblRocmVhZChDQ1RocmVhZGVkVGVzdDo6ZGlzcGF0Y2hTZXROZWVk
c0FuaW1hdGUsIHRoaXMpOworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0Ojpwb3N0QWRkQW5pbWF0
aW9uVG9NYWluVGhyZWFkKCkKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKENDVGhyZWFkZWRUZXN0
OjpkaXNwYXRjaEFkZEFuaW1hdGlvbiwgdGhpcyk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRlZFRlc3Q6
OnBvc3RBZGRJbnN0YW50QW5pbWF0aW9uVG9NYWluVGhyZWFkKCkKK3sKKyAgICBjYWxsT25NYWlu
VGhyZWFkKENDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaEFkZEluc3RhbnRBbmltYXRpb24sIHRoaXMp
OworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0Ojpwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJl
YWQoKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NUaHJlYWRlZFRlc3Q6OmRpc3BhdGNoU2V0
TmVlZHNDb21taXQsIHRoaXMpOworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0Ojpwb3N0QWNxdWly
ZUxheWVyVGV4dHVyZXMoKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoQ0NUaHJlYWRlZFRlc3Q6
OmRpc3BhdGNoQWNxdWlyZUxheWVyVGV4dHVyZXMsIHRoaXMpOworfQorCit2b2lkIENDVGhyZWFk
ZWRUZXN0Ojpwb3N0U2V0TmVlZHNSZWRyYXdUb01haW5UaHJlYWQoKQoreworICAgIGNhbGxPbk1h
aW5UaHJlYWQoQ0NUaHJlYWRlZFRlc3Q6OmRpc3BhdGNoU2V0TmVlZHNSZWRyYXcsIHRoaXMpOwor
fQorCit2b2lkIENDVGhyZWFkZWRUZXN0Ojpwb3N0U2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0VG9N
YWluVGhyZWFkKCkKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKENDVGhyZWFkZWRUZXN0OjpkaXNw
YXRjaFNldE5lZWRzQW5pbWF0ZUFuZENvbW1pdCwgdGhpcyk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRl
ZFRlc3Q6OnBvc3RTZXRWaXNpYmxlVG9NYWluVGhyZWFkKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBj
YWxsT25NYWluVGhyZWFkKHZpc2libGUgPyBDQ1RocmVhZGVkVGVzdDo6ZGlzcGF0Y2hTZXRWaXNp
YmxlIDogQ0NUaHJlYWRlZFRlc3Q6OmRpc3BhdGNoU2V0SW52aXNpYmxlLCB0aGlzKTsKK30KKwor
dm9pZCBDQ1RocmVhZGVkVGVzdDo6cG9zdERpZEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgpCit7
CisgICAgY2FsbE9uTWFpblRocmVhZChDQ1RocmVhZGVkVGVzdDo6ZGlzcGF0Y2hEaWRBZGRBbmlt
YXRpb24sIHRoaXMpOworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0Ojpkb0JlZ2luVGVzdCgpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2NsaWVudCA9IE1vY2tMYXllclRy
ZWVIb3N0Q2xpZW50OjpjcmVhdGUodGhpcyk7CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cm9vdExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CisgICAgbV9sYXllclRyZWVIb3N0
ID0gTW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBtX2NsaWVudC5nZXQoKSwgcm9vdExh
eWVyLCBtX3NldHRpbmdzKTsKKyAgICBBU1NFUlRfVFJVRShtX2xheWVyVHJlZUhvc3QpOworICAg
IHJvb3RMYXllci0+c2V0TGF5ZXJUcmVlSG9zdChtX2xheWVyVHJlZUhvc3QuZ2V0KCkpOworICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0U3VyZmFjZVJlYWR5KCk7CisKKyAgICBtX3N0YXJ0ZWQgPSB0
cnVlOworICAgIG1fYmVnaW5uaW5nID0gdHJ1ZTsKKyAgICBiZWdpblRlc3QoKTsKKyAgICBtX2Jl
Z2lubmluZyA9IGZhbHNlOworICAgIGlmIChtX2VuZFdoZW5CZWdpblJldHVybnMpCisgICAgICAg
IG9uRW5kVGVzdChzdGF0aWNfY2FzdDx2b2lkKj4odGhpcykpOworfQorCit2b2lkIENDVGhyZWFk
ZWRUZXN0Ojp0aW1lb3V0KCkKK3sKKyAgICBtX3RpbWVkT3V0ID0gdHJ1ZTsKKyAgICBlbmRUZXN0
KCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRlZFRlc3Q6OnNjaGVkdWxlQ29tcG9zaXRlKCkKK3sKKyAg
ICBpZiAoIW1fc3RhcnRlZCB8fCBtX3NjaGVkdWxlZCB8fCBtX2ZpbmlzaGVkKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zY2hlZHVsZWQgPSB0cnVlOworICAgIGNhbGxPbk1haW5UaHJlYWQoJkND
VGhyZWFkZWRUZXN0OjpkaXNwYXRjaENvbXBvc2l0ZSwgdGhpcyk7Cit9CisKK3ZvaWQgQ0NUaHJl
YWRlZFRlc3Q6Om9uRW5kVGVzdCh2b2lkKiBzZWxmKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCkt
PmV4aXRSdW5Mb29wKCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRlZFRlc3Q6OmRpc3BhdGNoU2V0TmVl
ZHNBbmltYXRlKHZvaWQqIHNlbGYpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwor
ICAgIENDVGhyZWFkZWRUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NUaHJlYWRlZFRlc3QqPihz
ZWxmKTsKKyAgICBBU1NFUlQodGVzdCk7CisgICAgaWYgKHRlc3QtPm1fZmluaXNoZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICh0ZXN0LT5tX2xheWVyVHJlZUhvc3QpCisgICAgICAgIHRl
c3QtPm1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNBbmltYXRlKCk7Cit9CisKK3ZvaWQgQ0NUaHJl
YWRlZFRlc3Q6OmRpc3BhdGNoQWRkSW5zdGFudEFuaW1hdGlvbih2b2lkKiBzZWxmKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBDQ1RocmVhZGVkVGVzdCogdGVzdCA9IHN0
YXRpY19jYXN0PENDVGhyZWFkZWRUZXN0Kj4oc2VsZik7CisgICAgQVNTRVJUKHRlc3QpOworICAg
IGlmICh0ZXN0LT5tX2ZpbmlzaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodGVzdC0+
bV9sYXllclRyZWVIb3N0ICYmIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkpCisg
ICAgICAgIGFkZE9wYWNpdHlUcmFuc2l0aW9uVG9MYXllcigqdGVzdC0+bV9sYXllclRyZWVIb3N0
LT5yb290TGF5ZXIoKSwgMCwgMCwgMC41LCBmYWxzZSk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRlZFRl
c3Q6OmRpc3BhdGNoQWRkQW5pbWF0aW9uKHZvaWQqIHNlbGYpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIENDVGhyZWFkZWRUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NU
aHJlYWRlZFRlc3QqPihzZWxmKTsKKyAgICBBU1NFUlQodGVzdCk7CisgICAgaWYgKHRlc3QtPm1f
ZmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0ZXN0LT5tX2xheWVyVHJlZUhv
c3QgJiYgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSkKKyAgICAgICAgYWRkT3Bh
Y2l0eVRyYW5zaXRpb25Ub0xheWVyKCp0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigp
LCAxMCwgMCwgMC41LCB0cnVlKTsKK30KKwordm9pZCBDQ1RocmVhZGVkVGVzdDo6ZGlzcGF0Y2hT
ZXROZWVkc0FuaW1hdGVBbmRDb21taXQodm9pZCogc2VsZikKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgQ0NUaHJlYWRlZFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ1Ro
cmVhZGVkVGVzdCo+KHNlbGYpOworICAgIEFTU0VSVCh0ZXN0KTsKKyAgICBpZiAodGVzdC0+bV9m
aW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9z
dCkgeworICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQW5pbWF0ZSgpOwor
ICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0KCk7CisgICAgfQor
fQorCit2b2lkIENDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaFNldE5lZWRzQ29tbWl0KHZvaWQqIHNl
bGYpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIENDVGhyZWFkZWRUZXN0
KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NUaHJlYWRlZFRlc3QqPihzZWxmKTsKKyAgICBBU1NFUlRf
VFJVRSh0ZXN0KTsKKyAgICBpZiAodGVzdC0+bV9maW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgdGVzdC0+bV9sYXllclRy
ZWVIb3N0LT5zZXROZWVkc0NvbW1pdCgpOworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0OjpkaXNw
YXRjaEFjcXVpcmVMYXllclRleHR1cmVzKHZvaWQqIHNlbGYpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIENDVGhyZWFkZWRUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NU
aHJlYWRlZFRlc3QqPihzZWxmKTsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0KTsKKyAgICBpZiAodGVz
dC0+bV9maW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRlc3QtPm1fbGF5ZXJU
cmVlSG9zdCkKKyAgICAgICAgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5hY3F1aXJlTGF5ZXJUZXh0
dXJlcygpOworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaFNldE5lZWRzUmVkcmF3
KHZvaWQqIHNlbGYpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIENDVGhy
ZWFkZWRUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q0NUaHJlYWRlZFRlc3QqPihzZWxmKTsKKyAg
ICBBU1NFUlRfVFJVRSh0ZXN0KTsKKyAgICBpZiAodGVzdC0+bV9maW5pc2hlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgdGVzdC0+
bV9sYXllclRyZWVIb3N0LT5zZXROZWVkc1JlZHJhdygpOworfQorCit2b2lkIENDVGhyZWFkZWRU
ZXN0OjpkaXNwYXRjaFNldFZpc2libGUodm9pZCogc2VsZikKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgQ0NUaHJlYWRlZFRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxDQ1Ro
cmVhZGVkVGVzdCo+KHNlbGYpOworICAgIEFTU0VSVCh0ZXN0KTsKKyAgICBpZiAodGVzdC0+bV9m
aW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRlc3QtPm1fbGF5ZXJUcmVlSG9z
dCkKKyAgICAgICAgdGVzdC0+bV9sYXllclRyZWVIb3N0LT5zZXRWaXNpYmxlKHRydWUpOworfQor
Cit2b2lkIENDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaFNldEludmlzaWJsZSh2b2lkKiBzZWxmKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBDQ1RocmVhZGVkVGVzdCogdGVz
dCA9IHN0YXRpY19jYXN0PENDVGhyZWFkZWRUZXN0Kj4oc2VsZik7CisgICAgQVNTRVJUKHRlc3Qp
OworICAgIGlmICh0ZXN0LT5tX2ZpbmlzaGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
dGVzdC0+bV9sYXllclRyZWVIb3N0KQorICAgICAgICB0ZXN0LT5tX2xheWVyVHJlZUhvc3QtPnNl
dFZpc2libGUoZmFsc2UpOworfQorCit2b2lkIENDVGhyZWFkZWRUZXN0OjpkaXNwYXRjaENvbXBv
c2l0ZSh2b2lkKiBzZWxmKQoreworICAgIENDVGhyZWFkZWRUZXN0KiB0ZXN0ID0gc3RhdGljX2Nh
c3Q8Q0NUaHJlYWRlZFRlc3QqPihzZWxmKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVCh0ZXN0KTsKKyAgICB0ZXN0LT5tX3NjaGVkdWxlZCA9IGZhbHNlOworICAgIGlm
ICh0ZXN0LT5tX2xheWVyVHJlZUhvc3QgJiYgIXRlc3QtPm1fZmluaXNoZWQpCisgICAgICAgIHRl
c3QtPm1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRlKCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRlZFRl
c3Q6OmRpc3BhdGNoRGlkQWRkQW5pbWF0aW9uKHZvaWQqIHNlbGYpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKworICAgIENDVGhyZWFkZWRUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8
Q0NUaHJlYWRlZFRlc3QqPihzZWxmKTsKKyAgICBBU1NFUlQodGVzdCk7CisgICAgaWYgKHRlc3Qt
Pm1fZmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0ZXN0LT5tX2xheWVyVHJl
ZUhvc3QpCisgICAgICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+ZGlkQWRkQW5pbWF0aW9uKCk7
Cit9CisKK3ZvaWQgQ0NUaHJlYWRlZFRlc3Q6OnJ1blRlc3QoYm9vbCB0aHJlYWRlZCkKK3sKKyAg
ICBpZiAodGhyZWFkZWQpIHsKKyAgICAgICAgbV93ZWJUaHJlYWQgPSBhZG9wdFB0cihXZWJLaXQ6
OlBsYXRmb3JtOjpjdXJyZW50KCktPmNyZWF0ZVRocmVhZCgiQ0NUaHJlYWRlZFRlc3QiKSk7Cisg
ICAgICAgIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUobV93ZWJUaHJlYWQuZ2V0KCkpOworICAg
IH0gZWxzZQorICAgICAgICBXZWJDb21wb3NpdG9yOjppbml0aWFsaXplKDApOworCisgICAgQVNT
RVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKKyAgICBtX21haW5UaHJlYWRQcm94eSA9IEND
U2NvcGVkVGhyZWFkUHJveHk6OmNyZWF0ZShDQ1Byb3h5OjptYWluVGhyZWFkKCkpOworCisgICAg
bV9iZWdpblRhc2sgPSBuZXcgQmVnaW5UYXNrKHRoaXMpOworICAgIFdlYktpdDo6UGxhdGZvcm06
OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5wb3N0RGVsYXllZFRhc2sobV9iZWdpblRhc2ss
IDApOyAvLyBwb3N0RGVsYXllZFRhc2sgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSB0YXNrCisgICAg
bV90aW1lb3V0VGFzayA9IG5ldyBUaW1lb3V0VGFzayh0aGlzKTsKKyAgICBXZWJLaXQ6OlBsYXRm
b3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9zdERlbGF5ZWRUYXNrKG1fdGltZW91
dFRhc2ssIDUwMDApOworICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRo
cmVhZCgpLT5lbnRlclJ1bkxvb3AoKTsKKworICAgIGlmIChtX2xheWVyVHJlZUhvc3QgJiYgbV9s
YXllclRyZWVIb3N0LT5yb290TGF5ZXIoKSkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290
TGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCgwKTsKKyAgICBtX2xheWVyVHJlZUhvc3QuY2xlYXIo
KTsKKworICAgIGlmIChtX3RpbWVvdXRUYXNrKQorICAgICAgICBtX3RpbWVvdXRUYXNrLT5jbGVh
clRlc3QoKTsKKworICAgIGlmIChtX2VuZFRlc3RUYXNrKQorICAgICAgICBtX2VuZFRlc3RUYXNr
LT5jbGVhclRlc3QoKTsKKworICAgIEFTU0VSVF9GQUxTRShtX2xheWVyVHJlZUhvc3QuZ2V0KCkp
OworICAgIG1fY2xpZW50LmNsZWFyKCk7CisgICAgaWYgKG1fdGltZWRPdXQpIHsKKyAgICAgICAg
RkFJTCgpIDw8ICJUZXN0IHRpbWVkIG91dCI7CisgICAgICAgIFdlYkNvbXBvc2l0b3I6OnNodXRk
b3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWZ0ZXJUZXN0KCk7CisgICAgV2Vi
Q29tcG9zaXRvcjo6c2h1dGRvd24oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0VGVzdHMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRlZFRlc3Qu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRlZFRlc3QuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43ZjM1ODE2MGE2ZDY1YjU5MjUwMWYzN2U4ZDA4YWIyODgzNjFlOGY3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVkVGVzdC5oCkBA
IC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGhyZWFkZWRUZXN0X2gK
KyNkZWZpbmUgQ0NUaHJlYWRlZFRlc3RfaAorCisjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VXZWJH
cmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25EZWxlZ2F0
ZS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1Njb3BlZFRocmVhZFByb3h5LmgiCisj
aW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ0NM
YXllckltcGw7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RD
bGllbnQ7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOworY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViVGhyZWFkOworfQorCituYW1l
c3BhY2UgV2ViS2l0VGVzdHMgeworCisvLyBVc2VkIGJ5IHRlc3Qgc3R1YnMgdG8gbm90aWZ5IHRo
ZSB0ZXN0IHdoZW4gc29tZXRoaW5nIGludGVyZXN0aW5nIGhhcHBlbnMuCitjbGFzcyBUZXN0SG9v
a3MgOiBwdWJsaWMgV2ViQ29yZTo6Q0NMYXllckFuaW1hdGlvbkRlbGVnYXRlIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGwqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGVPbkNDVGhy
ZWFkKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGwqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cHJlcGFyZVRvRHJhd09uQ0NUaHJlYWQoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbCopIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RJbXBsKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVMYXllcnMoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbCosIGRvdWJsZSBtb25vdG9uaWNUaW1lKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgd2lsbEFuaW1hdGVMYXllcnMoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1w
bCosIGRvdWJsZSBtb25vdG9uaWNUaW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3Jv
bGxBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgZmxvYXQpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlQ29u
dGV4dChib29sIHN1Y2NlZWRlZCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEFkZEFuaW1hdGlv
bigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXQoKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRlKCkgeyB9CisKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBDQ0xheWVyQW5pbWF0
aW9uRGVsZWdhdGUKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChkb3Vi
bGUgdGltZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkZpbmlzaGVkKGRv
dWJsZSB0aW1lKSB7IH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRD4gY3JlYXRlQ29udGV4dCgpOworfTsKKworY2xhc3MgVGltZW91dFRhc2s7Citj
bGFzcyBCZWdpblRhc2s7CitjbGFzcyBFbmRUZXN0VGFzazsKKworY2xhc3MgTW9ja0NDTGF5ZXJU
cmVlSG9zdENsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDbGllbnQgewor
fTsKKworLy8gVGhlIENDVGhyZWFkZWRUZXN0cyBydW5zIHdpdGggdGhlIG1haW4gbG9vcCBydW5u
aW5nLiBJdCBpbnN0YW50aWF0ZXMgYSBzaW5nbGUgTW9ja0xheWVyVHJlZUhvc3QgYW5kIGFzc29j
aWF0ZWQKKy8vIE1vY2tMYXllclRyZWVIb3N0SW1wbC9Nb2NrTGF5ZXJUcmVlSG9zdENsaWVudC4K
Ky8vCisvLyBiZWdpblRlc3QoKSBpcyBjYWxsZWQgb25jZSB0aGUgbWFpbiBtZXNzYWdlIGxvb3Ag
aXMgcnVubmluZyBhbmQgdGhlIGxheWVyIHRyZWUgaG9zdCBpcyBpbml0aWFsaXplZC4KKy8vCisv
LyBLZXkgc3RhZ2VzIG9mIHRoZSBkcmF3aW5nIGxvb3AsIGUuZy4gZHJhd2luZyBvciBjb21taXRp
bmcsIHJlZGlyZWN0IHRvIENDVGhyZWFkZWRUZXN0IG1ldGhvZHMgb2Ygc2ltaWxhciBuYW1lcy4K
Ky8vIFRvIHRyYWNrIHRoZSBjb21taXQgcHJvY2Vzcywgb3ZlcnJpZGUgdGhlc2UgZnVuY3Rpb25z
LgorLy8KKy8vIFRoZSB0ZXN0IGNvbnRpbnVlcyB1bnRpbCBzb21lb25lIGNhbGxzIGVuZFRlc3Qu
IGVuZFRlc3QgY2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkLCBidXQgYmUgYXdhcmUgdGhhdAor
Ly8gZW5kaW5nIHRoZSB0ZXN0IGlzIGFuIGFzeW5jaHJvbm91cyBwcm9jZXNzLgorY2xhc3MgQ0NU
aHJlYWRlZFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCwgcHVibGljIFRlc3RIb29rcyB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5UZXN0KCkgPSAwOworCisgICAgdm9pZCBlbmRUZXN0KCk7CisgICAgdm9pZCBlbmRU
ZXN0QWZ0ZXJEZWxheShpbnQgZGVsYXlNaWxsaXNlY29uZHMpOworCisgICAgdm9pZCBwb3N0U2V0
TmVlZHNBbmltYXRlVG9NYWluVGhyZWFkKCk7CisgICAgdm9pZCBwb3N0QWRkQW5pbWF0aW9uVG9N
YWluVGhyZWFkKCk7CisgICAgdm9pZCBwb3N0QWRkSW5zdGFudEFuaW1hdGlvblRvTWFpblRocmVh
ZCgpOworICAgIHZvaWQgcG9zdFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CisgICAgdm9p
ZCBwb3N0QWNxdWlyZUxheWVyVGV4dHVyZXMoKTsKKyAgICB2b2lkIHBvc3RTZXROZWVkc1JlZHJh
d1RvTWFpblRocmVhZCgpOworICAgIHZvaWQgcG9zdFNldE5lZWRzQW5pbWF0ZUFuZENvbW1pdFRv
TWFpblRocmVhZCgpOworICAgIHZvaWQgcG9zdFNldFZpc2libGVUb01haW5UaHJlYWQoYm9vbCB2
aXNpYmxlKTsKKyAgICB2b2lkIHBvc3REaWRBZGRBbmltYXRpb25Ub01haW5UaHJlYWQoKTsKKwor
ICAgIHZvaWQgZG9CZWdpblRlc3QoKTsKKyAgICB2b2lkIHRpbWVvdXQoKTsKKworICAgIHZvaWQg
Y2xlYXJUaW1lb3V0KCkgeyBtX3RpbWVvdXRUYXNrID0gMDsgfQorICAgIHZvaWQgY2xlYXJFbmRU
ZXN0VGFzaygpIHsgbV9lbmRUZXN0VGFzayA9IDA7IH0KKworICAgIFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdCogbGF5ZXJUcmVlSG9zdCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdC5nZXQoKTsg
fQorCitwcm90ZWN0ZWQ6CisgICAgQ0NUaHJlYWRlZFRlc3QoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBzY2hlZHVsZUNvbXBvc2l0ZSgpOworCisgICAgc3RhdGljIHZvaWQgb25FbmRUZXN0KHZvaWQq
IHNlbGYpOworCisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hTZXROZWVkc0FuaW1hdGUodm9pZCog
c2VsZik7CisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hBZGRJbnN0YW50QW5pbWF0aW9uKHZvaWQq
IHNlbGYpOworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoQWRkQW5pbWF0aW9uKHZvaWQqIHNlbGYp
OworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2V0TmVlZHNBbmltYXRlQW5kQ29tbWl0KHZvaWQq
IHNlbGYpOworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2V0TmVlZHNDb21taXQodm9pZCogc2Vs
Zik7CisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hBY3F1aXJlTGF5ZXJUZXh0dXJlcyh2b2lkKiBz
ZWxmKTsKKyAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFNldE5lZWRzUmVkcmF3KHZvaWQqIHNlbGYp
OworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoU2V0VmlzaWJsZSh2b2lkKiBzZWxmKTsKKyAgICBz
dGF0aWMgdm9pZCBkaXNwYXRjaFNldEludmlzaWJsZSh2b2lkKiBzZWxmKTsKKyAgICBzdGF0aWMg
dm9pZCBkaXNwYXRjaENvbXBvc2l0ZSh2b2lkKiBzZWxmKTsKKyAgICBzdGF0aWMgdm9pZCBkaXNw
YXRjaERpZEFkZEFuaW1hdGlvbih2b2lkKiBzZWxmKTsKKworICAgIHZpcnR1YWwgdm9pZCBydW5U
ZXN0KGJvb2wgdGhyZWFkZWQpOworCisgICAgV2ViQ29yZTo6Q0NTZXR0aW5ncyBtX3NldHRpbmdz
OworICAgIE93blB0cjxNb2NrQ0NMYXllclRyZWVIb3N0Q2xpZW50PiBtX2NsaWVudDsKKyAgICBP
d25QdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7CisKK3ByaXZh
dGU6CisgICAgYm9vbCBtX2JlZ2lubmluZzsKKyAgICBib29sIG1fZW5kV2hlbkJlZ2luUmV0dXJu
czsKKyAgICBib29sIG1fdGltZWRPdXQ7CisgICAgYm9vbCBtX2ZpbmlzaGVkOworICAgIGJvb2wg
bV9zY2hlZHVsZWQ7CisgICAgYm9vbCBtX3N0YXJ0ZWQ7CisKKyAgICBPd25QdHI8V2ViS2l0OjpX
ZWJUaHJlYWQ+IG1fd2ViVGhyZWFkOworICAgIFJlZlB0cjxXZWJDb3JlOjpDQ1Njb3BlZFRocmVh
ZFByb3h5PiBtX21haW5UaHJlYWRQcm94eTsKKyAgICBUaW1lb3V0VGFzayogbV90aW1lb3V0VGFz
azsKKyAgICBCZWdpblRhc2sqIG1fYmVnaW5UYXNrOworICAgIEVuZFRlc3RUYXNrKiBtX2VuZFRl
c3RUYXNrOworfTsKKworY2xhc3MgQ0NUaHJlYWRlZFRlc3RUaHJlYWRPbmx5IDogcHVibGljIEND
VGhyZWFkZWRUZXN0IHsKK3B1YmxpYzoKKyAgICB2b2lkIHJ1blRlc3RUaHJlYWRlZCgpCisgICAg
eworICAgICAgICBDQ1RocmVhZGVkVGVzdDo6cnVuVGVzdCh0cnVlKTsKKyAgICB9Cit9OworCisv
LyBBZGFwdHMgQ0NMYXllclRyZWVIb3N0SW1wbCBmb3IgdGVzdC4gUnVucyByZWFsIGNvZGUsIHRo
ZW4gaW52b2tlcyB0ZXN0IGhvb2tzLgorY2xhc3MgTW9ja0xheWVyVHJlZUhvc3RJbXBsIDogcHVi
bGljIFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGwgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPE1vY2tMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlKFRlc3RIb29rcyosIGNvbnN0
IFdlYkNvcmU6OkNDU2V0dGluZ3MmLCBXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50
Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0Q29tcGxldGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHJlcGFyZVRvRHJhdyhGcmFtZURh
dGEmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVycyhjb25zdCBGcmFtZURhdGEmKTsKKwor
ICAgIC8vIE1ha2UgdGhlc2UgcHVibGljLgorICAgIHR5cGVkZWYgVmVjdG9yPFdlYkNvcmU6OkND
TGF5ZXJJbXBsKj4gQ0NMYXllckxpc3Q7CisgICAgdXNpbmcgQ0NMYXllclRyZWVIb3N0SW1wbDo6
Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRlTGF5ZXJzKGRvdWJsZSBtb25vdG9uaWNUaW1lLCBkb3VibGUgd2FsbENs
b2NrVGltZSk7CisgICAgdmlydHVhbCBkb3VibGUgbG93RnJlcXVlbmN5QW5pbWF0aW9uSW50ZXJ2
YWwoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJUcmVlSG9zdEltcGwoVGVzdEhv
b2tzKiwgY29uc3QgV2ViQ29yZTo6Q0NTZXR0aW5ncyYsIFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGxDbGllbnQqKTsKKworICAgIFRlc3RIb29rcyogbV90ZXN0SG9va3M7Cit9OworCitjbGFz
cyBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZyA6
IHB1YmxpYyBXZWJLaXQ6OkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250
ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nPiBjcmVhdGUoQXR0cmlidXRlcyk7CisKKyAgICB2aXJ0
dWFsIFdlYktpdDo6V2ViR0xJZCBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlVGV4dHVyZShXZWJLaXQ6OldlYkdMSWQgdGV4dHVyZSk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYmluZFRleHR1cmUoV2ViS2l0OjpXR0MzRGVudW0gdGFyZ2V0LCBXZWJLaXQ6OldlYkdMSWQg
dGV4dHVyZSk7CisKKyAgICBpbnQgbnVtVGV4dHVyZXMoKSBjb25zdDsKKyAgICBpbnQgdGV4dHVy
ZShpbnQgdGV4dHVyZSkgY29uc3Q7CisgICAgdm9pZCByZXNldFRleHR1cmVzKCk7CisKKyAgICBp
bnQgbnVtVXNlZFRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCB1c2VkVGV4dHVyZShpbnQgdGV4
dHVyZSkgY29uc3Q7CisgICAgdm9pZCByZXNldFVzZWRUZXh0dXJlcygpOworCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVy
ZVRyYWNraW5nKEF0dHJpYnV0ZXMgYXR0cnMpOworCisgICAgVmVjdG9yPFdlYktpdDo6V2ViR0xJ
ZD4gbV90ZXh0dXJlczsKKyAgICBIYXNoU2V0PFdlYktpdDo6V2ViR0xJZCwgRGVmYXVsdEhhc2g8
V2ViS2l0OjpXZWJHTElkPjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czxXZWJLaXQ6OldlYkdMSWQ+ID4gbV91c2VkVGV4dHVyZXM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXRUZXN0cworCisjZGVmaW5lIFNJTkdMRV9BTkRfTVVMVElfVEhSRUFEX1RFU1RfRihU
RVNUX0ZJWFRVUkVfTkFNRSkgXAorICAgIFRFU1RfRihURVNUX0ZJWFRVUkVfTkFNRSwgcnVuU2lu
Z2xlVGhyZWFkKSAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJ1blRlc3QoZmFsc2UpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBURVNUX0YoVEVTVF9GSVhU
VVJFX05BTUUsIHJ1bk11bHRpVGhyZWFkKSAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBydW5U
ZXN0KHRydWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisK
KyNlbmRpZiAvLyBDQ1RocmVhZGVkVGVzdF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>